{"version":3,"sources":["webpack:///./src/components/charts/index.vue?a443","webpack:///./src/components/1vVcard.vue?f281","webpack:///./src/components/1v1card.vue?fa4b","webpack:///src/components/1v1card.vue","webpack:///./src/components/1v1card.vue?5e2a","webpack:///./src/components/1v1card.vue","webpack:///./node_modules/chart.js/dist/Chart.js","webpack:///./node_modules/core-js/modules/_array-fill.js","webpack:///./src/views/log/1vV/grid.vue?e84c","webpack:///./node_modules/core-js/modules/es6.regexp.match.js","webpack:///./src/views/log/1vV/index.vue?e081","webpack:///./src/views/log/1vV/grid.vue?8a0b","webpack:///src/views/log/1vV/grid.vue","webpack:///./src/views/log/1vV/grid.vue?ec47","webpack:///./src/views/log/1vV/grid.vue","webpack:///./src/views/log/1vV/table.vue?a325","webpack:///./src/components/1vVcard.vue?3688","webpack:///src/components/1vVcard.vue","webpack:///./src/components/1vVcard.vue?7450","webpack:///./src/components/1vVcard.vue","webpack:///src/views/log/1vV/table.vue","webpack:///./src/views/log/1vV/table.vue?1b9b","webpack:///./src/views/log/1vV/table.vue","webpack:///src/views/log/1vV/index.vue","webpack:///./src/views/log/1vV/index.vue?6365","webpack:///./src/views/log/1vV/index.vue","webpack:///./node_modules/core-js/modules/es6.array.fill.js","webpack:///./src/components/charts/index.vue?5712","webpack:///./src/components/charts/overview.vue?9a01","webpack:///src/components/charts/overview.vue","webpack:///./src/components/charts/overview.vue?9936","webpack:///./src/components/charts/overview.vue","webpack:///./src/components/charts/twelveMonth.vue?684b","webpack:///src/components/charts/twelveMonth.vue","webpack:///./src/components/charts/twelveMonth.vue?5b94","webpack:///./src/components/charts/twelveMonth.vue","webpack:///./src/components/charts/match.vue?c06c","webpack:///src/components/charts/match.vue","webpack:///./src/components/charts/match.vue?cdfb","webpack:///./src/components/charts/match.vue","webpack:///src/components/charts/index.vue","webpack:///./src/components/charts/index.vue?a0fc","webpack:///./src/components/charts/index.vue","webpack:///./src/views/log/1v1/index.vue?9922","webpack:///./src/components/1v1card.vue?c802","webpack:///./src/views/log/1v1/grid.vue?7f1a","webpack:///./src/views/log/1vV/table.vue?a9ad","webpack:///./src/views/log/1vN.vue?0b41","webpack:///src/views/log/1vN.vue","webpack:///./src/views/log/1vN.vue?9f49","webpack:///./src/views/log/1vN.vue","webpack:///./src/views/log/1v1/index.vue?492f","webpack:///./src/views/log/1v1/grid.vue?cd00","webpack:///src/views/log/1v1/grid.vue","webpack:///./src/views/log/1v1/grid.vue?9da1","webpack:///./src/views/log/1v1/grid.vue","webpack:///./src/views/log/1v1/table.vue?6f64","webpack:///src/views/log/1v1/table.vue","webpack:///./src/views/log/1v1/table.vue?5f4c","webpack:///./src/views/log/1v1/table.vue","webpack:///src/views/log/1v1/index.vue","webpack:///./src/views/log/1v1/index.vue?5c0d","webpack:///./src/views/log/1v1/index.vue","webpack:///./src/views/log/1v1/table.vue?0af2","webpack:///./src/views/log/1vV/index.vue?0110"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","src","data","img1","on","$event","openImg","undefined","matchNumber","class","compareResult","_v","_s","_f","route","compareMode","replace","result","createTime","img2","visible","staticStyle","currentImg","staticRenderFns","component","global","factory","module","exports","e","moment","hasOwnProperty","conversions","rgb2hsl","rgb2hsv","rgb2hwb","rgb2cmyk","rgb2keyword","rgb2xyz","rgb2lab","rgb2lch","hsl2rgb","hsl2hsv","hsl2hwb","hsl2cmyk","hsl2keyword","hsv2rgb","hsv2hsl","hsv2hwb","hsv2cmyk","hsv2keyword","hwb2rgb","hwb2hsl","hwb2hsv","hwb2cmyk","hwb2keyword","cmyk2rgb","cmyk2hsl","cmyk2hsv","cmyk2hwb","cmyk2keyword","keyword2rgb","keyword2hsl","keyword2hsv","keyword2hwb","keyword2cmyk","keyword2lab","keyword2xyz","xyz2rgb","xyz2lab","xyz2lch","lab2xyz","lab2rgb","lab2lch","lch2lab","lch2xyz","lch2rgb","rgb","h","s","l","r","g","b","min","Math","max","delta","v","w","c","m","y","k","reverseKeywords","JSON","stringify","pow","x","z","a","xyz","args","hsl","t1","t2","t3","val","i","sv","hsv","hi","floor","f","p","q","t","sl","hwb","n","wh","bl","ratio","cmyk","lab","y2","hr","atan2","PI","sqrt","lch","cos","sin","keyword","cssKeywords","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","key","convert","Converter","func","arg","Array","prototype","slice","call","arguments","pair","exec","from","to","length","round","convs","routeSpace","space","values","getValues","setValues","vals","fspace","forEach","colorConvert","colorName","colorString","getRgba","getHsla","getRgb","getHsl","getHwb","getAlpha","hexString","rgbString","rgbaString","percentString","percentaString","hslString","hslaString","hwbString","string","abbr","hex","rgba","per","match","hexAlpha","parseInt","parseFloat","scale","alpha","isNaN","hsla","hexDouble","reverseNames","num","str","toString","toUpperCase","name","Color","obj","valid","lightness","value","whiteness","isValid","setSpace","rgbArray","hslArray","hsvArray","hwbArray","concat","cmykArray","rgbaArray","hslaArray","setChannel","hue","saturation","saturationv","blackness","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","level","contrastRatio","dark","yiq","light","negate","lighten","darken","saturate","desaturate","whiten","blacken","greyscale","clearer","opaquer","rotate","degrees","mix","mixinColor","weight","color1","w1","w2","toJSON","clone","type","source","target","prop","console","error","spaces","maxes","charAt","capped","chans","sname","index","svalues","window","chartjsColor","helpers","noop","uid","id","isNullOrUndef","isArray","Object","substr","isObject","isFinite","Number","valueOrDefault","defaultValue","valueAtIndexOrDefault","callback","fn","thisArg","apply","each","loopable","reverse","len","keys","arrayEquals","a0","a1","ilen","v0","v1","map","klen","_merger","options","tval","sval","merge","_mergerIf","mergeIf","sources","merger","extend","setFn","inherits","extensions","me","ChartElement","constructor","Surrogate","__super__","helpers_core","callCallback","indexOf","array","item","fromIndex","getValueOrDefault","getValueAtIndexOrDefault","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","helpers_easing","easingEffects","RAD_PER_DEG","DOUBLE_PI","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","exports$1","clear","chart","ctx","clearRect","width","height","roundedRect","radius","left","top","right","bottom","moveTo","arc","closePath","rect","drawPoint","style","rotation","xOffset","yOffset","size","cornerRadius","rad","drawImage","beginPath","lineTo","SQRT1_2","fill","stroke","_isPointInArea","point","area","epsilon","clipArea","save","clip","unclipArea","restore","previous","flip","stepped","steppedLine","midpoint","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","helpers_canvas","drawRoundedRectangle","defaults","_set","scope","defaultColor","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","defaultLineHeight","showLines","core_defaults","toFontString","font","family","helpers_options","toLineHeight","matches","toPadding","_parseFont","globalDefaults","fontSize","fontFamily","lineHeight","fontStyle","resolve","inputs","context","helpers$1","easing","canvas","interpolate","start","view","model","ease","actual","origin","c0","c1","Element","configuration","initialize","hidden","pivot","_view","_model","_start","transition","tooltipPosition","hasValue","isNumber","core_element","exports$2","currentStep","numSteps","onAnimationProgress","onAnimationComplete","core_animation","defineProperty","get","set","animation","duration","onProgress","onComplete","core_animations","animations","request","addAnimation","lazy","startTime","Date","now","animating","push","requestAnimationFrame","cancelAnimation","findIndex","splice","requestAnimFrame","startDigest","advance","nextStep","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","configurable","enumerable","method","base","res","object","unlistenArrayEvents","stub","DatasetController","datasetIndex","datasetElementType","dataElementType","linkScales","addElements","updateIndex","meta","getMeta","dataset","getDataset","xAxisID","scales","xAxes","yAxisID","yAxes","datasets","getDatasetMeta","getScaleForId","scaleID","_getValueScaleId","_getIndexScaleId","_getValueScale","_getIndexScale","reset","update","destroy","_data","createMetaDataset","_chart","_datasetIndex","createMetaData","_index","metaData","addElementAndReset","element","updateElement","buildOrUpdateElements","isExtensible","resyncElements","easingValue","elements","draw","removeHoverStyle","$previousStyle","setHoverStyle","custom","getHoverColor","backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","numMeta","numData","insertElements","count","onDataPush","onDataPop","pop","onDataShift","shift","onDataSplice","onDataUnshift","core_datasetController","borderAlign","element_arc","inLabelRange","mouseX","vm","hoverRadius","inRange","chartX","chartY","pointRelativePosition","getAngleFromPoint","angle","distance","startAngle","endAngle","betweenAngles","withinRadius","innerRadius","outerRadius","getCenterPoint","halfAngle","halfRadius","getArea","centreAngle","rangeFromCentre","angleMargin","sA","eA","pixelMargin","fillStyle","lineWidth","lineJoin","strokeStyle","valueOrDefault$1","line","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","element_line","current","currentVM","spanGaps","points","_children","globalOptionLineElements","lastDrawnIndex","_loop","lineCap","setLineDash","lineDashOffset","previousItem","skip","valueOrDefault$2","defaultColor$1","xRange","abs","hitRadius","yRange","mouseY","pointStyle","element_point","inXRange","inYRange","padding","chartArea","defaultColor$2","isVertical","getBarBounds","x1","x2","y1","half","swap","orig","v2","parseBorderSkipped","edge","borderSkipped","horizontal","parseBorderWidth","maxW","maxH","boundingRects","bounds","border","outer","inner","skipX","skipY","rectangle","element_rectangle","rects","fillRect","Arc","Line","Point","Rectangle","resolve$1","computeMinSampleSize","pixels","prev","curr","isHorizontal","ticks","getTicks","getPixelForTick","computeFitCategoryTraits","ruler","thickness","barThickness","stackCount","categoryPercentage","barPercentage","chunk","computeFlexCategoryTraits","next","percent","end","hover","mode","offset","gridLines","offsetGridLines","controller_bar","stack","bar","_ruler","getRuler","_resolveElementOptions","_xScale","_yScale","datasetLabel","label","labels","_updateElementGeometry","vscale","getBasePixel","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","head","center","_getStacks","last","stacked","stacks","isDatasetVisible","getStackCount","getStackIndex","getPixelForValue","imeta","ivalue","getRightValue","minBarLength","controller","range","stackIndex","maxBarThickness","Infinity","dataIndex","valueOrDefault$3","resolve$2","position","tooltips","callbacks","title","dataPoint","xLabel","yLabel","controller_bubble","xScale","yScale","dsIndex","getPixelForDecimal","NaN","_options","resolve$3","valueOrDefault$4","animateRotate","animateScale","legendCallback","text","join","legend","generateLabels","ds","arcOpts","bw","onClick","legendItem","cutoutPercentage","circumference","tooltipItem","dataLabel","controller_doughnut","getRingIndex","ringIndex","j","opts","availableWidth","availableHeight","minSize","arcs","chartWeight","_getRingWeight","contains0","contains90","contains180","contains270","cutout","getMaxBorderWidth","radiusLength","_getVisibleDatasetWeightTotal","offsetX","offsetY","total","calculateTotal","_getRingWeightOffset","animationOpts","centerX","centerY","calculateCircumference","hoverWidth","ringWeightOffset","dataSetIndex","axis","controller_horizontalBar","valueOrDefault$5","resolve$4","isPointInArea","lineEnabled","showLine","controller_line","lineTension","_scale","_resolveLineOptions","updateBezierControlPoints","lineModel","_resolvePointOptions","calculatePointY","ELEMENT_OPTIONS","elementOptions","dsMeta","sumPos","sumNeg","stackedRightValue","rightValue","controlPoints","capControlPoint","pt","filter","cubicInterpolationMode","splineCurveMonotone","splineCurve","nextItem","halfBorderWidth","resolve$5","angleLines","display","circular","pointLabels","beginAtZero","controller_polarArea","starts","_starts","angles","_angles","_updateRadius","countVisibleElements","_computeAngle","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getDistanceFromCenterForValue","resetRadius","doughnut","controller_pie","valueOrDefault$6","resolve$6","controller_radar","pointPosition","getPointPositionForValue","controller_scatter","controllers","bubble","horizontalBar","polarArea","pie","radar","scatter","getRelativePosition","native","parseVisibleItems","handler","jlen","getIntersectItems","getNearestItems","intersect","distanceMetric","minDistance","POSITIVE_INFINITY","nearestItems","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","indexMode","items","core_interaction","modes","single","nearest","intersectsItem","filterByPosition","where","sortByWeight","_tmpIndex_","sort","findMaxPadding","boxes","box","getPadding","boxPadding","addSizeByPosition","layout","core_layouts","addBox","fullWidth","removeBox","layoutItem","configure","props","layoutOptions","leftPadding","rightPadding","topPadding","bottomPadding","leftBoxes","rightBoxes","topBoxes","bottomBoxes","chartAreaBoxes","maxPadding","verticalBoxes","horizontalBoxes","outerBoxes","chartWidth","chartHeight","chartAreaWidth","verticalBoxWidth","maxChartAreaWidth","maxChartAreaHeight","outerBoxSizes","minBoxSizes","getMinimumBoxSize","fitBox","finalFitVerticalBox","leftPaddingAddition","topPaddingAddition","newMaxChartAreaHeight","newMaxChartAreaWidth","placeBox","minBoxSize","findNextWhere","minBox","scaleMargin","platform_basic","acquireContext","getContext","platform_dom","platform_dom$1","freeze","default","getCjsExportFromNamespace","stylesheet","EXPANDO_KEY","CSS_PREFIX","CSS_SIZE_MONITOR","CSS_RENDER_MONITOR","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","readUsedSize","property","getStyle","initCanvas","config","renderHeight","getAttribute","renderWidth","initial","displayWidth","aspectRatio","displayHeight","supportsEventListenerOptions","supports","addEventListener","eventListenerOptions","passive","addListener","node","removeListener","removeEventListener","createEvent","nativeEvent","fromNativeEvent","event","pos","throttled","ticking","createDiv","cls","el","document","createElement","className","createResizer","maxSize","resizer","expand","shrink","appendChild","_reset","scrollLeft","scrollTop","onScroll","bind","watchForRender","expando","proxy","renderProxy","animationName","reflow","offsetParent","classList","add","unwatchForRender","remove","addResizeListener","container","maintainAspectRatio","parentNode","clientWidth","insertBefore","firstChild","removeResizeListener","removeChild","injectCSS","platform","css","_style","setAttribute","getElementsByTagName","createTextNode","platform_dom$2","disableCSSInjection","_enabled","_ensureLoaded","_loaded","getElementById","releaseContext","removeAttribute","proxies","addEvent","removeEvent","implementation","plugins","core_plugins","_plugins","_cacheId","register","plugin","unregister","idx","getAll","notify","hook","descriptor","params","descriptors","cache","$plugins","_invalidate","core_scaleService","constructors","registerScaleType","scaleConstructor","scaleDefaults","getScaleConstructor","getScaleDefaults","updateScaleDefaults","additions","addScalesToLayout","valueOrDefault$7","enabled","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerFontStyle","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yPadding","xPadding","caretPadding","caretSize","multiKeyBackground","displayColors","beforeTitle","tooltipItems","labelCount","afterTitle","beforeBody","beforeLabel","labelColor","activeElement","labelTextColor","afterLabel","afterBody","beforeFooter","footer","afterFooter","positioners","average","eventPosition","nearestElement","d","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","String","split","createTooltipItem","indexScale","valueScale","getLabelForIndex","getBaseModel","tooltipOpts","xAlign","yAlign","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","opacity","legendColorBackground","getTooltipSize","tooltip","body","combinedBodyLength","reduce","bodyItem","before","lines","after","titleLineCount","footerLineCount","widthPadding","maxLineWidth","measureText","fontString","determineAlignment","lf","rf","olf","orf","yf","midX","midY","getBackgroundPoint","alignment","paddingAndSize","radiusAndPadding","getAlignedX","align","getBeforeAfterBodyLines","exports$3","_lastActive","getTitle","getBeforeBody","getBody","bodyItems","getAfterBody","getFooter","changed","existingModel","active","_active","backgroundPoint","tooltipSize","caretX","caretY","labelColors","labelTextColors","_eventPosition","itemSort","dataPoints","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","tmp","drawTitle","textAlign","textBaseline","fillText","drawBody","textColor","drawColorBoxes","xLinePadding","colorX","fillLineOfText","strokeRect","drawFooter","drawBackground","quadraticCurveTo","hasTooltipContent","globalAlpha","handleEvent","getElementsAtEventForMode","positioners_1","core_tooltip","valueOrDefault$8","mergeScaleConfig","slen","mergeConfig","initConfig","updateConfig","newOptions","ensureScalesHaveIDs","buildOrUpdateScales","positionIsHorizontal","events","onHover","animationDuration","responsive","responsiveAnimationDuration","Chart","construct","_bufferedRender","instances","retinaScale","devicePixelRatio","bindEvents","resize","initToolTip","stop","silent","newWidth","getMaximumWidth","newHeight","getMaximumHeight","newSize","onResize","scalesOptions","scaleOptions","xAxisOptions","yAxisOptions","updated","dtype","dposition","isDefault","scaleType","scaleClass","mergeTicksOptions","hasUpdated","buildOrUpdateControllers","newControllers","destroyDatasetMeta","ControllerClass","Error","resetElements","updateLayout","updateDatasets","lastActive","_bufferedRequest","updateDataset","animationOptions","animationObject","easingFunction","stepDecimal","drawDatasets","_drawTooltip","drawDataset","getElementAtEvent","getElementsAtEvent","getElementsAtXAxis","getDatasetAtEvent","_meta","generateLegend","unbindEvents","toBase64Image","toDataURL","_chartInstance","_listeners","eventHandler","updateHoverStyle","bufferedRequest","hoverOptions","core_controller","Controller","types","configMerge","scaleMerge","core_helpers","parseMaxStyle","styleValue","parentProperty","valueInPixels","isConstrainedValue","getConstraintDimension","domNode","maxStyle","percentageProperty","defaultView","_getParentNode","constrainedNode","getComputedStyle","constrainedContainer","hasCNode","hasCContainer","infinity","collection","filterCallback","filtered","arrayToSearch","startIndex","currentItem","findPreviousWhere","almostEquals","almostWhole","rounded","NEGATIVE_INFINITY","sign","log10","exponent","log","LOG10E","powerOf10","isPowerOf10","toRadians","toDegrees","radians","_decimalPlaces","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","aliasPixel","pixelWidth","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","EPSILON","pointBefore","pointCurrent","pointAfter","alphaK","betaK","tauK","squaredMagnitude","pointsWithTangents","deltaK","mK","pointsLen","slopeDeltaX","loop","niceNum","niceFraction","fraction","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","evt","originalEvent","srcElement","boundingRect","getBoundingClientRect","touches","clientX","clientY","paddingLeft","paddingTop","paddingRight","paddingBottom","getConstraintWidth","getConstraintHeight","_calculatePadding","parentDimension","parent","host","cw","clientHeight","ch","currentStyle","getPropertyValue","forceRatio","pixelRatio","pixelSize","longestText","arrayOfThings","gc","garbageCollect","longest","thing","nestedThing","gcLen","textWidth","numberOfLabelLines","numberOfLines","color","CanvasGradient","colorValue","CanvasPattern","abstract","DateAdapter","formats","parse","format","diff","startOf","endOf","_create","override","members","_date","core_adapters","core_ticks","formatters","tickValue","logDelta","tickString","maxTick","logTick","toExponential","numDecimal","toFixed","logarithmic","remain","valueOrDefault$9","labelsFromTicks","getPixelForGridLine","lineValue","computeTextSize","tick","drawBorder","drawOnChartArea","drawTicks","tickMarkLength","zeroLineWidth","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","scaleLabel","labelString","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","labelOffset","minor","major","core_scale","_ticks","beforeUpdate","maxWidth","maxHeight","margins","_maxLabelLines","longestLabelWidth","longestTextCache","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","beforeTickToLabelConversion","convertTicksToLabels","afterTickToLabelConversion","beforeCalculateTickRotation","calculateTickRotation","afterCalculateTickRotation","beforeFit","fit","afterFit","afterUpdate","tickOpts","userCallback","tickFont","labelRotation","cosRotation","sinRotation","originalLabelWidth","labelWidth","tickWidth","angleRadians","scaleLabelOpts","gridLineOpts","_isVisible","parseFont","isFullWidth","scaleLabelFont","scaleLabelPadding","deltaHeight","largestTextWidth","tallestLabelHeightInLines","lineSpace","tickPadding","labelHeight","firstLabelWidth","lastLabelWidth","offsetLeft","offsetRight","handleMargins","rawValue","getValueForPixel","innerWidth","finalVal","innerHeight","decimal","valueOffset","getBaseValue","_autoSkip","optionTicks","tickCount","skipRatio","maxTicks","maxTicksLimit","ticksLength","_tickSize","axisLength","PaddingBottom","rot","borderValue","tickStart","tickEnd","optionMajorTicks","isRotated","isMirrored","tickFontColor","fontColor","majorTickFontColor","majorTickFont","tl","scaleLabelFontColor","labelRotationRadians","itemsToDraw","axisWidth","alignPixel","lineColor","tx1","ty1","tx2","ty2","labelX","labelY","textOffset","zeroLineIndex","labelYOffset","labelXOffset","glWidth","glColor","glBorderDash","glBorderDashOffset","itemToDraw","translate","scaleLabelX","scaleLabelY","halfLineHeight","isLeft","firstLineWidth","lastLineWidth","defaultConfig","scale_category","getLabels","xLabels","yLabels","minIndex","maxIndex","valueCategory","offsetAmt","valueWidth","widthOffset","valueHeight","heightOffset","horz","valueDimension","_defaults","generateTicks","generationOptions","dataRange","factor","niceMin","niceMax","numSpaces","MIN_SPACING","stepSize","unit","maxNumSpaces","precision","rmin","rmax","spacing","ceil","scale_linearbase","handleTickRangeOptions","minSign","maxSign","setMin","suggestedMin","setMax","suggestedMax","getTickLimit","_computeTickLimit","handleDirectionalChanges","numericGeneratorOptions","fixedStepSize","ticksAsNumbers","defaultConfig$1","scale_linear","DEFAULT_MIN","DEFAULT_MAX","IDMatches","hasStacks","valuesPerStack","positiveValues","negativeValues","relativePoints","valuesForType","minVal","maxVal","innerDimension","_defaults$1","valueOrDefault$a","generateTicks$1","exp","significand","tickVal","endExp","endSignificand","minNotZero","lastTick","defaultConfig$2","nonNegativeOrDefault","scale_logarithmic","tickValues","_getFirstTickValue","firstTickValue","_defaults$2","valueOrDefault$b","valueAtIndexOrDefault$1","resolve$7","defaultConfig$3","animate","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","getValueCount","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","textSize","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","drawingArea","getIndexAngle","hLimits","vLimits","setReductions","getTextAlignForAngle","adjustPointPositionForLabelHeight","drawPointLabels","angleLineOpts","pointLabelOpts","tickBackdropHeight","outerDistance","outerPosition","extra","pointLabelPosition","pointLabelFontColor","drawRadiusLine","numberOrZero","param","scale_radialLinear","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","angleMultiplier","startAngleRadians","scalingFactor","distanceFromCenter","thisAngle","getBasePosition","yCenterOffset","_defaults$3","valueOrDefault$c","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","arrayUnique","hash","out","buildLookupTable","timestamps","distribution","time","table","lookup","mid","i0","i1","lo","interpolate$1","skey","tkey","span","toTimestamp","input","adapter","_adapter","parser","determineStepSize","capacity","interval","milliseconds","determineUnitForAutoTicks","minUnit","determineUnitForFormatting","determineMajorUnit","generate","timeOpts","unitStepSize","weekday","isoWeekday","majorTicksEnabled","first","computeOffsets","ticksFromTimestamps","majorUnit","defaultConfig$4","adapters","displayFormat","displayFormats","scale_time","date","warn","timestamp","dataLabels","_horizontal","_table","_timestamps","getLabelCapacity","_unit","_majorUnit","_offsets","tooltipFormat","datetime","tickFormatFunction","minorFormat","majorFormat","majorTime","majorTickOpts","formatter","getPixelForOffset","isReverse","getLabelWidth","ticksOpts","tickLabelWidth","tickFontSize","exampleTime","exampleLabel","_defaults$4","category","radialLinear","FORMATS","_id","valueOf","amount","as","filler","propagate","mappers","boundary","decodeFill","computeBoundary","scaleBottom","scaleTop","scaleZero","resolveTarget","visited","createMapper","isDrawable","drawArea","curve0","curve1","len0","len1","doFill","mapper","p0","p1","d0","d1","plugin_filler","afterDatasetsUpdate","$filler","beforeDatasetDraw","noop$1","valueOrDefault$d","getBoxWidth","labelOpts","usePointStyle","boxWidth","ci","onLeave","lineDash","Legend","legendHitBoxes","_hoveredItem","doughnutMode","beforeBuildLabels","buildLabels","afterBuildLabels","legendItems","labelFont","hitboxes","lineWidths","totalHeight","vPadding","columnWidths","totalWidth","currentColWidth","currentColHeight","itemHeight","itemWidth","lineDefault","legendWidth","cursor","drawLegendBox","SQRT2","halfFontSize","xLeft","yMiddle","_getLegendItemAt","hitBox","lh","hoveredItem","createNewLegendAndAttach","legendOpts","plugin_legend","_element","beforeInit","afterEvent","noop$2","Title","lineCount","fontOpts","titleX","titleY","createNewTitleBlockAndAttach","titleOpts","titleBlock","plugin_title","_adapters","Animation","animationService","Interaction","layouts","Scale","scaleService","Ticks","Tooltip","pluginService","PluginBase","canvasHelpers","layoutService","LinearScaleBase","klass","cfg","toLowerCase","toObject","toAbsoluteIndex","toLength","O","aLen","endPos","anObject","advanceStringIndex","regExpExec","defined","MATCH","$match","maybeCallNative","regexp","RegExp","done","rx","S","fullUnicode","unicode","lastIndex","A","matchStr","_m","$$v","expression","_e","directives","rawName","currentSelect","load","timeRange","passPercent","chartData","_l","pageForm","page","pageChange","$set","no","dataList","scopedSlots","_u","row","computerNo","departmentNo","showDetail","currentObject","image","matchlist","threshold","rgbLiveThreshold","readframe","compareframe","msg","videosrc","video","compareImagePairs","ImageName","Match","ErrorMsg","components","GridView","TableView","$export","P","slot","overviewData","matchData","twelveMonthData","bucketId","load1vN","list_1vN","resultTop","resultSrc","bucket","picView","pic","details","$index","code"],"mappings":"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","file":"js/log.7a3dc6bd.js","sourcesContent":["import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&id=7bb5ac64&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&id=7bb5ac64&lang=less&scoped=true&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1vVcard.vue?vue&type=style&index=0&id=51d39387&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1vVcard.vue?vue&type=style&index=0&id=51d39387&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-card',[_c('el-row',{attrs:{\"gutter\":8,\"type\":\"flex\"}},[_c('el-col',{staticClass:\"img-item\",attrs:{\"span\":8}},[_c('img',{attrs:{\"src\":_vm.src(_vm.data.img1)},on:{\"click\":function($event){return _vm.openImg(_vm.data.img1)}}})]),_c('el-col',{staticClass:\"result-item\",attrs:{\"span\":8}},[(_vm.data.matchNumber!==undefined)?_c('div',{staticClass:\"result\",class:_vm.data.compareResult},[_c('div',{staticClass:\"mode\"},[_vm._v(\"\\n \"+_vm._s(_vm._f(\"route_name\")(_vm.data.route))+\"\\n \")]),_c('div',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.data.matchNumber))]),_c('span',{staticClass:\"label\"},[_vm._v(_vm._s(_vm.data.compareMode.replace(\"模式\",\"\"))+\"置信度\")])]):_c('div',{staticClass:\"result fail\"},[_c('div',{staticClass:\"mode\"},[_vm._v(\"\\n \"+_vm._s(_vm._f(\"route_name\")(_vm.data.route))+\"\\n \")]),_c('div',{staticClass:\"content\"},[_vm._v(\"\\n \"+_vm._s(_vm.data.result)+\"\\n \")])]),_c('el-tag',{staticClass:\"time-tag\"},[_vm._v(_vm._s(_vm._f(\"date_time\")(_vm.data.createTime)))])],1),_c('el-col',{staticClass:\"img-item\",attrs:{\"span\":8}},[_c('img',{attrs:{\"src\":_vm.src(_vm.data.img2)},on:{\"click\":function($event){return _vm.openImg(_vm.data.img2)}}})])],1),_c('el-dialog',{attrs:{\"title\":\"图片详情\",\"visible\":_vm.visible,\"append-to-body\":\"\"},on:{\"update:visible\":function($event){_vm.visible=$event}}},[_c('div',{staticStyle:{\"text-align\":\"center\"}},[_c('img',{staticStyle:{\"max-width\":\"100%\"},attrs:{\"src\":_vm.src(_vm.currentImg)}})])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1v1card.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1v1card.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./1v1card.vue?vue&type=template&id=0b95d146&scoped=true&\"\nimport script from \"./1v1card.vue?vue&type=script&lang=js&\"\nexport * from \"./1v1card.vue?vue&type=script&lang=js&\"\nimport style0 from \"./1v1card.vue?vue&type=style&index=0&id=0b95d146&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b95d146\",\n null\n \n)\n\nexport default component.exports","/*!\n * Chart.js v2.8.0\n * https://www.chartjs.org\n * (c) 2019 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :\ntypeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :\n(global.Chart = factory(global.moment));\n}(this, (function (moment) { 'use strict';\n\nmoment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\n/* MIT license */\n\nvar conversions = {\n rgb2hsl: rgb2hsl,\n rgb2hsv: rgb2hsv,\n rgb2hwb: rgb2hwb,\n rgb2cmyk: rgb2cmyk,\n rgb2keyword: rgb2keyword,\n rgb2xyz: rgb2xyz,\n rgb2lab: rgb2lab,\n rgb2lch: rgb2lch,\n\n hsl2rgb: hsl2rgb,\n hsl2hsv: hsl2hsv,\n hsl2hwb: hsl2hwb,\n hsl2cmyk: hsl2cmyk,\n hsl2keyword: hsl2keyword,\n\n hsv2rgb: hsv2rgb,\n hsv2hsl: hsv2hsl,\n hsv2hwb: hsv2hwb,\n hsv2cmyk: hsv2cmyk,\n hsv2keyword: hsv2keyword,\n\n hwb2rgb: hwb2rgb,\n hwb2hsl: hwb2hsl,\n hwb2hsv: hwb2hsv,\n hwb2cmyk: hwb2cmyk,\n hwb2keyword: hwb2keyword,\n\n cmyk2rgb: cmyk2rgb,\n cmyk2hsl: cmyk2hsl,\n cmyk2hsv: cmyk2hsv,\n cmyk2hwb: cmyk2hwb,\n cmyk2keyword: cmyk2keyword,\n\n keyword2rgb: keyword2rgb,\n keyword2hsl: keyword2hsl,\n keyword2hsv: keyword2hsv,\n keyword2hwb: keyword2hwb,\n keyword2cmyk: keyword2cmyk,\n keyword2lab: keyword2lab,\n keyword2xyz: keyword2xyz,\n\n xyz2rgb: xyz2rgb,\n xyz2lab: xyz2lab,\n xyz2lch: xyz2lch,\n\n lab2xyz: lab2xyz,\n lab2rgb: lab2rgb,\n lab2lch: lab2lch,\n\n lch2lab: lch2lab,\n lch2xyz: lch2xyz,\n lch2rgb: lch2rgb\n};\n\n\nfunction rgb2hsl(rgb) {\n var r = rgb[0]/255,\n g = rgb[1]/255,\n b = rgb[2]/255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h, s, l;\n\n if (max == min)\n h = 0;\n else if (r == max)\n h = (g - b) / delta;\n else if (g == max)\n h = 2 + (b - r) / delta;\n else if (b == max)\n h = 4 + (r - g)/ delta;\n\n h = Math.min(h * 60, 360);\n\n if (h < 0)\n h += 360;\n\n l = (min + max) / 2;\n\n if (max == min)\n s = 0;\n else if (l <= 0.5)\n s = delta / (max + min);\n else\n s = delta / (2 - max - min);\n\n return [h, s * 100, l * 100];\n}\n\nfunction rgb2hsv(rgb) {\n var r = rgb[0],\n g = rgb[1],\n b = rgb[2],\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h, s, v;\n\n if (max == 0)\n s = 0;\n else\n s = (delta/max * 1000)/10;\n\n if (max == min)\n h = 0;\n else if (r == max)\n h = (g - b) / delta;\n else if (g == max)\n h = 2 + (b - r) / delta;\n else if (b == max)\n h = 4 + (r - g) / delta;\n\n h = Math.min(h * 60, 360);\n\n if (h < 0)\n h += 360;\n\n v = ((max / 255) * 1000) / 10;\n\n return [h, s, v];\n}\n\nfunction rgb2hwb(rgb) {\n var r = rgb[0],\n g = rgb[1],\n b = rgb[2],\n h = rgb2hsl(rgb)[0],\n w = 1/255 * Math.min(r, Math.min(g, b)),\n b = 1 - 1/255 * Math.max(r, Math.max(g, b));\n\n return [h, w * 100, b * 100];\n}\n\nfunction rgb2cmyk(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255,\n c, m, y, k;\n\n k = Math.min(1 - r, 1 - g, 1 - b);\n c = (1 - r - k) / (1 - k) || 0;\n m = (1 - g - k) / (1 - k) || 0;\n y = (1 - b - k) / (1 - k) || 0;\n return [c * 100, m * 100, y * 100, k * 100];\n}\n\nfunction rgb2keyword(rgb) {\n return reverseKeywords[JSON.stringify(rgb)];\n}\n\nfunction rgb2xyz(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255;\n\n // assume sRGB\n r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n return [x * 100, y *100, z * 100];\n}\n\nfunction rgb2lab(rgb) {\n var xyz = rgb2xyz(rgb),\n x = xyz[0],\n y = xyz[1],\n z = xyz[2],\n l, a, b;\n\n x /= 95.047;\n y /= 100;\n z /= 108.883;\n\n x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\n y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\n z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\n\n l = (116 * y) - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n\n return [l, a, b];\n}\n\nfunction rgb2lch(args) {\n return lab2lch(rgb2lab(args));\n}\n\nfunction hsl2rgb(hsl) {\n var h = hsl[0] / 360,\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n t1, t2, t3, rgb, val;\n\n if (s == 0) {\n val = l * 255;\n return [val, val, val];\n }\n\n if (l < 0.5)\n t2 = l * (1 + s);\n else\n t2 = l + s - l * s;\n t1 = 2 * l - t2;\n\n rgb = [0, 0, 0];\n for (var i = 0; i < 3; i++) {\n t3 = h + 1 / 3 * - (i - 1);\n t3 < 0 && t3++;\n t3 > 1 && t3--;\n\n if (6 * t3 < 1)\n val = t1 + (t2 - t1) * 6 * t3;\n else if (2 * t3 < 1)\n val = t2;\n else if (3 * t3 < 2)\n val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n else\n val = t1;\n\n rgb[i] = val * 255;\n }\n\n return rgb;\n}\n\nfunction hsl2hsv(hsl) {\n var h = hsl[0],\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n sv, v;\n\n if(l === 0) {\n // no need to do calc on black\n // also avoids divide by 0 error\n return [0, 0, 0];\n }\n\n l *= 2;\n s *= (l <= 1) ? l : 2 - l;\n v = (l + s) / 2;\n sv = (2 * s) / (l + s);\n return [h, sv * 100, v * 100];\n}\n\nfunction hsl2hwb(args) {\n return rgb2hwb(hsl2rgb(args));\n}\n\nfunction hsl2cmyk(args) {\n return rgb2cmyk(hsl2rgb(args));\n}\n\nfunction hsl2keyword(args) {\n return rgb2keyword(hsl2rgb(args));\n}\n\n\nfunction hsv2rgb(hsv) {\n var h = hsv[0] / 60,\n s = hsv[1] / 100,\n v = hsv[2] / 100,\n hi = Math.floor(h) % 6;\n\n var f = h - Math.floor(h),\n p = 255 * v * (1 - s),\n q = 255 * v * (1 - (s * f)),\n t = 255 * v * (1 - (s * (1 - f))),\n v = 255 * v;\n\n switch(hi) {\n case 0:\n return [v, t, p];\n case 1:\n return [q, v, p];\n case 2:\n return [p, v, t];\n case 3:\n return [p, q, v];\n case 4:\n return [t, p, v];\n case 5:\n return [v, p, q];\n }\n}\n\nfunction hsv2hsl(hsv) {\n var h = hsv[0],\n s = hsv[1] / 100,\n v = hsv[2] / 100,\n sl, l;\n\n l = (2 - s) * v;\n sl = s * v;\n sl /= (l <= 1) ? l : 2 - l;\n sl = sl || 0;\n l /= 2;\n return [h, sl * 100, l * 100];\n}\n\nfunction hsv2hwb(args) {\n return rgb2hwb(hsv2rgb(args))\n}\n\nfunction hsv2cmyk(args) {\n return rgb2cmyk(hsv2rgb(args));\n}\n\nfunction hsv2keyword(args) {\n return rgb2keyword(hsv2rgb(args));\n}\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nfunction hwb2rgb(hwb) {\n var h = hwb[0] / 360,\n wh = hwb[1] / 100,\n bl = hwb[2] / 100,\n ratio = wh + bl,\n i, v, f, n;\n\n // wh + bl cant be > 1\n if (ratio > 1) {\n wh /= ratio;\n bl /= ratio;\n }\n\n i = Math.floor(6 * h);\n v = 1 - bl;\n f = 6 * h - i;\n if ((i & 0x01) != 0) {\n f = 1 - f;\n }\n n = wh + f * (v - wh); // linear interpolation\n\n switch (i) {\n default:\n case 6:\n case 0: r = v; g = n; b = wh; break;\n case 1: r = n; g = v; b = wh; break;\n case 2: r = wh; g = v; b = n; break;\n case 3: r = wh; g = n; b = v; break;\n case 4: r = n; g = wh; b = v; break;\n case 5: r = v; g = wh; b = n; break;\n }\n\n return [r * 255, g * 255, b * 255];\n}\n\nfunction hwb2hsl(args) {\n return rgb2hsl(hwb2rgb(args));\n}\n\nfunction hwb2hsv(args) {\n return rgb2hsv(hwb2rgb(args));\n}\n\nfunction hwb2cmyk(args) {\n return rgb2cmyk(hwb2rgb(args));\n}\n\nfunction hwb2keyword(args) {\n return rgb2keyword(hwb2rgb(args));\n}\n\nfunction cmyk2rgb(cmyk) {\n var c = cmyk[0] / 100,\n m = cmyk[1] / 100,\n y = cmyk[2] / 100,\n k = cmyk[3] / 100,\n r, g, b;\n\n r = 1 - Math.min(1, c * (1 - k) + k);\n g = 1 - Math.min(1, m * (1 - k) + k);\n b = 1 - Math.min(1, y * (1 - k) + k);\n return [r * 255, g * 255, b * 255];\n}\n\nfunction cmyk2hsl(args) {\n return rgb2hsl(cmyk2rgb(args));\n}\n\nfunction cmyk2hsv(args) {\n return rgb2hsv(cmyk2rgb(args));\n}\n\nfunction cmyk2hwb(args) {\n return rgb2hwb(cmyk2rgb(args));\n}\n\nfunction cmyk2keyword(args) {\n return rgb2keyword(cmyk2rgb(args));\n}\n\n\nfunction xyz2rgb(xyz) {\n var x = xyz[0] / 100,\n y = xyz[1] / 100,\n z = xyz[2] / 100,\n r, g, b;\n\n r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n // assume sRGB\n r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n : r = (r * 12.92);\n\n g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n : g = (g * 12.92);\n\n b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n : b = (b * 12.92);\n\n r = Math.min(Math.max(0, r), 1);\n g = Math.min(Math.max(0, g), 1);\n b = Math.min(Math.max(0, b), 1);\n\n return [r * 255, g * 255, b * 255];\n}\n\nfunction xyz2lab(xyz) {\n var x = xyz[0],\n y = xyz[1],\n z = xyz[2],\n l, a, b;\n\n x /= 95.047;\n y /= 100;\n z /= 108.883;\n\n x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\n y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\n z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\n\n l = (116 * y) - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n\n return [l, a, b];\n}\n\nfunction xyz2lch(args) {\n return lab2lch(xyz2lab(args));\n}\n\nfunction lab2xyz(lab) {\n var l = lab[0],\n a = lab[1],\n b = lab[2],\n x, y, z, y2;\n\n if (l <= 8) {\n y = (l * 100) / 903.3;\n y2 = (7.787 * (y / 100)) + (16 / 116);\n } else {\n y = 100 * Math.pow((l + 16) / 116, 3);\n y2 = Math.pow(y / 100, 1/3);\n }\n\n x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);\n\n z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);\n\n return [x, y, z];\n}\n\nfunction lab2lch(lab) {\n var l = lab[0],\n a = lab[1],\n b = lab[2],\n hr, h, c;\n\n hr = Math.atan2(b, a);\n h = hr * 360 / 2 / Math.PI;\n if (h < 0) {\n h += 360;\n }\n c = Math.sqrt(a * a + b * b);\n return [l, c, h];\n}\n\nfunction lab2rgb(args) {\n return xyz2rgb(lab2xyz(args));\n}\n\nfunction lch2lab(lch) {\n var l = lch[0],\n c = lch[1],\n h = lch[2],\n a, b, hr;\n\n hr = h / 360 * 2 * Math.PI;\n a = c * Math.cos(hr);\n b = c * Math.sin(hr);\n return [l, a, b];\n}\n\nfunction lch2xyz(args) {\n return lab2xyz(lch2lab(args));\n}\n\nfunction lch2rgb(args) {\n return lab2rgb(lch2lab(args));\n}\n\nfunction keyword2rgb(keyword) {\n return cssKeywords[keyword];\n}\n\nfunction keyword2hsl(args) {\n return rgb2hsl(keyword2rgb(args));\n}\n\nfunction keyword2hsv(args) {\n return rgb2hsv(keyword2rgb(args));\n}\n\nfunction keyword2hwb(args) {\n return rgb2hwb(keyword2rgb(args));\n}\n\nfunction keyword2cmyk(args) {\n return rgb2cmyk(keyword2rgb(args));\n}\n\nfunction keyword2lab(args) {\n return rgb2lab(keyword2rgb(args));\n}\n\nfunction keyword2xyz(args) {\n return rgb2xyz(keyword2rgb(args));\n}\n\nvar cssKeywords = {\n aliceblue: [240,248,255],\n antiquewhite: [250,235,215],\n aqua: [0,255,255],\n aquamarine: [127,255,212],\n azure: [240,255,255],\n beige: [245,245,220],\n bisque: [255,228,196],\n black: [0,0,0],\n blanchedalmond: [255,235,205],\n blue: [0,0,255],\n blueviolet: [138,43,226],\n brown: [165,42,42],\n burlywood: [222,184,135],\n cadetblue: [95,158,160],\n chartreuse: [127,255,0],\n chocolate: [210,105,30],\n coral: [255,127,80],\n cornflowerblue: [100,149,237],\n cornsilk: [255,248,220],\n crimson: [220,20,60],\n cyan: [0,255,255],\n darkblue: [0,0,139],\n darkcyan: [0,139,139],\n darkgoldenrod: [184,134,11],\n darkgray: [169,169,169],\n darkgreen: [0,100,0],\n darkgrey: [169,169,169],\n darkkhaki: [189,183,107],\n darkmagenta: [139,0,139],\n darkolivegreen: [85,107,47],\n darkorange: [255,140,0],\n darkorchid: [153,50,204],\n darkred: [139,0,0],\n darksalmon: [233,150,122],\n darkseagreen: [143,188,143],\n darkslateblue: [72,61,139],\n darkslategray: [47,79,79],\n darkslategrey: [47,79,79],\n darkturquoise: [0,206,209],\n darkviolet: [148,0,211],\n deeppink: [255,20,147],\n deepskyblue: [0,191,255],\n dimgray: [105,105,105],\n dimgrey: [105,105,105],\n dodgerblue: [30,144,255],\n firebrick: [178,34,34],\n floralwhite: [255,250,240],\n forestgreen: [34,139,34],\n fuchsia: [255,0,255],\n gainsboro: [220,220,220],\n ghostwhite: [248,248,255],\n gold: [255,215,0],\n goldenrod: [218,165,32],\n gray: [128,128,128],\n green: [0,128,0],\n greenyellow: [173,255,47],\n grey: [128,128,128],\n honeydew: [240,255,240],\n hotpink: [255,105,180],\n indianred: [205,92,92],\n indigo: [75,0,130],\n ivory: [255,255,240],\n khaki: [240,230,140],\n lavender: [230,230,250],\n lavenderblush: [255,240,245],\n lawngreen: [124,252,0],\n lemonchiffon: [255,250,205],\n lightblue: [173,216,230],\n lightcoral: [240,128,128],\n lightcyan: [224,255,255],\n lightgoldenrodyellow: [250,250,210],\n lightgray: [211,211,211],\n lightgreen: [144,238,144],\n lightgrey: [211,211,211],\n lightpink: [255,182,193],\n lightsalmon: [255,160,122],\n lightseagreen: [32,178,170],\n lightskyblue: [135,206,250],\n lightslategray: [119,136,153],\n lightslategrey: [119,136,153],\n lightsteelblue: [176,196,222],\n lightyellow: [255,255,224],\n lime: [0,255,0],\n limegreen: [50,205,50],\n linen: [250,240,230],\n magenta: [255,0,255],\n maroon: [128,0,0],\n mediumaquamarine: [102,205,170],\n mediumblue: [0,0,205],\n mediumorchid: [186,85,211],\n mediumpurple: [147,112,219],\n mediumseagreen: [60,179,113],\n mediumslateblue: [123,104,238],\n mediumspringgreen: [0,250,154],\n mediumturquoise: [72,209,204],\n mediumvioletred: [199,21,133],\n midnightblue: [25,25,112],\n mintcream: [245,255,250],\n mistyrose: [255,228,225],\n moccasin: [255,228,181],\n navajowhite: [255,222,173],\n navy: [0,0,128],\n oldlace: [253,245,230],\n olive: [128,128,0],\n olivedrab: [107,142,35],\n orange: [255,165,0],\n orangered: [255,69,0],\n orchid: [218,112,214],\n palegoldenrod: [238,232,170],\n palegreen: [152,251,152],\n paleturquoise: [175,238,238],\n palevioletred: [219,112,147],\n papayawhip: [255,239,213],\n peachpuff: [255,218,185],\n peru: [205,133,63],\n pink: [255,192,203],\n plum: [221,160,221],\n powderblue: [176,224,230],\n purple: [128,0,128],\n rebeccapurple: [102, 51, 153],\n red: [255,0,0],\n rosybrown: [188,143,143],\n royalblue: [65,105,225],\n saddlebrown: [139,69,19],\n salmon: [250,128,114],\n sandybrown: [244,164,96],\n seagreen: [46,139,87],\n seashell: [255,245,238],\n sienna: [160,82,45],\n silver: [192,192,192],\n skyblue: [135,206,235],\n slateblue: [106,90,205],\n slategray: [112,128,144],\n slategrey: [112,128,144],\n snow: [255,250,250],\n springgreen: [0,255,127],\n steelblue: [70,130,180],\n tan: [210,180,140],\n teal: [0,128,128],\n thistle: [216,191,216],\n tomato: [255,99,71],\n turquoise: [64,224,208],\n violet: [238,130,238],\n wheat: [245,222,179],\n white: [255,255,255],\n whitesmoke: [245,245,245],\n yellow: [255,255,0],\n yellowgreen: [154,205,50]\n};\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n reverseKeywords[JSON.stringify(cssKeywords[key])] = key;\n}\n\nvar convert = function() {\n return new Converter();\n};\n\nfor (var func in conversions) {\n // export Raw versions\n convert[func + \"Raw\"] = (function(func) {\n // accept array or plain args\n return function(arg) {\n if (typeof arg == \"number\")\n arg = Array.prototype.slice.call(arguments);\n return conversions[func](arg);\n }\n })(func);\n\n var pair = /(\\w+)2(\\w+)/.exec(func),\n from = pair[1],\n to = pair[2];\n\n // export rgb2hsl and [\"rgb\"][\"hsl\"]\n convert[from] = convert[from] || {};\n\n convert[from][to] = convert[func] = (function(func) { \n return function(arg) {\n if (typeof arg == \"number\")\n arg = Array.prototype.slice.call(arguments);\n \n var val = conversions[func](arg);\n if (typeof val == \"string\" || val === undefined)\n return val; // keyword\n\n for (var i = 0; i < val.length; i++)\n val[i] = Math.round(val[i]);\n return val;\n }\n })(func);\n}\n\n\n/* Converter does lazy conversion and caching */\nvar Converter = function() {\n this.convs = {};\n};\n\n/* Either get the values for a space or\n set the values for a space, depending on args */\nConverter.prototype.routeSpace = function(space, args) {\n var values = args[0];\n if (values === undefined) {\n // color.rgb()\n return this.getValues(space);\n }\n // color.rgb(10, 10, 10)\n if (typeof values == \"number\") {\n values = Array.prototype.slice.call(args); \n }\n\n return this.setValues(space, values);\n};\n \n/* Set the values for a space, invalidating cache */\nConverter.prototype.setValues = function(space, values) {\n this.space = space;\n this.convs = {};\n this.convs[space] = values;\n return this;\n};\n\n/* Get the values for a space. If there's already\n a conversion for the space, fetch it, otherwise\n compute it */\nConverter.prototype.getValues = function(space) {\n var vals = this.convs[space];\n if (!vals) {\n var fspace = this.space,\n from = this.convs[fspace];\n vals = convert[fspace][space](from);\n\n this.convs[space] = vals;\n }\n return vals;\n};\n\n[\"rgb\", \"hsl\", \"hsv\", \"cmyk\", \"keyword\"].forEach(function(space) {\n Converter.prototype[space] = function(vals) {\n return this.routeSpace(space, arguments);\n };\n});\n\nvar colorConvert = convert;\n\nvar colorName = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\n/* MIT license */\n\n\nvar colorString = {\n getRgba: getRgba,\n getHsla: getHsla,\n getRgb: getRgb,\n getHsl: getHsl,\n getHwb: getHwb,\n getAlpha: getAlpha,\n\n hexString: hexString,\n rgbString: rgbString,\n rgbaString: rgbaString,\n percentString: percentString,\n percentaString: percentaString,\n hslString: hslString,\n hslaString: hslaString,\n hwbString: hwbString,\n keyword: keyword\n};\n\nfunction getRgba(string) {\n if (!string) {\n return;\n }\n var abbr = /^#([a-fA-F0-9]{3,4})$/i,\n hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n keyword = /(\\w+)/;\n\n var rgb = [0, 0, 0],\n a = 1,\n match = string.match(abbr),\n hexAlpha = \"\";\n if (match) {\n match = match[1];\n hexAlpha = match[3];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i] + match[i], 16);\n }\n if (hexAlpha) {\n a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n }\n }\n else if (match = string.match(hex)) {\n hexAlpha = match[2];\n match = match[1];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n }\n if (hexAlpha) {\n a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n }\n }\n else if (match = string.match(rgba)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i + 1]);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(per)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(keyword)) {\n if (match[1] == \"transparent\") {\n return [0, 0, 0, 0];\n }\n rgb = colorName[match[1]];\n if (!rgb) {\n return;\n }\n }\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = scale(rgb[i], 0, 255);\n }\n if (!a && a != 0) {\n a = 1;\n }\n else {\n a = scale(a, 0, 1);\n }\n rgb[3] = a;\n return rgb;\n}\n\nfunction getHsla(string) {\n if (!string) {\n return;\n }\n var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hsl);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n s = scale(parseFloat(match[2]), 0, 100),\n l = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, s, l, a];\n }\n}\n\nfunction getHwb(string) {\n if (!string) {\n return;\n }\n var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hwb);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n w = scale(parseFloat(match[2]), 0, 100),\n b = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, w, b, a];\n }\n}\n\nfunction getRgb(string) {\n var rgba = getRgba(string);\n return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n var hsla = getHsla(string);\n return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n var vals = getRgba(string);\n if (vals) {\n return vals[3];\n }\n else if (vals = getHsla(string)) {\n return vals[3];\n }\n else if (vals = getHwb(string)) {\n return vals[3];\n }\n}\n\n// generators\nfunction hexString(rgba, a) {\n var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n return \"#\" + hexDouble(rgba[0]) \n + hexDouble(rgba[1])\n + hexDouble(rgba[2])\n + (\n (a >= 0 && a < 1)\n ? hexDouble(Math.round(a * 255))\n : \"\"\n );\n}\n\nfunction rgbString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return rgbaString(rgba, alpha);\n }\n return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n if (alpha === undefined) {\n alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n }\n return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return percentaString(rgba, alpha);\n }\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n\n return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n return hslaString(hsla, alpha);\n }\n return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n if (alpha === undefined) {\n alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n }\n return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n if (alpha === undefined) {\n alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n }\n return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n var str = num.toString(16).toUpperCase();\n return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorName) {\n reverseNames[colorName[name]] = name;\n}\n\n/* MIT license */\n\n\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = colorString.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = colorString.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = colorString.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn colorString.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn colorString.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn colorString.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn colorString.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn colorString.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn colorString.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn colorString.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn colorString.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = colorConvert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nvar chartjsColor = Color;\n\n/**\n * @namespace Chart.helpers\n */\nvar helpers = {\n\t/**\n\t * An empty function that can be used, for example, for optional callback.\n\t */\n\tnoop: function() {},\n\n\t/**\n\t * Returns a unique id, sequentially generated from a global variable.\n\t * @returns {number}\n\t * @function\n\t */\n\tuid: (function() {\n\t\tvar id = 0;\n\t\treturn function() {\n\t\t\treturn id++;\n\t\t};\n\t}()),\n\n\t/**\n\t * Returns true if `value` is neither null nor undefined, else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {boolean}\n\t * @since 2.7.0\n\t */\n\tisNullOrUndef: function(value) {\n\t\treturn value === null || typeof value === 'undefined';\n\t},\n\n\t/**\n\t * Returns true if `value` is an array (including typed arrays), else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {boolean}\n\t * @function\n\t */\n\tisArray: function(value) {\n\t\tif (Array.isArray && Array.isArray(value)) {\n\t\t\treturn true;\n\t\t}\n\t\tvar type = Object.prototype.toString.call(value);\n\t\tif (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\t/**\n\t * Returns true if `value` is an object (excluding null), else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {boolean}\n\t * @since 2.7.0\n\t */\n\tisObject: function(value) {\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\n\t},\n\n\t/**\n\t * Returns true if `value` is a finite number, else returns false\n\t * @param {*} value - The value to test.\n\t * @returns {boolean}\n\t */\n\tisFinite: function(value) {\n\t\treturn (typeof value === 'number' || value instanceof Number) && isFinite(value);\n\t},\n\n\t/**\n\t * Returns `value` if defined, else returns `defaultValue`.\n\t * @param {*} value - The value to return if defined.\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\n\t * @returns {*}\n\t */\n\tvalueOrDefault: function(value, defaultValue) {\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\n\t},\n\n\t/**\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\n\t * @param {Array} value - The array to lookup for value at `index`.\n\t * @param {number} index - The index in `value` to lookup for value.\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\n\t * @returns {*}\n\t */\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n\t},\n\n\t/**\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n\t * @param {function} fn - The function to call.\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\n\t * @returns {*}\n\t */\n\tcallback: function(fn, args, thisArg) {\n\t\tif (fn && typeof fn.call === 'function') {\n\t\t\treturn fn.apply(thisArg, args);\n\t\t}\n\t},\n\n\t/**\n\t * Note(SB) for performance sake, this method should only be used when loopable type\n\t * is unknown or in none intensive code (not called often and small loopable). Else\n\t * it's preferable to use a regular for() loop and save extra function calls.\n\t * @param {object|Array} loopable - The object or array to be iterated.\n\t * @param {function} fn - The function to call for each item.\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\n\t * @param {boolean} [reverse] - If true, iterates backward on the loopable.\n\t */\n\teach: function(loopable, fn, thisArg, reverse) {\n\t\tvar i, len, keys;\n\t\tif (helpers.isArray(loopable)) {\n\t\t\tlen = loopable.length;\n\t\t\tif (reverse) {\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (helpers.isObject(loopable)) {\n\t\t\tkeys = Object.keys(loopable);\n\t\t\tlen = keys.length;\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n\t * @see https://stackoverflow.com/a/14853974\n\t * @param {Array} a0 - The array to compare\n\t * @param {Array} a1 - The array to compare\n\t * @returns {boolean}\n\t */\n\tarrayEquals: function(a0, a1) {\n\t\tvar i, ilen, v0, v1;\n\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\n\t\t\tv0 = a0[i];\n\t\t\tv1 = a1[i];\n\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (v0 !== v1) {\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\n\t * @param {*} source - The value to clone.\n\t * @returns {*}\n\t */\n\tclone: function(source) {\n\t\tif (helpers.isArray(source)) {\n\t\t\treturn source.map(helpers.clone);\n\t\t}\n\n\t\tif (helpers.isObject(source)) {\n\t\t\tvar target = {};\n\t\t\tvar keys = Object.keys(source);\n\t\t\tvar klen = keys.length;\n\t\t\tvar k = 0;\n\n\t\t\tfor (; k < klen; ++k) {\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\n\t\t\t}\n\n\t\t\treturn target;\n\t\t}\n\n\t\treturn source;\n\t},\n\n\t/**\n\t * The default merger when Chart.helpers.merge is called without merger option.\n\t * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n\t * @private\n\t */\n\t_merger: function(key, target, source, options) {\n\t\tvar tval = target[key];\n\t\tvar sval = source[key];\n\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\thelpers.merge(tval, sval, options);\n\t\t} else {\n\t\t\ttarget[key] = helpers.clone(sval);\n\t\t}\n\t},\n\n\t/**\n\t * Merges source[key] in target[key] only if target[key] is undefined.\n\t * @private\n\t */\n\t_mergerIf: function(key, target, source) {\n\t\tvar tval = target[key];\n\t\tvar sval = source[key];\n\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\thelpers.mergeIf(tval, sval);\n\t\t} else if (!target.hasOwnProperty(key)) {\n\t\t\ttarget[key] = helpers.clone(sval);\n\t\t}\n\t},\n\n\t/**\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n\t * @param {object} target - The target object in which all sources are merged into.\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\n\t * @param {object} [options] - Merging options:\n\t * @param {function} [options.merger] - The merge method (key, target, source, options)\n\t * @returns {object} The `target` object.\n\t */\n\tmerge: function(target, source, options) {\n\t\tvar sources = helpers.isArray(source) ? source : [source];\n\t\tvar ilen = sources.length;\n\t\tvar merge, i, keys, klen, k;\n\n\t\tif (!helpers.isObject(target)) {\n\t\t\treturn target;\n\t\t}\n\n\t\toptions = options || {};\n\t\tmerge = options.merger || helpers._merger;\n\n\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\tsource = sources[i];\n\t\t\tif (!helpers.isObject(source)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tkeys = Object.keys(source);\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\n\t\t\t\tmerge(keys[k], target, source, options);\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t},\n\n\t/**\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n\t * @param {object} target - The target object in which all sources are merged into.\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\n\t * @returns {object} The `target` object.\n\t */\n\tmergeIf: function(target, source) {\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\n\t},\n\n\t/**\n\t * Applies the contents of two or more objects together into the first object.\n\t * @param {object} target - The target object in which all objects are merged into.\n\t * @param {object} arg1 - Object containing additional properties to merge in target.\n\t * @param {object} argN - Additional objects containing properties to merge in target.\n\t * @returns {object} The `target` object.\n\t */\n\textend: function(target) {\n\t\tvar setFn = function(value, key) {\n\t\t\ttarget[key] = value;\n\t\t};\n\t\tfor (var i = 1, ilen = arguments.length; i < ilen; ++i) {\n\t\t\thelpers.each(arguments[i], setFn);\n\t\t}\n\t\treturn target;\n\t},\n\n\t/**\n\t * Basic javascript inheritance based on the model created in Backbone.js\n\t */\n\tinherits: function(extensions) {\n\t\tvar me = this;\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\n\t\t\treturn me.apply(this, arguments);\n\t\t};\n\n\t\tvar Surrogate = function() {\n\t\t\tthis.constructor = ChartElement;\n\t\t};\n\n\t\tSurrogate.prototype = me.prototype;\n\t\tChartElement.prototype = new Surrogate();\n\t\tChartElement.extend = helpers.inherits;\n\n\t\tif (extensions) {\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\n\t\t}\n\n\t\tChartElement.__super__ = me.prototype;\n\t\treturn ChartElement;\n\t}\n};\n\nvar helpers_core = helpers;\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.callback instead.\n * @function Chart.helpers.callCallback\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\nhelpers.callCallback = helpers.callback;\n\n/**\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\n * @function Chart.helpers.indexOf\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.indexOf = function(array, item, fromIndex) {\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\n};\n\n/**\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\n * @function Chart.helpers.getValueOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.getValueOrDefault = helpers.valueOrDefault;\n\n/**\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\n * @function Chart.helpers.getValueAtIndexOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easingEffects\n * @see http://www.robertpenner.com/easing/\n */\nvar effects = {\n\tlinear: function(t) {\n\t\treturn t;\n\t},\n\n\teaseInQuad: function(t) {\n\t\treturn t * t;\n\t},\n\n\teaseOutQuad: function(t) {\n\t\treturn -t * (t - 2);\n\t},\n\n\teaseInOutQuad: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t;\n\t\t}\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\n\t},\n\n\teaseInCubic: function(t) {\n\t\treturn t * t * t;\n\t},\n\n\teaseOutCubic: function(t) {\n\t\treturn (t = t - 1) * t * t + 1;\n\t},\n\n\teaseInOutCubic: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t;\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\n\t},\n\n\teaseInQuart: function(t) {\n\t\treturn t * t * t * t;\n\t},\n\n\teaseOutQuart: function(t) {\n\t\treturn -((t = t - 1) * t * t * t - 1);\n\t},\n\n\teaseInOutQuart: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t * t;\n\t\t}\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\n\t},\n\n\teaseInQuint: function(t) {\n\t\treturn t * t * t * t * t;\n\t},\n\n\teaseOutQuint: function(t) {\n\t\treturn (t = t - 1) * t * t * t * t + 1;\n\t},\n\n\teaseInOutQuint: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t * t * t;\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n\t},\n\n\teaseInSine: function(t) {\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\n\t},\n\n\teaseOutSine: function(t) {\n\t\treturn Math.sin(t * (Math.PI / 2));\n\t},\n\n\teaseInOutSine: function(t) {\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n\t},\n\n\teaseInExpo: function(t) {\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\n\t},\n\n\teaseOutExpo: function(t) {\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\n\t},\n\n\teaseInOutExpo: function(t) {\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\n\t\t}\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\n\t},\n\n\teaseInCirc: function(t) {\n\t\tif (t >= 1) {\n\t\t\treturn t;\n\t\t}\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\n\t},\n\n\teaseOutCirc: function(t) {\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\n\t},\n\n\teaseInOutCirc: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\n\t\t}\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t},\n\n\teaseInElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.3;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t},\n\n\teaseOutElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.3;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n\t},\n\n\teaseInOutElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif ((t /= 0.5) === 2) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.45;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\tif (t < 1) {\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t\t}\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t},\n\teaseInBack: function(t) {\n\t\tvar s = 1.70158;\n\t\treturn t * t * ((s + 1) * t - s);\n\t},\n\n\teaseOutBack: function(t) {\n\t\tvar s = 1.70158;\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\n\t},\n\n\teaseInOutBack: function(t) {\n\t\tvar s = 1.70158;\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n\t},\n\n\teaseInBounce: function(t) {\n\t\treturn 1 - effects.easeOutBounce(1 - t);\n\t},\n\n\teaseOutBounce: function(t) {\n\t\tif (t < (1 / 2.75)) {\n\t\t\treturn 7.5625 * t * t;\n\t\t}\n\t\tif (t < (2 / 2.75)) {\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\n\t\t}\n\t\tif (t < (2.5 / 2.75)) {\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\n\t\t}\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\n\t},\n\n\teaseInOutBounce: function(t) {\n\t\tif (t < 0.5) {\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\n\t\t}\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n\t}\n};\n\nvar helpers_easing = {\n\teffects: effects\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\n * @function Chart.helpers.easingEffects\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers_core.easingEffects = effects;\n\nvar PI = Math.PI;\nvar RAD_PER_DEG = PI / 180;\nvar DOUBLE_PI = PI * 2;\nvar HALF_PI = PI / 2;\nvar QUARTER_PI = PI / 4;\nvar TWO_THIRDS_PI = PI * 2 / 3;\n\n/**\n * @namespace Chart.helpers.canvas\n */\nvar exports$1 = {\n\t/**\n\t * Clears the entire canvas associated to the given `chart`.\n\t * @param {Chart} chart - The chart for which to clear the canvas.\n\t */\n\tclear: function(chart) {\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\n\t},\n\n\t/**\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\n\t * given size (width, height) and the same `radius` for all corners.\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\n\t * @param {number} x - The x axis of the coordinate for the rectangle starting point.\n\t * @param {number} y - The y axis of the coordinate for the rectangle starting point.\n\t * @param {number} width - The rectangle's width.\n\t * @param {number} height - The rectangle's height.\n\t * @param {number} radius - The rounded amount (in pixels) for the four corners.\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\n\t */\n\troundedRect: function(ctx, x, y, width, height, radius) {\n\t\tif (radius) {\n\t\t\tvar r = Math.min(radius, height / 2, width / 2);\n\t\t\tvar left = x + r;\n\t\t\tvar top = y + r;\n\t\t\tvar right = x + width - r;\n\t\t\tvar bottom = y + height - r;\n\n\t\t\tctx.moveTo(x, top);\n\t\t\tif (left < right && top < bottom) {\n\t\t\t\tctx.arc(left, top, r, -PI, -HALF_PI);\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, 0);\n\t\t\t\tctx.arc(right, bottom, r, 0, HALF_PI);\n\t\t\t\tctx.arc(left, bottom, r, HALF_PI, PI);\n\t\t\t} else if (left < right) {\n\t\t\t\tctx.moveTo(left, y);\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, HALF_PI);\n\t\t\t\tctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\n\t\t\t} else if (top < bottom) {\n\t\t\t\tctx.arc(left, top, r, -PI, 0);\n\t\t\t\tctx.arc(left, bottom, r, 0, PI);\n\t\t\t} else {\n\t\t\t\tctx.arc(left, top, r, -PI, PI);\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t\tctx.moveTo(x, y);\n\t\t} else {\n\t\t\tctx.rect(x, y, width, height);\n\t\t}\n\t},\n\n\tdrawPoint: function(ctx, style, radius, x, y, rotation) {\n\t\tvar type, xOffset, yOffset, size, cornerRadius;\n\t\tvar rad = (rotation || 0) * RAD_PER_DEG;\n\n\t\tif (style && typeof style === 'object') {\n\t\t\ttype = style.toString();\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n\t\t\t\tctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (isNaN(radius) || radius <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tctx.beginPath();\n\n\t\tswitch (style) {\n\t\t// Default includes circle\n\t\tdefault:\n\t\t\tctx.arc(x, y, radius, 0, DOUBLE_PI);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'triangle':\n\t\t\tctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n\t\t\trad += TWO_THIRDS_PI;\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n\t\t\trad += TWO_THIRDS_PI;\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'rectRounded':\n\t\t\t// NOTE: the rounded rect implementation changed to use `arc` instead of\n\t\t\t// `quadraticCurveTo` since it generates better results when rect is\n\t\t\t// almost a circle. 0.516 (instead of 0.5) produces results with visually\n\t\t\t// closer proportion to the previous impl and it is inscribed in the\n\t\t\t// circle with `radius`. For more details, see the following PRs:\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5597\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5858\n\t\t\tcornerRadius = radius * 0.516;\n\t\t\tsize = radius - cornerRadius;\n\t\t\txOffset = Math.cos(rad + QUARTER_PI) * size;\n\t\t\tyOffset = Math.sin(rad + QUARTER_PI) * size;\n\t\t\tctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n\t\t\tctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n\t\t\tctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n\t\t\tctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'rect':\n\t\t\tif (!rotation) {\n\t\t\t\tsize = Math.SQRT1_2 * radius;\n\t\t\t\tctx.rect(x - size, y - size, 2 * size, 2 * size);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\trad += QUARTER_PI;\n\t\t\t/* falls through */\n\t\tcase 'rectRot':\n\t\t\txOffset = Math.cos(rad) * radius;\n\t\t\tyOffset = Math.sin(rad) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + yOffset, y - xOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'crossRot':\n\t\t\trad += QUARTER_PI;\n\t\t\t/* falls through */\n\t\tcase 'cross':\n\t\t\txOffset = Math.cos(rad) * radius;\n\t\t\tyOffset = Math.sin(rad) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\n\t\t\tbreak;\n\t\tcase 'star':\n\t\t\txOffset = Math.cos(rad) * radius;\n\t\t\tyOffset = Math.sin(rad) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\n\t\t\trad += QUARTER_PI;\n\t\t\txOffset = Math.cos(rad) * radius;\n\t\t\tyOffset = Math.sin(rad) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\txOffset = Math.cos(rad) * radius;\n\t\t\tyOffset = Math.sin(rad) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tbreak;\n\t\tcase 'dash':\n\t\t\tctx.moveTo(x, y);\n\t\t\tctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n\t\t\tbreak;\n\t\t}\n\n\t\tctx.fill();\n\t\tctx.stroke();\n\t},\n\n\t/**\n\t * Returns true if the point is inside the rectangle\n\t * @param {object} point - The point to test\n\t * @param {object} area - The rectangle\n\t * @returns {boolean}\n\t * @private\n\t */\n\t_isPointInArea: function(point, area) {\n\t\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n\n\t\treturn point.x > area.left - epsilon && point.x < area.right + epsilon &&\n\t\t\tpoint.y > area.top - epsilon && point.y < area.bottom + epsilon;\n\t},\n\n\tclipArea: function(ctx, area) {\n\t\tctx.save();\n\t\tctx.beginPath();\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n\t\tctx.clip();\n\t},\n\n\tunclipArea: function(ctx) {\n\t\tctx.restore();\n\t},\n\n\tlineTo: function(ctx, previous, target, flip) {\n\t\tvar stepped = target.steppedLine;\n\t\tif (stepped) {\n\t\t\tif (stepped === 'middle') {\n\t\t\t\tvar midpoint = (previous.x + target.x) / 2.0;\n\t\t\t\tctx.lineTo(midpoint, flip ? target.y : previous.y);\n\t\t\t\tctx.lineTo(midpoint, flip ? previous.y : target.y);\n\t\t\t} else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {\n\t\t\t\tctx.lineTo(previous.x, target.y);\n\t\t\t} else {\n\t\t\t\tctx.lineTo(target.x, previous.y);\n\t\t\t}\n\t\t\tctx.lineTo(target.x, target.y);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!target.tension) {\n\t\t\tctx.lineTo(target.x, target.y);\n\t\t\treturn;\n\t\t}\n\n\t\tctx.bezierCurveTo(\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\n\t\t\ttarget.x,\n\t\t\ttarget.y);\n\t}\n};\n\nvar helpers_canvas = exports$1;\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\n * @namespace Chart.helpers.clear\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers_core.clear = exports$1.clear;\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\n * @namespace Chart.helpers.drawRoundedRectangle\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers_core.drawRoundedRectangle = function(ctx) {\n\tctx.beginPath();\n\texports$1.roundedRect.apply(exports$1, arguments);\n};\n\nvar defaults = {\n\t/**\n\t * @private\n\t */\n\t_set: function(scope, values) {\n\t\treturn helpers_core.merge(this[scope] || (this[scope] = {}), values);\n\t}\n};\n\ndefaults._set('global', {\n\tdefaultColor: 'rgba(0,0,0,0.1)',\n\tdefaultFontColor: '#666',\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\tdefaultFontSize: 12,\n\tdefaultFontStyle: 'normal',\n\tdefaultLineHeight: 1.2,\n\tshowLines: true\n});\n\nvar core_defaults = defaults;\n\nvar valueOrDefault = helpers_core.valueOrDefault;\n\n/**\n * Converts the given font object into a CSS font string.\n * @param {object} font - A font object.\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nfunction toFontString(font) {\n\tif (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\n\t\treturn null;\n\t}\n\n\treturn (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\nvar helpers_options = {\n\t/**\n\t * Converts the given line height `value` in pixels for a specific font `size`.\n\t * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n\t * @param {number} size - The font size (in pixels) used to resolve relative `value`.\n\t * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n\t * @since 2.7.0\n\t */\n\ttoLineHeight: function(value, size) {\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n\t\tif (!matches || matches[1] === 'normal') {\n\t\t\treturn size * 1.2;\n\t\t}\n\n\t\tvalue = +matches[2];\n\n\t\tswitch (matches[3]) {\n\t\tcase 'px':\n\t\t\treturn value;\n\t\tcase '%':\n\t\t\tvalue /= 100;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\t\treturn size * value;\n\t},\n\n\t/**\n\t * Converts the given value into a padding object with pre-computed width/height.\n\t * @param {number|object} value - If a number, set the value to all TRBL component,\n\t * else, if and object, use defined properties and sets undefined ones to 0.\n\t * @returns {object} The padding values (top, right, bottom, left, width, height)\n\t * @since 2.7.0\n\t */\n\ttoPadding: function(value) {\n\t\tvar t, r, b, l;\n\n\t\tif (helpers_core.isObject(value)) {\n\t\t\tt = +value.top || 0;\n\t\t\tr = +value.right || 0;\n\t\t\tb = +value.bottom || 0;\n\t\t\tl = +value.left || 0;\n\t\t} else {\n\t\t\tt = r = b = l = +value || 0;\n\t\t}\n\n\t\treturn {\n\t\t\ttop: t,\n\t\t\tright: r,\n\t\t\tbottom: b,\n\t\t\tleft: l,\n\t\t\theight: t + b,\n\t\t\twidth: l + r\n\t\t};\n\t},\n\n\t/**\n\t * Parses font options and returns the font object.\n\t * @param {object} options - A object that contains font options to be parsed.\n\t * @return {object} The font object.\n\t * @todo Support font.* options and renamed to toFont().\n\t * @private\n\t */\n\t_parseFont: function(options) {\n\t\tvar globalDefaults = core_defaults.global;\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n\t\tvar font = {\n\t\t\tfamily: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\n\t\t\tlineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\n\t\t\tsize: size,\n\t\t\tstyle: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\n\t\t\tweight: null,\n\t\t\tstring: ''\n\t\t};\n\n\t\tfont.string = toFontString(font);\n\t\treturn font;\n\t},\n\n\t/**\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\n\t * @param {Array} inputs - An array of values, falling back to the last value.\n\t * @param {object} [context] - If defined and the current value is a function, the value\n\t * is called with `context` as first argument and the result becomes the new input.\n\t * @param {number} [index] - If defined and the current value is an array, the value\n\t * at `index` become the new input.\n\t * @since 2.7.0\n\t */\n\tresolve: function(inputs, context, index) {\n\t\tvar i, ilen, value;\n\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\n\t\t\tvalue = inputs[i];\n\t\t\tif (value === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (context !== undefined && typeof value === 'function') {\n\t\t\t\tvalue = value(context);\n\t\t\t}\n\t\t\tif (index !== undefined && helpers_core.isArray(value)) {\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tif (value !== undefined) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar helpers$1 = helpers_core;\nvar easing = helpers_easing;\nvar canvas = helpers_canvas;\nvar options = helpers_options;\nhelpers$1.easing = easing;\nhelpers$1.canvas = canvas;\nhelpers$1.options = options;\n\nfunction interpolate(start, view, model, ease) {\n\tvar keys = Object.keys(model);\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\n\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\tkey = keys[i];\n\n\t\ttarget = model[key];\n\n\t\t// if a value is added to the model after pivot() has been called, the view\n\t\t// doesn't contain it, so let's initialize the view to the target value.\n\t\tif (!view.hasOwnProperty(key)) {\n\t\t\tview[key] = target;\n\t\t}\n\n\t\tactual = view[key];\n\n\t\tif (actual === target || key[0] === '_') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!start.hasOwnProperty(key)) {\n\t\t\tstart[key] = actual;\n\t\t}\n\n\t\torigin = start[key];\n\n\t\ttype = typeof target;\n\n\t\tif (type === typeof origin) {\n\t\t\tif (type === 'string') {\n\t\t\t\tc0 = chartjsColor(origin);\n\t\t\t\tif (c0.valid) {\n\t\t\t\t\tc1 = chartjsColor(target);\n\t\t\t\t\tif (c1.valid) {\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\n\t\t\t\tview[key] = origin + (target - origin) * ease;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tview[key] = target;\n\t}\n}\n\nvar Element = function(configuration) {\n\thelpers$1.extend(this, configuration);\n\tthis.initialize.apply(this, arguments);\n};\n\nhelpers$1.extend(Element.prototype, {\n\n\tinitialize: function() {\n\t\tthis.hidden = false;\n\t},\n\n\tpivot: function() {\n\t\tvar me = this;\n\t\tif (!me._view) {\n\t\t\tme._view = helpers$1.clone(me._model);\n\t\t}\n\t\tme._start = {};\n\t\treturn me;\n\t},\n\n\ttransition: function(ease) {\n\t\tvar me = this;\n\t\tvar model = me._model;\n\t\tvar start = me._start;\n\t\tvar view = me._view;\n\n\t\t// No animation -> No Transition\n\t\tif (!model || ease === 1) {\n\t\t\tme._view = model;\n\t\t\tme._start = null;\n\t\t\treturn me;\n\t\t}\n\n\t\tif (!view) {\n\t\t\tview = me._view = {};\n\t\t}\n\n\t\tif (!start) {\n\t\t\tstart = me._start = {};\n\t\t}\n\n\t\tinterpolate(start, view, model, ease);\n\n\t\treturn me;\n\t},\n\n\ttooltipPosition: function() {\n\t\treturn {\n\t\t\tx: this._model.x,\n\t\t\ty: this._model.y\n\t\t};\n\t},\n\n\thasValue: function() {\n\t\treturn helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\n\t}\n});\n\nElement.extend = helpers$1.inherits;\n\nvar core_element = Element;\n\nvar exports$2 = core_element.extend({\n\tchart: null, // the animation associated chart instance\n\tcurrentStep: 0, // the current animation step\n\tnumSteps: 60, // default number of steps\n\teasing: '', // the easing to use for this animation\n\trender: null, // render function used by the animation service\n\n\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\n\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\n});\n\nvar core_animation = exports$2;\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.Animation instead\n * @prop Chart.Animation#animationObject\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n */\nObject.defineProperty(exports$2.prototype, 'animationObject', {\n\tget: function() {\n\t\treturn this;\n\t}\n});\n\n/**\n * Provided for backward compatibility, use Chart.Animation#chart instead\n * @prop Chart.Animation#chartInstance\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n */\nObject.defineProperty(exports$2.prototype, 'chartInstance', {\n\tget: function() {\n\t\treturn this.chart;\n\t},\n\tset: function(value) {\n\t\tthis.chart = value;\n\t}\n});\n\ncore_defaults._set('global', {\n\tanimation: {\n\t\tduration: 1000,\n\t\teasing: 'easeOutQuart',\n\t\tonProgress: helpers$1.noop,\n\t\tonComplete: helpers$1.noop\n\t}\n});\n\nvar core_animations = {\n\tanimations: [],\n\trequest: null,\n\n\t/**\n\t * @param {Chart} chart - The chart to animate.\n\t * @param {Chart.Animation} animation - The animation that we will animate.\n\t * @param {number} duration - The animation duration in ms.\n\t * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\n\t */\n\taddAnimation: function(chart, animation, duration, lazy) {\n\t\tvar animations = this.animations;\n\t\tvar i, ilen;\n\n\t\tanimation.chart = chart;\n\t\tanimation.startTime = Date.now();\n\t\tanimation.duration = duration;\n\n\t\tif (!lazy) {\n\t\t\tchart.animating = true;\n\t\t}\n\n\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\n\t\t\tif (animations[i].chart === chart) {\n\t\t\t\tanimations[i] = animation;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tanimations.push(animation);\n\n\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\n\t\tif (animations.length === 1) {\n\t\t\tthis.requestAnimationFrame();\n\t\t}\n\t},\n\n\tcancelAnimation: function(chart) {\n\t\tvar index = helpers$1.findIndex(this.animations, function(animation) {\n\t\t\treturn animation.chart === chart;\n\t\t});\n\n\t\tif (index !== -1) {\n\t\t\tthis.animations.splice(index, 1);\n\t\t\tchart.animating = false;\n\t\t}\n\t},\n\n\trequestAnimationFrame: function() {\n\t\tvar me = this;\n\t\tif (me.request === null) {\n\t\t\t// Skip animation frame requests until the active one is executed.\n\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\n\t\t\t// and 'mouseout' events will trigger multiple renders.\n\t\t\tme.request = helpers$1.requestAnimFrame.call(window, function() {\n\t\t\t\tme.request = null;\n\t\t\t\tme.startDigest();\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t */\n\tstartDigest: function() {\n\t\tvar me = this;\n\n\t\tme.advance();\n\n\t\t// Do we have more stuff to animate?\n\t\tif (me.animations.length > 0) {\n\t\t\tme.requestAnimationFrame();\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t */\n\tadvance: function() {\n\t\tvar animations = this.animations;\n\t\tvar animation, chart, numSteps, nextStep;\n\t\tvar i = 0;\n\n\t\t// 1 animation per chart, so we are looping charts here\n\t\twhile (i < animations.length) {\n\t\t\tanimation = animations[i];\n\t\t\tchart = animation.chart;\n\t\t\tnumSteps = animation.numSteps;\n\n\t\t\t// Make sure that currentStep starts at 1\n\t\t\t// https://github.com/chartjs/Chart.js/issues/6104\n\t\t\tnextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\n\t\t\tanimation.currentStep = Math.min(nextStep, numSteps);\n\n\t\t\thelpers$1.callback(animation.render, [chart, animation], chart);\n\t\t\thelpers$1.callback(animation.onAnimationProgress, [animation], chart);\n\n\t\t\tif (animation.currentStep >= numSteps) {\n\t\t\t\thelpers$1.callback(animation.onAnimationComplete, [animation], chart);\n\t\t\t\tchart.animating = false;\n\t\t\t\tanimations.splice(i, 1);\n\t\t\t} else {\n\t\t\t\t++i;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar resolve = helpers$1.options.resolve;\n\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\n */\nfunction listenArrayEvents(array, listener) {\n\tif (array._chartjs) {\n\t\tarray._chartjs.listeners.push(listener);\n\t\treturn;\n\t}\n\n\tObject.defineProperty(array, '_chartjs', {\n\t\tconfigurable: true,\n\t\tenumerable: false,\n\t\tvalue: {\n\t\t\tlisteners: [listener]\n\t\t}\n\t});\n\n\tarrayEvents.forEach(function(key) {\n\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n\t\tvar base = array[key];\n\n\t\tObject.defineProperty(array, key, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: function() {\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\t\tvar res = base.apply(this, args);\n\n\t\t\t\thelpers$1.each(array._chartjs.listeners, function(object) {\n\t\t\t\t\tif (typeof object[method] === 'function') {\n\t\t\t\t\t\tobject[method].apply(object, args);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn res;\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nfunction unlistenArrayEvents(array, listener) {\n\tvar stub = array._chartjs;\n\tif (!stub) {\n\t\treturn;\n\t}\n\n\tvar listeners = stub.listeners;\n\tvar index = listeners.indexOf(listener);\n\tif (index !== -1) {\n\t\tlisteners.splice(index, 1);\n\t}\n\n\tif (listeners.length > 0) {\n\t\treturn;\n\t}\n\n\tarrayEvents.forEach(function(key) {\n\t\tdelete array[key];\n\t});\n\n\tdelete array._chartjs;\n}\n\n// Base class for all dataset controllers (line, bar, etc)\nvar DatasetController = function(chart, datasetIndex) {\n\tthis.initialize(chart, datasetIndex);\n};\n\nhelpers$1.extend(DatasetController.prototype, {\n\n\t/**\n\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\n\t * @type {Chart.core.element}\n\t */\n\tdatasetElementType: null,\n\n\t/**\n\t * Element type used to generate a meta data (e.g. Chart.element.Point).\n\t * @type {Chart.core.element}\n\t */\n\tdataElementType: null,\n\n\tinitialize: function(chart, datasetIndex) {\n\t\tvar me = this;\n\t\tme.chart = chart;\n\t\tme.index = datasetIndex;\n\t\tme.linkScales();\n\t\tme.addElements();\n\t},\n\n\tupdateIndex: function(datasetIndex) {\n\t\tthis.index = datasetIndex;\n\t},\n\n\tlinkScales: function() {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar dataset = me.getDataset();\n\n\t\tif (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) {\n\t\t\tmeta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;\n\t\t}\n\t\tif (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) {\n\t\t\tmeta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;\n\t\t}\n\t},\n\n\tgetDataset: function() {\n\t\treturn this.chart.data.datasets[this.index];\n\t},\n\n\tgetMeta: function() {\n\t\treturn this.chart.getDatasetMeta(this.index);\n\t},\n\n\tgetScaleForId: function(scaleID) {\n\t\treturn this.chart.scales[scaleID];\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_getValueScaleId: function() {\n\t\treturn this.getMeta().yAxisID;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_getIndexScaleId: function() {\n\t\treturn this.getMeta().xAxisID;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_getValueScale: function() {\n\t\treturn this.getScaleForId(this._getValueScaleId());\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_getIndexScale: function() {\n\t\treturn this.getScaleForId(this._getIndexScaleId());\n\t},\n\n\treset: function() {\n\t\tthis.update(true);\n\t},\n\n\t/**\n\t * @private\n\t */\n\tdestroy: function() {\n\t\tif (this._data) {\n\t\t\tunlistenArrayEvents(this._data, this);\n\t\t}\n\t},\n\n\tcreateMetaDataset: function() {\n\t\tvar me = this;\n\t\tvar type = me.datasetElementType;\n\t\treturn type && new type({\n\t\t\t_chart: me.chart,\n\t\t\t_datasetIndex: me.index\n\t\t});\n\t},\n\n\tcreateMetaData: function(index) {\n\t\tvar me = this;\n\t\tvar type = me.dataElementType;\n\t\treturn type && new type({\n\t\t\t_chart: me.chart,\n\t\t\t_datasetIndex: me.index,\n\t\t\t_index: index\n\t\t});\n\t},\n\n\taddElements: function() {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar data = me.getDataset().data || [];\n\t\tvar metaData = meta.data;\n\t\tvar i, ilen;\n\n\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\n\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\n\t\t}\n\n\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\n\t},\n\n\taddElementAndReset: function(index) {\n\t\tvar element = this.createMetaData(index);\n\t\tthis.getMeta().data.splice(index, 0, element);\n\t\tthis.updateElement(element, index, true);\n\t},\n\n\tbuildOrUpdateElements: function() {\n\t\tvar me = this;\n\t\tvar dataset = me.getDataset();\n\t\tvar data = dataset.data || (dataset.data = []);\n\n\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\n\t\t// real-time charts), we need to monitor these data modifications and synchronize\n\t\t// the internal meta data accordingly.\n\t\tif (me._data !== data) {\n\t\t\tif (me._data) {\n\t\t\t\t// This case happens when the user replaced the data array instance.\n\t\t\t\tunlistenArrayEvents(me._data, me);\n\t\t\t}\n\n\t\t\tif (data && Object.isExtensible(data)) {\n\t\t\t\tlistenArrayEvents(data, me);\n\t\t\t}\n\t\t\tme._data = data;\n\t\t}\n\n\t\t// Re-sync meta data in case the user replaced the data array or if we missed\n\t\t// any updates and so make sure that we handle number of datapoints changing.\n\t\tme.resyncElements();\n\t},\n\n\tupdate: helpers$1.noop,\n\n\ttransition: function(easingValue) {\n\t\tvar meta = this.getMeta();\n\t\tvar elements = meta.data || [];\n\t\tvar ilen = elements.length;\n\t\tvar i = 0;\n\n\t\tfor (; i < ilen; ++i) {\n\t\t\telements[i].transition(easingValue);\n\t\t}\n\n\t\tif (meta.dataset) {\n\t\t\tmeta.dataset.transition(easingValue);\n\t\t}\n\t},\n\n\tdraw: function() {\n\t\tvar meta = this.getMeta();\n\t\tvar elements = meta.data || [];\n\t\tvar ilen = elements.length;\n\t\tvar i = 0;\n\n\t\tif (meta.dataset) {\n\t\t\tmeta.dataset.draw();\n\t\t}\n\n\t\tfor (; i < ilen; ++i) {\n\t\t\telements[i].draw();\n\t\t}\n\t},\n\n\tremoveHoverStyle: function(element) {\n\t\thelpers$1.merge(element._model, element.$previousStyle || {});\n\t\tdelete element.$previousStyle;\n\t},\n\n\tsetHoverStyle: function(element) {\n\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\n\t\tvar index = element._index;\n\t\tvar custom = element.custom || {};\n\t\tvar model = element._model;\n\t\tvar getHoverColor = helpers$1.getHoverColor;\n\n\t\telement.$previousStyle = {\n\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\tborderColor: model.borderColor,\n\t\t\tborderWidth: model.borderWidth\n\t\t};\n\n\t\tmodel.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\n\t\tmodel.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\n\t\tmodel.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\n\t},\n\n\t/**\n\t * @private\n\t */\n\tresyncElements: function() {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar data = me.getDataset().data;\n\t\tvar numMeta = meta.data.length;\n\t\tvar numData = data.length;\n\n\t\tif (numData < numMeta) {\n\t\t\tmeta.data.splice(numData, numMeta - numData);\n\t\t} else if (numData > numMeta) {\n\t\t\tme.insertElements(numMeta, numData - numMeta);\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t */\n\tinsertElements: function(start, count) {\n\t\tfor (var i = 0; i < count; ++i) {\n\t\t\tthis.addElementAndReset(start + i);\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t */\n\tonDataPush: function() {\n\t\tvar count = arguments.length;\n\t\tthis.insertElements(this.getDataset().data.length - count, count);\n\t},\n\n\t/**\n\t * @private\n\t */\n\tonDataPop: function() {\n\t\tthis.getMeta().data.pop();\n\t},\n\n\t/**\n\t * @private\n\t */\n\tonDataShift: function() {\n\t\tthis.getMeta().data.shift();\n\t},\n\n\t/**\n\t * @private\n\t */\n\tonDataSplice: function(start, count) {\n\t\tthis.getMeta().data.splice(start, count);\n\t\tthis.insertElements(start, arguments.length - 2);\n\t},\n\n\t/**\n\t * @private\n\t */\n\tonDataUnshift: function() {\n\t\tthis.insertElements(0, arguments.length);\n\t}\n});\n\nDatasetController.extend = helpers$1.inherits;\n\nvar core_datasetController = DatasetController;\n\ncore_defaults._set('global', {\n\telements: {\n\t\tarc: {\n\t\t\tbackgroundColor: core_defaults.global.defaultColor,\n\t\t\tborderColor: '#fff',\n\t\t\tborderWidth: 2,\n\t\t\tborderAlign: 'center'\n\t\t}\n\t}\n});\n\nvar element_arc = core_element.extend({\n\tinLabelRange: function(mouseX) {\n\t\tvar vm = this._view;\n\n\t\tif (vm) {\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\n\t\t}\n\t\treturn false;\n\t},\n\n\tinRange: function(chartX, chartY) {\n\t\tvar vm = this._view;\n\n\t\tif (vm) {\n\t\t\tvar pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});\n\t\t\tvar\tangle = pointRelativePosition.angle;\n\t\t\tvar distance = pointRelativePosition.distance;\n\n\t\t\t// Sanitise angle range\n\t\t\tvar startAngle = vm.startAngle;\n\t\t\tvar endAngle = vm.endAngle;\n\t\t\twhile (endAngle < startAngle) {\n\t\t\t\tendAngle += 2.0 * Math.PI;\n\t\t\t}\n\t\t\twhile (angle > endAngle) {\n\t\t\t\tangle -= 2.0 * Math.PI;\n\t\t\t}\n\t\t\twhile (angle < startAngle) {\n\t\t\t\tangle += 2.0 * Math.PI;\n\t\t\t}\n\n\t\t\t// Check if within the range of the open/close angle\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\n\n\t\t\treturn (betweenAngles && withinRadius);\n\t\t}\n\t\treturn false;\n\t},\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n\t\treturn {\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\n\t\t};\n\t},\n\n\tgetArea: function() {\n\t\tvar vm = this._view;\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n\n\t\treturn {\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\n\t\t};\n\t},\n\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar sA = vm.startAngle;\n\t\tvar eA = vm.endAngle;\n\t\tvar pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;\n\t\tvar angleMargin;\n\n\t\tctx.save();\n\n\t\tctx.beginPath();\n\t\tctx.arc(vm.x, vm.y, Math.max(vm.outerRadius - pixelMargin, 0), sA, eA);\n\t\tctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n\t\tctx.closePath();\n\n\t\tctx.fillStyle = vm.backgroundColor;\n\t\tctx.fill();\n\n\t\tif (vm.borderWidth) {\n\t\t\tif (vm.borderAlign === 'inner') {\n\t\t\t\t// Draw an inner border by cliping the arc and drawing a double-width border\n\t\t\t\t// Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n\t\t\t\tctx.beginPath();\n\t\t\t\tangleMargin = pixelMargin / vm.outerRadius;\n\t\t\t\tctx.arc(vm.x, vm.y, vm.outerRadius, sA - angleMargin, eA + angleMargin);\n\t\t\t\tif (vm.innerRadius > pixelMargin) {\n\t\t\t\t\tangleMargin = pixelMargin / vm.innerRadius;\n\t\t\t\t\tctx.arc(vm.x, vm.y, vm.innerRadius - pixelMargin, eA + angleMargin, sA - angleMargin, true);\n\t\t\t\t} else {\n\t\t\t\t\tctx.arc(vm.x, vm.y, pixelMargin, eA + Math.PI / 2, sA - Math.PI / 2);\n\t\t\t\t}\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.clip();\n\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n\t\t\t\tctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n\t\t\t\tctx.closePath();\n\n\t\t\t\tctx.lineWidth = vm.borderWidth * 2;\n\t\t\t\tctx.lineJoin = 'round';\n\t\t\t} else {\n\t\t\t\tctx.lineWidth = vm.borderWidth;\n\t\t\t\tctx.lineJoin = 'bevel';\n\t\t\t}\n\n\t\t\tctx.strokeStyle = vm.borderColor;\n\t\t\tctx.stroke();\n\t\t}\n\n\t\tctx.restore();\n\t}\n});\n\nvar valueOrDefault$1 = helpers$1.valueOrDefault;\n\nvar defaultColor = core_defaults.global.defaultColor;\n\ncore_defaults._set('global', {\n\telements: {\n\t\tline: {\n\t\t\ttension: 0.4,\n\t\t\tbackgroundColor: defaultColor,\n\t\t\tborderWidth: 3,\n\t\t\tborderColor: defaultColor,\n\t\t\tborderCapStyle: 'butt',\n\t\t\tborderDash: [],\n\t\t\tborderDashOffset: 0.0,\n\t\t\tborderJoinStyle: 'miter',\n\t\t\tcapBezierPoints: true,\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\n\t\t}\n\t}\n});\n\nvar element_line = core_element.extend({\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar vm = me._view;\n\t\tvar ctx = me._chart.ctx;\n\t\tvar spanGaps = vm.spanGaps;\n\t\tvar points = me._children.slice(); // clone array\n\t\tvar globalDefaults = core_defaults.global;\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\n\t\tvar lastDrawnIndex = -1;\n\t\tvar index, current, previous, currentVM;\n\n\t\t// If we are looping, adding the first point again\n\t\tif (me._loop && points.length) {\n\t\t\tpoints.push(points[0]);\n\t\t}\n\n\t\tctx.save();\n\n\t\t// Stroke Line Options\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\n\n\t\t// IE 9 and 10 do not support line dash\n\t\tif (ctx.setLineDash) {\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n\t\t}\n\n\t\tctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n\t\tctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\n\n\t\t// Stroke Line\n\t\tctx.beginPath();\n\t\tlastDrawnIndex = -1;\n\n\t\tfor (index = 0; index < points.length; ++index) {\n\t\t\tcurrent = points[index];\n\t\t\tprevious = helpers$1.previousItem(points, index);\n\t\t\tcurrentVM = current._view;\n\n\t\t\t// First point moves to it's starting position no matter what\n\t\t\tif (index === 0) {\n\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tprevious = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\n\t\t\t\t\t\t// There was a gap and this is the first point after the gap\n\t\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Line to next point\n\t\t\t\t\t\thelpers$1.canvas.lineTo(ctx, previous._view, current._view);\n\t\t\t\t\t}\n\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tctx.stroke();\n\t\tctx.restore();\n\t}\n});\n\nvar valueOrDefault$2 = helpers$1.valueOrDefault;\n\nvar defaultColor$1 = core_defaults.global.defaultColor;\n\ncore_defaults._set('global', {\n\telements: {\n\t\tpoint: {\n\t\t\tradius: 3,\n\t\t\tpointStyle: 'circle',\n\t\t\tbackgroundColor: defaultColor$1,\n\t\t\tborderColor: defaultColor$1,\n\t\t\tborderWidth: 1,\n\t\t\t// Hover\n\t\t\thitRadius: 1,\n\t\t\thoverRadius: 4,\n\t\t\thoverBorderWidth: 1\n\t\t}\n\t}\n});\n\nfunction xRange(mouseX) {\n\tvar vm = this._view;\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\n}\n\nfunction yRange(mouseY) {\n\tvar vm = this._view;\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\n}\n\nvar element_point = core_element.extend({\n\tinRange: function(mouseX, mouseY) {\n\t\tvar vm = this._view;\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\n\t},\n\n\tinLabelRange: xRange,\n\tinXRange: xRange,\n\tinYRange: yRange,\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\t},\n\n\tgetArea: function() {\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y,\n\t\t\tpadding: vm.radius + vm.borderWidth\n\t\t};\n\t},\n\n\tdraw: function(chartArea) {\n\t\tvar vm = this._view;\n\t\tvar ctx = this._chart.ctx;\n\t\tvar pointStyle = vm.pointStyle;\n\t\tvar rotation = vm.rotation;\n\t\tvar radius = vm.radius;\n\t\tvar x = vm.x;\n\t\tvar y = vm.y;\n\t\tvar globalDefaults = core_defaults.global;\n\t\tvar defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\n\n\t\tif (vm.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clipping for Points.\n\t\tif (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\n\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\n\t\t\tctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\n\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\n\t\t\thelpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\n\t\t}\n\t}\n});\n\nvar defaultColor$2 = core_defaults.global.defaultColor;\n\ncore_defaults._set('global', {\n\telements: {\n\t\trectangle: {\n\t\t\tbackgroundColor: defaultColor$2,\n\t\t\tborderColor: defaultColor$2,\n\t\t\tborderSkipped: 'bottom',\n\t\t\tborderWidth: 0\n\t\t}\n\t}\n});\n\nfunction isVertical(vm) {\n\treturn vm && vm.width !== undefined;\n}\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param bar {Chart.Element.Rectangle} the bar\n * @return {Bounds} bounds of the bar\n * @private\n */\nfunction getBarBounds(vm) {\n\tvar x1, x2, y1, y2, half;\n\n\tif (isVertical(vm)) {\n\t\thalf = vm.width / 2;\n\t\tx1 = vm.x - half;\n\t\tx2 = vm.x + half;\n\t\ty1 = Math.min(vm.y, vm.base);\n\t\ty2 = Math.max(vm.y, vm.base);\n\t} else {\n\t\thalf = vm.height / 2;\n\t\tx1 = Math.min(vm.x, vm.base);\n\t\tx2 = Math.max(vm.x, vm.base);\n\t\ty1 = vm.y - half;\n\t\ty2 = vm.y + half;\n\t}\n\n\treturn {\n\t\tleft: x1,\n\t\ttop: y1,\n\t\tright: x2,\n\t\tbottom: y2\n\t};\n}\n\nfunction swap(orig, v1, v2) {\n\treturn orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction parseBorderSkipped(vm) {\n\tvar edge = vm.borderSkipped;\n\tvar res = {};\n\n\tif (!edge) {\n\t\treturn res;\n\t}\n\n\tif (vm.horizontal) {\n\t\tif (vm.base > vm.x) {\n\t\t\tedge = swap(edge, 'left', 'right');\n\t\t}\n\t} else if (vm.base < vm.y) {\n\t\tedge = swap(edge, 'bottom', 'top');\n\t}\n\n\tres[edge] = true;\n\treturn res;\n}\n\nfunction parseBorderWidth(vm, maxW, maxH) {\n\tvar value = vm.borderWidth;\n\tvar skip = parseBorderSkipped(vm);\n\tvar t, r, b, l;\n\n\tif (helpers$1.isObject(value)) {\n\t\tt = +value.top || 0;\n\t\tr = +value.right || 0;\n\t\tb = +value.bottom || 0;\n\t\tl = +value.left || 0;\n\t} else {\n\t\tt = r = b = l = +value || 0;\n\t}\n\n\treturn {\n\t\tt: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,\n\t\tr: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,\n\t\tb: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,\n\t\tl: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l\n\t};\n}\n\nfunction boundingRects(vm) {\n\tvar bounds = getBarBounds(vm);\n\tvar width = bounds.right - bounds.left;\n\tvar height = bounds.bottom - bounds.top;\n\tvar border = parseBorderWidth(vm, width / 2, height / 2);\n\n\treturn {\n\t\touter: {\n\t\t\tx: bounds.left,\n\t\t\ty: bounds.top,\n\t\t\tw: width,\n\t\t\th: height\n\t\t},\n\t\tinner: {\n\t\t\tx: bounds.left + border.l,\n\t\t\ty: bounds.top + border.t,\n\t\t\tw: width - border.l - border.r,\n\t\t\th: height - border.t - border.b\n\t\t}\n\t};\n}\n\nfunction inRange(vm, x, y) {\n\tvar skipX = x === null;\n\tvar skipY = y === null;\n\tvar bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);\n\n\treturn bounds\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\n}\n\nvar element_rectangle = core_element.extend({\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar rects = boundingRects(vm);\n\t\tvar outer = rects.outer;\n\t\tvar inner = rects.inner;\n\n\t\tctx.fillStyle = vm.backgroundColor;\n\t\tctx.fillRect(outer.x, outer.y, outer.w, outer.h);\n\n\t\tif (outer.w === inner.w && outer.h === inner.h) {\n\t\t\treturn;\n\t\t}\n\n\t\tctx.save();\n\t\tctx.beginPath();\n\t\tctx.rect(outer.x, outer.y, outer.w, outer.h);\n\t\tctx.clip();\n\t\tctx.fillStyle = vm.borderColor;\n\t\tctx.rect(inner.x, inner.y, inner.w, inner.h);\n\t\tctx.fill('evenodd');\n\t\tctx.restore();\n\t},\n\n\theight: function() {\n\t\tvar vm = this._view;\n\t\treturn vm.base - vm.y;\n\t},\n\n\tinRange: function(mouseX, mouseY) {\n\t\treturn inRange(this._view, mouseX, mouseY);\n\t},\n\n\tinLabelRange: function(mouseX, mouseY) {\n\t\tvar vm = this._view;\n\t\treturn isVertical(vm)\n\t\t\t? inRange(vm, mouseX, null)\n\t\t\t: inRange(vm, null, mouseY);\n\t},\n\n\tinXRange: function(mouseX) {\n\t\treturn inRange(this._view, mouseX, null);\n\t},\n\n\tinYRange: function(mouseY) {\n\t\treturn inRange(this._view, null, mouseY);\n\t},\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\tvar x, y;\n\t\tif (isVertical(vm)) {\n\t\t\tx = vm.x;\n\t\t\ty = (vm.y + vm.base) / 2;\n\t\t} else {\n\t\t\tx = (vm.x + vm.base) / 2;\n\t\t\ty = vm.y;\n\t\t}\n\n\t\treturn {x: x, y: y};\n\t},\n\n\tgetArea: function() {\n\t\tvar vm = this._view;\n\n\t\treturn isVertical(vm)\n\t\t\t? vm.width * Math.abs(vm.y - vm.base)\n\t\t\t: vm.height * Math.abs(vm.x - vm.base);\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\t}\n});\n\nvar elements = {};\nvar Arc = element_arc;\nvar Line = element_line;\nvar Point = element_point;\nvar Rectangle = element_rectangle;\nelements.Arc = Arc;\nelements.Line = Line;\nelements.Point = Point;\nelements.Rectangle = Rectangle;\n\nvar resolve$1 = helpers$1.options.resolve;\n\ncore_defaults._set('bar', {\n\thover: {\n\t\tmode: 'label'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'category',\n\t\t\tcategoryPercentage: 0.8,\n\t\t\tbarPercentage: 0.9,\n\t\t\toffset: true,\n\t\t\tgridLines: {\n\t\t\t\toffsetGridLines: true\n\t\t\t}\n\t\t}],\n\n\t\tyAxes: [{\n\t\t\ttype: 'linear'\n\t\t}]\n\t}\n});\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(scale, pixels) {\n\tvar min = scale.isHorizontal() ? scale.width : scale.height;\n\tvar ticks = scale.getTicks();\n\tvar prev, curr, i, ilen;\n\n\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\n\t\tmin = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\n\t}\n\n\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\tcurr = scale.getPixelForTick(i);\n\t\tmin = i > 0 ? Math.min(min, curr - prev) : min;\n\t\tprev = curr;\n\t}\n\n\treturn min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options) {\n\tvar thickness = options.barThickness;\n\tvar count = ruler.stackCount;\n\tvar curr = ruler.pixels[index];\n\tvar size, ratio;\n\n\tif (helpers$1.isNullOrUndef(thickness)) {\n\t\tsize = ruler.min * options.categoryPercentage;\n\t\tratio = options.barPercentage;\n\t} else {\n\t\t// When bar thickness is enforced, category and bar percentages are ignored.\n\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\n\t\tsize = thickness * count;\n\t\tratio = 1;\n\t}\n\n\treturn {\n\t\tchunk: size / count,\n\t\tratio: ratio,\n\t\tstart: curr - (size / 2)\n\t};\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options) {\n\tvar pixels = ruler.pixels;\n\tvar curr = pixels[index];\n\tvar prev = index > 0 ? pixels[index - 1] : null;\n\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\n\tvar percent = options.categoryPercentage;\n\tvar start, size;\n\n\tif (prev === null) {\n\t\t// first data: its size is double based on the next point or,\n\t\t// if it's also the last data, we use the scale size.\n\t\tprev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n\t}\n\n\tif (next === null) {\n\t\t// last data: its size is also double based on the previous point.\n\t\tnext = curr + curr - prev;\n\t}\n\n\tstart = curr - (curr - Math.min(prev, next)) / 2 * percent;\n\tsize = Math.abs(next - prev) / 2 * percent;\n\n\treturn {\n\t\tchunk: size / ruler.stackCount,\n\t\tratio: options.barPercentage,\n\t\tstart: start\n\t};\n}\n\nvar controller_bar = core_datasetController.extend({\n\n\tdataElementType: elements.Rectangle,\n\n\tinitialize: function() {\n\t\tvar me = this;\n\t\tvar meta;\n\n\t\tcore_datasetController.prototype.initialize.apply(me, arguments);\n\n\t\tmeta = me.getMeta();\n\t\tmeta.stack = me.getDataset().stack;\n\t\tmeta.bar = true;\n\t},\n\n\tupdate: function(reset) {\n\t\tvar me = this;\n\t\tvar rects = me.getMeta().data;\n\t\tvar i, ilen;\n\n\t\tme._ruler = me.getRuler();\n\n\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\n\t\t\tme.updateElement(rects[i], i, reset);\n\t\t}\n\t},\n\n\tupdateElement: function(rectangle, index, reset) {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar dataset = me.getDataset();\n\t\tvar options = me._resolveElementOptions(rectangle, index);\n\n\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\n\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\n\t\trectangle._datasetIndex = me.index;\n\t\trectangle._index = index;\n\t\trectangle._model = {\n\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\tborderColor: options.borderColor,\n\t\t\tborderSkipped: options.borderSkipped,\n\t\t\tborderWidth: options.borderWidth,\n\t\t\tdatasetLabel: dataset.label,\n\t\t\tlabel: me.chart.data.labels[index]\n\t\t};\n\n\t\tme._updateElementGeometry(rectangle, index, reset);\n\n\t\trectangle.pivot();\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_updateElementGeometry: function(rectangle, index, reset) {\n\t\tvar me = this;\n\t\tvar model = rectangle._model;\n\t\tvar vscale = me._getValueScale();\n\t\tvar base = vscale.getBasePixel();\n\t\tvar horizontal = vscale.isHorizontal();\n\t\tvar ruler = me._ruler || me.getRuler();\n\t\tvar vpixels = me.calculateBarValuePixels(me.index, index);\n\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler);\n\n\t\tmodel.horizontal = horizontal;\n\t\tmodel.base = reset ? base : vpixels.base;\n\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n\t\tmodel.height = horizontal ? ipixels.size : undefined;\n\t\tmodel.width = horizontal ? undefined : ipixels.size;\n\t},\n\n\t/**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n\t_getStacks: function(last) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar scale = me._getIndexScale();\n\t\tvar stacked = scale.options.stacked;\n\t\tvar ilen = last === undefined ? chart.data.datasets.length : last + 1;\n\t\tvar stacks = [];\n\t\tvar i, meta;\n\n\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\tif (meta.bar && chart.isDatasetVisible(i) &&\n\t\t\t\t(stacked === false ||\n\t\t\t\t(stacked === true && stacks.indexOf(meta.stack) === -1) ||\n\t\t\t\t(stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1)))) {\n\t\t\t\tstacks.push(meta.stack);\n\t\t\t}\n\t\t}\n\n\t\treturn stacks;\n\t},\n\n\t/**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n\tgetStackCount: function() {\n\t\treturn this._getStacks().length;\n\t},\n\n\t/**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n\t * @returns {number} The stack index\n\t * @private\n\t */\n\tgetStackIndex: function(datasetIndex, name) {\n\t\tvar stacks = this._getStacks(datasetIndex);\n\t\tvar index = (name !== undefined)\n\t\t\t? stacks.indexOf(name)\n\t\t\t: -1; // indexOf returns -1 if element is not present\n\n\t\treturn (index === -1)\n\t\t\t? stacks.length - 1\n\t\t\t: index;\n\t},\n\n\t/**\n\t * @private\n\t */\n\tgetRuler: function() {\n\t\tvar me = this;\n\t\tvar scale = me._getIndexScale();\n\t\tvar stackCount = me.getStackCount();\n\t\tvar datasetIndex = me.index;\n\t\tvar isHorizontal = scale.isHorizontal();\n\t\tvar start = isHorizontal ? scale.left : scale.top;\n\t\tvar end = start + (isHorizontal ? scale.width : scale.height);\n\t\tvar pixels = [];\n\t\tvar i, ilen, min;\n\n\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n\t\t\tpixels.push(scale.getPixelForValue(null, i, datasetIndex));\n\t\t}\n\n\t\tmin = helpers$1.isNullOrUndef(scale.options.barThickness)\n\t\t\t? computeMinSampleSize(scale, pixels)\n\t\t\t: -1;\n\n\t\treturn {\n\t\t\tmin: min,\n\t\t\tpixels: pixels,\n\t\t\tstart: start,\n\t\t\tend: end,\n\t\t\tstackCount: stackCount,\n\t\t\tscale: scale\n\t\t};\n\t},\n\n\t/**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n\tcalculateBarValuePixels: function(datasetIndex, index) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar meta = me.getMeta();\n\t\tvar scale = me._getValueScale();\n\t\tvar isHorizontal = scale.isHorizontal();\n\t\tvar datasets = chart.data.datasets;\n\t\tvar value = +scale.getRightValue(datasets[datasetIndex].data[index]);\n\t\tvar minBarLength = scale.options.minBarLength;\n\t\tvar stacked = scale.options.stacked;\n\t\tvar stack = meta.stack;\n\t\tvar start = 0;\n\t\tvar i, imeta, ivalue, base, head, size;\n\n\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\n\t\t\tfor (i = 0; i < datasetIndex; ++i) {\n\t\t\t\timeta = chart.getDatasetMeta(i);\n\n\t\t\t\tif (imeta.bar &&\n\t\t\t\t\timeta.stack === stack &&\n\t\t\t\t\timeta.controller._getValueScaleId() === scale.id &&\n\t\t\t\t\tchart.isDatasetVisible(i)) {\n\n\t\t\t\t\tivalue = +scale.getRightValue(datasets[i].data[index]);\n\t\t\t\t\tif ((value < 0 && ivalue < 0) || (value >= 0 && ivalue > 0)) {\n\t\t\t\t\t\tstart += ivalue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbase = scale.getPixelForValue(start);\n\t\thead = scale.getPixelForValue(start + value);\n\t\tsize = head - base;\n\n\t\tif (minBarLength !== undefined && Math.abs(size) < minBarLength) {\n\t\t\tsize = minBarLength;\n\t\t\tif (value >= 0 && !isHorizontal || value < 0 && isHorizontal) {\n\t\t\t\thead = base - minBarLength;\n\t\t\t} else {\n\t\t\t\thead = base + minBarLength;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsize: size,\n\t\t\tbase: base,\n\t\t\thead: head,\n\t\t\tcenter: head + size / 2\n\t\t};\n\t},\n\n\t/**\n\t * @private\n\t */\n\tcalculateBarIndexPixels: function(datasetIndex, index, ruler) {\n\t\tvar me = this;\n\t\tvar options = ruler.scale.options;\n\t\tvar range = options.barThickness === 'flex'\n\t\t\t? computeFlexCategoryTraits(index, ruler, options)\n\t\t\t: computeFitCategoryTraits(index, ruler, options);\n\n\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\n\t\tvar center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n\t\tvar size = Math.min(\n\t\t\thelpers$1.valueOrDefault(options.maxBarThickness, Infinity),\n\t\t\trange.chunk * range.ratio);\n\n\t\treturn {\n\t\t\tbase: center - size / 2,\n\t\t\thead: center + size / 2,\n\t\t\tcenter: center,\n\t\t\tsize: size\n\t\t};\n\t},\n\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar scale = me._getValueScale();\n\t\tvar rects = me.getMeta().data;\n\t\tvar dataset = me.getDataset();\n\t\tvar ilen = rects.length;\n\t\tvar i = 0;\n\n\t\thelpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\n\n\t\tfor (; i < ilen; ++i) {\n\t\t\tif (!isNaN(scale.getRightValue(dataset.data[i]))) {\n\t\t\t\trects[i].draw();\n\t\t\t}\n\t\t}\n\n\t\thelpers$1.canvas.unclipArea(chart.ctx);\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_resolveElementOptions: function(rectangle, index) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar datasets = chart.data.datasets;\n\t\tvar dataset = datasets[me.index];\n\t\tvar custom = rectangle.custom || {};\n\t\tvar options = chart.options.elements.rectangle;\n\t\tvar values = {};\n\t\tvar i, ilen, key;\n\n\t\t// Scriptable options\n\t\tvar context = {\n\t\t\tchart: chart,\n\t\t\tdataIndex: index,\n\t\t\tdataset: dataset,\n\t\t\tdatasetIndex: me.index\n\t\t};\n\n\t\tvar keys = [\n\t\t\t'backgroundColor',\n\t\t\t'borderColor',\n\t\t\t'borderSkipped',\n\t\t\t'borderWidth'\n\t\t];\n\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\t\tvalues[key] = resolve$1([\n\t\t\t\tcustom[key],\n\t\t\t\tdataset[key],\n\t\t\t\toptions[key]\n\t\t\t], context, index);\n\t\t}\n\n\t\treturn values;\n\t}\n});\n\nvar valueOrDefault$3 = helpers$1.valueOrDefault;\nvar resolve$2 = helpers$1.options.resolve;\n\ncore_defaults._set('bubble', {\n\thover: {\n\t\tmode: 'single'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\n\t\t\tposition: 'bottom',\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\n\t\t}],\n\t\tyAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tposition: 'left',\n\t\t\tid: 'y-axis-0'\n\t\t}]\n\t},\n\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(item, data) {\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n\t\t\t}\n\t\t}\n\t}\n});\n\nvar controller_bubble = core_datasetController.extend({\n\t/**\n\t * @protected\n\t */\n\tdataElementType: elements.Point,\n\n\t/**\n\t * @protected\n\t */\n\tupdate: function(reset) {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar points = meta.data;\n\n\t\t// Update Points\n\t\thelpers$1.each(points, function(point, index) {\n\t\t\tme.updateElement(point, index, reset);\n\t\t});\n\t},\n\n\t/**\n\t * @protected\n\t */\n\tupdateElement: function(point, index, reset) {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar custom = point.custom || {};\n\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\tvar options = me._resolveElementOptions(point, index);\n\t\tvar data = me.getDataset().data[index];\n\t\tvar dsIndex = me.index;\n\n\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\n\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n\n\t\tpoint._xScale = xScale;\n\t\tpoint._yScale = yScale;\n\t\tpoint._options = options;\n\t\tpoint._datasetIndex = dsIndex;\n\t\tpoint._index = index;\n\t\tpoint._model = {\n\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\tborderColor: options.borderColor,\n\t\t\tborderWidth: options.borderWidth,\n\t\t\thitRadius: options.hitRadius,\n\t\t\tpointStyle: options.pointStyle,\n\t\t\trotation: options.rotation,\n\t\t\tradius: reset ? 0 : options.radius,\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\tx: x,\n\t\t\ty: y,\n\t\t};\n\n\t\tpoint.pivot();\n\t},\n\n\t/**\n\t * @protected\n\t */\n\tsetHoverStyle: function(point) {\n\t\tvar model = point._model;\n\t\tvar options = point._options;\n\t\tvar getHoverColor = helpers$1.getHoverColor;\n\n\t\tpoint.$previousStyle = {\n\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\tborderColor: model.borderColor,\n\t\t\tborderWidth: model.borderWidth,\n\t\t\tradius: model.radius\n\t\t};\n\n\t\tmodel.backgroundColor = valueOrDefault$3(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n\t\tmodel.borderColor = valueOrDefault$3(options.hoverBorderColor, getHoverColor(options.borderColor));\n\t\tmodel.borderWidth = valueOrDefault$3(options.hoverBorderWidth, options.borderWidth);\n\t\tmodel.radius = options.radius + options.hoverRadius;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_resolveElementOptions: function(point, index) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar datasets = chart.data.datasets;\n\t\tvar dataset = datasets[me.index];\n\t\tvar custom = point.custom || {};\n\t\tvar options = chart.options.elements.point;\n\t\tvar data = dataset.data[index];\n\t\tvar values = {};\n\t\tvar i, ilen, key;\n\n\t\t// Scriptable options\n\t\tvar context = {\n\t\t\tchart: chart,\n\t\t\tdataIndex: index,\n\t\t\tdataset: dataset,\n\t\t\tdatasetIndex: me.index\n\t\t};\n\n\t\tvar keys = [\n\t\t\t'backgroundColor',\n\t\t\t'borderColor',\n\t\t\t'borderWidth',\n\t\t\t'hoverBackgroundColor',\n\t\t\t'hoverBorderColor',\n\t\t\t'hoverBorderWidth',\n\t\t\t'hoverRadius',\n\t\t\t'hitRadius',\n\t\t\t'pointStyle',\n\t\t\t'rotation'\n\t\t];\n\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\t\tvalues[key] = resolve$2([\n\t\t\t\tcustom[key],\n\t\t\t\tdataset[key],\n\t\t\t\toptions[key]\n\t\t\t], context, index);\n\t\t}\n\n\t\t// Custom radius resolution\n\t\tvalues.radius = resolve$2([\n\t\t\tcustom.radius,\n\t\t\tdata ? data.r : undefined,\n\t\t\tdataset.radius,\n\t\t\toptions.radius\n\t\t], context, index);\n\n\t\treturn values;\n\t}\n});\n\nvar resolve$3 = helpers$1.options.resolve;\nvar valueOrDefault$4 = helpers$1.valueOrDefault;\n\ncore_defaults._set('doughnut', {\n\tanimation: {\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\n\t\tanimateRotate: true,\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\n\t\tanimateScale: false\n\t},\n\thover: {\n\t\tmode: 'single'\n\t},\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('');\n\t\treturn text.join('');\n\t},\n\tlegend: {\n\t\tlabels: {\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\treturn data.labels.map(function(label, i) {\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\tvar custom = arc && arc.custom || {};\n\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\tvar fill = resolve$3([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);\n\t\t\t\t\t\tvar stroke = resolve$3([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);\n\t\t\t\t\t\tvar bw = resolve$3([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.index;\n\t\t\tvar chart = this.chart;\n\t\t\tvar i, ilen, meta;\n\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t// toggle visibility of index if exists\n\t\t\t\tif (meta.data[index]) {\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchart.update();\n\t\t}\n\t},\n\n\t// The percentage of the chart that we cut out of the middle.\n\tcutoutPercentage: 50,\n\n\t// The rotation of the chart, where the first data arc begins.\n\trotation: Math.PI * -0.5,\n\n\t// The total circumference of the chart.\n\tcircumference: Math.PI * 2.0,\n\n\t// Need to override these to give a nice default\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\n\t\t\t\tif (helpers$1.isArray(dataLabel)) {\n\t\t\t\t\t// show value on first line of multiline label\n\t\t\t\t\t// need to clone because we are changing the value\n\t\t\t\t\tdataLabel = dataLabel.slice();\n\t\t\t\t\tdataLabel[0] += value;\n\t\t\t\t} else {\n\t\t\t\t\tdataLabel += value;\n\t\t\t\t}\n\n\t\t\t\treturn dataLabel;\n\t\t\t}\n\t\t}\n\t}\n});\n\nvar controller_doughnut = core_datasetController.extend({\n\n\tdataElementType: elements.Arc,\n\n\tlinkScales: helpers$1.noop,\n\n\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n\tgetRingIndex: function(datasetIndex) {\n\t\tvar ringIndex = 0;\n\n\t\tfor (var j = 0; j < datasetIndex; ++j) {\n\t\t\tif (this.chart.isDatasetVisible(j)) {\n\t\t\t\t++ringIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn ringIndex;\n\t},\n\n\tupdate: function(reset) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar chartArea = chart.chartArea;\n\t\tvar opts = chart.options;\n\t\tvar availableWidth = chartArea.right - chartArea.left;\n\t\tvar availableHeight = chartArea.bottom - chartArea.top;\n\t\tvar minSize = Math.min(availableWidth, availableHeight);\n\t\tvar offset = {x: 0, y: 0};\n\t\tvar meta = me.getMeta();\n\t\tvar arcs = meta.data;\n\t\tvar cutoutPercentage = opts.cutoutPercentage;\n\t\tvar circumference = opts.circumference;\n\t\tvar chartWeight = me._getRingWeight(me.index);\n\t\tvar i, ilen;\n\n\t\t// If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc\n\t\tif (circumference < Math.PI * 2.0) {\n\t\t\tvar startAngle = opts.rotation % (Math.PI * 2.0);\n\t\t\tstartAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);\n\t\t\tvar endAngle = startAngle + circumference;\n\t\t\tvar start = {x: Math.cos(startAngle), y: Math.sin(startAngle)};\n\t\t\tvar end = {x: Math.cos(endAngle), y: Math.sin(endAngle)};\n\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle);\n\t\t\tvar contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle);\n\t\t\tvar contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle);\n\t\t\tvar contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle);\n\t\t\tvar cutout = cutoutPercentage / 100.0;\n\t\t\tvar min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))};\n\t\t\tvar max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))};\n\t\t\tvar size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5};\n\t\t\tminSize = Math.min(availableWidth / size.width, availableHeight / size.height);\n\t\t\toffset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5};\n\t\t}\n\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\n\t\t\tarcs[i]._options = me._resolveElementOptions(arcs[i], i);\n\t\t}\n\n\t\tchart.borderWidth = me.getMaxBorderWidth();\n\t\tchart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);\n\t\tchart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 0, 0);\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\n\t\tchart.offsetX = offset.x * chart.outerRadius;\n\t\tchart.offsetY = offset.y * chart.outerRadius;\n\n\t\tmeta.total = me.calculateTotal();\n\n\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\n\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\n\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\n\t\t\tme.updateElement(arcs[i], i, reset);\n\t\t}\n\t},\n\n\tupdateElement: function(arc, index, reset) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar chartArea = chart.chartArea;\n\t\tvar opts = chart.options;\n\t\tvar animationOpts = opts.animation;\n\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\n\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\n\t\tvar startAngle = opts.rotation; // non reset case handled later\n\t\tvar endAngle = opts.rotation; // non reset case handled later\n\t\tvar dataset = me.getDataset();\n\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI));\n\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n\t\tvar options = arc._options || {};\n\n\t\thelpers$1.extend(arc, {\n\t\t\t// Utility\n\t\t\t_datasetIndex: me.index,\n\t\t\t_index: index,\n\n\t\t\t// Desired view properties\n\t\t\t_model: {\n\t\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\t\tborderColor: options.borderColor,\n\t\t\t\tborderWidth: options.borderWidth,\n\t\t\t\tborderAlign: options.borderAlign,\n\t\t\t\tx: centerX + chart.offsetX,\n\t\t\t\ty: centerY + chart.offsetY,\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tcircumference: circumference,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n\t\t\t}\n\t\t});\n\n\t\tvar model = arc._model;\n\n\t\t// Set correct angles if not resetting\n\t\tif (!reset || !animationOpts.animateRotate) {\n\t\t\tif (index === 0) {\n\t\t\t\tmodel.startAngle = opts.rotation;\n\t\t\t} else {\n\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n\t\t\t}\n\n\t\t\tmodel.endAngle = model.startAngle + model.circumference;\n\t\t}\n\n\t\tarc.pivot();\n\t},\n\n\tcalculateTotal: function() {\n\t\tvar dataset = this.getDataset();\n\t\tvar meta = this.getMeta();\n\t\tvar total = 0;\n\t\tvar value;\n\n\t\thelpers$1.each(meta.data, function(element, index) {\n\t\t\tvalue = dataset.data[index];\n\t\t\tif (!isNaN(value) && !element.hidden) {\n\t\t\t\ttotal += Math.abs(value);\n\t\t\t}\n\t\t});\n\n\t\t/* if (total === 0) {\n\t\t\ttotal = NaN;\n\t\t}*/\n\n\t\treturn total;\n\t},\n\n\tcalculateCircumference: function(value) {\n\t\tvar total = this.getMeta().total;\n\t\tif (total > 0 && !isNaN(value)) {\n\t\t\treturn (Math.PI * 2.0) * (Math.abs(value) / total);\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// gets the max border or hover width to properly scale pie charts\n\tgetMaxBorderWidth: function(arcs) {\n\t\tvar me = this;\n\t\tvar max = 0;\n\t\tvar chart = me.chart;\n\t\tvar i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\n\n\t\tif (!arcs) {\n\t\t\t// Find the outmost visible dataset\n\t\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n\t\t\t\tif (chart.isDatasetVisible(i)) {\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t\tarcs = meta.data;\n\t\t\t\t\tif (i !== me.index) {\n\t\t\t\t\t\tcontroller = meta.controller;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!arcs) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\n\t\t\tarc = arcs[i];\n\t\t\toptions = controller ? controller._resolveElementOptions(arc, i) : arc._options;\n\t\t\tif (options.borderAlign !== 'inner') {\n\t\t\t\tborderWidth = options.borderWidth;\n\t\t\t\thoverWidth = options.hoverBorderWidth;\n\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\n\t\t\t}\n\t\t}\n\t\treturn max;\n\t},\n\n\t/**\n\t * @protected\n\t */\n\tsetHoverStyle: function(arc) {\n\t\tvar model = arc._model;\n\t\tvar options = arc._options;\n\t\tvar getHoverColor = helpers$1.getHoverColor;\n\n\t\tarc.$previousStyle = {\n\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\tborderColor: model.borderColor,\n\t\t\tborderWidth: model.borderWidth,\n\t\t};\n\n\t\tmodel.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n\t\tmodel.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\n\t\tmodel.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_resolveElementOptions: function(arc, index) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar dataset = me.getDataset();\n\t\tvar custom = arc.custom || {};\n\t\tvar options = chart.options.elements.arc;\n\t\tvar values = {};\n\t\tvar i, ilen, key;\n\n\t\t// Scriptable options\n\t\tvar context = {\n\t\t\tchart: chart,\n\t\t\tdataIndex: index,\n\t\t\tdataset: dataset,\n\t\t\tdatasetIndex: me.index\n\t\t};\n\n\t\tvar keys = [\n\t\t\t'backgroundColor',\n\t\t\t'borderColor',\n\t\t\t'borderWidth',\n\t\t\t'borderAlign',\n\t\t\t'hoverBackgroundColor',\n\t\t\t'hoverBorderColor',\n\t\t\t'hoverBorderWidth',\n\t\t];\n\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\t\tvalues[key] = resolve$3([\n\t\t\t\tcustom[key],\n\t\t\t\tdataset[key],\n\t\t\t\toptions[key]\n\t\t\t], context, index);\n\t\t}\n\n\t\treturn values;\n\t},\n\n\t/**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n\t_getRingWeightOffset: function(datasetIndex) {\n\t\tvar ringWeightOffset = 0;\n\n\t\tfor (var i = 0; i < datasetIndex; ++i) {\n\t\t\tif (this.chart.isDatasetVisible(i)) {\n\t\t\t\tringWeightOffset += this._getRingWeight(i);\n\t\t\t}\n\t\t}\n\n\t\treturn ringWeightOffset;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_getRingWeight: function(dataSetIndex) {\n\t\treturn Math.max(valueOrDefault$4(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\n\t},\n\n\t/**\n\t * Returns the sum of all visibile data set weights. This value can be 0.\n\t * @private\n\t */\n\t_getVisibleDatasetWeightTotal: function() {\n\t\treturn this._getRingWeightOffset(this.chart.data.datasets.length);\n\t}\n});\n\ncore_defaults._set('horizontalBar', {\n\thover: {\n\t\tmode: 'index',\n\t\taxis: 'y'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tposition: 'bottom'\n\t\t}],\n\n\t\tyAxes: [{\n\t\t\ttype: 'category',\n\t\t\tposition: 'left',\n\t\t\tcategoryPercentage: 0.8,\n\t\t\tbarPercentage: 0.9,\n\t\t\toffset: true,\n\t\t\tgridLines: {\n\t\t\t\toffsetGridLines: true\n\t\t\t}\n\t\t}]\n\t},\n\n\telements: {\n\t\trectangle: {\n\t\t\tborderSkipped: 'left'\n\t\t}\n\t},\n\n\ttooltips: {\n\t\tmode: 'index',\n\t\taxis: 'y'\n\t}\n});\n\nvar controller_horizontalBar = controller_bar.extend({\n\t/**\n\t * @private\n\t */\n\t_getValueScaleId: function() {\n\t\treturn this.getMeta().xAxisID;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_getIndexScaleId: function() {\n\t\treturn this.getMeta().yAxisID;\n\t}\n});\n\nvar valueOrDefault$5 = helpers$1.valueOrDefault;\nvar resolve$4 = helpers$1.options.resolve;\nvar isPointInArea = helpers$1.canvas._isPointInArea;\n\ncore_defaults._set('line', {\n\tshowLines: true,\n\tspanGaps: false,\n\n\thover: {\n\t\tmode: 'label'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'category',\n\t\t\tid: 'x-axis-0'\n\t\t}],\n\t\tyAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tid: 'y-axis-0'\n\t\t}]\n\t}\n});\n\nfunction lineEnabled(dataset, options) {\n\treturn valueOrDefault$5(dataset.showLine, options.showLines);\n}\n\nvar controller_line = core_datasetController.extend({\n\n\tdatasetElementType: elements.Line,\n\n\tdataElementType: elements.Point,\n\n\tupdate: function(reset) {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar line = meta.dataset;\n\t\tvar points = meta.data || [];\n\t\tvar scale = me.getScaleForId(meta.yAxisID);\n\t\tvar dataset = me.getDataset();\n\t\tvar showLine = lineEnabled(dataset, me.chart.options);\n\t\tvar i, ilen;\n\n\t\t// Update Line\n\t\tif (showLine) {\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t}\n\n\t\t\t// Utility\n\t\t\tline._scale = scale;\n\t\t\tline._datasetIndex = me.index;\n\t\t\t// Data\n\t\t\tline._children = points;\n\t\t\t// Model\n\t\t\tline._model = me._resolveLineOptions(line);\n\n\t\t\tline.pivot();\n\t\t}\n\n\t\t// Update Points\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\tme.updateElement(points[i], i, reset);\n\t\t}\n\n\t\tif (showLine && line._model.tension !== 0) {\n\t\t\tme.updateBezierControlPoints();\n\t\t}\n\n\t\t// Now pivot the point for animation\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\tpoints[i].pivot();\n\t\t}\n\t},\n\n\tupdateElement: function(point, index, reset) {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar custom = point.custom || {};\n\t\tvar dataset = me.getDataset();\n\t\tvar datasetIndex = me.index;\n\t\tvar value = dataset.data[index];\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\tvar lineModel = meta.dataset._model;\n\t\tvar x, y;\n\n\t\tvar options = me._resolvePointOptions(point, index);\n\n\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\n\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\n\n\t\t// Utility\n\t\tpoint._xScale = xScale;\n\t\tpoint._yScale = yScale;\n\t\tpoint._options = options;\n\t\tpoint._datasetIndex = datasetIndex;\n\t\tpoint._index = index;\n\n\t\t// Desired view properties\n\t\tpoint._model = {\n\t\t\tx: x,\n\t\t\ty: y,\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t// Appearance\n\t\t\tradius: options.radius,\n\t\t\tpointStyle: options.pointStyle,\n\t\t\trotation: options.rotation,\n\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\tborderColor: options.borderColor,\n\t\t\tborderWidth: options.borderWidth,\n\t\t\ttension: valueOrDefault$5(custom.tension, lineModel ? lineModel.tension : 0),\n\t\t\tsteppedLine: lineModel ? lineModel.steppedLine : false,\n\t\t\t// Tooltip\n\t\t\thitRadius: options.hitRadius\n\t\t};\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_resolvePointOptions: function(element, index) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar dataset = chart.data.datasets[me.index];\n\t\tvar custom = element.custom || {};\n\t\tvar options = chart.options.elements.point;\n\t\tvar values = {};\n\t\tvar i, ilen, key;\n\n\t\t// Scriptable options\n\t\tvar context = {\n\t\t\tchart: chart,\n\t\t\tdataIndex: index,\n\t\t\tdataset: dataset,\n\t\t\tdatasetIndex: me.index\n\t\t};\n\n\t\tvar ELEMENT_OPTIONS = {\n\t\t\tbackgroundColor: 'pointBackgroundColor',\n\t\t\tborderColor: 'pointBorderColor',\n\t\t\tborderWidth: 'pointBorderWidth',\n\t\t\thitRadius: 'pointHitRadius',\n\t\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\n\t\t\thoverBorderColor: 'pointHoverBorderColor',\n\t\t\thoverBorderWidth: 'pointHoverBorderWidth',\n\t\t\thoverRadius: 'pointHoverRadius',\n\t\t\tpointStyle: 'pointStyle',\n\t\t\tradius: 'pointRadius',\n\t\t\trotation: 'pointRotation'\n\t\t};\n\t\tvar keys = Object.keys(ELEMENT_OPTIONS);\n\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\t\tvalues[key] = resolve$4([\n\t\t\t\tcustom[key],\n\t\t\t\tdataset[ELEMENT_OPTIONS[key]],\n\t\t\t\tdataset[key],\n\t\t\t\toptions[key]\n\t\t\t], context, index);\n\t\t}\n\n\t\treturn values;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_resolveLineOptions: function(element) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar dataset = chart.data.datasets[me.index];\n\t\tvar custom = element.custom || {};\n\t\tvar options = chart.options;\n\t\tvar elementOptions = options.elements.line;\n\t\tvar values = {};\n\t\tvar i, ilen, key;\n\n\t\tvar keys = [\n\t\t\t'backgroundColor',\n\t\t\t'borderWidth',\n\t\t\t'borderColor',\n\t\t\t'borderCapStyle',\n\t\t\t'borderDash',\n\t\t\t'borderDashOffset',\n\t\t\t'borderJoinStyle',\n\t\t\t'fill',\n\t\t\t'cubicInterpolationMode'\n\t\t];\n\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\t\tvalues[key] = resolve$4([\n\t\t\t\tcustom[key],\n\t\t\t\tdataset[key],\n\t\t\t\telementOptions[key]\n\t\t\t]);\n\t\t}\n\n\t\t// The default behavior of lines is to break at null values, according\n\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n\t\t// This option gives lines the ability to span gaps\n\t\tvalues.spanGaps = valueOrDefault$5(dataset.spanGaps, options.spanGaps);\n\t\tvalues.tension = valueOrDefault$5(dataset.lineTension, elementOptions.tension);\n\t\tvalues.steppedLine = resolve$4([custom.steppedLine, dataset.steppedLine, elementOptions.stepped]);\n\n\t\treturn values;\n\t},\n\n\tcalculatePointY: function(value, index, datasetIndex) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar meta = me.getMeta();\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\tvar sumPos = 0;\n\t\tvar sumNeg = 0;\n\t\tvar i, ds, dsMeta;\n\n\t\tif (yScale.options.stacked) {\n\t\t\tfor (i = 0; i < datasetIndex; i++) {\n\t\t\t\tds = chart.data.datasets[i];\n\t\t\t\tdsMeta = chart.getDatasetMeta(i);\n\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n\t\t\t\t\tvar stackedRightValue = Number(yScale.getRightValue(ds.data[index]));\n\t\t\t\t\tif (stackedRightValue < 0) {\n\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsumPos += stackedRightValue || 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar rightValue = Number(yScale.getRightValue(value));\n\t\t\tif (rightValue < 0) {\n\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\n\t\t\t}\n\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\n\t\t}\n\n\t\treturn yScale.getPixelForValue(value);\n\t},\n\n\tupdateBezierControlPoints: function() {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar meta = me.getMeta();\n\t\tvar lineModel = meta.dataset._model;\n\t\tvar area = chart.chartArea;\n\t\tvar points = meta.data || [];\n\t\tvar i, ilen, model, controlPoints;\n\n\t\t// Only consider points that are drawn in case the spanGaps option is used\n\t\tif (lineModel.spanGaps) {\n\t\t\tpoints = points.filter(function(pt) {\n\t\t\t\treturn !pt._model.skip;\n\t\t\t});\n\t\t}\n\n\t\tfunction capControlPoint(pt, min, max) {\n\t\t\treturn Math.max(Math.min(pt, max), min);\n\t\t}\n\n\t\tif (lineModel.cubicInterpolationMode === 'monotone') {\n\t\t\thelpers$1.splineCurveMonotone(points);\n\t\t} else {\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\tmodel = points[i]._model;\n\t\t\t\tcontrolPoints = helpers$1.splineCurve(\n\t\t\t\t\thelpers$1.previousItem(points, i)._model,\n\t\t\t\t\tmodel,\n\t\t\t\t\thelpers$1.nextItem(points, i)._model,\n\t\t\t\t\tlineModel.tension\n\t\t\t\t);\n\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\n\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\n\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\n\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\n\t\t\t}\n\t\t}\n\n\t\tif (chart.options.elements.line.capBezierPoints) {\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\tmodel = points[i]._model;\n\t\t\t\tif (isPointInArea(model, area)) {\n\t\t\t\t\tif (i > 0 && isPointInArea(points[i - 1]._model, area)) {\n\t\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n\t\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n\t\t\t\t\t}\n\t\t\t\t\tif (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\n\t\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n\t\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar meta = me.getMeta();\n\t\tvar points = meta.data || [];\n\t\tvar area = chart.chartArea;\n\t\tvar ilen = points.length;\n\t\tvar halfBorderWidth;\n\t\tvar i = 0;\n\n\t\tif (lineEnabled(me.getDataset(), chart.options)) {\n\t\t\thalfBorderWidth = (meta.dataset._model.borderWidth || 0) / 2;\n\n\t\t\thelpers$1.canvas.clipArea(chart.ctx, {\n\t\t\t\tleft: area.left,\n\t\t\t\tright: area.right,\n\t\t\t\ttop: area.top - halfBorderWidth,\n\t\t\t\tbottom: area.bottom + halfBorderWidth\n\t\t\t});\n\n\t\t\tmeta.dataset.draw();\n\n\t\t\thelpers$1.canvas.unclipArea(chart.ctx);\n\t\t}\n\n\t\t// Draw the points\n\t\tfor (; i < ilen; ++i) {\n\t\t\tpoints[i].draw(area);\n\t\t}\n\t},\n\n\t/**\n\t * @protected\n\t */\n\tsetHoverStyle: function(point) {\n\t\tvar model = point._model;\n\t\tvar options = point._options;\n\t\tvar getHoverColor = helpers$1.getHoverColor;\n\n\t\tpoint.$previousStyle = {\n\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\tborderColor: model.borderColor,\n\t\t\tborderWidth: model.borderWidth,\n\t\t\tradius: model.radius\n\t\t};\n\n\t\tmodel.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n\t\tmodel.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\n\t\tmodel.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\n\t\tmodel.radius = valueOrDefault$5(options.hoverRadius, options.radius);\n\t},\n});\n\nvar resolve$5 = helpers$1.options.resolve;\n\ncore_defaults._set('polarArea', {\n\tscale: {\n\t\ttype: 'radialLinear',\n\t\tangleLines: {\n\t\t\tdisplay: false\n\t\t},\n\t\tgridLines: {\n\t\t\tcircular: true\n\t\t},\n\t\tpointLabels: {\n\t\t\tdisplay: false\n\t\t},\n\t\tticks: {\n\t\t\tbeginAtZero: true\n\t\t}\n\t},\n\n\t// Boolean - Whether to animate the rotation of the chart\n\tanimation: {\n\t\tanimateRotate: true,\n\t\tanimateScale: true\n\t},\n\n\tstartAngle: -0.5 * Math.PI,\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('');\n\t\treturn text.join('');\n\t},\n\tlegend: {\n\t\tlabels: {\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\treturn data.labels.map(function(label, i) {\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\tvar custom = arc.custom || {};\n\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\tvar fill = resolve$5([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);\n\t\t\t\t\t\tvar stroke = resolve$5([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);\n\t\t\t\t\t\tvar bw = resolve$5([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.index;\n\t\t\tvar chart = this.chart;\n\t\t\tvar i, ilen, meta;\n\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t}\n\n\t\t\tchart.update();\n\t\t}\n\t},\n\n\t// Need to override these to give a nice default\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(item, data) {\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\n\t\t\t}\n\t\t}\n\t}\n});\n\nvar controller_polarArea = core_datasetController.extend({\n\n\tdataElementType: elements.Arc,\n\n\tlinkScales: helpers$1.noop,\n\n\tupdate: function(reset) {\n\t\tvar me = this;\n\t\tvar dataset = me.getDataset();\n\t\tvar meta = me.getMeta();\n\t\tvar start = me.chart.options.startAngle || 0;\n\t\tvar starts = me._starts = [];\n\t\tvar angles = me._angles = [];\n\t\tvar arcs = meta.data;\n\t\tvar i, ilen, angle;\n\n\t\tme._updateRadius();\n\n\t\tmeta.count = me.countVisibleElements();\n\n\t\tfor (i = 0, ilen = dataset.data.length; i < ilen; i++) {\n\t\t\tstarts[i] = start;\n\t\t\tangle = me._computeAngle(i);\n\t\t\tangles[i] = angle;\n\t\t\tstart += angle;\n\t\t}\n\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\n\t\t\tarcs[i]._options = me._resolveElementOptions(arcs[i], i);\n\t\t\tme.updateElement(arcs[i], i, reset);\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_updateRadius: function() {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar chartArea = chart.chartArea;\n\t\tvar opts = chart.options;\n\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n\t\tchart.outerRadius = Math.max(minSize / 2, 0);\n\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\n\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\n\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\n\t},\n\n\tupdateElement: function(arc, index, reset) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar dataset = me.getDataset();\n\t\tvar opts = chart.options;\n\t\tvar animationOpts = opts.animation;\n\t\tvar scale = chart.scale;\n\t\tvar labels = chart.data.labels;\n\n\t\tvar centerX = scale.xCenter;\n\t\tvar centerY = scale.yCenter;\n\n\t\t// var negHalfPI = -0.5 * Math.PI;\n\t\tvar datasetStartAngle = opts.startAngle;\n\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\t\tvar startAngle = me._starts[index];\n\t\tvar endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\n\n\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\t\tvar options = arc._options || {};\n\n\t\thelpers$1.extend(arc, {\n\t\t\t// Utility\n\t\t\t_datasetIndex: me.index,\n\t\t\t_index: index,\n\t\t\t_scale: scale,\n\n\t\t\t// Desired view properties\n\t\t\t_model: {\n\t\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\t\tborderColor: options.borderColor,\n\t\t\t\tborderWidth: options.borderWidth,\n\t\t\t\tborderAlign: options.borderAlign,\n\t\t\t\tx: centerX,\n\t\t\t\ty: centerY,\n\t\t\t\tinnerRadius: 0,\n\t\t\t\touterRadius: reset ? resetRadius : distance,\n\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\n\t\t\t}\n\t\t});\n\n\t\tarc.pivot();\n\t},\n\n\tcountVisibleElements: function() {\n\t\tvar dataset = this.getDataset();\n\t\tvar meta = this.getMeta();\n\t\tvar count = 0;\n\n\t\thelpers$1.each(meta.data, function(element, index) {\n\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t});\n\n\t\treturn count;\n\t},\n\n\t/**\n\t * @protected\n\t */\n\tsetHoverStyle: function(arc) {\n\t\tvar model = arc._model;\n\t\tvar options = arc._options;\n\t\tvar getHoverColor = helpers$1.getHoverColor;\n\t\tvar valueOrDefault = helpers$1.valueOrDefault;\n\n\t\tarc.$previousStyle = {\n\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\tborderColor: model.borderColor,\n\t\t\tborderWidth: model.borderWidth,\n\t\t};\n\n\t\tmodel.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n\t\tmodel.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\n\t\tmodel.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_resolveElementOptions: function(arc, index) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar dataset = me.getDataset();\n\t\tvar custom = arc.custom || {};\n\t\tvar options = chart.options.elements.arc;\n\t\tvar values = {};\n\t\tvar i, ilen, key;\n\n\t\t// Scriptable options\n\t\tvar context = {\n\t\t\tchart: chart,\n\t\t\tdataIndex: index,\n\t\t\tdataset: dataset,\n\t\t\tdatasetIndex: me.index\n\t\t};\n\n\t\tvar keys = [\n\t\t\t'backgroundColor',\n\t\t\t'borderColor',\n\t\t\t'borderWidth',\n\t\t\t'borderAlign',\n\t\t\t'hoverBackgroundColor',\n\t\t\t'hoverBorderColor',\n\t\t\t'hoverBorderWidth',\n\t\t];\n\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\t\tvalues[key] = resolve$5([\n\t\t\t\tcustom[key],\n\t\t\t\tdataset[key],\n\t\t\t\toptions[key]\n\t\t\t], context, index);\n\t\t}\n\n\t\treturn values;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_computeAngle: function(index) {\n\t\tvar me = this;\n\t\tvar count = this.getMeta().count;\n\t\tvar dataset = me.getDataset();\n\t\tvar meta = me.getMeta();\n\n\t\tif (isNaN(dataset.data[index]) || meta.data[index].hidden) {\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Scriptable options\n\t\tvar context = {\n\t\t\tchart: me.chart,\n\t\t\tdataIndex: index,\n\t\t\tdataset: dataset,\n\t\t\tdatasetIndex: me.index\n\t\t};\n\n\t\treturn resolve$5([\n\t\t\tme.chart.options.elements.arc.angle,\n\t\t\t(2 * Math.PI) / count\n\t\t], context, index);\n\t}\n});\n\ncore_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\ncore_defaults._set('pie', {\n\tcutoutPercentage: 0\n});\n\n// Pie charts are Doughnut chart with different defaults\nvar controller_pie = controller_doughnut;\n\nvar valueOrDefault$6 = helpers$1.valueOrDefault;\nvar resolve$6 = helpers$1.options.resolve;\n\ncore_defaults._set('radar', {\n\tscale: {\n\t\ttype: 'radialLinear'\n\t},\n\telements: {\n\t\tline: {\n\t\t\ttension: 0 // no bezier in radar\n\t\t}\n\t}\n});\n\nvar controller_radar = core_datasetController.extend({\n\n\tdatasetElementType: elements.Line,\n\n\tdataElementType: elements.Point,\n\n\tlinkScales: helpers$1.noop,\n\n\tupdate: function(reset) {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar line = meta.dataset;\n\t\tvar points = meta.data || [];\n\t\tvar scale = me.chart.scale;\n\t\tvar dataset = me.getDataset();\n\t\tvar i, ilen;\n\n\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\tif ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n\t\t\tdataset.lineTension = dataset.tension;\n\t\t}\n\n\t\t// Utility\n\t\tline._scale = scale;\n\t\tline._datasetIndex = me.index;\n\t\t// Data\n\t\tline._children = points;\n\t\tline._loop = true;\n\t\t// Model\n\t\tline._model = me._resolveLineOptions(line);\n\n\t\tline.pivot();\n\n\t\t// Update Points\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\tme.updateElement(points[i], i, reset);\n\t\t}\n\n\t\t// Update bezier control points\n\t\tme.updateBezierControlPoints();\n\n\t\t// Now pivot the point for animation\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\tpoints[i].pivot();\n\t\t}\n\t},\n\n\tupdateElement: function(point, index, reset) {\n\t\tvar me = this;\n\t\tvar custom = point.custom || {};\n\t\tvar dataset = me.getDataset();\n\t\tvar scale = me.chart.scale;\n\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n\t\tvar options = me._resolvePointOptions(point, index);\n\t\tvar lineModel = me.getMeta().dataset._model;\n\t\tvar x = reset ? scale.xCenter : pointPosition.x;\n\t\tvar y = reset ? scale.yCenter : pointPosition.y;\n\n\t\t// Utility\n\t\tpoint._scale = scale;\n\t\tpoint._options = options;\n\t\tpoint._datasetIndex = me.index;\n\t\tpoint._index = index;\n\n\t\t// Desired view properties\n\t\tpoint._model = {\n\t\t\tx: x, // value not used in dataset scale, but we want a consistent API between scales\n\t\t\ty: y,\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t// Appearance\n\t\t\tradius: options.radius,\n\t\t\tpointStyle: options.pointStyle,\n\t\t\trotation: options.rotation,\n\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\tborderColor: options.borderColor,\n\t\t\tborderWidth: options.borderWidth,\n\t\t\ttension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\n\n\t\t\t// Tooltip\n\t\t\thitRadius: options.hitRadius\n\t\t};\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_resolvePointOptions: function(element, index) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar dataset = chart.data.datasets[me.index];\n\t\tvar custom = element.custom || {};\n\t\tvar options = chart.options.elements.point;\n\t\tvar values = {};\n\t\tvar i, ilen, key;\n\n\t\t// Scriptable options\n\t\tvar context = {\n\t\t\tchart: chart,\n\t\t\tdataIndex: index,\n\t\t\tdataset: dataset,\n\t\t\tdatasetIndex: me.index\n\t\t};\n\n\t\tvar ELEMENT_OPTIONS = {\n\t\t\tbackgroundColor: 'pointBackgroundColor',\n\t\t\tborderColor: 'pointBorderColor',\n\t\t\tborderWidth: 'pointBorderWidth',\n\t\t\thitRadius: 'pointHitRadius',\n\t\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\n\t\t\thoverBorderColor: 'pointHoverBorderColor',\n\t\t\thoverBorderWidth: 'pointHoverBorderWidth',\n\t\t\thoverRadius: 'pointHoverRadius',\n\t\t\tpointStyle: 'pointStyle',\n\t\t\tradius: 'pointRadius',\n\t\t\trotation: 'pointRotation'\n\t\t};\n\t\tvar keys = Object.keys(ELEMENT_OPTIONS);\n\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\t\tvalues[key] = resolve$6([\n\t\t\t\tcustom[key],\n\t\t\t\tdataset[ELEMENT_OPTIONS[key]],\n\t\t\t\tdataset[key],\n\t\t\t\toptions[key]\n\t\t\t], context, index);\n\t\t}\n\n\t\treturn values;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_resolveLineOptions: function(element) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar dataset = chart.data.datasets[me.index];\n\t\tvar custom = element.custom || {};\n\t\tvar options = chart.options.elements.line;\n\t\tvar values = {};\n\t\tvar i, ilen, key;\n\n\t\tvar keys = [\n\t\t\t'backgroundColor',\n\t\t\t'borderWidth',\n\t\t\t'borderColor',\n\t\t\t'borderCapStyle',\n\t\t\t'borderDash',\n\t\t\t'borderDashOffset',\n\t\t\t'borderJoinStyle',\n\t\t\t'fill'\n\t\t];\n\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\t\tvalues[key] = resolve$6([\n\t\t\t\tcustom[key],\n\t\t\t\tdataset[key],\n\t\t\t\toptions[key]\n\t\t\t]);\n\t\t}\n\n\t\tvalues.tension = valueOrDefault$6(dataset.lineTension, options.tension);\n\n\t\treturn values;\n\t},\n\n\tupdateBezierControlPoints: function() {\n\t\tvar me = this;\n\t\tvar meta = me.getMeta();\n\t\tvar area = me.chart.chartArea;\n\t\tvar points = meta.data || [];\n\t\tvar i, ilen, model, controlPoints;\n\n\t\tfunction capControlPoint(pt, min, max) {\n\t\t\treturn Math.max(Math.min(pt, max), min);\n\t\t}\n\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\tmodel = points[i]._model;\n\t\t\tcontrolPoints = helpers$1.splineCurve(\n\t\t\t\thelpers$1.previousItem(points, i, true)._model,\n\t\t\t\tmodel,\n\t\t\t\thelpers$1.nextItem(points, i, true)._model,\n\t\t\t\tmodel.tension\n\t\t\t);\n\n\t\t\t// Prevent the bezier going outside of the bounds of the graph\n\t\t\tmodel.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\n\t\t\tmodel.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\n\t\t\tmodel.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\n\t\t\tmodel.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\n\t\t}\n\t},\n\n\tsetHoverStyle: function(point) {\n\t\tvar model = point._model;\n\t\tvar options = point._options;\n\t\tvar getHoverColor = helpers$1.getHoverColor;\n\n\t\tpoint.$previousStyle = {\n\t\t\tbackgroundColor: model.backgroundColor,\n\t\t\tborderColor: model.borderColor,\n\t\t\tborderWidth: model.borderWidth,\n\t\t\tradius: model.radius\n\t\t};\n\n\t\tmodel.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n\t\tmodel.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\n\t\tmodel.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\n\t\tmodel.radius = valueOrDefault$6(options.hoverRadius, options.radius);\n\t}\n});\n\ncore_defaults._set('scatter', {\n\thover: {\n\t\tmode: 'single'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\tid: 'x-axis-1', // need an ID so datasets can reference the scale\n\t\t\ttype: 'linear', // scatter should not use a category axis\n\t\t\tposition: 'bottom'\n\t\t}],\n\t\tyAxes: [{\n\t\t\tid: 'y-axis-1',\n\t\t\ttype: 'linear',\n\t\t\tposition: 'left'\n\t\t}]\n\t},\n\n\tshowLines: false,\n\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn ''; // doesn't make sense for scatter since data are formatted as a point\n\t\t\t},\n\t\t\tlabel: function(item) {\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Scatter charts use line controllers\nvar controller_scatter = controller_line;\n\n// NOTE export a map in which the key represents the controller type, not\n// the class, and so must be CamelCase in order to be correctly retrieved\n// by the controller in core.controller.js (`controllers[meta.type]`).\n\nvar controllers = {\n\tbar: controller_bar,\n\tbubble: controller_bubble,\n\tdoughnut: controller_doughnut,\n\thorizontalBar: controller_horizontalBar,\n\tline: controller_line,\n\tpolarArea: controller_polarArea,\n\tpie: controller_pie,\n\tradar: controller_radar,\n\tscatter: controller_scatter\n};\n\n/**\n * Helper function to get relative position for an event\n * @param {Event|IEvent} event - The event to get the position for\n * @param {Chart} chart - The chart\n * @returns {object} the event position\n */\nfunction getRelativePosition(e, chart) {\n\tif (e.native) {\n\t\treturn {\n\t\t\tx: e.x,\n\t\t\ty: e.y\n\t\t};\n\t}\n\n\treturn helpers$1.getRelativePosition(e, chart);\n}\n\n/**\n * Helper function to traverse all of the visible elements in the chart\n * @param {Chart} chart - the chart\n * @param {function} handler - the callback to execute for each visible item\n */\nfunction parseVisibleItems(chart, handler) {\n\tvar datasets = chart.data.datasets;\n\tvar meta, i, j, ilen, jlen;\n\n\tfor (i = 0, ilen = datasets.length; i < ilen; ++i) {\n\t\tif (!chart.isDatasetVisible(i)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tmeta = chart.getDatasetMeta(i);\n\t\tfor (j = 0, jlen = meta.data.length; j < jlen; ++j) {\n\t\t\tvar element = meta.data[j];\n\t\t\tif (!element._view.skip) {\n\t\t\t\thandler(element);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {ChartElement[]} items - elements to filter\n * @param {object} position - the point to be nearest to\n * @return {ChartElement[]} the nearest items\n */\nfunction getIntersectItems(chart, position) {\n\tvar elements = [];\n\n\tparseVisibleItems(chart, function(element) {\n\t\tif (element.inRange(position.x, position.y)) {\n\t\t\telements.push(element);\n\t\t}\n\t});\n\n\treturn elements;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {object} position - the point to be nearest to\n * @param {boolean} intersect - if true, only consider items that intersect the position\n * @param {function} distanceMetric - function to provide the distance between points\n * @return {ChartElement[]} the nearest items\n */\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\n\tvar minDistance = Number.POSITIVE_INFINITY;\n\tvar nearestItems = [];\n\n\tparseVisibleItems(chart, function(element) {\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar center = element.getCenterPoint();\n\t\tvar distance = distanceMetric(position, center);\n\t\tif (distance < minDistance) {\n\t\t\tnearestItems = [element];\n\t\t\tminDistance = distance;\n\t\t} else if (distance === minDistance) {\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\n\t\t\tnearestItems.push(element);\n\t\t}\n\t});\n\n\treturn nearestItems;\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy\n */\nfunction getDistanceMetricForAxis(axis) {\n\tvar useX = axis.indexOf('x') !== -1;\n\tvar useY = axis.indexOf('y') !== -1;\n\n\treturn function(pt1, pt2) {\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n\t};\n}\n\nfunction indexMode(chart, e, options) {\n\tvar position = getRelativePosition(e, chart);\n\t// Default axis for index mode is 'x' to match old behaviour\n\toptions.axis = options.axis || 'x';\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\tvar elements = [];\n\n\tif (!items.length) {\n\t\treturn [];\n\t}\n\n\tchart.data.datasets.forEach(function(dataset, datasetIndex) {\n\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\tvar element = meta.data[items[0]._index];\n\n\t\t\t// don't count items that are skipped (null data)\n\t\t\tif (element && !element._view.skip) {\n\t\t\t\telements.push(element);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn elements;\n}\n\n/**\n * @interface IInteractionOptions\n */\n/**\n * If true, only consider items that intersect the point\n * @name IInterfaceOptions#boolean\n * @type Boolean\n */\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nvar core_interaction = {\n\t// Helper function for different modes\n\tmodes: {\n\t\tsingle: function(chart, e) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar elements = [];\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\telements.push(element);\n\t\t\t\t\treturn elements;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn elements.slice(0, 1);\n\t\t},\n\n\t\t/**\n\t\t * @function Chart.Interaction.modes.label\n\t\t * @deprecated since version 2.4.0\n\t\t * @todo remove at version 3\n\t\t * @private\n\t\t */\n\t\tlabel: indexMode,\n\n\t\t/**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {IInteractionOptions} options - options to use during interaction\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tindex: indexMode,\n\n\t\t/**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {IInteractionOptions} options - options to use during interaction\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tdataset: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\toptions.axis = options.axis || 'xy';\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\n\t\t\tif (items.length > 0) {\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\n\t\t\t}\n\n\t\t\treturn items;\n\t\t},\n\n\t\t/**\n\t\t * @function Chart.Interaction.modes.x-axis\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\n\t\t * @todo remove at version 3\n\t\t * @private\n\t\t */\n\t\t'x-axis': function(chart, e) {\n\t\t\treturn indexMode(chart, e, {intersect: false});\n\t\t},\n\n\t\t/**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tpoint: function(chart, e) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\treturn getIntersectItems(chart, position);\n\t\t},\n\n\t\t/**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {IInteractionOptions} options - options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tnearest: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\toptions.axis = options.axis || 'xy';\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\treturn getNearestItems(chart, position, options.intersect, distanceMetric);\n\t\t},\n\n\t\t/**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {IInteractionOptions} options - options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tx: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar items = [];\n\t\t\tvar intersectsItem = false;\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inXRange(position.x)) {\n\t\t\t\t\titems.push(element);\n\t\t\t\t}\n\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\tintersectsItem = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// If we want to trigger on an intersect and we don't have any items\n\t\t\t// that intersect the position, return nothing\n\t\t\tif (options.intersect && !intersectsItem) {\n\t\t\t\titems = [];\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\n\t\t/**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {IInteractionOptions} options - options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\ty: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar items = [];\n\t\t\tvar intersectsItem = false;\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inYRange(position.y)) {\n\t\t\t\t\titems.push(element);\n\t\t\t\t}\n\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\tintersectsItem = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// If we want to trigger on an intersect and we don't have any items\n\t\t\t// that intersect the position, return nothing\n\t\t\tif (options.intersect && !intersectsItem) {\n\t\t\t\titems = [];\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n};\n\nfunction filterByPosition(array, position) {\n\treturn helpers$1.where(array, function(v) {\n\t\treturn v.position === position;\n\t});\n}\n\nfunction sortByWeight(array, reverse) {\n\tarray.forEach(function(v, i) {\n\t\tv._tmpIndex_ = i;\n\t\treturn v;\n\t});\n\tarray.sort(function(a, b) {\n\t\tvar v0 = reverse ? b : a;\n\t\tvar v1 = reverse ? a : b;\n\t\treturn v0.weight === v1.weight ?\n\t\t\tv0._tmpIndex_ - v1._tmpIndex_ :\n\t\t\tv0.weight - v1.weight;\n\t});\n\tarray.forEach(function(v) {\n\t\tdelete v._tmpIndex_;\n\t});\n}\n\nfunction findMaxPadding(boxes) {\n\tvar top = 0;\n\tvar left = 0;\n\tvar bottom = 0;\n\tvar right = 0;\n\thelpers$1.each(boxes, function(box) {\n\t\tif (box.getPadding) {\n\t\t\tvar boxPadding = box.getPadding();\n\t\t\ttop = Math.max(top, boxPadding.top);\n\t\t\tleft = Math.max(left, boxPadding.left);\n\t\t\tbottom = Math.max(bottom, boxPadding.bottom);\n\t\t\tright = Math.max(right, boxPadding.right);\n\t\t}\n\t});\n\treturn {\n\t\ttop: top,\n\t\tleft: left,\n\t\tbottom: bottom,\n\t\tright: right\n\t};\n}\n\nfunction addSizeByPosition(boxes, size) {\n\thelpers$1.each(boxes, function(box) {\n\t\tsize[box.position] += box.isHorizontal() ? box.height : box.width;\n\t});\n}\n\ncore_defaults._set('global', {\n\tlayout: {\n\t\tpadding: {\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\tleft: 0\n\t\t}\n\t}\n});\n\n/**\n * @interface ILayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} getPadding - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nvar core_layouts = {\n\tdefaults: {},\n\n\t/**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {ILayoutItem} item - the item to add to be layed out\n\t */\n\taddBox: function(chart, item) {\n\t\tif (!chart.boxes) {\n\t\t\tchart.boxes = [];\n\t\t}\n\n\t\t// initialize item with default values\n\t\titem.fullWidth = item.fullWidth || false;\n\t\titem.position = item.position || 'top';\n\t\titem.weight = item.weight || 0;\n\n\t\tchart.boxes.push(item);\n\t},\n\n\t/**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {ILayoutItem} layoutItem - the item to remove from the layout\n\t */\n\tremoveBox: function(chart, layoutItem) {\n\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\t\tif (index !== -1) {\n\t\t\tchart.boxes.splice(index, 1);\n\t\t}\n\t},\n\n\t/**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {ILayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n\tconfigure: function(chart, item, options) {\n\t\tvar props = ['fullWidth', 'position', 'weight'];\n\t\tvar ilen = props.length;\n\t\tvar i = 0;\n\t\tvar prop;\n\n\t\tfor (; i < ilen; ++i) {\n\t\t\tprop = props[i];\n\t\t\tif (options.hasOwnProperty(prop)) {\n\t\t\t\titem[prop] = options[prop];\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n\t */\n\tupdate: function(chart, width, height) {\n\t\tif (!chart) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar layoutOptions = chart.options.layout || {};\n\t\tvar padding = helpers$1.options.toPadding(layoutOptions.padding);\n\t\tvar leftPadding = padding.left;\n\t\tvar rightPadding = padding.right;\n\t\tvar topPadding = padding.top;\n\t\tvar bottomPadding = padding.bottom;\n\n\t\tvar leftBoxes = filterByPosition(chart.boxes, 'left');\n\t\tvar rightBoxes = filterByPosition(chart.boxes, 'right');\n\t\tvar topBoxes = filterByPosition(chart.boxes, 'top');\n\t\tvar bottomBoxes = filterByPosition(chart.boxes, 'bottom');\n\t\tvar chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea');\n\n\t\t// Sort boxes by weight. A higher weight is further away from the chart area\n\t\tsortByWeight(leftBoxes, true);\n\t\tsortByWeight(rightBoxes, false);\n\t\tsortByWeight(topBoxes, true);\n\t\tsortByWeight(bottomBoxes, false);\n\n\t\tvar verticalBoxes = leftBoxes.concat(rightBoxes);\n\t\tvar horizontalBoxes = topBoxes.concat(bottomBoxes);\n\t\tvar outerBoxes = verticalBoxes.concat(horizontalBoxes);\n\n\t\t// Essentially we now have any number of boxes on each of the 4 sides.\n\t\t// Our canvas looks like the following.\n\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n\t\t// B1 is the bottom axis\n\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n\t\t// an error will be thrown.\n\t\t//\n\t\t// |----------------------------------------------------|\n\t\t// | T1 (Full Width) |\n\t\t// |----------------------------------------------------|\n\t\t// | | | T2 | |\n\t\t// | |----|-------------------------------------|----|\n\t\t// | | | C1 | | C2 | |\n\t\t// | | |----| |----| |\n\t\t// | | | | |\n\t\t// | L1 | L2 | ChartArea (C0) | R1 |\n\t\t// | | | | |\n\t\t// | | |----| |----| |\n\t\t// | | | C3 | | C4 | |\n\t\t// | |----|-------------------------------------|----|\n\t\t// | | | B1 | |\n\t\t// |----------------------------------------------------|\n\t\t// | B2 (Full Width) |\n\t\t// |----------------------------------------------------|\n\t\t//\n\t\t// What we do to find the best sizing, we do the following\n\t\t// 1. Determine the minimum size of the chart area.\n\t\t// 2. Split the remaining width equally between each vertical axis\n\t\t// 3. Split the remaining height equally between each horizontal axis\n\t\t// 4. Give each layout the maximum size it can be. The layout will return it's minimum size\n\t\t// 5. Adjust the sizes of each axis based on it's minimum reported size.\n\t\t// 6. Refit each axis\n\t\t// 7. Position each axis in the final location\n\t\t// 8. Tell the chart the final location of the chart area\n\t\t// 9. Tell any axes that overlay the chart area the positions of the chart area\n\n\t\t// Step 1\n\t\tvar chartWidth = width - leftPadding - rightPadding;\n\t\tvar chartHeight = height - topPadding - bottomPadding;\n\t\tvar chartAreaWidth = chartWidth / 2; // min 50%\n\n\t\t// Step 2\n\t\tvar verticalBoxWidth = (width - chartAreaWidth) / verticalBoxes.length;\n\n\t\t// Step 3\n\t\t// TODO re-limit horizontal axis height (this limit has affected only padding calculation since PR 1837)\n\t\t// var horizontalBoxHeight = (height - chartAreaHeight) / horizontalBoxes.length;\n\n\t\t// Step 4\n\t\tvar maxChartAreaWidth = chartWidth;\n\t\tvar maxChartAreaHeight = chartHeight;\n\t\tvar outerBoxSizes = {top: topPadding, left: leftPadding, bottom: bottomPadding, right: rightPadding};\n\t\tvar minBoxSizes = [];\n\t\tvar maxPadding;\n\n\t\tfunction getMinimumBoxSize(box) {\n\t\t\tvar minSize;\n\t\t\tvar isHorizontal = box.isHorizontal();\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tminSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2);\n\t\t\t\tmaxChartAreaHeight -= minSize.height;\n\t\t\t} else {\n\t\t\t\tminSize = box.update(verticalBoxWidth, maxChartAreaHeight);\n\t\t\t\tmaxChartAreaWidth -= minSize.width;\n\t\t\t}\n\n\t\t\tminBoxSizes.push({\n\t\t\t\thorizontal: isHorizontal,\n\t\t\t\twidth: minSize.width,\n\t\t\t\tbox: box,\n\t\t\t});\n\t\t}\n\n\t\thelpers$1.each(outerBoxes, getMinimumBoxSize);\n\n\t\t// If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)\n\t\tmaxPadding = findMaxPadding(outerBoxes);\n\n\t\t// At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could\n\t\t// be if the axes are drawn at their minimum sizes.\n\t\t// Steps 5 & 6\n\n\t\t// Function to fit a box\n\t\tfunction fitBox(box) {\n\t\t\tvar minBoxSize = helpers$1.findNextWhere(minBoxSizes, function(minBox) {\n\t\t\t\treturn minBox.box === box;\n\t\t\t});\n\n\t\t\tif (minBoxSize) {\n\t\t\t\tif (minBoxSize.horizontal) {\n\t\t\t\t\tvar scaleMargin = {\n\t\t\t\t\t\tleft: Math.max(outerBoxSizes.left, maxPadding.left),\n\t\t\t\t\t\tright: Math.max(outerBoxSizes.right, maxPadding.right),\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tbottom: 0\n\t\t\t\t\t};\n\n\t\t\t\t\t// Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends\n\t\t\t\t\t// on the margin. Sometimes they need to increase in size slightly\n\t\t\t\t\tbox.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);\n\t\t\t\t} else {\n\t\t\t\t\tbox.update(minBoxSize.width, maxChartAreaHeight);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update, and calculate the left and right margins for the horizontal boxes\n\t\thelpers$1.each(verticalBoxes, fitBox);\n\t\taddSizeByPosition(verticalBoxes, outerBoxSizes);\n\n\t\t// Set the Left and Right margins for the horizontal boxes\n\t\thelpers$1.each(horizontalBoxes, fitBox);\n\t\taddSizeByPosition(horizontalBoxes, outerBoxSizes);\n\n\t\tfunction finalFitVerticalBox(box) {\n\t\t\tvar minBoxSize = helpers$1.findNextWhere(minBoxSizes, function(minSize) {\n\t\t\t\treturn minSize.box === box;\n\t\t\t});\n\n\t\t\tvar scaleMargin = {\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttop: outerBoxSizes.top,\n\t\t\t\tbottom: outerBoxSizes.bottom\n\t\t\t};\n\n\t\t\tif (minBoxSize) {\n\t\t\t\tbox.update(minBoxSize.width, maxChartAreaHeight, scaleMargin);\n\t\t\t}\n\t\t}\n\n\t\t// Let the left layout know the final margin\n\t\thelpers$1.each(verticalBoxes, finalFitVerticalBox);\n\n\t\t// Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)\n\t\touterBoxSizes = {top: topPadding, left: leftPadding, bottom: bottomPadding, right: rightPadding};\n\t\taddSizeByPosition(outerBoxes, outerBoxSizes);\n\n\t\t// We may be adding some padding to account for rotated x axis labels\n\t\tvar leftPaddingAddition = Math.max(maxPadding.left - outerBoxSizes.left, 0);\n\t\touterBoxSizes.left += leftPaddingAddition;\n\t\touterBoxSizes.right += Math.max(maxPadding.right - outerBoxSizes.right, 0);\n\n\t\tvar topPaddingAddition = Math.max(maxPadding.top - outerBoxSizes.top, 0);\n\t\touterBoxSizes.top += topPaddingAddition;\n\t\touterBoxSizes.bottom += Math.max(maxPadding.bottom - outerBoxSizes.bottom, 0);\n\n\t\t// Figure out if our chart area changed. This would occur if the dataset layout label rotation\n\t\t// changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do\n\t\t// without calling `fit` again\n\t\tvar newMaxChartAreaHeight = height - outerBoxSizes.top - outerBoxSizes.bottom;\n\t\tvar newMaxChartAreaWidth = width - outerBoxSizes.left - outerBoxSizes.right;\n\n\t\tif (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {\n\t\t\thelpers$1.each(verticalBoxes, function(box) {\n\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t});\n\n\t\t\thelpers$1.each(horizontalBoxes, function(box) {\n\t\t\t\tif (!box.fullWidth) {\n\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmaxChartAreaHeight = newMaxChartAreaHeight;\n\t\t\tmaxChartAreaWidth = newMaxChartAreaWidth;\n\t\t}\n\n\t\t// Step 7 - Position the boxes\n\t\tvar left = leftPadding + leftPaddingAddition;\n\t\tvar top = topPadding + topPaddingAddition;\n\n\t\tfunction placeBox(box) {\n\t\t\tif (box.isHorizontal()) {\n\t\t\t\tbox.left = box.fullWidth ? leftPadding : outerBoxSizes.left;\n\t\t\t\tbox.right = box.fullWidth ? width - rightPadding : outerBoxSizes.left + maxChartAreaWidth;\n\t\t\t\tbox.top = top;\n\t\t\t\tbox.bottom = top + box.height;\n\n\t\t\t\t// Move to next point\n\t\t\t\ttop = box.bottom;\n\n\t\t\t} else {\n\n\t\t\t\tbox.left = left;\n\t\t\t\tbox.right = left + box.width;\n\t\t\t\tbox.top = outerBoxSizes.top;\n\t\t\t\tbox.bottom = outerBoxSizes.top + maxChartAreaHeight;\n\n\t\t\t\t// Move to next point\n\t\t\t\tleft = box.right;\n\t\t\t}\n\t\t}\n\n\t\thelpers$1.each(leftBoxes.concat(topBoxes), placeBox);\n\n\t\t// Account for chart width and height\n\t\tleft += maxChartAreaWidth;\n\t\ttop += maxChartAreaHeight;\n\n\t\thelpers$1.each(rightBoxes, placeBox);\n\t\thelpers$1.each(bottomBoxes, placeBox);\n\n\t\t// Step 8\n\t\tchart.chartArea = {\n\t\t\tleft: outerBoxSizes.left,\n\t\t\ttop: outerBoxSizes.top,\n\t\t\tright: outerBoxSizes.left + maxChartAreaWidth,\n\t\t\tbottom: outerBoxSizes.top + maxChartAreaHeight\n\t\t};\n\n\t\t// Step 9\n\t\thelpers$1.each(chartAreaBoxes, function(box) {\n\t\t\tbox.left = chart.chartArea.left;\n\t\t\tbox.top = chart.chartArea.top;\n\t\t\tbox.right = chart.chartArea.right;\n\t\t\tbox.bottom = chart.chartArea.bottom;\n\n\t\t\tbox.update(maxChartAreaWidth, maxChartAreaHeight);\n\t\t});\n\t}\n};\n\n/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nvar platform_basic = {\n\tacquireContext: function(item) {\n\t\tif (item && item.canvas) {\n\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\titem = item.canvas;\n\t\t}\n\n\t\treturn item && item.getContext('2d') || null;\n\t}\n};\n\nvar platform_dom = \"/*\\n * DOM element rendering detection\\n * https://davidwalsh.name/detect-node-insertion\\n */\\n@keyframes chartjs-render-animation {\\n\\tfrom { opacity: 0.99; }\\n\\tto { opacity: 1; }\\n}\\n\\n.chartjs-render-monitor {\\n\\tanimation: chartjs-render-animation 0.001s;\\n}\\n\\n/*\\n * DOM element resizing detection\\n * https://github.com/marcj/css-element-queries\\n */\\n.chartjs-size-monitor,\\n.chartjs-size-monitor-expand,\\n.chartjs-size-monitor-shrink {\\n\\tposition: absolute;\\n\\tdirection: ltr;\\n\\tleft: 0;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\toverflow: hidden;\\n\\tpointer-events: none;\\n\\tvisibility: hidden;\\n\\tz-index: -1;\\n}\\n\\n.chartjs-size-monitor-expand > div {\\n\\tposition: absolute;\\n\\twidth: 1000000px;\\n\\theight: 1000000px;\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n\\n.chartjs-size-monitor-shrink > div {\\n\\tposition: absolute;\\n\\twidth: 200%;\\n\\theight: 200%;\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n\";\n\nvar platform_dom$1 = /*#__PURE__*/Object.freeze({\ndefault: platform_dom\n});\n\nfunction getCjsExportFromNamespace (n) {\n\treturn n && n.default || n;\n}\n\nvar stylesheet = getCjsExportFromNamespace(platform_dom$1);\n\nvar EXPANDO_KEY = '$chartjs';\nvar CSS_PREFIX = 'chartjs-';\nvar CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nvar EVENT_TYPES = {\n\ttouchstart: 'mousedown',\n\ttouchmove: 'mousemove',\n\ttouchend: 'mouseup',\n\tpointerenter: 'mouseenter',\n\tpointerdown: 'mousedown',\n\tpointermove: 'mousemove',\n\tpointerup: 'mouseup',\n\tpointerleave: 'mouseout',\n\tpointerout: 'mouseout'\n};\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns {number} Size in pixels or undefined if unknown.\n */\nfunction readUsedSize(element, property) {\n\tvar value = helpers$1.getStyle(element, property);\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n\treturn matches ? Number(matches[1]) : undefined;\n}\n\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n */\nfunction initCanvas(canvas, config) {\n\tvar style = canvas.style;\n\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\n\tvar renderHeight = canvas.getAttribute('height');\n\tvar renderWidth = canvas.getAttribute('width');\n\n\t// Chart.js modifies some canvas values that we want to restore on destroy\n\tcanvas[EXPANDO_KEY] = {\n\t\tinitial: {\n\t\t\theight: renderHeight,\n\t\t\twidth: renderWidth,\n\t\t\tstyle: {\n\t\t\t\tdisplay: style.display,\n\t\t\t\theight: style.height,\n\t\t\t\twidth: style.width\n\t\t\t}\n\t\t}\n\t};\n\n\t// Force canvas to display as block to avoid extra space caused by inline\n\t// elements, which would interfere with the responsive resize process.\n\t// https://github.com/chartjs/Chart.js/issues/2538\n\tstyle.display = style.display || 'block';\n\n\tif (renderWidth === null || renderWidth === '') {\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\n\t\tif (displayWidth !== undefined) {\n\t\t\tcanvas.width = displayWidth;\n\t\t}\n\t}\n\n\tif (renderHeight === null || renderHeight === '') {\n\t\tif (canvas.style.height === '') {\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\n\t\t\t// which one can be specified by the user but also by charts as default option\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\n\t\t} else {\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\n\t\t\tif (displayWidth !== undefined) {\n\t\t\t\tcanvas.height = displayHeight;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn canvas;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nvar supportsEventListenerOptions = (function() {\n\tvar supports = false;\n\ttry {\n\t\tvar options = Object.defineProperty({}, 'passive', {\n\t\t\t// eslint-disable-next-line getter-return\n\t\t\tget: function() {\n\t\t\t\tsupports = true;\n\t\t\t}\n\t\t});\n\t\twindow.addEventListener('e', null, options);\n\t} catch (e) {\n\t\t// continue regardless of error\n\t}\n\treturn supports;\n}());\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n\tnode.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeListener(node, type, listener) {\n\tnode.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction createEvent(type, chart, x, y, nativeEvent) {\n\treturn {\n\t\ttype: type,\n\t\tchart: chart,\n\t\tnative: nativeEvent || null,\n\t\tx: x !== undefined ? x : null,\n\t\ty: y !== undefined ? y : null,\n\t};\n}\n\nfunction fromNativeEvent(event, chart) {\n\tvar type = EVENT_TYPES[event.type] || event.type;\n\tvar pos = helpers$1.getRelativePosition(event, chart);\n\treturn createEvent(type, chart, pos.x, pos.y, event);\n}\n\nfunction throttled(fn, thisArg) {\n\tvar ticking = false;\n\tvar args = [];\n\n\treturn function() {\n\t\targs = Array.prototype.slice.call(arguments);\n\t\tthisArg = thisArg || this;\n\n\t\tif (!ticking) {\n\t\t\tticking = true;\n\t\t\thelpers$1.requestAnimFrame.call(window, function() {\n\t\t\t\tticking = false;\n\t\t\t\tfn.apply(thisArg, args);\n\t\t\t});\n\t\t}\n\t};\n}\n\nfunction createDiv(cls) {\n\tvar el = document.createElement('div');\n\tel.className = cls || '';\n\treturn el;\n}\n\n// Implementation based on https://github.com/marcj/css-element-queries\nfunction createResizer(handler) {\n\tvar maxSize = 1000000;\n\n\t// NOTE(SB) Don't use innerHTML because it could be considered unsafe.\n\t// https://github.com/chartjs/Chart.js/issues/5902\n\tvar resizer = createDiv(CSS_SIZE_MONITOR);\n\tvar expand = createDiv(CSS_SIZE_MONITOR + '-expand');\n\tvar shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\n\n\texpand.appendChild(createDiv());\n\tshrink.appendChild(createDiv());\n\n\tresizer.appendChild(expand);\n\tresizer.appendChild(shrink);\n\tresizer._reset = function() {\n\t\texpand.scrollLeft = maxSize;\n\t\texpand.scrollTop = maxSize;\n\t\tshrink.scrollLeft = maxSize;\n\t\tshrink.scrollTop = maxSize;\n\t};\n\n\tvar onScroll = function() {\n\t\tresizer._reset();\n\t\thandler();\n\t};\n\n\taddListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n\taddListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n\n\treturn resizer;\n}\n\n// https://davidwalsh.name/detect-node-insertion\nfunction watchForRender(node, handler) {\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\tvar proxy = expando.renderProxy = function(e) {\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\n\t\t\thandler();\n\t\t}\n\t};\n\n\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\n\t\taddListener(node, type, proxy);\n\t});\n\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n\t// is removed then added back immediately (same animation frame?). Accessing the\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n\t// https://github.com/chartjs/Chart.js/issues/4737\n\texpando.reflow = !!node.offsetParent;\n\n\tnode.classList.add(CSS_RENDER_MONITOR);\n}\n\nfunction unwatchForRender(node) {\n\tvar expando = node[EXPANDO_KEY] || {};\n\tvar proxy = expando.renderProxy;\n\n\tif (proxy) {\n\t\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\n\t\t\tremoveListener(node, type, proxy);\n\t\t});\n\n\t\tdelete expando.renderProxy;\n\t}\n\n\tnode.classList.remove(CSS_RENDER_MONITOR);\n}\n\nfunction addResizeListener(node, listener, chart) {\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\n\t\tif (expando.resizer) {\n\t\t\tvar container = chart.options.maintainAspectRatio && node.parentNode;\n\t\t\tvar w = container ? container.clientWidth : 0;\n\t\t\tlistener(createEvent('resize', chart));\n\t\t\tif (container && container.clientWidth < w && chart.canvas) {\n\t\t\t\t// If the container size shrank during chart resize, let's assume\n\t\t\t\t// scrollbar appeared. So we resize again with the scrollbar visible -\n\t\t\t\t// effectively making chart smaller and the scrollbar hidden again.\n\t\t\t\t// Because we are inside `throttled`, and currently `ticking`, scroll\n\t\t\t\t// events are ignored during this whole 2 resize process.\n\t\t\t\t// If we assumed wrong and something else happened, we are resizing\n\t\t\t\t// twice in a frame (potential performance issue)\n\t\t\t\tlistener(createEvent('resize', chart));\n\t\t\t}\n\t\t}\n\t}));\n\n\t// The resizer needs to be attached to the node parent, so we first need to be\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\n\twatchForRender(node, function() {\n\t\tif (expando.resizer) {\n\t\t\tvar container = node.parentNode;\n\t\t\tif (container && container !== resizer.parentNode) {\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\n\t\t\t}\n\n\t\t\t// The container size might have changed, let's reset the resizer state.\n\t\t\tresizer._reset();\n\t\t}\n\t});\n}\n\nfunction removeResizeListener(node) {\n\tvar expando = node[EXPANDO_KEY] || {};\n\tvar resizer = expando.resizer;\n\n\tdelete expando.resizer;\n\tunwatchForRender(node);\n\n\tif (resizer && resizer.parentNode) {\n\t\tresizer.parentNode.removeChild(resizer);\n\t}\n}\n\nfunction injectCSS(platform, css) {\n\t// https://stackoverflow.com/q/3922139\n\tvar style = platform._style || document.createElement('style');\n\tif (!platform._style) {\n\t\tplatform._style = style;\n\t\tcss = '/* Chart.js */\\n' + css;\n\t\tstyle.setAttribute('type', 'text/css');\n\t\tdocument.getElementsByTagName('head')[0].appendChild(style);\n\t}\n\n\tstyle.appendChild(document.createTextNode(css));\n}\n\nvar platform_dom$2 = {\n\t/**\n\t * When `true`, prevents the automatic injection of the stylesheet required to\n\t * correctly detect when the chart is added to the DOM and then resized. This\n\t * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\n\t * to be manually imported to make this library compatible with any CSP.\n\t * See https://github.com/chartjs/Chart.js/issues/5208\n\t */\n\tdisableCSSInjection: false,\n\n\t/**\n\t * This property holds whether this platform is enabled for the current environment.\n\t * Currently used by platform.js to select the proper implementation.\n\t * @private\n\t */\n\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n\n\t/**\n\t * @private\n\t */\n\t_ensureLoaded: function() {\n\t\tif (this._loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._loaded = true;\n\n\t\t// https://github.com/chartjs/Chart.js/issues/5208\n\t\tif (!this.disableCSSInjection) {\n\t\t\tinjectCSS(this, stylesheet);\n\t\t}\n\t},\n\n\tacquireContext: function(item, config) {\n\t\tif (typeof item === 'string') {\n\t\t\titem = document.getElementById(item);\n\t\t} else if (item.length) {\n\t\t\t// Support for array based queries (such as jQuery)\n\t\t\titem = item[0];\n\t\t}\n\n\t\tif (item && item.canvas) {\n\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\titem = item.canvas;\n\t\t}\n\n\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\n\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\n\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\tvar context = item && item.getContext && item.getContext('2d');\n\n\t\t// Load platform resources on first chart creation, to make possible to change\n\t\t// platform options after importing the library (e.g. `disableCSSInjection`).\n\t\tthis._ensureLoaded();\n\n\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n\t\t// inside an iframe or when running in a protected environment. We could guess the\n\t\t// types from their toString() value but let's keep things flexible and assume it's\n\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\n\t\t// https://github.com/chartjs/Chart.js/issues/3887\n\t\t// https://github.com/chartjs/Chart.js/issues/4102\n\t\t// https://github.com/chartjs/Chart.js/issues/4152\n\t\tif (context && context.canvas === item) {\n\t\t\tinitCanvas(item, config);\n\t\t\treturn context;\n\t\t}\n\n\t\treturn null;\n\t},\n\n\treleaseContext: function(context) {\n\t\tvar canvas = context.canvas;\n\t\tif (!canvas[EXPANDO_KEY]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar initial = canvas[EXPANDO_KEY].initial;\n\t\t['height', 'width'].forEach(function(prop) {\n\t\t\tvar value = initial[prop];\n\t\t\tif (helpers$1.isNullOrUndef(value)) {\n\t\t\t\tcanvas.removeAttribute(prop);\n\t\t\t} else {\n\t\t\t\tcanvas.setAttribute(prop, value);\n\t\t\t}\n\t\t});\n\n\t\thelpers$1.each(initial.style || {}, function(value, key) {\n\t\t\tcanvas.style[key] = value;\n\t\t});\n\n\t\t// The canvas render size might have been changed (and thus the state stack discarded),\n\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\n\t\t// least the canvas context is reset to the default state by setting the canvas width.\n\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n\t\t// eslint-disable-next-line no-self-assign\n\t\tcanvas.width = canvas.width;\n\n\t\tdelete canvas[EXPANDO_KEY];\n\t},\n\n\taddEventListener: function(chart, type, listener) {\n\t\tvar canvas = chart.canvas;\n\t\tif (type === 'resize') {\n\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\taddResizeListener(canvas, listener, chart);\n\t\t\treturn;\n\t\t}\n\n\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n\t\tvar proxies = expando.proxies || (expando.proxies = {});\n\t\tvar proxy = proxies[chart.id + '_' + type] = function(event) {\n\t\t\tlistener(fromNativeEvent(event, chart));\n\t\t};\n\n\t\taddListener(canvas, type, proxy);\n\t},\n\n\tremoveEventListener: function(chart, type, listener) {\n\t\tvar canvas = chart.canvas;\n\t\tif (type === 'resize') {\n\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\tremoveResizeListener(canvas);\n\t\t\treturn;\n\t\t}\n\n\t\tvar expando = listener[EXPANDO_KEY] || {};\n\t\tvar proxies = expando.proxies || {};\n\t\tvar proxy = proxies[chart.id + '_' + type];\n\t\tif (!proxy) {\n\t\t\treturn;\n\t\t}\n\n\t\tremoveListener(canvas, type, proxy);\n\t}\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n * @function Chart.helpers.addEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers$1.addEvent = addListener;\n\n/**\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\n * @function Chart.helpers.removeEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers$1.removeEvent = removeListener;\n\n// @TODO Make possible to select another platform at build time.\nvar implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\n\n/**\n * @namespace Chart.platform\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\n * @since 2.4.0\n */\nvar platform = helpers$1.extend({\n\t/**\n\t * @since 2.7.0\n\t */\n\tinitialize: function() {},\n\n\t/**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {*} item - The native item from which to acquire context (platform specific)\n\t * @param {object} options - The chart options\n\t * @returns {CanvasRenderingContext2D} context2d instance\n\t */\n\tacquireContext: function() {},\n\n\t/**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n\treleaseContext: function() {},\n\n\t/**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link IEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link IEvent} interface) when an event of the specified type occurs.\n\t */\n\taddEventListener: function() {},\n\n\t/**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link IEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n\tremoveEventListener: function() {}\n\n}, implementation);\n\ncore_defaults._set('global', {\n\tplugins: {}\n});\n\n/**\n * The plugin service singleton\n * @namespace Chart.plugins\n * @since 2.1.0\n */\nvar core_plugins = {\n\t/**\n\t * Globally registered plugins.\n\t * @private\n\t */\n\t_plugins: [],\n\n\t/**\n\t * This identifier is used to invalidate the descriptors cache attached to each chart\n\t * when a global plugin is registered or unregistered. In this case, the cache ID is\n\t * incremented and descriptors are regenerated during following API calls.\n\t * @private\n\t */\n\t_cacheId: 0,\n\n\t/**\n\t * Registers the given plugin(s) if not already registered.\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\n\t */\n\tregister: function(plugins) {\n\t\tvar p = this._plugins;\n\t\t([]).concat(plugins).forEach(function(plugin) {\n\t\t\tif (p.indexOf(plugin) === -1) {\n\t\t\t\tp.push(plugin);\n\t\t\t}\n\t\t});\n\n\t\tthis._cacheId++;\n\t},\n\n\t/**\n\t * Unregisters the given plugin(s) only if registered.\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\n\t */\n\tunregister: function(plugins) {\n\t\tvar p = this._plugins;\n\t\t([]).concat(plugins).forEach(function(plugin) {\n\t\t\tvar idx = p.indexOf(plugin);\n\t\t\tif (idx !== -1) {\n\t\t\t\tp.splice(idx, 1);\n\t\t\t}\n\t\t});\n\n\t\tthis._cacheId++;\n\t},\n\n\t/**\n\t * Remove all registered plugins.\n\t * @since 2.1.5\n\t */\n\tclear: function() {\n\t\tthis._plugins = [];\n\t\tthis._cacheId++;\n\t},\n\n\t/**\n\t * Returns the number of registered plugins?\n\t * @returns {number}\n\t * @since 2.1.5\n\t */\n\tcount: function() {\n\t\treturn this._plugins.length;\n\t},\n\n\t/**\n\t * Returns all registered plugin instances.\n\t * @returns {IPlugin[]} array of plugin objects.\n\t * @since 2.1.5\n\t */\n\tgetAll: function() {\n\t\treturn this._plugins;\n\t},\n\n\t/**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Array} [args] - Extra arguments to apply to the hook call.\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n\tnotify: function(chart, hook, args) {\n\t\tvar descriptors = this.descriptors(chart);\n\t\tvar ilen = descriptors.length;\n\t\tvar i, descriptor, plugin, params, method;\n\n\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\tdescriptor = descriptors[i];\n\t\t\tplugin = descriptor.plugin;\n\t\t\tmethod = plugin[hook];\n\t\t\tif (typeof method === 'function') {\n\t\t\t\tparams = [chart].concat(args || []);\n\t\t\t\tparams.push(descriptor.options);\n\t\t\t\tif (method.apply(plugin, params) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns descriptors of enabled plugins for the given chart.\n\t * @returns {object[]} [{ plugin, options }]\n\t * @private\n\t */\n\tdescriptors: function(chart) {\n\t\tvar cache = chart.$plugins || (chart.$plugins = {});\n\t\tif (cache.id === this._cacheId) {\n\t\t\treturn cache.descriptors;\n\t\t}\n\n\t\tvar plugins = [];\n\t\tvar descriptors = [];\n\t\tvar config = (chart && chart.config) || {};\n\t\tvar options = (config.options && config.options.plugins) || {};\n\n\t\tthis._plugins.concat(config.plugins || []).forEach(function(plugin) {\n\t\t\tvar idx = plugins.indexOf(plugin);\n\t\t\tif (idx !== -1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar id = plugin.id;\n\t\t\tvar opts = options[id];\n\t\t\tif (opts === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (opts === true) {\n\t\t\t\topts = helpers$1.clone(core_defaults.global.plugins[id]);\n\t\t\t}\n\n\t\t\tplugins.push(plugin);\n\t\t\tdescriptors.push({\n\t\t\t\tplugin: plugin,\n\t\t\t\toptions: opts || {}\n\t\t\t});\n\t\t});\n\n\t\tcache.descriptors = descriptors;\n\t\tcache.id = this._cacheId;\n\t\treturn descriptors;\n\t},\n\n\t/**\n\t * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\n\t * but in some cases, this reference can be changed by the user when updating options.\n\t * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n\t * @private\n\t */\n\t_invalidate: function(chart) {\n\t\tdelete chart.$plugins;\n\t}\n};\n\nvar core_scaleService = {\n\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n\t// use the new chart options to grab the correct scale\n\tconstructors: {},\n\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\n\t// old browsers\n\n\t// Scale config defaults\n\tdefaults: {},\n\tregisterScaleType: function(type, scaleConstructor, scaleDefaults) {\n\t\tthis.constructors[type] = scaleConstructor;\n\t\tthis.defaults[type] = helpers$1.clone(scaleDefaults);\n\t},\n\tgetScaleConstructor: function(type) {\n\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n\t},\n\tgetScaleDefaults: function(type) {\n\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\n\t\treturn this.defaults.hasOwnProperty(type) ? helpers$1.merge({}, [core_defaults.scale, this.defaults[type]]) : {};\n\t},\n\tupdateScaleDefaults: function(type, additions) {\n\t\tvar me = this;\n\t\tif (me.defaults.hasOwnProperty(type)) {\n\t\t\tme.defaults[type] = helpers$1.extend(me.defaults[type], additions);\n\t\t}\n\t},\n\taddScalesToLayout: function(chart) {\n\t\t// Adds each scale to the chart.boxes array to be sized accordingly\n\t\thelpers$1.each(chart.scales, function(scale) {\n\t\t\t// Set ILayoutItem parameters for backwards compatibility\n\t\t\tscale.fullWidth = scale.options.fullWidth;\n\t\t\tscale.position = scale.options.position;\n\t\t\tscale.weight = scale.options.weight;\n\t\t\tcore_layouts.addBox(chart, scale);\n\t\t});\n\t}\n};\n\nvar valueOrDefault$7 = helpers$1.valueOrDefault;\n\ncore_defaults._set('global', {\n\ttooltips: {\n\t\tenabled: true,\n\t\tcustom: null,\n\t\tmode: 'nearest',\n\t\tposition: 'average',\n\t\tintersect: true,\n\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\n\t\ttitleFontStyle: 'bold',\n\t\ttitleSpacing: 2,\n\t\ttitleMarginBottom: 6,\n\t\ttitleFontColor: '#fff',\n\t\ttitleAlign: 'left',\n\t\tbodySpacing: 2,\n\t\tbodyFontColor: '#fff',\n\t\tbodyAlign: 'left',\n\t\tfooterFontStyle: 'bold',\n\t\tfooterSpacing: 2,\n\t\tfooterMarginTop: 6,\n\t\tfooterFontColor: '#fff',\n\t\tfooterAlign: 'left',\n\t\tyPadding: 6,\n\t\txPadding: 6,\n\t\tcaretPadding: 2,\n\t\tcaretSize: 5,\n\t\tcornerRadius: 6,\n\t\tmultiKeyBackground: '#fff',\n\t\tdisplayColors: true,\n\t\tborderColor: 'rgba(0,0,0,0)',\n\t\tborderWidth: 0,\n\t\tcallbacks: {\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeTitle: helpers$1.noop,\n\t\t\ttitle: function(tooltipItems, data) {\n\t\t\t\tvar title = '';\n\t\t\t\tvar labels = data.labels;\n\t\t\t\tvar labelCount = labels ? labels.length : 0;\n\n\t\t\t\tif (tooltipItems.length > 0) {\n\t\t\t\t\tvar item = tooltipItems[0];\n\t\t\t\t\tif (item.label) {\n\t\t\t\t\t\ttitle = item.label;\n\t\t\t\t\t} else if (item.xLabel) {\n\t\t\t\t\t\ttitle = item.xLabel;\n\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\n\t\t\t\t\t\ttitle = labels[item.index];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn title;\n\t\t\t},\n\t\t\tafterTitle: helpers$1.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeBody: helpers$1.noop,\n\n\t\t\t// Args are: (tooltipItem, data)\n\t\t\tbeforeLabel: helpers$1.noop,\n\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\tvar label = data.datasets[tooltipItem.datasetIndex].label || '';\n\n\t\t\t\tif (label) {\n\t\t\t\t\tlabel += ': ';\n\t\t\t\t}\n\t\t\t\tif (!helpers$1.isNullOrUndef(tooltipItem.value)) {\n\t\t\t\t\tlabel += tooltipItem.value;\n\t\t\t\t} else {\n\t\t\t\t\tlabel += tooltipItem.yLabel;\n\t\t\t\t}\n\t\t\t\treturn label;\n\t\t\t},\n\t\t\tlabelColor: function(tooltipItem, chart) {\n\t\t\t\tvar meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\n\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\n\t\t\t\tvar view = activeElement._view;\n\t\t\t\treturn {\n\t\t\t\t\tborderColor: view.borderColor,\n\t\t\t\t\tbackgroundColor: view.backgroundColor\n\t\t\t\t};\n\t\t\t},\n\t\t\tlabelTextColor: function() {\n\t\t\t\treturn this._options.bodyFontColor;\n\t\t\t},\n\t\t\tafterLabel: helpers$1.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tafterBody: helpers$1.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeFooter: helpers$1.noop,\n\t\t\tfooter: helpers$1.noop,\n\t\t\tafterFooter: helpers$1.noop\n\t\t}\n\t}\n});\n\nvar positioners = {\n\t/**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t * @function Chart.Tooltip.positioners.average\n\t * @param elements {ChartElement[]} the elements being displayed in the tooltip\n\t * @returns {object} tooltip position\n\t */\n\taverage: function(elements) {\n\t\tif (!elements.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar i, len;\n\t\tvar x = 0;\n\t\tvar y = 0;\n\t\tvar count = 0;\n\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\tvar el = elements[i];\n\t\t\tif (el && el.hasValue()) {\n\t\t\t\tvar pos = el.tooltipPosition();\n\t\t\t\tx += pos.x;\n\t\t\t\ty += pos.y;\n\t\t\t\t++count;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tx: x / count,\n\t\t\ty: y / count\n\t\t};\n\t},\n\n\t/**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t * @function Chart.Tooltip.positioners.nearest\n\t * @param elements {Chart.Element[]} the tooltip elements\n\t * @param eventPosition {object} the position of the event in canvas coordinates\n\t * @returns {object} the tooltip position\n\t */\n\tnearest: function(elements, eventPosition) {\n\t\tvar x = eventPosition.x;\n\t\tvar y = eventPosition.y;\n\t\tvar minDistance = Number.POSITIVE_INFINITY;\n\t\tvar i, len, nearestElement;\n\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\tvar el = elements[i];\n\t\t\tif (el && el.hasValue()) {\n\t\t\t\tvar center = el.getCenterPoint();\n\t\t\t\tvar d = helpers$1.distanceBetweenPoints(eventPosition, center);\n\n\t\t\t\tif (d < minDistance) {\n\t\t\t\t\tminDistance = d;\n\t\t\t\t\tnearestElement = el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (nearestElement) {\n\t\t\tvar tp = nearestElement.tooltipPosition();\n\t\t\tx = tp.x;\n\t\t\ty = tp.y;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n\tif (toPush) {\n\t\tif (helpers$1.isArray(toPush)) {\n\t\t\t// base = base.concat(toPush);\n\t\t\tArray.prototype.push.apply(base, toPush);\n\t\t} else {\n\t\t\tbase.push(toPush);\n\t\t}\n\t}\n\n\treturn base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {string} value - The value to split by newline.\n * @returns {string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n\tif ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n\t\treturn str.split('\\n');\n\t}\n\treturn str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param element - the chart element (point, arc, bar) to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(element) {\n\tvar xScale = element._xScale;\n\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\n\tvar index = element._index;\n\tvar datasetIndex = element._datasetIndex;\n\tvar controller = element._chart.getDatasetMeta(datasetIndex).controller;\n\tvar indexScale = controller._getIndexScale();\n\tvar valueScale = controller._getValueScale();\n\n\treturn {\n\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n\t\tlabel: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\n\t\tvalue: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\n\t\tindex: index,\n\t\tdatasetIndex: datasetIndex,\n\t\tx: element._model.x,\n\t\ty: element._model.y\n\t};\n}\n\n/**\n * Helper to get the reset model for the tooltip\n * @param tooltipOpts {object} the tooltip options\n */\nfunction getBaseModel(tooltipOpts) {\n\tvar globalDefaults = core_defaults.global;\n\n\treturn {\n\t\t// Positioning\n\t\txPadding: tooltipOpts.xPadding,\n\t\tyPadding: tooltipOpts.yPadding,\n\t\txAlign: tooltipOpts.xAlign,\n\t\tyAlign: tooltipOpts.yAlign,\n\n\t\t// Body\n\t\tbodyFontColor: tooltipOpts.bodyFontColor,\n\t\t_bodyFontFamily: valueOrDefault$7(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n\t\t_bodyFontStyle: valueOrDefault$7(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n\t\t_bodyAlign: tooltipOpts.bodyAlign,\n\t\tbodyFontSize: valueOrDefault$7(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n\t\tbodySpacing: tooltipOpts.bodySpacing,\n\n\t\t// Title\n\t\ttitleFontColor: tooltipOpts.titleFontColor,\n\t\t_titleFontFamily: valueOrDefault$7(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n\t\t_titleFontStyle: valueOrDefault$7(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n\t\ttitleFontSize: valueOrDefault$7(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n\t\t_titleAlign: tooltipOpts.titleAlign,\n\t\ttitleSpacing: tooltipOpts.titleSpacing,\n\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\n\n\t\t// Footer\n\t\tfooterFontColor: tooltipOpts.footerFontColor,\n\t\t_footerFontFamily: valueOrDefault$7(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n\t\t_footerFontStyle: valueOrDefault$7(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n\t\tfooterFontSize: valueOrDefault$7(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n\t\t_footerAlign: tooltipOpts.footerAlign,\n\t\tfooterSpacing: tooltipOpts.footerSpacing,\n\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\n\n\t\t// Appearance\n\t\tcaretSize: tooltipOpts.caretSize,\n\t\tcornerRadius: tooltipOpts.cornerRadius,\n\t\tbackgroundColor: tooltipOpts.backgroundColor,\n\t\topacity: 0,\n\t\tlegendColorBackground: tooltipOpts.multiKeyBackground,\n\t\tdisplayColors: tooltipOpts.displayColors,\n\t\tborderColor: tooltipOpts.borderColor,\n\t\tborderWidth: tooltipOpts.borderWidth\n\t};\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, model) {\n\tvar ctx = tooltip._chart.ctx;\n\n\tvar height = model.yPadding * 2; // Tooltip Padding\n\tvar width = 0;\n\n\t// Count of all lines in the body\n\tvar body = model.body;\n\tvar combinedBodyLength = body.reduce(function(count, bodyItem) {\n\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n\t}, 0);\n\tcombinedBodyLength += model.beforeBody.length + model.afterBody.length;\n\n\tvar titleLineCount = model.title.length;\n\tvar footerLineCount = model.footer.length;\n\tvar titleFontSize = model.titleFontSize;\n\tvar bodyFontSize = model.bodyFontSize;\n\tvar footerFontSize = model.footerFontSize;\n\n\theight += titleLineCount * titleFontSize; // Title Lines\n\theight += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\n\theight += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\n\theight += combinedBodyLength * bodyFontSize; // Body Lines\n\theight += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\n\theight += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\n\theight += footerLineCount * (footerFontSize); // Footer Lines\n\theight += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\n\n\t// Title width\n\tvar widthPadding = 0;\n\tvar maxLineWidth = function(line) {\n\t\twidth = Math.max(width, ctx.measureText(line).width + widthPadding);\n\t};\n\n\tctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\n\thelpers$1.each(model.title, maxLineWidth);\n\n\t// Body width\n\tctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\n\thelpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\n\n\t// Body lines may include some extra width due to the color box\n\twidthPadding = model.displayColors ? (bodyFontSize + 2) : 0;\n\thelpers$1.each(body, function(bodyItem) {\n\t\thelpers$1.each(bodyItem.before, maxLineWidth);\n\t\thelpers$1.each(bodyItem.lines, maxLineWidth);\n\t\thelpers$1.each(bodyItem.after, maxLineWidth);\n\t});\n\n\t// Reset back to 0\n\twidthPadding = 0;\n\n\t// Footer width\n\tctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\n\thelpers$1.each(model.footer, maxLineWidth);\n\n\t// Add padding\n\twidth += 2 * model.xPadding;\n\n\treturn {\n\t\twidth: width,\n\t\theight: height\n\t};\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(tooltip, size) {\n\tvar model = tooltip._model;\n\tvar chart = tooltip._chart;\n\tvar chartArea = tooltip._chart.chartArea;\n\tvar xAlign = 'center';\n\tvar yAlign = 'center';\n\n\tif (model.y < size.height) {\n\t\tyAlign = 'top';\n\t} else if (model.y > (chart.height - size.height)) {\n\t\tyAlign = 'bottom';\n\t}\n\n\tvar lf, rf; // functions to determine left, right alignment\n\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n\tvar midX = (chartArea.left + chartArea.right) / 2;\n\tvar midY = (chartArea.top + chartArea.bottom) / 2;\n\n\tif (yAlign === 'center') {\n\t\tlf = function(x) {\n\t\t\treturn x <= midX;\n\t\t};\n\t\trf = function(x) {\n\t\t\treturn x > midX;\n\t\t};\n\t} else {\n\t\tlf = function(x) {\n\t\t\treturn x <= (size.width / 2);\n\t\t};\n\t\trf = function(x) {\n\t\t\treturn x >= (chart.width - (size.width / 2));\n\t\t};\n\t}\n\n\tolf = function(x) {\n\t\treturn x + size.width + model.caretSize + model.caretPadding > chart.width;\n\t};\n\torf = function(x) {\n\t\treturn x - size.width - model.caretSize - model.caretPadding < 0;\n\t};\n\tyf = function(y) {\n\t\treturn y <= midY ? 'top' : 'bottom';\n\t};\n\n\tif (lf(model.x)) {\n\t\txAlign = 'left';\n\n\t\t// Is tooltip too wide and goes over the right side of the chart.?\n\t\tif (olf(model.x)) {\n\t\t\txAlign = 'center';\n\t\t\tyAlign = yf(model.y);\n\t\t}\n\t} else if (rf(model.x)) {\n\t\txAlign = 'right';\n\n\t\t// Is tooltip too wide and goes outside left edge of canvas?\n\t\tif (orf(model.x)) {\n\t\t\txAlign = 'center';\n\t\t\tyAlign = yf(model.y);\n\t\t}\n\t}\n\n\tvar opts = tooltip._options;\n\treturn {\n\t\txAlign: opts.xAlign ? opts.xAlign : xAlign,\n\t\tyAlign: opts.yAlign ? opts.yAlign : yAlign\n\t};\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(vm, size, alignment, chart) {\n\t// Background Position\n\tvar x = vm.x;\n\tvar y = vm.y;\n\n\tvar caretSize = vm.caretSize;\n\tvar caretPadding = vm.caretPadding;\n\tvar cornerRadius = vm.cornerRadius;\n\tvar xAlign = alignment.xAlign;\n\tvar yAlign = alignment.yAlign;\n\tvar paddingAndSize = caretSize + caretPadding;\n\tvar radiusAndPadding = cornerRadius + caretPadding;\n\n\tif (xAlign === 'right') {\n\t\tx -= size.width;\n\t} else if (xAlign === 'center') {\n\t\tx -= (size.width / 2);\n\t\tif (x + size.width > chart.width) {\n\t\t\tx = chart.width - size.width;\n\t\t}\n\t\tif (x < 0) {\n\t\t\tx = 0;\n\t\t}\n\t}\n\n\tif (yAlign === 'top') {\n\t\ty += paddingAndSize;\n\t} else if (yAlign === 'bottom') {\n\t\ty -= size.height + paddingAndSize;\n\t} else {\n\t\ty -= (size.height / 2);\n\t}\n\n\tif (yAlign === 'center') {\n\t\tif (xAlign === 'left') {\n\t\t\tx += paddingAndSize;\n\t\t} else if (xAlign === 'right') {\n\t\t\tx -= paddingAndSize;\n\t\t}\n\t} else if (xAlign === 'left') {\n\t\tx -= radiusAndPadding;\n\t} else if (xAlign === 'right') {\n\t\tx += radiusAndPadding;\n\t}\n\n\treturn {\n\t\tx: x,\n\t\ty: y\n\t};\n}\n\nfunction getAlignedX(vm, align) {\n\treturn align === 'center'\n\t\t? vm.x + vm.width / 2\n\t\t: align === 'right'\n\t\t\t? vm.x + vm.width - vm.xPadding\n\t\t\t: vm.x + vm.xPadding;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n\treturn pushOrConcat([], splitNewlines(callback));\n}\n\nvar exports$3 = core_element.extend({\n\tinitialize: function() {\n\t\tthis._model = getBaseModel(this._options);\n\t\tthis._lastActive = [];\n\t},\n\n\t// Get the title\n\t// Args are: (tooltipItem, data)\n\tgetTitle: function() {\n\t\tvar me = this;\n\t\tvar opts = me._options;\n\t\tvar callbacks = opts.callbacks;\n\n\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments);\n\t\tvar title = callbacks.title.apply(me, arguments);\n\t\tvar afterTitle = callbacks.afterTitle.apply(me, arguments);\n\n\t\tvar lines = [];\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeTitle));\n\t\tlines = pushOrConcat(lines, splitNewlines(title));\n\t\tlines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n\t\treturn lines;\n\t},\n\n\t// Args are: (tooltipItem, data)\n\tgetBeforeBody: function() {\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\n\t},\n\n\t// Args are: (tooltipItem, data)\n\tgetBody: function(tooltipItems, data) {\n\t\tvar me = this;\n\t\tvar callbacks = me._options.callbacks;\n\t\tvar bodyItems = [];\n\n\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\n\t\t\tvar bodyItem = {\n\t\t\t\tbefore: [],\n\t\t\t\tlines: [],\n\t\t\t\tafter: []\n\t\t\t};\n\t\t\tpushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\n\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n\t\t\tpushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\n\n\t\t\tbodyItems.push(bodyItem);\n\t\t});\n\n\t\treturn bodyItems;\n\t},\n\n\t// Args are: (tooltipItem, data)\n\tgetAfterBody: function() {\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\n\t},\n\n\t// Get the footer and beforeFooter and afterFooter lines\n\t// Args are: (tooltipItem, data)\n\tgetFooter: function() {\n\t\tvar me = this;\n\t\tvar callbacks = me._options.callbacks;\n\n\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n\t\tvar footer = callbacks.footer.apply(me, arguments);\n\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\n\n\t\tvar lines = [];\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeFooter));\n\t\tlines = pushOrConcat(lines, splitNewlines(footer));\n\t\tlines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n\t\treturn lines;\n\t},\n\n\tupdate: function(changed) {\n\t\tvar me = this;\n\t\tvar opts = me._options;\n\n\t\t// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\n\t\t// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\n\t\t// which breaks any animations.\n\t\tvar existingModel = me._model;\n\t\tvar model = me._model = getBaseModel(opts);\n\t\tvar active = me._active;\n\n\t\tvar data = me._data;\n\n\t\t// In the case where active.length === 0 we need to keep these at existing values for good animations\n\t\tvar alignment = {\n\t\t\txAlign: existingModel.xAlign,\n\t\t\tyAlign: existingModel.yAlign\n\t\t};\n\t\tvar backgroundPoint = {\n\t\t\tx: existingModel.x,\n\t\t\ty: existingModel.y\n\t\t};\n\t\tvar tooltipSize = {\n\t\t\twidth: existingModel.width,\n\t\t\theight: existingModel.height\n\t\t};\n\t\tvar tooltipPosition = {\n\t\t\tx: existingModel.caretX,\n\t\t\ty: existingModel.caretY\n\t\t};\n\n\t\tvar i, len;\n\n\t\tif (active.length) {\n\t\t\tmodel.opacity = 1;\n\n\t\t\tvar labelColors = [];\n\t\t\tvar labelTextColors = [];\n\t\t\ttooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\n\n\t\t\tvar tooltipItems = [];\n\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\n\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\n\t\t\t}\n\n\t\t\t// If the user provided a filter function, use it to modify the tooltip items\n\t\t\tif (opts.filter) {\n\t\t\t\ttooltipItems = tooltipItems.filter(function(a) {\n\t\t\t\t\treturn opts.filter(a, data);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\n\t\t\tif (opts.itemSort) {\n\t\t\t\ttooltipItems = tooltipItems.sort(function(a, b) {\n\t\t\t\t\treturn opts.itemSort(a, b, data);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Determine colors for boxes\n\t\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\n\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\n\t\t\t\tlabelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\n\t\t\t});\n\n\n\t\t\t// Build the Text Lines\n\t\t\tmodel.title = me.getTitle(tooltipItems, data);\n\t\t\tmodel.beforeBody = me.getBeforeBody(tooltipItems, data);\n\t\t\tmodel.body = me.getBody(tooltipItems, data);\n\t\t\tmodel.afterBody = me.getAfterBody(tooltipItems, data);\n\t\t\tmodel.footer = me.getFooter(tooltipItems, data);\n\n\t\t\t// Initial positioning and colors\n\t\t\tmodel.x = tooltipPosition.x;\n\t\t\tmodel.y = tooltipPosition.y;\n\t\t\tmodel.caretPadding = opts.caretPadding;\n\t\t\tmodel.labelColors = labelColors;\n\t\t\tmodel.labelTextColors = labelTextColors;\n\n\t\t\t// data points\n\t\t\tmodel.dataPoints = tooltipItems;\n\n\t\t\t// We need to determine alignment of the tooltip\n\t\t\ttooltipSize = getTooltipSize(this, model);\n\t\t\talignment = determineAlignment(this, tooltipSize);\n\t\t\t// Final Size and Position\n\t\t\tbackgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\n\t\t} else {\n\t\t\tmodel.opacity = 0;\n\t\t}\n\n\t\tmodel.xAlign = alignment.xAlign;\n\t\tmodel.yAlign = alignment.yAlign;\n\t\tmodel.x = backgroundPoint.x;\n\t\tmodel.y = backgroundPoint.y;\n\t\tmodel.width = tooltipSize.width;\n\t\tmodel.height = tooltipSize.height;\n\n\t\t// Point where the caret on the tooltip points to\n\t\tmodel.caretX = tooltipPosition.x;\n\t\tmodel.caretY = tooltipPosition.y;\n\n\t\tme._model = model;\n\n\t\tif (changed && opts.custom) {\n\t\t\topts.custom.call(me, model);\n\t\t}\n\n\t\treturn me;\n\t},\n\n\tdrawCaret: function(tooltipPoint, size) {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\n\n\t\tctx.lineTo(caretPosition.x1, caretPosition.y1);\n\t\tctx.lineTo(caretPosition.x2, caretPosition.y2);\n\t\tctx.lineTo(caretPosition.x3, caretPosition.y3);\n\t},\n\tgetCaretPosition: function(tooltipPoint, size, vm) {\n\t\tvar x1, x2, x3, y1, y2, y3;\n\t\tvar caretSize = vm.caretSize;\n\t\tvar cornerRadius = vm.cornerRadius;\n\t\tvar xAlign = vm.xAlign;\n\t\tvar yAlign = vm.yAlign;\n\t\tvar ptX = tooltipPoint.x;\n\t\tvar ptY = tooltipPoint.y;\n\t\tvar width = size.width;\n\t\tvar height = size.height;\n\n\t\tif (yAlign === 'center') {\n\t\t\ty2 = ptY + (height / 2);\n\n\t\t\tif (xAlign === 'left') {\n\t\t\t\tx1 = ptX;\n\t\t\t\tx2 = x1 - caretSize;\n\t\t\t\tx3 = x1;\n\n\t\t\t\ty1 = y2 + caretSize;\n\t\t\t\ty3 = y2 - caretSize;\n\t\t\t} else {\n\t\t\t\tx1 = ptX + width;\n\t\t\t\tx2 = x1 + caretSize;\n\t\t\t\tx3 = x1;\n\n\t\t\t\ty1 = y2 - caretSize;\n\t\t\t\ty3 = y2 + caretSize;\n\t\t\t}\n\t\t} else {\n\t\t\tif (xAlign === 'left') {\n\t\t\t\tx2 = ptX + cornerRadius + (caretSize);\n\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\tx3 = x2 + caretSize;\n\t\t\t} else if (xAlign === 'right') {\n\t\t\t\tx2 = ptX + width - cornerRadius - caretSize;\n\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\tx3 = x2 + caretSize;\n\t\t\t} else {\n\t\t\t\tx2 = vm.caretX;\n\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\tx3 = x2 + caretSize;\n\t\t\t}\n\t\t\tif (yAlign === 'top') {\n\t\t\t\ty1 = ptY;\n\t\t\t\ty2 = y1 - caretSize;\n\t\t\t\ty3 = y1;\n\t\t\t} else {\n\t\t\t\ty1 = ptY + height;\n\t\t\t\ty2 = y1 + caretSize;\n\t\t\t\ty3 = y1;\n\t\t\t\t// invert drawing order\n\t\t\t\tvar tmp = x3;\n\t\t\t\tx3 = x1;\n\t\t\t\tx1 = tmp;\n\t\t\t}\n\t\t}\n\t\treturn {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};\n\t},\n\n\tdrawTitle: function(pt, vm, ctx) {\n\t\tvar title = vm.title;\n\n\t\tif (title.length) {\n\t\t\tpt.x = getAlignedX(vm, vm._titleAlign);\n\n\t\t\tctx.textAlign = vm._titleAlign;\n\t\t\tctx.textBaseline = 'top';\n\n\t\t\tvar titleFontSize = vm.titleFontSize;\n\t\t\tvar titleSpacing = vm.titleSpacing;\n\n\t\t\tctx.fillStyle = vm.titleFontColor;\n\t\t\tctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n\n\t\t\tvar i, len;\n\t\t\tfor (i = 0, len = title.length; i < len; ++i) {\n\t\t\t\tctx.fillText(title[i], pt.x, pt.y);\n\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n\t\t\t\tif (i + 1 === title.length) {\n\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tdrawBody: function(pt, vm, ctx) {\n\t\tvar bodyFontSize = vm.bodyFontSize;\n\t\tvar bodySpacing = vm.bodySpacing;\n\t\tvar bodyAlign = vm._bodyAlign;\n\t\tvar body = vm.body;\n\t\tvar drawColorBoxes = vm.displayColors;\n\t\tvar labelColors = vm.labelColors;\n\t\tvar xLinePadding = 0;\n\t\tvar colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\n\t\tvar textColor;\n\n\t\tctx.textAlign = bodyAlign;\n\t\tctx.textBaseline = 'top';\n\t\tctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n\n\t\tpt.x = getAlignedX(vm, bodyAlign);\n\n\t\t// Before Body\n\t\tvar fillLineOfText = function(line) {\n\t\t\tctx.fillText(line, pt.x + xLinePadding, pt.y);\n\t\t\tpt.y += bodyFontSize + bodySpacing;\n\t\t};\n\n\t\t// Before body lines\n\t\tctx.fillStyle = vm.bodyFontColor;\n\t\thelpers$1.each(vm.beforeBody, fillLineOfText);\n\n\t\txLinePadding = drawColorBoxes && bodyAlign !== 'right'\n\t\t\t? bodyAlign === 'center' ? (bodyFontSize / 2 + 1) : (bodyFontSize + 2)\n\t\t\t: 0;\n\n\t\t// Draw body lines now\n\t\thelpers$1.each(body, function(bodyItem, i) {\n\t\t\ttextColor = vm.labelTextColors[i];\n\t\t\tctx.fillStyle = textColor;\n\t\t\thelpers$1.each(bodyItem.before, fillLineOfText);\n\n\t\t\thelpers$1.each(bodyItem.lines, function(line) {\n\t\t\t\t// Draw Legend-like boxes if needed\n\t\t\t\tif (drawColorBoxes) {\n\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\n\t\t\t\t\tctx.fillStyle = vm.legendColorBackground;\n\t\t\t\t\tctx.fillRect(colorX, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t// Border\n\t\t\t\t\tctx.lineWidth = 1;\n\t\t\t\t\tctx.strokeStyle = labelColors[i].borderColor;\n\t\t\t\t\tctx.strokeRect(colorX, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t// Inner square\n\t\t\t\t\tctx.fillStyle = labelColors[i].backgroundColor;\n\t\t\t\t\tctx.fillRect(colorX + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n\t\t\t\t\tctx.fillStyle = textColor;\n\t\t\t\t}\n\n\t\t\t\tfillLineOfText(line);\n\t\t\t});\n\n\t\t\thelpers$1.each(bodyItem.after, fillLineOfText);\n\t\t});\n\n\t\t// Reset back to 0 for after body\n\t\txLinePadding = 0;\n\n\t\t// After body lines\n\t\thelpers$1.each(vm.afterBody, fillLineOfText);\n\t\tpt.y -= bodySpacing; // Remove last body spacing\n\t},\n\n\tdrawFooter: function(pt, vm, ctx) {\n\t\tvar footer = vm.footer;\n\n\t\tif (footer.length) {\n\t\t\tpt.x = getAlignedX(vm, vm._footerAlign);\n\t\t\tpt.y += vm.footerMarginTop;\n\n\t\t\tctx.textAlign = vm._footerAlign;\n\t\t\tctx.textBaseline = 'top';\n\n\t\t\tctx.fillStyle = vm.footerFontColor;\n\t\t\tctx.font = helpers$1.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n\n\t\t\thelpers$1.each(footer, function(line) {\n\t\t\t\tctx.fillText(line, pt.x, pt.y);\n\t\t\t\tpt.y += vm.footerFontSize + vm.footerSpacing;\n\t\t\t});\n\t\t}\n\t},\n\n\tdrawBackground: function(pt, vm, ctx, tooltipSize) {\n\t\tctx.fillStyle = vm.backgroundColor;\n\t\tctx.strokeStyle = vm.borderColor;\n\t\tctx.lineWidth = vm.borderWidth;\n\t\tvar xAlign = vm.xAlign;\n\t\tvar yAlign = vm.yAlign;\n\t\tvar x = pt.x;\n\t\tvar y = pt.y;\n\t\tvar width = tooltipSize.width;\n\t\tvar height = tooltipSize.height;\n\t\tvar radius = vm.cornerRadius;\n\n\t\tctx.beginPath();\n\t\tctx.moveTo(x + radius, y);\n\t\tif (yAlign === 'top') {\n\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t}\n\t\tctx.lineTo(x + width - radius, y);\n\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\t\tif (yAlign === 'center' && xAlign === 'right') {\n\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t}\n\t\tctx.lineTo(x + width, y + height - radius);\n\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\t\tif (yAlign === 'bottom') {\n\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t}\n\t\tctx.lineTo(x + radius, y + height);\n\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\t\tif (yAlign === 'center' && xAlign === 'left') {\n\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t}\n\t\tctx.lineTo(x, y + radius);\n\t\tctx.quadraticCurveTo(x, y, x + radius, y);\n\t\tctx.closePath();\n\n\t\tctx.fill();\n\n\t\tif (vm.borderWidth > 0) {\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\n\t\tif (vm.opacity === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tooltipSize = {\n\t\t\twidth: vm.width,\n\t\t\theight: vm.height\n\t\t};\n\t\tvar pt = {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\n\t\t// IE11/Edge does not like very small opacities, so snap to 0\n\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\n\n\t\t// Truthy/falsey value for empty tooltip\n\t\tvar hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\n\n\t\tif (this._options.enabled && hasTooltipContent) {\n\t\t\tctx.save();\n\t\t\tctx.globalAlpha = opacity;\n\n\t\t\t// Draw Background\n\t\t\tthis.drawBackground(pt, vm, ctx, tooltipSize);\n\n\t\t\t// Draw Title, Body, and Footer\n\t\t\tpt.y += vm.yPadding;\n\n\t\t\t// Titles\n\t\t\tthis.drawTitle(pt, vm, ctx);\n\n\t\t\t// Body\n\t\t\tthis.drawBody(pt, vm, ctx);\n\n\t\t\t// Footer\n\t\t\tthis.drawFooter(pt, vm, ctx);\n\n\t\t\tctx.restore();\n\t\t}\n\t},\n\n\t/**\n\t * Handle an event\n\t * @private\n\t * @param {IEvent} event - The event to handle\n\t * @returns {boolean} true if the tooltip changed\n\t */\n\thandleEvent: function(e) {\n\t\tvar me = this;\n\t\tvar options = me._options;\n\t\tvar changed = false;\n\n\t\tme._lastActive = me._lastActive || [];\n\n\t\t// Find Active Elements for tooltips\n\t\tif (e.type === 'mouseout') {\n\t\t\tme._active = [];\n\t\t} else {\n\t\t\tme._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\n\t\t}\n\n\t\t// Remember Last Actives\n\t\tchanged = !helpers$1.arrayEquals(me._active, me._lastActive);\n\n\t\t// Only handle target event on tooltip change\n\t\tif (changed) {\n\t\t\tme._lastActive = me._active;\n\n\t\t\tif (options.enabled || options.custom) {\n\t\t\t\tme._eventPosition = {\n\t\t\t\t\tx: e.x,\n\t\t\t\t\ty: e.y\n\t\t\t\t};\n\n\t\t\t\tme.update(true);\n\t\t\t\tme.pivot();\n\t\t\t}\n\t\t}\n\n\t\treturn changed;\n\t}\n});\n\n/**\n * @namespace Chart.Tooltip.positioners\n */\nvar positioners_1 = positioners;\n\nvar core_tooltip = exports$3;\ncore_tooltip.positioners = positioners_1;\n\nvar valueOrDefault$8 = helpers$1.valueOrDefault;\n\ncore_defaults._set('global', {\n\telements: {},\n\tevents: [\n\t\t'mousemove',\n\t\t'mouseout',\n\t\t'click',\n\t\t'touchstart',\n\t\t'touchmove'\n\t],\n\thover: {\n\t\tonHover: null,\n\t\tmode: 'nearest',\n\t\tintersect: true,\n\t\tanimationDuration: 400\n\t},\n\tonClick: null,\n\tmaintainAspectRatio: true,\n\tresponsive: true,\n\tresponsiveAnimationDuration: 0\n});\n\n/**\n * Recursively merge the given config objects representing the `scales` option\n * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\n * returns a deep copy of the result, thus doesn't alter inputs.\n */\nfunction mergeScaleConfig(/* config objects ... */) {\n\treturn helpers$1.merge({}, [].slice.call(arguments), {\n\t\tmerger: function(key, target, source, options) {\n\t\t\tif (key === 'xAxes' || key === 'yAxes') {\n\t\t\t\tvar slen = source[key].length;\n\t\t\t\tvar i, type, scale;\n\n\t\t\t\tif (!target[key]) {\n\t\t\t\t\ttarget[key] = [];\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; i < slen; ++i) {\n\t\t\t\t\tscale = source[key][i];\n\t\t\t\t\ttype = valueOrDefault$8(scale.type, key === 'xAxes' ? 'category' : 'linear');\n\n\t\t\t\t\tif (i >= target[key].length) {\n\t\t\t\t\t\ttarget[key].push({});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {\n\t\t\t\t\t\t// new/untyped scale or type changed: let's apply the new defaults\n\t\t\t\t\t\t// then merge source scale to correctly overwrite the defaults.\n\t\t\t\t\t\thelpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// scales type are the same\n\t\t\t\t\t\thelpers$1.merge(target[key][i], scale);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thelpers$1._merger(key, target, source, options);\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * Recursively merge the given config objects as the root options by handling\n * default scale options for the `scales` and `scale` properties, then returns\n * a deep copy of the result, thus doesn't alter inputs.\n */\nfunction mergeConfig(/* config objects ... */) {\n\treturn helpers$1.merge({}, [].slice.call(arguments), {\n\t\tmerger: function(key, target, source, options) {\n\t\t\tvar tval = target[key] || {};\n\t\t\tvar sval = source[key];\n\n\t\t\tif (key === 'scales') {\n\t\t\t\t// scale config merging is complex. Add our own function here for that\n\t\t\t\ttarget[key] = mergeScaleConfig(tval, sval);\n\t\t\t} else if (key === 'scale') {\n\t\t\t\t// used in polar area & radar charts since there is only one scale\n\t\t\t\ttarget[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\n\t\t\t} else {\n\t\t\t\thelpers$1._merger(key, target, source, options);\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction initConfig(config) {\n\tconfig = config || {};\n\n\t// Do NOT use mergeConfig for the data object because this method merges arrays\n\t// and so would change references to labels and datasets, preventing data updates.\n\tvar data = config.data = config.data || {};\n\tdata.datasets = data.datasets || [];\n\tdata.labels = data.labels || [];\n\n\tconfig.options = mergeConfig(\n\t\tcore_defaults.global,\n\t\tcore_defaults[config.type],\n\t\tconfig.options || {});\n\n\treturn config;\n}\n\nfunction updateConfig(chart) {\n\tvar newOptions = chart.options;\n\n\thelpers$1.each(chart.scales, function(scale) {\n\t\tcore_layouts.removeBox(chart, scale);\n\t});\n\n\tnewOptions = mergeConfig(\n\t\tcore_defaults.global,\n\t\tcore_defaults[chart.config.type],\n\t\tnewOptions);\n\n\tchart.options = chart.config.options = newOptions;\n\tchart.ensureScalesHaveIDs();\n\tchart.buildOrUpdateScales();\n\n\t// Tooltip\n\tchart.tooltip._options = newOptions.tooltips;\n\tchart.tooltip.initialize();\n}\n\nfunction positionIsHorizontal(position) {\n\treturn position === 'top' || position === 'bottom';\n}\n\nvar Chart = function(item, config) {\n\tthis.construct(item, config);\n\treturn this;\n};\n\nhelpers$1.extend(Chart.prototype, /** @lends Chart */ {\n\t/**\n\t * @private\n\t */\n\tconstruct: function(item, config) {\n\t\tvar me = this;\n\n\t\tconfig = initConfig(config);\n\n\t\tvar context = platform.acquireContext(item, config);\n\t\tvar canvas = context && context.canvas;\n\t\tvar height = canvas && canvas.height;\n\t\tvar width = canvas && canvas.width;\n\n\t\tme.id = helpers$1.uid();\n\t\tme.ctx = context;\n\t\tme.canvas = canvas;\n\t\tme.config = config;\n\t\tme.width = width;\n\t\tme.height = height;\n\t\tme.aspectRatio = height ? width / height : null;\n\t\tme.options = config.options;\n\t\tme._bufferedRender = false;\n\n\t\t/**\n\t\t * Provided for backward compatibility, Chart and Chart.Controller have been merged,\n\t\t * the \"instance\" still need to be defined since it might be called from plugins.\n\t\t * @prop Chart#chart\n\t\t * @deprecated since version 2.6.0\n\t\t * @todo remove at version 3\n\t\t * @private\n\t\t */\n\t\tme.chart = me;\n\t\tme.controller = me; // chart.chart.controller #inception\n\n\t\t// Add the chart instance to the global namespace\n\t\tChart.instances[me.id] = me;\n\n\t\t// Define alias to the config data: `chart.data === chart.config.data`\n\t\tObject.defineProperty(me, 'data', {\n\t\t\tget: function() {\n\t\t\t\treturn me.config.data;\n\t\t\t},\n\t\t\tset: function(value) {\n\t\t\t\tme.config.data = value;\n\t\t\t}\n\t\t});\n\n\t\tif (!context || !canvas) {\n\t\t\t// The given item is not a compatible context2d element, let's return before finalizing\n\t\t\t// the chart initialization but after setting basic chart / controller properties that\n\t\t\t// can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\t\tconsole.error(\"Failed to create chart: can't acquire context from the given item\");\n\t\t\treturn;\n\t\t}\n\n\t\tme.initialize();\n\t\tme.update();\n\t},\n\n\t/**\n\t * @private\n\t */\n\tinitialize: function() {\n\t\tvar me = this;\n\n\t\t// Before init plugin notification\n\t\tcore_plugins.notify(me, 'beforeInit');\n\n\t\thelpers$1.retinaScale(me, me.options.devicePixelRatio);\n\n\t\tme.bindEvents();\n\n\t\tif (me.options.responsive) {\n\t\t\t// Initial resize before chart draws (must be silent to preserve initial animations).\n\t\t\tme.resize(true);\n\t\t}\n\n\t\t// Make sure scales have IDs and are built before we build any controllers.\n\t\tme.ensureScalesHaveIDs();\n\t\tme.buildOrUpdateScales();\n\t\tme.initToolTip();\n\n\t\t// After init plugin notification\n\t\tcore_plugins.notify(me, 'afterInit');\n\n\t\treturn me;\n\t},\n\n\tclear: function() {\n\t\thelpers$1.canvas.clear(this);\n\t\treturn this;\n\t},\n\n\tstop: function() {\n\t\t// Stops any current animation loop occurring\n\t\tcore_animations.cancelAnimation(this);\n\t\treturn this;\n\t},\n\n\tresize: function(silent) {\n\t\tvar me = this;\n\t\tvar options = me.options;\n\t\tvar canvas = me.canvas;\n\t\tvar aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;\n\n\t\t// the canvas render width and height will be casted to integers so make sure that\n\t\t// the canvas display style uses the same integer values to avoid blurring effect.\n\n\t\t// Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\n\t\tvar newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\n\t\tvar newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\n\n\t\tif (me.width === newWidth && me.height === newHeight) {\n\t\t\treturn;\n\t\t}\n\n\t\tcanvas.width = me.width = newWidth;\n\t\tcanvas.height = me.height = newHeight;\n\t\tcanvas.style.width = newWidth + 'px';\n\t\tcanvas.style.height = newHeight + 'px';\n\n\t\thelpers$1.retinaScale(me, options.devicePixelRatio);\n\n\t\tif (!silent) {\n\t\t\t// Notify any plugins about the resize\n\t\t\tvar newSize = {width: newWidth, height: newHeight};\n\t\t\tcore_plugins.notify(me, 'resize', [newSize]);\n\n\t\t\t// Notify of resize\n\t\t\tif (options.onResize) {\n\t\t\t\toptions.onResize(me, newSize);\n\t\t\t}\n\n\t\t\tme.stop();\n\t\t\tme.update({\n\t\t\t\tduration: options.responsiveAnimationDuration\n\t\t\t});\n\t\t}\n\t},\n\n\tensureScalesHaveIDs: function() {\n\t\tvar options = this.options;\n\t\tvar scalesOptions = options.scales || {};\n\t\tvar scaleOptions = options.scale;\n\n\t\thelpers$1.each(scalesOptions.xAxes, function(xAxisOptions, index) {\n\t\t\txAxisOptions.id = xAxisOptions.id || ('x-axis-' + index);\n\t\t});\n\n\t\thelpers$1.each(scalesOptions.yAxes, function(yAxisOptions, index) {\n\t\t\tyAxisOptions.id = yAxisOptions.id || ('y-axis-' + index);\n\t\t});\n\n\t\tif (scaleOptions) {\n\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\n\t\t}\n\t},\n\n\t/**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n\tbuildOrUpdateScales: function() {\n\t\tvar me = this;\n\t\tvar options = me.options;\n\t\tvar scales = me.scales || {};\n\t\tvar items = [];\n\t\tvar updated = Object.keys(scales).reduce(function(obj, id) {\n\t\t\tobj[id] = false;\n\t\t\treturn obj;\n\t\t}, {});\n\n\t\tif (options.scales) {\n\t\t\titems = items.concat(\n\t\t\t\t(options.scales.xAxes || []).map(function(xAxisOptions) {\n\t\t\t\t\treturn {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};\n\t\t\t\t}),\n\t\t\t\t(options.scales.yAxes || []).map(function(yAxisOptions) {\n\t\t\t\t\treturn {options: yAxisOptions, dtype: 'linear', dposition: 'left'};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (options.scale) {\n\t\t\titems.push({\n\t\t\t\toptions: options.scale,\n\t\t\t\tdtype: 'radialLinear',\n\t\t\t\tisDefault: true,\n\t\t\t\tdposition: 'chartArea'\n\t\t\t});\n\t\t}\n\n\t\thelpers$1.each(items, function(item) {\n\t\t\tvar scaleOptions = item.options;\n\t\t\tvar id = scaleOptions.id;\n\t\t\tvar scaleType = valueOrDefault$8(scaleOptions.type, item.dtype);\n\n\t\t\tif (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\n\t\t\t\tscaleOptions.position = item.dposition;\n\t\t\t}\n\n\t\t\tupdated[id] = true;\n\t\t\tvar scale = null;\n\t\t\tif (id in scales && scales[id].type === scaleType) {\n\t\t\t\tscale = scales[id];\n\t\t\t\tscale.options = scaleOptions;\n\t\t\t\tscale.ctx = me.ctx;\n\t\t\t\tscale.chart = me;\n\t\t\t} else {\n\t\t\t\tvar scaleClass = core_scaleService.getScaleConstructor(scaleType);\n\t\t\t\tif (!scaleClass) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tscale = new scaleClass({\n\t\t\t\t\tid: id,\n\t\t\t\t\ttype: scaleType,\n\t\t\t\t\toptions: scaleOptions,\n\t\t\t\t\tctx: me.ctx,\n\t\t\t\t\tchart: me\n\t\t\t\t});\n\t\t\t\tscales[scale.id] = scale;\n\t\t\t}\n\n\t\t\tscale.mergeTicksOptions();\n\n\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\n\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\n\t\t\t// make the logic easier and remove some useless? custom code.\n\t\t\tif (item.isDefault) {\n\t\t\t\tme.scale = scale;\n\t\t\t}\n\t\t});\n\t\t// clear up discarded scales\n\t\thelpers$1.each(updated, function(hasUpdated, id) {\n\t\t\tif (!hasUpdated) {\n\t\t\t\tdelete scales[id];\n\t\t\t}\n\t\t});\n\n\t\tme.scales = scales;\n\n\t\tcore_scaleService.addScalesToLayout(this);\n\t},\n\n\tbuildOrUpdateControllers: function() {\n\t\tvar me = this;\n\t\tvar newControllers = [];\n\n\t\thelpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\tvar meta = me.getDatasetMeta(datasetIndex);\n\t\t\tvar type = dataset.type || me.config.type;\n\n\t\t\tif (meta.type && meta.type !== type) {\n\t\t\t\tme.destroyDatasetMeta(datasetIndex);\n\t\t\t\tmeta = me.getDatasetMeta(datasetIndex);\n\t\t\t}\n\t\t\tmeta.type = type;\n\n\t\t\tif (meta.controller) {\n\t\t\t\tmeta.controller.updateIndex(datasetIndex);\n\t\t\t\tmeta.controller.linkScales();\n\t\t\t} else {\n\t\t\t\tvar ControllerClass = controllers[meta.type];\n\t\t\t\tif (ControllerClass === undefined) {\n\t\t\t\t\tthrow new Error('\"' + meta.type + '\" is not a chart type.');\n\t\t\t\t}\n\n\t\t\t\tmeta.controller = new ControllerClass(me, datasetIndex);\n\t\t\t\tnewControllers.push(meta.controller);\n\t\t\t}\n\t\t}, me);\n\n\t\treturn newControllers;\n\t},\n\n\t/**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n\tresetElements: function() {\n\t\tvar me = this;\n\t\thelpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\n\t\t}, me);\n\t},\n\n\t/**\n\t* Resets the chart back to it's state before the initial animation\n\t*/\n\treset: function() {\n\t\tthis.resetElements();\n\t\tthis.tooltip.initialize();\n\t},\n\n\tupdate: function(config) {\n\t\tvar me = this;\n\n\t\tif (!config || typeof config !== 'object') {\n\t\t\t// backwards compatibility\n\t\t\tconfig = {\n\t\t\t\tduration: config,\n\t\t\t\tlazy: arguments[1]\n\t\t\t};\n\t\t}\n\n\t\tupdateConfig(me);\n\n\t\t// plugins options references might have change, let's invalidate the cache\n\t\t// https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n\t\tcore_plugins._invalidate(me);\n\n\t\tif (core_plugins.notify(me, 'beforeUpdate') === false) {\n\t\t\treturn;\n\t\t}\n\n\t\t// In case the entire data object changed\n\t\tme.tooltip._data = me.data;\n\n\t\t// Make sure dataset controllers are updated and new controllers are reset\n\t\tvar newControllers = me.buildOrUpdateControllers();\n\n\t\t// Make sure all dataset controllers have correct meta data counts\n\t\thelpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\tme.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();\n\t\t}, me);\n\n\t\tme.updateLayout();\n\n\t\t// Can only reset the new controllers after the scales have been updated\n\t\tif (me.options.animation && me.options.animation.duration) {\n\t\t\thelpers$1.each(newControllers, function(controller) {\n\t\t\t\tcontroller.reset();\n\t\t\t});\n\t\t}\n\n\t\tme.updateDatasets();\n\n\t\t// Need to reset tooltip in case it is displayed with elements that are removed\n\t\t// after update.\n\t\tme.tooltip.initialize();\n\n\t\t// Last active contains items that were previously in the tooltip.\n\t\t// When we reset the tooltip, we need to clear it\n\t\tme.lastActive = [];\n\n\t\t// Do this before render so that any plugins that need final scale updates can use it\n\t\tcore_plugins.notify(me, 'afterUpdate');\n\n\t\tif (me._bufferedRender) {\n\t\t\tme._bufferedRequest = {\n\t\t\t\tduration: config.duration,\n\t\t\t\teasing: config.easing,\n\t\t\t\tlazy: config.lazy\n\t\t\t};\n\t\t} else {\n\t\t\tme.render(config);\n\t\t}\n\t},\n\n\t/**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n\tupdateLayout: function() {\n\t\tvar me = this;\n\n\t\tif (core_plugins.notify(me, 'beforeLayout') === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tcore_layouts.update(this, this.width, this.height);\n\n\t\t/**\n\t\t * Provided for backward compatibility, use `afterLayout` instead.\n\t\t * @method IPlugin#afterScaleUpdate\n\t\t * @deprecated since version 2.5.0\n\t\t * @todo remove at version 3\n\t\t * @private\n\t\t */\n\t\tcore_plugins.notify(me, 'afterScaleUpdate');\n\t\tcore_plugins.notify(me, 'afterLayout');\n\t},\n\n\t/**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n\tupdateDatasets: function() {\n\t\tvar me = this;\n\n\t\tif (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\tme.updateDataset(i);\n\t\t}\n\n\t\tcore_plugins.notify(me, 'afterDatasetsUpdate');\n\t},\n\n\t/**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n\tupdateDataset: function(index) {\n\t\tvar me = this;\n\t\tvar meta = me.getDatasetMeta(index);\n\t\tvar args = {\n\t\t\tmeta: meta,\n\t\t\tindex: index\n\t\t};\n\n\t\tif (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tmeta.controller.update();\n\n\t\tcore_plugins.notify(me, 'afterDatasetUpdate', [args]);\n\t},\n\n\trender: function(config) {\n\t\tvar me = this;\n\n\t\tif (!config || typeof config !== 'object') {\n\t\t\t// backwards compatibility\n\t\t\tconfig = {\n\t\t\t\tduration: config,\n\t\t\t\tlazy: arguments[1]\n\t\t\t};\n\t\t}\n\n\t\tvar animationOptions = me.options.animation;\n\t\tvar duration = valueOrDefault$8(config.duration, animationOptions && animationOptions.duration);\n\t\tvar lazy = config.lazy;\n\n\t\tif (core_plugins.notify(me, 'beforeRender') === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar onComplete = function(animation) {\n\t\t\tcore_plugins.notify(me, 'afterRender');\n\t\t\thelpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\n\t\t};\n\n\t\tif (animationOptions && duration) {\n\t\t\tvar animation = new core_animation({\n\t\t\t\tnumSteps: duration / 16.66, // 60 fps\n\t\t\t\teasing: config.easing || animationOptions.easing,\n\n\t\t\t\trender: function(chart, animationObject) {\n\t\t\t\t\tvar easingFunction = helpers$1.easing.effects[animationObject.easing];\n\t\t\t\t\tvar currentStep = animationObject.currentStep;\n\t\t\t\t\tvar stepDecimal = currentStep / animationObject.numSteps;\n\n\t\t\t\t\tchart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\n\t\t\t\t},\n\n\t\t\t\tonAnimationProgress: animationOptions.onProgress,\n\t\t\t\tonAnimationComplete: onComplete\n\t\t\t});\n\n\t\t\tcore_animations.addAnimation(me, animation, duration, lazy);\n\t\t} else {\n\t\t\tme.draw();\n\n\t\t\t// See https://github.com/chartjs/Chart.js/issues/3781\n\t\t\tonComplete(new core_animation({numSteps: 0, chart: me}));\n\t\t}\n\n\t\treturn me;\n\t},\n\n\tdraw: function(easingValue) {\n\t\tvar me = this;\n\n\t\tme.clear();\n\n\t\tif (helpers$1.isNullOrUndef(easingValue)) {\n\t\t\teasingValue = 1;\n\t\t}\n\n\t\tme.transition(easingValue);\n\n\t\tif (me.width <= 0 || me.height <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Draw all the scales\n\t\thelpers$1.each(me.boxes, function(box) {\n\t\t\tbox.draw(me.chartArea);\n\t\t}, me);\n\n\t\tme.drawDatasets(easingValue);\n\t\tme._drawTooltip(easingValue);\n\n\t\tcore_plugins.notify(me, 'afterDraw', [easingValue]);\n\t},\n\n\t/**\n\t * @private\n\t */\n\ttransition: function(easingValue) {\n\t\tvar me = this;\n\n\t\tfor (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\n\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\tme.getDatasetMeta(i).controller.transition(easingValue);\n\t\t\t}\n\t\t}\n\n\t\tme.tooltip.transition(easingValue);\n\t},\n\n\t/**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n\tdrawDatasets: function(easingValue) {\n\t\tvar me = this;\n\n\t\tif (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Draw datasets reversed to support proper line stacking\n\t\tfor (var i = (me.data.datasets || []).length - 1; i >= 0; --i) {\n\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\tme.drawDataset(i, easingValue);\n\t\t\t}\n\t\t}\n\n\t\tcore_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\n\t},\n\n\t/**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n\tdrawDataset: function(index, easingValue) {\n\t\tvar me = this;\n\t\tvar meta = me.getDatasetMeta(index);\n\t\tvar args = {\n\t\t\tmeta: meta,\n\t\t\tindex: index,\n\t\t\teasingValue: easingValue\n\t\t};\n\n\t\tif (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tmeta.controller.draw(easingValue);\n\n\t\tcore_plugins.notify(me, 'afterDatasetDraw', [args]);\n\t},\n\n\t/**\n\t * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\n\t * hook, in which case, plugins will not be called on `afterTooltipDraw`.\n\t * @private\n\t */\n\t_drawTooltip: function(easingValue) {\n\t\tvar me = this;\n\t\tvar tooltip = me.tooltip;\n\t\tvar args = {\n\t\t\ttooltip: tooltip,\n\t\t\teasingValue: easingValue\n\t\t};\n\n\t\tif (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip.draw();\n\n\t\tcore_plugins.notify(me, 'afterTooltipDraw', [args]);\n\t},\n\n\t/**\n\t * Get the single element that was clicked on\n\t * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\n\t */\n\tgetElementAtEvent: function(e) {\n\t\treturn core_interaction.modes.single(this, e);\n\t},\n\n\tgetElementsAtEvent: function(e) {\n\t\treturn core_interaction.modes.label(this, e, {intersect: true});\n\t},\n\n\tgetElementsAtXAxis: function(e) {\n\t\treturn core_interaction.modes['x-axis'](this, e, {intersect: true});\n\t},\n\n\tgetElementsAtEventForMode: function(e, mode, options) {\n\t\tvar method = core_interaction.modes[mode];\n\t\tif (typeof method === 'function') {\n\t\t\treturn method(this, e, options);\n\t\t}\n\n\t\treturn [];\n\t},\n\n\tgetDatasetAtEvent: function(e) {\n\t\treturn core_interaction.modes.dataset(this, e, {intersect: true});\n\t},\n\n\tgetDatasetMeta: function(datasetIndex) {\n\t\tvar me = this;\n\t\tvar dataset = me.data.datasets[datasetIndex];\n\t\tif (!dataset._meta) {\n\t\t\tdataset._meta = {};\n\t\t}\n\n\t\tvar meta = dataset._meta[me.id];\n\t\tif (!meta) {\n\t\t\tmeta = dataset._meta[me.id] = {\n\t\t\t\ttype: null,\n\t\t\t\tdata: [],\n\t\t\t\tdataset: null,\n\t\t\t\tcontroller: null,\n\t\t\t\thidden: null,\t\t\t// See isDatasetVisible() comment\n\t\t\t\txAxisID: null,\n\t\t\t\tyAxisID: null\n\t\t\t};\n\t\t}\n\n\t\treturn meta;\n\t},\n\n\tgetVisibleDatasetCount: function() {\n\t\tvar count = 0;\n\t\tfor (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n\t\t\tif (this.isDatasetVisible(i)) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t},\n\n\tisDatasetVisible: function(datasetIndex) {\n\t\tvar meta = this.getDatasetMeta(datasetIndex);\n\n\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n\t\treturn typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n\t},\n\n\tgenerateLegend: function() {\n\t\treturn this.options.legendCallback(this);\n\t},\n\n\t/**\n\t * @private\n\t */\n\tdestroyDatasetMeta: function(datasetIndex) {\n\t\tvar id = this.id;\n\t\tvar dataset = this.data.datasets[datasetIndex];\n\t\tvar meta = dataset._meta && dataset._meta[id];\n\n\t\tif (meta) {\n\t\t\tmeta.controller.destroy();\n\t\t\tdelete dataset._meta[id];\n\t\t}\n\t},\n\n\tdestroy: function() {\n\t\tvar me = this;\n\t\tvar canvas = me.canvas;\n\t\tvar i, ilen;\n\n\t\tme.stop();\n\n\t\t// dataset controllers need to cleanup associated data\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\tme.destroyDatasetMeta(i);\n\t\t}\n\n\t\tif (canvas) {\n\t\t\tme.unbindEvents();\n\t\t\thelpers$1.canvas.clear(me);\n\t\t\tplatform.releaseContext(me.ctx);\n\t\t\tme.canvas = null;\n\t\t\tme.ctx = null;\n\t\t}\n\n\t\tcore_plugins.notify(me, 'destroy');\n\n\t\tdelete Chart.instances[me.id];\n\t},\n\n\ttoBase64Image: function() {\n\t\treturn this.canvas.toDataURL.apply(this.canvas, arguments);\n\t},\n\n\tinitToolTip: function() {\n\t\tvar me = this;\n\t\tme.tooltip = new core_tooltip({\n\t\t\t_chart: me,\n\t\t\t_chartInstance: me, // deprecated, backward compatibility\n\t\t\t_data: me.data,\n\t\t\t_options: me.options.tooltips\n\t\t}, me);\n\t},\n\n\t/**\n\t * @private\n\t */\n\tbindEvents: function() {\n\t\tvar me = this;\n\t\tvar listeners = me._listeners = {};\n\t\tvar listener = function() {\n\t\t\tme.eventHandler.apply(me, arguments);\n\t\t};\n\n\t\thelpers$1.each(me.options.events, function(type) {\n\t\t\tplatform.addEventListener(me, type, listener);\n\t\t\tlisteners[type] = listener;\n\t\t});\n\n\t\t// Elements used to detect size change should not be injected for non responsive charts.\n\t\t// See https://github.com/chartjs/Chart.js/issues/2210\n\t\tif (me.options.responsive) {\n\t\t\tlistener = function() {\n\t\t\t\tme.resize();\n\t\t\t};\n\n\t\t\tplatform.addEventListener(me, 'resize', listener);\n\t\t\tlisteners.resize = listener;\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t */\n\tunbindEvents: function() {\n\t\tvar me = this;\n\t\tvar listeners = me._listeners;\n\t\tif (!listeners) {\n\t\t\treturn;\n\t\t}\n\n\t\tdelete me._listeners;\n\t\thelpers$1.each(listeners, function(listener, type) {\n\t\t\tplatform.removeEventListener(me, type, listener);\n\t\t});\n\t},\n\n\tupdateHoverStyle: function(elements, mode, enabled) {\n\t\tvar method = enabled ? 'setHoverStyle' : 'removeHoverStyle';\n\t\tvar element, i, ilen;\n\n\t\tfor (i = 0, ilen = elements.length; i < ilen; ++i) {\n\t\t\telement = elements[i];\n\t\t\tif (element) {\n\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[method](element);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t */\n\teventHandler: function(e) {\n\t\tvar me = this;\n\t\tvar tooltip = me.tooltip;\n\n\t\tif (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Buffer any update calls so that renders do not occur\n\t\tme._bufferedRender = true;\n\t\tme._bufferedRequest = null;\n\n\t\tvar changed = me.handleEvent(e);\n\t\t// for smooth tooltip animations issue #4989\n\t\t// the tooltip should be the source of change\n\t\t// Animation check workaround:\n\t\t// tooltip._start will be null when tooltip isn't animating\n\t\tif (tooltip) {\n\t\t\tchanged = tooltip._start\n\t\t\t\t? tooltip.handleEvent(e)\n\t\t\t\t: changed | tooltip.handleEvent(e);\n\t\t}\n\n\t\tcore_plugins.notify(me, 'afterEvent', [e]);\n\n\t\tvar bufferedRequest = me._bufferedRequest;\n\t\tif (bufferedRequest) {\n\t\t\t// If we have an update that was triggered, we need to do a normal render\n\t\t\tme.render(bufferedRequest);\n\t\t} else if (changed && !me.animating) {\n\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\n\t\t\tme.stop();\n\n\t\t\t// We only need to render at this point. Updating will cause scales to be\n\t\t\t// recomputed generating flicker & using more memory than necessary.\n\t\t\tme.render({\n\t\t\t\tduration: me.options.hover.animationDuration,\n\t\t\t\tlazy: true\n\t\t\t});\n\t\t}\n\n\t\tme._bufferedRender = false;\n\t\tme._bufferedRequest = null;\n\n\t\treturn me;\n\t},\n\n\t/**\n\t * Handle an event\n\t * @private\n\t * @param {IEvent} event the event to handle\n\t * @return {boolean} true if the chart needs to re-render\n\t */\n\thandleEvent: function(e) {\n\t\tvar me = this;\n\t\tvar options = me.options || {};\n\t\tvar hoverOptions = options.hover;\n\t\tvar changed = false;\n\n\t\tme.lastActive = me.lastActive || [];\n\n\t\t// Find Active Elements for hover and tooltips\n\t\tif (e.type === 'mouseout') {\n\t\t\tme.active = [];\n\t\t} else {\n\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\n\t\t}\n\n\t\t// Invoke onHover hook\n\t\t// Need to call with native event here to not break backwards compatibility\n\t\thelpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\n\n\t\tif (e.type === 'mouseup' || e.type === 'click') {\n\t\t\tif (options.onClick) {\n\t\t\t\t// Use e.native here for backwards compatibility\n\t\t\t\toptions.onClick.call(me, e.native, me.active);\n\t\t\t}\n\t\t}\n\n\t\t// Remove styling for last active (even if it may still be active)\n\t\tif (me.lastActive.length) {\n\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n\t\t}\n\n\t\t// Built in hover styling\n\t\tif (me.active.length && hoverOptions.mode) {\n\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\n\t\t}\n\n\t\tchanged = !helpers$1.arrayEquals(me.active, me.lastActive);\n\n\t\t// Remember Last Actives\n\t\tme.lastActive = me.active;\n\n\t\treturn changed;\n\t}\n});\n\n/**\n * NOTE(SB) We actually don't use this container anymore but we need to keep it\n * for backward compatibility. Though, it can still be useful for plugins that\n * would need to work on multiple charts?!\n */\nChart.instances = {};\n\nvar core_controller = Chart;\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart instead.\n * @class Chart.Controller\n * @deprecated since version 2.6\n * @todo remove at version 3\n * @private\n */\nChart.Controller = Chart;\n\n/**\n * Provided for backward compatibility, not available anymore.\n * @namespace Chart\n * @deprecated since version 2.8\n * @todo remove at version 3\n * @private\n */\nChart.types = {};\n\n/**\n * Provided for backward compatibility, not available anymore.\n * @namespace Chart.helpers.configMerge\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\nhelpers$1.configMerge = mergeConfig;\n\n/**\n * Provided for backward compatibility, not available anymore.\n * @namespace Chart.helpers.scaleMerge\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\nhelpers$1.scaleMerge = mergeScaleConfig;\n\nvar core_helpers = function() {\n\n\t// -- Basic js utility methods\n\n\thelpers$1.where = function(collection, filterCallback) {\n\t\tif (helpers$1.isArray(collection) && Array.prototype.filter) {\n\t\t\treturn collection.filter(filterCallback);\n\t\t}\n\t\tvar filtered = [];\n\n\t\thelpers$1.each(collection, function(item) {\n\t\t\tif (filterCallback(item)) {\n\t\t\t\tfiltered.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn filtered;\n\t};\n\thelpers$1.findIndex = Array.prototype.findIndex ?\n\t\tfunction(array, callback, scope) {\n\t\t\treturn array.findIndex(callback, scope);\n\t\t} :\n\t\tfunction(array, callback, scope) {\n\t\t\tscope = scope === undefined ? array : scope;\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\n\t\t\t\tif (callback.call(scope, array[i], i, array)) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\thelpers$1.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\n\t\t// Default to start of the array\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\n\t\t\tstartIndex = -1;\n\t\t}\n\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\treturn currentItem;\n\t\t\t}\n\t\t}\n\t};\n\thelpers$1.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\n\t\t// Default to end of the array\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\n\t\t\tstartIndex = arrayToSearch.length;\n\t\t}\n\t\tfor (var i = startIndex - 1; i >= 0; i--) {\n\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\treturn currentItem;\n\t\t\t}\n\t\t}\n\t};\n\n\t// -- Math methods\n\thelpers$1.isNumber = function(n) {\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t};\n\thelpers$1.almostEquals = function(x, y, epsilon) {\n\t\treturn Math.abs(x - y) < epsilon;\n\t};\n\thelpers$1.almostWhole = function(x, epsilon) {\n\t\tvar rounded = Math.round(x);\n\t\treturn (((rounded - epsilon) < x) && ((rounded + epsilon) > x));\n\t};\n\thelpers$1.max = function(array) {\n\t\treturn array.reduce(function(max, value) {\n\t\t\tif (!isNaN(value)) {\n\t\t\t\treturn Math.max(max, value);\n\t\t\t}\n\t\t\treturn max;\n\t\t}, Number.NEGATIVE_INFINITY);\n\t};\n\thelpers$1.min = function(array) {\n\t\treturn array.reduce(function(min, value) {\n\t\t\tif (!isNaN(value)) {\n\t\t\t\treturn Math.min(min, value);\n\t\t\t}\n\t\t\treturn min;\n\t\t}, Number.POSITIVE_INFINITY);\n\t};\n\thelpers$1.sign = Math.sign ?\n\t\tfunction(x) {\n\t\t\treturn Math.sign(x);\n\t\t} :\n\t\tfunction(x) {\n\t\t\tx = +x; // convert to a number\n\t\t\tif (x === 0 || isNaN(x)) {\n\t\t\t\treturn x;\n\t\t\t}\n\t\t\treturn x > 0 ? 1 : -1;\n\t\t};\n\thelpers$1.log10 = Math.log10 ?\n\t\tfunction(x) {\n\t\t\treturn Math.log10(x);\n\t\t} :\n\t\tfunction(x) {\n\t\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\n\t\t\t// Check for whole powers of 10,\n\t\t\t// which due to floating point rounding error should be corrected.\n\t\t\tvar powerOf10 = Math.round(exponent);\n\t\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\n\n\t\t\treturn isPowerOf10 ? powerOf10 : exponent;\n\t\t};\n\thelpers$1.toRadians = function(degrees) {\n\t\treturn degrees * (Math.PI / 180);\n\t};\n\thelpers$1.toDegrees = function(radians) {\n\t\treturn radians * (180 / Math.PI);\n\t};\n\n\t/**\n\t * Returns the number of decimal places\n\t * i.e. the number of digits after the decimal point, of the value of this Number.\n\t * @param {number} x - A number.\n\t * @returns {number} The number of decimal places.\n\t * @private\n\t */\n\thelpers$1._decimalPlaces = function(x) {\n\t\tif (!helpers$1.isFinite(x)) {\n\t\t\treturn;\n\t\t}\n\t\tvar e = 1;\n\t\tvar p = 0;\n\t\twhile (Math.round(x * e) / e !== x) {\n\t\t\te *= 10;\n\t\t\tp++;\n\t\t}\n\t\treturn p;\n\t};\n\n\t// Gets the angle from vertical upright to the point about a centre.\n\thelpers$1.getAngleFromPoint = function(centrePoint, anglePoint) {\n\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x;\n\t\tvar distanceFromYCenter = anglePoint.y - centrePoint.y;\n\t\tvar radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n\t\tif (angle < (-0.5 * Math.PI)) {\n\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n\t\t}\n\n\t\treturn {\n\t\t\tangle: angle,\n\t\t\tdistance: radialDistanceFromCenter\n\t\t};\n\t};\n\thelpers$1.distanceBetweenPoints = function(pt1, pt2) {\n\t\treturn Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n\t};\n\n\t/**\n\t * Provided for backward compatibility, not available anymore\n\t * @function Chart.helpers.aliasPixel\n\t * @deprecated since version 2.8.0\n\t * @todo remove at version 3\n\t */\n\thelpers$1.aliasPixel = function(pixelWidth) {\n\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\n\t};\n\n\t/**\n\t * Returns the aligned pixel value to avoid anti-aliasing blur\n\t * @param {Chart} chart - The chart instance.\n\t * @param {number} pixel - A pixel value.\n\t * @param {number} width - The width of the element.\n\t * @returns {number} The aligned pixel value.\n\t * @private\n\t */\n\thelpers$1._alignPixel = function(chart, pixel, width) {\n\t\tvar devicePixelRatio = chart.currentDevicePixelRatio;\n\t\tvar halfWidth = width / 2;\n\t\treturn Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n\t};\n\n\thelpers$1.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\n\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\n\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n\t\t// This function must also respect \"skipped\" points\n\n\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint;\n\t\tvar current = middlePoint;\n\t\tvar next = afterPoint.skip ? middlePoint : afterPoint;\n\n\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n\n\t\tvar s01 = d01 / (d01 + d12);\n\t\tvar s12 = d12 / (d01 + d12);\n\n\t\t// If all points are the same, s01 & s02 will be inf\n\t\ts01 = isNaN(s01) ? 0 : s01;\n\t\ts12 = isNaN(s12) ? 0 : s12;\n\n\t\tvar fa = t * s01; // scaling factor for triangle Ta\n\t\tvar fb = t * s12;\n\n\t\treturn {\n\t\t\tprevious: {\n\t\t\t\tx: current.x - fa * (next.x - previous.x),\n\t\t\t\ty: current.y - fa * (next.y - previous.y)\n\t\t\t},\n\t\t\tnext: {\n\t\t\t\tx: current.x + fb * (next.x - previous.x),\n\t\t\t\ty: current.y + fb * (next.y - previous.y)\n\t\t\t}\n\t\t};\n\t};\n\thelpers$1.EPSILON = Number.EPSILON || 1e-14;\n\thelpers$1.splineCurveMonotone = function(points) {\n\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\n\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\n\t\t// between the dataset discrete points due to the interpolation.\n\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n\n\t\tvar pointsWithTangents = (points || []).map(function(point) {\n\t\t\treturn {\n\t\t\t\tmodel: point._model,\n\t\t\t\tdeltaK: 0,\n\t\t\t\tmK: 0\n\t\t\t};\n\t\t});\n\n\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\n\t\tvar pointsLen = pointsWithTangents.length;\n\t\tvar i, pointBefore, pointCurrent, pointAfter;\n\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\tvar slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);\n\n\t\t\t\t// In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n\t\t\t\tpointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\n\t\t\t}\n\n\t\t\tif (!pointBefore || pointBefore.model.skip) {\n\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\n\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\n\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\n\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n\t\t\t\tpointCurrent.mK = 0;\n\t\t\t} else {\n\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n\t\t\t}\n\t\t}\n\n\t\t// Adjust tangents to ensure monotonic properties\n\t\tvar alphaK, betaK, tauK, squaredMagnitude;\n\t\tfor (i = 0; i < pointsLen - 1; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tpointAfter = pointsWithTangents[i + 1];\n\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\n\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\n\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\t\t\tif (squaredMagnitude <= 9) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\n\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n\t\t}\n\n\t\t// Compute control points\n\t\tvar deltaX;\n\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\tif (pointBefore && !pointBefore.model.skip) {\n\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n\t\t\t}\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n\t\t\t}\n\t\t}\n\t};\n\thelpers$1.nextItem = function(collection, index, loop) {\n\t\tif (loop) {\n\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\n\t\t}\n\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n\t};\n\thelpers$1.previousItem = function(collection, index, loop) {\n\t\tif (loop) {\n\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n\t\t}\n\t\treturn index <= 0 ? collection[0] : collection[index - 1];\n\t};\n\t// Implementation of the nice number algorithm used in determining where axis labels will go\n\thelpers$1.niceNum = function(range, round) {\n\t\tvar exponent = Math.floor(helpers$1.log10(range));\n\t\tvar fraction = range / Math.pow(10, exponent);\n\t\tvar niceFraction;\n\n\t\tif (round) {\n\t\t\tif (fraction < 1.5) {\n\t\t\t\tniceFraction = 1;\n\t\t\t} else if (fraction < 3) {\n\t\t\t\tniceFraction = 2;\n\t\t\t} else if (fraction < 7) {\n\t\t\t\tniceFraction = 5;\n\t\t\t} else {\n\t\t\t\tniceFraction = 10;\n\t\t\t}\n\t\t} else if (fraction <= 1.0) {\n\t\t\tniceFraction = 1;\n\t\t} else if (fraction <= 2) {\n\t\t\tniceFraction = 2;\n\t\t} else if (fraction <= 5) {\n\t\t\tniceFraction = 5;\n\t\t} else {\n\t\t\tniceFraction = 10;\n\t\t}\n\n\t\treturn niceFraction * Math.pow(10, exponent);\n\t};\n\t// Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\thelpers$1.requestAnimFrame = (function() {\n\t\tif (typeof window === 'undefined') {\n\t\t\treturn function(callback) {\n\t\t\t\tcallback();\n\t\t\t};\n\t\t}\n\t\treturn window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\twindow.oRequestAnimationFrame ||\n\t\t\twindow.msRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\n\t\t\t};\n\t}());\n\t// -- DOM methods\n\thelpers$1.getRelativePosition = function(evt, chart) {\n\t\tvar mouseX, mouseY;\n\t\tvar e = evt.originalEvent || evt;\n\t\tvar canvas = evt.target || evt.srcElement;\n\t\tvar boundingRect = canvas.getBoundingClientRect();\n\n\t\tvar touches = e.touches;\n\t\tif (touches && touches.length > 0) {\n\t\t\tmouseX = touches[0].clientX;\n\t\t\tmouseY = touches[0].clientY;\n\n\t\t} else {\n\t\t\tmouseX = e.clientX;\n\t\t\tmouseY = e.clientY;\n\t\t}\n\n\t\t// Scale mouse coordinates into canvas coordinates\n\t\t// by following the pattern laid out by 'jerryj' in the comments of\n\t\t// https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n\t\tvar paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\n\t\tvar paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\n\t\tvar paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\n\t\tvar paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\n\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\n\n\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\n\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\n\n\t\treturn {\n\t\t\tx: mouseX,\n\t\t\ty: mouseY\n\t\t};\n\n\t};\n\n\t// Private helper function to convert max-width/max-height values that may be percentages into a number\n\tfunction parseMaxStyle(styleValue, node, parentProperty) {\n\t\tvar valueInPixels;\n\t\tif (typeof styleValue === 'string') {\n\t\t\tvalueInPixels = parseInt(styleValue, 10);\n\n\t\t\tif (styleValue.indexOf('%') !== -1) {\n\t\t\t\t// percentage * size in dimension\n\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n\t\t\t}\n\t\t} else {\n\t\t\tvalueInPixels = styleValue;\n\t\t}\n\n\t\treturn valueInPixels;\n\t}\n\n\t/**\n\t * Returns if the given value contains an effective constraint.\n\t * @private\n\t */\n\tfunction isConstrainedValue(value) {\n\t\treturn value !== undefined && value !== null && value !== 'none';\n\t}\n\n\t/**\n\t * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\n\t * @param {HTMLElement} domNode - the node to check the constraint on\n\t * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\n\t * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\n\t * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\n\t */\n\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\n\t\tvar view = document.defaultView;\n\t\tvar parentNode = helpers$1._getParentNode(domNode);\n\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n\t\tvar hasCNode = isConstrainedValue(constrainedNode);\n\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\n\t\tvar infinity = Number.POSITIVE_INFINITY;\n\n\t\tif (hasCNode || hasCContainer) {\n\t\t\treturn Math.min(\n\t\t\t\thasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\n\t\t\t\thasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n\t\t}\n\n\t\treturn 'none';\n\t}\n\t// returns Number or undefined if no constraint\n\thelpers$1.getConstraintWidth = function(domNode) {\n\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\n\t};\n\t// returns Number or undefined if no constraint\n\thelpers$1.getConstraintHeight = function(domNode) {\n\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\n\t};\n\t/**\n\t * @private\n \t */\n\thelpers$1._calculatePadding = function(container, padding, parentDimension) {\n\t\tpadding = helpers$1.getStyle(container, padding);\n\n\t\treturn padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\n\t};\n\t/**\n\t * @private\n\t */\n\thelpers$1._getParentNode = function(domNode) {\n\t\tvar parent = domNode.parentNode;\n\t\tif (parent && parent.toString() === '[object ShadowRoot]') {\n\t\t\tparent = parent.host;\n\t\t}\n\t\treturn parent;\n\t};\n\thelpers$1.getMaximumWidth = function(domNode) {\n\t\tvar container = helpers$1._getParentNode(domNode);\n\t\tif (!container) {\n\t\t\treturn domNode.clientWidth;\n\t\t}\n\n\t\tvar clientWidth = container.clientWidth;\n\t\tvar paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\n\t\tvar paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\n\n\t\tvar w = clientWidth - paddingLeft - paddingRight;\n\t\tvar cw = helpers$1.getConstraintWidth(domNode);\n\t\treturn isNaN(cw) ? w : Math.min(w, cw);\n\t};\n\thelpers$1.getMaximumHeight = function(domNode) {\n\t\tvar container = helpers$1._getParentNode(domNode);\n\t\tif (!container) {\n\t\t\treturn domNode.clientHeight;\n\t\t}\n\n\t\tvar clientHeight = container.clientHeight;\n\t\tvar paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\n\t\tvar paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\n\n\t\tvar h = clientHeight - paddingTop - paddingBottom;\n\t\tvar ch = helpers$1.getConstraintHeight(domNode);\n\t\treturn isNaN(ch) ? h : Math.min(h, ch);\n\t};\n\thelpers$1.getStyle = function(el, property) {\n\t\treturn el.currentStyle ?\n\t\t\tel.currentStyle[property] :\n\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n\t};\n\thelpers$1.retinaScale = function(chart, forceRatio) {\n\t\tvar pixelRatio = chart.currentDevicePixelRatio = forceRatio || (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\n\t\tif (pixelRatio === 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar canvas = chart.canvas;\n\t\tvar height = chart.height;\n\t\tvar width = chart.width;\n\n\t\tcanvas.height = height * pixelRatio;\n\t\tcanvas.width = width * pixelRatio;\n\t\tchart.ctx.scale(pixelRatio, pixelRatio);\n\n\t\t// If no style has been set on the canvas, the render size is used as display size,\n\t\t// making the chart visually bigger, so let's enforce it to the \"correct\" values.\n\t\t// See https://github.com/chartjs/Chart.js/issues/3575\n\t\tif (!canvas.style.height && !canvas.style.width) {\n\t\t\tcanvas.style.height = height + 'px';\n\t\t\tcanvas.style.width = width + 'px';\n\t\t}\n\t};\n\t// -- Canvas methods\n\thelpers$1.fontString = function(pixelSize, fontStyle, fontFamily) {\n\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n\t};\n\thelpers$1.longestText = function(ctx, font, arrayOfThings, cache) {\n\t\tcache = cache || {};\n\t\tvar data = cache.data = cache.data || {};\n\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\n\n\t\tif (cache.font !== font) {\n\t\t\tdata = cache.data = {};\n\t\t\tgc = cache.garbageCollect = [];\n\t\t\tcache.font = font;\n\t\t}\n\n\t\tctx.font = font;\n\t\tvar longest = 0;\n\t\thelpers$1.each(arrayOfThings, function(thing) {\n\t\t\t// Undefined strings and arrays should not be measured\n\t\t\tif (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\n\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, thing);\n\t\t\t} else if (helpers$1.isArray(thing)) {\n\t\t\t\t// if it is an array lets measure each element\n\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\n\t\t\t\thelpers$1.each(thing, function(nestedThing) {\n\t\t\t\t\t// Undefined strings and arrays should not be measured\n\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\n\t\t\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tvar gcLen = gc.length / 2;\n\t\tif (gcLen > arrayOfThings.length) {\n\t\t\tfor (var i = 0; i < gcLen; i++) {\n\t\t\t\tdelete data[gc[i]];\n\t\t\t}\n\t\t\tgc.splice(0, gcLen);\n\t\t}\n\t\treturn longest;\n\t};\n\thelpers$1.measureText = function(ctx, data, gc, longest, string) {\n\t\tvar textWidth = data[string];\n\t\tif (!textWidth) {\n\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\n\t\t\tgc.push(string);\n\t\t}\n\t\tif (textWidth > longest) {\n\t\t\tlongest = textWidth;\n\t\t}\n\t\treturn longest;\n\t};\n\thelpers$1.numberOfLabelLines = function(arrayOfThings) {\n\t\tvar numberOfLines = 1;\n\t\thelpers$1.each(arrayOfThings, function(thing) {\n\t\t\tif (helpers$1.isArray(thing)) {\n\t\t\t\tif (thing.length > numberOfLines) {\n\t\t\t\t\tnumberOfLines = thing.length;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn numberOfLines;\n\t};\n\n\thelpers$1.color = !chartjsColor ?\n\t\tfunction(value) {\n\t\t\tconsole.error('Color.js not found!');\n\t\t\treturn value;\n\t\t} :\n\t\tfunction(value) {\n\t\t\t/* global CanvasGradient */\n\t\t\tif (value instanceof CanvasGradient) {\n\t\t\t\tvalue = core_defaults.global.defaultColor;\n\t\t\t}\n\n\t\t\treturn chartjsColor(value);\n\t\t};\n\n\thelpers$1.getHoverColor = function(colorValue) {\n\t\t/* global CanvasPattern */\n\t\treturn (colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient) ?\n\t\t\tcolorValue :\n\t\t\thelpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n\t};\n};\n\nfunction abstract() {\n\tthrow new Error(\n\t\t'This method is not implemented: either no adapter can ' +\n\t\t'be found or an incomplete integration was provided.'\n\t);\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\n\n/**\n * Currently supported unit string values.\n * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\n * @memberof Chart._adapters._date\n * @name Unit\n */\n\n/**\n * @class\n */\nfunction DateAdapter(options) {\n\tthis.options = options || {};\n}\n\nhelpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */ {\n\t/**\n\t * Returns a map of time formats for the supported formatting units defined\n\t * in Unit as well as 'datetime' representing a detailed date/time string.\n\t * @returns {{string: string}}\n\t */\n\tformats: abstract,\n\n\t/**\n\t * Parses the given `value` and return the associated timestamp.\n\t * @param {any} value - the value to parse (usually comes from the data)\n\t * @param {string} [format] - the expected data format\n\t * @returns {(number|null)}\n\t * @function\n\t */\n\tparse: abstract,\n\n\t/**\n\t * Returns the formatted date in the specified `format` for a given `timestamp`.\n\t * @param {number} timestamp - the timestamp to format\n\t * @param {string} format - the date/time token\n\t * @return {string}\n\t * @function\n\t */\n\tformat: abstract,\n\n\t/**\n\t * Adds the specified `amount` of `unit` to the given `timestamp`.\n\t * @param {number} timestamp - the input timestamp\n\t * @param {number} amount - the amount to add\n\t * @param {Unit} unit - the unit as string\n\t * @return {number}\n\t * @function\n\t */\n\tadd: abstract,\n\n\t/**\n\t * Returns the number of `unit` between the given timestamps.\n\t * @param {number} max - the input timestamp (reference)\n\t * @param {number} min - the timestamp to substract\n\t * @param {Unit} unit - the unit as string\n\t * @return {number}\n\t * @function\n\t */\n\tdiff: abstract,\n\n\t/**\n\t * Returns start of `unit` for the given `timestamp`.\n\t * @param {number} timestamp - the input timestamp\n\t * @param {Unit} unit - the unit as string\n\t * @param {number} [weekday] - the ISO day of the week with 1 being Monday\n\t * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n\t * @function\n\t */\n\tstartOf: abstract,\n\n\t/**\n\t * Returns end of `unit` for the given `timestamp`.\n\t * @param {number} timestamp - the input timestamp\n\t * @param {Unit} unit - the unit as string\n\t * @function\n\t */\n\tendOf: abstract,\n\n\t// DEPRECATIONS\n\n\t/**\n\t * Provided for backward compatibility for scale.getValueForPixel(),\n\t * this method should be overridden only by the moment adapter.\n\t * @deprecated since version 2.8.0\n\t * @todo remove at version 3\n\t * @private\n\t */\n\t_create: function(value) {\n\t\treturn value;\n\t}\n});\n\nDateAdapter.override = function(members) {\n\thelpers$1.extend(DateAdapter.prototype, members);\n};\n\nvar _date = DateAdapter;\n\nvar core_adapters = {\n\t_date: _date\n};\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nvar core_ticks = {\n\t/**\n\t * Namespace to hold formatters for different types of ticks\n\t * @namespace Chart.Ticks.formatters\n\t */\n\tformatters: {\n\t\t/**\n\t\t * Formatter for value labels\n\t\t * @method Chart.Ticks.formatters.values\n\t\t * @param value the value to display\n\t\t * @return {string|string[]} the label to display\n\t\t */\n\t\tvalues: function(value) {\n\t\t\treturn helpers$1.isArray(value) ? value : '' + value;\n\t\t},\n\n\t\t/**\n\t\t * Formatter for linear numeric ticks\n\t\t * @method Chart.Ticks.formatters.linear\n\t\t * @param tickValue {number} the value to be formatted\n\t\t * @param index {number} the position of the tickValue parameter in the ticks array\n\t\t * @param ticks {number[]} the list of ticks being converted\n\t\t * @return {string} string representation of the tickValue parameter\n\t\t */\n\t\tlinear: function(tickValue, index, ticks) {\n\t\t\t// If we have lots of ticks, don't use the ones\n\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\n\n\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\n\t\t\tif (Math.abs(delta) > 1) {\n\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\n\t\t\t\t\t// not an integer\n\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar logDelta = helpers$1.log10(Math.abs(delta));\n\t\t\tvar tickString = '';\n\n\t\t\tif (tickValue !== 0) {\n\t\t\t\tvar maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\n\t\t\t\tif (maxTick < 1e-4) { // all ticks are small numbers; use scientific notation\n\t\t\t\t\tvar logTick = helpers$1.log10(Math.abs(tickValue));\n\t\t\t\t\ttickString = tickValue.toExponential(Math.floor(logTick) - Math.floor(logDelta));\n\t\t\t\t} else {\n\t\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\n\t\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n\t\t\t\t\ttickString = tickValue.toFixed(numDecimal);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttickString = '0'; // never show decimal places for 0\n\t\t\t}\n\n\t\t\treturn tickString;\n\t\t},\n\n\t\tlogarithmic: function(tickValue, index, ticks) {\n\t\t\tvar remain = tickValue / (Math.pow(10, Math.floor(helpers$1.log10(tickValue))));\n\n\t\t\tif (tickValue === 0) {\n\t\t\t\treturn '0';\n\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\n\t\t\t\treturn tickValue.toExponential();\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\t}\n};\n\nvar valueOrDefault$9 = helpers$1.valueOrDefault;\nvar valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\n\ncore_defaults._set('scale', {\n\tdisplay: true,\n\tposition: 'left',\n\toffset: false,\n\n\t// grid line settings\n\tgridLines: {\n\t\tdisplay: true,\n\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\tlineWidth: 1,\n\t\tdrawBorder: true,\n\t\tdrawOnChartArea: true,\n\t\tdrawTicks: true,\n\t\ttickMarkLength: 10,\n\t\tzeroLineWidth: 1,\n\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\n\t\tzeroLineBorderDash: [],\n\t\tzeroLineBorderDashOffset: 0.0,\n\t\toffsetGridLines: false,\n\t\tborderDash: [],\n\t\tborderDashOffset: 0.0\n\t},\n\n\t// scale label\n\tscaleLabel: {\n\t\t// display property\n\t\tdisplay: false,\n\n\t\t// actual label\n\t\tlabelString: '',\n\n\t\t// top/bottom padding\n\t\tpadding: {\n\t\t\ttop: 4,\n\t\t\tbottom: 4\n\t\t}\n\t},\n\n\t// label settings\n\tticks: {\n\t\tbeginAtZero: false,\n\t\tminRotation: 0,\n\t\tmaxRotation: 50,\n\t\tmirror: false,\n\t\tpadding: 0,\n\t\treverse: false,\n\t\tdisplay: true,\n\t\tautoSkip: true,\n\t\tautoSkipPadding: 0,\n\t\tlabelOffset: 0,\n\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n\t\tcallback: core_ticks.formatters.values,\n\t\tminor: {},\n\t\tmajor: {}\n\t}\n});\n\nfunction labelsFromTicks(ticks) {\n\tvar labels = [];\n\tvar i, ilen;\n\n\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\tlabels.push(ticks[i].label);\n\t}\n\n\treturn labels;\n}\n\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n\tvar lineValue = scale.getPixelForTick(index);\n\n\tif (offsetGridLines) {\n\t\tif (scale.getTicks().length === 1) {\n\t\t\tlineValue -= scale.isHorizontal() ?\n\t\t\t\tMath.max(lineValue - scale.left, scale.right - lineValue) :\n\t\t\t\tMath.max(lineValue - scale.top, scale.bottom - lineValue);\n\t\t} else if (index === 0) {\n\t\t\tlineValue -= (scale.getPixelForTick(1) - lineValue) / 2;\n\t\t} else {\n\t\t\tlineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2;\n\t\t}\n\t}\n\treturn lineValue;\n}\n\nfunction computeTextSize(context, tick, font) {\n\treturn helpers$1.isArray(tick) ?\n\t\thelpers$1.longestText(context, font, tick) :\n\t\tcontext.measureText(tick).width;\n}\n\nvar core_scale = core_element.extend({\n\t/**\n\t * Get the padding needed for the scale\n\t * @method getPadding\n\t * @private\n\t * @returns {Padding} the necessary padding\n\t */\n\tgetPadding: function() {\n\t\tvar me = this;\n\t\treturn {\n\t\t\tleft: me.paddingLeft || 0,\n\t\t\ttop: me.paddingTop || 0,\n\t\t\tright: me.paddingRight || 0,\n\t\t\tbottom: me.paddingBottom || 0\n\t\t};\n\t},\n\n\t/**\n\t * Returns the scale tick objects ({label, major})\n\t * @since 2.7\n\t */\n\tgetTicks: function() {\n\t\treturn this._ticks;\n\t},\n\n\t// These methods are ordered by lifecyle. Utilities then follow.\n\t// Any function defined here is inherited by all scale types.\n\t// Any function can be extended by the scale type\n\n\tmergeTicksOptions: function() {\n\t\tvar ticks = this.options.ticks;\n\t\tif (ticks.minor === false) {\n\t\t\tticks.minor = {\n\t\t\t\tdisplay: false\n\t\t\t};\n\t\t}\n\t\tif (ticks.major === false) {\n\t\t\tticks.major = {\n\t\t\t\tdisplay: false\n\t\t\t};\n\t\t}\n\t\tfor (var key in ticks) {\n\t\t\tif (key !== 'major' && key !== 'minor') {\n\t\t\t\tif (typeof ticks.minor[key] === 'undefined') {\n\t\t\t\t\tticks.minor[key] = ticks[key];\n\t\t\t\t}\n\t\t\t\tif (typeof ticks.major[key] === 'undefined') {\n\t\t\t\t\tticks.major[key] = ticks[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUpdate: function() {\n\t\thelpers$1.callback(this.options.beforeUpdate, [this]);\n\t},\n\n\tupdate: function(maxWidth, maxHeight, margins) {\n\t\tvar me = this;\n\t\tvar i, ilen, labels, label, ticks, tick;\n\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\tme.beforeUpdate();\n\n\t\t// Absorb the master measurements\n\t\tme.maxWidth = maxWidth;\n\t\tme.maxHeight = maxHeight;\n\t\tme.margins = helpers$1.extend({\n\t\t\tleft: 0,\n\t\t\tright: 0,\n\t\t\ttop: 0,\n\t\t\tbottom: 0\n\t\t}, margins);\n\n\t\tme._maxLabelLines = 0;\n\t\tme.longestLabelWidth = 0;\n\t\tme.longestTextCache = me.longestTextCache || {};\n\n\t\t// Dimensions\n\t\tme.beforeSetDimensions();\n\t\tme.setDimensions();\n\t\tme.afterSetDimensions();\n\n\t\t// Data min/max\n\t\tme.beforeDataLimits();\n\t\tme.determineDataLimits();\n\t\tme.afterDataLimits();\n\n\t\t// Ticks - `this.ticks` is now DEPRECATED!\n\t\t// Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\n\t\t// and must not be accessed directly from outside this class. `this.ticks` being\n\t\t// around for long time and not marked as private, we can't change its structure\n\t\t// without unexpected breaking changes. If you need to access the scale ticks,\n\t\t// use scale.getTicks() instead.\n\n\t\tme.beforeBuildTicks();\n\n\t\t// New implementations should return an array of objects but for BACKWARD COMPAT,\n\t\t// we still support no return (`this.ticks` internally set by calling this method).\n\t\tticks = me.buildTicks() || [];\n\n\t\t// Allow modification of ticks in callback.\n\t\tticks = me.afterBuildTicks(ticks) || ticks;\n\n\t\tme.beforeTickToLabelConversion();\n\n\t\t// New implementations should return the formatted tick labels but for BACKWARD\n\t\t// COMPAT, we still support no return (`this.ticks` internally changed by calling\n\t\t// this method and supposed to contain only string values).\n\t\tlabels = me.convertTicksToLabels(ticks) || me.ticks;\n\n\t\tme.afterTickToLabelConversion();\n\n\t\tme.ticks = labels; // BACKWARD COMPATIBILITY\n\n\t\t// IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!\n\n\t\t// BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\n\t\tfor (i = 0, ilen = labels.length; i < ilen; ++i) {\n\t\t\tlabel = labels[i];\n\t\t\ttick = ticks[i];\n\t\t\tif (!tick) {\n\t\t\t\tticks.push(tick = {\n\t\t\t\t\tlabel: label,\n\t\t\t\t\tmajor: false\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttick.label = label;\n\t\t\t}\n\t\t}\n\n\t\tme._ticks = ticks;\n\n\t\t// Tick Rotation\n\t\tme.beforeCalculateTickRotation();\n\t\tme.calculateTickRotation();\n\t\tme.afterCalculateTickRotation();\n\t\t// Fit\n\t\tme.beforeFit();\n\t\tme.fit();\n\t\tme.afterFit();\n\t\t//\n\t\tme.afterUpdate();\n\n\t\treturn me.minSize;\n\n\t},\n\tafterUpdate: function() {\n\t\thelpers$1.callback(this.options.afterUpdate, [this]);\n\t},\n\n\t//\n\n\tbeforeSetDimensions: function() {\n\t\thelpers$1.callback(this.options.beforeSetDimensions, [this]);\n\t},\n\tsetDimensions: function() {\n\t\tvar me = this;\n\t\t// Set the unconstrained dimension before label rotation\n\t\tif (me.isHorizontal()) {\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.left = 0;\n\t\t\tme.right = me.width;\n\t\t} else {\n\t\t\tme.height = me.maxHeight;\n\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.top = 0;\n\t\t\tme.bottom = me.height;\n\t\t}\n\n\t\t// Reset padding\n\t\tme.paddingLeft = 0;\n\t\tme.paddingTop = 0;\n\t\tme.paddingRight = 0;\n\t\tme.paddingBottom = 0;\n\t},\n\tafterSetDimensions: function() {\n\t\thelpers$1.callback(this.options.afterSetDimensions, [this]);\n\t},\n\n\t// Data limits\n\tbeforeDataLimits: function() {\n\t\thelpers$1.callback(this.options.beforeDataLimits, [this]);\n\t},\n\tdetermineDataLimits: helpers$1.noop,\n\tafterDataLimits: function() {\n\t\thelpers$1.callback(this.options.afterDataLimits, [this]);\n\t},\n\n\t//\n\tbeforeBuildTicks: function() {\n\t\thelpers$1.callback(this.options.beforeBuildTicks, [this]);\n\t},\n\tbuildTicks: helpers$1.noop,\n\tafterBuildTicks: function(ticks) {\n\t\tvar me = this;\n\t\t// ticks is empty for old axis implementations here\n\t\tif (helpers$1.isArray(ticks) && ticks.length) {\n\t\t\treturn helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\n\t\t}\n\t\t// Support old implementations (that modified `this.ticks` directly in buildTicks)\n\t\tme.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\n\t\treturn ticks;\n\t},\n\n\tbeforeTickToLabelConversion: function() {\n\t\thelpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\n\t},\n\tconvertTicksToLabels: function() {\n\t\tvar me = this;\n\t\t// Convert ticks to strings\n\t\tvar tickOpts = me.options.ticks;\n\t\tme.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\n\t},\n\tafterTickToLabelConversion: function() {\n\t\thelpers$1.callback(this.options.afterTickToLabelConversion, [this]);\n\t},\n\n\t//\n\n\tbeforeCalculateTickRotation: function() {\n\t\thelpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\n\t},\n\tcalculateTickRotation: function() {\n\t\tvar me = this;\n\t\tvar context = me.ctx;\n\t\tvar tickOpts = me.options.ticks;\n\t\tvar labels = labelsFromTicks(me._ticks);\n\n\t\t// Get the width of each grid by calculating the difference\n\t\t// between x offsets between 0 and 1.\n\t\tvar tickFont = helpers$1.options._parseFont(tickOpts);\n\t\tcontext.font = tickFont.string;\n\n\t\tvar labelRotation = tickOpts.minRotation || 0;\n\n\t\tif (labels.length && me.options.display && me.isHorizontal()) {\n\t\t\tvar originalLabelWidth = helpers$1.longestText(context, tickFont.string, labels, me.longestTextCache);\n\t\t\tvar labelWidth = originalLabelWidth;\n\t\t\tvar cosRotation, sinRotation;\n\n\t\t\t// Allow 3 pixels x2 padding either side for label readability\n\t\t\tvar tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6;\n\n\t\t\t// Max label rotation can be set or default to 90 - also act as a loop counter\n\t\t\twhile (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {\n\t\t\t\tvar angleRadians = helpers$1.toRadians(labelRotation);\n\t\t\t\tcosRotation = Math.cos(angleRadians);\n\t\t\t\tsinRotation = Math.sin(angleRadians);\n\n\t\t\t\tif (sinRotation * originalLabelWidth > me.maxHeight) {\n\t\t\t\t\t// go back one step\n\t\t\t\t\tlabelRotation--;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tlabelRotation++;\n\t\t\t\tlabelWidth = cosRotation * originalLabelWidth;\n\t\t\t}\n\t\t}\n\n\t\tme.labelRotation = labelRotation;\n\t},\n\tafterCalculateTickRotation: function() {\n\t\thelpers$1.callback(this.options.afterCalculateTickRotation, [this]);\n\t},\n\n\t//\n\n\tbeforeFit: function() {\n\t\thelpers$1.callback(this.options.beforeFit, [this]);\n\t},\n\tfit: function() {\n\t\tvar me = this;\n\t\t// Reset\n\t\tvar minSize = me.minSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\n\t\tvar labels = labelsFromTicks(me._ticks);\n\n\t\tvar opts = me.options;\n\t\tvar tickOpts = opts.ticks;\n\t\tvar scaleLabelOpts = opts.scaleLabel;\n\t\tvar gridLineOpts = opts.gridLines;\n\t\tvar display = me._isVisible();\n\t\tvar position = opts.position;\n\t\tvar isHorizontal = me.isHorizontal();\n\n\t\tvar parseFont = helpers$1.options._parseFont;\n\t\tvar tickFont = parseFont(tickOpts);\n\t\tvar tickMarkLength = opts.gridLines.tickMarkLength;\n\n\t\t// Width\n\t\tif (isHorizontal) {\n\t\t\t// subtract the margins to line up with the chartArea if we are a full width scale\n\t\t\tminSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;\n\t\t} else {\n\t\t\tminSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t}\n\n\t\t// height\n\t\tif (isHorizontal) {\n\t\t\tminSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t} else {\n\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t}\n\n\t\t// Are we showing a title for the scale?\n\t\tif (scaleLabelOpts.display && display) {\n\t\t\tvar scaleLabelFont = parseFont(scaleLabelOpts);\n\t\t\tvar scaleLabelPadding = helpers$1.options.toPadding(scaleLabelOpts.padding);\n\t\t\tvar deltaHeight = scaleLabelFont.lineHeight + scaleLabelPadding.height;\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tminSize.height += deltaHeight;\n\t\t\t} else {\n\t\t\t\tminSize.width += deltaHeight;\n\t\t\t}\n\t\t}\n\n\t\t// Don't bother fitting the ticks if we are not showing the labels\n\t\tif (tickOpts.display && display) {\n\t\t\tvar largestTextWidth = helpers$1.longestText(me.ctx, tickFont.string, labels, me.longestTextCache);\n\t\t\tvar tallestLabelHeightInLines = helpers$1.numberOfLabelLines(labels);\n\t\t\tvar lineSpace = tickFont.size * 0.5;\n\t\t\tvar tickPadding = me.options.ticks.padding;\n\n\t\t\t// Store max number of lines and widest label for _autoSkip\n\t\t\tme._maxLabelLines = tallestLabelHeightInLines;\n\t\t\tme.longestLabelWidth = largestTextWidth;\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tvar angleRadians = helpers$1.toRadians(me.labelRotation);\n\t\t\t\tvar cosRotation = Math.cos(angleRadians);\n\t\t\t\tvar sinRotation = Math.sin(angleRadians);\n\n\t\t\t\t// TODO - improve this calculation\n\t\t\t\tvar labelHeight = (sinRotation * largestTextWidth)\n\t\t\t\t\t+ (tickFont.lineHeight * tallestLabelHeightInLines)\n\t\t\t\t\t+ lineSpace; // padding\n\n\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n\n\t\t\t\tme.ctx.font = tickFont.string;\n\t\t\t\tvar firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.string);\n\t\t\t\tvar lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.string);\n\t\t\t\tvar offsetLeft = me.getPixelForTick(0) - me.left;\n\t\t\t\tvar offsetRight = me.right - me.getPixelForTick(labels.length - 1);\n\t\t\t\tvar paddingLeft, paddingRight;\n\n\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n\t\t\t\t// which means that the right padding is dominated by the font height\n\t\t\t\tif (me.labelRotation !== 0) {\n\t\t\t\t\tpaddingLeft = position === 'bottom' ? (cosRotation * firstLabelWidth) : (cosRotation * lineSpace);\n\t\t\t\t\tpaddingRight = position === 'bottom' ? (cosRotation * lineSpace) : (cosRotation * lastLabelWidth);\n\t\t\t\t} else {\n\t\t\t\t\tpaddingLeft = firstLabelWidth / 2;\n\t\t\t\t\tpaddingRight = lastLabelWidth / 2;\n\t\t\t\t}\n\t\t\t\tme.paddingLeft = Math.max(paddingLeft - offsetLeft, 0) + 3; // add 3 px to move away from canvas edges\n\t\t\t\tme.paddingRight = Math.max(paddingRight - offsetRight, 0) + 3;\n\t\t\t} else {\n\t\t\t\t// A vertical axis is more constrained by the width. Labels are the\n\t\t\t\t// dominant factor here, so get that length first and account for padding\n\t\t\t\tif (tickOpts.mirror) {\n\t\t\t\t\tlargestTextWidth = 0;\n\t\t\t\t} else {\n\t\t\t\t\t// use lineSpace for consistency with horizontal axis\n\t\t\t\t\t// tickPadding is not implemented for horizontal\n\t\t\t\t\tlargestTextWidth += tickPadding + lineSpace;\n\t\t\t\t}\n\n\t\t\t\tminSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth);\n\n\t\t\t\tme.paddingTop = tickFont.size / 2;\n\t\t\t\tme.paddingBottom = tickFont.size / 2;\n\t\t\t}\n\t\t}\n\n\t\tme.handleMargins();\n\n\t\tme.width = minSize.width;\n\t\tme.height = minSize.height;\n\t},\n\n\t/**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n\thandleMargins: function() {\n\t\tvar me = this;\n\t\tif (me.margins) {\n\t\t\tme.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n\t\t\tme.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);\n\t\t\tme.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n\t\t\tme.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);\n\t\t}\n\t},\n\n\tafterFit: function() {\n\t\thelpers$1.callback(this.options.afterFit, [this]);\n\t},\n\n\t// Shared Methods\n\tisHorizontal: function() {\n\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t},\n\tisFullWidth: function() {\n\t\treturn (this.options.fullWidth);\n\t},\n\n\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\n\tgetRightValue: function(rawValue) {\n\t\t// Null and undefined values first\n\t\tif (helpers$1.isNullOrUndef(rawValue)) {\n\t\t\treturn NaN;\n\t\t}\n\t\t// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\n\t\tif ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\n\t\t\treturn NaN;\n\t\t}\n\t\t// If it is in fact an object, dive in one more level\n\t\tif (rawValue) {\n\t\t\tif (this.isHorizontal()) {\n\t\t\t\tif (rawValue.x !== undefined) {\n\t\t\t\t\treturn this.getRightValue(rawValue.x);\n\t\t\t\t}\n\t\t\t} else if (rawValue.y !== undefined) {\n\t\t\t\treturn this.getRightValue(rawValue.y);\n\t\t\t}\n\t\t}\n\n\t\t// Value is good, return it\n\t\treturn rawValue;\n\t},\n\n\t/**\n\t * Used to get the value to display in the tooltip for the data at the given index\n\t * @param index\n\t * @param datasetIndex\n\t */\n\tgetLabelForIndex: helpers$1.noop,\n\n\t/**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param value\n\t * @param index\n\t * @param datasetIndex\n\t */\n\tgetPixelForValue: helpers$1.noop,\n\n\t/**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param pixel\n\t */\n\tgetValueForPixel: helpers$1.noop,\n\n\t/**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t */\n\tgetPixelForTick: function(index) {\n\t\tvar me = this;\n\t\tvar offset = me.options.offset;\n\t\tif (me.isHorizontal()) {\n\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\tvar tickWidth = innerWidth / Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n\t\t\tvar pixel = (tickWidth * index) + me.paddingLeft;\n\n\t\t\tif (offset) {\n\t\t\t\tpixel += tickWidth / 2;\n\t\t\t}\n\n\t\t\tvar finalVal = me.left + pixel;\n\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\treturn finalVal;\n\t\t}\n\t\tvar innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n\t\treturn me.top + (index * (innerHeight / (me._ticks.length - 1)));\n\t},\n\n\t/**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t */\n\tgetPixelForDecimal: function(decimal) {\n\t\tvar me = this;\n\t\tif (me.isHorizontal()) {\n\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\tvar valueOffset = (innerWidth * decimal) + me.paddingLeft;\n\n\t\t\tvar finalVal = me.left + valueOffset;\n\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\treturn finalVal;\n\t\t}\n\t\treturn me.top + (decimal * me.height);\n\t},\n\n\t/**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t */\n\tgetBasePixel: function() {\n\t\treturn this.getPixelForValue(this.getBaseValue());\n\t},\n\n\tgetBaseValue: function() {\n\t\tvar me = this;\n\t\tvar min = me.min;\n\t\tvar max = me.max;\n\n\t\treturn me.beginAtZero ? 0 :\n\t\t\tmin < 0 && max < 0 ? max :\n\t\t\tmin > 0 && max > 0 ? min :\n\t\t\t0;\n\t},\n\n\t/**\n\t * Returns a subset of ticks to be plotted to avoid overlapping labels.\n\t * @private\n\t */\n\t_autoSkip: function(ticks) {\n\t\tvar me = this;\n\t\tvar isHorizontal = me.isHorizontal();\n\t\tvar optionTicks = me.options.ticks.minor;\n\t\tvar tickCount = ticks.length;\n\t\tvar skipRatio = false;\n\t\tvar maxTicks = optionTicks.maxTicksLimit;\n\n\t\t// Total space needed to display all ticks. First and last ticks are\n\t\t// drawn as their center at end of axis, so tickCount-1\n\t\tvar ticksLength = me._tickSize() * (tickCount - 1);\n\n\t\t// Axis length\n\t\tvar axisLength = isHorizontal\n\t\t\t? me.width - (me.paddingLeft + me.paddingRight)\n\t\t\t: me.height - (me.paddingTop + me.PaddingBottom);\n\n\t\tvar result = [];\n\t\tvar i, tick;\n\n\t\tif (ticksLength > axisLength) {\n\t\t\tskipRatio = 1 + Math.floor(ticksLength / axisLength);\n\t\t}\n\n\t\t// if they defined a max number of optionTicks,\n\t\t// increase skipRatio until that number is met\n\t\tif (tickCount > maxTicks) {\n\t\t\tskipRatio = Math.max(skipRatio, 1 + Math.floor(tickCount / maxTicks));\n\t\t}\n\n\t\tfor (i = 0; i < tickCount; i++) {\n\t\t\ttick = ticks[i];\n\n\t\t\tif (skipRatio > 1 && i % skipRatio > 0) {\n\t\t\t\t// leave tick in place but make sure it's not displayed (#4635)\n\t\t\t\tdelete tick.label;\n\t\t\t}\n\t\t\tresult.push(tick);\n\t\t}\n\t\treturn result;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_tickSize: function() {\n\t\tvar me = this;\n\t\tvar isHorizontal = me.isHorizontal();\n\t\tvar optionTicks = me.options.ticks.minor;\n\n\t\t// Calculate space needed by label in axis direction.\n\t\tvar rot = helpers$1.toRadians(me.labelRotation);\n\t\tvar cos = Math.abs(Math.cos(rot));\n\t\tvar sin = Math.abs(Math.sin(rot));\n\n\t\tvar padding = optionTicks.autoSkipPadding || 0;\n\t\tvar w = (me.longestLabelWidth + padding) || 0;\n\n\t\tvar tickFont = helpers$1.options._parseFont(optionTicks);\n\t\tvar h = (me._maxLabelLines * tickFont.lineHeight + padding) || 0;\n\n\t\t// Calculate space needed for 1 tick in axis direction.\n\t\treturn isHorizontal\n\t\t\t? h * cos > w * sin ? w / cos : h / sin\n\t\t\t: h * sin < w * cos ? h / cos : w / sin;\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_isVisible: function() {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar display = me.options.display;\n\t\tvar i, ilen, meta;\n\n\t\tif (display !== 'auto') {\n\t\t\treturn !!display;\n\t\t}\n\n\t\t// When 'auto', the scale is visible if at least one associated dataset is visible.\n\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n\t\t\tif (chart.isDatasetVisible(i)) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\tif (meta.xAxisID === me.id || meta.yAxisID === me.id) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Actually draw the scale on the canvas\n\t * @param {object} chartArea - the area of the chart to draw full grid lines on\n\t */\n\tdraw: function(chartArea) {\n\t\tvar me = this;\n\t\tvar options = me.options;\n\n\t\tif (!me._isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar chart = me.chart;\n\t\tvar context = me.ctx;\n\t\tvar globalDefaults = core_defaults.global;\n\t\tvar defaultFontColor = globalDefaults.defaultFontColor;\n\t\tvar optionTicks = options.ticks.minor;\n\t\tvar optionMajorTicks = options.ticks.major || optionTicks;\n\t\tvar gridLines = options.gridLines;\n\t\tvar scaleLabel = options.scaleLabel;\n\t\tvar position = options.position;\n\n\t\tvar isRotated = me.labelRotation !== 0;\n\t\tvar isMirrored = optionTicks.mirror;\n\t\tvar isHorizontal = me.isHorizontal();\n\n\t\tvar parseFont = helpers$1.options._parseFont;\n\t\tvar ticks = optionTicks.display && optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks();\n\t\tvar tickFontColor = valueOrDefault$9(optionTicks.fontColor, defaultFontColor);\n\t\tvar tickFont = parseFont(optionTicks);\n\t\tvar lineHeight = tickFont.lineHeight;\n\t\tvar majorTickFontColor = valueOrDefault$9(optionMajorTicks.fontColor, defaultFontColor);\n\t\tvar majorTickFont = parseFont(optionMajorTicks);\n\t\tvar tickPadding = optionTicks.padding;\n\t\tvar labelOffset = optionTicks.labelOffset;\n\n\t\tvar tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;\n\n\t\tvar scaleLabelFontColor = valueOrDefault$9(scaleLabel.fontColor, defaultFontColor);\n\t\tvar scaleLabelFont = parseFont(scaleLabel);\n\t\tvar scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\n\t\tvar labelRotationRadians = helpers$1.toRadians(me.labelRotation);\n\n\t\tvar itemsToDraw = [];\n\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\n\t\tvar alignPixel = helpers$1._alignPixel;\n\t\tvar borderValue, tickStart, tickEnd;\n\n\t\tif (position === 'top') {\n\t\t\tborderValue = alignPixel(chart, me.bottom, axisWidth);\n\t\t\ttickStart = me.bottom - tl;\n\t\t\ttickEnd = borderValue - axisWidth / 2;\n\t\t} else if (position === 'bottom') {\n\t\t\tborderValue = alignPixel(chart, me.top, axisWidth);\n\t\t\ttickStart = borderValue + axisWidth / 2;\n\t\t\ttickEnd = me.top + tl;\n\t\t} else if (position === 'left') {\n\t\t\tborderValue = alignPixel(chart, me.right, axisWidth);\n\t\t\ttickStart = me.right - tl;\n\t\t\ttickEnd = borderValue - axisWidth / 2;\n\t\t} else {\n\t\t\tborderValue = alignPixel(chart, me.left, axisWidth);\n\t\t\ttickStart = borderValue + axisWidth / 2;\n\t\t\ttickEnd = me.left + tl;\n\t\t}\n\n\t\tvar epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error.\n\n\t\thelpers$1.each(ticks, function(tick, index) {\n\t\t\t// autoskipper skipped this tick (#4635)\n\t\t\tif (helpers$1.isNullOrUndef(tick.label)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar label = tick.label;\n\t\t\tvar lineWidth, lineColor, borderDash, borderDashOffset;\n\t\t\tif (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) {\n\t\t\t\t// Draw the first index specially\n\t\t\t\tlineWidth = gridLines.zeroLineWidth;\n\t\t\t\tlineColor = gridLines.zeroLineColor;\n\t\t\t\tborderDash = gridLines.zeroLineBorderDash || [];\n\t\t\t\tborderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\n\t\t\t} else {\n\t\t\t\tlineWidth = valueAtIndexOrDefault(gridLines.lineWidth, index);\n\t\t\t\tlineColor = valueAtIndexOrDefault(gridLines.color, index);\n\t\t\t\tborderDash = gridLines.borderDash || [];\n\t\t\t\tborderDashOffset = gridLines.borderDashOffset || 0.0;\n\t\t\t}\n\n\t\t\t// Common properties\n\t\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY, textOffset, textAlign;\n\t\t\tvar labelCount = helpers$1.isArray(label) ? label.length : 1;\n\t\t\tvar lineValue = getPixelForGridLine(me, index, gridLines.offsetGridLines);\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tvar labelYOffset = tl + tickPadding;\n\n\t\t\t\tif (lineValue < me.left - epsilon) {\n\t\t\t\t\tlineColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\n\t\t\t\ttx1 = tx2 = x1 = x2 = alignPixel(chart, lineValue, lineWidth);\n\t\t\t\tty1 = tickStart;\n\t\t\t\tty2 = tickEnd;\n\t\t\t\tlabelX = me.getPixelForTick(index) + labelOffset; // x values for optionTicks (need to consider offsetLabel option)\n\n\t\t\t\tif (position === 'top') {\n\t\t\t\t\ty1 = alignPixel(chart, chartArea.top, axisWidth) + axisWidth / 2;\n\t\t\t\t\ty2 = chartArea.bottom;\n\t\t\t\t\ttextOffset = ((!isRotated ? 0.5 : 1) - labelCount) * lineHeight;\n\t\t\t\t\ttextAlign = !isRotated ? 'center' : 'left';\n\t\t\t\t\tlabelY = me.bottom - labelYOffset;\n\t\t\t\t} else {\n\t\t\t\t\ty1 = chartArea.top;\n\t\t\t\t\ty2 = alignPixel(chart, chartArea.bottom, axisWidth) - axisWidth / 2;\n\t\t\t\t\ttextOffset = (!isRotated ? 0.5 : 0) * lineHeight;\n\t\t\t\t\ttextAlign = !isRotated ? 'center' : 'right';\n\t\t\t\t\tlabelY = me.top + labelYOffset;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar labelXOffset = (isMirrored ? 0 : tl) + tickPadding;\n\n\t\t\t\tif (lineValue < me.top - epsilon) {\n\t\t\t\t\tlineColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\n\t\t\t\ttx1 = tickStart;\n\t\t\t\ttx2 = tickEnd;\n\t\t\t\tty1 = ty2 = y1 = y2 = alignPixel(chart, lineValue, lineWidth);\n\t\t\t\tlabelY = me.getPixelForTick(index) + labelOffset;\n\t\t\t\ttextOffset = (1 - labelCount) * lineHeight / 2;\n\n\t\t\t\tif (position === 'left') {\n\t\t\t\t\tx1 = alignPixel(chart, chartArea.left, axisWidth) + axisWidth / 2;\n\t\t\t\t\tx2 = chartArea.right;\n\t\t\t\t\ttextAlign = isMirrored ? 'left' : 'right';\n\t\t\t\t\tlabelX = me.right - labelXOffset;\n\t\t\t\t} else {\n\t\t\t\t\tx1 = chartArea.left;\n\t\t\t\t\tx2 = alignPixel(chart, chartArea.right, axisWidth) - axisWidth / 2;\n\t\t\t\t\ttextAlign = isMirrored ? 'right' : 'left';\n\t\t\t\t\tlabelX = me.left + labelXOffset;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titemsToDraw.push({\n\t\t\t\ttx1: tx1,\n\t\t\t\tty1: ty1,\n\t\t\t\ttx2: tx2,\n\t\t\t\tty2: ty2,\n\t\t\t\tx1: x1,\n\t\t\t\ty1: y1,\n\t\t\t\tx2: x2,\n\t\t\t\ty2: y2,\n\t\t\t\tlabelX: labelX,\n\t\t\t\tlabelY: labelY,\n\t\t\t\tglWidth: lineWidth,\n\t\t\t\tglColor: lineColor,\n\t\t\t\tglBorderDash: borderDash,\n\t\t\t\tglBorderDashOffset: borderDashOffset,\n\t\t\t\trotation: -1 * labelRotationRadians,\n\t\t\t\tlabel: label,\n\t\t\t\tmajor: tick.major,\n\t\t\t\ttextOffset: textOffset,\n\t\t\t\ttextAlign: textAlign\n\t\t\t});\n\t\t});\n\n\t\t// Draw all of the tick labels, tick marks, and grid lines at the correct places\n\t\thelpers$1.each(itemsToDraw, function(itemToDraw) {\n\t\t\tvar glWidth = itemToDraw.glWidth;\n\t\t\tvar glColor = itemToDraw.glColor;\n\n\t\t\tif (gridLines.display && glWidth && glColor) {\n\t\t\t\tcontext.save();\n\t\t\t\tcontext.lineWidth = glWidth;\n\t\t\t\tcontext.strokeStyle = glColor;\n\t\t\t\tif (context.setLineDash) {\n\t\t\t\t\tcontext.setLineDash(itemToDraw.glBorderDash);\n\t\t\t\t\tcontext.lineDashOffset = itemToDraw.glBorderDashOffset;\n\t\t\t\t}\n\n\t\t\t\tcontext.beginPath();\n\n\t\t\t\tif (gridLines.drawTicks) {\n\t\t\t\t\tcontext.moveTo(itemToDraw.tx1, itemToDraw.ty1);\n\t\t\t\t\tcontext.lineTo(itemToDraw.tx2, itemToDraw.ty2);\n\t\t\t\t}\n\n\t\t\t\tif (gridLines.drawOnChartArea) {\n\t\t\t\t\tcontext.moveTo(itemToDraw.x1, itemToDraw.y1);\n\t\t\t\t\tcontext.lineTo(itemToDraw.x2, itemToDraw.y2);\n\t\t\t\t}\n\n\t\t\t\tcontext.stroke();\n\t\t\t\tcontext.restore();\n\t\t\t}\n\n\t\t\tif (optionTicks.display) {\n\t\t\t\t// Make sure we draw text in the correct color and font\n\t\t\t\tcontext.save();\n\t\t\t\tcontext.translate(itemToDraw.labelX, itemToDraw.labelY);\n\t\t\t\tcontext.rotate(itemToDraw.rotation);\n\t\t\t\tcontext.font = itemToDraw.major ? majorTickFont.string : tickFont.string;\n\t\t\t\tcontext.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor;\n\t\t\t\tcontext.textBaseline = 'middle';\n\t\t\t\tcontext.textAlign = itemToDraw.textAlign;\n\n\t\t\t\tvar label = itemToDraw.label;\n\t\t\t\tvar y = itemToDraw.textOffset;\n\t\t\t\tif (helpers$1.isArray(label)) {\n\t\t\t\t\tfor (var i = 0; i < label.length; ++i) {\n\t\t\t\t\t\t// We just make sure the multiline element is a string here..\n\t\t\t\t\t\tcontext.fillText('' + label[i], 0, y);\n\t\t\t\t\t\ty += lineHeight;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcontext.fillText(label, 0, y);\n\t\t\t\t}\n\t\t\t\tcontext.restore();\n\t\t\t}\n\t\t});\n\n\t\tif (scaleLabel.display) {\n\t\t\t// Draw the scale label\n\t\t\tvar scaleLabelX;\n\t\t\tvar scaleLabelY;\n\t\t\tvar rotation = 0;\n\t\t\tvar halfLineHeight = scaleLabelFont.lineHeight / 2;\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tscaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width\n\t\t\t\tscaleLabelY = position === 'bottom'\n\t\t\t\t\t? me.bottom - halfLineHeight - scaleLabelPadding.bottom\n\t\t\t\t\t: me.top + halfLineHeight + scaleLabelPadding.top;\n\t\t\t} else {\n\t\t\t\tvar isLeft = position === 'left';\n\t\t\t\tscaleLabelX = isLeft\n\t\t\t\t\t? me.left + halfLineHeight + scaleLabelPadding.top\n\t\t\t\t\t: me.right - halfLineHeight - scaleLabelPadding.top;\n\t\t\t\tscaleLabelY = me.top + ((me.bottom - me.top) / 2);\n\t\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n\t\t\t}\n\n\t\t\tcontext.save();\n\t\t\tcontext.translate(scaleLabelX, scaleLabelY);\n\t\t\tcontext.rotate(rotation);\n\t\t\tcontext.textAlign = 'center';\n\t\t\tcontext.textBaseline = 'middle';\n\t\t\tcontext.fillStyle = scaleLabelFontColor; // render in correct colour\n\t\t\tcontext.font = scaleLabelFont.string;\n\t\t\tcontext.fillText(scaleLabel.labelString, 0, 0);\n\t\t\tcontext.restore();\n\t\t}\n\n\t\tif (axisWidth) {\n\t\t\t// Draw the line at the edge of the axis\n\t\t\tvar firstLineWidth = axisWidth;\n\t\t\tvar lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, ticks.length - 1, 0);\n\t\t\tvar x1, x2, y1, y2;\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tx1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\n\t\t\t\tx2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n\t\t\t\ty1 = y2 = borderValue;\n\t\t\t} else {\n\t\t\t\ty1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\n\t\t\t\ty2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n\t\t\t\tx1 = x2 = borderValue;\n\t\t\t}\n\n\t\t\tcontext.lineWidth = axisWidth;\n\t\t\tcontext.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\n\t\t\tcontext.beginPath();\n\t\t\tcontext.moveTo(x1, y1);\n\t\t\tcontext.lineTo(x2, y2);\n\t\t\tcontext.stroke();\n\t\t}\n\t}\n});\n\nvar defaultConfig = {\n\tposition: 'bottom'\n};\n\nvar scale_category = core_scale.extend({\n\t/**\n\t* Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those\n\t* else fall back to data.labels\n\t* @private\n\t*/\n\tgetLabels: function() {\n\t\tvar data = this.chart.data;\n\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n\t},\n\n\tdetermineDataLimits: function() {\n\t\tvar me = this;\n\t\tvar labels = me.getLabels();\n\t\tme.minIndex = 0;\n\t\tme.maxIndex = labels.length - 1;\n\t\tvar findIndex;\n\n\t\tif (me.options.ticks.min !== undefined) {\n\t\t\t// user specified min value\n\t\t\tfindIndex = labels.indexOf(me.options.ticks.min);\n\t\t\tme.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n\t\t}\n\n\t\tif (me.options.ticks.max !== undefined) {\n\t\t\t// user specified max value\n\t\t\tfindIndex = labels.indexOf(me.options.ticks.max);\n\t\t\tme.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n\t\t}\n\n\t\tme.min = labels[me.minIndex];\n\t\tme.max = labels[me.maxIndex];\n\t},\n\n\tbuildTicks: function() {\n\t\tvar me = this;\n\t\tvar labels = me.getLabels();\n\t\t// If we are viewing some subset of labels, slice the original array\n\t\tme.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n\t},\n\n\tgetLabelForIndex: function(index, datasetIndex) {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\n\t\tif (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\n\t\t\treturn me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\n\t\t}\n\n\t\treturn me.ticks[index - me.minIndex];\n\t},\n\n\t// Used to get data value locations. Value can either be an index or a numerical value\n\tgetPixelForValue: function(value, index) {\n\t\tvar me = this;\n\t\tvar offset = me.options.offset;\n\t\t// 1 is added because we need the length but we have the indexes\n\t\tvar offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1)), 1);\n\n\t\t// If value is a data object, then index is the index in the data array,\n\t\t// not the index of the scale. We need to change that.\n\t\tvar valueCategory;\n\t\tif (value !== undefined && value !== null) {\n\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\n\t\t}\n\t\tif (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\n\t\t\tvar labels = me.getLabels();\n\t\t\tvalue = valueCategory || value;\n\t\t\tvar idx = labels.indexOf(value);\n\t\t\tindex = idx !== -1 ? idx : index;\n\t\t}\n\n\t\tif (me.isHorizontal()) {\n\t\t\tvar valueWidth = me.width / offsetAmt;\n\t\t\tvar widthOffset = (valueWidth * (index - me.minIndex));\n\n\t\t\tif (offset) {\n\t\t\t\twidthOffset += (valueWidth / 2);\n\t\t\t}\n\n\t\t\treturn me.left + widthOffset;\n\t\t}\n\t\tvar valueHeight = me.height / offsetAmt;\n\t\tvar heightOffset = (valueHeight * (index - me.minIndex));\n\n\t\tif (offset) {\n\t\t\theightOffset += (valueHeight / 2);\n\t\t}\n\n\t\treturn me.top + heightOffset;\n\t},\n\n\tgetPixelForTick: function(index) {\n\t\treturn this.getPixelForValue(this.ticks[index], index + this.minIndex, null);\n\t},\n\n\tgetValueForPixel: function(pixel) {\n\t\tvar me = this;\n\t\tvar offset = me.options.offset;\n\t\tvar value;\n\t\tvar offsetAmt = Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n\t\tvar horz = me.isHorizontal();\n\t\tvar valueDimension = (horz ? me.width : me.height) / offsetAmt;\n\n\t\tpixel -= horz ? me.left : me.top;\n\n\t\tif (offset) {\n\t\t\tpixel -= (valueDimension / 2);\n\t\t}\n\n\t\tif (pixel <= 0) {\n\t\t\tvalue = 0;\n\t\t} else {\n\t\t\tvalue = Math.round(pixel / valueDimension);\n\t\t}\n\n\t\treturn value + me.minIndex;\n\t},\n\n\tgetBasePixel: function() {\n\t\treturn this.bottom;\n\t}\n});\n\n// INTERNAL: static default options, registered in src/index.js\nvar _defaults = defaultConfig;\nscale_category._defaults = _defaults;\n\nvar noop = helpers$1.noop;\nvar isNullOrUndef = helpers$1.isNullOrUndef;\n\n/**\n * Generate a set of linear ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {number[]} array of tick values\n */\nfunction generateTicks(generationOptions, dataRange) {\n\tvar ticks = [];\n\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\n\t// \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n\t// for details.\n\n\tvar MIN_SPACING = 1e-14;\n\tvar stepSize = generationOptions.stepSize;\n\tvar unit = stepSize || 1;\n\tvar maxNumSpaces = generationOptions.maxTicks - 1;\n\tvar min = generationOptions.min;\n\tvar max = generationOptions.max;\n\tvar precision = generationOptions.precision;\n\tvar rmin = dataRange.min;\n\tvar rmax = dataRange.max;\n\tvar spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\n\tvar factor, niceMin, niceMax, numSpaces;\n\n\t// Beyond MIN_SPACING floating point numbers being to lose precision\n\t// such that we can't do the math necessary to generate ticks\n\tif (spacing < MIN_SPACING && isNullOrUndef(min) && isNullOrUndef(max)) {\n\t\treturn [rmin, rmax];\n\t}\n\n\tnumSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n\tif (numSpaces > maxNumSpaces) {\n\t\t// If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n\t\tspacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\n\t}\n\n\tif (stepSize || isNullOrUndef(precision)) {\n\t\t// If a precision is not specified, calculate factor based on spacing\n\t\tfactor = Math.pow(10, helpers$1._decimalPlaces(spacing));\n\t} else {\n\t\t// If the user specified a precision, round to that number of decimal places\n\t\tfactor = Math.pow(10, precision);\n\t\tspacing = Math.ceil(spacing * factor) / factor;\n\t}\n\n\tniceMin = Math.floor(rmin / spacing) * spacing;\n\tniceMax = Math.ceil(rmax / spacing) * spacing;\n\n\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\n\tif (stepSize) {\n\t\t// If very close to our whole number, use it.\n\t\tif (!isNullOrUndef(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\n\t\t\tniceMin = min;\n\t\t}\n\t\tif (!isNullOrUndef(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\n\t\t\tniceMax = max;\n\t\t}\n\t}\n\n\tnumSpaces = (niceMax - niceMin) / spacing;\n\t// If very close to our rounded value, use it.\n\tif (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n\t\tnumSpaces = Math.round(numSpaces);\n\t} else {\n\t\tnumSpaces = Math.ceil(numSpaces);\n\t}\n\n\tniceMin = Math.round(niceMin * factor) / factor;\n\tniceMax = Math.round(niceMax * factor) / factor;\n\tticks.push(isNullOrUndef(min) ? niceMin : min);\n\tfor (var j = 1; j < numSpaces; ++j) {\n\t\tticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\n\t}\n\tticks.push(isNullOrUndef(max) ? niceMax : max);\n\n\treturn ticks;\n}\n\nvar scale_linearbase = core_scale.extend({\n\tgetRightValue: function(value) {\n\t\tif (typeof value === 'string') {\n\t\t\treturn +value;\n\t\t}\n\t\treturn core_scale.prototype.getRightValue.call(this, value);\n\t},\n\n\thandleTickRangeOptions: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar tickOpts = opts.ticks;\n\n\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\n\t\t// axis, they can manually override it\n\t\tif (tickOpts.beginAtZero) {\n\t\t\tvar minSign = helpers$1.sign(me.min);\n\t\t\tvar maxSign = helpers$1.sign(me.max);\n\n\t\t\tif (minSign < 0 && maxSign < 0) {\n\t\t\t\t// move the top up to 0\n\t\t\t\tme.max = 0;\n\t\t\t} else if (minSign > 0 && maxSign > 0) {\n\t\t\t\t// move the bottom down to 0\n\t\t\t\tme.min = 0;\n\t\t\t}\n\t\t}\n\n\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n\n\t\tif (tickOpts.min !== undefined) {\n\t\t\tme.min = tickOpts.min;\n\t\t} else if (tickOpts.suggestedMin !== undefined) {\n\t\t\tif (me.min === null) {\n\t\t\t\tme.min = tickOpts.suggestedMin;\n\t\t\t} else {\n\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\n\t\t\t}\n\t\t}\n\n\t\tif (tickOpts.max !== undefined) {\n\t\t\tme.max = tickOpts.max;\n\t\t} else if (tickOpts.suggestedMax !== undefined) {\n\t\t\tif (me.max === null) {\n\t\t\t\tme.max = tickOpts.suggestedMax;\n\t\t\t} else {\n\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\n\t\t\t}\n\t\t}\n\n\t\tif (setMin !== setMax) {\n\t\t\t// We set the min or the max but not both.\n\t\t\t// So ensure that our range is good\n\t\t\t// Inverted or 0 length range can happen when\n\t\t\t// ticks.min is set, and no datasets are visible\n\t\t\tif (me.min >= me.max) {\n\t\t\t\tif (setMin) {\n\t\t\t\t\tme.max = me.min + 1;\n\t\t\t\t} else {\n\t\t\t\t\tme.min = me.max - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (me.min === me.max) {\n\t\t\tme.max++;\n\n\t\t\tif (!tickOpts.beginAtZero) {\n\t\t\t\tme.min--;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetTickLimit: function() {\n\t\tvar me = this;\n\t\tvar tickOpts = me.options.ticks;\n\t\tvar stepSize = tickOpts.stepSize;\n\t\tvar maxTicksLimit = tickOpts.maxTicksLimit;\n\t\tvar maxTicks;\n\n\t\tif (stepSize) {\n\t\t\tmaxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\n\t\t} else {\n\t\t\tmaxTicks = me._computeTickLimit();\n\t\t\tmaxTicksLimit = maxTicksLimit || 11;\n\t\t}\n\n\t\tif (maxTicksLimit) {\n\t\t\tmaxTicks = Math.min(maxTicksLimit, maxTicks);\n\t\t}\n\n\t\treturn maxTicks;\n\t},\n\n\t_computeTickLimit: function() {\n\t\treturn Number.POSITIVE_INFINITY;\n\t},\n\n\thandleDirectionalChanges: noop,\n\n\tbuildTicks: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar tickOpts = opts.ticks;\n\n\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t// the graph. Make sure we always have at least 2 ticks\n\t\tvar maxTicks = me.getTickLimit();\n\t\tmaxTicks = Math.max(2, maxTicks);\n\n\t\tvar numericGeneratorOptions = {\n\t\t\tmaxTicks: maxTicks,\n\t\t\tmin: tickOpts.min,\n\t\t\tmax: tickOpts.max,\n\t\t\tprecision: tickOpts.precision,\n\t\t\tstepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n\t\t};\n\t\tvar ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\n\n\t\tme.handleDirectionalChanges();\n\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t// range of the scale\n\t\tme.max = helpers$1.max(ticks);\n\t\tme.min = helpers$1.min(ticks);\n\n\t\tif (tickOpts.reverse) {\n\t\t\tticks.reverse();\n\n\t\t\tme.start = me.max;\n\t\t\tme.end = me.min;\n\t\t} else {\n\t\t\tme.start = me.min;\n\t\t\tme.end = me.max;\n\t\t}\n\t},\n\n\tconvertTicksToLabels: function() {\n\t\tvar me = this;\n\t\tme.ticksAsNumbers = me.ticks.slice();\n\t\tme.zeroLineIndex = me.ticks.indexOf(0);\n\n\t\tcore_scale.prototype.convertTicksToLabels.call(me);\n\t}\n});\n\nvar defaultConfig$1 = {\n\tposition: 'left',\n\tticks: {\n\t\tcallback: core_ticks.formatters.linear\n\t}\n};\n\nvar scale_linear = scale_linearbase.extend({\n\tdetermineDataLimits: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar chart = me.chart;\n\t\tvar data = chart.data;\n\t\tvar datasets = data.datasets;\n\t\tvar isHorizontal = me.isHorizontal();\n\t\tvar DEFAULT_MIN = 0;\n\t\tvar DEFAULT_MAX = 1;\n\n\t\tfunction IDMatches(meta) {\n\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t}\n\n\t\t// First Calculate the range\n\t\tme.min = null;\n\t\tme.max = null;\n\n\t\tvar hasStacks = opts.stacked;\n\t\tif (hasStacks === undefined) {\n\t\t\thelpers$1.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (hasStacks) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n\t\t\t\t\tmeta.stack !== undefined) {\n\t\t\t\t\thasStacks = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (opts.stacked || hasStacks) {\n\t\t\tvar valuesPerStack = {};\n\n\t\t\thelpers$1.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\tvar key = [\n\t\t\t\t\tmeta.type,\n\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n\t\t\t\t\tmeta.stack\n\t\t\t\t].join('.');\n\n\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\tvaluesPerStack[key] = {\n\t\t\t\t\t\tpositiveValues: [],\n\t\t\t\t\t\tnegativeValues: []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Store these per type\n\t\t\t\tvar positiveValues = valuesPerStack[key].positiveValues;\n\t\t\t\tvar negativeValues = valuesPerStack[key].negativeValues;\n\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpositiveValues[index] = positiveValues[index] || 0;\n\t\t\t\t\t\tnegativeValues[index] = negativeValues[index] || 0;\n\n\t\t\t\t\t\tif (opts.relativePoints) {\n\t\t\t\t\t\t\tpositiveValues[index] = 100;\n\t\t\t\t\t\t} else if (value < 0) {\n\t\t\t\t\t\t\tnegativeValues[index] += value;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpositiveValues[index] += value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\thelpers$1.each(valuesPerStack, function(valuesForType) {\n\t\t\t\tvar values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n\t\t\t\tvar minVal = helpers$1.min(values);\n\t\t\t\tvar maxVal = helpers$1.max(values);\n\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t});\n\n\t\t} else {\n\t\t\thelpers$1.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tme.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n\t\tme.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\n\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\tthis.handleTickRangeOptions();\n\t},\n\n\t// Returns the maximum number of ticks based on the scale dimension\n\t_computeTickLimit: function() {\n\t\tvar me = this;\n\t\tvar tickFont;\n\n\t\tif (me.isHorizontal()) {\n\t\t\treturn Math.ceil(me.width / 40);\n\t\t}\n\t\ttickFont = helpers$1.options._parseFont(me.options.ticks);\n\t\treturn Math.ceil(me.height / tickFont.lineHeight);\n\t},\n\n\t// Called after the ticks are built. We need\n\thandleDirectionalChanges: function() {\n\t\tif (!this.isHorizontal()) {\n\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\n\t\t\tthis.ticks.reverse();\n\t\t}\n\t},\n\n\tgetLabelForIndex: function(index, datasetIndex) {\n\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t},\n\n\t// Utils\n\tgetPixelForValue: function(value) {\n\t\t// This must be called after fit has been run so that\n\t\t// this.left, this.top, this.right, and this.bottom have been defined\n\t\tvar me = this;\n\t\tvar start = me.start;\n\n\t\tvar rightValue = +me.getRightValue(value);\n\t\tvar pixel;\n\t\tvar range = me.end - start;\n\n\t\tif (me.isHorizontal()) {\n\t\t\tpixel = me.left + (me.width / range * (rightValue - start));\n\t\t} else {\n\t\t\tpixel = me.bottom - (me.height / range * (rightValue - start));\n\t\t}\n\t\treturn pixel;\n\t},\n\n\tgetValueForPixel: function(pixel) {\n\t\tvar me = this;\n\t\tvar isHorizontal = me.isHorizontal();\n\t\tvar innerDimension = isHorizontal ? me.width : me.height;\n\t\tvar offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;\n\t\treturn me.start + ((me.end - me.start) * offset);\n\t},\n\n\tgetPixelForTick: function(index) {\n\t\treturn this.getPixelForValue(this.ticksAsNumbers[index]);\n\t}\n});\n\n// INTERNAL: static default options, registered in src/index.js\nvar _defaults$1 = defaultConfig$1;\nscale_linear._defaults = _defaults$1;\n\nvar valueOrDefault$a = helpers$1.valueOrDefault;\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {number[]} array of tick values\n */\nfunction generateTicks$1(generationOptions, dataRange) {\n\tvar ticks = [];\n\n\tvar tickVal = valueOrDefault$a(generationOptions.min, Math.pow(10, Math.floor(helpers$1.log10(dataRange.min))));\n\n\tvar endExp = Math.floor(helpers$1.log10(dataRange.max));\n\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n\tvar exp, significand;\n\n\tif (tickVal === 0) {\n\t\texp = Math.floor(helpers$1.log10(dataRange.minNotZero));\n\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n\n\t\tticks.push(tickVal);\n\t\ttickVal = significand * Math.pow(10, exp);\n\t} else {\n\t\texp = Math.floor(helpers$1.log10(tickVal));\n\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\n\t}\n\tvar precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n\tdo {\n\t\tticks.push(tickVal);\n\n\t\t++significand;\n\t\tif (significand === 10) {\n\t\t\tsignificand = 1;\n\t\t\t++exp;\n\t\t\tprecision = exp >= 0 ? 1 : precision;\n\t\t}\n\n\t\ttickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n\t} while (exp < endExp || (exp === endExp && significand < endSignificand));\n\n\tvar lastTick = valueOrDefault$a(generationOptions.max, tickVal);\n\tticks.push(lastTick);\n\n\treturn ticks;\n}\n\nvar defaultConfig$2 = {\n\tposition: 'left',\n\n\t// label settings\n\tticks: {\n\t\tcallback: core_ticks.formatters.logarithmic\n\t}\n};\n\n// TODO(v3): change this to positiveOrDefault\nfunction nonNegativeOrDefault(value, defaultValue) {\n\treturn helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\n}\n\nvar scale_logarithmic = core_scale.extend({\n\tdetermineDataLimits: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar chart = me.chart;\n\t\tvar data = chart.data;\n\t\tvar datasets = data.datasets;\n\t\tvar isHorizontal = me.isHorizontal();\n\t\tfunction IDMatches(meta) {\n\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t}\n\n\t\t// Calculate Range\n\t\tme.min = null;\n\t\tme.max = null;\n\t\tme.minNotZero = null;\n\n\t\tvar hasStacks = opts.stacked;\n\t\tif (hasStacks === undefined) {\n\t\t\thelpers$1.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (hasStacks) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n\t\t\t\t\tmeta.stack !== undefined) {\n\t\t\t\t\thasStacks = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (opts.stacked || hasStacks) {\n\t\t\tvar valuesPerStack = {};\n\n\t\t\thelpers$1.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\tvar key = [\n\t\t\t\t\tmeta.type,\n\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n\t\t\t\t\tmeta.stack\n\t\t\t\t].join('.');\n\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\tvaluesPerStack[key] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\tvar values = valuesPerStack[key];\n\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\n\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden || value < 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalues[index] = values[index] || 0;\n\t\t\t\t\t\tvalues[index] += value;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\thelpers$1.each(valuesPerStack, function(valuesForType) {\n\t\t\t\tif (valuesForType.length > 0) {\n\t\t\t\t\tvar minVal = helpers$1.min(valuesForType);\n\t\t\t\t\tvar maxVal = helpers$1.max(valuesForType);\n\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else {\n\t\t\thelpers$1.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\n\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden || value < 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n\t\t\t\t\t\t\tme.minNotZero = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Common base implementation to handle ticks.min, ticks.max\n\t\tthis.handleTickRangeOptions();\n\t},\n\n\thandleTickRangeOptions: function() {\n\t\tvar me = this;\n\t\tvar tickOpts = me.options.ticks;\n\t\tvar DEFAULT_MIN = 1;\n\t\tvar DEFAULT_MAX = 10;\n\n\t\tme.min = nonNegativeOrDefault(tickOpts.min, me.min);\n\t\tme.max = nonNegativeOrDefault(tickOpts.max, me.max);\n\n\t\tif (me.min === me.max) {\n\t\t\tif (me.min !== 0 && me.min !== null) {\n\t\t\t\tme.min = Math.pow(10, Math.floor(helpers$1.log10(me.min)) - 1);\n\t\t\t\tme.max = Math.pow(10, Math.floor(helpers$1.log10(me.max)) + 1);\n\t\t\t} else {\n\t\t\t\tme.min = DEFAULT_MIN;\n\t\t\t\tme.max = DEFAULT_MAX;\n\t\t\t}\n\t\t}\n\t\tif (me.min === null) {\n\t\t\tme.min = Math.pow(10, Math.floor(helpers$1.log10(me.max)) - 1);\n\t\t}\n\t\tif (me.max === null) {\n\t\t\tme.max = me.min !== 0\n\t\t\t\t? Math.pow(10, Math.floor(helpers$1.log10(me.min)) + 1)\n\t\t\t\t: DEFAULT_MAX;\n\t\t}\n\t\tif (me.minNotZero === null) {\n\t\t\tif (me.min > 0) {\n\t\t\t\tme.minNotZero = me.min;\n\t\t\t} else if (me.max < 1) {\n\t\t\t\tme.minNotZero = Math.pow(10, Math.floor(helpers$1.log10(me.max)));\n\t\t\t} else {\n\t\t\t\tme.minNotZero = DEFAULT_MIN;\n\t\t\t}\n\t\t}\n\t},\n\n\tbuildTicks: function() {\n\t\tvar me = this;\n\t\tvar tickOpts = me.options.ticks;\n\t\tvar reverse = !me.isHorizontal();\n\n\t\tvar generationOptions = {\n\t\t\tmin: nonNegativeOrDefault(tickOpts.min),\n\t\t\tmax: nonNegativeOrDefault(tickOpts.max)\n\t\t};\n\t\tvar ticks = me.ticks = generateTicks$1(generationOptions, me);\n\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t// range of the scale\n\t\tme.max = helpers$1.max(ticks);\n\t\tme.min = helpers$1.min(ticks);\n\n\t\tif (tickOpts.reverse) {\n\t\t\treverse = !reverse;\n\t\t\tme.start = me.max;\n\t\t\tme.end = me.min;\n\t\t} else {\n\t\t\tme.start = me.min;\n\t\t\tme.end = me.max;\n\t\t}\n\t\tif (reverse) {\n\t\t\tticks.reverse();\n\t\t}\n\t},\n\n\tconvertTicksToLabels: function() {\n\t\tthis.tickValues = this.ticks.slice();\n\n\t\tcore_scale.prototype.convertTicksToLabels.call(this);\n\t},\n\n\t// Get the correct tooltip label\n\tgetLabelForIndex: function(index, datasetIndex) {\n\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t},\n\n\tgetPixelForTick: function(index) {\n\t\treturn this.getPixelForValue(this.tickValues[index]);\n\t},\n\n\t/**\n\t * Returns the value of the first tick.\n\t * @param {number} value - The minimum not zero value.\n\t * @return {number} The first tick value.\n\t * @private\n\t */\n\t_getFirstTickValue: function(value) {\n\t\tvar exp = Math.floor(helpers$1.log10(value));\n\t\tvar significand = Math.floor(value / Math.pow(10, exp));\n\n\t\treturn significand * Math.pow(10, exp);\n\t},\n\n\tgetPixelForValue: function(value) {\n\t\tvar me = this;\n\t\tvar tickOpts = me.options.ticks;\n\t\tvar reverse = tickOpts.reverse;\n\t\tvar log10 = helpers$1.log10;\n\t\tvar firstTickValue = me._getFirstTickValue(me.minNotZero);\n\t\tvar offset = 0;\n\t\tvar innerDimension, pixel, start, end, sign;\n\n\t\tvalue = +me.getRightValue(value);\n\t\tif (reverse) {\n\t\t\tstart = me.end;\n\t\t\tend = me.start;\n\t\t\tsign = -1;\n\t\t} else {\n\t\t\tstart = me.start;\n\t\t\tend = me.end;\n\t\t\tsign = 1;\n\t\t}\n\t\tif (me.isHorizontal()) {\n\t\t\tinnerDimension = me.width;\n\t\t\tpixel = reverse ? me.right : me.left;\n\t\t} else {\n\t\t\tinnerDimension = me.height;\n\t\t\tsign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0)\n\t\t\tpixel = reverse ? me.top : me.bottom;\n\t\t}\n\t\tif (value !== start) {\n\t\t\tif (start === 0) { // include zero tick\n\t\t\t\toffset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);\n\t\t\t\tinnerDimension -= offset;\n\t\t\t\tstart = firstTickValue;\n\t\t\t}\n\t\t\tif (value !== 0) {\n\t\t\t\toffset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start));\n\t\t\t}\n\t\t\tpixel += sign * offset;\n\t\t}\n\t\treturn pixel;\n\t},\n\n\tgetValueForPixel: function(pixel) {\n\t\tvar me = this;\n\t\tvar tickOpts = me.options.ticks;\n\t\tvar reverse = tickOpts.reverse;\n\t\tvar log10 = helpers$1.log10;\n\t\tvar firstTickValue = me._getFirstTickValue(me.minNotZero);\n\t\tvar innerDimension, start, end, value;\n\n\t\tif (reverse) {\n\t\t\tstart = me.end;\n\t\t\tend = me.start;\n\t\t} else {\n\t\t\tstart = me.start;\n\t\t\tend = me.end;\n\t\t}\n\t\tif (me.isHorizontal()) {\n\t\t\tinnerDimension = me.width;\n\t\t\tvalue = reverse ? me.right - pixel : pixel - me.left;\n\t\t} else {\n\t\t\tinnerDimension = me.height;\n\t\t\tvalue = reverse ? pixel - me.top : me.bottom - pixel;\n\t\t}\n\t\tif (value !== start) {\n\t\t\tif (start === 0) { // include zero tick\n\t\t\t\tvar offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);\n\t\t\t\tvalue -= offset;\n\t\t\t\tinnerDimension -= offset;\n\t\t\t\tstart = firstTickValue;\n\t\t\t}\n\t\t\tvalue *= log10(end) - log10(start);\n\t\t\tvalue /= innerDimension;\n\t\t\tvalue = Math.pow(10, log10(start) + value);\n\t\t}\n\t\treturn value;\n\t}\n});\n\n// INTERNAL: static default options, registered in src/index.js\nvar _defaults$2 = defaultConfig$2;\nscale_logarithmic._defaults = _defaults$2;\n\nvar valueOrDefault$b = helpers$1.valueOrDefault;\nvar valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\nvar resolve$7 = helpers$1.options.resolve;\n\nvar defaultConfig$3 = {\n\tdisplay: true,\n\n\t// Boolean - Whether to animate scaling the chart from the centre\n\tanimate: true,\n\tposition: 'chartArea',\n\n\tangleLines: {\n\t\tdisplay: true,\n\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\tlineWidth: 1,\n\t\tborderDash: [],\n\t\tborderDashOffset: 0.0\n\t},\n\n\tgridLines: {\n\t\tcircular: false\n\t},\n\n\t// label settings\n\tticks: {\n\t\t// Boolean - Show a backdrop to the scale label\n\t\tshowLabelBackdrop: true,\n\n\t\t// String - The colour of the label backdrop\n\t\tbackdropColor: 'rgba(255,255,255,0.75)',\n\n\t\t// Number - The backdrop padding above & below the label in pixels\n\t\tbackdropPaddingY: 2,\n\n\t\t// Number - The backdrop padding to the side of the label in pixels\n\t\tbackdropPaddingX: 2,\n\n\t\tcallback: core_ticks.formatters.linear\n\t},\n\n\tpointLabels: {\n\t\t// Boolean - if true, show point labels\n\t\tdisplay: true,\n\n\t\t// Number - Point label font size in pixels\n\t\tfontSize: 10,\n\n\t\t// Function - Used to convert point labels\n\t\tcallback: function(label) {\n\t\t\treturn label;\n\t\t}\n\t}\n};\n\nfunction getValueCount(scale) {\n\tvar opts = scale.options;\n\treturn opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;\n}\n\nfunction getTickBackdropHeight(opts) {\n\tvar tickOpts = opts.ticks;\n\n\tif (tickOpts.display && opts.display) {\n\t\treturn valueOrDefault$b(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\n\t}\n\treturn 0;\n}\n\nfunction measureLabelSize(ctx, lineHeight, label) {\n\tif (helpers$1.isArray(label)) {\n\t\treturn {\n\t\t\tw: helpers$1.longestText(ctx, ctx.font, label),\n\t\t\th: label.length * lineHeight\n\t\t};\n\t}\n\n\treturn {\n\t\tw: ctx.measureText(label).width,\n\t\th: lineHeight\n\t};\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n\tif (angle === min || angle === max) {\n\t\treturn {\n\t\t\tstart: pos - (size / 2),\n\t\t\tend: pos + (size / 2)\n\t\t};\n\t} else if (angle < min || angle > max) {\n\t\treturn {\n\t\t\tstart: pos - size,\n\t\t\tend: pos\n\t\t};\n\t}\n\n\treturn {\n\t\tstart: pos,\n\t\tend: pos + size\n\t};\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n\t// Right, this is really confusing and there is a lot of maths going on here\n\t// The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n\t//\n\t// Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n\t//\n\t// Solution:\n\t//\n\t// We assume the radius of the polygon is half the size of the canvas at first\n\t// at each index we check if the text overlaps.\n\t//\n\t// Where it does, we store that angle and that index.\n\t//\n\t// After finding the largest index and angle we calculate how much we need to remove\n\t// from the shape radius to move the point inwards by that x.\n\t//\n\t// We average the left and right distances to get the maximum shape radius that can fit in the box\n\t// along with labels.\n\t//\n\t// Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n\t// on each side, removing that from the size, halving it and adding the left x protrusion width.\n\t//\n\t// This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n\t// and position it in the most space efficient manner\n\t//\n\t// https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n\tvar plFont = helpers$1.options._parseFont(scale.options.pointLabels);\n\n\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\tvar furthestLimits = {\n\t\tl: 0,\n\t\tr: scale.width,\n\t\tt: 0,\n\t\tb: scale.height - scale.paddingTop\n\t};\n\tvar furthestAngles = {};\n\tvar i, textSize, pointPosition;\n\n\tscale.ctx.font = plFont.string;\n\tscale._pointLabelSizes = [];\n\n\tvar valueCount = getValueCount(scale);\n\tfor (i = 0; i < valueCount; i++) {\n\t\tpointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\n\t\ttextSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i] || '');\n\t\tscale._pointLabelSizes[i] = textSize;\n\n\t\t// Add quarter circle to make degree 0 mean top of circle\n\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\tvar angle = helpers$1.toDegrees(angleRadians) % 360;\n\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n\t\tif (hLimits.start < furthestLimits.l) {\n\t\t\tfurthestLimits.l = hLimits.start;\n\t\t\tfurthestAngles.l = angleRadians;\n\t\t}\n\n\t\tif (hLimits.end > furthestLimits.r) {\n\t\t\tfurthestLimits.r = hLimits.end;\n\t\t\tfurthestAngles.r = angleRadians;\n\t\t}\n\n\t\tif (vLimits.start < furthestLimits.t) {\n\t\t\tfurthestLimits.t = vLimits.start;\n\t\t\tfurthestAngles.t = angleRadians;\n\t\t}\n\n\t\tif (vLimits.end > furthestLimits.b) {\n\t\t\tfurthestLimits.b = vLimits.end;\n\t\t\tfurthestAngles.b = angleRadians;\n\t\t}\n\t}\n\n\tscale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n}\n\nfunction getTextAlignForAngle(angle) {\n\tif (angle === 0 || angle === 180) {\n\t\treturn 'center';\n\t} else if (angle < 180) {\n\t\treturn 'left';\n\t}\n\n\treturn 'right';\n}\n\nfunction fillText(ctx, text, position, lineHeight) {\n\tvar y = position.y + lineHeight / 2;\n\tvar i, ilen;\n\n\tif (helpers$1.isArray(text)) {\n\t\tfor (i = 0, ilen = text.length; i < ilen; ++i) {\n\t\t\tctx.fillText(text[i], position.x, y);\n\t\t\ty += lineHeight;\n\t\t}\n\t} else {\n\t\tctx.fillText(text, position.x, y);\n\t}\n}\n\nfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\n\tif (angle === 90 || angle === 270) {\n\t\tposition.y -= (textSize.h / 2);\n\t} else if (angle > 270 || angle < 90) {\n\t\tposition.y -= textSize.h;\n\t}\n}\n\nfunction drawPointLabels(scale) {\n\tvar ctx = scale.ctx;\n\tvar opts = scale.options;\n\tvar angleLineOpts = opts.angleLines;\n\tvar gridLineOpts = opts.gridLines;\n\tvar pointLabelOpts = opts.pointLabels;\n\tvar lineWidth = valueOrDefault$b(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\n\tvar lineColor = valueOrDefault$b(angleLineOpts.color, gridLineOpts.color);\n\tvar tickBackdropHeight = getTickBackdropHeight(opts);\n\n\tctx.save();\n\tctx.lineWidth = lineWidth;\n\tctx.strokeStyle = lineColor;\n\tif (ctx.setLineDash) {\n\t\tctx.setLineDash(resolve$7([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\n\t\tctx.lineDashOffset = resolve$7([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\n\t}\n\n\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n\n\t// Point Label Font\n\tvar plFont = helpers$1.options._parseFont(pointLabelOpts);\n\n\tctx.font = plFont.string;\n\tctx.textBaseline = 'middle';\n\n\tfor (var i = getValueCount(scale) - 1; i >= 0; i--) {\n\t\tif (angleLineOpts.display && lineWidth && lineColor) {\n\t\t\tvar outerPosition = scale.getPointPosition(i, outerDistance);\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(scale.xCenter, scale.yCenter);\n\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\tctx.stroke();\n\t\t}\n\n\t\tif (pointLabelOpts.display) {\n\t\t\t// Extra pixels out for some label spacing\n\t\t\tvar extra = (i === 0 ? tickBackdropHeight / 2 : 0);\n\t\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5);\n\n\t\t\t// Keep this in loop since we may support array properties here\n\t\t\tvar pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\n\t\t\tctx.fillStyle = pointLabelFontColor;\n\n\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\tvar angle = helpers$1.toDegrees(angleRadians);\n\t\t\tctx.textAlign = getTextAlignForAngle(angle);\n\t\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n\t\t\tfillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.lineHeight);\n\t\t}\n\t}\n\tctx.restore();\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\n\tvar ctx = scale.ctx;\n\tvar circular = gridLineOpts.circular;\n\tvar valueCount = getValueCount(scale);\n\tvar lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\n\tvar lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\n\tvar pointPosition;\n\n\tif ((!circular && !valueCount) || !lineColor || !lineWidth) {\n\t\treturn;\n\t}\n\n\tctx.save();\n\tctx.strokeStyle = lineColor;\n\tctx.lineWidth = lineWidth;\n\tif (ctx.setLineDash) {\n\t\tctx.setLineDash(gridLineOpts.borderDash || []);\n\t\tctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\n\t}\n\n\tctx.beginPath();\n\tif (circular) {\n\t\t// Draw circular arcs between the points\n\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n\t} else {\n\t\t// Draw straight lines connecting each index\n\t\tpointPosition = scale.getPointPosition(0, radius);\n\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\n\t\tfor (var i = 1; i < valueCount; i++) {\n\t\t\tpointPosition = scale.getPointPosition(i, radius);\n\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t}\n\t}\n\tctx.closePath();\n\tctx.stroke();\n\tctx.restore();\n}\n\nfunction numberOrZero(param) {\n\treturn helpers$1.isNumber(param) ? param : 0;\n}\n\nvar scale_radialLinear = scale_linearbase.extend({\n\tsetDimensions: function() {\n\t\tvar me = this;\n\n\t\t// Set the unconstrained dimension before label rotation\n\t\tme.width = me.maxWidth;\n\t\tme.height = me.maxHeight;\n\t\tme.paddingTop = getTickBackdropHeight(me.options) / 2;\n\t\tme.xCenter = Math.floor(me.width / 2);\n\t\tme.yCenter = Math.floor((me.height - me.paddingTop) / 2);\n\t\tme.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\n\t},\n\n\tdetermineDataLimits: function() {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar min = Number.POSITIVE_INFINITY;\n\t\tvar max = Number.NEGATIVE_INFINITY;\n\n\t\thelpers$1.each(chart.data.datasets, function(dataset, datasetIndex) {\n\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\n\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tmin = Math.min(value, min);\n\t\t\t\t\tmax = Math.max(value, max);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tme.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\n\t\tme.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\n\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\tme.handleTickRangeOptions();\n\t},\n\n\t// Returns the maximum number of ticks based on the scale dimension\n\t_computeTickLimit: function() {\n\t\treturn Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n\t},\n\n\tconvertTicksToLabels: function() {\n\t\tvar me = this;\n\n\t\tscale_linearbase.prototype.convertTicksToLabels.call(me);\n\n\t\t// Point labels\n\t\tme.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n\t},\n\n\tgetLabelForIndex: function(index, datasetIndex) {\n\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t},\n\n\tfit: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\n\t\tif (opts.display && opts.pointLabels.display) {\n\t\t\tfitWithPointLabels(me);\n\t\t} else {\n\t\t\tme.setCenterPoint(0, 0, 0, 0);\n\t\t}\n\t},\n\n\t/**\n\t * Set radius reductions and determine new radius and center point\n\t * @private\n\t */\n\tsetReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\n\t\tvar me = this;\n\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\n\n\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\n\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\n\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\n\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\n\n\t\tme.drawingArea = Math.min(\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n\t},\n\n\tsetCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\n\t\tvar me = this;\n\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\n\t\tvar maxLeft = leftMovement + me.drawingArea;\n\t\tvar maxTop = topMovement + me.drawingArea;\n\t\tvar maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;\n\n\t\tme.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);\n\t\tme.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);\n\t},\n\n\tgetIndexAngle: function(index) {\n\t\tvar angleMultiplier = (Math.PI * 2) / getValueCount(this);\n\t\tvar startAngle = this.chart.options && this.chart.options.startAngle ?\n\t\t\tthis.chart.options.startAngle :\n\t\t\t0;\n\n\t\tvar startAngleRadians = startAngle * Math.PI * 2 / 360;\n\n\t\t// Start from the top instead of right, so remove a quarter of the circle\n\t\treturn index * angleMultiplier + startAngleRadians;\n\t},\n\n\tgetDistanceFromCenterForValue: function(value) {\n\t\tvar me = this;\n\n\t\tif (value === null) {\n\t\t\treturn 0; // null always in center\n\t\t}\n\n\t\t// Take into account half font size + the yPadding of the top value\n\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\n\t\tif (me.options.ticks.reverse) {\n\t\t\treturn (me.max - value) * scalingFactor;\n\t\t}\n\t\treturn (value - me.min) * scalingFactor;\n\t},\n\n\tgetPointPosition: function(index, distanceFromCenter) {\n\t\tvar me = this;\n\t\tvar thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\n\t\treturn {\n\t\t\tx: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\n\t\t\ty: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\n\t\t};\n\t},\n\n\tgetPointPositionForValue: function(index, value) {\n\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n\t},\n\n\tgetBasePosition: function() {\n\t\tvar me = this;\n\t\tvar min = me.min;\n\t\tvar max = me.max;\n\n\t\treturn me.getPointPositionForValue(0,\n\t\t\tme.beginAtZero ? 0 :\n\t\t\tmin < 0 && max < 0 ? max :\n\t\t\tmin > 0 && max > 0 ? min :\n\t\t\t0);\n\t},\n\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar gridLineOpts = opts.gridLines;\n\t\tvar tickOpts = opts.ticks;\n\n\t\tif (opts.display) {\n\t\t\tvar ctx = me.ctx;\n\t\t\tvar startAngle = this.getIndexAngle(0);\n\t\t\tvar tickFont = helpers$1.options._parseFont(tickOpts);\n\n\t\t\tif (opts.angleLines.display || opts.pointLabels.display) {\n\t\t\t\tdrawPointLabels(me);\n\t\t\t}\n\n\t\t\thelpers$1.each(me.ticks, function(label, index) {\n\t\t\t\t// Don't draw a centre value (if it is minimum)\n\t\t\t\tif (index > 0 || tickOpts.reverse) {\n\t\t\t\t\tvar yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n\n\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\tif (gridLineOpts.display && index !== 0) {\n\t\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, yCenterOffset, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tickOpts.display) {\n\t\t\t\t\t\tvar tickFontColor = valueOrDefault$b(tickOpts.fontColor, core_defaults.global.defaultFontColor);\n\t\t\t\t\t\tctx.font = tickFont.string;\n\n\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\tctx.translate(me.xCenter, me.yCenter);\n\t\t\t\t\t\tctx.rotate(startAngle);\n\n\t\t\t\t\t\tif (tickOpts.showLabelBackdrop) {\n\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\n\t\t\t\t\t\t\tctx.fillRect(\n\t\t\t\t\t\t\t\t-labelWidth / 2 - tickOpts.backdropPaddingX,\n\t\t\t\t\t\t\t\t-yCenterOffset - tickFont.size / 2 - tickOpts.backdropPaddingY,\n\t\t\t\t\t\t\t\tlabelWidth + tickOpts.backdropPaddingX * 2,\n\t\t\t\t\t\t\t\ttickFont.size + tickOpts.backdropPaddingY * 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\tctx.fillStyle = tickFontColor;\n\t\t\t\t\t\tctx.fillText(label, 0, -yCenterOffset);\n\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n});\n\n// INTERNAL: static default options, registered in src/index.js\nvar _defaults$3 = defaultConfig$3;\nscale_radialLinear._defaults = _defaults$3;\n\nvar valueOrDefault$c = helpers$1.valueOrDefault;\n\n// Integer constants are from the ES6 spec.\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\nvar INTERVALS = {\n\tmillisecond: {\n\t\tcommon: true,\n\t\tsize: 1,\n\t\tsteps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n\t},\n\tsecond: {\n\t\tcommon: true,\n\t\tsize: 1000,\n\t\tsteps: [1, 2, 5, 10, 15, 30]\n\t},\n\tminute: {\n\t\tcommon: true,\n\t\tsize: 60000,\n\t\tsteps: [1, 2, 5, 10, 15, 30]\n\t},\n\thour: {\n\t\tcommon: true,\n\t\tsize: 3600000,\n\t\tsteps: [1, 2, 3, 6, 12]\n\t},\n\tday: {\n\t\tcommon: true,\n\t\tsize: 86400000,\n\t\tsteps: [1, 2, 5]\n\t},\n\tweek: {\n\t\tcommon: false,\n\t\tsize: 604800000,\n\t\tsteps: [1, 2, 3, 4]\n\t},\n\tmonth: {\n\t\tcommon: true,\n\t\tsize: 2.628e9,\n\t\tsteps: [1, 2, 3]\n\t},\n\tquarter: {\n\t\tcommon: false,\n\t\tsize: 7.884e9,\n\t\tsteps: [1, 2, 3, 4]\n\t},\n\tyear: {\n\t\tcommon: true,\n\t\tsize: 3.154e10\n\t}\n};\n\nvar UNITS = Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n\treturn a - b;\n}\n\nfunction arrayUnique(items) {\n\tvar hash = {};\n\tvar out = [];\n\tvar i, ilen, item;\n\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\titem = items[i];\n\t\tif (!hash[item]) {\n\t\t\thash[item] = true;\n\t\t\tout.push(item);\n\t\t}\n\t}\n\n\treturn out;\n}\n\n/**\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n * extremity (left + width or top + height). Note that it would be more optimized to directly\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n *\n * @param {number[]} timestamps - timestamps sorted from lowest to highest.\n * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\n * If 'series', timestamps will be positioned at the same distance from each other. In this\n * case, only timestamps that break the time linearity are registered, meaning that in the\n * best case, all timestamps are linear, the table contains only min and max.\n */\nfunction buildLookupTable(timestamps, min, max, distribution) {\n\tif (distribution === 'linear' || !timestamps.length) {\n\t\treturn [\n\t\t\t{time: min, pos: 0},\n\t\t\t{time: max, pos: 1}\n\t\t];\n\t}\n\n\tvar table = [];\n\tvar items = [min];\n\tvar i, ilen, prev, curr, next;\n\n\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\tcurr = timestamps[i];\n\t\tif (curr > min && curr < max) {\n\t\t\titems.push(curr);\n\t\t}\n\t}\n\n\titems.push(max);\n\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\tnext = items[i + 1];\n\t\tprev = items[i - 1];\n\t\tcurr = items[i];\n\n\t\t// only add points that breaks the scale linearity\n\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n\t\t\ttable.push({time: curr, pos: i / (ilen - 1)});\n\t\t}\n\t}\n\n\treturn table;\n}\n\n// @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\nfunction lookup(table, key, value) {\n\tvar lo = 0;\n\tvar hi = table.length - 1;\n\tvar mid, i0, i1;\n\n\twhile (lo >= 0 && lo <= hi) {\n\t\tmid = (lo + hi) >> 1;\n\t\ti0 = table[mid - 1] || null;\n\t\ti1 = table[mid];\n\n\t\tif (!i0) {\n\t\t\t// given value is outside table (before first item)\n\t\t\treturn {lo: null, hi: i1};\n\t\t} else if (i1[key] < value) {\n\t\t\tlo = mid + 1;\n\t\t} else if (i0[key] > value) {\n\t\t\thi = mid - 1;\n\t\t} else {\n\t\t\treturn {lo: i0, hi: i1};\n\t\t}\n\t}\n\n\t// given value is outside table (after last item)\n\treturn {lo: i1, hi: null};\n}\n\n/**\n * Linearly interpolates the given source `value` using the table items `skey` values and\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\n * index [0, 1] or [n - 1, n] are used for the interpolation.\n */\nfunction interpolate$1(table, skey, sval, tkey) {\n\tvar range = lookup(table, skey, sval);\n\n\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\n\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n\n\tvar span = next[skey] - prev[skey];\n\tvar ratio = span ? (sval - prev[skey]) / span : 0;\n\tvar offset = (next[tkey] - prev[tkey]) * ratio;\n\n\treturn prev[tkey] + offset;\n}\n\nfunction toTimestamp(scale, input) {\n\tvar adapter = scale._adapter;\n\tvar options = scale.options.time;\n\tvar parser = options.parser;\n\tvar format = parser || options.format;\n\tvar value = input;\n\n\tif (typeof parser === 'function') {\n\t\tvalue = parser(value);\n\t}\n\n\t// Only parse if its not a timestamp already\n\tif (!helpers$1.isFinite(value)) {\n\t\tvalue = typeof format === 'string'\n\t\t\t? adapter.parse(value, format)\n\t\t\t: adapter.parse(value);\n\t}\n\n\tif (value !== null) {\n\t\treturn +value;\n\t}\n\n\t// Labels are in an incompatible format and no `parser` has been provided.\n\t// The user might still use the deprecated `format` option for parsing.\n\tif (!parser && typeof format === 'function') {\n\t\tvalue = format(input);\n\n\t\t// `format` could return something else than a timestamp, if so, parse it\n\t\tif (!helpers$1.isFinite(value)) {\n\t\t\tvalue = adapter.parse(value);\n\t\t}\n\t}\n\n\treturn value;\n}\n\nfunction parse(scale, input) {\n\tif (helpers$1.isNullOrUndef(input)) {\n\t\treturn null;\n\t}\n\n\tvar options = scale.options.time;\n\tvar value = toTimestamp(scale, scale.getRightValue(input));\n\tif (value === null) {\n\t\treturn value;\n\t}\n\n\tif (options.round) {\n\t\tvalue = +scale._adapter.startOf(value, options.round);\n\t}\n\n\treturn value;\n}\n\n/**\n * Returns the number of unit to skip to be able to display up to `capacity` number of ticks\n * in `unit` for the given `min` / `max` range and respecting the interval steps constraints.\n */\nfunction determineStepSize(min, max, unit, capacity) {\n\tvar range = max - min;\n\tvar interval = INTERVALS[unit];\n\tvar milliseconds = interval.size;\n\tvar steps = interval.steps;\n\tvar i, ilen, factor;\n\n\tif (!steps) {\n\t\treturn Math.ceil(range / (capacity * milliseconds));\n\t}\n\n\tfor (i = 0, ilen = steps.length; i < ilen; ++i) {\n\t\tfactor = steps[i];\n\t\tif (Math.ceil(range / (milliseconds * factor)) <= capacity) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn factor;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n\tvar ilen = UNITS.length;\n\tvar i, interval, factor;\n\n\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n\t\tinterval = INTERVALS[UNITS[i]];\n\t\tfactor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;\n\n\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n\t\t\treturn UNITS[i];\n\t\t}\n\t}\n\n\treturn UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n */\nfunction determineUnitForFormatting(scale, ticks, minUnit, min, max) {\n\tvar ilen = UNITS.length;\n\tvar i, unit;\n\n\tfor (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {\n\t\tunit = UNITS[i];\n\t\tif (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length) {\n\t\t\treturn unit;\n\t\t}\n\t}\n\n\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\nfunction determineMajorUnit(unit) {\n\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n\t\tif (INTERVALS[UNITS[i]].common) {\n\t\t\treturn UNITS[i];\n\t\t}\n\t}\n}\n\n/**\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n * `minor` unit, aligned on the `major` unit and using the given scale time `options`.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n */\nfunction generate(scale, min, max, capacity) {\n\tvar adapter = scale._adapter;\n\tvar options = scale.options;\n\tvar timeOpts = options.time;\n\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n\tvar major = determineMajorUnit(minor);\n\tvar stepSize = valueOrDefault$c(timeOpts.stepSize, timeOpts.unitStepSize);\n\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n\tvar majorTicksEnabled = options.ticks.major.enabled;\n\tvar interval = INTERVALS[minor];\n\tvar first = min;\n\tvar last = max;\n\tvar ticks = [];\n\tvar time;\n\n\tif (!stepSize) {\n\t\tstepSize = determineStepSize(min, max, minor, capacity);\n\t}\n\n\t// For 'week' unit, handle the first day of week option\n\tif (weekday) {\n\t\tfirst = +adapter.startOf(first, 'isoWeek', weekday);\n\t\tlast = +adapter.startOf(last, 'isoWeek', weekday);\n\t}\n\n\t// Align first/last ticks on unit\n\tfirst = +adapter.startOf(first, weekday ? 'day' : minor);\n\tlast = +adapter.startOf(last, weekday ? 'day' : minor);\n\n\t// Make sure that the last tick include max\n\tif (last < max) {\n\t\tlast = +adapter.add(last, 1, minor);\n\t}\n\n\ttime = first;\n\n\tif (majorTicksEnabled && major && !weekday && !timeOpts.round) {\n\t\t// Align the first tick on the previous `minor` unit aligned on the `major` unit:\n\t\t// we first aligned time on the previous `major` unit then add the number of full\n\t\t// stepSize there is between first and the previous major time.\n\t\ttime = +adapter.startOf(time, major);\n\t\ttime = +adapter.add(time, ~~((first - time) / (interval.size * stepSize)) * stepSize, minor);\n\t}\n\n\tfor (; time < last; time = +adapter.add(time, stepSize, minor)) {\n\t\tticks.push(+time);\n\t}\n\n\tticks.push(+time);\n\n\treturn ticks;\n}\n\n/**\n * Returns the start and end offsets from edges in the form of {start, end}\n * where each value is a relative width to the scale and ranges between 0 and 1.\n * They add extra margins on the both sides by scaling down the original scale.\n * Offsets are added when the `offset` option is true.\n */\nfunction computeOffsets(table, ticks, min, max, options) {\n\tvar start = 0;\n\tvar end = 0;\n\tvar first, last;\n\n\tif (options.offset && ticks.length) {\n\t\tif (!options.time.min) {\n\t\t\tfirst = interpolate$1(table, 'time', ticks[0], 'pos');\n\t\t\tif (ticks.length === 1) {\n\t\t\t\tstart = 1 - first;\n\t\t\t} else {\n\t\t\t\tstart = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\n\t\t\t}\n\t\t}\n\t\tif (!options.time.max) {\n\t\t\tlast = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\n\t\t\tif (ticks.length === 1) {\n\t\t\t\tend = last;\n\t\t\t} else {\n\t\t\t\tend = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {start: start, end: end};\n}\n\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n\tvar ticks = [];\n\tvar i, ilen, value, major;\n\n\tfor (i = 0, ilen = values.length; i < ilen; ++i) {\n\t\tvalue = values[i];\n\t\tmajor = majorUnit ? value === +scale._adapter.startOf(value, majorUnit) : false;\n\n\t\tticks.push({\n\t\t\tvalue: value,\n\t\t\tmajor: major\n\t\t});\n\t}\n\n\treturn ticks;\n}\n\nvar defaultConfig$4 = {\n\tposition: 'bottom',\n\n\t/**\n\t * Data distribution along the scale:\n\t * - 'linear': data are spread according to their time (distances can vary),\n\t * - 'series': data are spread at the same distance from each other.\n\t * @see https://github.com/chartjs/Chart.js/pull/4507\n\t * @since 2.7.0\n\t */\n\tdistribution: 'linear',\n\n\t/**\n\t * Scale boundary strategy (bypassed by min/max time options)\n\t * - `data`: make sure data are fully visible, ticks outside are removed\n\t * - `ticks`: make sure ticks are fully visible, data outside are truncated\n\t * @see https://github.com/chartjs/Chart.js/pull/4556\n\t * @since 2.7.0\n\t */\n\tbounds: 'data',\n\n\tadapters: {},\n\ttime: {\n\t\tparser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n\t\tformat: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from https://momentjs.com/docs/#/parsing/string-format/\n\t\tunit: false, // false == automatic or override with week, month, year, etc.\n\t\tround: false, // none, or override with week, month, year, etc.\n\t\tdisplayFormat: false, // DEPRECATED\n\t\tisoWeekday: false, // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\n\t\tminUnit: 'millisecond',\n\t\tdisplayFormats: {}\n\t},\n\tticks: {\n\t\tautoSkip: false,\n\n\t\t/**\n\t\t * Ticks generation input values:\n\t\t * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n\t\t * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n\t\t * - 'labels': generates ticks from user given `data.labels` values ONLY.\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\n\t\t * @since 2.7.0\n\t\t */\n\t\tsource: 'auto',\n\n\t\tmajor: {\n\t\t\tenabled: false\n\t\t}\n\t}\n};\n\nvar scale_time = core_scale.extend({\n\tinitialize: function() {\n\t\tthis.mergeTicksOptions();\n\t\tcore_scale.prototype.initialize.call(this);\n\t},\n\n\tupdate: function() {\n\t\tvar me = this;\n\t\tvar options = me.options;\n\t\tvar time = options.time || (options.time = {});\n\t\tvar adapter = me._adapter = new core_adapters._date(options.adapters.date);\n\n\t\t// DEPRECATIONS: output a message only one time per update\n\t\tif (time.format) {\n\t\t\tconsole.warn('options.time.format is deprecated and replaced by options.time.parser.');\n\t\t}\n\n\t\t// Backward compatibility: before introducing adapter, `displayFormats` was\n\t\t// supposed to contain *all* unit/string pairs but this can't be resolved\n\t\t// when loading the scale (adapters are loaded afterward), so let's populate\n\t\t// missing formats on update\n\t\thelpers$1.mergeIf(time.displayFormats, adapter.formats());\n\n\t\treturn core_scale.prototype.update.apply(me, arguments);\n\t},\n\n\t/**\n\t * Allows data to be referenced via 't' attribute\n\t */\n\tgetRightValue: function(rawValue) {\n\t\tif (rawValue && rawValue.t !== undefined) {\n\t\t\trawValue = rawValue.t;\n\t\t}\n\t\treturn core_scale.prototype.getRightValue.call(this, rawValue);\n\t},\n\n\tdetermineDataLimits: function() {\n\t\tvar me = this;\n\t\tvar chart = me.chart;\n\t\tvar adapter = me._adapter;\n\t\tvar timeOpts = me.options.time;\n\t\tvar unit = timeOpts.unit || 'day';\n\t\tvar min = MAX_INTEGER;\n\t\tvar max = MIN_INTEGER;\n\t\tvar timestamps = [];\n\t\tvar datasets = [];\n\t\tvar labels = [];\n\t\tvar i, j, ilen, jlen, data, timestamp;\n\t\tvar dataLabels = chart.data.labels || [];\n\n\t\t// Convert labels to timestamps\n\t\tfor (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\n\t\t\tlabels.push(parse(me, dataLabels[i]));\n\t\t}\n\n\t\t// Convert data to timestamps\n\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\tif (chart.isDatasetVisible(i)) {\n\t\t\t\tdata = chart.data.datasets[i].data;\n\n\t\t\t\t// Let's consider that all data have the same format.\n\t\t\t\tif (helpers$1.isObject(data[0])) {\n\t\t\t\t\tdatasets[i] = [];\n\n\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\n\t\t\t\t\t\ttimestamp = parse(me, data[j]);\n\t\t\t\t\t\ttimestamps.push(timestamp);\n\t\t\t\t\t\tdatasets[i][j] = timestamp;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (j = 0, jlen = labels.length; j < jlen; ++j) {\n\t\t\t\t\t\ttimestamps.push(labels[j]);\n\t\t\t\t\t}\n\t\t\t\t\tdatasets[i] = labels.slice(0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdatasets[i] = [];\n\t\t\t}\n\t\t}\n\n\t\tif (labels.length) {\n\t\t\t// Sort labels **after** data have been converted\n\t\t\tlabels = arrayUnique(labels).sort(sorter);\n\t\t\tmin = Math.min(min, labels[0]);\n\t\t\tmax = Math.max(max, labels[labels.length - 1]);\n\t\t}\n\n\t\tif (timestamps.length) {\n\t\t\ttimestamps = arrayUnique(timestamps).sort(sorter);\n\t\t\tmin = Math.min(min, timestamps[0]);\n\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\n\t\t}\n\n\t\tmin = parse(me, timeOpts.min) || min;\n\t\tmax = parse(me, timeOpts.max) || max;\n\n\t\t// In case there is no valid min/max, set limits based on unit time option\n\t\tmin = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\n\t\tmax = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max;\n\n\t\t// Make sure that max is strictly higher than min (required by the lookup table)\n\t\tme.min = Math.min(min, max);\n\t\tme.max = Math.max(min + 1, max);\n\n\t\t// PRIVATE\n\t\tme._horizontal = me.isHorizontal();\n\t\tme._table = [];\n\t\tme._timestamps = {\n\t\t\tdata: timestamps,\n\t\t\tdatasets: datasets,\n\t\t\tlabels: labels\n\t\t};\n\t},\n\n\tbuildTicks: function() {\n\t\tvar me = this;\n\t\tvar min = me.min;\n\t\tvar max = me.max;\n\t\tvar options = me.options;\n\t\tvar timeOpts = options.time;\n\t\tvar timestamps = [];\n\t\tvar ticks = [];\n\t\tvar i, ilen, timestamp;\n\n\t\tswitch (options.ticks.source) {\n\t\tcase 'data':\n\t\t\ttimestamps = me._timestamps.data;\n\t\t\tbreak;\n\t\tcase 'labels':\n\t\t\ttimestamps = me._timestamps.labels;\n\t\t\tbreak;\n\t\tcase 'auto':\n\t\tdefault:\n\t\t\ttimestamps = generate(me, min, max, me.getLabelCapacity(min), options);\n\t\t}\n\n\t\tif (options.bounds === 'ticks' && timestamps.length) {\n\t\t\tmin = timestamps[0];\n\t\t\tmax = timestamps[timestamps.length - 1];\n\t\t}\n\n\t\t// Enforce limits with user min/max options\n\t\tmin = parse(me, timeOpts.min) || min;\n\t\tmax = parse(me, timeOpts.max) || max;\n\n\t\t// Remove ticks outside the min/max range\n\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\t\ttimestamp = timestamps[i];\n\t\t\tif (timestamp >= min && timestamp <= max) {\n\t\t\t\tticks.push(timestamp);\n\t\t\t}\n\t\t}\n\n\t\tme.min = min;\n\t\tme.max = max;\n\n\t\t// PRIVATE\n\t\tme._unit = timeOpts.unit || determineUnitForFormatting(me, ticks, timeOpts.minUnit, me.min, me.max);\n\t\tme._majorUnit = determineMajorUnit(me._unit);\n\t\tme._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);\n\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\n\n\t\tif (options.ticks.reverse) {\n\t\t\tticks.reverse();\n\t\t}\n\n\t\treturn ticksFromTimestamps(me, ticks, me._majorUnit);\n\t},\n\n\tgetLabelForIndex: function(index, datasetIndex) {\n\t\tvar me = this;\n\t\tvar adapter = me._adapter;\n\t\tvar data = me.chart.data;\n\t\tvar timeOpts = me.options.time;\n\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\n\t\tvar value = data.datasets[datasetIndex].data[index];\n\n\t\tif (helpers$1.isObject(value)) {\n\t\t\tlabel = me.getRightValue(value);\n\t\t}\n\t\tif (timeOpts.tooltipFormat) {\n\t\t\treturn adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\n\t\t}\n\t\tif (typeof label === 'string') {\n\t\t\treturn label;\n\t\t}\n\t\treturn adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\n\t},\n\n\t/**\n\t * Function to format an individual tick mark\n\t * @private\n\t */\n\ttickFormatFunction: function(time, index, ticks, format) {\n\t\tvar me = this;\n\t\tvar adapter = me._adapter;\n\t\tvar options = me.options;\n\t\tvar formats = options.time.displayFormats;\n\t\tvar minorFormat = formats[me._unit];\n\t\tvar majorUnit = me._majorUnit;\n\t\tvar majorFormat = formats[majorUnit];\n\t\tvar majorTime = +adapter.startOf(time, majorUnit);\n\t\tvar majorTickOpts = options.ticks.major;\n\t\tvar major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;\n\t\tvar label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\n\t\tvar tickOpts = major ? majorTickOpts : options.ticks.minor;\n\t\tvar formatter = valueOrDefault$c(tickOpts.callback, tickOpts.userCallback);\n\n\t\treturn formatter ? formatter(label, index, ticks) : label;\n\t},\n\n\tconvertTicksToLabels: function(ticks) {\n\t\tvar labels = [];\n\t\tvar i, ilen;\n\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\t\tlabels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\n\t\t}\n\n\t\treturn labels;\n\t},\n\n\t/**\n\t * @private\n\t */\n\tgetPixelForOffset: function(time) {\n\t\tvar me = this;\n\t\tvar isReverse = me.options.ticks.reverse;\n\t\tvar size = me._horizontal ? me.width : me.height;\n\t\tvar start = me._horizontal ? isReverse ? me.right : me.left : isReverse ? me.bottom : me.top;\n\t\tvar pos = interpolate$1(me._table, 'time', time, 'pos');\n\t\tvar offset = size * (me._offsets.start + pos) / (me._offsets.start + 1 + me._offsets.end);\n\n\t\treturn isReverse ? start - offset : start + offset;\n\t},\n\n\tgetPixelForValue: function(value, index, datasetIndex) {\n\t\tvar me = this;\n\t\tvar time = null;\n\n\t\tif (index !== undefined && datasetIndex !== undefined) {\n\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\n\t\t}\n\n\t\tif (time === null) {\n\t\t\ttime = parse(me, value);\n\t\t}\n\n\t\tif (time !== null) {\n\t\t\treturn me.getPixelForOffset(time);\n\t\t}\n\t},\n\n\tgetPixelForTick: function(index) {\n\t\tvar ticks = this.getTicks();\n\t\treturn index >= 0 && index < ticks.length ?\n\t\t\tthis.getPixelForOffset(ticks[index].value) :\n\t\t\tnull;\n\t},\n\n\tgetValueForPixel: function(pixel) {\n\t\tvar me = this;\n\t\tvar size = me._horizontal ? me.width : me.height;\n\t\tvar start = me._horizontal ? me.left : me.top;\n\t\tvar pos = (size ? (pixel - start) / size : 0) * (me._offsets.start + 1 + me._offsets.start) - me._offsets.end;\n\t\tvar time = interpolate$1(me._table, 'pos', pos, 'time');\n\n\t\t// DEPRECATION, we should return time directly\n\t\treturn me._adapter._create(time);\n\t},\n\n\t/**\n\t * Crude approximation of what the label width might be\n\t * @private\n\t */\n\tgetLabelWidth: function(label) {\n\t\tvar me = this;\n\t\tvar ticksOpts = me.options.ticks;\n\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\n\t\tvar angle = helpers$1.toRadians(ticksOpts.maxRotation);\n\t\tvar cosRotation = Math.cos(angle);\n\t\tvar sinRotation = Math.sin(angle);\n\t\tvar tickFontSize = valueOrDefault$c(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\n\n\t\treturn (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);\n\t},\n\n\t/**\n\t * @private\n\t */\n\tgetLabelCapacity: function(exampleTime) {\n\t\tvar me = this;\n\n\t\t// pick the longest format (milliseconds) for guestimation\n\t\tvar format = me.options.time.displayFormats.millisecond;\n\t\tvar exampleLabel = me.tickFormatFunction(exampleTime, 0, [], format);\n\t\tvar tickLabelWidth = me.getLabelWidth(exampleLabel);\n\t\tvar innerWidth = me.isHorizontal() ? me.width : me.height;\n\t\tvar capacity = Math.floor(innerWidth / tickLabelWidth);\n\n\t\treturn capacity > 0 ? capacity : 1;\n\t}\n});\n\n// INTERNAL: static default options, registered in src/index.js\nvar _defaults$4 = defaultConfig$4;\nscale_time._defaults = _defaults$4;\n\nvar scales = {\n\tcategory: scale_category,\n\tlinear: scale_linear,\n\tlogarithmic: scale_logarithmic,\n\tradialLinear: scale_radialLinear,\n\ttime: scale_time\n};\n\nvar FORMATS = {\n\tdatetime: 'MMM D, YYYY, h:mm:ss a',\n\tmillisecond: 'h:mm:ss.SSS a',\n\tsecond: 'h:mm:ss a',\n\tminute: 'h:mm a',\n\thour: 'hA',\n\tday: 'MMM D',\n\tweek: 'll',\n\tmonth: 'MMM YYYY',\n\tquarter: '[Q]Q - YYYY',\n\tyear: 'YYYY'\n};\n\ncore_adapters._date.override(typeof moment === 'function' ? {\n\t_id: 'moment', // DEBUG ONLY\n\n\tformats: function() {\n\t\treturn FORMATS;\n\t},\n\n\tparse: function(value, format) {\n\t\tif (typeof value === 'string' && typeof format === 'string') {\n\t\t\tvalue = moment(value, format);\n\t\t} else if (!(value instanceof moment)) {\n\t\t\tvalue = moment(value);\n\t\t}\n\t\treturn value.isValid() ? value.valueOf() : null;\n\t},\n\n\tformat: function(time, format) {\n\t\treturn moment(time).format(format);\n\t},\n\n\tadd: function(time, amount, unit) {\n\t\treturn moment(time).add(amount, unit).valueOf();\n\t},\n\n\tdiff: function(max, min, unit) {\n\t\treturn moment.duration(moment(max).diff(moment(min))).as(unit);\n\t},\n\n\tstartOf: function(time, unit, weekday) {\n\t\ttime = moment(time);\n\t\tif (unit === 'isoWeek') {\n\t\t\treturn time.isoWeekday(weekday).valueOf();\n\t\t}\n\t\treturn time.startOf(unit).valueOf();\n\t},\n\n\tendOf: function(time, unit) {\n\t\treturn moment(time).endOf(unit).valueOf();\n\t},\n\n\t// DEPRECATIONS\n\n\t/**\n\t * Provided for backward compatibility with scale.getValueForPixel().\n\t * @deprecated since version 2.8.0\n\t * @todo remove at version 3\n\t * @private\n\t */\n\t_create: function(time) {\n\t\treturn moment(time);\n\t},\n} : {});\n\ncore_defaults._set('global', {\n\tplugins: {\n\t\tfiller: {\n\t\t\tpropagate: true\n\t\t}\n\t}\n});\n\nvar mappers = {\n\tdataset: function(source) {\n\t\tvar index = source.fill;\n\t\tvar chart = source.chart;\n\t\tvar meta = chart.getDatasetMeta(index);\n\t\tvar visible = meta && chart.isDatasetVisible(index);\n\t\tvar points = (visible && meta.dataset._children) || [];\n\t\tvar length = points.length || 0;\n\n\t\treturn !length ? null : function(point, i) {\n\t\t\treturn (i < length && points[i]._view) || null;\n\t\t};\n\t},\n\n\tboundary: function(source) {\n\t\tvar boundary = source.boundary;\n\t\tvar x = boundary ? boundary.x : null;\n\t\tvar y = boundary ? boundary.y : null;\n\n\t\treturn function(point) {\n\t\t\treturn {\n\t\t\t\tx: x === null ? point.x : x,\n\t\t\t\ty: y === null ? point.y : y,\n\t\t\t};\n\t\t};\n\t}\n};\n\n// @todo if (fill[0] === '#')\nfunction decodeFill(el, index, count) {\n\tvar model = el._model || {};\n\tvar fill = model.fill;\n\tvar target;\n\n\tif (fill === undefined) {\n\t\tfill = !!model.backgroundColor;\n\t}\n\n\tif (fill === false || fill === null) {\n\t\treturn false;\n\t}\n\n\tif (fill === true) {\n\t\treturn 'origin';\n\t}\n\n\ttarget = parseFloat(fill, 10);\n\tif (isFinite(target) && Math.floor(target) === target) {\n\t\tif (fill[0] === '-' || fill[0] === '+') {\n\t\t\ttarget = index + target;\n\t\t}\n\n\t\tif (target === index || target < 0 || target >= count) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn target;\n\t}\n\n\tswitch (fill) {\n\t// compatibility\n\tcase 'bottom':\n\t\treturn 'start';\n\tcase 'top':\n\t\treturn 'end';\n\tcase 'zero':\n\t\treturn 'origin';\n\t// supported boundaries\n\tcase 'origin':\n\tcase 'start':\n\tcase 'end':\n\t\treturn fill;\n\t// invalid fill values\n\tdefault:\n\t\treturn false;\n\t}\n}\n\nfunction computeBoundary(source) {\n\tvar model = source.el._model || {};\n\tvar scale = source.el._scale || {};\n\tvar fill = source.fill;\n\tvar target = null;\n\tvar horizontal;\n\n\tif (isFinite(fill)) {\n\t\treturn null;\n\t}\n\n\t// Backward compatibility: until v3, we still need to support boundary values set on\n\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n\t// controllers might still use it (e.g. the Smith chart).\n\n\tif (fill === 'start') {\n\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n\t} else if (fill === 'end') {\n\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\n\t} else if (model.scaleZero !== undefined) {\n\t\ttarget = model.scaleZero;\n\t} else if (scale.getBasePosition) {\n\t\ttarget = scale.getBasePosition();\n\t} else if (scale.getBasePixel) {\n\t\ttarget = scale.getBasePixel();\n\t}\n\n\tif (target !== undefined && target !== null) {\n\t\tif (target.x !== undefined && target.y !== undefined) {\n\t\t\treturn target;\n\t\t}\n\n\t\tif (helpers$1.isFinite(target)) {\n\t\t\thorizontal = scale.isHorizontal();\n\t\t\treturn {\n\t\t\t\tx: horizontal ? target : null,\n\t\t\t\ty: horizontal ? null : target\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction resolveTarget(sources, index, propagate) {\n\tvar source = sources[index];\n\tvar fill = source.fill;\n\tvar visited = [index];\n\tvar target;\n\n\tif (!propagate) {\n\t\treturn fill;\n\t}\n\n\twhile (fill !== false && visited.indexOf(fill) === -1) {\n\t\tif (!isFinite(fill)) {\n\t\t\treturn fill;\n\t\t}\n\n\t\ttarget = sources[fill];\n\t\tif (!target) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (target.visible) {\n\t\t\treturn fill;\n\t\t}\n\n\t\tvisited.push(fill);\n\t\tfill = target.fill;\n\t}\n\n\treturn false;\n}\n\nfunction createMapper(source) {\n\tvar fill = source.fill;\n\tvar type = 'dataset';\n\n\tif (fill === false) {\n\t\treturn null;\n\t}\n\n\tif (!isFinite(fill)) {\n\t\ttype = 'boundary';\n\t}\n\n\treturn mappers[type](source);\n}\n\nfunction isDrawable(point) {\n\treturn point && !point.skip;\n}\n\nfunction drawArea(ctx, curve0, curve1, len0, len1) {\n\tvar i;\n\n\tif (!len0 || !len1) {\n\t\treturn;\n\t}\n\n\t// building first area curve (normal)\n\tctx.moveTo(curve0[0].x, curve0[0].y);\n\tfor (i = 1; i < len0; ++i) {\n\t\thelpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n\t}\n\n\t// joining the two area curves\n\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\n\n\t// building opposite area curve (reverse)\n\tfor (i = len1 - 1; i > 0; --i) {\n\t\thelpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n\t}\n}\n\nfunction doFill(ctx, points, mapper, view, color, loop) {\n\tvar count = points.length;\n\tvar span = view.spanGaps;\n\tvar curve0 = [];\n\tvar curve1 = [];\n\tvar len0 = 0;\n\tvar len1 = 0;\n\tvar i, ilen, index, p0, p1, d0, d1;\n\n\tctx.beginPath();\n\n\tfor (i = 0, ilen = (count + !!loop); i < ilen; ++i) {\n\t\tindex = i % count;\n\t\tp0 = points[index]._view;\n\t\tp1 = mapper(p0, index, view);\n\t\td0 = isDrawable(p0);\n\t\td1 = isDrawable(p1);\n\n\t\tif (d0 && d1) {\n\t\t\tlen0 = curve0.push(p0);\n\t\t\tlen1 = curve1.push(p1);\n\t\t} else if (len0 && len1) {\n\t\t\tif (!span) {\n\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\n\t\t\t\tlen0 = len1 = 0;\n\t\t\t\tcurve0 = [];\n\t\t\t\tcurve1 = [];\n\t\t\t} else {\n\t\t\t\tif (d0) {\n\t\t\t\t\tcurve0.push(p0);\n\t\t\t\t}\n\t\t\t\tif (d1) {\n\t\t\t\t\tcurve1.push(p1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdrawArea(ctx, curve0, curve1, len0, len1);\n\n\tctx.closePath();\n\tctx.fillStyle = color;\n\tctx.fill();\n}\n\nvar plugin_filler = {\n\tid: 'filler',\n\n\tafterDatasetsUpdate: function(chart, options) {\n\t\tvar count = (chart.data.datasets || []).length;\n\t\tvar propagate = options.propagate;\n\t\tvar sources = [];\n\t\tvar meta, i, el, source;\n\n\t\tfor (i = 0; i < count; ++i) {\n\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\tel = meta.dataset;\n\t\t\tsource = null;\n\n\t\t\tif (el && el._model && el instanceof elements.Line) {\n\t\t\t\tsource = {\n\t\t\t\t\tvisible: chart.isDatasetVisible(i),\n\t\t\t\t\tfill: decodeFill(el, i, count),\n\t\t\t\t\tchart: chart,\n\t\t\t\t\tel: el\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tmeta.$filler = source;\n\t\t\tsources.push(source);\n\t\t}\n\n\t\tfor (i = 0; i < count; ++i) {\n\t\t\tsource = sources[i];\n\t\t\tif (!source) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tsource.fill = resolveTarget(sources, i, propagate);\n\t\t\tsource.boundary = computeBoundary(source);\n\t\t\tsource.mapper = createMapper(source);\n\t\t}\n\t},\n\n\tbeforeDatasetDraw: function(chart, args) {\n\t\tvar meta = args.meta.$filler;\n\t\tif (!meta) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar ctx = chart.ctx;\n\t\tvar el = meta.el;\n\t\tvar view = el._view;\n\t\tvar points = el._children || [];\n\t\tvar mapper = meta.mapper;\n\t\tvar color = view.backgroundColor || core_defaults.global.defaultColor;\n\n\t\tif (mapper && color && points.length) {\n\t\t\thelpers$1.canvas.clipArea(ctx, chart.chartArea);\n\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\n\t\t\thelpers$1.canvas.unclipArea(ctx);\n\t\t}\n\t}\n};\n\nvar noop$1 = helpers$1.noop;\nvar valueOrDefault$d = helpers$1.valueOrDefault;\n\ncore_defaults._set('global', {\n\tlegend: {\n\t\tdisplay: true,\n\t\tposition: 'top',\n\t\tfullWidth: true,\n\t\treverse: false,\n\t\tweight: 1000,\n\n\t\t// a callback that will handle\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.datasetIndex;\n\t\t\tvar ci = this.chart;\n\t\t\tvar meta = ci.getDatasetMeta(index);\n\n\t\t\t// See controller.isDatasetVisible comment\n\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\n\n\t\t\t// We hid a dataset ... rerender the chart\n\t\t\tci.update();\n\t\t},\n\n\t\tonHover: null,\n\t\tonLeave: null,\n\n\t\tlabels: {\n\t\t\tboxWidth: 40,\n\t\t\tpadding: 10,\n\t\t\t// Generates labels shown in the legend\n\t\t\t// Valid properties to return:\n\t\t\t// text : text to display\n\t\t\t// fillStyle : fill of coloured box\n\t\t\t// strokeStyle: stroke of coloured box\n\t\t\t// hidden : if this legend item refers to a hidden item\n\t\t\t// lineCap : cap style for line\n\t\t\t// lineDash\n\t\t\t// lineDashOffset :\n\t\t\t// lineJoin :\n\t\t\t// lineWidth :\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\treturn helpers$1.isArray(data.datasets) ? data.datasets.map(function(dataset, i) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: dataset.label,\n\t\t\t\t\t\tfillStyle: (!helpers$1.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(i),\n\t\t\t\t\t\tlineCap: dataset.borderCapStyle,\n\t\t\t\t\t\tlineDash: dataset.borderDash,\n\t\t\t\t\t\tlineDashOffset: dataset.borderDashOffset,\n\t\t\t\t\t\tlineJoin: dataset.borderJoinStyle,\n\t\t\t\t\t\tlineWidth: dataset.borderWidth,\n\t\t\t\t\t\tstrokeStyle: dataset.borderColor,\n\t\t\t\t\t\tpointStyle: dataset.pointStyle,\n\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\n\t\t\t\t\t\tdatasetIndex: i\n\t\t\t\t\t};\n\t\t\t\t}, this) : [];\n\t\t\t}\n\t\t}\n\t},\n\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('');\n\t\treturn text.join('');\n\t}\n});\n\n/**\n * Helper function to get the box width based on the usePointStyle option\n * @param {object} labelopts - the label options on the legend\n * @param {number} fontSize - the label font size\n * @return {number} width of the color box area\n */\nfunction getBoxWidth(labelOpts, fontSize) {\n\treturn labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ?\n\t\tfontSize :\n\t\tlabelOpts.boxWidth;\n}\n\n/**\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n */\nvar Legend = core_element.extend({\n\n\tinitialize: function(config) {\n\t\thelpers$1.extend(this, config);\n\n\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\tthis.legendHitBoxes = [];\n\n\t\t/**\n \t\t * @private\n \t\t */\n\t\tthis._hoveredItem = null;\n\n\t\t// Are we in doughnut mode which has a different data type\n\t\tthis.doughnutMode = false;\n\t},\n\n\t// These methods are ordered by lifecycle. Utilities then follow.\n\t// Any function defined here is inherited by all legend types.\n\t// Any function can be extended by the legend type\n\n\tbeforeUpdate: noop$1,\n\tupdate: function(maxWidth, maxHeight, margins) {\n\t\tvar me = this;\n\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\tme.beforeUpdate();\n\n\t\t// Absorb the master measurements\n\t\tme.maxWidth = maxWidth;\n\t\tme.maxHeight = maxHeight;\n\t\tme.margins = margins;\n\n\t\t// Dimensions\n\t\tme.beforeSetDimensions();\n\t\tme.setDimensions();\n\t\tme.afterSetDimensions();\n\t\t// Labels\n\t\tme.beforeBuildLabels();\n\t\tme.buildLabels();\n\t\tme.afterBuildLabels();\n\n\t\t// Fit\n\t\tme.beforeFit();\n\t\tme.fit();\n\t\tme.afterFit();\n\t\t//\n\t\tme.afterUpdate();\n\n\t\treturn me.minSize;\n\t},\n\tafterUpdate: noop$1,\n\n\t//\n\n\tbeforeSetDimensions: noop$1,\n\tsetDimensions: function() {\n\t\tvar me = this;\n\t\t// Set the unconstrained dimension before label rotation\n\t\tif (me.isHorizontal()) {\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.left = 0;\n\t\t\tme.right = me.width;\n\t\t} else {\n\t\t\tme.height = me.maxHeight;\n\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.top = 0;\n\t\t\tme.bottom = me.height;\n\t\t}\n\n\t\t// Reset padding\n\t\tme.paddingLeft = 0;\n\t\tme.paddingTop = 0;\n\t\tme.paddingRight = 0;\n\t\tme.paddingBottom = 0;\n\n\t\t// Reset minSize\n\t\tme.minSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t},\n\tafterSetDimensions: noop$1,\n\n\t//\n\n\tbeforeBuildLabels: noop$1,\n\tbuildLabels: function() {\n\t\tvar me = this;\n\t\tvar labelOpts = me.options.labels || {};\n\t\tvar legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n\t\tif (labelOpts.filter) {\n\t\t\tlegendItems = legendItems.filter(function(item) {\n\t\t\t\treturn labelOpts.filter(item, me.chart.data);\n\t\t\t});\n\t\t}\n\n\t\tif (me.options.reverse) {\n\t\t\tlegendItems.reverse();\n\t\t}\n\n\t\tme.legendItems = legendItems;\n\t},\n\tafterBuildLabels: noop$1,\n\n\t//\n\n\tbeforeFit: noop$1,\n\tfit: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar labelOpts = opts.labels;\n\t\tvar display = opts.display;\n\n\t\tvar ctx = me.ctx;\n\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\n\t\tvar fontSize = labelFont.size;\n\n\t\t// Reset hit boxes\n\t\tvar hitboxes = me.legendHitBoxes = [];\n\n\t\tvar minSize = me.minSize;\n\t\tvar isHorizontal = me.isHorizontal();\n\n\t\tif (isHorizontal) {\n\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\tminSize.height = display ? 10 : 0;\n\t\t} else {\n\t\t\tminSize.width = display ? 10 : 0;\n\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t}\n\n\t\t// Increase sizes here\n\t\tif (display) {\n\t\t\tctx.font = labelFont.string;\n\n\t\t\tif (isHorizontal) {\n\t\t\t\t// Labels\n\n\t\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n\t\t\t\tvar lineWidths = me.lineWidths = [0];\n\t\t\t\tvar totalHeight = 0;\n\n\t\t\t\tctx.textAlign = 'left';\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\tif (i === 0 || lineWidths[lineWidths.length - 1] + width + labelOpts.padding > minSize.width) {\n\t\t\t\t\t\ttotalHeight += fontSize + labelOpts.padding;\n\t\t\t\t\t\tlineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = labelOpts.padding;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t};\n\n\t\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n\t\t\t\t});\n\n\t\t\t\tminSize.height += totalHeight;\n\n\t\t\t} else {\n\t\t\t\tvar vPadding = labelOpts.padding;\n\t\t\t\tvar columnWidths = me.columnWidths = [];\n\t\t\t\tvar totalWidth = labelOpts.padding;\n\t\t\t\tvar currentColWidth = 0;\n\t\t\t\tvar currentColHeight = 0;\n\t\t\t\tvar itemHeight = fontSize + vPadding;\n\n\t\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\t// If too tall, go to new column\n\t\t\t\t\tif (i > 0 && currentColHeight + itemHeight > minSize.height - vPadding) {\n\t\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\n\t\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\n\n\t\t\t\t\t\tcurrentColWidth = 0;\n\t\t\t\t\t\tcurrentColHeight = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get max width\n\t\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\n\t\t\t\t\tcurrentColHeight += itemHeight;\n\n\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\twidth: itemWidth,\n\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\ttotalWidth += currentColWidth;\n\t\t\t\tcolumnWidths.push(currentColWidth);\n\t\t\t\tminSize.width += totalWidth;\n\t\t\t}\n\t\t}\n\n\t\tme.width = minSize.width;\n\t\tme.height = minSize.height;\n\t},\n\tafterFit: noop$1,\n\n\t// Shared Methods\n\tisHorizontal: function() {\n\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t},\n\n\t// Actually draw the legend on the canvas\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar labelOpts = opts.labels;\n\t\tvar globalDefaults = core_defaults.global;\n\t\tvar defaultColor = globalDefaults.defaultColor;\n\t\tvar lineDefault = globalDefaults.elements.line;\n\t\tvar legendWidth = me.width;\n\t\tvar lineWidths = me.lineWidths;\n\n\t\tif (opts.display) {\n\t\t\tvar ctx = me.ctx;\n\t\t\tvar fontColor = valueOrDefault$d(labelOpts.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\n\t\t\tvar fontSize = labelFont.size;\n\t\t\tvar cursor;\n\n\t\t\t// Canvas setup\n\t\t\tctx.textAlign = 'left';\n\t\t\tctx.textBaseline = 'middle';\n\t\t\tctx.lineWidth = 0.5;\n\t\t\tctx.strokeStyle = fontColor; // for strikethrough effect\n\t\t\tctx.fillStyle = fontColor; // render in correct colour\n\t\t\tctx.font = labelFont.string;\n\n\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\tvar hitboxes = me.legendHitBoxes;\n\n\t\t\t// current position\n\t\t\tvar drawLegendBox = function(x, y, legendItem) {\n\t\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the ctx for the box\n\t\t\t\tctx.save();\n\n\t\t\t\tvar lineWidth = valueOrDefault$d(legendItem.lineWidth, lineDefault.borderWidth);\n\t\t\t\tctx.fillStyle = valueOrDefault$d(legendItem.fillStyle, defaultColor);\n\t\t\t\tctx.lineCap = valueOrDefault$d(legendItem.lineCap, lineDefault.borderCapStyle);\n\t\t\t\tctx.lineDashOffset = valueOrDefault$d(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n\t\t\t\tctx.lineJoin = valueOrDefault$d(legendItem.lineJoin, lineDefault.borderJoinStyle);\n\t\t\t\tctx.lineWidth = lineWidth;\n\t\t\t\tctx.strokeStyle = valueOrDefault$d(legendItem.strokeStyle, defaultColor);\n\n\t\t\t\tif (ctx.setLineDash) {\n\t\t\t\t\t// IE 9 and 10 do not support line dash\n\t\t\t\t\tctx.setLineDash(valueOrDefault$d(legendItem.lineDash, lineDefault.borderDash));\n\t\t\t\t}\n\n\t\t\t\tif (opts.labels && opts.labels.usePointStyle) {\n\t\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\n\t\t\t\t\t// x and y to be center of figure (instead of top left)\n\t\t\t\t\tvar radius = boxWidth * Math.SQRT2 / 2;\n\t\t\t\t\tvar centerX = x + boxWidth / 2;\n\t\t\t\t\tvar centerY = y + fontSize / 2;\n\n\t\t\t\t\t// Draw pointStyle as legend symbol\n\t\t\t\t\thelpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n\t\t\t\t} else {\n\t\t\t\t\t// Draw box as legend symbol\n\t\t\t\t\tif (lineWidth !== 0) {\n\t\t\t\t\t\tctx.strokeRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t}\n\t\t\t\t\tctx.fillRect(x, y, boxWidth, fontSize);\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t};\n\t\t\tvar fillText = function(x, y, legendItem, textWidth) {\n\t\t\t\tvar halfFontSize = fontSize / 2;\n\t\t\t\tvar xLeft = boxWidth + halfFontSize + x;\n\t\t\t\tvar yMiddle = y + halfFontSize;\n\n\t\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\n\n\t\t\t\tif (legendItem.hidden) {\n\t\t\t\t\t// Strikethrough the text if hidden\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.lineWidth = 2;\n\t\t\t\t\tctx.moveTo(xLeft, yMiddle);\n\t\t\t\t\tctx.lineTo(xLeft + textWidth, yMiddle);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Horizontal\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tif (isHorizontal) {\n\t\t\t\tcursor = {\n\t\t\t\t\tx: me.left + ((legendWidth - lineWidths[0]) / 2) + labelOpts.padding,\n\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\tline: 0\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tcursor = {\n\t\t\t\t\tx: me.left + labelOpts.padding,\n\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\tline: 0\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar itemHeight = fontSize + labelOpts.padding;\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\n\t\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\n\t\t\t\tvar width = boxWidth + (fontSize / 2) + textWidth;\n\t\t\t\tvar x = cursor.x;\n\t\t\t\tvar y = cursor.y;\n\n\t\t\t\t// Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\n\t\t\t\t// instead of me.right and me.bottom because me.width and me.height\n\t\t\t\t// may have been changed since me.minSize was calculated\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tif (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\n\t\t\t\t\t\ty = cursor.y += itemHeight;\n\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t\tx = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2) + labelOpts.padding;\n\t\t\t\t\t}\n\t\t\t\t} else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\n\t\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n\t\t\t\t\ty = cursor.y = me.top + labelOpts.padding;\n\t\t\t\t\tcursor.line++;\n\t\t\t\t}\n\n\t\t\t\tdrawLegendBox(x, y, legendItem);\n\n\t\t\t\thitboxes[i].left = x;\n\t\t\t\thitboxes[i].top = y;\n\n\t\t\t\t// Fill the actual label\n\t\t\t\tfillText(x, y, legendItem, textWidth);\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tcursor.x += width + labelOpts.padding;\n\t\t\t\t} else {\n\t\t\t\t\tcursor.y += itemHeight;\n\t\t\t\t}\n\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_getLegendItemAt: function(x, y) {\n\t\tvar me = this;\n\t\tvar i, hitBox, lh;\n\n\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n\t\t\t// See if we are touching one of the dataset boxes\n\t\t\tlh = me.legendHitBoxes;\n\t\t\tfor (i = 0; i < lh.length; ++i) {\n\t\t\t\thitBox = lh[i];\n\n\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n\t\t\t\t\t// Touching an element\n\t\t\t\t\treturn me.legendItems[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Handle an event\n\t * @private\n\t * @param {IEvent} event - The event to handle\n\t */\n\thandleEvent: function(e) {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\n\t\tvar hoveredItem;\n\n\t\tif (type === 'mousemove') {\n\t\t\tif (!opts.onHover && !opts.onLeave) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (type === 'click') {\n\t\t\tif (!opts.onClick) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\t// Chart event already has relative position in it\n\t\thoveredItem = me._getLegendItemAt(e.x, e.y);\n\n\t\tif (type === 'click') {\n\t\t\tif (hoveredItem && opts.onClick) {\n\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\topts.onClick.call(me, e.native, hoveredItem);\n\t\t\t}\n\t\t} else {\n\t\t\tif (opts.onLeave && hoveredItem !== me._hoveredItem) {\n\t\t\t\tif (me._hoveredItem) {\n\t\t\t\t\topts.onLeave.call(me, e.native, me._hoveredItem);\n\t\t\t\t}\n\t\t\t\tme._hoveredItem = hoveredItem;\n\t\t\t}\n\n\t\t\tif (opts.onHover && hoveredItem) {\n\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\topts.onHover.call(me, e.native, hoveredItem);\n\t\t\t}\n\t\t}\n\t}\n});\n\nfunction createNewLegendAndAttach(chart, legendOpts) {\n\tvar legend = new Legend({\n\t\tctx: chart.ctx,\n\t\toptions: legendOpts,\n\t\tchart: chart\n\t});\n\n\tcore_layouts.configure(chart, legend, legendOpts);\n\tcore_layouts.addBox(chart, legend);\n\tchart.legend = legend;\n}\n\nvar plugin_legend = {\n\tid: 'legend',\n\n\t/**\n\t * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\n\t * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\n\t * the plugin, which one will be re-exposed in the chart.js file.\n\t * https://github.com/chartjs/Chart.js/pull/2640\n\t * @private\n\t */\n\t_element: Legend,\n\n\tbeforeInit: function(chart) {\n\t\tvar legendOpts = chart.options.legend;\n\n\t\tif (legendOpts) {\n\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t}\n\t},\n\n\tbeforeUpdate: function(chart) {\n\t\tvar legendOpts = chart.options.legend;\n\t\tvar legend = chart.legend;\n\n\t\tif (legendOpts) {\n\t\t\thelpers$1.mergeIf(legendOpts, core_defaults.global.legend);\n\n\t\t\tif (legend) {\n\t\t\t\tcore_layouts.configure(chart, legend, legendOpts);\n\t\t\t\tlegend.options = legendOpts;\n\t\t\t} else {\n\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t\t}\n\t\t} else if (legend) {\n\t\t\tcore_layouts.removeBox(chart, legend);\n\t\t\tdelete chart.legend;\n\t\t}\n\t},\n\n\tafterEvent: function(chart, e) {\n\t\tvar legend = chart.legend;\n\t\tif (legend) {\n\t\t\tlegend.handleEvent(e);\n\t\t}\n\t}\n};\n\nvar noop$2 = helpers$1.noop;\n\ncore_defaults._set('global', {\n\ttitle: {\n\t\tdisplay: false,\n\t\tfontStyle: 'bold',\n\t\tfullWidth: true,\n\t\tpadding: 10,\n\t\tposition: 'top',\n\t\ttext: '',\n\t\tweight: 2000 // by default greater than legend (1000) to be above\n\t}\n});\n\n/**\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n */\nvar Title = core_element.extend({\n\tinitialize: function(config) {\n\t\tvar me = this;\n\t\thelpers$1.extend(me, config);\n\n\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\tme.legendHitBoxes = [];\n\t},\n\n\t// These methods are ordered by lifecycle. Utilities then follow.\n\n\tbeforeUpdate: noop$2,\n\tupdate: function(maxWidth, maxHeight, margins) {\n\t\tvar me = this;\n\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\tme.beforeUpdate();\n\n\t\t// Absorb the master measurements\n\t\tme.maxWidth = maxWidth;\n\t\tme.maxHeight = maxHeight;\n\t\tme.margins = margins;\n\n\t\t// Dimensions\n\t\tme.beforeSetDimensions();\n\t\tme.setDimensions();\n\t\tme.afterSetDimensions();\n\t\t// Labels\n\t\tme.beforeBuildLabels();\n\t\tme.buildLabels();\n\t\tme.afterBuildLabels();\n\n\t\t// Fit\n\t\tme.beforeFit();\n\t\tme.fit();\n\t\tme.afterFit();\n\t\t//\n\t\tme.afterUpdate();\n\n\t\treturn me.minSize;\n\n\t},\n\tafterUpdate: noop$2,\n\n\t//\n\n\tbeforeSetDimensions: noop$2,\n\tsetDimensions: function() {\n\t\tvar me = this;\n\t\t// Set the unconstrained dimension before label rotation\n\t\tif (me.isHorizontal()) {\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.left = 0;\n\t\t\tme.right = me.width;\n\t\t} else {\n\t\t\tme.height = me.maxHeight;\n\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.top = 0;\n\t\t\tme.bottom = me.height;\n\t\t}\n\n\t\t// Reset padding\n\t\tme.paddingLeft = 0;\n\t\tme.paddingTop = 0;\n\t\tme.paddingRight = 0;\n\t\tme.paddingBottom = 0;\n\n\t\t// Reset minSize\n\t\tme.minSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t},\n\tafterSetDimensions: noop$2,\n\n\t//\n\n\tbeforeBuildLabels: noop$2,\n\tbuildLabels: noop$2,\n\tafterBuildLabels: noop$2,\n\n\t//\n\n\tbeforeFit: noop$2,\n\tfit: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar display = opts.display;\n\t\tvar minSize = me.minSize;\n\t\tvar lineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\n\t\tvar fontOpts = helpers$1.options._parseFont(opts);\n\t\tvar textSize = display ? (lineCount * fontOpts.lineHeight) + (opts.padding * 2) : 0;\n\n\t\tif (me.isHorizontal()) {\n\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\tminSize.height = textSize;\n\t\t} else {\n\t\t\tminSize.width = textSize;\n\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t}\n\n\t\tme.width = minSize.width;\n\t\tme.height = minSize.height;\n\n\t},\n\tafterFit: noop$2,\n\n\t// Shared Methods\n\tisHorizontal: function() {\n\t\tvar pos = this.options.position;\n\t\treturn pos === 'top' || pos === 'bottom';\n\t},\n\n\t// Actually draw the title block on the canvas\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar ctx = me.ctx;\n\t\tvar opts = me.options;\n\n\t\tif (opts.display) {\n\t\t\tvar fontOpts = helpers$1.options._parseFont(opts);\n\t\t\tvar lineHeight = fontOpts.lineHeight;\n\t\t\tvar offset = lineHeight / 2 + opts.padding;\n\t\t\tvar rotation = 0;\n\t\t\tvar top = me.top;\n\t\t\tvar left = me.left;\n\t\t\tvar bottom = me.bottom;\n\t\t\tvar right = me.right;\n\t\t\tvar maxWidth, titleX, titleY;\n\n\t\t\tctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\n\t\t\tctx.font = fontOpts.string;\n\n\t\t\t// Horizontal\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\n\t\t\t\ttitleY = top + offset;\n\t\t\t\tmaxWidth = right - left;\n\t\t\t} else {\n\t\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\n\t\t\t\ttitleY = top + ((bottom - top) / 2);\n\t\t\t\tmaxWidth = bottom - top;\n\t\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n\t\t\t}\n\n\t\t\tctx.save();\n\t\t\tctx.translate(titleX, titleY);\n\t\t\tctx.rotate(rotation);\n\t\t\tctx.textAlign = 'center';\n\t\t\tctx.textBaseline = 'middle';\n\n\t\t\tvar text = opts.text;\n\t\t\tif (helpers$1.isArray(text)) {\n\t\t\t\tvar y = 0;\n\t\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\n\t\t\t\t\ty += lineHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tctx.fillText(text, 0, 0, maxWidth);\n\t\t\t}\n\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nfunction createNewTitleBlockAndAttach(chart, titleOpts) {\n\tvar title = new Title({\n\t\tctx: chart.ctx,\n\t\toptions: titleOpts,\n\t\tchart: chart\n\t});\n\n\tcore_layouts.configure(chart, title, titleOpts);\n\tcore_layouts.addBox(chart, title);\n\tchart.titleBlock = title;\n}\n\nvar plugin_title = {\n\tid: 'title',\n\n\t/**\n\t * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\n\t * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\n\t * the plugin, which one will be re-exposed in the chart.js file.\n\t * https://github.com/chartjs/Chart.js/pull/2640\n\t * @private\n\t */\n\t_element: Title,\n\n\tbeforeInit: function(chart) {\n\t\tvar titleOpts = chart.options.title;\n\n\t\tif (titleOpts) {\n\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t}\n\t},\n\n\tbeforeUpdate: function(chart) {\n\t\tvar titleOpts = chart.options.title;\n\t\tvar titleBlock = chart.titleBlock;\n\n\t\tif (titleOpts) {\n\t\t\thelpers$1.mergeIf(titleOpts, core_defaults.global.title);\n\n\t\t\tif (titleBlock) {\n\t\t\t\tcore_layouts.configure(chart, titleBlock, titleOpts);\n\t\t\t\ttitleBlock.options = titleOpts;\n\t\t\t} else {\n\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t\t}\n\t\t} else if (titleBlock) {\n\t\t\tcore_layouts.removeBox(chart, titleBlock);\n\t\t\tdelete chart.titleBlock;\n\t\t}\n\t}\n};\n\nvar plugins = {};\nvar filler = plugin_filler;\nvar legend = plugin_legend;\nvar title = plugin_title;\nplugins.filler = filler;\nplugins.legend = legend;\nplugins.title = title;\n\n/**\n * @namespace Chart\n */\n\n\ncore_controller.helpers = helpers$1;\n\n// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\ncore_helpers(core_controller);\n\ncore_controller._adapters = core_adapters;\ncore_controller.Animation = core_animation;\ncore_controller.animationService = core_animations;\ncore_controller.controllers = controllers;\ncore_controller.DatasetController = core_datasetController;\ncore_controller.defaults = core_defaults;\ncore_controller.Element = core_element;\ncore_controller.elements = elements;\ncore_controller.Interaction = core_interaction;\ncore_controller.layouts = core_layouts;\ncore_controller.platform = platform;\ncore_controller.plugins = core_plugins;\ncore_controller.Scale = core_scale;\ncore_controller.scaleService = core_scaleService;\ncore_controller.Ticks = core_ticks;\ncore_controller.Tooltip = core_tooltip;\n\n// Register built-in scales\n\ncore_controller.helpers.each(scales, function(scale, type) {\n\tcore_controller.scaleService.registerScaleType(type, scale, scale._defaults);\n});\n\n// Load to register built-in adapters (as side effects)\n\n\n// Loading built-in plugins\n\nfor (var k in plugins) {\n\tif (plugins.hasOwnProperty(k)) {\n\t\tcore_controller.plugins.register(plugins[k]);\n\t}\n}\n\ncore_controller.platform.initialize();\n\nvar src = core_controller;\nif (typeof window !== 'undefined') {\n\twindow.Chart = core_controller;\n}\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, not available anymore\n * @namespace Chart.Chart\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\ncore_controller.Chart = core_controller;\n\n/**\n * Provided for backward compatibility, not available anymore\n * @namespace Chart.Legend\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\ncore_controller.Legend = plugins.legend._element;\n\n/**\n * Provided for backward compatibility, not available anymore\n * @namespace Chart.Title\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\ncore_controller.Title = plugins.title._element;\n\n/**\n * Provided for backward compatibility, use Chart.plugins instead\n * @namespace Chart.pluginService\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\ncore_controller.pluginService = core_controller.plugins;\n\n/**\n * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\n * effect, instead simply create/register plugins via plain JavaScript objects.\n * @interface Chart.PluginBase\n * @deprecated since version 2.5.0\n * @todo remove at version 3\n * @private\n */\ncore_controller.PluginBase = core_controller.Element.extend({});\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\n * @namespace Chart.canvasHelpers\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\ncore_controller.canvasHelpers = core_controller.helpers.canvas;\n\n/**\n * Provided for backward compatibility, use Chart.layouts instead.\n * @namespace Chart.layoutService\n * @deprecated since version 2.7.3\n * @todo remove at version 3\n * @private\n */\ncore_controller.layoutService = core_controller.layouts;\n\n/**\n * Provided for backward compatibility, not available anymore.\n * @namespace Chart.LinearScaleBase\n * @deprecated since version 2.8\n * @todo remove at version 3\n * @private\n */\ncore_controller.LinearScaleBase = scale_linearbase;\n\n/**\n * Provided for backward compatibility, instead we should create a new Chart\n * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n */\ncore_controller.helpers.each(\n\t[\n\t\t'Bar',\n\t\t'Bubble',\n\t\t'Doughnut',\n\t\t'Line',\n\t\t'PolarArea',\n\t\t'Radar',\n\t\t'Scatter'\n\t],\n\tfunction(klass) {\n\t\tcore_controller[klass] = function(ctx, cfg) {\n\t\t\treturn new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\n\t\t\t\ttype: klass.charAt(0).toLowerCase() + klass.slice(1)\n\t\t\t}));\n\t\t};\n\t}\n);\n\nreturn src;\n\n})));\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grid.vue?vue&type=style&index=0&id=44eb4718&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grid.vue?vue&type=style&index=0&id=44eb4718&lang=less&scoped=true&\"","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"boxer\"},[_vm._m(0),_c('el-radio-group',{staticClass:\"viewmode-radio-group\",model:{value:(_vm.type),callback:function ($$v) {_vm.type=$$v},expression:\"type\"}}),_c('div',{staticClass:\"main-shadow-box\"},[(_vm.type==='grid')?_c('grid-view'):(_vm.type==='table')?_c('table-view'):_vm._e()],1)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sub-title\"},[_c('i',{staticClass:\"iconfont icon-entity\"}),_vm._v(\" 相似度对比\\n \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}]},[_c('el-row',{staticClass:\"top-row\",attrs:{\"gutter\":20}},[_c('el-col',{attrs:{\"span\":8}},[_c('el-button-group',{staticClass:\"overview-buttons\"},[_c('el-button',{class:_vm.currentSelect==='all'? 'el-button--primary':'',on:{\"click\":function($event){return _vm.load('all')}}},[_vm._v(\"全部\")]),_c('el-button',{class:_vm.currentSelect==='today'?'el-button--primary':'',on:{\"click\":function($event){return _vm.load('today')}}},[_vm._v(\"今天\")]),_c('el-button',{class:_vm.currentSelect==='week'? 'el-button--primary':'',on:{\"click\":function($event){return _vm.load('week')}}},[_vm._v(\"本周\")]),_c('el-button',{class:_vm.currentSelect==='month'?'el-button--primary':'',on:{\"click\":function($event){return _vm.load('month')}}},[_vm._v(\"本月\")])],1)],1),_c('el-col',{attrs:{\"span\":8}},[_c('el-date-picker',{attrs:{\"value-format\":\"timestamp\",\"type\":\"datetimerange\",\"range-separator\":\"至\",\"start-placeholder\":\"开始日期\",\"end-placeholder\":\"结束日期\"},model:{value:(_vm.timeRange),callback:function ($$v) {_vm.timeRange=$$v},expression:\"timeRange\"}})],1),_c('el-col',{attrs:{\"span\":4}},[_c('div',{staticClass:\"overview-box total\"},[_c('div',[_c('i',{staticClass:\"el-icon-files\"})]),_c('div',[_c('div',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.total))]),_c('div',{staticClass:\"label\"},[_vm._v(\"总数\")])])])]),_c('el-col',{attrs:{\"span\":4}},[_c('div',{staticClass:\"overview-box percent\"},[_c('div',[_c('i',{staticClass:\"el-icon-pie-chart\"})]),_c('div',[_c('div',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.passPercent))]),_c('div',{staticClass:\"label\"},[_vm._v(\"通过率\")])])])])],1),_c('charts-view',{attrs:{\"data-list\":_vm.chartData}}),_c('el-row',{staticClass:\"card-row\",attrs:{\"gutter\":15}},_vm._l((_vm.dataList),function(item){return _c('el-col',{key:item.id,attrs:{\"span\":8}},[_c('one-to-video-card',{attrs:{\"data\":item}})],1)}),1),_c('el-pagination',{staticStyle:{\"text-align\":\"center\"},attrs:{\"total\":_vm.total,\"layout\":'prev, pager, next, jumper, ->, total',\"current-page\":_vm.pageForm.page + 1,\"page-size\":_vm.pageForm.size},on:{\"current-change\":_vm.pageChange}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grid.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./grid.vue?vue&type=template&id=44eb4718&scoped=true&\"\nimport script from \"./grid.vue?vue&type=script&lang=js&\"\nexport * from \"./grid.vue?vue&type=script&lang=js&\"\nimport style0 from \"./grid.vue?vue&type=style&index=0&id=44eb4718&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44eb4718\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{attrs:{\"inline\":\"\"}},[_c('el-form-item',[_c('el-button-group',{staticClass:\"overview-buttons\"},[_c('el-button',{class:_vm.currentSelect==='all'? 'el-button--primary':'',on:{\"click\":function($event){return _vm.load('all')}}},[_vm._v(\"全部\")]),_c('el-button',{class:_vm.currentSelect==='today'?'el-button--primary':'',on:{\"click\":function($event){return _vm.load('today')}}},[_vm._v(\"今天\")]),_c('el-button',{class:_vm.currentSelect==='week'? 'el-button--primary':'',on:{\"click\":function($event){return _vm.load('week')}}},[_vm._v(\"本周\")]),_c('el-button',{class:_vm.currentSelect==='month'?'el-button--primary':'',on:{\"click\":function($event){return _vm.load('month')}}},[_vm._v(\"本月\")])],1)],1),_c('el-form-item',[_c('el-date-picker',{attrs:{\"value-format\":\"timestamp\",\"type\":\"datetimerange\",\"range-separator\":\"至\",\"start-placeholder\":\"开始日期\",\"end-placeholder\":\"结束日期\"},model:{value:(_vm.timeRange),callback:function ($$v) {_vm.timeRange=$$v},expression:\"timeRange\"}})],1),_c('el-form-item',{attrs:{\"label\":\"所属部门\"}},[_c('el-select',{attrs:{\"clearable\":\"\"},model:{value:(_vm.pageForm.departmentNo),callback:function ($$v) {_vm.$set(_vm.pageForm, \"departmentNo\", $$v)},expression:\"pageForm.departmentNo\"}},_vm._l((_vm.deptList),function(item){return _c('el-option',{key:item.id,attrs:{\"label\":item.name,\"value\":item.no}})}),1)],1),_c('el-form-item',{attrs:{\"label\":\"执行电脑\"}},[_c('el-select',{attrs:{\"clearable\":\"\"},model:{value:(_vm.pageForm.computerNo),callback:function ($$v) {_vm.$set(_vm.pageForm, \"computerNo\", $$v)},expression:\"pageForm.computerNo\"}},_vm._l((_vm.pcList),function(item){return _c('el-option',{key:item.id,attrs:{\"label\":item.name,\"value\":item.no}})}),1)],1)],1),_c('el-table',{attrs:{\"data\":_vm.dataList,\"size\":\"medium\"}},[_c('el-table-column',{attrs:{\"type\":\"index\",\"fixed\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"服务地址\",\"prop\":\"server\",\"width\":\"155px\"}}),_c('el-table-column',{attrs:{\"label\":\"请求路由\",\"prop\":\"route\",\"width\":\"145px\"}}),_c('el-table-column',{attrs:{\"label\":\"请求IP\",\"prop\":\"caller\",\"width\":\"130px\"}}),_c('el-table-column',{attrs:{\"label\":\"请求电脑\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"computer_name\")(scope.row.computerNo))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"所属部门\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"department_name\")(scope.row.departmentNo))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"对比类型\",\"width\":\"140px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"route_name\")(scope.row.route))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"对比模式\",\"width\":\"100px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(scope.row.compareMode.replace(\"模式\",\"\"))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"对比结果\",\"width\":\"85px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [(scope.row.compareResult==='SUCCESS')?_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"\\n \"+_vm._s(\"通过\")+\"\\n \")]):_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(\"\\n \"+_vm._s(\"未通过\")+\"\\n \")])]}}])}),_c('el-table-column',{attrs:{\"label\":\"请求时间\",\"width\":\"180px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"date_time\")(scope.row.createTime))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"操作\",\"align\":\"center\",\"width\":\"100px\",\"fixed\":\"right\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){return _vm.showDetail(scope.row)}}},[_vm._v(\"查看详情\")])]}}])})],1),_c('el-dialog',{attrs:{\"title\":\"对比详情\",\"visible\":_vm.visible,\"width\":\"90%\",\"destroy-on-close\":\"\"},on:{\"update:visible\":function($event){_vm.visible=$event}}},[_c('one-to-video-card',{staticClass:\"in-dialog\",attrs:{\"data\":_vm.currentObject}})],1),_c('el-pagination',{staticStyle:{\"text-align\":\"center\"},attrs:{\"total\":_vm.total,\"layout\":'prev, pager, next, jumper, ->, total',\"current-page\":_vm.pageForm.page + 1,\"page-size\":_vm.pageForm.size},on:{\"current-change\":_vm.pageChange}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-card',[_c('div',{staticStyle:{\"text-align\":\"center\"}},[_c('el-row',{attrs:{\"gutter\":8,\"type\":\"flex\"}},[_c('el-col',{staticClass:\"img-item\",attrs:{\"span\":8}},[_c('img',{attrs:{\"src\":_vm.src(_vm.data.image)},on:{\"click\":function($event){return _vm.openImg(_vm.data.image)}}})]),_c('el-col',{staticClass:\"result-item\",attrs:{\"span\":8}},[(_vm.data.result.matchlist!==undefined)?_c('div',{staticClass:\"result\",class:_vm.data.compareResult},[_c('div',{staticClass:\"mode\"},[_vm._v(\"\\n \"+_vm._s(_vm._f(\"route_name\")(_vm.data.route))+\"\\n \")]),_c('div',{staticClass:\"mode\"},[_vm._v(\"阈值\"+_vm._s(_vm.data.threshold)+\" / 活体\"+_vm._s(_vm.data.rgbLiveThreshold))]),_c('div',{staticClass:\"mode\"},[_vm._v(\"读取/对比帧 \"+_vm._s(_vm.data.result.readframe)+\"/\"+_vm._s(_vm.data.result.compareframe))]),_c('div',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.data.compareResult===\"SUCCESS\"?\"对比通过\":\"对比未通过\"))])]):_c('div',{staticClass:\"result fail\"},[_c('div',{staticClass:\"mode\"},[_vm._v(\"\\n \"+_vm._s(_vm._f(\"route_name\")(_vm.data.route))+\"\\n \")]),_c('div',{staticClass:\"mode\"},[_vm._v(\"阈值 \"+_vm._s(_vm.data.threshold)+\" 活体 \"+_vm._s(_vm.data.rgbLiveThreshold))]),_c('div',{staticClass:\"content\"},[_vm._v(\" \\n \"+_vm._s(_vm.data.result.msg)+\"\\n \")])]),_c('el-tag',{staticClass:\"time-tag\"},[_vm._v(_vm._s(_vm._f(\"date_time\")(_vm.data.createTime)))])],1),_c('el-col',{staticClass:\"img-item\",attrs:{\"span\":8}},[_c('video',{attrs:{\"src\":_vm.videosrc(_vm.data.video),\"controls\":\"\",\"width\":\"100%\",\"type\":\"video/mp4\"}},[_vm._v(\"\\n 您的浏览器不支持 video 标签。\\n Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari 支持 video 标签。\\n \")])])],1),_c('el-table',{attrs:{\"data\":_vm.data.compareImagePairs}},[_c('el-table-column',{attrs:{\"label\":\"视频帧图片\",\"align\":\"center\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [_c('el-image',{staticStyle:{\"width\":\"100px\",\"height\":\"100px\"},attrs:{\"src\":_vm.src(s.row.ImageName),\"fit\":\"contain\"},on:{\"click\":function($event){return _vm.openImg(_vm.data.compareImagePairs[0].ImageName)}}})]}}])}),_c('el-table-column',{attrs:{\"label\":'置信度('+_vm.data.compareMode.replace('模式','')+')',\"align\":\"center\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [_vm._v(\"\\n \"+_vm._s((s.row.Match * 100).toFixed(2) + \"%\")+\"\\n \"),(s.row.Match >= _vm.data.threshold)?_c('i',{staticClass:\"el-icon-check\",staticStyle:{\"font-weight\":\"bold\",\"color\":\"#00b900\",\"font-size\":\"18px\"}}):_vm._e()]}}])}),_c('el-table-column',{attrs:{\"label\":\"对比信息\",\"align\":\"center\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [_vm._v(\"\\n \"+_vm._s(s.row.ErrorMsg)+\"\\n \")]}}])})],1)],1),_c('el-dialog',{attrs:{\"title\":\"图片详情\",\"visible\":_vm.visible,\"append-to-body\":\"\"},on:{\"update:visible\":function($event){_vm.visible=$event}}},[_c('div',{staticStyle:{\"text-align\":\"center\"}},[_c('img',{staticStyle:{\"max-width\":\"100%\"},attrs:{\"src\":_vm.src(_vm.currentImg)}})])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1vVcard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1vVcard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./1vVcard.vue?vue&type=template&id=51d39387&scoped=true&\"\nimport script from \"./1vVcard.vue?vue&type=script&lang=js&\"\nexport * from \"./1vVcard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./1vVcard.vue?vue&type=style&index=0&id=51d39387&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"51d39387\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./table.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./table.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./table.vue?vue&type=template&id=19d442e9&scoped=true&\"\nimport script from \"./table.vue?vue&type=script&lang=js&\"\nexport * from \"./table.vue?vue&type=script&lang=js&\"\nimport style0 from \"./table.vue?vue&type=style&index=0&id=19d442e9&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"19d442e9\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=087d572f&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=087d572f&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"087d572f\",\n null\n \n)\n\nexport default component.exports","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"margin-bottom\":\"20px\"}},[_c('el-row',{attrs:{\"gutter\":20}},[_c('el-col',{attrs:{\"span\":7}},[_c('el-card',[_c('div',{staticClass:\"clearfix\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_c('span',[_c('i',{staticClass:\"iconfont icon-similar-stastic\"}),_vm._v(\" 总览\")])]),(_vm.overviewData)?_c('overview-chart',{attrs:{\"chart-data\":_vm.overviewData}}):_vm._e()],1)],1),_c('el-col',{attrs:{\"span\":7}},[_c('el-card',[_c('div',{staticClass:\"clearfix\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_c('span',[_c('i',{staticClass:\"iconfont icon-distribute\"}),_vm._v(\" 有效对比置信度分布\")])]),(_vm.matchData)?_c('match-chart',{attrs:{\"chart-data\":_vm.matchData}}):_vm._e()],1)],1),_c('el-col',{attrs:{\"span\":10}},[_c('el-card',[_c('div',{staticClass:\"clearfix\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_c('span',[_c('i',{staticClass:\"iconfont icon-retry-stastic\"}),_vm._v(\" 近十二月使用统计\")])]),(_vm.twelveMonthData)?_c('twelve-month',{attrs:{\"chart-data\":_vm.twelveMonthData}}):_vm._e()],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"height\":\"300px\",\"margin\":\"auto\"}},[_c('canvas',{attrs:{\"id\":\"overview-chart\"}})])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./overview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./overview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./overview.vue?vue&type=template&id=15aaf139&\"\nimport script from \"./overview.vue?vue&type=script&lang=js&\"\nexport * from \"./overview.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"height\":\"300px\"}},[_c('canvas',{attrs:{\"id\":\"twelve-month-chart\"}})])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./twelveMonth.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./twelveMonth.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./twelveMonth.vue?vue&type=template&id=4a489e94&\"\nimport script from \"./twelveMonth.vue?vue&type=script&lang=js&\"\nexport * from \"./twelveMonth.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"height\":\"300px\"}},[_c('canvas',{attrs:{\"id\":\"match-chart\"}})])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./match.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./match.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./match.vue?vue&type=template&id=5c99b764&\"\nimport script from \"./match.vue?vue&type=script&lang=js&\"\nexport * from \"./match.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=7bb5ac64&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=7bb5ac64&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7bb5ac64\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&id=26f1f0f4&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&id=26f1f0f4&lang=less&scoped=true&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1v1card.vue?vue&type=style&index=0&id=0b95d146&lang=less&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1v1card.vue?vue&type=style&index=0&id=0b95d146&lang=less&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grid.vue?vue&type=style&index=0&id=32eb8fc0&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grid.vue?vue&type=style&index=0&id=32eb8fc0&lang=less&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./table.vue?vue&type=style&index=0&id=19d442e9&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./table.vue?vue&type=style&index=0&id=19d442e9&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"display\":\"flex\",\"flex-direction\":\"column\",\"height\":\"100%\"}},[_vm._m(0),_c('div',{staticClass:\"main-shadow-box\"},[_c('el-form',{staticStyle:{\"padding\":\"5px 20px\"},attrs:{\"inline\":\"\"}},[_c('el-form-item',{attrs:{\"label\":\"人脸库ID\"}},[_c('el-input',{attrs:{\"placeholder\":\"请输入人脸库ID进行查询\"},model:{value:(_vm.bucketId),callback:function ($$v) {_vm.bucketId=$$v},expression:\"bucketId\"}})],1),_c('el-form-item',{attrs:{\"label\":\"时间范围\"}},[_c('el-date-picker',{attrs:{\"value-format\":\"timestamp\",\"type\":\"daterange\",\"range-separator\":\"至\",\"start-placeholder\":\"开始日期\",\"end-placeholder\":\"结束日期\"},model:{value:(_vm.timeRange),callback:function ($$v) {_vm.timeRange=$$v},expression:\"timeRange\"}})],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\",\"icon\":\"el-icon-search\"},on:{\"click\":_vm.load1vN}},[_vm._v(\"查 询\")])],1)],1),_c('el-table',{attrs:{\"data\":_vm.list_1vN}},[_c('el-table-column',{attrs:{\"prop\":\"id\",\"label\":\"日志ID\",\"width\":\"60\"}}),_c('el-table-column',{attrs:{\"label\":\"服务地址\",\"prop\":\"server\",\"width\":\"155px\"}}),_c('el-table-column',{attrs:{\"label\":\"请求路由\",\"prop\":\"route\",\"width\":\"145px\"}}),_c('el-table-column',{attrs:{\"label\":\"请求IP\",\"prop\":\"caller\",\"width\":\"130px\"}}),_c('el-table-column',{attrs:{\"prop\":\"bucketName\",\"label\":\"人脸库名称\",\"width\":\"90\"}}),_c('el-table-column',{attrs:{\"label\":\"对比类型\",\"width\":\"90px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"route_name\")(scope.row.route))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"prop\":\"compareMode\",\"label\":\"对比模式\",\"width\":\"90\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [_vm._v(\"\\n \"+_vm._s(s.row.compareMode.replace(\"模式\",\"\"))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"prop\":\"result\",\"label\":\"对比结果\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [(!s.row.resultTop)?_c('span',[_vm._v(_vm._s(s.row.result))]):_c('div',{staticStyle:{\"display\":\"flex\",\"flex-direction\":\"row\",\"align-items\":\"center\"}},[_c('el-image',{staticStyle:{\"width\":\"100px\",\"height\":\"100px\"},attrs:{\"src\":_vm.resultSrc(s.row.bucket, s.row.resultTop.key),\"fit\":\"contain\"}}),_c('div',{staticStyle:{\"margin-left\":\"10px\"}},[_vm._v(\"置信度:\"+_vm._s(Math.round(s.row.resultTop.match * 100 * 100)/100)+\"%\")])],1)]}}])}),_c('el-table-column',{attrs:{\"prop\":\"createTime\",\"label\":\"请求时间\",\"width\":\"140\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [_vm._v(_vm._s(_vm._f(\"date_time\")(s.row.createTime)))]}}])}),_c('el-table-column',{attrs:{\"prop\":\"image\",\"label\":\"操作\",\"align\":\"center\",\"width\":\"120\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [_c('el-button',{on:{\"click\":function($event){return _vm.picView(s.row)}}},[_vm._v(\"查看详情图\")])]}}])})],1),_c('el-pagination',{staticStyle:{\"text-align\":\"center\"},attrs:{\"total\":_vm.total,\"layout\":'prev, pager, next, ->, total',\"current-page\":_vm.page + 1,\"page-size\":_vm.size,\"hide-on-single-page\":\"\"},on:{\"current-change\":_vm.pageChange}})],1),_c('el-dialog',{attrs:{\"visible\":_vm.visible,\"title\":\"详情\",\"append-to-body\":\"\"},on:{\"update:visible\":function($event){_vm.visible=$event}}},[_c('div',{staticStyle:{\"text-align\":\"center\"}},[(_vm.pic)?_c('el-image',{staticStyle:{\"margin-bottom\":\"15px\"},attrs:{\"src\":_vm.src(_vm.pic),\"fit\":\"contain\"}}):_vm._e(),_c('el-table',{attrs:{\"data\":_vm.details}},[_c('el-table-column',{attrs:{\"label\":\"图片\",\"align\":\"center\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [_c('el-image',{staticStyle:{\"width\":\"100px\",\"height\":\"100px\"},attrs:{\"src\":_vm.resultSrc(_vm.pic.bucket, s.row.key),\"fit\":\"contain\"}})]}}])}),_c('el-table-column',{attrs:{\"label\":\"置信度\",\"align\":\"center\"},scopedSlots:_vm._u([{key:\"default\",fn:function(s){return [_vm._v(\"\\n \"+_vm._s(Math.round(s.row.match * 100 * 100)/100)+\"%\\n \"),(s.$index === 0)?_c('i',{staticClass:\"el-icon-check\",staticStyle:{\"font-weight\":\"bold\",\"color\":\"#00b900\",\"font-size\":\"18px\"}}):_vm._e()]}}])})],1)],1)])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sub-title\"},[_c('i',{staticClass:\"iconfont icon-guanxitu\"}),_vm._v(\" 1vN查询\")])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1vN.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./1vN.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./1vN.vue?vue&type=template&id=6576891c&\"\nimport script from \"./1vN.vue?vue&type=script&lang=js&\"\nexport * from \"./1vN.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"boxer\"},[_vm._m(0),_c('el-radio-group',{staticClass:\"viewmode-radio-group\",model:{value:(_vm.type),callback:function ($$v) {_vm.type=$$v},expression:\"type\"}},[_c('el-radio-button',{attrs:{\"label\":\"grid\"}},[_c('i',{staticClass:\"el-icon-menu\"}),_vm._v(\" 画廊模式\")]),_c('el-radio-button',{attrs:{\"label\":\"table\"}},[_c('i',{staticClass:\"el-icon-s-unfold\"}),_vm._v(\" 表格模式\")])],1),_c('div',{staticClass:\"main-shadow-box\"},[(_vm.type==='grid')?_c('grid-view'):(_vm.type==='table')?_c('table-view'):_vm._e()],1)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sub-title\"},[_c('i',{staticClass:\"iconfont icon-entity\"}),_vm._v(\" 相似度对比\\n \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}]},[_c('el-row',{staticClass:\"top-row\",attrs:{\"gutter\":20}},[_c('el-col',{attrs:{\"span\":8}},[_c('el-button-group',{staticClass:\"overview-buttons\"},[_c('el-button',{class:_vm.currentSelect==='all'? 'el-button--primary':'',on:{\"click\":function($event){return _vm.load('all')}}},[_vm._v(\"全部\")]),_c('el-button',{class:_vm.currentSelect==='today'?'el-button--primary':'',on:{\"click\":function($event){return _vm.load('today')}}},[_vm._v(\"今天\")]),_c('el-button',{class:_vm.currentSelect==='week'? 'el-button--primary':'',on:{\"click\":function($event){return _vm.load('week')}}},[_vm._v(\"本周\")]),_c('el-button',{class:_vm.currentSelect==='month'?'el-button--primary':'',on:{\"click\":function($event){return _vm.load('month')}}},[_vm._v(\"本月\")])],1)],1),_c('el-col',{attrs:{\"span\":8}},[_c('el-date-picker',{attrs:{\"value-format\":\"timestamp\",\"type\":\"datetimerange\",\"range-separator\":\"至\",\"start-placeholder\":\"开始日期\",\"end-placeholder\":\"结束日期\"},model:{value:(_vm.timeRange),callback:function ($$v) {_vm.timeRange=$$v},expression:\"timeRange\"}})],1),_c('el-col',{attrs:{\"span\":4}},[_c('div',{staticClass:\"overview-box total\"},[_c('div',[_c('i',{staticClass:\"el-icon-files\"})]),_c('div',[_c('div',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.total))]),_c('div',{staticClass:\"label\"},[_vm._v(\"总数\")])])])]),_c('el-col',{attrs:{\"span\":4}},[_c('div',{staticClass:\"overview-box percent\"},[_c('div',[_c('i',{staticClass:\"el-icon-pie-chart\"})]),_c('div',[_c('div',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.passPercent))]),_c('div',{staticClass:\"label\"},[_vm._v(\"通过率\")])])])])],1),_c('charts-view',{attrs:{\"data-list\":_vm.chartData}}),_c('el-row',{staticClass:\"card-row\",attrs:{\"gutter\":15}},_vm._l((_vm.dataList),function(item){return _c('el-col',{key:item.id,attrs:{\"span\":8}},[_c('one-to-one-card',{attrs:{\"data\":item}})],1)}),1),_c('el-pagination',{staticStyle:{\"text-align\":\"center\"},attrs:{\"total\":_vm.total,\"layout\":'prev, pager, next, jumper, ->, total',\"current-page\":_vm.pageForm.page + 1,\"page-size\":_vm.pageForm.size},on:{\"current-change\":_vm.pageChange}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grid.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./grid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./grid.vue?vue&type=template&id=32eb8fc0&scoped=true&\"\nimport script from \"./grid.vue?vue&type=script&lang=js&\"\nexport * from \"./grid.vue?vue&type=script&lang=js&\"\nimport style0 from \"./grid.vue?vue&type=style&index=0&id=32eb8fc0&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"32eb8fc0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{attrs:{\"inline\":\"\"}},[_c('el-form-item',[_c('el-button-group',{staticClass:\"overview-buttons\"},[_c('el-button',{class:_vm.currentSelect==='all'? 'el-button--primary':'',on:{\"click\":function($event){return _vm.load('all')}}},[_vm._v(\"全部\")]),_c('el-button',{class:_vm.currentSelect==='today'?'el-button--primary':'',on:{\"click\":function($event){return _vm.load('today')}}},[_vm._v(\"今天\")]),_c('el-button',{class:_vm.currentSelect==='week'? 'el-button--primary':'',on:{\"click\":function($event){return _vm.load('week')}}},[_vm._v(\"本周\")]),_c('el-button',{class:_vm.currentSelect==='month'?'el-button--primary':'',on:{\"click\":function($event){return _vm.load('month')}}},[_vm._v(\"本月\")])],1)],1),_c('el-form-item',[_c('el-date-picker',{attrs:{\"value-format\":\"timestamp\",\"type\":\"datetimerange\",\"range-separator\":\"至\",\"start-placeholder\":\"开始日期\",\"end-placeholder\":\"结束日期\"},model:{value:(_vm.timeRange),callback:function ($$v) {_vm.timeRange=$$v},expression:\"timeRange\"}})],1),_c('el-form-item',{attrs:{\"label\":\"所属部门\"}},[_c('el-select',{attrs:{\"clearable\":\"\"},model:{value:(_vm.pageForm.departmentNo),callback:function ($$v) {_vm.$set(_vm.pageForm, \"departmentNo\", $$v)},expression:\"pageForm.departmentNo\"}},_vm._l((_vm.deptList),function(item){return _c('el-option',{key:item.id,attrs:{\"label\":item.name,\"value\":item.no}})}),1)],1),_c('el-form-item',{attrs:{\"label\":\"执行电脑\"}},[_c('el-select',{attrs:{\"clearable\":\"\"},model:{value:(_vm.pageForm.computerNo),callback:function ($$v) {_vm.$set(_vm.pageForm, \"computerNo\", $$v)},expression:\"pageForm.computerNo\"}},_vm._l((_vm.pcList),function(item){return _c('el-option',{key:item.id,attrs:{\"label\":item.name,\"value\":item.no}})}),1)],1),_c('el-form-item',{attrs:{\"label\":\"消息类型\"}},[_c('el-select',{attrs:{\"clearable\":\"\"},model:{value:(_vm.pageForm.msgCode),callback:function ($$v) {_vm.$set(_vm.pageForm, \"msgCode\", $$v)},expression:\"pageForm.msgCode\"}},_vm._l((_vm.msgList),function(item){return _c('el-option',{key:item.code,attrs:{\"label\":item.msg,\"value\":item.code}})}),1)],1)],1),_c('el-table',{attrs:{\"data\":_vm.dataList,\"size\":\"medium\"}},[_c('el-table-column',{attrs:{\"type\":\"index\",\"fixed\":\"\"}}),_c('el-table-column',{attrs:{\"label\":\"服务地址\",\"prop\":\"server\",\"width\":\"155px\"}}),_c('el-table-column',{attrs:{\"label\":\"请求路由\",\"prop\":\"route\",\"width\":\"145px\"}}),_c('el-table-column',{attrs:{\"label\":\"请求IP\",\"prop\":\"caller\",\"width\":\"130px\"}}),_c('el-table-column',{attrs:{\"label\":\"请求电脑\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"computer_name\")(scope.row.computerNo))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"所属部门\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"department_name\")(scope.row.departmentNo))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"对比类型\",\"width\":\"140px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"route_name\")(scope.row.route))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"对比模式\",\"width\":\"100px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(scope.row.compareMode.replace(\"模式\",\"\"))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"对比结果\",\"width\":\"85px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [(scope.row.compareResult==='SUCCESS')?_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"\\n \"+_vm._s(scope.row.matchNumber + '%')+\"\\n \")]):_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(\"\\n \"+_vm._s(scope.row.matchNumber?scope.row.matchNumber+'%':'失败')+\"\\n \")])]}}])}),_c('el-table-column',{attrs:{\"label\":\"请求时间\",\"width\":\"170px\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_vm._v(\"\\n \"+_vm._s(_vm._f(\"date_time\")(scope.row.createTime))+\"\\n \")]}}])}),_c('el-table-column',{attrs:{\"label\":\"操作\",\"align\":\"center\",\"width\":\"100px\",\"fixed\":\"right\"},scopedSlots:_vm._u([{key:\"default\",fn:function(scope){return [_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){return _vm.showDetail(scope.row)}}},[_vm._v(\"查看详情\")])]}}])})],1),_c('el-dialog',{attrs:{\"title\":\"对比详情\",\"visible\":_vm.visible,\"width\":\"90%\",\"destroy-on-close\":\"\"},on:{\"update:visible\":function($event){_vm.visible=$event}}},[_c('one-to-one-card',{staticClass:\"in-dialog\",attrs:{\"data\":_vm.currentObject}})],1),_c('el-pagination',{staticStyle:{\"text-align\":\"center\"},attrs:{\"total\":_vm.total,\"layout\":'prev, pager, next, jumper, ->, total',\"current-page\":_vm.pageForm.page + 1,\"page-size\":_vm.pageForm.size},on:{\"current-change\":_vm.pageChange}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./table.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./table.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./table.vue?vue&type=template&id=790b922e&scoped=true&\"\nimport script from \"./table.vue?vue&type=script&lang=js&\"\nexport * from \"./table.vue?vue&type=script&lang=js&\"\nimport style0 from \"./table.vue?vue&type=style&index=0&id=790b922e&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"790b922e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=26f1f0f4&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=26f1f0f4&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26f1f0f4\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./table.vue?vue&type=style&index=0&id=790b922e&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./table.vue?vue&type=style&index=0&id=790b922e&lang=less&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&id=087d572f&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&id=087d572f&lang=less&scoped=true&\""],"sourceRoot":""}