{ "repository_url": "https://github.com/ronelsolomon/aleoex.git", "owner": "ronelsolomon", "name": "aleoex.git", "extracted_at": "2026-03-02T22:49:04.033141", "files": { "README.md": { "content": "This project was for school, and I worked with 5 other people. Created this to show when job interviewer asked for project links.\n\n# AeoluX.ai\n\n## Table of Contents\n* [Overview](#Overview)\n* [Section Diagram](#Section-Diagram)\n* [Prerequisites](#Prerequisites)\n * [General Installation](#General-Installation)\n * [Dockerized Installation](#Dockerized-Installation)\n * [Manual Installation](#Manual-Installation)\n * [CUDA Installation](#CUDA-Installation)\n* [Running the Application](#Demo)\n * [Dockerized Demo](#Dockerized-Demo)\n * [Manual Demo](#Manual-Demo)\n* [Training and Testing](#Training-and-Testing)\n * [General Instructions](#General-TT)\n * [Dockerized Training and Testing](#Docker-TT)\n * [Manual Training and Testing](#Manual-TT)\n* [Results](#Results)\n* [Extras](#Extras)\n * [Data Visualization](#DataVis)\n * [Data Generation](#DataGen)\n * [Timings](#Timings)\n * [Experimentals](#Experimentals)\n* [Contributors](#Contributors)\n* [Credits](#Credits)\n* [Conclusion](#Conclusion)\n\n## Overview\n\nThis repository serves as the codebase for the Aeolux.ai project. AeoluX.ai is a computer vision solution dedicated to make lung diseases diagnosis a more efficient process by leveraging the potential of artificial intelligence in medical imaging. \n\nSpecifically, the project is a pulmonary pre-diagnostic web service for physicians and X-ray technicians from resource-constrained geographies. By automating chest X-rays analysis using convolutional neural networks, our models are able to detect 14 different lung anomalies on an X-ray. X-ray is the cheapest medical imaging technique globally, which is our first step to make it accessible to all. In addition, Aeolux can process data through basic local GPUS, making it accessible in all remote locations. Our service thus allows us to prioritize urgent cases and redirect patients to appropriate specialists and health services.\n\nThe figure below illustrates the basic functionality.\n\n
\n
\n
g&&!n)n=!0;else if(b>g&&n)continue;u.dataPoints[A].label&&(a.axisX.labels[b]=u.dataPoints[A].label);bc.viewPortMax&&(c.viewPortMax=b);null===e?c.viewPortMin===b&&pd.viewPortMax&&\"number\"===typeof e&&(d.viewPortMax=\ne))}}u.axisX.valueType=u.xValueType=f?\"dateTime\":\"number\"}};m.prototype._processStackedPlotUnit=function(a){if(a.dataSeriesIndexes&&!(1>a.dataSeriesIndexes.length)){for(var d=a.axisY.dataInfo,c=a.axisX.dataInfo,b,e,f=!1,l=[],u=[],A=Infinity,k=-Infinity,n=0;n c.max&&(c.max=b);if(0 x&&(x=1/x);c.minDiff>x&&1!==x&&(c.minDiff=x)}else x=b-p.dataPoints[q-1].x,0>x&&(x*=-1),c.minDiff>x&&0!==x&&(c.minDiff=x);null!==e&&null!==p.dataPoints[q-\n1].y&&(a.axisY.logarithmic?0x&&(x=1/x),d.minDiff>x&&1!==x&&(d.minDiff=x)):(x=e-p.dataPoints[q-1].y,0>x&&(x*=-1),d.minDiff>x&&0!==x&&(d.minDiff=x)))}if(b t&&!r)r=!0;else if(b>t&&r)continue;p.dataPoints[q].label&&(a.axisX.labels[b]=p.dataPoints[q].label);b c.viewPortMax&&(c.viewPortMax=b);null===p.dataPoints[q].y?c.viewPortMin===b&&hd.max&&(d.max=a),q c.viewPortMax||(a d.viewPortMax&&(d.viewPortMax=a)));for(q in u)u.hasOwnProperty(q)&&!isNaN(q)&&(a=u[q],a d.max&&(d.max=Math.max(a,k)),q c.viewPortMax||(a d.viewPortMax&&(d.viewPortMax=Math.max(a,k))))}};m.prototype._processStacked100PlotUnit=\nfunction(a){if(a.dataSeriesIndexes&&!(1>a.dataSeriesIndexes.length)){for(var d=a.axisY.dataInfo,c=a.axisX.dataInfo,b,e,f=!1,l=!1,u=!1,A=[],k=0;k c.max&&(c.max=b);if(0 t&&(t=1/t);c.minDiff>t&&1!==t&&(c.minDiff=t)}else t=b-n.dataPoints[p-1].x,0>t&&(t*=-1),c.minDiff>t&&0!==t&&(c.minDiff=t);s(e)||null===n.dataPoints[p-1].y||(a.axisY.logarithmic?0
t&&(t=1/t),d.minDiff>t&&1!==t&&(d.minDiff=t)):(t=e-n.dataPoints[p-\n1].y,0>t&&(t*=-1),d.minDiff>t&&0!==t&&(d.minDiff=t)))}if(b m&&!g)g=!0;else if(b>m&&g)continue;n.dataPoints[p].label&&(a.axisX.labels[b]=n.dataPoints[p].label);b c.viewPortMax&&(c.viewPortMax=b);null===e?c.viewPortMin===b&&re&&(u=!0),A[b]=A[b]?A[b]+Math.abs(e):\nMath.abs(e))}}n.axisX.valueType=n.xValueType=f?\"dateTime\":\"number\"}a.axisY.logarithmic?(d.max=s(d.viewPortMax)?99*Math.pow(a.axisY.logarithmBase,-0.05):Math.max(d.viewPortMax,99*Math.pow(a.axisY.logarithmBase,-0.05)),d.min=s(d.viewPortMin)?1:Math.min(d.viewPortMin,1)):l&&!u?(d.max=s(d.viewPortMax)?99:Math.max(d.viewPortMax,99),d.min=s(d.viewPortMin)?1:Math.min(d.viewPortMin,1)):l&&u?(d.max=s(d.viewPortMax)?99:Math.max(d.viewPortMax,99),d.min=s(d.viewPortMin)?-99:Math.min(d.viewPortMin,-99)):!l&&u&&\n(d.max=s(d.viewPortMax)?-1:Math.max(d.viewPortMax,-1),d.min=s(d.viewPortMin)?-99:Math.min(d.viewPortMin,-99));d.viewPortMin=d.min;d.viewPortMax=d.max;a.dataPointYSums=A}};m.prototype._processMultiYPlotUnit=function(a){if(a.dataSeriesIndexes&&!(1>a.dataSeriesIndexes.length))for(var d=a.axisY.dataInfo,c=a.axisX.dataInfo,b,e,f,l,u=!1,A=0;A c.max&&(c.max=b);f d.max&&\n(d.max=l);0 r&&(r=1/r),c.minDiff>r&&1!==r&&(c.minDiff=r)):(r=b-k.dataPoints[n-1].x,0>r&&(r*=-1),c.minDiff>r&&0!==r&&(c.minDiff=r)),e&&(null!==e[0]&&k.dataPoints[n-1].y&&null!==k.dataPoints[n-1].y[0])&&(a.axisY.logarithmic?(r=e[0]/k.dataPoints[n-1].y[0],1>r&&(r=1/r),d.minDiff>r&&1!==r&&(d.minDiff=r)):(r=e[0]-k.dataPoints[n-1].y[0],0>r&&(r*=-1),d.minDiff>r&&0!==r&&(d.minDiff=r))));if(!(b t&&!q)q=!0;else if(b>\nt&&q)continue;k.dataPoints[n].label&&(a.axisX.labels[b]=k.dataPoints[n].label);b c.viewPortMax&&(c.viewPortMax=b);if(c.viewPortMin===b&&e)for(x=0;x d.viewPortMax&&(d.viewPortMax=l))}}k.axisX.valueType=k.xValueType=u?\"dateTime\":\"number\"}};m.prototype._processSpecificPlotUnit=function(a){if(\"waterfall\"===a.type&&a.dataSeriesIndexes&&\n!(1>a.dataSeriesIndexes.length))for(var d=a.axisY.dataInfo,c=a.axisX.dataInfo,b,e,f=!1,l=0;l c.max&&(c.max=b),u.dataPointEOs[A].cumulativeSum \nd.max&&(d.max=u.dataPointEOs[A].cumulativeSum),0p&&(p=1/p),c.minDiff>p&&1!==p&&(c.minDiff=p)):(p=b-u.dataPoints[A-1].x,0>p&&(p*=-1),c.minDiff>p&&0!==p&&(c.minDiff=p)),null!==e&&null!==u.dataPoints[A-1].y&&(a.axisY.logarithmic?(e=u.dataPointEOs[A].cumulativeSum/u.dataPointEOs[A-1].cumulativeSum,1>e&&(e=1/e),d.minDiff>e&&1!==e&&(d.minDiff=e)):(e=u.dataPointEOs[A].cumulativeSum-u.dataPointEOs[A-1].cumulativeSum,0>e&&(e*=-1),d.minDiff>e&&0!==e&&(d.minDiff=\ne)))),!(b g&&!n)n=!0;else if(b>g&&n)continue;u.dataPoints[A].label&&(a.axisX.labels[b]=u.dataPoints[A].label);bc.viewPortMax&&(c.viewPortMax=b);0d.viewPortMax&&(d.viewPortMax=u.dataPointEOs[A-1].cumulativeSum));u.dataPointEOs[A].cumulativeSum d.viewPortMax&&(d.viewPortMax=u.dataPointEOs[A].cumulativeSum)}u.axisX.valueType=u.xValueType=f?\"dateTime\":\"number\"}};m.prototype.calculateAutoBreaks=function(){function a(a,b,c,e){if(e)return c=Math.pow(Math.min(c*a/b,b/a),0.2),1>=c&&(c=Math.pow(1>a?1/a:Math.min(b/a,a),0.25)),{startValue:a*c,endValue:b/c};c=0.2*Math.min(c-b+a,b-a);0>=c&&(c=0.25*Math.min(b-a,Math.abs(a)));return{startValue:a+c,endValue:b-c}}function d(a){if(a.dataSeriesIndexes&&!(1>a.dataSeriesIndexes.length)){var b=\na.axisX.scaleBreaks&&a.axisX.scaleBreaks.autoCalculate&&1<=a.axisX.scaleBreaks.maxNumberOfAutoBreaks,c=a.axisY.scaleBreaks&&a.axisY.scaleBreaks.autoCalculate&&1<=a.axisY.scaleBreaks.maxNumberOfAutoBreaks;if(b||c)for(var d=a.axisY.dataInfo,f=a.axisX.dataInfo,g,k=f.min,l=f.max,n=d.min,p=d.max,f=f._dataRanges,d=d._dataRanges,q,u=0,A=0;A h.dataPoints.length))for(u=0;u f[q].max&&(f[q].max=g)),c){var m=(p+1-n)*Math.max(parseFloat(a.axisY.scaleBreaks.collapsibleThreshold)||10,10)/100;if((g=\"waterfall\"===a.type?h.dataPointEOs[u].cumulativeSum:h.dataPoints[u].y)&&g.length)for(var v=0;v d[q].max&&(d[q].max=g[v]);else s(g)||(q=Math.floor((g-n)/m),g d[q].max&&(d[q].max=g))}}}}function c(a){if(a.dataSeriesIndexes&&!(1>a.dataSeriesIndexes.length)&&a.axisX.scaleBreaks&&a.axisX.scaleBreaks.autoCalculate&&1<=a.axisX.scaleBreaks.maxNumberOfAutoBreaks)for(var b=a.axisX.dataInfo,c=b.min,d=b.max,f=b._dataRanges,g,k=0,l=0;l n.dataPoints.length))for(k=0;k f[g].max&&(f[g].max=b)}}for(var b,e=this,f=!1,l=0;l n[g].max&&(n[g].max=p)}delete this._axes[l].dataInfo.dataPointYPositiveSums}if(this._axes[l].dataInfo.dataPointYNegativeSums){q=this._axes[l].dataInfo.dataPointYNegativeSums;n=k;for(u in q)q.hasOwnProperty(u)&&!isNaN(u)&&(p=-1*q[u],s(p)||(g=Math.floor((p-A)/b),p n[g].max&&(n[g].max=p)));delete this._axes[l].dataInfo.dataPointYNegativeSums}for(u=0;u b&&f.push({diff:p,start:n,end:A});break}else u++;if(this._axes[l].scaleBreaks.customBreaks)for(u=0;u =e.x1&&(a<=e.x2&&d>=e.y1&&d<=e.y2)&&(b=e.id)}return b};m.prototype.getAutoFontSize=lb;m.prototype.resetOverlayedCanvas=function(){this.overlaidCanvasCtx.clearRect(0,0,this.width,this.height)};m.prototype.clearCanvas=kb;m.prototype.attachEvent=function(a){this._events.push(a)};m.prototype._touchEventHandler=function(a){if(a.changedTouches&&this.interactivityEnabled){var d=[],c=\na.changedTouches,b=c?c[0]:a,e=null;switch(a.type){case \"touchstart\":case \"MSPointerDown\":d=[\"mousemove\",\"mousedown\"];this._lastTouchData=Na(b);this._lastTouchData.time=new Date;break;case \"touchmove\":case \"MSPointerMove\":d=[\"mousemove\"];break;case \"touchend\":case \"MSPointerUp\":var f=this._lastTouchData&&this._lastTouchData.time?new Date-this._lastTouchData.time:0,d=\"touchstart\"===this._lastTouchEventType||\"MSPointerDown\"===this._lastTouchEventType||300>f?[\"mouseup\",\"click\"]:[\"mouseup\"];break;default:return}if(!(c&&\n1 f)this._lastTouchData.scroll=!0}catch(u){}this._lastTouchEventType=a.type;if(this._lastTouchData.scroll&&this.zoomEnabled)this.isDrag&&this.resetOverlayedCanvas(),this.isDrag=!1;else for(c=0;c =e.x1&&d.x<=e.x2&&d.y>=e.y1&&d.y<=e.y2){b[c].call(b.context,d.x,d.y);\"mousedown\"===c&&!0===b.capture?(m.capturedEventParam=b,this.overlaidCanvas.setCapture?this.overlaidCanvas.setCapture():document.documentElement.addEventListener(\"mouseup\",this._mouseEventHandler,!1)):\"mouseup\"===c&&(b.chart.overlaidCanvas.releaseCapture?b.chart.overlaidCanvas.releaseCapture():document.documentElement.removeEventListener(\"mouseup\",this._mouseEventHandler,!1));break}else b=null;a.target.style.cursor=\nb&&b.cursor?b.cursor:this._defaultCursor}c=this.plotArea;if(d.x c.x2||d.y c.y2)if(this.toolTip&&this.toolTip.enabled){this.toolTip.hide();this.toolTip.dispatchEvent(\"hidden\",{chart:this,toolTip:this.toolTip},this.toolTip);for(f=0;f c.maximum&&(f=c.viewportMaximum/c.maximum,c.sessionVariables.newViewportMinimum=\nc.viewportMinimum/f,c.sessionVariables.newViewportMaximum=c.viewportMaximum/f,l=!0):c.viewportMinimum c.maximum&&(f=c.viewportMaximum-c.maximum,c.sessionVariables.newViewportMinimum=c.viewportMinimum-f,c.sessionVariables.newViewportMaximum=c.viewportMaximum-f,l=!0);else if((!e||2 Math.abs(c)&&(this.panEnabled||this.zoomEnabled)?(this.toolTip.hide(),this.toolTip.dispatchEvent(\"hidden\",{chart:this,toolTip:this.toolTip},this.toolTip)):this.panEnabled||this.zoomEnabled||this.toolTip.mouseMoveHandler(a,d);if((!e||2 g)var r=g,g=q,q=r;if(p.scaleBreaks)for(r=0;!f&&r =g;if(isFinite(p.dataInfo.minDiff))if(r=p.getApparentDifference(q,g,null,!0),!(f||!(this.panEnabled&&p.scaleBreaks&&p.scaleBreaks._appliedBreaks.length)&&(p.logarithmic&&r p.maximum))A.push(p),n.push({val1:q,val2:g}),u=!0;else if(!e){u=!1;break}}return{isValid:u,axesWithValidRange:A,axesRanges:n}};m.prototype.preparePlotArea=function(){var a=this.plotArea;!v&&(0 c.lineCoordinates.x2?d.x2:c.lineCoordinates.x2;a.y2=d.y2>d.y1?d.y2:c.lineCoordinates.y2;a.width=a.x2-a.x1;a.height=a.y2-a.y1}this.axisY2&&0 c.lineCoordinates.x2?d.x2:c.lineCoordinates.x2,a.y2=d.y2>d.y1?d.y2:c.lineCoordinates.y2,\na.width=a.x2-a.x1,a.height=a.y2-a.y1)}else d=this.layoutManager.getFreeSpace(),a.x1=d.x1,a.x2=d.x2,a.y1=d.y1,a.y2=d.y2,a.width=d.width,a.height=d.height;v||(a.canvas.width=a.width,a.canvas.height=a.height,a.canvas.style.left=a.x1+\"px\",a.canvas.style.top=a.y1+\"px\",(0 c.x2||n.point.y c.y2+1)continue}else if(\"rangearea\"===p||\"rangesplinearea\"===p){if(n.dataPoint.x e.viewportMaximum||Math.max.apply(null,n.dataPoint.y) f.viewportMaximum)continue}else if(0<=p.indexOf(\"line\")||0<=p.indexOf(\"area\")||0<=p.indexOf(\"bubble\")||0<=p.indexOf(\"scatter\")){if(n.dataPoint.x e.viewportMaximum||n.dataPoint.y f.viewportMaximum)continue}else if(0<=p.indexOf(\"column\")||\"waterfall\"===p||\"error\"===p&&!n.axisSwapped){if(n.dataPoint.x e.viewportMaximum||n.bounds.y1>c.y2||n.bounds.y2 e.viewportMaximum||n.bounds.x1>c.x2||n.bounds.x2 e.viewportMaximum||Math.max.apply(null,n.dataPoint.y) f.viewportMaximum)continue}else if(n.dataPoint.x e.viewportMaximum)continue;l=u=2;\"horizontal\"===E?(A=h.width,k=h.height):(k=h.width,A=h.height);if(\"normal\"===this.plotInfo.axisPlacement){if(0<=p.indexOf(\"line\")||0<=p.indexOf(\"area\"))z=\"auto\",u=4;else if(0<=p.indexOf(\"stacked\"))\"auto\"===z&&(z=\"inside\");else if(\"bubble\"===p||\"scatter\"===\np)z=\"inside\";q=n.point.x-(\"horizontal\"===E?A/2:A/2-r/2);\"inside\"!==z?(e=c.y1,f=c.y2,0n.point.y)):(g=n.point.y+r/2+u+b,g>f-k&&(g=\"auto\"===z?Math.min(n.point.y,f)+r/2-k-u:f+r/2-k,w=g f-k-u&&(\"bubble\"===p||\"scatter\"===p)&&(g=Math.min(n.point.y+u,c.y2-k-u))),g=Math.min(g,f))}else 0<=p.indexOf(\"line\")||0<=p.indexOf(\"area\")||0<=p.indexOf(\"scatter\")?(z=\"auto\",l=4):0<=p.indexOf(\"stacked\")?\"auto\"===z&&(z=\"inside\"):\"bubble\"===p&&(z=\"inside\"),g=n.point.y+r/2-k/2+u,\"inside\"!==z?(e=c.x1,f=c.x2,0>B?(q=\nn.point.x-(\"horizontal\"===E?A:A-r/2)-l-b,q n.point.x)):(q=n.point.x+(\"horizontal\"===E?0:r/2)+l+b,q>f-A-l-b&&(q=\"auto\"===z?Math.min(n.point.x,f)-(\"horizontal\"===E?A:A/2)-l:f-A-l,w=q B?Math.max(n.bounds.x1,c.x1)+r/2+l:Math.min(n.bounds.x2,c.x2)-A/2-l+(\"horizontal\"===E?0:r/2):(Math.max(n.bounds.x1,c.x1)+Math.min(n.bounds.x2,c.x2))/2+(\"horizontal\"===\nE?0:r/2),q=0>B?Math.max(n.point.x,b)-(\"horizontal\"===E?A/2:0):Math.min(n.point.x,b)-A/2,q=Math.max(q,e));\"vertical\"===E&&(g+=k-r/2);h.x=q;h.y=g;h.render(!0);x&&(\"inside\"!==z&&(0>p.indexOf(\"bar\")&&(\"error\"!==p||!n.axisSwapped)&&n.point.x>c.x1&&n.point.x p.indexOf(\"column\")&&(\"error\"!==p||n.axisSwapped)&&n.point.y>c.y1&&n.point.y =a.dataSeriesIndexes.length)){var b=this._eventManager.ghostCtx;c.save();var e=this.plotArea;c.beginPath();c.rect(e.x1,e.y1,e.width,e.height);c.clip();for(var f=[],l,u=0;u<\na.dataSeriesIndexes.length;u++){var A=a.dataSeriesIndexes[u],k=this.data[A];c.lineWidth=k.lineThickness;var n=k.dataPoints,p=\"solid\";if(c.setLineDash){var q=N(k.nullDataLineDashType,k.lineThickness),p=k.lineDashType,g=N(p,k.lineThickness);c.setLineDash(g)}var r=k.id;this._eventManager.objectMap[r]={objectType:\"dataSeries\",dataSeriesIndex:A};r=Q(r);b.strokeStyle=r;b.lineWidth=0 a.axisX.dataInfo.viewPortMax&&(!k.connectNullData||!E)))if(\"number\"!==typeof n[t].y)0 n[t].y===a.axisY.reversed?1:-1,color:r})}c.stroke();v&&b.stroke()}}W.drawMarkers(f);v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&\nthis._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),b.beginPath());c.restore();c.beginPath();return{source:d,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,easingFunction:L.easing.linear,animationBase:0}}};m.prototype.renderStepLine=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=this._eventManager.ghostCtx;c.save();var e=this.plotArea;c.beginPath();\nc.rect(e.x1,e.y1,e.width,e.height);c.clip();for(var f=[],l,u=0;u a.axisX.dataInfo.viewPortMax&&(!k.connectNullData||!E)))if(\"number\"!==typeof n[t].y)0 n[t].y===a.axisY.reversed?1:-1,color:r})}c.stroke();v&&b.stroke()}}W.drawMarkers(f);v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,\n0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),b.beginPath());c.restore();c.beginPath();return{source:d,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,easingFunction:L.easing.linear,animationBase:0}}};m.prototype.renderSpline=function(a){function d(a){a=w(a,2);if(0 =a.dataSeriesIndexes.length)){var e=this._eventManager.ghostCtx;b.save();var f=this.plotArea;b.beginPath();b.rect(f.x1,f.y1,f.width,f.height);b.clip();for(var l=[],u=0;u a.axisX.dataInfo.viewPortMax&&(!k.connectNullData||!x)))if(\"number\"!==typeof n[m].y)0 n[m].y===a.axisY.reversed?1:-1,color:r});x=!1}d(s)}W.drawMarkers(l);v&&(c.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&b.drawImage(a.axisX.maskCanvas,0,0,this.width,\nthis.height),a.axisY.maskCanvas&&b.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.clearRect(f.x1,f.y1,f.width,f.height),e.beginPath());b.restore();b.beginPath();return{source:c,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,easingFunction:L.easing.linear,animationBase:0}}};m.prototype.renderColumn=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:\nd;if(!(0>=a.dataSeriesIndexes.length)){var b=null,e=this.plotArea,f=0,l,u,A,k=a.axisY.convertValueToPixel(a.axisY.logarithmic?a.axisY.viewportMinimum:0),f=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1,n=this.options.dataPointMaxWidth?this.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:Math.min(0.15*this.width,0.9*(this.plotArea.width/a.plotType.totalDataSeries))<<0,p=a.axisX.dataInfo.minDiff;isFinite(p)||(p=0.3*Math.abs(a.axisX.range));\np=this.dataPointWidth=this.options.dataPointWidth?this.dataPointWidth:0.9*(e.width*(a.axisX.logarithmic?Math.log(p)/Math.log(a.axisX.range):Math.abs(p)/Math.abs(a.axisX.range))/a.plotType.totalDataSeries)<<0;this.dataPointMaxWidth&&f>n&&(f=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,n));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&n n&&(p=n);c.save();v&&this._eventManager.ghostCtx.save();\nc.beginPath();c.rect(e.x1,e.y1,e.width,e.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.clip());for(n=0;n a.axisX.dataInfo.viewPortMax)&&\"number\"===typeof r[f].y){l=\na.axisX.convertValueToPixel(A);u=a.axisY.convertValueToPixel(r[f].y);l=a.axisX.reversed?l+a.plotType.totalDataSeries*p/2-(a.previousDataSeriesCount+n)*p<<0:l-a.plotType.totalDataSeries*p/2+(a.previousDataSeriesCount+n)*p<<0;var m=a.axisX.reversed?l-p<<0:l+p<<0,t;0<=r[f].y?t=k:(t=u,u=k);u>t&&(b=u,u=t,t=b);b=r[f].color?r[f].color:g._colorSet[f%g._colorSet.length];ca(c,l,u,m,t,b,0,null,h&&0<=r[f].y,0>r[f].y&&h,!1,!1,g.fillOpacity);b=g.dataPointIds[f];this._eventManager.objectMap[b]={id:b,objectType:\"dataPoint\",\ndataSeriesIndex:q,dataPointIndex:f,x1:l,y1:u,x2:m,y2:t};b=Q(b);v&&ca(this._eventManager.ghostCtx,l,u,m,t,b,0,null,!1,!1,!1,!1);(r[f].indexLabel||g.indexLabel||r[f].indexLabelFormatter||g.indexLabelFormatter)&&this._indexLabels.push({chartType:\"column\",dataPoint:r[f],dataSeries:g,point:{x:l+(m-l)/2,y:0>r[f].y===a.axisY.reversed?u:t},direction:0>r[f].y===a.axisY.reversed?1:-1,bounds:{x1:l,y1:Math.min(u,t),x2:m,y2:Math.max(u,t)},color:b})}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),\nc.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.yScaleAnimation,easingFunction:L.easing.easeOutQuart,\nanimationBase:k a.axisY.bounds.y2?a.axisY.bounds.y2:k}}};m.prototype.renderStackedColumn=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=null,e=this.plotArea,f=[],l=[],u=[],A=[],k=0,n,p,q=a.axisY.convertValueToPixel(a.axisY.logarithmic?a.axisY.viewportMinimum:0),k=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1;n=this.options.dataPointMaxWidth?\nthis.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:0.15*this.width<<0;var g=a.axisX.dataInfo.minDiff;isFinite(g)||(g=0.3*Math.abs(a.axisX.range));g=this.options.dataPointWidth?this.dataPointWidth:0.9*(e.width*(a.axisX.logarithmic?Math.log(g)/Math.log(a.axisX.range):Math.abs(g)/Math.abs(a.axisX.range))/a.plotType.plotUnits.length)<<0;this.dataPointMaxWidth&&k>n&&(k=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,n));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&\nn n&&(g=n);c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(e.x1,e.y1,e.width,e.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.clip());for(var r=0;r a.axisX.dataInfo.viewPortMax)&&\"number\"===typeof t[k].y){n=a.axisX.convertValueToPixel(b);var s=n-a.plotType.plotUnits.length*g/2+a.index*g<<0,E=s+g<<0,C;if(a.axisY.logarithmic||a.axisY.scaleBreaks&&0 =t[k].y)A[b]=t[k].y+(A[b]?A[b]:0),C=a.axisY.convertValueToPixel(A[b]),p=\"undefined\"!==typeof l[b]?l[b]:q,l[b]=C;else if(p=a.axisY.convertValueToPixel(t[k].y),0<=t[k].y){var B=\"undefined\"!==typeof f[b]?f[b]:0;p-=B;C=q-B;f[b]=B+(C-p)}else B=l[b]?l[b]:0,C=p+B,p=q+B,l[b]=B+(C-p);b=t[k].color?t[k].color:m._colorSet[k%m._colorSet.length];ca(c,s,p,E,C,b,0,null,x&&0<=t[k].y,0>t[k].y&&x,!1,!1,m.fillOpacity);b=m.dataPointIds[k];this._eventManager.objectMap[b]=\n{id:b,objectType:\"dataPoint\",dataSeriesIndex:h,dataPointIndex:k,x1:s,y1:p,x2:E,y2:C};b=Q(b);v&&ca(this._eventManager.ghostCtx,s,p,E,C,b,0,null,!1,!1,!1,!1);(t[k].indexLabel||m.indexLabel||t[k].indexLabelFormatter||m.indexLabelFormatter)&&this._indexLabels.push({chartType:\"stackedColumn\",dataPoint:t[k],dataSeries:m,point:{x:n,y:0<=t[k].y?p:C},direction:0>t[k].y===a.axisY.reversed?1:-1,bounds:{x1:s,y1:Math.min(p,C),x2:E,y2:Math.max(p,C)},color:b})}}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,\nthis.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.yScaleAnimation,easingFunction:L.easing.easeOutQuart,\nanimationBase:q a.axisY.bounds.y2?a.axisY.bounds.y2:q}}};m.prototype.renderStackedColumn100=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=null,e=this.plotArea,f=[],l=[],u=[],A=[],k=0,n,p,q=a.axisY.convertValueToPixel(a.axisY.logarithmic?a.axisY.viewportMinimum:0),k=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1;n=this.options.dataPointMaxWidth?\nthis.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:0.15*this.width<<0;var g=a.axisX.dataInfo.minDiff;isFinite(g)||(g=0.3*Math.abs(a.axisX.range));g=this.options.dataPointWidth?this.dataPointWidth:0.9*(e.width*(a.axisX.logarithmic?Math.log(g)/Math.log(a.axisX.range):Math.abs(g)/Math.abs(a.axisX.range))/a.plotType.plotUnits.length)<<0;this.dataPointMaxWidth&&k>n&&(k=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,n));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&\nn n&&(g=n);c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(e.x1,e.y1,e.width,e.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.clip());for(var r=0;r a.axisX.dataInfo.viewPortMax)&&\"number\"===typeof t[k].y){n=a.axisX.convertValueToPixel(b);p=0!==a.dataPointYSums[b]?100*(t[k].y/a.dataPointYSums[b]):0;var s=n-a.plotType.plotUnits.length*g/2+a.index*g<<0,E=s+g<<0,C;if(a.axisY.logarithmic||a.axisY.scaleBreaks&&0 =u[b])continue;p=a.axisY.convertValueToPixel(u[b]);\nC=f[b]?f[b]:q;f[b]=p}else if(a.axisY.scaleBreaks&&0 =t[k].y)A[b]=p+(\"undefined\"!==typeof A[b]?A[b]:0),C=a.axisY.convertValueToPixel(A[b]),p=l[b]?l[b]:q,l[b]=C;else if(p=a.axisY.convertValueToPixel(p),0<=t[k].y){var B=\"undefined\"!==typeof f[b]?f[b]:0;p-=B;C=q-B;a.dataSeriesIndexes.length-1===r&&1>=Math.abs(e.y1-p)&&(p=e.y1);f[b]=B+(C-p)}else B=\"undefined\"!==typeof l[b]?l[b]:0,C=p+B,p=q+B,a.dataSeriesIndexes.length-1===r&&1>=Math.abs(e.y2-C)&&(C=e.y2),l[b]=\nB+(C-p);b=t[k].color?t[k].color:m._colorSet[k%m._colorSet.length];ca(c,s,p,E,C,b,0,null,x&&0<=t[k].y,0>t[k].y&&x,!1,!1,m.fillOpacity);b=m.dataPointIds[k];this._eventManager.objectMap[b]={id:b,objectType:\"dataPoint\",dataSeriesIndex:h,dataPointIndex:k,x1:s,y1:p,x2:E,y2:C};b=Q(b);v&&ca(this._eventManager.ghostCtx,s,p,E,C,b,0,null,!1,!1,!1,!1);(t[k].indexLabel||m.indexLabel||t[k].indexLabelFormatter||m.indexLabelFormatter)&&this._indexLabels.push({chartType:\"stackedColumn100\",dataPoint:t[k],dataSeries:m,\npoint:{x:n,y:0<=t[k].y?p:C},direction:0>t[k].y===a.axisY.reversed?1:-1,bounds:{x1:s,y1:Math.min(p,C),x2:E,y2:Math.max(p,C)},color:b})}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),\nc.clearRect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.yScaleAnimation,easingFunction:L.easing.easeOutQuart,animationBase:q a.axisY.bounds.y2?a.axisY.bounds.y2:q}}};m.prototype.renderBar=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=null,e=this.plotArea,f=0,l,u,A,k=a.axisY.convertValueToPixel(a.axisY.logarithmic?\na.axisY.viewportMinimum:0),f=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1,n=this.options.dataPointMaxWidth?this.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:Math.min(0.15*this.height,0.9*(this.plotArea.height/a.plotType.totalDataSeries))<<0,p=a.axisX.dataInfo.minDiff;isFinite(p)||(p=0.3*Math.abs(a.axisX.range));p=this.options.dataPointWidth?this.dataPointWidth:0.9*(e.height*(a.axisX.logarithmic?Math.log(p)/Math.log(a.axisX.range):\nMath.abs(p)/Math.abs(a.axisX.range))/a.plotType.totalDataSeries)<<0;this.dataPointMaxWidth&&f>n&&(f=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,n));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&n n&&(p=n);c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(e.x1,e.y1,e.width,e.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(e.x1,\ne.y1,e.width,e.height),this._eventManager.ghostCtx.clip());for(n=0;n a.axisX.dataInfo.viewPortMax)&&\"number\"===typeof r[f].y){u=a.axisX.convertValueToPixel(A);l=a.axisY.convertValueToPixel(r[f].y);u=a.axisX.reversed?u+a.plotType.totalDataSeries*\np/2-(a.previousDataSeriesCount+n)*p<<0:u-a.plotType.totalDataSeries*p/2+(a.previousDataSeriesCount+n)*p<<0;var m=a.axisX.reversed?u-p<<0:u+p<<0,t;0<=r[f].y?t=k:(t=l,l=k);b=r[f].color?r[f].color:g._colorSet[f%g._colorSet.length];ca(c,t,u,l,m,b,0,null,h,!1,!1,!1,g.fillOpacity);b=g.dataPointIds[f];this._eventManager.objectMap[b]={id:b,objectType:\"dataPoint\",dataSeriesIndex:q,dataPointIndex:f,x1:t,y1:u,x2:l,y2:m};b=Q(b);v&&ca(this._eventManager.ghostCtx,t,u,l,m,b,0,null,!1,!1,!1,!1);(r[f].indexLabel||\ng.indexLabel||r[f].indexLabelFormatter||g.indexLabelFormatter)&&this._indexLabels.push({chartType:\"bar\",dataPoint:r[f],dataSeries:g,point:{x:0<=r[f].y?l:t,y:u+(m-u)/2},direction:0>r[f].y===a.axisY.reversed?1:-1,bounds:{x1:Math.min(t,l),y1:u,x2:Math.max(t,l),y2:m},color:b})}}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,\n0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.xScaleAnimation,easingFunction:L.easing.easeOutQuart,animationBase:k a.axisY.bounds.x2?a.axisY.bounds.x2:k}}};m.prototype.renderStackedBar=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,\nc=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=null,e=this.plotArea,f=[],l=[],u=[],A=[],k=0,n,p,q=a.axisY.convertValueToPixel(a.axisY.logarithmic?a.axisY.viewportMinimum:0),k=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1;p=this.options.dataPointMaxWidth?this.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:0.15*this.height<<0;var g=a.axisX.dataInfo.minDiff;isFinite(g)||(g=0.3*Math.abs(a.axisX.range));g=\nthis.options.dataPointWidth?this.dataPointWidth:0.9*(e.height*(a.axisX.logarithmic?Math.log(g)/Math.log(a.axisX.range):Math.abs(g)/Math.abs(a.axisX.range))/a.plotType.plotUnits.length)<<0;this.dataPointMaxWidth&&k>p&&(k=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,p));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&p p&&(g=p);c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();\nc.rect(e.x1,e.y1,e.width,e.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.clip());for(var r=0;r a.axisX.dataInfo.viewPortMax)&&\"number\"===\ntypeof t[k].y){p=a.axisX.convertValueToPixel(b);var s=p-a.plotType.plotUnits.length*g/2+a.index*g<<0,E=s+g<<0,C;if(a.axisY.logarithmic||a.axisY.scaleBreaks&&0 =t[k].y)A[b]=t[k].y+(A[b]?A[b]:0),n=l[b]?l[b]:q,l[b]=C=a.axisY.convertValueToPixel(A[b]);else if(n=a.axisY.convertValueToPixel(t[k].y),\n0<=t[k].y){var B=f[b]?f[b]:0;C=q+B;n+=B;f[b]=B+(n-C)}else B=l[b]?l[b]:0,C=n-B,n=q-B,l[b]=B+(n-C);b=t[k].color?t[k].color:m._colorSet[k%m._colorSet.length];ca(c,C,s,n,E,b,0,null,x,!1,!1,!1,m.fillOpacity);b=m.dataPointIds[k];this._eventManager.objectMap[b]={id:b,objectType:\"dataPoint\",dataSeriesIndex:h,dataPointIndex:k,x1:C,y1:s,x2:n,y2:E};b=Q(b);v&&ca(this._eventManager.ghostCtx,C,s,n,E,b,0,null,!1,!1,!1,!1);(t[k].indexLabel||m.indexLabel||t[k].indexLabelFormatter||m.indexLabelFormatter)&&this._indexLabels.push({chartType:\"stackedBar\",\ndataPoint:t[k],dataSeries:m,point:{x:0<=t[k].y?n:C,y:p},direction:0>t[k].y===a.axisY.reversed?1:-1,bounds:{x1:Math.min(C,n),y1:s,x2:Math.max(C,n),y2:E},color:b})}}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,\n0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.xScaleAnimation,easingFunction:L.easing.easeOutQuart,animationBase:q a.axisY.bounds.x2?a.axisY.bounds.x2:q}}};m.prototype.renderStackedBar100=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=null,e=this.plotArea,\nf=[],l=[],u=[],A=[],k=0,n,p,q=a.axisY.convertValueToPixel(a.axisY.logarithmic?a.axisY.viewportMinimum:0),k=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1;p=this.options.dataPointMaxWidth?this.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:0.15*this.height<<0;var g=a.axisX.dataInfo.minDiff;isFinite(g)||(g=0.3*Math.abs(a.axisX.range));g=this.options.dataPointWidth?this.dataPointWidth:0.9*(e.height*(a.axisX.logarithmic?Math.log(g)/\nMath.log(a.axisX.range):Math.abs(g)/Math.abs(a.axisX.range))/a.plotType.plotUnits.length)<<0;this.dataPointMaxWidth&&k>p&&(k=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,p));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&p p&&(g=p);c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(e.x1,e.y1,e.width,e.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(e.x1,\ne.y1,e.width,e.height),this._eventManager.ghostCtx.clip());for(var r=0;r a.axisX.dataInfo.viewPortMax)&&\"number\"===typeof t[k].y){p=a.axisX.convertValueToPixel(b);var s;s=0!==a.dataPointYSums[b]?100*(t[k].y/a.dataPointYSums[b]):0;var E=\np-a.plotType.plotUnits.length*g/2+a.index*g<<0,C=E+g<<0;if(a.axisY.logarithmic||a.axisY.scaleBreaks&&0 =u[b])continue;s=f[b]?f[b]:q;f[b]=n=a.axisY.convertValueToPixel(u[b])}else if(a.axisY.scaleBreaks&&0 =t[k].y)A[b]=s+(A[b]?A[b]:0),n=l[b]?l[b]:q,l[b]=s=a.axisY.convertValueToPixel(A[b]);else if(n=a.axisY.convertValueToPixel(s),0<=t[k].y){var B=f[b]?f[b]:0;s=q+B;n+=B;a.dataSeriesIndexes.length-\n1===r&&1>=Math.abs(e.x2-n)&&(n=e.x2);f[b]=B+(n-s)}else B=l[b]?l[b]:0,s=n-B,n=q-B,a.dataSeriesIndexes.length-1===r&&1>=Math.abs(e.x1-s)&&(s=e.x1),l[b]=B+(n-s);b=t[k].color?t[k].color:m._colorSet[k%m._colorSet.length];ca(c,s,E,n,C,b,0,null,x,!1,!1,!1,m.fillOpacity);b=m.dataPointIds[k];this._eventManager.objectMap[b]={id:b,objectType:\"dataPoint\",dataSeriesIndex:h,dataPointIndex:k,x1:s,y1:E,x2:n,y2:C};b=Q(b);v&&ca(this._eventManager.ghostCtx,s,E,n,C,b,0,null,!1,!1,!1,!1);(t[k].indexLabel||m.indexLabel||\nt[k].indexLabelFormatter||m.indexLabelFormatter)&&this._indexLabels.push({chartType:\"stackedBar100\",dataPoint:t[k],dataSeries:m,point:{x:0<=t[k].y?n:s,y:p},direction:0>t[k].y===a.axisY.reversed?1:-1,bounds:{x1:Math.min(s,n),y1:E,x2:Math.max(s,n),y2:C},color:b})}}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,\n0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.xScaleAnimation,easingFunction:L.easing.easeOutQuart,animationBase:q a.axisY.bounds.x2?a.axisY.bounds.x2:q}}};m.prototype.renderArea=function(a){var d,c;function b(){C&&(0 =a.axisY.viewportMinimum&&0<=a.axisY.viewportMaximum?E=z:0>a.axisY.viewportMaximum?E=u.y1:0 =a.dataSeriesIndexes.length)){var l=this._eventManager.ghostCtx,\nu=a.axisY.lineCoordinates,A=[],k=this.plotArea,n;f.save();v&&l.save();f.beginPath();f.rect(k.x1,k.y1,k.width,k.height);f.clip();v&&(l.beginPath(),l.rect(k.x1,k.y1,k.width,k.height),l.clip());for(var p=0;p a.axisX.dataInfo.viewPortMax&&(!g.connectNullData||!ja)))if(\"number\"!==typeof r[h].y)g.connectNullData||\n(ja||d)||b(),ja=!0;else{m=a.axisX.convertValueToPixel(s);t=a.axisY.convertValueToPixel(r[h].y);d||ja?(!d&&g.connectNullData?(f.setLineDash&&(g.options.nullDataLineDashType||c===g.lineDashType&&g.lineDashType!==g.nullDataLineDashType)&&(d=m,c=t,m=n.x,t=n.y,b(),f.moveTo(n.x,n.y),m=d,t=c,C=n,c=g.nullDataLineDashType,f.setLineDash(S)),f.lineTo(m,t),v&&l.lineTo(m,t)):(f.beginPath(),f.moveTo(m,t),v&&(l.beginPath(),l.moveTo(m,t)),C={x:m,y:t}),ja=d=!1):(f.lineTo(m,t),v&&l.lineTo(m,t),0==h%250&&b());n={x:m,\ny:t};h r[h].y===a.axisY.reversed?1:-1,color:B})}b();W.drawMarkers(A)}}v&&(e.drawImage(this._preRenderCanvas,0,0,this.width,this.height),f.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&f.drawImage(a.axisX.maskCanvas,\n0,0,this.width,this.height),a.axisY.maskCanvas&&f.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),f.clearRect(k.x1,k.y1,k.width,k.height),this._eventManager.ghostCtx.restore());f.restore();return{source:e,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,easingFunction:L.easing.linear,animationBase:0}}};m.prototype.renderSplineArea=function(a){function d(){var c=w(s,2);if(0 =a.axisY.viewportMinimum&&0<=a.axisY.viewportMaximum?m=h:0>a.axisY.viewportMaximum?m=f.y1:0 =a.dataSeriesIndexes.length)){var e=this._eventManager.ghostCtx,f=a.axisY.lineCoordinates,l=[],u=this.plotArea;b.save();v&&e.save();b.beginPath();b.rect(u.x1,u.y1,u.width,u.height);b.clip();v&&(e.beginPath(),e.rect(u.x1,u.y1,u.width,u.height),e.clip());for(var A=\n0;A a.axisX.dataInfo.viewPortMax&&(!n.connectNullData||!r)))if(\"number\"!==typeof p[q].y)0 p[q].y===a.axisY.reversed?1:-1,color:z});r=!1}d();W.drawMarkers(l)}}v&&(c.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.globalCompositeOperation=\n\"source-atop\",a.axisX.maskCanvas&&b.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&b.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.clearRect(u.x1,u.y1,u.width,u.height),this._eventManager.ghostCtx.restore());b.restore();return{source:c,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,easingFunction:L.easing.linear,animationBase:0}}};m.prototype.renderStepArea=\nfunction(a){var d,c;function b(){C&&(0=a.axisY.viewportMinimum&&0<=a.axisY.viewportMaximum?E=z:0>a.axisY.viewportMaximum?E=u.y1:0 =a.dataSeriesIndexes.length)){var l=this._eventManager.ghostCtx,u=a.axisY.lineCoordinates,A=[],k=this.plotArea,n;f.save();v&&l.save();f.beginPath();f.rect(k.x1,k.y1,k.width,k.height);f.clip();v&&(l.beginPath(),l.rect(k.x1,k.y1,k.width,k.height),l.clip());for(var p=0;p a.axisX.dataInfo.viewPortMax&&(!g.connectNullData||!c))){var aa=t;\"number\"!==\ntypeof r[h].y?(g.connectNullData||(c||d)||b(),c=!0):(m=a.axisX.convertValueToPixel(s),t=a.axisY.convertValueToPixel(r[h].y),d||c?(!d&&g.connectNullData?(f.setLineDash&&(g.options.nullDataLineDashType||S===g.lineDashType&&g.lineDashType!==g.nullDataLineDashType)&&(d=m,c=t,m=n.x,t=n.y,b(),f.moveTo(n.x,n.y),m=d,t=c,C=n,S=g.nullDataLineDashType,f.setLineDash(P)),f.lineTo(m,aa),f.lineTo(m,t),v&&(l.lineTo(m,aa),l.lineTo(m,t))):(f.beginPath(),f.moveTo(m,t),v&&(l.beginPath(),l.moveTo(m,t)),C={x:m,y:t}),c=\nd=!1):(f.lineTo(m,aa),v&&l.lineTo(m,aa),f.lineTo(m,t),v&&l.lineTo(m,t),0==h%250&&b()),n={x:m,y:t},h r[h].y===a.axisY.reversed?1:-1,color:B}))}b();W.drawMarkers(A)}}v&&(e.drawImage(this._preRenderCanvas,0,0,this.width,this.height),\nf.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&f.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&f.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),f.clearRect(k.x1,k.y1,k.width,k.height),this._eventManager.ghostCtx.restore());f.restore();return{source:e,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,easingFunction:L.easing.linear,animationBase:0}}};\nm.prototype.renderStackedArea=function(a){function d(){if(!(1>k.length)){for(0 =a.dataSeriesIndexes.length)){var e=null,f=null,l=[],u=this.plotArea,h=[],k=[],n=[],p=[],q=0,g,r,m=a.axisY.convertValueToPixel(a.axisY.logarithmic?\na.axisY.viewportMinimum:0),s=this._eventManager.ghostCtx,t,x,z;v&&s.beginPath();b.save();v&&s.save();b.beginPath();b.rect(u.x1,u.y1,u.width,u.height);b.clip();v&&(s.beginPath(),s.rect(u.x1,u.y1,u.width,u.height),s.clip());for(var e=[],E=0;E a.axisX.dataInfo.viewPortMax&&(!B.connectNullData||!aa)))if(\"number\"!==typeof fa.y)B.connectNullData||(aa||x)||d(),aa=!0;else{g=a.axisX.convertValueToPixel(f);var la=h[f]?h[f]:0;if(a.axisY.logarithmic||a.axisY.scaleBreaks&&0 =p[f]&&a.axisY.logarithmic)continue;r=a.axisY.convertValueToPixel(p[f])}else r=a.axisY.convertValueToPixel(fa.y),r-=la;k.push({x:g,\ny:m-la});h[f]=m-r;x||aa?(!x&&B.connectNullData?(b.setLineDash&&(B.options.nullDataLineDashType||z===B.lineDashType&&B.lineDashType!==B.nullDataLineDashType)&&(x=k.pop(),z=k[k.length-1],d(),b.moveTo(t.x,t.y),k.push(z),k.push(x),z=B.nullDataLineDashType,b.setLineDash(P)),b.lineTo(g,r),v&&s.lineTo(g,r)):(b.beginPath(),b.moveTo(g,r),v&&(s.beginPath(),s.moveTo(g,r))),aa=x=!1):(b.lineTo(g,r),v&&s.lineTo(g,r),0==q%250&&(d(),b.moveTo(g,r),v&&s.moveTo(g,r),k.push({x:g,y:m-la})));t={x:g,y:r};q w[q].y===a.axisY.reversed?1:-1,color:e})}}d();b.moveTo(g,r);v&&s.moveTo(g,r)}delete B.dataPointIndexes}W.drawMarkers(l);\nv&&(c.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&b.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&b.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.clearRect(u.x1,u.y1,u.width,u.height),s.restore());b.restore();return{source:c,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,\neasingFunction:L.easing.linear,animationBase:0}}};m.prototype.renderStackedArea100=function(a){function d(){for(0 =a.dataSeriesIndexes.length)){var e=null,f=null,l=this.plotArea,u=[],h=[],k=[],n=[],p=[],q=\n0,g,r,m,s,t,x=a.axisY.convertValueToPixel(a.axisY.logarithmic?a.axisY.viewportMinimum:0),z=this._eventManager.ghostCtx;b.save();v&&z.save();b.beginPath();b.rect(l.x1,l.y1,l.width,l.height);b.clip();v&&(z.beginPath(),z.rect(l.x1,l.y1,l.width,l.height),z.clip());for(var e=[],E=0;E a.axisX.dataInfo.viewPortMax&&(!B.connectNullData||!aa)))if(\"number\"!==typeof fa.y)B.connectNullData||(aa||s)||d(),aa=!0;else{var la;la=0!==a.dataPointYSums[f]?100*(fa.y/a.dataPointYSums[f]):0;g=a.axisX.convertValueToPixel(f);var ba=h[f]?h[f]:0;if(a.axisY.logarithmic||a.axisY.scaleBreaks&&0 =p[f]&&a.axisY.logarithmic)continue;r=a.axisY.convertValueToPixel(p[f])}else r=a.axisY.convertValueToPixel(la),r-=ba;k.push({x:g,y:x-ba});h[f]=x-r;s||aa?(!s&&B.connectNullData?(b.setLineDash&&(B.options.nullDataLineDashType||t===B.lineDashType&&B.lineDashType!==B.nullDataLineDashType)&&(s=k.pop(),t=k[k.length-1],d(),b.moveTo(m.x,m.y),k.push(t),k.push(s),t=B.nullDataLineDashType,b.setLineDash(P)),b.lineTo(g,r),v&&z.lineTo(g,r)):(b.beginPath(),b.moveTo(g,r),v&&(z.beginPath(),z.moveTo(g,r))),\naa=s=!1):(b.lineTo(g,r),v&&z.lineTo(g,r),0==q%250&&(d(),b.moveTo(g,r),v&&z.moveTo(g,r),k.push({x:g,y:x-ba})));m={x:g,y:r};q y[q].y===a.axisY.reversed?1:-1,color:e})}}d();b.moveTo(g,r);v&&z.moveTo(g,r)}delete B.dataPointIndexes}W.drawMarkers(u);v&&(c.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&b.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&b.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),\nb.clearRect(l.x1,l.y1,l.width,l.height),z.restore());b.restore();return{source:c,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,easingFunction:L.easing.linear,animationBase:0}}};m.prototype.renderBubble=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=this.plotArea,e=0,f,l;c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(b.x1,b.y1,b.width,b.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),\nthis._eventManager.ghostCtx.rect(b.x1,b.y1,b.width,b.height),this._eventManager.ghostCtx.clip());for(var u=-Infinity,h=Infinity,k=0;k a.axisX.dataInfo.viewPortMax||\"undefined\"===typeof q[e].z||(g=q[e].z,g>u&&(u=g),g a.axisX.dataInfo.viewPortMax)&&\"number\"===typeof q[e].y){f=a.axisX.convertValueToPixel(f);l=a.axisY.convertValueToPixel(q[e].y);var g=q[e].z,s=2*Math.max(Math.sqrt((u===h?m/2:r+(m-r)/(u-h)*(g-h))/Math.PI)<<0,1),g=p.getMarkerProperties(e,c);g.size=s;c.globalAlpha=\np.fillOpacity;W.drawMarker(f,l,c,g.type,g.size,g.color,g.borderColor,g.borderThickness);c.globalAlpha=1;var t=p.dataPointIds[e];this._eventManager.objectMap[t]={id:t,objectType:\"dataPoint\",dataSeriesIndex:n,dataPointIndex:e,x1:f,y1:l,size:s};s=Q(t);v&&W.drawMarker(f,l,this._eventManager.ghostCtx,g.type,g.size,s,s,g.borderThickness);(q[e].indexLabel||p.indexLabel||q[e].indexLabelFormatter||p.indexLabelFormatter)&&this._indexLabels.push({chartType:\"bubble\",dataPoint:q[e],dataSeries:p,point:{x:f,y:l},\ndirection:1,bounds:{x1:f-g.size/2,y1:l-g.size/2,x2:f+g.size/2,y2:l+g.size/2},color:null})}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(b.x1,b.y1,b.width,b.height),this._eventManager.ghostCtx.restore());\nc.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.fadeInAnimation,easingFunction:L.easing.easeInQuad,animationBase:0}}};m.prototype.renderScatter=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=this.plotArea,e=0,f,l;c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(b.x1,b.y1,b.width,b.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(b.x1,b.y1,\nb.width,b.height),this._eventManager.ghostCtx.clip());for(var u=0;u a.axisX.dataInfo.viewPortMax)&&\"number\"===typeof n[e].y){f=a.axisX.convertValueToPixel(f);l=a.axisY.convertValueToPixel(n[e].y);var g=k.getMarkerProperties(e,\nf,l,c);c.globalAlpha=k.fillOpacity;W.drawMarker(g.x,g.y,g.ctx,g.type,g.size,g.color,g.borderColor,g.borderThickness);c.globalAlpha=1;Math.sqrt((p-f)*(p-f)+(q-l)*(q-l)) Math.min(this.plotArea.width,this.plotArea.height)||(p=k.dataPointIds[e],this._eventManager.objectMap[p]={id:p,objectType:\"dataPoint\",dataSeriesIndex:h,dataPointIndex:e,x1:f,y1:l},p=Q(p),v&&W.drawMarker(g.x,g.y,this._eventManager.ghostCtx,g.type,g.size,p,p,g.borderThickness),(n[e].indexLabel||k.indexLabel||\nn[e].indexLabelFormatter||k.indexLabelFormatter)&&this._indexLabels.push({chartType:\"scatter\",dataPoint:n[e],dataSeries:k,point:{x:f,y:l},direction:1,bounds:{x1:f-g.size/2,y1:l-g.size/2,x2:f+g.size/2,y2:l+g.size/2},color:null}),p=f,q=l)}}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),\nthis._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(b.x1,b.y1,b.width,b.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.fadeInAnimation,easingFunction:L.easing.easeInQuad,animationBase:0}}};m.prototype.renderCandlestick=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d,b=this._eventManager.ghostCtx;if(!(0>=a.dataSeriesIndexes.length)){var e=\nnull,f=null,l=this.plotArea,u=0,h,k,n,p,q,g,e=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1,f=this.options.dataPointMaxWidth?this.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:0.015*this.width,r=a.axisX.dataInfo.minDiff;isFinite(r)||(r=0.3*Math.abs(a.axisX.range));r=this.options.dataPointWidth?this.dataPointWidth:0.7*l.width*(a.axisX.logarithmic?Math.log(r)/Math.log(a.axisX.range):Math.abs(r)/Math.abs(a.axisX.range))<<0;\nthis.dataPointMaxWidth&&e>f&&(e=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,f));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&f f&&(r=f);c.save();v&&b.save();c.beginPath();c.rect(l.x1,l.y1,l.width,l.height);c.clip();v&&(b.beginPath(),b.rect(l.x1,l.y1,l.width,l.height),b.clip());for(var m=0;m a.axisX.dataInfo.viewPortMax)&&!s(x[u].y)&&x[u].y.length&&\"number\"===typeof x[u].y[0]&&\"number\"===typeof x[u].y[1]&&\"number\"===typeof x[u].y[2]&&\"number\"===typeof x[u].y[3]){h=a.axisX.convertValueToPixel(g);k=a.axisY.convertValueToPixel(x[u].y[0]);n=a.axisY.convertValueToPixel(x[u].y[1]);p=a.axisY.convertValueToPixel(x[u].y[2]);q=a.axisY.convertValueToPixel(x[u].y[3]);\nvar E=h-r/2<<0,C=E+r<<0,f=t.options.fallingColor?t.fallingColor:t._colorSet[0],e=x[u].color?x[u].color:t._colorSet[0],B=Math.round(Math.max(1,0.15*r)),y=0===B%2?0:0.5,D=t.dataPointIds[u];this._eventManager.objectMap[D]={id:D,objectType:\"dataPoint\",dataSeriesIndex:w,dataPointIndex:u,x1:E,y1:k,x2:C,y2:n,x3:h,y3:p,x4:h,y4:q,borderThickness:B,color:e};c.strokeStyle=e;c.beginPath();c.lineWidth=B;b.lineWidth=Math.max(B,4);\"candlestick\"===t.type?(c.moveTo(h-y,n),c.lineTo(h-y,Math.min(k,q)),c.stroke(),c.moveTo(h-\ny,Math.max(k,q)),c.lineTo(h-y,p),c.stroke(),ca(c,E,Math.min(k,q),C,Math.max(k,q),x[u].y[0]<=x[u].y[3]?t.risingColor:f,B,e,z,z,!1,!1,t.fillOpacity),v&&(e=Q(D),b.strokeStyle=e,b.moveTo(h-y,n),b.lineTo(h-y,Math.min(k,q)),b.stroke(),b.moveTo(h-y,Math.max(k,q)),b.lineTo(h-y,p),b.stroke(),ca(b,E,Math.min(k,q),C,Math.max(k,q),e,0,null,!1,!1,!1,!1))):\"ohlc\"===t.type&&(c.moveTo(h-y,n),c.lineTo(h-y,p),c.stroke(),c.beginPath(),c.moveTo(h,k),c.lineTo(E,k),c.stroke(),c.beginPath(),c.moveTo(h,q),c.lineTo(C,q),\nc.stroke(),v&&(e=Q(D),b.strokeStyle=e,b.moveTo(h-y,n),b.lineTo(h-y,p),b.stroke(),b.beginPath(),b.moveTo(h,k),b.lineTo(E,k),b.stroke(),b.beginPath(),b.moveTo(h,q),b.lineTo(C,q),b.stroke()));(x[u].indexLabel||t.indexLabel||x[u].indexLabelFormatter||t.indexLabelFormatter)&&this._indexLabels.push({chartType:t.type,dataPoint:x[u],dataSeries:t,point:{x:E+(C-E)/2,y:a.axisY.reversed?p:n},direction:1,bounds:{x1:E,y1:Math.min(n,p),x2:C,y2:Math.max(n,p)},color:e})}}v&&(d.drawImage(this._preRenderCanvas,0,0,\nthis.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(l.x1,l.y1,l.width,l.height),b.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.fadeInAnimation,easingFunction:L.easing.easeInQuad,\nanimationBase:0}}};m.prototype.renderBoxAndWhisker=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d,b=this._eventManager.ghostCtx;if(!(0>=a.dataSeriesIndexes.length)){var e=null,f=this.plotArea,l=0,u,h,k,n,p,q,g,e=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1,l=this.options.dataPointMaxWidth?this.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:0.015*this.width,r=a.axisX.dataInfo.minDiff;isFinite(r)||\n(r=0.3*Math.abs(a.axisX.range));r=this.options.dataPointWidth?this.dataPointWidth:0.7*f.width*(a.axisX.logarithmic?Math.log(r)/Math.log(a.axisX.range):Math.abs(r)/Math.abs(a.axisX.range))<<0;this.dataPointMaxWidth&&e>l&&(e=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,l));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&l l&&(r=l);c.save();v&&b.save();c.beginPath();c.rect(f.x1,f.y1,f.width,\nf.height);c.clip();v&&(b.beginPath(),b.rect(f.x1,f.y1,f.width,f.height),b.clip());for(var m=!1,m=!!a.axisY.reversed,w=0;w a.axisX.dataInfo.viewPortMax)&&!s(z[l].y)&&z[l].y.length&&\"number\"===typeof z[l].y[0]&&\"number\"===typeof z[l].y[1]&&\"number\"===typeof z[l].y[2]&&\n\"number\"===typeof z[l].y[3]&&\"number\"===typeof z[l].y[4]&&5===z[l].y.length){u=a.axisX.convertValueToPixel(g);h=a.axisY.convertValueToPixel(z[l].y[0]);k=a.axisY.convertValueToPixel(z[l].y[1]);n=a.axisY.convertValueToPixel(z[l].y[2]);p=a.axisY.convertValueToPixel(z[l].y[3]);q=a.axisY.convertValueToPixel(z[l].y[4]);var C=u-r/2<<0,B=u+r/2<<0,e=z[l].color?z[l].color:x._colorSet[0],y=Math.round(Math.max(1,0.15*r)),D=0===y%2?0:0.5,S=z[l].whiskerColor?z[l].whiskerColor:z[l].color?x.whiskerColor?x.whiskerColor:\nz[l].color:x.whiskerColor?x.whiskerColor:e,P=\"number\"===typeof z[l].whiskerThickness?z[l].whiskerThickness:\"number\"===typeof x.options.whiskerThickness?x.whiskerThickness:y,F=z[l].whiskerDashType?z[l].whiskerDashType:x.whiskerDashType,aa=s(z[l].whiskerLength)?s(x.options.whiskerLength)?r:x.whiskerLength:z[l].whiskerLength,aa=\"number\"===typeof aa?0>=aa?0:aa>=r?r:aa:\"string\"===typeof aa?parseInt(aa)*r/100>r?r:parseInt(aa)*r/100:r,fa=1===Math.round(P)%2?0.5:0,la=z[l].stemColor?z[l].stemColor:z[l].color?\nx.stemColor?x.stemColor:z[l].color:x.stemColor?x.stemColor:e,ba=\"number\"===typeof z[l].stemThickness?z[l].stemThickness:\"number\"===typeof x.options.stemThickness?x.stemThickness:y,G=1===Math.round(ba)%2?0.5:0,H=z[l].stemDashType?z[l].stemDashType:x.stemDashType,J=z[l].lineColor?z[l].lineColor:z[l].color?x.lineColor?x.lineColor:z[l].color:x.lineColor?x.lineColor:e,M=\"number\"===typeof z[l].lineThickness?z[l].lineThickness:\"number\"===typeof x.options.lineThickness?x.lineThickness:y,T=z[l].lineDashType?\nz[l].lineDashType:x.lineDashType,K=1===Math.round(M)%2?0.5:0,R=x.upperBoxColor,wa=x.lowerBoxColor,ra=s(x.options.fillOpacity)?1:x.fillOpacity,O=x.dataPointIds[l];this._eventManager.objectMap[O]={id:O,objectType:\"dataPoint\",dataSeriesIndex:t,dataPointIndex:l,x1:C,y1:h,x2:B,y2:k,x3:u,y3:n,x4:u,y4:p,y5:q,borderThickness:y,color:e,stemThickness:ba,stemColor:la,whiskerThickness:P,whiskerLength:aa,whiskerColor:S,lineThickness:M,lineColor:J};c.save();0 =a.dataSeriesIndexes.length)){var b=null,e=this.plotArea,f=0,l,u,h,f=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1;l=this.options.dataPointMaxWidth?this.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:0.03*this.width;var k=a.axisX.dataInfo.minDiff;isFinite(k)||(k=0.3*Math.abs(a.axisX.range));\nk=this.options.dataPointWidth?this.dataPointWidth:0.9*(e.width*(a.axisX.logarithmic?Math.log(k)/Math.log(a.axisX.range):Math.abs(k)/Math.abs(a.axisX.range))/a.plotType.totalDataSeries)<<0;this.dataPointMaxWidth&&f>l&&(f=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,l));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&l l&&(k=l);c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();\nc.rect(e.x1,e.y1,e.width,e.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.clip());for(var n=0;n a.axisX.dataInfo.viewPortMax)&&!s(g[f].y)&&g[f].y.length&&\"number\"===\ntypeof g[f].y[0]&&\"number\"===typeof g[f].y[1]){b=a.axisX.convertValueToPixel(h);l=a.axisY.convertValueToPixel(g[f].y[0]);u=a.axisY.convertValueToPixel(g[f].y[1]);var m=a.axisX.reversed?b+a.plotType.totalDataSeries*k/2-(a.previousDataSeriesCount+n)*k<<0:b-a.plotType.totalDataSeries*k/2+(a.previousDataSeriesCount+n)*k<<0,w=a.axisX.reversed?m-k<<0:m+k<<0,b=g[f].color?g[f].color:q._colorSet[f%q._colorSet.length];if(l>u){var t=l;l=u;u=t}t=q.dataPointIds[f];this._eventManager.objectMap[t]={id:t,objectType:\"dataPoint\",\ndataSeriesIndex:p,dataPointIndex:f,x1:m,y1:l,x2:w,y2:u};ca(c,m,l,w,u,b,0,b,r,r,!1,!1,q.fillOpacity);b=Q(t);v&&ca(this._eventManager.ghostCtx,m,l,w,u,b,0,null,!1,!1,!1,!1);if(g[f].indexLabel||q.indexLabel||g[f].indexLabelFormatter||q.indexLabelFormatter)this._indexLabels.push({chartType:\"rangeColumn\",dataPoint:g[f],dataSeries:q,indexKeyword:0,point:{x:m+(w-m)/2,y:g[f].y[1]>=g[f].y[0]?u:l},direction:g[f].y[1]>=g[f].y[0]?-1:1,bounds:{x1:m,y1:Math.min(l,u),x2:w,y2:Math.max(l,u)},color:b}),this._indexLabels.push({chartType:\"rangeColumn\",\ndataPoint:g[f],dataSeries:q,indexKeyword:1,point:{x:m+(w-m)/2,y:g[f].y[1]>=g[f].y[0]?l:u},direction:g[f].y[1]>=g[f].y[0]?1:-1,bounds:{x1:m,y1:Math.min(l,u),x2:w,y2:Math.max(l,u)},color:b})}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,\n0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.fadeInAnimation,easingFunction:L.easing.easeInQuad,animationBase:0}}};m.prototype.renderError=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d,b=a.axisY._position?\"left\"===a.axisY._position||\"right\"===a.axisY._position?!1:!0:!1;if(!(0>=a.dataSeriesIndexes.length)){var e=null,f=!1,l=this.plotArea,\nu=0,h,k,n,p,q,g,r,m=a.axisX.dataInfo.minDiff;isFinite(m)||(m=0.3*Math.abs(a.axisX.range));c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(l.x1,l.y1,l.width,l.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.clip());for(var w=0,t=0;t u&&(e=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,u));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&u u&&(t=u);if(0 =S.length?0:S.length>=t?t:S.length:\"string\"===typeof S.length?parseInt(S.length)*t/100>t?t:parseInt(S.length)*t/100>t:\nt;S.thickness=\"number\"===typeof S.thickness?0>S.thickness?0:Math.round(S.thickness):2;var P={color:C[u].stemColor?C[u].stemColor:C[u].color?E.stemColor?E.stemColor:C[u].color:E.stemColor?E.stemColor:e,thickness:C[u].stemThickness?C[u].stemThickness:E.stemThickness,dashType:C[u].stemDashType?C[u].stemDashType:E.stemDashType};P.thickness=\"number\"===typeof P.thickness?0>P.thickness?0:Math.round(P.thickness):2;C[u].getTime?r=C[u].x.getTime():r=C[u].x;if(!(r a.axisX.dataInfo.viewPortMax)&&\n!s(C[u].y)&&C[u].y.length&&\"number\"===typeof C[u].y[0]&&\"number\"===typeof C[u].y[1]){var ja=a.axisX.convertValueToPixel(r);b?k=ja:h=ja;ja=a.axisY.convertValueToPixel(C[u].y[0]);b?n=ja:q=ja;ja=a.axisY.convertValueToPixel(C[u].y[1]);b?p=ja:g=ja;b?(q=a.axisX.reversed?k+(B?w:1)*t/2-(B?D-1:0)*t<<0:k-(B?w:1)*t/2+(B?D-1:0)*t<<0,g=a.axisX.reversed?q-t<<0:q+t<<0):(n=a.axisX.reversed?h+(B?w:1)*t/2-(B?D-1:0)*t<<0:h-(B?w:1)*t/2+(B?D-1:0)*t<<0,p=a.axisX.reversed?n-t<<0:n+t<<0);!b&&q>g&&(ja=q,q=g,g=ja);b&&n>p&&\n(ja=n,n=p,p=ja);ja=E.dataPointIds[u];this._eventManager.objectMap[ja]={id:ja,objectType:\"dataPoint\",dataSeriesIndex:z,dataPointIndex:u,x1:Math.min(n,p),y1:Math.min(q,g),x2:Math.max(p,n),y2:Math.max(g,q),isXYSwapped:b,stemProperties:P,whiskerProperties:S};y(c,Math.min(n,p),Math.min(q,g),Math.max(p,n),Math.max(g,q),e,S,P,b);v&&y(this._eventManager.ghostCtx,n,q,p,g,e,S,P,b);if(C[u].indexLabel||E.indexLabel||C[u].indexLabelFormatter||E.indexLabelFormatter)this._indexLabels.push({chartType:\"error\",dataPoint:C[u],\ndataSeries:E,indexKeyword:0,point:{x:b?C[u].y[1]>=C[u].y[0]?n:p:n+(p-n)/2,y:b?q+(g-q)/2:C[u].y[1]>=C[u].y[0]?g:q},direction:C[u].y[1]>=C[u].y[0]?-1:1,bounds:{x1:b?Math.min(n,p):n,y1:b?q:Math.min(q,g),x2:b?Math.max(n,p):p,y2:b?g:Math.max(q,g)},color:e,axisSwapped:b}),this._indexLabels.push({chartType:\"error\",dataPoint:C[u],dataSeries:E,indexKeyword:1,point:{x:b?C[u].y[1]>=C[u].y[0]?p:n:n+(p-n)/2,y:b?q+(g-q)/2:C[u].y[1]>=C[u].y[0]?q:g},direction:C[u].y[1]>=C[u].y[0]?1:-1,bounds:{x1:b?Math.min(n,p):\nn,y1:b?q:Math.min(q,g),x2:b?Math.max(n,p):p,y2:b?g:Math.max(q,g)},color:e,axisSwapped:b})}}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(l.x1,l.y1,l.width,l.height),\nthis._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.fadeInAnimation,easingFunction:L.easing.easeInQuad,animationBase:0}}};m.prototype.renderRangeBar=function(a){var d=a.targetCanvasCtx||this.plotArea.ctx,c=v?this._preRenderCtx:d;if(!(0>=a.dataSeriesIndexes.length)){var b=null,e=this.plotArea,f=0,l,u,h,k,f=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1;l=this.options.dataPointMaxWidth?\nthis.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:Math.min(0.15*this.height,0.9*(this.plotArea.height/a.plotType.totalDataSeries))<<0;var n=a.axisX.dataInfo.minDiff;isFinite(n)||(n=0.3*Math.abs(a.axisX.range));n=this.options.dataPointWidth?this.dataPointWidth:0.9*(e.height*(a.axisX.logarithmic?Math.log(n)/Math.log(a.axisX.range):Math.abs(n)/Math.abs(a.axisX.range))/a.plotType.totalDataSeries)<<0;this.dataPointMaxWidth&&f>l&&(f=Math.min(this.options.dataPointWidth?this.dataPointWidth:\nInfinity,l));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&l l&&(n=l);c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(e.x1,e.y1,e.width,e.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.clip());for(var p=0;p a.axisX.dataInfo.viewPortMax)&&!s(r[f].y)&&r[f].y.length&&\"number\"===typeof r[f].y[0]&&\"number\"===typeof r[f].y[1]){l=a.axisY.convertValueToPixel(r[f].y[0]);u=a.axisY.convertValueToPixel(r[f].y[1]);h=a.axisX.convertValueToPixel(k);h=a.axisX.reversed?h+a.plotType.totalDataSeries*n/2-(a.previousDataSeriesCount+p)*\nn<<0:h-a.plotType.totalDataSeries*n/2+(a.previousDataSeriesCount+p)*n<<0;var w=a.axisX.reversed?h-n<<0:h+n<<0;l>u&&(b=l,l=u,u=b);b=r[f].color?r[f].color:g._colorSet[f%g._colorSet.length];ca(c,l,h,u,w,b,0,null,m,!1,!1,!1,g.fillOpacity);b=g.dataPointIds[f];this._eventManager.objectMap[b]={id:b,objectType:\"dataPoint\",dataSeriesIndex:q,dataPointIndex:f,x1:l,y1:h,x2:u,y2:w};b=Q(b);v&&ca(this._eventManager.ghostCtx,l,h,u,w,b,0,null,!1,!1,!1,!1);if(r[f].indexLabel||g.indexLabel||r[f].indexLabelFormatter||\ng.indexLabelFormatter)this._indexLabels.push({chartType:\"rangeBar\",dataPoint:r[f],dataSeries:g,indexKeyword:0,point:{x:r[f].y[1]>=r[f].y[0]?l:u,y:h+(w-h)/2},direction:r[f].y[1]>=r[f].y[0]?-1:1,bounds:{x1:Math.min(l,u),y1:h,x2:Math.max(l,u),y2:w},color:b}),this._indexLabels.push({chartType:\"rangeBar\",dataPoint:r[f],dataSeries:g,indexKeyword:1,point:{x:r[f].y[1]>=r[f].y[0]?u:l,y:h+(w-h)/2},direction:r[f].y[1]>=r[f].y[0]?1:-1,bounds:{x1:Math.min(l,u),y1:h,x2:Math.max(l,u),y2:w},color:b})}}}v&&(d.drawImage(this._preRenderCanvas,\n0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.clearRect(e.x1,e.y1,e.width,e.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.fadeInAnimation,easingFunction:L.easing.easeInQuad,\nanimationBase:0}}};m.prototype.renderRangeArea=function(a){function d(){if(x){for(var a=null,c=h.length-1;0<=c;c--)a=h[c],b.lineTo(a.x,a.y2),e.lineTo(a.x,a.y2);b.closePath();b.globalAlpha=n.fillOpacity;b.fill();b.globalAlpha=1;e.fill();if(0 =a.dataSeriesIndexes.length)){var e=this._eventManager.ghostCtx,f=[],l=this.plotArea;b.save();v&&e.save();b.beginPath();b.rect(l.x1,l.y1,l.width,l.height);b.clip();v&&(e.beginPath(),e.rect(l.x1,l.y1,l.width,l.height),e.clip());for(var u=0;u a.axisX.dataInfo.viewPortMax&&(!n.connectNullData||\n!S)))if(null!==p[g].y&&p[g].y.length&&\"number\"===typeof p[g].y[0]&&\"number\"===typeof p[g].y[1]){r=a.axisX.convertValueToPixel(t);m=a.axisY.convertValueToPixel(p[g].y[0]);s=a.axisY.convertValueToPixel(p[g].y[1]);q||S?(n.connectNullData&&!q?(b.setLineDash&&(n.options.nullDataLineDashType||B===n.lineDashType&&n.lineDashType!==n.nullDataLineDashType)&&(h[h.length-1].newLineDashArray=D,B=n.nullDataLineDashType,b.setLineDash(y)),b.lineTo(r,m),v&&e.lineTo(r,m),h.push({x:r,y1:m,y2:s})):(b.beginPath(),b.moveTo(r,\nm),x={x:r,y:m},h=[],h.push({x:r,y1:m,y2:s}),v&&(e.beginPath(),e.moveTo(r,m))),S=q=!1):(b.lineTo(r,m),h.push({x:r,y1:m,y2:s}),v&&e.lineTo(r,m),0==g%250&&d());t=n.dataPointIds[g];this._eventManager.objectMap[t]={id:t,objectType:\"dataPoint\",dataSeriesIndex:k,dataPointIndex:g,x1:r,y1:m,y2:s};g p[g].y[1]===a.axisY.reversed?-1:1,color:w}),this._indexLabels.push({chartType:\"rangeArea\",dataPoint:p[g],dataSeries:n,indexKeyword:1,point:{x:r,y:s},direction:p[g].y[0]>p[g].y[1]===a.axisY.reversed?1:-1,color:w})}else S||q||d(),S=!0;d();W.drawMarkers(f)}}v&&\n(c.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&b.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&b.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,0,0,this.width,this.height),b.clearRect(l.x1,l.y1,l.width,l.height),this._eventManager.ghostCtx.restore());b.restore();return{source:c,dest:this.plotArea.ctx,animationCallback:L.xClipAnimation,\neasingFunction:L.easing.linear,animationBase:0}}};m.prototype.renderRangeSplineArea=function(a){function d(a,c){var d=w(s,2);if(0 =a.dataSeriesIndexes.length)){var e=\nthis._eventManager.ghostCtx,f=[],l=this.plotArea;b.save();v&&e.save();b.beginPath();b.rect(l.x1,l.y1,l.width,l.height);b.clip();v&&(e.beginPath(),e.rect(l.x1,l.y1,l.width,l.height),e.clip());for(var h=0;h a.axisX.dataInfo.viewPortMax&&(!k.connectNullData||!g)))if(null!==n[p].y&&n[p].y.length&&\"number\"===typeof n[p].y[0]&&\"number\"===typeof n[p].y[1]){q=a.axisX.convertValueToPixel(q);g=a.axisY.convertValueToPixel(n[p].y[0]);r=a.axisY.convertValueToPixel(n[p].y[1]);\nvar D=k.dataPointIds[p];this._eventManager.objectMap[D]={id:D,objectType:\"dataPoint\",dataSeriesIndex:m,dataPointIndex:p,x1:q,y1:g,y2:r};s[s.length]={x:q,y:g};y[y.length]={x:q,y:r};p =a.dataSeriesIndexes.length)){var b=this._eventManager.ghostCtx,e=null,f=this.plotArea,l=0,h,m,k,n,p=a.axisY.convertValueToPixel(a.axisY.logarithmic?a.axisY.viewportMinimum:0),l=this.options.dataPointMinWidth?this.dataPointMinWidth:this.options.dataPointWidth?this.dataPointWidth:1;m=this.options.dataPointMaxWidth?this.dataPointMaxWidth:this.options.dataPointWidth?this.dataPointWidth:\nMath.min(0.15*this.width,0.9*(this.plotArea.width/a.plotType.totalDataSeries))<<0;var q=a.axisX.dataInfo.minDiff;isFinite(q)||(q=0.3*Math.abs(a.axisX.range));q=this.options.dataPointWidth?this.dataPointWidth:0.6*(f.width*(a.axisX.logarithmic?Math.log(q)/Math.log(a.axisX.range):Math.abs(q)/Math.abs(a.axisX.range))/a.plotType.totalDataSeries)<<0;this.dataPointMaxWidth&&l>m&&(l=Math.min(this.options.dataPointWidth?this.dataPointWidth:Infinity,m));!this.dataPointMaxWidth&&(this.dataPointMinWidth&&m m&&(q=m);c.save();v&&this._eventManager.ghostCtx.save();c.beginPath();c.rect(f.x1,f.y1,f.width,f.height);c.clip();v&&(this._eventManager.ghostCtx.beginPath(),this._eventManager.ghostCtx.rect(f.x1,f.y1,f.width,f.height),this._eventManager.ghostCtx.clip());for(var g=0;g k&&(e=m,m=k,k=e);a.axisY.reversed&&(e=m,m=k,k=e);e=s.dataPointIds[l];this._eventManager.objectMap[e]=\n{id:e,objectType:\"dataPoint\",dataSeriesIndex:r,dataPointIndex:l,x1:h,y1:m,x2:D,y2:k};var S=w[l].color?w[l].color:0 w[l].y===a.axisY.reversed?1:-1,bounds:{x1:h,y1:Math.min(m,k),x2:D,y2:Math.max(m,k)},color:e})}}v&&(d.drawImage(this._preRenderCanvas,0,0,this.width,this.height),c.globalCompositeOperation=\"source-atop\",a.axisX.maskCanvas&&c.drawImage(a.axisX.maskCanvas,0,0,this.width,this.height),a.axisY.maskCanvas&&c.drawImage(a.axisY.maskCanvas,0,0,this.width,this.height),this._breaksCanvasCtx&&this._breaksCanvasCtx.drawImage(this._preRenderCanvas,\n0,0,this.width,this.height),c.clearRect(f.x1,f.y1,f.width,f.height),this._eventManager.ghostCtx.restore());c.restore();return{source:d,dest:this.plotArea.ctx,animationCallback:L.fadeInAnimation,easingFunction:L.easing.easeInQuad,animationBase:0}}};var Y=function(a,d,c,b,e,f,l,h,m){if(!(0>c)){\"undefined\"===typeof h&&(h=1);if(!v){var k=Number((l%(2*Math.PI)).toFixed(8));Number((f%(2*Math.PI)).toFixed(8))===k&&(l-=1E-4)}a.save();a.globalAlpha=h;\"pie\"===e?(a.beginPath(),a.moveTo(d.x,d.y),a.arc(d.x,d.y,\nc,f,l,!1),a.fillStyle=b,a.strokeStyle=\"white\",a.lineWidth=2,a.closePath(),a.fill()):\"doughnut\"===e&&(a.beginPath(),a.arc(d.x,d.y,c,f,l,!1),0<=m&&a.arc(d.x,d.y,m*c,l,f,!0),a.closePath(),a.fillStyle=b,a.strokeStyle=\"white\",a.lineWidth=2,a.fill());a.globalAlpha=1;a.restore()}};m.prototype.renderPie=function(a){function d(){if(k&&n){for(var a=0,b=0,c=0,d=0,e=0;e Math.PI/2-t&&p.midAngle p.midAngle)c=e;a++}else if(p.midAngle>3*Math.PI/2-t&&p.midAngle<3*Math.PI/2+t){if(0===b||g[d].midAngle>p.midAngle)d=e;b++}p.hemisphere=f>Math.PI/2&&f<=3*Math.PI/2?\"left\":\"right\";p.indexLabelTextBlock=new ia(m.plotArea.ctx,{fontSize:p.indexLabelFontSize,fontFamily:p.indexLabelFontFamily,fontColor:p.indexLabelFontColor,fontStyle:p.indexLabelFontStyle,fontWeight:p.indexLabelFontWeight,horizontalAlign:\"left\",backgroundColor:p.indexLabelBackgroundColor,\nmaxWidth:p.indexLabelMaxWidth,maxHeight:p.indexLabelWrap?5*p.indexLabelFontSize:1.5*p.indexLabelFontSize,text:p.indexLabelText,padding:0,textBaseline:\"top\"});p.indexLabelTextBlock.measureText()}l=f=0;h=!1;for(e=0;e Math.PI/2-t&&p.midAngle 3*Math.PI/2-t&&p.midAngle<3*Math.PI/2+t)&&(l<=b/2&&!h?(p.hemisphere=\n\"left\",l++):(p.hemisphere=\"right\",h=!0))}}function c(a){var b=m.plotArea.ctx;b.clearRect(q.x1,q.y1,q.width,q.height);b.fillStyle=m.backgroundColor;b.fillRect(q.x1,q.y1,q.width,q.height);for(b=0;b c){var e=0.07*B*Math.cos(g[b].midAngle),f=0.07*B*Math.sin(g[b].midAngle),l=!1;if(n[b].exploded){if(1E-9 a.indexLabelTextBlock.y?e-d:c-f}function e(a){for(var c=null,d=1;d b(g[c],g[a])||(\"right\"===g[a].hemisphere?g[c].indexLabelTextBlock.y>=g[a].indexLabelTextBlock.y:g[c].indexLabelTextBlock.y<=g[a].indexLabelTextBlock.y)))break;\nelse c=null;return c}function f(a,c,d){d=(d||0)+1;if(1E3 c&&h.indexLabelTextBlock.y p)return 0;var q=0,u=0,u=q=q=0;0>c?h.indexLabelTextBlock.y-h.indexLabelTextBlock.height/2>l&&h.indexLabelTextBlock.y-h.indexLabelTextBlock.height/2+c p&&(c=h.indexLabelTextBlock.y+h.indexLabelTextBlock.height/2+c-p);c=h.indexLabelTextBlock.y+c;l=0;l=\"right\"===h.hemisphere?z.x+Math.sqrt(Math.pow(v,2)-Math.pow(c-z.y,2)):z.x-Math.sqrt(Math.pow(v,2)-Math.pow(c-z.y,2));u=z.x+B*Math.cos(h.midAngle);q=z.y+B*Math.sin(h.midAngle);q=Math.sqrt(Math.pow(l-u,2)+Math.pow(c-q,2));u=Math.acos(B/v);q=Math.acos((v*v+B*B-q*q)/(2*B*v));c=qb(g[l],g[a])||(\"right\"===g[a].hemisphere?g[l].indexLabelTextBlock.y<=g[a].indexLabelTextBlock.y:g[l].indexLabelTextBlock.y>=g[a].indexLabelTextBlock.y)))break;else l=null;u=l;q=e(a);p=l=0;0>c?(p=\"right\"===h.hemisphere?u:q,k=c,null!==p&&(u=-c,c=h.indexLabelTextBlock.y-h.indexLabelTextBlock.height/2-(g[p].indexLabelTextBlock.y+g[p].indexLabelTextBlock.height/2),c-u \n+l.toFixed(x)&&(k=c>r?-(c-r):-(u-(p-l)))))):0 r?c-r:u-(l-p)))));k&&(d=h.indexLabelTextBlock.y+k,c=0,c=\"right\"===h.hemisphere?z.x+Math.sqrt(Math.pow(v,2)-Math.pow(d-z.y,2)):z.x-Math.sqrt(Math.pow(v,2)-Math.pow(d-z.y,2)),h.midAngle>Math.PI/2-t&&h.midAngle l.indexLabelTextBlock.x?c=l.indexLabelTextBlock.x-15:\"right\"===h.hemisphere&&(\"left\"===a.hemisphere&&c 3*Math.PI/2-t&&h.midAngle<3*Math.PI/2+t&&(l=(a-1+g.length)%g.length,l=g[l],a=g[(a+1+g.length)%g.length],\"right\"===h.hemisphere&&\"left\"===l.hemisphere&&c a.indexLabelTextBlock.x)&&(c=a.indexLabelTextBlock.x-15)),h.indexLabelTextBlock.y=d,h.indexLabelTextBlock.x=c,h.indexLabelAngle=Math.atan2(h.indexLabelTextBlock.y-z.y,h.indexLabelTextBlock.x-z.x))}return k}function l(){var a=m.plotArea.ctx;a.fillStyle=\"grey\";a.strokeStyle=\"grey\";a.font=\"16px Arial\";a.textBaseline=\"middle\";for(var c=a=0,d=0,l=!0,c=0;10>c&&(1>c||0 E){for(var C=s=0,F=0;F s?h.indexLabelText=\"\":h.indexLabelTextBlock.maxWidth=0.85*s,0.3*h.indexLabelTextBlock.maxWidth d&&(d=t)),t=t=0,0d&&(d=t)));var K=function(a,b,c){for(var d=[],e=0;d.push(g[b]),b!==c;b=(b+1+n.length)%n.length);d.sort(function(a,b){return a.y-b.y});for(b=0;b E){q=u.indexLabelTextBlock.x;var m=u.indexLabelTextBlock.y-u.indexLabelTextBlock.height/2,r=u.indexLabelTextBlock.y+u.indexLabelTextBlock.height/2,s=h.indexLabelTextBlock.y-h.indexLabelTextBlock.height/2,t=h.indexLabelTextBlock.x+h.indexLabelTextBlock.width,A=h.indexLabelTextBlock.y+h.indexLabelTextBlock.height/2;q=u.indexLabelTextBlock.x+u.indexLabelTextBlock.width t+p||m>A+p||r a&&(a=k),l!==a&&(c=l,d+=-E),0===k%Math.max(n.length/\n10,3)&&(f=!0)):f=!0;f&&(0 =a.dataSeriesIndexes.length)){var k=this.data[a.dataSeriesIndexes[0]],n=k.dataPoints,p=10,q=this.plotArea,g=k.dataPointEOs,r=2,v,w=1.3,t=20/180*Math.PI,x=6,z={x:(q.x2+q.x1)/2,y:(q.y2+q.y1)/2},E=0;a=!1;for(var C=0;C b&&(e=b,f=!0);var l=n[c].color?n[c].color:k._colorSet[c%k._colorSet.length];e>d&&Y(m.plotArea.ctx,g[c].center,g[c].radius,l,k.type,d,e,k.fillOpacity,g[c].percentInnerRadius);if(f)break}h();m.dispatchEvent(\"dataAnimationIterationEnd\",{chart:m});1<=a&&m.dispatchEvent(\"dataAnimationEnd\",{chart:m})},function(){m.disableToolTip=!1;m._animator.animate(0,\nm.animatedRender?500:0,function(a){c(a);h();m.dispatchEvent(\"dataAnimationIterationEnd\",{chart:m})});m.dispatchEvent(\"dataAnimationEnd\",{chart:m})})}}};var pa=function(a,d,c,b){\"undefined\"===typeof c&&(c=1);0>=Math.round(d.y4-d.y1)||(a.save(),a.globalAlpha=c,a.beginPath(),a.moveTo(Math.round(d.x1),Math.round(d.y1)),a.lineTo(Math.round(d.x2),Math.round(d.y2)),a.lineTo(Math.round(d.x3),Math.round(d.y3)),a.lineTo(Math.round(d.x4),Math.round(d.y4)),\"undefined\"!==d.x5&&(a.lineTo(Math.round(d.x5),Math.round(d.y5)),\na.lineTo(Math.round(d.x6),Math.round(d.y6))),a.closePath(),a.fillStyle=b?b:d.color,a.fill(),a.globalAplha=1,a.restore())};m.prototype.renderFunnel=function(a){function d(){for(var a=0,b=[],c=0;c p?(p=c,l=(b+p)*(e-n)/2,a-=l,h=e-n,n+=e-n,h+=0==p?0:a/p,n+=a/p,l=!0):(h=(Math.abs($)*b-Math.sqrt(p))/2,p=b-2*h/Math.abs($),n+=h,n>e&&(n-=h,p=c,l=(b+p)*(e-n)/2,a-=l,h=e-n,n+=e-n,h+=a/p,n+=a/p,l=!0),b=\np)),d.push(h);return d}function b(){if(t&&x){for(var a,b,c,d,e,f,k,l,n,h,p,q,u,m,r=[],A=[],w={percent:null,total:null},E=null,z=0;z r[z]&&(r[z]=z!==ca?t.reversed?\nO[z].x3-O[z].x4:O[z].x2-O[z].x1:O[z].x2-O[z].x1,r[z]/=2));u=b.indexLabelMaxWidth?b.indexLabelMaxWidth:t.options.indexLabelMaxWidth?t.indexLabelMaxWidth:r[z];if(u>r[z]||0>u)u=r[z];A[z]=\"inside\"===t.indexLabelPlacement?O[z].height:!1;w=y.getPercentAndTotal(t,b);if(t.indexLabelFormatter||b.indexLabelFormatter)E={chart:y.options,dataSeries:t,dataPoint:b,total:w.total,percent:w.percent};b=b.indexLabelFormatter?b.indexLabelFormatter(E):b.indexLabel?y.replaceKeywordsWithValue(b.indexLabel,b,t,z):t.indexLabelFormatter?\nt.indexLabelFormatter(E):t.indexLabel?y.replaceKeywordsWithValue(t.indexLabel,b,t,z):b.label?b.label:\"\";0>=h&&(h=0);1E3>u&&1E3-u k?k:t.indexLabelMaxWidth:k,l=I.length-1;0<=l;l--){g=x[I[l].id];c=I[l];d=c.textBlock;b=(a=q(l) b.y&&(e=!0);c=g.indexLabelMaxWidth||k;if(c>k||0>c)c=k;f.push(c)}if(e)for(l=I.length-1;0<=l;l--)a=O[l],I[l].textBlock.maxWidth=f[f.length-(l+1)],I[l].textBlock.measureText(),I[l].textBlock.x=\nJ-k,c=I[l].textBlock.heightma+E&&(I[l].textBlock.y=ma+E-I[l].height),I[l].textBlock.y ra+E&&(I[l].textBlock.y=ra+E-I[l].height))}function f(){var a,b,c,d;if(\"inside\"!==t.indexLabelPlacement)for(var e=0;e wa?g(c).x2+1:(a.x2+a.x3)/2+1:(a.x2+a.x3)/2+1:\"undefined\"!==typeof a.x5?c \nma+E&&(I[e].textBlock.y=ma+E-I[e].height),I[e].textBlock.y ra+E&&(I[e].textBlock.y=ra+E-I[e].height)));else for(e=0;e =c?(b=e!=ca?(a.x4+a.x3)/2-d/2:(a.x5+a.x4)/2-d/2,c=e!=ca?(a.y1+a.y3)/2-c/2:(a.y1+a.y4)/2-c/2,I[e].textBlock.x=b,I[e].textBlock.y=c):I[e].isDirty=!0)}function l(){function a(b,\nc){var d;if(0>b||b>=I.length)return 0;var e,f=I[b].textBlock;if(0>c){c*=-1;e=p(b);d=h(e,b);if(d>=c)return f.y-=c,c;if(0==b)return 0 =c)return f.y+=c,c;if(b==O.length-1)return 0 e)&&(l=q(u),!(l>=I.length-1)&&\nI[u].textBlock.y+I[u].height+da>I[l].textBlock.y&&(I[u].textBlock.y=I[u].textBlock.y+I[u].height-e>e-I[u].textBlock.y?e+1:e-I[u].height-1))}for(l=O.length-1;0 e&&(e=0,I[e].isDirty))break;if(I[l].textBlock.y=f){f=0;k+=I[f].height;break}e=p(f);if(0>e){f=0;k+=I[f].height;break}}if(f!=l){g=I[f].textBlock.y;\na-=g;a=k-a;g=c(a,d,f);break}}}return g}function c(a,b,d){var e=[],f=0,g=0;for(a=Math.abs(a);d<=b;d++)e.push(O[d]);e.sort(function(a,b){return a.height-b.height});for(d=0;d +l.y.toFixed(6))&&(d=g.y+d+da-l.y,e=a(r,-d),e a?t.reversed?ra-E:ma-E:I[a].textBlock.y+I[a].height+da)}function m(a,b,c){var d,e,g,l=[],h=E,p=[];-1!==b&&(0<=Y.indexOf(b)?(e=Y.indexOf(b),Y.splice(e,1)):(Y.push(b),Y=Y.sort(function(a,b){return a-b})));if(0===Y.length)l=ga;else{e=E*(1!=Y.length||0!=Y[0]&&Y[0]!=O.length-\n1?2:1)/k();for(var q=0;q p&&(p*=-1),c.y1+=b-p[d],c.y2+=b-p[d],c.y3+=b-p[d],c.y4+=b-p[d],c.y5&&(c.y5+=b-p[d],c.y6+=b-p[d]),p[d]=b}};a._animator.animate(0,c,function(c){var d=a.plotArea.ctx||a.ctx;ha=!0;d.clearRect(z.x1,z.y1,z.x2-z.x1,z.y2-z.y1);d.fillStyle=a.backgroundColor;d.fillRect(z.x1,z.y1,z.width,z.height);u.changeSection(c,b);var e={};e.dataSeries=t;e.dataPoint=t.reversed?t.dataPoints[x.length-1-b]:t.dataPoints[b];e.index=t.reversed?x.length-1-b:b;a.toolTip.highlightObjects([e]);for(e=0;e a){b=O[c];break}return b?(a=b.y6?a>b.y6?b.x3+(b.x4-b.x3)/(b.y4-b.y3)*(a-b.y3):b.x2+(b.x3-b.x2)/(b.y3-b.y2)*(a-b.y2):b.x2+(b.x3-b.x2)/(b.y3-b.y2)*(a-b.y2),{x1:a,x2:a}):-1}function r(a){for(var b=\n0;b =a.dataSeriesIndexes.length)){for(var t=this.data[a.dataSeriesIndexes[0]],x=t.dataPoints,z=this.plotArea,E=0.025*z.width,C=0.01*z.width,B=0,D=z.height-2*E,F=Math.min(z.width-2*C,2.8*z.height),H=!1,P=0;P D?ba=D:0>=ba&&(ba=0),G>a?G=a-0.5:0>=G&&(G=0)):\"pyramid\"===t.type&&(G=ba=0,t.reversed=t.reversed?!1:!0);var C=P+a/2,X=P,Z=P+a,ma=t.reversed?Q:M,K=C-G/2,W=C+G/2,wa=t.reversed?M+ba:Q-ba,ra=t.reversed?M:Q;a=[];var C=[],O=\n[],F=[],U=M,ca,$=(wa-ma)/(K-X),ea=-$,P=\"area\"===(t.valueRepresents?t.valueRepresents:\"height\")?c():d();if(-1!==P){if(t.reversed)for(F.push(U),G=P.length-1;0 a&&(B=a));for(G=0;G ');b.document.close();setTimeout(function(){b.focus();b.print();setTimeout(function(){c._canvasJSContainer.removeChild(d)},1E3)},500)};m.prototype.getPercentAndTotal=function(a,d){var c=null,b=null,e=c=null;if(0<=a.type.indexOf(\"stacked\"))b=0,c=d.x.getTime?d.x.getTime():d.x,c in a.plotUnit.yTotals&&(b=a.plotUnit.yTotals[c],c=a.plotUnit.yAbsTotals[c],e=isNaN(d.y)?0:0===c?0:100*(d.y/c));else if(\"pie\"===a.type||\"doughnut\"===a.type||\"funnel\"===a.type||\"pyramid\"===a.type){for(c=b=0;c<\na.dataPoints.length;c++)isNaN(a.dataPoints[c].y)||(b+=a.dataPoints[c].y);e=isNaN(d.y)?0:100*(d.y/b)}return{percent:e,total:b}};m.prototype.replaceKeywordsWithValue=function(a,d,c,b,e){var f=this;e=\"undefined\"===typeof e?0:e;if((0<=c.type.indexOf(\"stacked\")||\"pie\"===c.type||\"doughnut\"===c.type||\"funnel\"===c.type||\"pyramid\"===c.type)&&(0<=a.indexOf(\"#percent\")||0<=a.indexOf(\"#total\"))){var l=\"#percent\",h=\"#total\",m=this.getPercentAndTotal(c,d),h=isNaN(m.total)?h:m.total,l=isNaN(m.percent)?l:m.percent;\ndo{m=\"\";if(c.percentFormatString)m=c.percentFormatString;else{var m=\"#,##0.\",k=Math.max(Math.ceil(Math.log(1/Math.abs(l))/Math.LN10),2);if(isNaN(k)||!isFinite(k))k=2;for(var n=0;n Please right click on the image and save it to your device\"),\nd.document.close()}}};m.prototype.print=function(){var a=this.exportChart({toDataURL:!0}),d=document.createElement(\"iframe\");d.setAttribute(\"class\",\"canvasjs-chart-print-frame\");d.setAttribute(\"style\",\"position:absolute; width:100%; border: 0px; margin: 0px 0px 0px 0px; padding 0px 0px 0px 0px;\");d.style.height=this.height+\"px\";this._canvasJSContainer.appendChild(d);var c=this,b=d.contentWindow||d.contentDocument.document||d.contentDocument;b.document.open();b.document.write('\\n=l||\"undefined\"===typeof l||0>=w||\"undefined\"===typeof w)){if(\"horizontal\"===this.orientation){q.textBlock=new ia(this.ctx,{x:0,y:0,maxWidth:w,maxHeight:this.itemWrap?l:this.lineHeight,angle:0,text:q.text,horizontalAlign:\"left\",fontSize:this.fontSize,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontColor:this.fontColor,\nfontStyle:this.fontStyle,textBaseline:\"middle\"});q.textBlock.measureText();null!==this.itemWidth&&(q.textBlock.width=this.itemWidth-(v+h+(\"line\"===q.chartType||\"spline\"===q.chartType||\"stepLine\"===q.chartType?2*0.1*this.lineHeight:0)));if(!p||p.width+Math.round(q.textBlock.width+v+h+(0===p.width?0:this.horizontalSpacing)+(\"line\"===q.chartType||\"spline\"===q.chartType||\"stepLine\"===q.chartType?2*0.1*this.lineHeight:0))>f)p={items:[],width:0},k.push(p),this.height+=g,g=0;g=Math.max(g,q.textBlock.height)}else q.textBlock=\nnew ia(this.ctx,{x:0,y:0,maxWidth:z,maxHeight:!0===this.itemWrap?l:1.5*this.fontSize,angle:0,text:q.text,horizontalAlign:\"left\",fontSize:this.fontSize,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontColor:this.fontColor,fontStyle:this.fontStyle,textBaseline:\"middle\"}),q.textBlock.measureText(),null!==this.itemWidth&&(q.textBlock.width=this.itemWidth-(v+h+(\"line\"===q.chartType||\"spline\"===q.chartType||\"stepLine\"===q.chartType?2*0.1*this.lineHeight:0))),this.height >0,0),this.dataPoints.length):0):(n=this.dataPoints[this.dataPoints.length-1].x-this.dataPoints[0].x,n=0 >0,0),this.dataPoints.length):0));for(;;){f=\n0 a?b.x/a:a/b.x:Math.abs(b.x-a);p n-e&&n+e>=this.dataPoints.length)break;-1===l?(e++,l=1):l=-1}return d||(c.dataPoint.x.getTime?c.dataPoint.x.getTime():c.dataPoint.x)!==(a.getTime?a.getTime():a)?d&&null!==c.dataPoint?c:null:c};H.prototype.getDataPointAtXY=function(a,d,c){if(!this.dataPoints||0===\nthis.dataPoints.length||a this.chart.plotArea.x2||d this.chart.plotArea.y2)return null;c=c||!1;var b=[],e=0,f=0,l=1,h=!1,m=Infinity,k=0,n=0,p=0;if(\"none\"!==this.chart.plotInfo.axisPlacement)if(p=(this.chart.axisX[0]?this.chart.axisX[0]:this.chart.axisX2[0]).getXValueAt({x:a,y:d}),this.axisX.logarithmic)var q=Math.log(this.dataPoints[this.dataPoints.length-1].x/this.dataPoints[0].x),p=1 >0,0),this.dataPoints.length):0;else q=this.dataPoints[this.dataPoints.length-1].x-this.dataPoints[0].x,p=0>0,0),this.dataPoints.length):0;for(;;){f=0=\nq.x1&&(a<=q.x2&&d>=q.y1&&d<=q.y2)&&(b.push({dataPoint:g,dataPointIndex:f,dataSeries:this,distance:Math.min(Math.abs(q.x1-a),Math.abs(q.x2-a),Math.abs(q.y1-d),Math.abs(q.y2-d))}),h=!0);break;case \"line\":case \"stepLine\":case \"spline\":case \"area\":case \"stepArea\":case \"stackedArea\":case \"stackedArea100\":case \"splineArea\":case \"scatter\":var s=ka(\"markerSize\",g,this)||4,v=c?20:s,r=Math.sqrt(Math.pow(q.x1-a,2)+Math.pow(q.y1-d,2));r<=v&&b.push({dataPoint:g,dataPointIndex:f,dataSeries:this,distance:r});q=\nMath.abs(q.x1-a);q<=m?m=q:0 v&&(r=Math.atan2(d-s.y,a-s.x),0>r&&(r+=2*Math.PI),r=Number(((180*(r/Math.PI)%360+360)%360).toFixed(12)),s=Number(((180*(q.startAngle/Math.PI)%360+360)%360).toFixed(12)),v=Number(((180*(q.endAngle/Math.PI)%360+360)%360).toFixed(12)),0===v&&1 =v&&0!==g.y&&(v+=360,r s&&rr.y1&&d r.y6?(f=r.x6+(r.x5-r.x6)/(r.y5-r.y6)*(d-r.y6),r=r.x3+(r.x4-r.x3)/(r.y4-r.y3)*(d-r.y3)):(f=r.x1+(r.x6-r.x1)/(r.y6-r.y1)*(d-r.y1),r=r.x2+(r.x3-r.x2)/(r.y3-r.y2)*(d-r.y2)):(f=r.x1+(r.x4-r.x1)/(r.y4-r.y1)*(d-r.y1),r=r.x2+(r.x3-r.x2)/(r.y3-r.y2)*(d-r.y2)),a>f&&a =\nq.x1-q.borderThickness/2&&a<=q.x2+q.borderThickness/2&&d>=q.y4-q.borderThickness/2&&d<=q.y1+q.borderThickness/2||Math.abs(q.x2-a+q.x1-a) =q.y1&&d<=q.y4)b.push({dataPoint:g,dataPointIndex:f,dataSeries:this,distance:Math.min(Math.abs(q.x1-a),Math.abs(q.x2-a),Math.abs(q.y2-d),Math.abs(q.y3-d))}),h=!0;break;case \"candlestick\":if(a>=q.x1-q.borderThickness/2&&a<=q.x2+q.borderThickness/2&&d>=q.y2-q.borderThickness/2&&d<=q.y3+q.borderThickness/2||Math.abs(q.x2-a+q.x1-a) =q.y1&&d<=q.y4)b.push({dataPoint:g,dataPointIndex:f,dataSeries:this,distance:Math.min(Math.abs(q.x1-a),Math.abs(q.x2-a),Math.abs(q.y2-d),Math.abs(q.y3-d))}),h=!0;break;case \"ohlc\":if(Math.abs(q.x2-a+q.x1-a) =q.y2&&d<=q.y3||a>=q.x1&&a<=(q.x2+q.x1)/2&&d>=q.y1-q.borderThickness/2&&d<=q.y1+q.borderThickness/2||a>=(q.x1+q.x2)/2&&a<=q.x2&&d>=q.y4-q.borderThickness/2&&d<=q.y4+q.borderThickness/2)b.push({dataPoint:g,dataPointIndex:f,dataSeries:this,distance:Math.min(Math.abs(q.x1-a),\nMath.abs(q.x2-a),Math.abs(q.y2-d),Math.abs(q.y3-d))}),h=!0}if(h||1E3 p-e&&p+e>=this.dataPoints.length)break;-1===l?(e++,l=1):l=-1}a=null;for(d=0;d p[g].endValue;g++);a=g =p[g].startValue&&c<=p[g].endValue;n=c;a||(a=this.labelFormatter?this.labelFormatter({chart:this.chart,axis:this.options,value:n,label:this.labels[n]?this.labels[n]:null}):\"axisX\"===this.type&&this.labels[n]?this.labels[n]:ea(n,this.valueFormatString,this.chart._cultureInfo),a=new ia(this.ctx,{x:0,y:0,maxWidth:f,maxHeight:l,angle:this.labelAngle,text:this.prefix+a+this.suffix,backgroundColor:this.labelBackgroundColor,\nborderColor:this.labelBorderColor,cornerRadius:this.labelCornerRadius,textAlign:this.labelTextAlign,fontSize:this.labelFontSize,fontFamily:this.labelFontFamily,fontWeight:this.labelFontWeight,fontColor:this.labelFontColor,fontStyle:this.labelFontStyle,textBaseline:\"middle\",borderThickness:0}),this._labels.push({position:n,textBlock:a,effectiveHeight:null}))}g=q;for(c=this.intervalStartPosition;c<=e;c=parseFloat(1E-12>this.interval?this.logarithmic&&this.equidistantInterval?c*Math.pow(this.logarithmBase,\nthis.interval):c+this.interval:(this.logarithmic&&this.equidistantInterval?c*Math.pow(this.logarithmBase,this.interval):c+this.interval).toFixed(12))){for(;g p[g].endValue;g++);a=g =p[g].startValue&&c<=p[g].endValue;n=c;a||(a=this.labelFormatter?this.labelFormatter({chart:this.chart,axis:this.options,value:n,label:this.labels[n]?this.labels[n]:null}):\"axisX\"===this.type&&this.labels[n]?this.labels[n]:ea(n,this.valueFormatString,this.chart._cultureInfo),a=new ia(this.ctx,{x:0,\ny:0,maxWidth:f,maxHeight:l,angle:this.labelAngle,text:this.prefix+a+this.suffix,textAlign:this.labelTextAlign,backgroundColor:this.labelBackgroundColor,borderColor:this.labelBorderColor,borderThickness:this.labelBorderThickness,cornerRadius:this.labelCornerRadius,fontSize:this.labelFontSize,fontFamily:this.labelFontFamily,fontWeight:this.labelFontWeight,fontColor:this.labelFontColor,fontStyle:this.labelFontStyle,textBaseline:\"middle\"}),this._labels.push({position:n,textBlock:a,effectiveHeight:null}))}}else for(this.intervalStartPosition=\nthis.getLabelStartPoint(new Date(this.viewportMinimum),this.intervalType,this.interval),e=Va(new Date(this.viewportMaximum),this.interval,this.intervalType),g=q,c=this.intervalStartPosition;c p[g].endValue;g++);n=a;a=g =p[g].startValue&&a<=p[g].endValue;a||(a=this.labelFormatter?this.labelFormatter({chart:this.chart,axis:this.options,value:new Date(n),label:this.labels[n]?this.labels[n]:null}):\"axisX\"===this.type&&this.labels[n]?\nthis.labels[n]:za(n,this.valueFormatString,this.chart._cultureInfo),a=new ia(this.ctx,{x:0,y:0,maxWidth:f,backgroundColor:this.labelBackgroundColor,borderColor:this.labelBorderColor,borderThickness:this.labelBorderThickness,cornerRadius:this.labelCornerRadius,maxHeight:l,angle:this.labelAngle,text:this.prefix+a+this.suffix,textAlign:this.labelTextAlign,fontSize:this.labelFontSize,fontFamily:this.labelFontFamily,fontWeight:this.labelFontWeight,fontColor:this.labelFontColor,fontStyle:this.labelFontStyle,\ntextBaseline:\"middle\"}),this._labels.push({position:n,textBlock:a,effectiveHeight:null,breaksLabelType:void 0}))}if(\"bottom\"===this._position||\"top\"===this._position)h=this.logarithmic&&!this.equidistantInterval&&2<=this._labels.length?this.lineCoordinates.width*Math.log(Math.min(this._labels[this._labels.length-1].position/this._labels[this._labels.length-2].position,this._labels[1].position/this._labels[0].position))/Math.log(this.range):this.lineCoordinates.width/(this.logarithmic&&this.equidistantInterval?\nMath.log(this.range)/Math.log(this.logarithmBase):Math.abs(this.range))*R[this.intervalType+\"Duration\"]*this.interval,f=\"undefined\"===typeof this.options.labelMaxWidth?0.5*this.chart.width>>0:this.options.labelMaxWidth,this.chart.panEnabled||(l=\"undefined\"===typeof this.options.labelWrap||this.labelWrap?0.8*this.chart.height>>0:1.5*this.labelFontSize);else if(\"left\"===this._position||\"right\"===this._position)h=this.logarithmic&&!this.equidistantInterval&&2<=this._labels.length?this.lineCoordinates.height*\nMath.log(Math.min(this._labels[this._labels.length-1].position/this._labels[this._labels.length-2].position,this._labels[1].position/this._labels[0].position))/Math.log(this.range):this.lineCoordinates.height/(this.logarithmic&&this.equidistantInterval?Math.log(this.range)/Math.log(this.logarithmBase):Math.abs(this.range))*R[this.intervalType+\"Duration\"]*this.interval,this.chart.panEnabled||(f=\"undefined\"===typeof this.options.labelMaxWidth?0.3*this.chart.width>>0:this.options.labelMaxWidth),l=\"undefined\"===\ntypeof this.options.labelWrap||this.labelWrap?0.3*this.chart.height>>0:1.5*this.labelFontSize;for(b=0;b this.labelAngle?this.labelAngle-=180:270<=this.labelAngle&&360>=this.labelAngle&&(this.labelAngle-=360)),\"bottom\"===this._position||\n\"top\"===this._position)if(f=0.9*h>>0,q=0,!this.chart.panEnabled&&1<=this._labels.length){this.sessionVariables.labelFontSize=this.labelFontSize;this.sessionVariables.labelMaxWidth=f;this.sessionVariables.labelMaxHeight=l;this.sessionVariables.labelAngle=this.labelAngle;this.sessionVariables.labelWrap=this.labelWrap;for(c=0;c