tupali/librerias/gantt/code/modules/boost.js

136 lines
37 KiB
JavaScript
Raw Permalink Normal View History

2020-05-23 20:45:54 +00:00
/*
Highcharts JS v8.1.0 (2020-05-05)
Boost module
(c) 2010-2019 Highsoft AS
Author: Torstein Honsi
License: www.highcharts.com/license
This is a Highcharts module that draws long data series on a canvas in order
to increase performance of the initial load time and tooltip responsiveness.
Compatible with WebGL compatible browsers (not IE < 11).
If this module is taken in as part of the core
- All the loading logic should be merged with core. Update styles in the
core.
- Most of the method wraps should probably be added directly in parent
methods.
Notes for boost mode
- Area lines are not drawn
- Lines are not drawn on scatter charts
- Zones and negativeColor don't work
- Dash styles are not rendered on lines.
- Columns are always one pixel wide. Don't set the threshold too low.
- Disable animations
- Marker shapes are not supported: markers will always be circles, except
heatmap series, where markers are always rectangles.
Optimizing tips for users
- Set extremes (min, max) explicitly on the axes in order for Highcharts to
avoid computing extremes.
- Set enableMouseTracking to false on the series to improve total rendering
time.
- The default threshold is set based on one series. If you have multiple,
dense series, the combined number of points drawn gets higher, and you may
want to set the threshold lower in order to use optimizations.
- If drawing large scatter charts, it's beneficial to set the marker radius
to a value less than 1. This is to add additional spacing to make the chart
more readable.
- If the value increments on both the X and Y axis aren't small, consider
setting useGPUTranslations to true on the boost settings object. If you do
this and the increments are small (e.g. datetime axis with small time
increments) it may cause rendering issues due to floating point rounding
errors, so your millage may vary.
Settings
There are two ways of setting the boost threshold:
- Per series: boost based on number of points in individual series
- Per chart: boost based on the number of series
To set the series boost threshold, set seriesBoostThreshold on the chart
object.
To set the series-specific threshold, set boostThreshold on the series
object.
In addition, the following can be set in the boost object:
{
//Wether or not to use alpha blending
useAlpha: boolean - default: true
//Set to true to perform translations on the GPU.
//Much faster, but may cause rendering issues
//when using values far from 0 due to floating point
//rounding issues
useGPUTranslations: boolean - default: false
//Use pre-allocated buffers, much faster,
//but may cause rendering issues with some data sets
usePreallocated: boolean - default: false
}
*/
(function(c){"object"===typeof module&&module.exports?(c["default"]=c,module.exports=c):"function"===typeof define&&define.amd?define("highcharts/modules/boost",["highcharts"],function(m){c(m);c.Highcharts=m;return c}):c("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(c){function m(c,E,f,C){c.hasOwnProperty(E)||(c[E]=C.apply(null,f))}c=c?c._modules:{};m(c,"modules/boost/boostables.js",[],function(){return"area arearange column columnrange bar line scatter heatmap bubble treemap".split(" ")});
m(c,"modules/boost/boostable-map.js",[c["modules/boost/boostables.js"]],function(c){var k={};c.forEach(function(c){k[c]=1});return k});m(c,"modules/boost/wgl-shader.js",[c["parts/Utilities.js"]],function(c){var k=c.clamp,f=c.error,C=c.pick;return function(d){function c(){v.length&&f("[highcharts boost] shader error - "+v.join("\n"))}function w(b,a){var g=d.createShader("vertex"===a?d.VERTEX_SHADER:d.FRAGMENT_SHADER);d.shaderSource(g,b);d.compileShader(g);return d.getShaderParameter(g,d.COMPILE_STATUS)?
g:(v.push("when compiling "+a+" shader:\n"+d.getShaderInfoLog(g)),!1)}function r(){function g(a){return d.getUniformLocation(b,a)}var k=w("#version 100\n#define LN10 2.302585092994046\nprecision highp float;\nattribute vec4 aVertexPosition;\nattribute vec4 aColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform mat4 uPMatrix;\nuniform float pSize;\nuniform float translatedThreshold;\nuniform bool hasThreshold;\nuniform bool skipTranslation;\nuniform float xAxisTrans;\nuniform float xAxisMin;\nuniform float xAxisMinPad;\nuniform float xAxisPointRange;\nuniform float xAxisLen;\nuniform bool xAxisPostTranslate;\nuniform float xAxisOrdinalSlope;\nuniform float xAxisOrdinalOffset;\nuniform float xAxisPos;\nuniform bool xAxisCVSCoord;\nuniform bool xAxisIsLog;\nuniform bool xAxisReversed;\nuniform float yAxisTrans;\nuniform float yAxisMin;\nuniform float yAxisMinPad;\nuniform float yAxisPointRange;\nuniform float yAxisLen;\nuniform bool yAxisPostTranslate;\nuniform float yAxisOrdinalSlope;\nuniform float yAxisOrdinalOffset;\nuniform float yAxisPos;\nuniform bool yAxisCVSCoord;\nuniform bool yAxisIsLog;\nuniform bool yAxisReversed;\nuniform bool isBubble;\nuniform bool bubbleSizeByArea;\nuniform float bubbleZMin;\nuniform float bubbleZMax;\nuniform float bubbleZThreshold;\nuniform float bubbleMinSize;\nuniform float bubbleMaxSize;\nuniform bool bubbleSizeAbs;\nuniform bool isInverted;\nfloat bubbleRadius(){\nfloat value = aVertexPosition.w;\nfloat zMax = bubbleZMax;\nfloat zMin = bubbleZMin;\nfloat radius = 0.0;\nfloat pos = 0.0;\nfloat zRange = zMax - zMin;\nif (bubbleSizeAbs){\nvalue = value - bubbleZThreshold;\nzMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);\nzMin = 0.0;\n}\nif (value < zMin){\nradius = bubbleZMin / 2.0 - 1.0;\n} else {\npos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;\nif (bubbleSizeByArea && pos > 0.0){\npos = sqrt(pos);\n}\nradius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;\n}\nreturn radius * 2.0;\n}\nfloat translate(float val,\nfloat pointPlacement,\nfloat localA,\nfloat localMin,\nfloat minPixelPadding,\nfloat pointRange,\nfloat len,\nbool cvsCoord,\nbool isLog,\nbool reversed\n){\nfloat sign = 1.0;\nfloat cvsOffset = 0.0;\nif (cvsCoord) {\nsign *= -1.0;\ncvsOffset = len;\n}\nif (isLog) {\nval = log(val) / LN10;\n}\nif (reversed) {\nsign *= -1.0;\ncvsOffset -= sign * len;\n}\nreturn sign * (val - localMin) * localA + cvsOffset + \n(sign * minPixelPadding);\n}\nfloat xToPixels(float value) {\nif (skipTranslation){\nreturn value;// + xAxisPos;\n}\nreturn translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;\n}\nfloat yToPixels(float value, float checkTreshold) {\nfloat v;\nif (skipTranslation){\nv = value;// + yAxisPos;\n} else {\nv = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;\nif (v > yAxisLen) {\nv = yAxisLen;\n}\n}\nif (checkTreshold > 0.0 && hasThreshold) {\nv = min(v, translatedThreshold);\n}\nreturn v;\n}\nvoid main(void) {\nif (isBubble){\ngl_PointSize = bubbleRadius();\n} else {\ngl_PointSize = pSize;\n}\nvColor = aColor;\nif (skipTranslation && isInverted) {\ngl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);\n} else if (isInverted) {\ngl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);\n} else {\ngl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);\n}\n}",
"vertex"),e=w("precision highp float;\nuniform vec4 fillColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform sampler2D uSampler;\nuniform bool isCircle;\nuniform bool hasColor;\nvoid main(void) {\nvec4 col = fillColor;\nvec4 tcol;\nif (hasColor) {\ncol = vColor;\n}\nif (isCircle) {\ntcol = texture2D(uSampler, gl_PointCoord.st);\ncol *= tcol;\nif (tcol.r < 0.0) {\ndiscard;\n} else {\ngl_FragColor = col;\n}\n} else {\ngl_FragColor = col;\n}\n}","fragment");if(!k||!e)return b=!1,
c(),!1;b=d.createProgram();d.attachShader(b,k);d.attachShader(b,e);d.linkProgram(b);if(!d.getProgramParameter(b,d.LINK_STATUS))return v.push(d.getProgramInfoLog(b)),c(),b=!1;d.useProgram(b);d.bindAttribLocation(b,0,"aVertexPosition");N=g("uPMatrix");p=g("pSize");n=g("fillColor");l=g("isBubble");D=g("bubbleSizeAbs");G=g("bubbleSizeByArea");M=g("uSampler");a=g("skipTranslation");t=g("isCircle");H=g("isInverted");return!0}function q(a,c){d&&b&&(a=h[a]=h[a]||d.getUniformLocation(b,a),d.uniform1f(a,c))}
var h={},b,N,p,n,l,D,G,a,t,H,v=[],M;return d&&!r()?!1:{psUniform:function(){return p},pUniform:function(){return N},fillColorUniform:function(){return n},setBubbleUniforms:function(a,c,e){var g=a.options,p=Number.MAX_VALUE,H=-Number.MAX_VALUE;d&&b&&"bubble"===a.type&&(p=C(g.zMin,k(c,!1===g.displayNegative?g.zThreshold:-Number.MAX_VALUE,p)),H=C(g.zMax,Math.max(H,e)),d.uniform1i(l,1),d.uniform1i(t,1),d.uniform1i(G,"width"!==a.options.sizeBy),d.uniform1i(D,a.options.sizeByAbsoluteValue),q("bubbleZMin",
p),q("bubbleZMax",H),q("bubbleZThreshold",a.options.zThreshold),q("bubbleMinSize",a.minPxSize),q("bubbleMaxSize",a.maxPxSize))},bind:function(){d&&b&&d.useProgram(b)},program:function(){return b},create:r,setUniform:q,setPMatrix:function(a){d&&b&&d.uniformMatrix4fv(N,!1,a)},setColor:function(a){d&&b&&d.uniform4f(n,a[0]/255,a[1]/255,a[2]/255,a[3])},setPointSize:function(a){d&&b&&d.uniform1f(p,a)},setSkipTranslation:function(g){d&&b&&d.uniform1i(a,!0===g?1:0)},setTexture:function(a){d&&b&&d.uniform1i(M,
a)},setDrawAsCircle:function(a){d&&b&&d.uniform1i(t,a?1:0)},reset:function(){d&&b&&(d.uniform1i(l,0),d.uniform1i(t,0))},setInverted:function(a){d&&b&&d.uniform1i(H,a)},destroy:function(){d&&b&&(d.deleteProgram(b),b=!1)}}}});m(c,"modules/boost/wgl-vbuffer.js",[],function(){return function(c,E,f){function k(){d&&(c.deleteBuffer(d),A=d=!1);q=0;w=f||2;h=[]}var d=!1,A=!1,w=f||2,r=!1,q=0,h;return{destroy:k,bind:function(){if(!d)return!1;c.vertexAttribPointer(A,w,c.FLOAT,!1,0,0)},data:h,build:function(b,
f,p){var n;h=b||[];if(!(h&&0!==h.length||r))return k(),!1;w=p||w;d&&c.deleteBuffer(d);r||(n=new Float32Array(h));d=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,d);c.bufferData(c.ARRAY_BUFFER,r||n,c.STATIC_DRAW);A=c.getAttribLocation(E.program(),f);c.enableVertexAttribArray(A);return!0},render:function(b,k,p){var n=r?r.length:h.length;if(!d||!n)return!1;if(!b||b>n||0>b)b=0;if(!k||k>n)k=n;c.drawArrays(c[(p||"points").toUpperCase()],b/w,(k-b)/w);return!0},allocate:function(b){q=-1;r=new Float32Array(4*
b)},push:function(b,c,d,n){r&&(r[++q]=b,r[++q]=c,r[++q]=d,r[++q]=n)}}}});m(c,"modules/boost/wgl-renderer.js",[c["parts/Globals.js"],c["modules/boost/wgl-shader.js"],c["modules/boost/wgl-vbuffer.js"],c["parts/Color.js"],c["parts/Utilities.js"]],function(c,E,f,C,d){var k=C.parse,w=d.isNumber,r=d.isObject,q=d.merge,h=d.objectEach,b=d.pick,N=c.win.document;return function(d){function p(a){if(a.isSeriesBoosting){var b=!!a.options.stacking;var R=a.xData||a.options.xData||a.processedXData;b=(b?a.data:R||
a.options.data).length;"treemap"===a.type?b*=12:"heatmap"===a.type?b*=6:U[a.type]&&(b*=2);return b}return 0}function l(){e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function D(a,b){function c(a){a&&(b.colorData.push(a[0]),b.colorData.push(a[1]),b.colorData.push(a[2]),b.colorData.push(a[3]))}function e(a,b,e,g,d){c(d);z.usePreallocated?A.push(a,b,e?1:0,g||1):(O.push(a),O.push(b),O.push(e?1:0),O.push(g||1))}function g(){b.segments.length&&(b.segments[b.segments.length-1].to=O.length)}function d(){b.segments.length&&
b.segments[b.segments.length-1].from===O.length||(g(),b.segments.push({from:O.length}))}function p(a,b,g,d,y){c(y);e(a+g,b);c(y);e(a,b);c(y);e(a,b+d);c(y);e(a,b+d);c(y);e(a+g,b+d);c(y);e(a+g,b)}function t(a,c){z.useGPUTranslations||(b.skipTranslation=!0,a.x=m.toPixels(a.x,!0),a.y=q.toPixels(a.y,!0));c?O=[a.x,a.y,0,2].concat(O):e(a.x,a.y,0,2)}var R=a.pointArrayMap&&"low,high"===a.pointArrayMap.join(","),H=a.chart,y=a.options,n=!!y.stacking,w=y.data,l=a.xAxis.getExtremes(),v=l.min;l=l.max;var h=a.yAxis.getExtremes(),
M=h.min;h=h.max;var f=a.xData||y.xData||a.processedXData,G=a.yData||y.yData||a.processedYData,D=a.zData||y.zData||a.processedZData,q=a.yAxis,m=a.xAxis,E=a.chart.plotWidth,N=!f||0===f.length,K=y.connectNulls,u=a.points||!1,J=!1,L=!1,S;f=n?a.data:f||w;var P={x:Number.MAX_VALUE,y:0},Q={x:-Number.MAX_VALUE,y:0},Y=0,la=!1,I=-1,T=!1,W=!1,ba="undefined"===typeof H.index,ha=!1,ia=!1;var x=!1;var va=U[a.type],ja=!1,ra=!0,sa=!0,aa=y.zones||!1,X=!1,ta=y.threshold,ka=!1;if(!(y.boostData&&0<y.boostData.length)){y.gapSize&&
(ka="value"!==y.gapUnit?y.gapSize*a.closestPointRange:y.gapSize);aa&&(aa.some(function(a){return"undefined"===typeof a.value?(X=new C(a.color),!0):!1}),X||(X=a.pointAttribs&&a.pointAttribs().fill||a.color,X=new C(X)));H.inverted&&(E=a.chart.plotHeight);a.closestPointRangePx=Number.MAX_VALUE;d();if(u&&0<u.length)b.skipTranslation=!0,b.drawMode="triangles",u[0].node&&u[0].node.levelDynamic&&u.sort(function(a,b){if(a.node){if(a.node.levelDynamic>b.node.levelDynamic)return 1;if(a.node.levelDynamic<b.node.levelDynamic)return-1}return 0}),
u.forEach(function(b){var e=b.plotY;if("undefined"!==typeof e&&!isNaN(e)&&null!==b.y){e=b.shapeArgs;var c=H.styledMode?b.series.colorAttribs(b):c=b.series.pointAttribs(b);b=c["stroke-width"]||0;x=k(c.fill).rgba;x[0]/=255;x[1]/=255;x[2]/=255;"treemap"===a.type&&(b=b||1,S=k(c.stroke).rgba,S[0]/=255,S[1]/=255,S[2]/=255,p(e.x,e.y,e.width,e.height,S),b/=2);"heatmap"===a.type&&H.inverted&&(e.x=m.len-e.x,e.y=q.len-e.y,e.width=-e.width,e.height=-e.height);p(e.x+b,e.y+b,e.width-2*b,e.height-2*b,x)}});else{for(;I<
f.length-1;){var F=f[++I];if(ba)break;u=w&&w[I];!N&&r(u,!0)&&u.color&&(x=k(u.color).rgba,x[0]/=255,x[1]/=255,x[2]/=255);if(N){u=F[0];var B=F[1];f[I+1]&&(W=f[I+1][0]);f[I-1]&&(T=f[I-1][0]);if(3<=F.length){var ua=F[2];F[2]>b.zMax&&(b.zMax=F[2]);F[2]<b.zMin&&(b.zMin=F[2])}}else u=F,B=G[I],f[I+1]&&(W=f[I+1]),f[I-1]&&(T=f[I-1]),D&&D.length&&(ua=D[I],D[I]>b.zMax&&(b.zMax=D[I]),D[I]<b.zMin&&(b.zMin=D[I]));if(K||null!==u&&null!==B){W&&W>=v&&W<=l&&(ha=!0);T&&T>=v&&T<=l&&(ia=!0);if(R){N&&(B=F.slice(1,3));var ca=
B[0];B=B[1]}else n&&(u=F.x,B=F.stackY,ca=B-F.y);null!==M&&"undefined"!==typeof M&&null!==h&&"undefined"!==typeof h&&(ra=B>=M&&B<=h);u>l&&Q.x<l&&(Q.x=u,Q.y=B);u<v&&P.x>v&&(P.x=u,P.y=B);if(null!==B||!K)if(null!==B&&(ra||ha||ia)){if((W>=v||u>=v)&&(T<=l||u<=l)&&(ja=!0),ja||ha||ia){ka&&u-T>ka&&d();aa&&(x=X.rgba,aa.some(function(a,b){b=aa[b-1];if("undefined"!==typeof a.value&&B<=a.value){if(!b||B>=b.value)x=k(a.color).rgba;return!0}return!1}),x[0]/=255,x[1]/=255,x[2]/=255);if(!z.useGPUTranslations&&(b.skipTranslation=
!0,u=m.toPixels(u,!0),B=q.toPixels(B,!0),u>E&&"points"===b.drawMode))continue;if(va){F=ca;if(!1===ca||"undefined"===typeof ca)F=0>B?B:0;R||n||(F=Math.max(null===ta?M:ta,M));z.useGPUTranslations||(F=q.toPixels(F,!0));e(u,F,0,0,x)}b.hasMarkers&&ja&&!1!==J&&(a.closestPointRangePx=Math.min(a.closestPointRangePx,Math.abs(u-J)));!z.useGPUTranslations&&!z.usePreallocated&&J&&1>Math.abs(u-J)&&L&&1>Math.abs(B-L)?z.debug.showSkipSummary&&++Y:(y.step&&!sa&&e(u,L,0,2,x),e(u,B,0,"bubble"===a.type?ua||1:2,x),J=
u,L=B,la=!0,sa=!1)}}else d()}else d()}z.debug.showSkipSummary&&console.log("skipped points:",Y);la||!1===K||"line_strip"!==a.drawMode||(P.x<Number.MAX_VALUE&&t(P,!0),Q.x>-Number.MAX_VALUE&&t(Q))}g()}}function G(){K=[];Q.data=O=[];Y=[];A&&A.destroy()}function a(a){g&&(g.setUniform("xAxisTrans",a.transA),g.setUniform("xAxisMin",a.min),g.setUniform("xAxisMinPad",a.minPixelPadding),g.setUniform("xAxisPointRange",a.pointRange),g.setUniform("xAxisLen",a.len),g.setUniform("xAxisPos",a.pos),g.setUniform("xAxisCVSCoord",
!a.horiz),g.setUniform("xAxisIsLog",!!a.logarithmic),g.setUniform("xAxisReversed",!!a.reversed))}function t(a){g&&(g.setUniform("yAxisTrans",a.transA),g.setUniform("yAxisMin",a.min),g.setUniform("yAxisMinPad",a.minPixelPadding),g.setUniform("yAxisPointRange",a.pointRange),g.setUniform("yAxisLen",a.len),g.setUniform("yAxisPos",a.pos),g.setUniform("yAxisCVSCoord",!a.horiz),g.setUniform("yAxisIsLog",!!a.logarithmic),g.setUniform("yAxisReversed",!!a.reversed))}function H(a,b){g.setUniform("hasThreshold",
a);g.setUniform("translatedThreshold",b)}function v(p){if(p)m=p.chartWidth||800,J=p.chartHeight||400;else return!1;if(!(e&&m&&J&&g))return!1;z.debug.timeRendering&&console.time("gl rendering");e.canvas.width=m;e.canvas.height=J;g.bind();e.viewport(0,0,m,J);g.setPMatrix([2/m,0,0,0,0,-(2/J),0,0,0,0,-2,0,-1,1,-1,1]);1<z.lineWidth&&!c.isMS&&e.lineWidth(z.lineWidth);A.build(Q.data,"aVertexPosition",4);A.bind();g.setInverted(p.inverted);K.forEach(function(c,d){var n=c.series.options,l=n.marker;var v="undefined"!==
typeof n.lineWidth?n.lineWidth:1;var h=n.threshold,M=w(h),D=c.series.yAxis.getThreshold(h);h=b(n.marker?n.marker.enabled:null,c.series.xAxis.isRadial?!0:null,c.series.closestPointRangePx>2*((n.marker?n.marker.radius:10)||10));l=L[l&&l.symbol||c.series.symbol]||L.circle;if(!(0===c.segments.length||c.segmentslength&&c.segments[0].from===c.segments[0].to)){l.isReady&&(e.bindTexture(e.TEXTURE_2D,l.handle),g.setTexture(l.handle));p.styledMode?l=c.series.markerGroup&&c.series.markerGroup.getStyle("fill"):
(l=c.series.pointAttribs&&c.series.pointAttribs().fill||c.series.color,n.colorByPoint&&(l=c.series.chart.options.colors[d]));c.series.fillOpacity&&n.fillOpacity&&(l=(new C(l)).setOpacity(b(n.fillOpacity,1)).get());l=k(l).rgba;z.useAlpha||(l[3]=1);"lines"===c.drawMode&&z.useAlpha&&1>l[3]&&(l[3]/=10);"add"===n.boostBlending?(e.blendFunc(e.SRC_ALPHA,e.ONE),e.blendEquation(e.FUNC_ADD)):"mult"===n.boostBlending||"multiply"===n.boostBlending?e.blendFunc(e.DST_COLOR,e.ZERO):"darken"===n.boostBlending?(e.blendFunc(e.ONE,
e.ONE),e.blendEquation(e.FUNC_MIN)):e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA);g.reset();0<c.colorData.length&&(g.setUniform("hasColor",1),d=f(e,g),d.build(c.colorData,"aColor",4),d.bind());g.setColor(l);a(c.series.xAxis);t(c.series.yAxis);H(M,D);"points"===c.drawMode&&(n.marker&&w(n.marker.radius)?g.setPointSize(2*n.marker.radius):g.setPointSize(1));g.setSkipTranslation(c.skipTranslation);"bubble"===c.series.type&&g.setBubbleUniforms(c.series,c.zMin,c.zMax);
g.setDrawAsCircle(ba[c.series.type]||!1);if(0<v||"line_strip"!==c.drawMode)for(v=0;v<c.segments.length;v++)A.render(c.segments[v].from,c.segments[v].to,c.drawMode);if(c.hasMarkers&&h)for(n.marker&&w(n.marker.radius)?g.setPointSize(2*n.marker.radius):g.setPointSize(10),g.setDrawAsCircle(!0),v=0;v<c.segments.length;v++)A.render(c.segments[v].from,c.segments[v].to,"POINTS")}});z.debug.timeRendering&&console.timeEnd("gl rendering");d&&d();G()}function M(a){l();if(a.renderer.forExport)return v(a);P?v(a):
setTimeout(function(){M(a)},1)}var g=!1,A=!1,e=!1,m=0,J=0,O=!1,Y=!1,Q={},P=!1,K=[],L={},U={column:!0,columnrange:!0,bar:!0,area:!0,arearange:!0},ba={scatter:!0,bubble:!0},z={pointSize:1,lineWidth:1,fillColor:"#AA00AA",useAlpha:!0,usePreallocated:!1,useGPUTranslations:!1,debug:{timeRendering:!1,timeSeriesProcessing:!1,timeSetup:!1,timeBufferCopy:!1,timeKDTree:!1,showSkipSummary:!1}};return Q={allocateBufferForSingleSeries:function(a){var b=0;z.usePreallocated&&(a.isSeriesBoosting&&(b=p(a)),A.allocate(b))},
pushSeries:function(a){0<K.length&&K[K.length-1].hasMarkers&&(K[K.length-1].markerTo=Y.length);z.debug.timeSeriesProcessing&&console.time("building "+a.type+" series");K.push({segments:[],markerFrom:Y.length,colorData:[],series:a,zMin:Number.MAX_VALUE,zMax:-Number.MAX_VALUE,hasMarkers:a.options.marker?!1!==a.options.marker.enabled:!1,showMarkers:!0,drawMode:{area:"lines",arearange:"lines",areaspline:"line_strip",column:"lines",columnrange:"lines",bar:"lines",line:"line_strip",scatter:"points",heatmap:"triangles",
treemap:"triangles",bubble:"points"}[a.type]||"line_strip"});D(a,K[K.length-1]);z.debug.timeSeriesProcessing&&console.timeEnd("building "+a.type+" series")},setSize:function(a,b){m===a&&J===b||!g||(m=a,J=b,g.bind(),g.setPMatrix([2/m,0,0,0,0,-(2/J),0,0,0,0,-2,0,-1,1,-1,1]))},inited:function(){return P},setThreshold:H,init:function(a,b){function c(a,b){var c={isReady:!1,texture:N.createElement("canvas"),handle:e.createTexture()},d=c.texture.getContext("2d");L[a]=c;c.texture.width=512;c.texture.height=
512;d.mozImageSmoothingEnabled=!1;d.webkitImageSmoothingEnabled=!1;d.msImageSmoothingEnabled=!1;d.imageSmoothingEnabled=!1;d.strokeStyle="rgba(255, 255, 255, 0)";d.fillStyle="#FFF";b(d);try{e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,c.handle),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,c.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),
e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),c.isReady=!0}catch(Z){}}var d=0,p=["webgl","experimental-webgl","moz-webgl","webkit-3d"];P=!1;if(!a)return!1;for(z.debug.timeSetup&&console.time("gl setup");d<p.length&&!(e=a.getContext(p[d],{}));d++);if(e)b||G();else return!1;e.enable(e.BLEND);e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA);e.disable(e.DEPTH_TEST);e.depthFunc(e.LESS);g=E(e);if(!g)return!1;A=f(e,g);c("circle",function(a){a.beginPath();a.arc(256,
256,256,0,2*Math.PI);a.stroke();a.fill()});c("square",function(a){a.fillRect(0,0,512,512)});c("diamond",function(a){a.beginPath();a.moveTo(256,0);a.lineTo(512,256);a.lineTo(256,512);a.lineTo(0,256);a.lineTo(256,0);a.fill()});c("triangle",function(a){a.beginPath();a.moveTo(0,512);a.lineTo(256,0);a.lineTo(512,512);a.lineTo(0,512);a.fill()});c("triangle-down",function(a){a.beginPath();a.moveTo(0,0);a.lineTo(256,512);a.lineTo(512,0);a.lineTo(0,0);a.fill()});P=!0;z.debug.timeSetup&&console.timeEnd("gl setup");
return!0},render:M,settings:z,valid:function(){return!1!==e},clear:l,flush:G,setXAxis:a,setYAxis:t,data:O,gl:function(){return e},allocateBuffer:function(a){var b=0;z.usePreallocated&&(a.series.forEach(function(a){a.isSeriesBoosting&&(b+=p(a))}),A.allocate(b))},destroy:function(){G();A.destroy();g.destroy();e&&(h(L,function(a){L[a].handle&&e.deleteTexture(L[a].handle)}),e.canvas.width=1,e.canvas.height=1)},setOptions:function(a){q(!0,z,a)}}}});m(c,"modules/boost/boost-attach.js",[c["parts/Globals.js"],
c["modules/boost/wgl-renderer.js"],c["parts/Utilities.js"]],function(c,m,f){var k=f.error,d=c.win.document,A=d.createElement("canvas");return function(f,r){var q=f.chartWidth,h=f.chartHeight,b=f,w=f.seriesGroup||r.group,p=d.implementation.hasFeature("www.http://w3.org/TR/SVG11/feature#Extensibility","1.1");b=f.isChartSeriesBoosting()?f:r;p=!1;b.renderTarget||(b.canvas=A,f.renderer.forExport||!p?(b.renderTarget=f.renderer.image("",0,0,q,h).addClass("highcharts-boost-canvas").add(w),b.boostClear=function(){b.renderTarget.attr({href:""})},
b.boostCopy=function(){b.boostResizeTarget();b.renderTarget.attr({href:b.canvas.toDataURL("image/png")})}):(b.renderTargetFo=f.renderer.createElement("foreignObject").add(w),b.renderTarget=d.createElement("canvas"),b.renderTargetCtx=b.renderTarget.getContext("2d"),b.renderTargetFo.element.appendChild(b.renderTarget),b.boostClear=function(){b.renderTarget.width=b.canvas.width;b.renderTarget.height=b.canvas.height},b.boostCopy=function(){b.renderTarget.width=b.canvas.width;b.renderTarget.height=b.canvas.height;
b.renderTargetCtx.drawImage(b.canvas,0,0)}),b.boostResizeTarget=function(){q=f.chartWidth;h=f.chartHeight;(b.renderTargetFo||b.renderTarget).attr({x:0,y:0,width:q,height:h}).css({pointerEvents:"none",mixedBlendMode:"normal",opacity:1});b instanceof c.Chart&&b.markerGroup.translate(f.plotLeft,f.plotTop)},b.boostClipRect=f.renderer.clipRect(),(b.renderTargetFo||b.renderTarget).clip(b.boostClipRect),b instanceof c.Chart&&(b.markerGroup=b.renderer.g().add(w),b.markerGroup.translate(r.xAxis.pos,r.yAxis.pos)));
b.canvas.width=q;b.canvas.height=h;b.boostClipRect.attr(f.getBoostClipRect(b));b.boostResizeTarget();b.boostClear();b.ogl||(b.ogl=m(function(){b.ogl.settings.debug.timeBufferCopy&&console.time("buffer copy");b.boostCopy();b.ogl.settings.debug.timeBufferCopy&&console.timeEnd("buffer copy")}),b.ogl.init(b.canvas)||k("[highcharts boost] - unable to init WebGL renderer"),b.ogl.setOptions(f.options.boost||{}),b instanceof c.Chart&&b.ogl.allocateBuffer(f));b.ogl.setSize(q,h);return b.ogl}});m(c,"modules/boost/boost-utils.js",
[c["parts/Globals.js"],c["modules/boost/boostable-map.js"],c["modules/boost/boost-attach.js"],c["parts/Utilities.js"]],function(c,m,f,C){function d(){for(var b=[],c=0;c<arguments.length;c++)b[c]=arguments[c];var d=-Number.MAX_VALUE;b.forEach(function(b){if("undefined"!==typeof b&&null!==b&&"undefined"!==typeof b.length&&0<b.length)return d=b.length,!0});return d}function k(b,c,d){b&&c.renderTarget&&c.canvas&&!(d||c.chart).isChartSeriesBoosting()&&b.render(d||c.chart)}function w(b,c){b&&c.renderTarget&&
c.canvas&&!c.chart.isChartSeriesBoosting()&&b.allocateBufferForSingleSeries(c)}function r(c,d,f,h,k,a){k=k||0;h=h||3E3;for(var t=k+h,H=!0;H&&k<t&&k<c.length;)H=d(c[k],k),++k;H&&(k<c.length?a?r(c,d,f,h,k,a):b.requestAnimationFrame?b.requestAnimationFrame(function(){r(c,d,f,h,k)}):setTimeout(function(){r(c,d,f,h,k)}):f&&f())}function q(){var c=0,d,f=["webgl","experimental-webgl","moz-webgl","webkit-3d"],h=!1;if("undefined"!==typeof b.WebGLRenderingContext)for(d=E.createElement("canvas");c<f.length;c++)try{if(h=
d.getContext(f[c]),"undefined"!==typeof h&&null!==h)return!0}catch(G){}return!1}var h=C.pick,b=c.win,E=b.document;C={patientMax:d,boostEnabled:function(b){return h(b&&b.options&&b.options.boost&&b.options.boost.enabled,!0)},shouldForceChartSeriesBoosting:function(b){var c=0,f=0,k=h(b.options.boost&&b.options.boost.allowForce,!0);if("undefined"!==typeof b.boostForceChartBoost)return b.boostForceChartBoost;if(1<b.series.length)for(var p=0;p<b.series.length;p++){var a=b.series[p];0!==a.options.boostThreshold&&
!1!==a.visible&&"heatmap"!==a.type&&(m[a.type]&&++f,d(a.processedXData,a.options.data,a.points)>=(a.options.boostThreshold||Number.MAX_VALUE)&&++c)}b.boostForceChartBoost=k&&(f===b.series.length&&0<c||5<c);return b.boostForceChartBoost},renderIfNotSeriesBoosting:k,allocateIfNotSeriesBoosting:w,eachAsync:r,hasWebGLSupport:q,pointDrawHandler:function(b){var c=!0;this.chart.options&&this.chart.options.boost&&(c="undefined"===typeof this.chart.options.boost.enabled?!0:this.chart.options.boost.enabled);
if(!c||!this.isSeriesBoosting)return b.call(this);this.chart.isBoosting=!0;if(b=f(this.chart,this))w(b,this),b.pushSeries(this);k(b,this)}};c.hasWebGLSupport=q;return C});m(c,"modules/boost/boost-init.js",[c["parts/Globals.js"],c["parts/Utilities.js"],c["modules/boost/boost-utils.js"],c["modules/boost/boost-attach.js"]],function(c,m,f,C){var d=m.addEvent,k=m.extend,w=m.fireEvent,r=m.wrap,q=c.Series,h=c.seriesTypes,b=function(){},E=f.eachAsync,p=f.pointDrawHandler,n=f.allocateIfNotSeriesBoosting,l=
f.renderIfNotSeriesBoosting,D=f.shouldForceChartSeriesBoosting,G;return function(){k(q.prototype,{renderCanvas:function(){function a(a,b){var c=!1,d="undefined"===typeof g.index,f=!0;if(!d){if(oa){var h=a[0];var t=a[1]}else h=a,t=m[b];y?(oa&&(t=a.slice(1,3)),c=t[0],t=t[1]):ma&&(h=a.x,t=a.stackY,c=t-a.y);wa||(f=t>=D&&t<=N);if(null!==t&&h>=r&&h<=A&&f)if(a=k.toPixels(h,!0),ba){if("undefined"===typeof V||a===U){y||(c=t);if("undefined"===typeof Z||t>ea)ea=t,Z=b;if("undefined"===typeof V||c<da)da=c,V=b}a!==
U&&("undefined"!==typeof V&&(t=e.toPixels(ea,!0),R=e.toPixels(da,!0),fa(a,t,Z),R!==t&&fa(a,R,V)),V=Z=void 0,U=a)}else t=Math.ceil(e.toPixels(t,!0)),fa(a,t,b)}return!d}function c(){w(d,"renderedCanvas");delete d.buildKDTree;d.buildKDTree();qa.debug.timeKDTree&&console.timeEnd("kd tree building")}var d=this,f=d.options||{},h=!1,g=d.chart,k=this.xAxis,e=this.yAxis,p=f.xData||d.processedXData,m=f.yData||d.processedYData,q=f.data;h=k.getExtremes();var r=h.min,A=h.max;h=e.getExtremes();var D=h.min,N=h.max,
L={},U,ba=!!d.sampling,z=!1!==f.enableMouseTracking,R=e.getThreshold(f.threshold),y=d.pointArrayMap&&"low,high"===d.pointArrayMap.join(","),ma=!!f.stacking,na=d.cropStart||0,wa=d.requireSorting,oa=!p,da,ea,V,Z,xa="x"===f.findNearestPointBy,pa=this.xData||this.options.xData||this.processedXData||!1,fa=function(a,b,c){a=Math.ceil(a);G=xa?a:a+","+b;z&&!L[G]&&(L[G]=!0,g.inverted&&(a=k.len-a,b=e.len-b),ya.push({x:pa?pa[na+c]:!1,clientX:a,plotX:a,plotY:b,i:na+c}))};h=C(g,d);g.isBoosting=!0;var qa=h.settings;
if(this.visible){(this.points||this.graph)&&this.destroyGraphics();g.isChartSeriesBoosting()?(this.markerGroup&&this.markerGroup!==g.markerGroup&&this.markerGroup.destroy(),this.markerGroup=g.markerGroup,this.renderTarget&&(this.renderTarget=this.renderTarget.destroy())):(this.markerGroup===g.markerGroup&&(this.markerGroup=void 0),this.markerGroup=d.plotGroup("markerGroup","markers",!0,1,g.seriesGroup));var ya=this.points=[];d.buildKDTree=b;h&&(n(h,this),h.pushSeries(d),l(h,this,g));g.renderer.forExport||
(qa.debug.timeKDTree&&console.time("kd tree building"),E(ma?d.data:p||q,a,c))}}});["heatmap","treemap"].forEach(function(a){h[a]&&r(h[a].prototype,"drawPoints",p)});h.bubble&&(delete h.bubble.prototype.buildKDTree,r(h.bubble.prototype,"markerAttribs",function(a){return this.isSeriesBoosting?!1:a.apply(this,[].slice.call(arguments,1))}));h.scatter.prototype.fill=!0;k(h.area.prototype,{fill:!0,fillOpacity:!0,sampling:!0});k(h.column.prototype,{fill:!0,sampling:!0});c.Chart.prototype.callbacks.push(function(a){d(a,
"predraw",function(){a.boostForceChartBoost=void 0;a.boostForceChartBoost=D(a);a.isBoosting=!1;!a.isChartSeriesBoosting()&&a.didBoost&&(a.didBoost=!1);a.boostClear&&a.boostClear();a.canvas&&a.ogl&&a.isChartSeriesBoosting()&&(a.didBoost=!0,a.ogl.allocateBuffer(a));a.markerGroup&&a.xAxis&&0<a.xAxis.length&&a.yAxis&&0<a.yAxis.length&&a.markerGroup.translate(a.xAxis[0].pos,a.yAxis[0].pos)});d(a,"render",function(){a.ogl&&a.isChartSeriesBoosting()&&a.ogl.render(a)})})}});m(c,"modules/boost/boost-overrides.js",
[c["parts/Globals.js"],c["parts/Point.js"],c["parts/Utilities.js"],c["modules/boost/boost-utils.js"],c["modules/boost/boostables.js"],c["modules/boost/boostable-map.js"]],function(c,m,f,C,d,A){var k=f.addEvent,r=f.error,q=f.isArray,h=f.isNumber,b=f.pick,E=f.wrap,p=C.boostEnabled,n=C.shouldForceChartSeriesBoosting;f=c.Chart;var l=c.Series,D=c.seriesTypes,G=c.getOptions().plotOptions;f.prototype.isChartSeriesBoosting=function(){return b(this.options.boost&&this.options.boost.seriesThreshold,50)<=this.series.length||
n(this)};f.prototype.getBoostClipRect=function(a){var b={x:this.plotLeft,y:this.plotTop,width:this.plotWidth,height:this.plotHeight};a===this&&this.yAxis.forEach(function(a){b.y=Math.min(a.pos,b.y);b.height=Math.max(a.pos-this.plotTop+a.len,b.height)},this);return b};l.prototype.getPoint=function(a){var c=a,d=this.xData||this.options.xData||this.processedXData||!1;!a||a instanceof this.pointClass||(c=(new this.pointClass).init(this,this.options.data[a.i],d?d[a.i]:void 0),c.category=b(this.xAxis.categories?
this.xAxis.categories[c.x]:c.x,c.x),c.dist=a.dist,c.distX=a.distX,c.plotX=a.plotX,c.plotY=a.plotY,c.index=a.i,c.isInside=this.isPointInside(a));return c};E(l.prototype,"searchPoint",function(a){return this.getPoint(a.apply(this,[].slice.call(arguments,1)))});E(m.prototype,"haloPath",function(a){var b=this.series,c=this.plotX,d=this.plotY,f=b.chart.inverted;b.isSeriesBoosting&&f&&(this.plotX=b.yAxis.len-d,this.plotY=b.xAxis.len-c);var g=a.apply(this,Array.prototype.slice.call(arguments,1));b.isSeriesBoosting&&
f&&(this.plotX=c,this.plotY=d);return g});E(l.prototype,"markerAttribs",function(a,b){var c=b.plotX,d=b.plotY,f=this.chart.inverted;this.isSeriesBoosting&&f&&(b.plotX=this.yAxis.len-d,b.plotY=this.xAxis.len-c);var g=a.apply(this,Array.prototype.slice.call(arguments,1));this.isSeriesBoosting&&f&&(b.plotX=c,b.plotY=d);return g});k(l,"destroy",function(){var a=this,b=a.chart;b.markerGroup===a.markerGroup&&(a.markerGroup=null);b.hoverPoints&&(b.hoverPoints=b.hoverPoints.filter(function(b){return b.series===
a}));b.hoverPoint&&b.hoverPoint.series===a&&(b.hoverPoint=null)});E(l.prototype,"getExtremes",function(a){return this.isSeriesBoosting&&this.hasExtremes&&this.hasExtremes()?{}:a.apply(this,Array.prototype.slice.call(arguments,1))});["translate","generatePoints","drawTracker","drawPoints","render"].forEach(function(a){function b(b){var c=this.options.stacking&&("translate"===a||"generatePoints"===a);if(!this.isSeriesBoosting||c||!p(this.chart)||"heatmap"===this.type||"treemap"===this.type||!A[this.type]||
0===this.options.boostThreshold)b.call(this);else if(this[a+"Canvas"])this[a+"Canvas"]()}E(l.prototype,a,b);"translate"===a&&"column bar arearange columnrange heatmap treemap".split(" ").forEach(function(c){D[c]&&E(D[c].prototype,a,b)})});E(l.prototype,"processData",function(a){function b(a){return c.chart.isChartSeriesBoosting()||(a?a.length:0)>=(c.options.boostThreshold||Number.MAX_VALUE)}var c=this,d=this.options.data;p(this.chart)&&A[this.type]?(b(d)&&"heatmap"!==this.type&&"treemap"!==this.type&&
!this.options.stacking&&this.hasExtremes&&this.hasExtremes(!0)||(a.apply(this,Array.prototype.slice.call(arguments,1)),d=this.processedXData),(this.isSeriesBoosting=b(d))?(d=this.getFirstValidPoint(this.options.data),h(d)||q(d)||r(12,!1,this.chart),this.enterBoost()):this.exitBoost&&this.exitBoost()):a.apply(this,Array.prototype.slice.call(arguments,1))});k(l,"hide",function(){this.canvas&&this.renderTarget&&(this.ogl&&this.ogl.clear(),this.boostClear())});l.prototype.enterBoost=function(){this.alteredByBoost=
[];["allowDG","directTouch","stickyTracking"].forEach(function(a){this.alteredByBoost.push({prop:a,val:this[a],own:Object.hasOwnProperty.call(this,a)})},this);this.directTouch=this.allowDG=!1;this.stickyTracking=!0;this.labelBySeries&&(this.labelBySeries=this.labelBySeries.destroy())};l.prototype.exitBoost=function(){(this.alteredByBoost||[]).forEach(function(a){a.own?this[a.prop]=a.val:delete this[a.prop]},this);this.boostClear&&this.boostClear()};l.prototype.hasExtremes=function(a){var b=this.options,
c=this.xAxis&&this.xAxis.options,d=this.yAxis&&this.yAxis.options,f=this.colorAxis&&this.colorAxis.options;return b.data.length>(b.boostThreshold||Number.MAX_VALUE)&&h(d.min)&&h(d.max)&&(!a||h(c.min)&&h(c.max))&&(!f||h(f.min)&&h(f.max))};l.prototype.destroyGraphics=function(){var a=this,b=this.points,c,d;if(b)for(d=0;d<b.length;d+=1)(c=b[d])&&c.destroyElements&&c.destroyElements();["graph","area","tracker"].forEach(function(b){a[b]&&(a[b]=a[b].destroy())})};d.forEach(function(a){G[a]&&(G[a].boostThreshold=
5E3,G[a].boostData=[],D[a].prototype.fillOpacity=!0)})});m(c,"modules/boost/named-colors.js",[c["parts/Color.js"]],function(c){var k={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",
cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",feldspar:"#d19275",firebrick:"#b22222",floralwhite:"#fffaf0",
forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",
lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslateblue:"#8470ff",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",
mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",
seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",violetred:"#d02090",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return c.names=k});m(c,"modules/boost/boost.js",[c["parts/Globals.js"],c["modules/boost/boost-utils.js"],
c["modules/boost/boost-init.js"],c["parts/Utilities.js"]],function(c,m,f,C){C=C.error;m=m.hasWebGLSupport;m()?f():"undefined"!==typeof c.initCanvasBoost?c.initCanvasBoost():C(26)});m(c,"masters/modules/boost.src.js",[],function(){})});
//# sourceMappingURL=boost.js.map