itowns 2.35.0 → 2.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +30 -17
- package/CONTRIBUTORS.md +1 -0
- package/changelog.md +146 -0
- package/dist/debug.js +1 -1
- package/dist/debug.js.LICENSE.txt +1 -1
- package/dist/debug.js.map +1 -1
- package/dist/itowns.js +1 -1
- package/dist/itowns.js.map +1 -1
- package/dist/itowns_widgets.js +2 -0
- package/dist/itowns_widgets.js.map +1 -0
- package/examples/3dtiles_basic.html +2 -2
- package/examples/config.json +25 -6
- package/examples/css/widgets.css +248 -0
- package/examples/geoid_geoidLayer.html +102 -0
- package/examples/images/compass.svg +60 -0
- package/examples/images/widget-logo.svg +66 -0
- package/examples/itowns-potree.html +252 -0
- package/examples/js/GUI/GuiTools.js +17 -0
- package/examples/js/Scale.js +1 -0
- package/examples/js/plugins/CSVnVRTParser.js +0 -1
- package/examples/layers/JSONLayers/Administrative.json +1 -1
- package/examples/layers/JSONLayers/Cada.json +1 -1
- package/examples/layers/JSONLayers/EtatMajor.json +1 -1
- package/examples/layers/JSONLayers/IGN_MNT.json +1 -1
- package/examples/layers/JSONLayers/IGN_MNT_HIGHRES.json +1 -1
- package/examples/layers/JSONLayers/WORLD_DTM.json +1 -1
- package/examples/misc_custom_label.html +0 -2
- package/examples/plugins_vrt.html +0 -1
- package/examples/source_file_from_fetched_data.html +90 -0
- package/examples/source_file_from_format.html +85 -0
- package/examples/source_file_from_methods.html +87 -0
- package/examples/source_file_from_parsed_data.html +104 -0
- package/examples/source_file_geojson_raster.html +21 -48
- package/examples/source_file_gpx_raster.html +28 -36
- package/examples/source_file_kml_raster.html +1 -4
- package/examples/source_file_shapefile.html +39 -35
- package/examples/source_stream_wfs_25d.html +29 -29
- package/examples/source_stream_wfs_3d.html +21 -12
- package/examples/source_stream_wfs_raster.html +20 -20
- package/examples/view_25d_map.html +28 -0
- package/examples/view_immersive.html +13 -14
- package/examples/view_multi_25d.html +1 -1
- package/examples/widgets_minimap.html +122 -0
- package/examples/widgets_navigation.html +119 -0
- package/lib/Controls/FirstPersonControls.js +10 -1
- package/lib/Controls/GlobeControls.js +26 -11
- package/lib/Controls/PlanarControls.js +1 -1
- package/lib/Converter/Feature2Mesh.js +1 -0
- package/lib/Converter/Feature2Texture.js +2 -2
- package/lib/Converter/convertToTile.js +6 -2
- package/lib/Core/3DTiles/C3DTBoundingVolume.js +4 -1
- package/lib/Core/Deprecated/Undeprecator.js +1 -1
- package/lib/Core/Feature.js +42 -42
- package/lib/Core/Geographic/Coordinates.js +56 -0
- package/lib/Core/Geographic/Crs.js +15 -0
- package/lib/Core/Geographic/Extent.js +100 -12
- package/lib/Core/Geographic/GeoidGrid.js +143 -0
- package/lib/Core/MainLoop.js +1 -1
- package/lib/Core/Math/Ellipsoid.js +27 -9
- package/lib/Core/Prefab/Globe/BuilderEllipsoidTile.js +1 -1
- package/lib/Core/Prefab/Globe/SkyShader.js +3 -1
- package/lib/Core/Prefab/Planar/PlanarLayer.js +3 -1
- package/lib/Core/Prefab/PlanarView.js +1 -1
- package/lib/Core/Style.js +2 -1
- package/lib/Core/TileGeometry.js +3 -1
- package/lib/Core/TileMesh.js +11 -16
- package/lib/Core/View.js +43 -5
- package/lib/Layer/ElevationLayer.js +15 -18
- package/lib/Layer/FeatureGeometryLayer.js +3 -1
- package/lib/Layer/GeoidLayer.js +131 -0
- package/lib/Layer/InfoLayer.js +1 -1
- package/lib/Layer/LabelLayer.js +7 -1
- package/lib/Layer/Layer.js +1 -1
- package/lib/Layer/LayerUpdateStrategy.js +1 -1
- package/lib/Layer/PotreeLayer.js +3 -1
- package/lib/Layer/TiledGeometryLayer.js +3 -1
- package/lib/Main.js +214 -174
- package/lib/MainBundle.js +1 -1
- package/lib/Parser/B3dmParser.js +2 -1
- package/lib/Parser/GDFParser.js +118 -0
- package/lib/Parser/GTXParser.js +92 -0
- package/lib/Parser/ISGParser.js +121 -0
- package/lib/Parser/LASParser.js +3 -1
- package/lib/Parser/ShapefileParser.js +0 -1
- package/lib/Parser/VectorTileParser.js +1 -1
- package/lib/Parser/XbilParser.js +1 -1
- package/lib/Process/3dTilesProcessing.js +10 -10
- package/lib/Process/FeatureProcessing.js +3 -1
- package/lib/Process/LayeredMaterialNodeProcessing.js +7 -4
- package/lib/Process/ObjectRemovalHelper.js +5 -2
- package/lib/Provider/URLBuilder.js +1 -1
- package/lib/Renderer/Label2DRenderer.js +14 -11
- package/lib/Renderer/LayeredMaterial.js +4 -3
- package/lib/Renderer/OBB.js +20 -27
- package/lib/Renderer/PointsMaterial.js +5 -6
- package/lib/Renderer/RasterTile.js +23 -5
- package/lib/Renderer/Shader/ShaderChunk.js +3 -3
- package/lib/Renderer/Shader/ShaderUtils.js +4 -2
- package/lib/Source/C3DTilesSource.js +3 -1
- package/lib/Source/EntwinePointTileSource.js +3 -1
- package/lib/Source/FileSource.js +2 -7
- package/lib/Source/PotreeSource.js +3 -1
- package/lib/Source/Source.js +15 -10
- package/lib/Source/VectorTilesSource.js +19 -0
- package/lib/Source/WMTSSource.js +3 -1
- package/lib/ThreeExtended/loaders/GLTFLoader.js +239 -98
- package/lib/Utils/CameraUtils.js +12 -2
- package/lib/Utils/DEMUtils.js +3 -3
- package/lib/Utils/FeaturesUtils.js +8 -4
- package/package.json +25 -25
package/dist/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","mappings":"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","sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://[name]/./node_modules/chart.js/dist/chart.esm.js","webpack://[name]/./utils/debug/charts/ChartConfig.js","webpack://[name]/./utils/debug/charts/ThreeStatsChart.js","webpack://[name]/./utils/debug/OBBHelper.js","webpack://[name]/./utils/debug/Debug.js","webpack://[name]/./utils/debug/PotreeDebug.js","webpack://[name]/./utils/debug/charts/TileObjectChart.js","webpack://[name]/./utils/debug/charts/TileVisibilityChart.js","webpack://[name]/./utils/debug/GeometryDebug.js","webpack://[name]/./utils/debug/TileDebug.js","webpack://[name]/./utils/debug/3dTilesDebug.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"debug\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"debug\"] = factory();\n\telse\n\t\troot[\"debug\"] = factory();\n})(self, function() {\nreturn ","/*!\n * Chart.js v3.5.1\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function() {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay);\n } else {\n fn();\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n const idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n let pos = 0;\n let idx = indexOfDotOrLength(key, pos);\n while (obj && idx > pos) {\n obj = obj[key.substr(pos, idx - pos)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n return obj;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\nconst map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = '0123456789ABCDEF';\nconst h1 = (b) => hex[b & 0xF];\nconst h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF));\nfunction isShort(v) {\n\treturn eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\nfunction hexParse(str) {\n\tvar len = str.length;\n\tvar ret;\n\tif (str[0] === '#') {\n\t\tif (len === 4 || len === 5) {\n\t\t\tret = {\n\t\t\t\tr: 255 & map[str[1]] * 17,\n\t\t\t\tg: 255 & map[str[2]] * 17,\n\t\t\t\tb: 255 & map[str[3]] * 17,\n\t\t\t\ta: len === 5 ? map[str[4]] * 17 : 255\n\t\t\t};\n\t\t} else if (len === 7 || len === 9) {\n\t\t\tret = {\n\t\t\t\tr: map[str[1]] << 4 | map[str[2]],\n\t\t\t\tg: map[str[3]] << 4 | map[str[4]],\n\t\t\t\tb: map[str[5]] << 4 | map[str[6]],\n\t\t\t\ta: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n\t\t\t};\n\t\t}\n\t}\n\treturn ret;\n}\nfunction hexString(v) {\n\tvar f = isShort(v) ? h1 : h2;\n\treturn v\n\t\t? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '')\n\t\t: v;\n}\nfunction round(v) {\n\treturn v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n\treturn lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n\treturn lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n\treturn lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n\treturn lim(round(v * 100), 0, 100);\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n\tconst m = RGB_RE.exec(str);\n\tlet a = 255;\n\tlet r, g, b;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[7] !== r) {\n\t\tconst v = +m[7];\n\t\ta = 255 & (m[8] ? p2b(v) : v * 255);\n\t}\n\tr = +m[1];\n\tg = +m[3];\n\tb = +m[5];\n\tr = 255 & (m[2] ? p2b(r) : r);\n\tg = 255 & (m[4] ? p2b(g) : g);\n\tb = 255 & (m[6] ? p2b(b) : b);\n\treturn {\n\t\tr: r,\n\t\tg: g,\n\t\tb: b,\n\t\ta: a\n\t};\n}\nfunction rgbString(v) {\n\treturn v && (\n\t\tv.a < 255\n\t\t\t? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n\t\t\t: `rgb(${v.r}, ${v.g}, ${v.b})`\n\t);\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\treturn [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n\tconst f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n\tconst rgb = hsl2rgbn(h, 1, 0.5);\n\tlet i;\n\tif (w + b > 1) {\n\t\ti = 1 / (w + b);\n\t\tw *= i;\n\t\tb *= i;\n\t}\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] *= 1 - w - b;\n\t\trgb[i] += w;\n\t}\n\treturn rgb;\n}\nfunction rgb2hsl(v) {\n\tconst range = 255;\n\tconst r = v.r / range;\n\tconst g = v.g / range;\n\tconst b = v.b / range;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h, s, d;\n\tif (max !== min) {\n\t\td = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\th = max === r\n\t\t\t? ((g - b) / d) + (g < b ? 6 : 0)\n\t\t\t: max === g\n\t\t\t\t? (b - r) / d + 2\n\t\t\t\t: (r - g) / d + 4;\n\t\th = h * 60 + 0.5;\n\t}\n\treturn [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n\treturn (\n\t\tArray.isArray(a)\n\t\t\t? f(a[0], a[1], a[2])\n\t\t\t: f(a, b, c)\n\t).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n\treturn calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n\treturn calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n\treturn calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n\treturn (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n\tconst m = HUE_RE.exec(str);\n\tlet a = 255;\n\tlet v;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[5] !== v) {\n\t\ta = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n\t}\n\tconst h = hue(+m[2]);\n\tconst p1 = +m[3] / 100;\n\tconst p2 = +m[4] / 100;\n\tif (m[1] === 'hwb') {\n\t\tv = hwb2rgb(h, p1, p2);\n\t} else if (m[1] === 'hsv') {\n\t\tv = hsv2rgb(h, p1, p2);\n\t} else {\n\t\tv = hsl2rgb(h, p1, p2);\n\t}\n\treturn {\n\t\tr: v[0],\n\t\tg: v[1],\n\t\tb: v[2],\n\t\ta: a\n\t};\n}\nfunction rotate(v, deg) {\n\tvar h = rgb2hsl(v);\n\th[0] = hue(h[0] + deg);\n\th = hsl2rgb(h);\n\tv.r = h[0];\n\tv.g = h[1];\n\tv.b = h[2];\n}\nfunction hslString(v) {\n\tif (!v) {\n\t\treturn;\n\t}\n\tconst a = rgb2hsl(v);\n\tconst h = a[0];\n\tconst s = n2p(a[1]);\n\tconst l = n2p(a[2]);\n\treturn v.a < 255\n\t\t? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n\t\t: `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map$1 = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n\tconst unpacked = {};\n\tconst keys = Object.keys(names);\n\tconst tkeys = Object.keys(map$1);\n\tlet i, j, k, ok, nk;\n\tfor (i = 0; i < keys.length; i++) {\n\t\tok = nk = keys[i];\n\t\tfor (j = 0; j < tkeys.length; j++) {\n\t\t\tk = tkeys[j];\n\t\t\tnk = nk.replace(k, map$1[k]);\n\t\t}\n\t\tk = parseInt(names[ok], 16);\n\t\tunpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n\t}\n\treturn unpacked;\n}\nlet names$1;\nfunction nameParse(str) {\n\tif (!names$1) {\n\t\tnames$1 = unpack();\n\t\tnames$1.transparent = [0, 0, 0, 0];\n\t}\n\tconst a = names$1[str.toLowerCase()];\n\treturn a && {\n\t\tr: a[0],\n\t\tg: a[1],\n\t\tb: a[2],\n\t\ta: a.length === 4 ? a[3] : 255\n\t};\n}\nfunction modHSL(v, i, ratio) {\n\tif (v) {\n\t\tlet tmp = rgb2hsl(v);\n\t\ttmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n\t\ttmp = hsl2rgb(tmp);\n\t\tv.r = tmp[0];\n\t\tv.g = tmp[1];\n\t\tv.b = tmp[2];\n\t}\n}\nfunction clone(v, proto) {\n\treturn v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n\tvar v = {r: 0, g: 0, b: 0, a: 255};\n\tif (Array.isArray(input)) {\n\t\tif (input.length >= 3) {\n\t\t\tv = {r: input[0], g: input[1], b: input[2], a: 255};\n\t\t\tif (input.length > 3) {\n\t\t\t\tv.a = n2b(input[3]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = clone(input, {r: 0, g: 0, b: 0, a: 1});\n\t\tv.a = n2b(v.a);\n\t}\n\treturn v;\n}\nfunction functionParse(str) {\n\tif (str.charAt(0) === 'r') {\n\t\treturn rgbParse(str);\n\t}\n\treturn hueParse(str);\n}\nclass Color {\n\tconstructor(input) {\n\t\tif (input instanceof Color) {\n\t\t\treturn input;\n\t\t}\n\t\tconst type = typeof input;\n\t\tlet v;\n\t\tif (type === 'object') {\n\t\t\tv = fromObject(input);\n\t\t} else if (type === 'string') {\n\t\t\tv = hexParse(input) || nameParse(input) || functionParse(input);\n\t\t}\n\t\tthis._rgb = v;\n\t\tthis._valid = !!v;\n\t}\n\tget valid() {\n\t\treturn this._valid;\n\t}\n\tget rgb() {\n\t\tvar v = clone(this._rgb);\n\t\tif (v) {\n\t\t\tv.a = b2n(v.a);\n\t\t}\n\t\treturn v;\n\t}\n\tset rgb(obj) {\n\t\tthis._rgb = fromObject(obj);\n\t}\n\trgbString() {\n\t\treturn this._valid ? rgbString(this._rgb) : this._rgb;\n\t}\n\thexString() {\n\t\treturn this._valid ? hexString(this._rgb) : this._rgb;\n\t}\n\thslString() {\n\t\treturn this._valid ? hslString(this._rgb) : this._rgb;\n\t}\n\tmix(color, weight) {\n\t\tconst me = this;\n\t\tif (color) {\n\t\t\tconst c1 = me.rgb;\n\t\t\tconst c2 = color.rgb;\n\t\t\tlet w2;\n\t\t\tconst p = weight === w2 ? 0.5 : weight;\n\t\t\tconst w = 2 * p - 1;\n\t\t\tconst a = c1.a - c2.a;\n\t\t\tconst w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\tw2 = 1 - w1;\n\t\t\tc1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n\t\t\tc1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n\t\t\tc1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n\t\t\tc1.a = p * c1.a + (1 - p) * c2.a;\n\t\t\tme.rgb = c1;\n\t\t}\n\t\treturn me;\n\t}\n\tclone() {\n\t\treturn new Color(this.rgb);\n\t}\n\talpha(a) {\n\t\tthis._rgb.a = n2b(a);\n\t\treturn this;\n\t}\n\tclearer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 - ratio;\n\t\treturn this;\n\t}\n\tgreyscale() {\n\t\tconst rgb = this._rgb;\n\t\tconst val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n\t\trgb.r = rgb.g = rgb.b = val;\n\t\treturn this;\n\t}\n\topaquer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 + ratio;\n\t\treturn this;\n\t}\n\tnegate() {\n\t\tconst v = this._rgb;\n\t\tv.r = 255 - v.r;\n\t\tv.g = 255 - v.g;\n\t\tv.b = 255 - v.b;\n\t\treturn this;\n\t}\n\tlighten(ratio) {\n\t\tmodHSL(this._rgb, 2, ratio);\n\t\treturn this;\n\t}\n\tdarken(ratio) {\n\t\tmodHSL(this._rgb, 2, -ratio);\n\t\treturn this;\n\t}\n\tsaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, ratio);\n\t\treturn this;\n\t}\n\tdesaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, -ratio);\n\t\treturn this;\n\t}\n\trotate(deg) {\n\t\trotate(this._rgb, deg);\n\t\treturn this;\n\t}\n}\nfunction index_esm(input) {\n\treturn new Color(input);\n}\n\nconst isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern;\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.describe(_descriptors);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n let type, xOffset, yOffset, size, cornerRadius;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace) {\n const {min, max} = minmax;\n return {\n min: min - Math.abs(toDimension(grace, min)),\n max: max + toDimension(grace, max)\n };\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n storage[prop] = value;\n delete target[prop];\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters';\nfunction _cached(target, prop, resolve) {\n let value = target[prop];\n if (defined(value)) {\n return value;\n }\n value = resolve();\n if (defined(value)) {\n target[prop] = value;\n }\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (isObject(value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, scope);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(evt, canvas) {\n const e = evt.native || evt;\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: (n, s, e) => n >= Math.min(s, e) && n <= Math.max(e, s),\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const baseStyle = readStyle(line.options);\n const count = points.length;\n const result = [];\n let start = segments[0].start;\n let i = start;\n for (const segment of segments) {\n let prevStyle = baseStyle;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext({\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex: line._datasetIndex\n }));\n if (styleChanged(style, prevStyle)) {\n result.push({start: start, end: i - 1, loop: segment.loop, style: prevStyle});\n prevStyle = style;\n start = i - 1;\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n result.push({start, end: i - 1, loop: segment.loop, style});\n start = i - 1;\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { overrides as $, toPadding as A, each as B, getMaximumSize as C, _getParentNode as D, readUsedSize as E, throttled as F, supportsEventListenerOptions as G, HALF_PI as H, _isDomSupported as I, log10 as J, _factorize as K, finiteOrDefault as L, callback as M, _addGrace as N, toDegrees as O, PI as P, _measureText as Q, _int16Range as R, _alignPixel as S, TAU as T, clipArea as U, renderText as V, unclipArea as W, toFont as X, _toLeftRightCenter as Y, _alignStartEnd as Z, _arrayUnique as _, resolve as a, merge as a0, _capitalize as a1, descriptors as a2, isFunction as a3, _attachContext as a4, _createResolver as a5, _descriptors as a6, mergeIf as a7, uid as a8, debounce as a9, _setMinAndMaxByKey as aA, niceNum as aB, almostWhole as aC, almostEquals as aD, _decimalPlaces as aE, _longestText as aF, _filterBetween as aG, _lookup as aH, getHoverColor as aI, clone$1 as aJ, _merger as aK, _mergerIf as aL, _deprecated as aM, toFontString as aN, splineCurve as aO, splineCurveMonotone as aP, getStyle as aQ, fontString as aR, toLineHeight as aS, PITAU as aT, INFINITY as aU, RAD_PER_DEG as aV, QUARTER_PI as aW, TWO_THIRDS_PI as aX, _angleDiff as aY, retinaScale as aa, clearCanvas as ab, setsEqual as ac, _elementsEqual as ad, getAngleFromPoint as ae, _readValueToProps as af, _updateBezierControlPoints as ag, _computeSegments as ah, _boundSegments as ai, _steppedInterpolation as aj, _bezierInterpolation as ak, _pointInLine as al, _steppedLineTo as am, _bezierCurveTo as an, drawPoint as ao, addRoundedRectPath as ap, toTRBL as aq, toTRBLCorners as ar, _boundSegment as as, _normalizeAngle as at, getRtlAdapter as au, overrideTextDirection as av, _textX as aw, restoreTextDirection as ax, noop as ay, distanceBetweenPoints as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, isNullOrUndef as j, toPercentage as k, listenArrayEvents as l, toDimension as m, formatNumber as n, _angleBetween as o, isNumber as p, _limitValue as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _lookupByKey as w, getRelativePosition as x, _isPointInArea as y, _rlookupByKey as z };\n","/*!\n * Chart.js v3.5.1\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as isNullOrUndef, _ as _arrayUnique, t as toRadians, k as toPercentage, m as toDimension, T as TAU, n as formatNumber, o as _angleBetween, H as HALF_PI, P as PI, p as isNumber, q as _limitValue, w as _lookupByKey, x as getRelativePosition$1, y as _isPointInArea, z as _rlookupByKey, A as toPadding, B as each, C as getMaximumSize, D as _getParentNode, E as readUsedSize, F as throttled, G as supportsEventListenerOptions, I as _isDomSupported, J as log10, K as _factorize, L as finiteOrDefault, M as callback, N as _addGrace, O as toDegrees, Q as _measureText, R as _int16Range, S as _alignPixel, U as clipArea, V as renderText, W as unclipArea, X as toFont, Y as _toLeftRightCenter, Z as _alignStartEnd, $ as overrides, a0 as merge, a1 as _capitalize, a2 as descriptors, a3 as isFunction, a4 as _attachContext, a5 as _createResolver, a6 as _descriptors, a7 as mergeIf, a8 as uid, a9 as debounce, aa as retinaScale, ab as clearCanvas, ac as setsEqual, ad as _elementsEqual, ae as getAngleFromPoint, af as _readValueToProps, ag as _updateBezierControlPoints, ah as _computeSegments, ai as _boundSegments, aj as _steppedInterpolation, ak as _bezierInterpolation, al as _pointInLine, am as _steppedLineTo, an as _bezierCurveTo, ao as drawPoint, ap as addRoundedRectPath, aq as toTRBL, ar as toTRBLCorners, as as _boundSegment, at as _normalizeAngle, au as getRtlAdapter, av as overrideTextDirection, aw as _textX, ax as restoreTextDirection, ay as noop, az as distanceBetweenPoints, aA as _setMinAndMaxByKey, aB as niceNum, aC as almostWhole, aD as almostEquals, aE as _decimalPlaces, aF as _longestText, aG as _filterBetween, aH as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n const me = this;\n if (me._request) {\n return;\n }\n me._running = true;\n me._request = requestAnimFrame.call(window, () => {\n me._update();\n me._request = null;\n if (me._running) {\n me._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n const me = this;\n let remaining = 0;\n me._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n me._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n me._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n me._lastDate = date;\n if (remaining === 0) {\n me._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n const me = this;\n if (me._active) {\n me._notify(false);\n const currentValue = me._target[me._prop];\n const elapsed = date - me._start;\n const remain = me._duration - elapsed;\n me._start = date;\n me._duration = Math.floor(Math.max(remain, cfg.duration));\n me._total += elapsed;\n me._loop = !!cfg.loop;\n me._to = resolve([cfg.to, to, currentValue, cfg.from]);\n me._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n const me = this;\n if (me._active) {\n me.tick(Date.now());\n me._active = false;\n me._notify(false);\n }\n }\n tick(date) {\n const me = this;\n const elapsed = date - me._start;\n const duration = me._duration;\n const prop = me._prop;\n const from = me._from;\n const loop = me._loop;\n const to = me._to;\n let factor;\n me._active = from !== to && (loop || (elapsed < duration));\n if (!me._active) {\n me._target[prop] = to;\n me._notify(true);\n return;\n }\n if (elapsed < 0) {\n me._target[prop] = from;\n return;\n }\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = me._easing(Math.min(1, Math.max(0, factor)));\n me._target[prop] = me._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n});\ndefaults.describe('animations', {\n _fallback: 'animation',\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive) {\n for (const meta of vScale.getMatchingVisibleMetas('bar').reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true);\n stack._bottom = getLastIndexInStack(stack, vScale, false);\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return Object.assign(Object.create(parent),\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\nfunction createDataContext(parent, index, element) {\n return Object.assign(Object.create(parent), {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nclass DatasetController {\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n initialize() {\n const me = this;\n const meta = me._cachedMeta;\n me.configure();\n me.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n me.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const me = this;\n const chart = me.chart;\n const meta = me._cachedMeta;\n const dataset = me.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = me.getScaleForId(xid);\n meta.yScale = me.getScaleForId(yid);\n meta.rScale = me.getScaleForId(rid);\n meta.iScale = me.getScaleForId(iid);\n meta.vScale = me.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const me = this;\n const dataset = me.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = me._data;\n if (isObject(data)) {\n me._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, me);\n const meta = me._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, me);\n }\n me._syncList = [];\n me._data = data;\n }\n }\n addElements() {\n const me = this;\n const meta = me._cachedMeta;\n me._dataCheck();\n if (me.datasetElementType) {\n meta.dataset = new me.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const me = this;\n const meta = me._cachedMeta;\n const dataset = me.getDataset();\n let stackChanged = false;\n me._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n me._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(me, meta._parsed);\n }\n }\n configure() {\n const me = this;\n const config = me.chart.config;\n const scopeKeys = config.datasetScopeKeys(me._type);\n const scopes = config.getOptionScopes(me.getDataset(), scopeKeys, true);\n me.options = config.createResolver(scopes, me.getContext());\n me._parsing = me.options.parsing;\n }\n parse(start, count) {\n const me = this;\n const {_cachedMeta: meta, _data: data} = me;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (me._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = me.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = me.parseObjectData(meta, data, start, count);\n } else {\n parsed = me.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(me, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n value = applyStack(stack, parsedValue, this._cachedMeta.index, {all: true});\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const me = this;\n const meta = me._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = me._getOtherScale(scale);\n const stack = canStack && meta._stacked && {keys: getSortedDatasetIndices(me.chart, true), values: null};\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, value, parsed, otherValue;\n function _skip() {\n parsed = _parsed[i];\n value = parsed[scale.axis];\n otherValue = parsed[otherScale.axis];\n return !isNumberFinite(value) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n me.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n me.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const me = this;\n const meta = me._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = me.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const me = this;\n const meta = me._cachedMeta;\n me.configure();\n me._cachedDataOpts = {};\n me.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(me.options.clip, defaultClip(meta.xScale, meta.yScale, me.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const me = this;\n const ctx = me._ctx;\n const chart = me.chart;\n const meta = me._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = me._drawStart || 0;\n const count = me._drawCount || (elements.length - start);\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const me = this;\n const dataset = me.getDataset();\n let context;\n if (index >= 0 && index < me._cachedMeta.data.length) {\n const element = me._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(me.getContext(), index, element));\n context.parsed = me.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = me.$context ||\n (me.$context = createDatasetContext(me.chart.getContext(), me.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = me.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const me = this;\n const active = mode === 'active';\n const cache = me._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = me.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = me.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(me._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(me.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => me.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const me = this;\n const chart = me.chart;\n const cache = me._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = me.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(me._type, transition);\n const scopes = config.getOptionScopes(me.getDataset(), scopeKeys);\n options = config.createResolver(scopes, me.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const me = this;\n const data = me._data;\n const elements = me._cachedMeta.data;\n for (const [method, arg1, arg2] of me._syncList) {\n me[method](arg1, arg2);\n }\n me._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n me.parse(0, count);\n }\n if (numData > numMeta) {\n me._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n me._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const me = this;\n const meta = me._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new me.dataElementType();\n }\n if (me._parsing) {\n move(meta._parsed);\n }\n me.parse(start, count);\n if (resetNewElements) {\n me.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const me = this;\n const meta = me._cachedMeta;\n if (me._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n this._sync(['_removeElements', start, count]);\n this._sync(['_insertElements', start, arguments.length - 2]);\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale) {\n if (!scale._cache.$bar) {\n const metas = scale.getMatchingVisibleMetas('bar');\n let values = [];\n for (let i = 0, ilen = metas.length; i < ilen; i++) {\n values = values.concat(metas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(scale) {\n const values = getAllScaleValues(scale);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const me = this;\n const meta = me._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = me.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n const me = this;\n me.enableOptionSharing = true;\n super.initialize();\n const meta = me._cachedMeta;\n meta.stack = me.getDataset().stack;\n }\n update(mode) {\n const me = this;\n const meta = me._cachedMeta;\n me.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const me = this;\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = me;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = me._getRuler();\n const firstOpts = me.resolveDataElementOptions(start, mode);\n const sharedOptions = me.getSharedOptions(firstOpts);\n const includeOptions = me.includeOptions(mode, sharedOptions);\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n for (let i = start; i < start + count; i++) {\n const parsed = me.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : me._calculateBarValuePixels(i);\n const ipixels = me._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n setBorderSkipped(properties, properties.options || bars[i].options, stack, index);\n me.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const me = this;\n const meta = me._cachedMeta;\n const iScale = meta.iScale;\n const metasets = iScale.getMatchingVisibleMetas(me._type);\n const stacked = iScale.options.stacked;\n const ilen = metasets.length;\n const stacks = [];\n let i, item;\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n if (!item.controller.options.grouped) {\n continue;\n }\n if (typeof dataIndex !== 'undefined') {\n const val = item.controller.getParsed(dataIndex)[\n item.controller._cachedMeta.vScale.axis\n ];\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n stacks.push(item.stack);\n }\n if (item.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const me = this;\n const opts = me.options;\n const meta = me._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(me.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(iScale);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: me._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const me = this;\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = me;\n const actualBase = baseValue || 0;\n const parsed = me.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? me.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (me.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const me = this;\n const scale = ruler.scale;\n const options = me.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? me._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(me.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const me = this;\n const meta = me._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (me.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(me._ctx);\n }\n }\n }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n};\n\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = [];\n let i, ilen, item;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n item = data[i];\n parsed.push({\n x: xScale.parse(resolveObjectKey(item, xAxisKey), i),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), i),\n _custom: item && item.r && +item.r\n });\n }\n return parsed;\n }\n getMaxOverflow() {\n const {data, _parsed} = this._cachedMeta;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size() / 2, _parsed[i]._custom);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const me = this;\n const meta = me._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = me.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const me = this;\n const points = me._cachedMeta.data;\n me.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const me = this;\n const reset = mode === 'reset';\n const {iScale, vScale} = me._cachedMeta;\n const firstOpts = me.resolveDataElementOptions(start, mode);\n const sharedOptions = me.getSharedOptions(firstOpts);\n const includeOptions = me.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && me.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n me.updateElement(point, i, properties, mode);\n }\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = +data[i];\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n const me = this;\n for (let i = 0; i < me.chart.data.datasets.length; ++i) {\n if (me.chart.isDatasetVisible(i)) {\n const controller = me.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const me = this;\n const chart = me.chart;\n const {chartArea} = chart;\n const meta = me._cachedMeta;\n const arcs = meta.data;\n const spacing = me.getMaxBorderWidth() + me.getMaxOffset(arcs) + me.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(me.options.cutout, maxSize), 1);\n const chartWeight = me._getRingWeight(me.index);\n const {circumference, rotation} = me._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(me.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / me._getVisibleDatasetWeightTotal();\n me.offsetX = offsetX * outerRadius;\n me.offsetY = offsetY * outerRadius;\n meta.total = me.calculateTotal();\n me.outerRadius = outerRadius - radiusLength * me._getRingWeightOffset(me.index);\n me.innerRadius = Math.max(me.outerRadius - radiusLength * chartWeight, 0);\n me.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const me = this;\n const opts = me.options;\n const meta = me._cachedMeta;\n const circumference = me._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return me.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const me = this;\n const reset = mode === 'reset';\n const chart = me.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : me.innerRadius;\n const outerRadius = animateScale ? 0 : me.outerRadius;\n const firstOpts = me.resolveDataElementOptions(start, mode);\n const sharedOptions = me.getSharedOptions(firstOpts);\n const includeOptions = me.includeOptions(mode, sharedOptions);\n let startAngle = me._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += me._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = me._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + me.offsetX,\n y: centerY + me.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n me.updateElement(arc, i, properties, mode);\n }\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const me = this;\n const meta = me._cachedMeta;\n const chart = me.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n const me = this;\n let max = 0;\n const chart = me.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n if (controller !== me) {\n controller.configure();\n }\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n update(mode) {\n const me = this;\n const meta = me._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = me.chart._animationsDisabled;\n let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n me._drawStart = start;\n me._drawCount = count;\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._datasetIndex = me.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = me.resolveDatasetElementOptions(mode);\n if (!me.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = me.options.segment;\n me.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n me.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const me = this;\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked} = me._cachedMeta;\n const firstOpts = me.resolveDataElementOptions(start, mode);\n const sharedOptions = me.getSharedOptions(firstOpts);\n const includeOptions = me.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const spanGaps = me.options.spanGaps;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = me.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && me.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = me.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? me.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n properties.parsed = parsed;\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n me.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const me = this;\n const meta = me._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(me.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(me.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false,\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const me = this;\n const meta = me._cachedMeta;\n const chart = me.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _updateRadius() {\n const me = this;\n const chart = me.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n me.outerRadius = outerRadius - (radiusLength * me.index);\n me.innerRadius = me.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const me = this;\n const reset = mode === 'reset';\n const chart = me.chart;\n const dataset = me.getDataset();\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = me._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / me.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += me._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + me._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: me.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n me.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const dataset = this.getDataset();\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const me = this;\n const vScale = me._cachedMeta.vScale;\n const parsed = me.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n update(mode) {\n const me = this;\n const meta = me._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = me.resolveDatasetElementOptions(mode);\n if (!me.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n me.updateElement(line, undefined, properties, mode);\n }\n me.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const me = this;\n const dataset = me.getDataset();\n const scale = me._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n me.updateElement(point, i, properties, mode);\n }\n }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n return getRelativePosition$1(e, chart);\n}\nfunction evaluateAllVisibleItems(chart, handler) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n let index, data, element;\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n ({index, data} = metasets[i]);\n for (let j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n const items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n let items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (intersect && !element.inRange(position.x, position.y, useFinalPosition)) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n };\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const items = [];\n const axis = options.axis;\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateAllVisibleItems(chart, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n if (options.intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition)\n : getNearestItems(chart, position, axis, false, useFinalPosition);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition) :\n getNearestItems(chart, position, axis, false, useFinalPosition);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x(chart, e, options, useFinalPosition) {\n options.axis = 'x';\n return getAxisItems(chart, e, options, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n options.axis = 'y';\n return getAxisItems(chart, e, options, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\ndefaults.set('layout', {\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h);\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition$1(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n const element = container || canvas;\n const observer = new MutationObserver(entries => {\n const parent = _getParentNode(element);\n entries.forEach(entry => {\n for (let i = 0; i < entry.addedNodes.length; i++) {\n const added = entry.addedNodes[i];\n if (added === element || added === parent) {\n listener(entry.target);\n }\n }\n });\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const observer = new MutationObserver(entries => {\n entries.forEach(entry => {\n for (let i = 0; i < entry.removedNodes.length; i++) {\n if (entry.removedNodes[i] === canvas) {\n listener();\n break;\n }\n }\n });\n });\n observer.observe(container, {childList: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const me = this;\n const anims = this.$animations;\n if (!final || !anims) {\n return me;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : me[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return Object.assign(Object.create(parent), {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return Object.assign(Object.create(parent), {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n const me = this;\n me.options = options.setContext(me.getContext());\n me.axis = options.axis;\n me._userMin = me.parse(options.min);\n me._userMax = me.parse(options.max);\n me._suggestedMin = me.parse(options.suggestedMin);\n me._suggestedMax = me.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n const me = this;\n let {min, max, minDefined, maxDefined} = me.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = me.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(me, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n const me = this;\n return {\n left: me.paddingLeft || 0,\n top: me.paddingTop || 0,\n right: me.paddingRight || 0,\n bottom: me.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const me = this;\n const tickOpts = me.options.ticks;\n const sampleSize = tickOpts.sampleSize;\n me.beforeUpdate();\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n me.ticks = null;\n me._labelSizes = null;\n me._gridLineItems = null;\n me._labelItems = null;\n me.beforeSetDimensions();\n me.setDimensions();\n me.afterSetDimensions();\n me._maxLength = me.isHorizontal()\n ? me.width + margins.left + margins.right\n : me.height + margins.top + margins.bottom;\n if (!me._dataLimitsCached) {\n me.beforeDataLimits();\n me.determineDataLimits();\n me.afterDataLimits();\n me._range = _addGrace(me, me.options.grace);\n me._dataLimitsCached = true;\n }\n me.beforeBuildTicks();\n me.ticks = me.buildTicks() || [];\n me.afterBuildTicks();\n const samplingEnabled = sampleSize < me.ticks.length;\n me._convertTicksToLabels(samplingEnabled ? sample(me.ticks, sampleSize) : me.ticks);\n me.configure();\n me.beforeCalculateLabelRotation();\n me.calculateLabelRotation();\n me.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n me.ticks = autoSkip(me, me.ticks);\n me._labelSizes = null;\n }\n if (samplingEnabled) {\n me._convertTicksToLabels(me.ticks);\n }\n me.beforeFit();\n me.fit();\n me.afterFit();\n me.afterUpdate();\n }\n configure() {\n const me = this;\n let reversePixels = me.options.reverse;\n let startPixel, endPixel;\n if (me.isHorizontal()) {\n startPixel = me.left;\n endPixel = me.right;\n } else {\n startPixel = me.top;\n endPixel = me.bottom;\n reversePixels = !reversePixels;\n }\n me._startPixel = startPixel;\n me._endPixel = endPixel;\n me._reversePixels = reversePixels;\n me._length = endPixel - startPixel;\n me._alignToPixels = me.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n const me = this;\n if (me.isHorizontal()) {\n me.width = me.maxWidth;\n me.left = 0;\n me.right = me.width;\n } else {\n me.height = me.maxHeight;\n me.top = 0;\n me.bottom = me.height;\n }\n me.paddingLeft = 0;\n me.paddingTop = 0;\n me.paddingRight = 0;\n me.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n const me = this;\n me.chart.notifyPlugins(name, me.getContext());\n callback(me.options[name], [me]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const me = this;\n const tickOpts = me.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], me);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const me = this;\n const options = me.options;\n const tickOpts = options.ticks;\n const numTicks = me.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\n me.labelRotation = minRotation;\n return;\n }\n const labelSizes = me._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(me.chart.width - maxLabelWidth, 0, me.maxWidth);\n tickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = me.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, me.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n me.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const me = this;\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = me;\n const display = me._isVisible();\n const isHorizontal = me.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = me.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = me.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && me.ticks.length) {\n const {first, last, widest, highest} = me._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(me.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n me._calculatePadding(first, last, sin, cos);\n }\n }\n me._handleMargins();\n if (isHorizontal) {\n me.width = me._length = chart.width - me._margins.left - me._margins.right;\n me.height = minSize.height;\n } else {\n me.width = minSize.width;\n me.height = me._length = chart.height - me._margins.top - me._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const me = this;\n const {ticks: {align, padding}, position} = me.options;\n const isRotated = me.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && me.axis === 'x';\n if (me.isHorizontal()) {\n const offsetLeft = me.getPixelForTick(0) - me.left;\n const offsetRight = me.right - me.getPixelForTick(me.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n me.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * me.width / (me.width - offsetLeft), 0);\n me.paddingRight = Math.max((paddingRight - offsetRight + padding) * me.width / (me.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n me.paddingTop = paddingTop + padding;\n me.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n const me = this;\n if (me._margins) {\n me._margins.left = Math.max(me.paddingLeft, me._margins.left);\n me._margins.top = Math.max(me.paddingTop, me._margins.top);\n me._margins.right = Math.max(me.paddingRight, me._margins.right);\n me._margins.bottom = Math.max(me.paddingBottom, me._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n const me = this;\n me.beforeTickToLabelConversion();\n me.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n me.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n const me = this;\n let labelSizes = me._labelSizes;\n if (!labelSizes) {\n const sampleSize = me.options.ticks.sampleSize;\n let ticks = me.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n me._labelSizes = labelSizes = me._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n const me = this;\n if (me._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = me._startPixel + decimal * me._length;\n return _int16Range(me._alignToPixels ? _alignPixel(me.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const me = this;\n const ticks = me.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(me.getContext(), index, tick));\n }\n return me.$context ||\n\t\t\t(me.$context = createScaleContext(me.chart.getContext(), me));\n }\n _tickSize() {\n const me = this;\n const optionTicks = me.options.ticks;\n const rot = toRadians(me.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = me._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return me.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const me = this;\n const axis = me.axis;\n const chart = me.chart;\n const options = me.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = me.isHorizontal();\n const ticks = me.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(me.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(me.bottom);\n ty1 = me.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(me.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = me.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(me.right);\n tx1 = me.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(me.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = me.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(me.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = grid.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(me, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n me._ticksLength = ticksLength;\n me._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const me = this;\n const axis = me.axis;\n const options = me.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = me.isHorizontal();\n const ticks = me.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(me.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = me.bottom - hTickAndPadding;\n textAlign = me._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = me.top + hTickAndPadding;\n textAlign = me._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = me._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = me._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = me.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = me._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = me.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = me._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = me._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(me.getContext(i));\n pixel = me.getPixelForTick(i) + optionTicks.labelOffset;\n font = me._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n if (isHorizontal) {\n x = pixel;\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const me = this;\n const {position, ticks} = me.options;\n const rotation = -toRadians(me.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const me = this;\n const {position, ticks: {crossAlign, mirror, padding}} = me.options;\n const labelSizes = me._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = me.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = me.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = me.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = me.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = me.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = me.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {textAlign, x};\n }\n _computeLabelArea() {\n const me = this;\n if (me.options.ticks.mirror) {\n return;\n }\n const chart = me.chart;\n const position = me.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: me.left, bottom: chart.height, right: me.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: me.top, left: 0, bottom: me.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const me = this;\n const grid = me.options.grid;\n if (!me._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = me.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(me.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const me = this;\n const grid = me.options.grid;\n const ctx = me.ctx;\n const items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n drawBorder() {\n const me = this;\n const {chart, ctx, options: {grid}} = me;\n const borderOpts = grid.setContext(me.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(me.getContext(0)).lineWidth;\n const borderValue = me._borderValue;\n let x1, x2, y1, y2;\n if (me.isHorizontal()) {\n x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const me = this;\n const optionTicks = me.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = me.ctx;\n const area = me._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = me._labelItems || (me._labelItems = me._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n const me = this;\n if (!me._isVisible()) {\n return;\n }\n me.drawBackground();\n me.drawGrid(chartArea);\n me.drawBorder();\n me.drawTitle();\n me.drawLabels(chartArea);\n }\n _layers() {\n const me = this;\n const opts = me.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!me._isVisible() || me.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw(chartArea) {\n me.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw(chartArea) {\n me.drawBackground();\n me.drawGrid(chartArea);\n me.drawTitle();\n }\n }, {\n z: gz + 1,\n draw() {\n me.drawBorder();\n }\n }, {\n z: tz,\n draw(chartArea) {\n me.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const me = this;\n const metas = me.chart.getSortedVisibleDatasetMetas();\n const axisID = me.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === me.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const me = this;\n const fontSize = me._resolveTickFontOptions(0).lineHeight;\n return (me.isHorizontal() ? me.width : me.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const me = this;\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = me.register(proto);\n }\n const items = me.items;\n const id = item.id;\n const scope = me.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (me.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n const me = this;\n [...args].forEach(arg => {\n const reg = typedRegistry || me._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === me.plugins && arg.id)) {\n me._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || me._getRegistryForType(item);\n me._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n const me = this;\n if (hook === 'beforeInit') {\n me._init = me._createDescriptors(chart, true);\n me._notify(me._init, chart, 'install');\n }\n const descriptors = filter ? me._descriptors(chart).filter(filter) : me._descriptors(chart);\n const result = me._notify(descriptors, chart, hook, args);\n if (hook === 'destroy') {\n me._notify(descriptors, chart, 'stop');\n me._notify(me._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n return plugins;\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n const result = [];\n const context = chart.getContext();\n for (let i = 0; i < plugins.length; i++) {\n const plugin = plugins[i];\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n if ((isScriptable(prop) && isFunction(proxy[prop]))\n || (isIndexable(prop) && isArray(proxy[prop]))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.5.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nclass Chart {\n constructor(item, userConfig) {\n const me = this;\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), me.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n const context = me.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(() => this.update('resize'), options.resizeDelay || 0);\n instances[me.id] = me;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(me, 'complete', onAnimationsComplete);\n animator.listen(me, 'progress', onAnimationProgress);\n me._initialize();\n if (me.attached) {\n me.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n const me = this;\n me.notifyPlugins('beforeInit');\n if (me.options.responsive) {\n me.resize();\n } else {\n retinaScale(me, me.options.devicePixelRatio);\n }\n me.bindEvents();\n me.notifyPlugins('afterInit');\n return me;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const me = this;\n const options = me.options;\n const canvas = me.canvas;\n const aspectRatio = options.maintainAspectRatio && me.aspectRatio;\n const newSize = me.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || me.platform.getDevicePixelRatio();\n me.width = newSize.width;\n me.height = newSize.height;\n me._aspectRatio = me.aspectRatio;\n if (!retinaScale(me, newRatio, true)) {\n return;\n }\n me.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [me, newSize], me);\n if (me.attached) {\n if (me._doResize()) {\n me.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const me = this;\n const options = me.options;\n const scaleOpts = options.scales;\n const scales = me.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: me.ctx,\n chart: me\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(me, scale, scale.options);\n layouts.addBox(me, scale);\n });\n }\n _updateMetasets() {\n const me = this;\n const metasets = me._metasets;\n const numData = me.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n me._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n me._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const me = this;\n const {_metasets: metasets, data: {datasets}} = me;\n if (metasets.length > datasets.length) {\n delete me._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n me._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const me = this;\n const newControllers = [];\n const datasets = me.data.datasets;\n let i, ilen;\n me._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = me.getDatasetMeta(i);\n const type = dataset.type || me.config.type;\n if (meta.type && meta.type !== type) {\n me._destroyDatasetMeta(i);\n meta = me.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, me.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = me.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(me, i);\n newControllers.push(meta.controller);\n }\n }\n me._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n const me = this;\n each(me.data.datasets, (dataset, datasetIndex) => {\n me.getDatasetMeta(datasetIndex).controller.reset();\n }, me);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const me = this;\n const config = me.config;\n config.update();\n me._options = config.createResolver(config.chartOptionScopes(), me.getContext());\n each(me.scales, (scale) => {\n layouts.removeBox(me, scale);\n });\n const animsDisabled = me._animationsDisabled = !me.options.animation;\n me.ensureScalesHaveIDs();\n me.buildOrUpdateScales();\n const existingEvents = new Set(Object.keys(me._listeners));\n const newEvents = new Set(me.options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== me.options.responsive) {\n me.unbindEvents();\n me.bindEvents();\n }\n me._plugins.invalidate();\n if (me.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = me.buildOrUpdateControllers();\n me.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\n const {controller} = me.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n me._minPadding = minPadding;\n me._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n me._updateDatasets(mode);\n me.notifyPlugins('afterUpdate', {mode});\n me._layers.sort(compare2Level('z', '_idx'));\n if (me._lastEvent) {\n me._eventHandler(me._lastEvent, true);\n }\n me.render();\n }\n _updateLayout(minPadding) {\n const me = this;\n if (me.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(me, me.width, me.height, minPadding);\n const area = me.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n me._layers = [];\n each(me.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n me._layers.push(...box._layers());\n }, me);\n me._layers.forEach((item, index) => {\n item._idx = index;\n });\n me.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n const me = this;\n const isFunction = typeof mode === 'function';\n if (me.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n me._updateDataset(i, isFunction ? mode({datasetIndex: i}) : mode);\n }\n me.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const me = this;\n const meta = me.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (me.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n me.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n const me = this;\n if (me.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n if (animator.has(me)) {\n if (me.attached && !animator.running(me)) {\n animator.start(me);\n }\n } else {\n me.draw();\n onAnimationsComplete({chart: me});\n }\n }\n draw() {\n const me = this;\n let i;\n if (me._resizeBeforeDraw) {\n const {width, height} = me._resizeBeforeDraw;\n me._resize(width, height);\n me._resizeBeforeDraw = null;\n }\n me.clear();\n if (me.width <= 0 || me.height <= 0) {\n return;\n }\n if (me.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = me._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(me.chartArea);\n }\n me._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(me.chartArea);\n }\n me.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const me = this;\n const metasets = me._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n const me = this;\n if (me.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = me.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n me._drawDataset(metasets[i]);\n }\n me.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const me = this;\n const ctx = me.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = me.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (me.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? me.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? me.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n me.notifyPlugins('afterDatasetDraw', args);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const me = this;\n const dataset = me.data.datasets[datasetIndex];\n const metasets = me._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = {chart: this, type: 'chart'});\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const me = this;\n const mode = visible ? 'show' : 'hide';\n const meta = me.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n me.update();\n } else {\n me.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n me.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const me = this;\n const meta = me._metasets && me._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n delete me._metasets[datasetIndex];\n }\n }\n destroy() {\n const me = this;\n const {canvas, ctx} = me;\n let i, ilen;\n me.stop();\n animator.remove(me);\n for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n me._destroyDatasetMeta(i);\n }\n me.config.clearCache();\n if (canvas) {\n me.unbindEvents();\n clearCanvas(canvas, ctx);\n me.platform.releaseContext(ctx);\n me.canvas = null;\n me.ctx = null;\n }\n me.notifyPlugins('destroy');\n delete instances[me.id];\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const me = this;\n const listeners = me._listeners;\n const platform = me.platform;\n const _add = (type, listener) => {\n platform.addEventListener(me, type, listener);\n listeners[type] = listener;\n };\n const listener = function(e, x, y) {\n e.offsetX = x;\n e.offsetY = y;\n me._eventHandler(e);\n };\n each(me.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n const me = this;\n if (!me._responsiveListeners) {\n me._responsiveListeners = {};\n }\n const listeners = me._responsiveListeners;\n const platform = me.platform;\n const _add = (type, listener) => {\n platform.addEventListener(me, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(me, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (me.canvas) {\n me.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n me.attached = true;\n me.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n me.attached = false;\n _remove('resize', listener);\n _add('attach', attached);\n };\n if (platform.isAttached(me.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n const me = this;\n each(me._listeners, (listener, type) => {\n me.platform.removeEventListener(me, type, listener);\n });\n me._listeners = {};\n each(me._responsiveListeners, (listener, type) => {\n me.platform.removeEventListener(me, type, listener);\n });\n me._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const me = this;\n const lastActive = me._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = me.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n me._active = active;\n me._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const me = this;\n const hoverOptions = me.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n me.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n me.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const me = this;\n const args = {event: e, replay, cancelable: true};\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.type);\n if (me.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = me._handleEvent(e, replay);\n args.cancelable = false;\n me.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n me.render();\n }\n return me;\n }\n _handleEvent(e, replay) {\n const me = this;\n const {_active: lastActive = [], options} = me;\n const hoverOptions = options.hover;\n const useFinalPosition = replay;\n let active = [];\n let changed = false;\n let lastEvent = null;\n if (e.type !== 'mouseout') {\n active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n lastEvent = e.type === 'click' ? me._lastEvent : e;\n }\n me._lastEvent = null;\n if (_isPointInArea(e, me.chartArea, me._minPadding)) {\n callback(options.onHover, [e, active, me], me);\n if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {\n callback(options.onClick, [e, active, me], me);\n }\n }\n changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n me._active = active;\n me._updateHoverStyles(active, lastActive, replay);\n }\n me._lastEvent = lastEvent;\n return changed;\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n const {options} = element;\n const inner = options.borderAlign === 'inner';\n if (!options.borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = options.borderWidth * 2;\n ctx.lineJoin = 'round';\n } else {\n ctx.lineWidth = options.borderWidth;\n ctx.lineJoin = 'bevel';\n }\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const betweenAngles = circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = (distance >= innerRadius + rAdjust && distance <= outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const me = this;\n const {options, circumference} = me;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n me.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n me.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || me.innerRadius < 0 || me.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (me.startAngle + me.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (me.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, me, radiusOffset, spacing);\n drawBorder(ctx, me, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && line.segments.length === 1) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const me = this;\n const options = me.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !me._pointsUpdated) {\n const loop = options.spanGaps ? me._loop : me._fullLoop;\n _updateBezierControlPoints(me._points, options, chartArea, loop, indexAxis);\n me._pointsUpdated = true;\n }\n }\n set points(points) {\n const me = this;\n me._points = points;\n delete me._segments;\n delete me._path;\n me._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const me = this;\n const options = me.options;\n const value = point[property];\n const points = me.points;\n const segments = _boundSegments(me, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const me = this;\n const segments = me.segments;\n const segmentMethod = _getSegmentMethod(me);\n let loop = me._loop;\n start = start || 0;\n count = count || (me.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, me, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const me = this;\n const options = me.options || {};\n const points = me.points || [];\n if (!points.length || !options.borderWidth) {\n return;\n }\n ctx.save();\n draw(ctx, me, start, count);\n ctx.restore();\n if (me.animated) {\n me._pointsUpdated = false;\n me._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const me = this;\n const options = me.options;\n if (me.skip || options.radius < 0.1 || !_isPointInArea(me, area, me.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, me.x, me.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const options = this.options;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n const inflateAmount = 0.33;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = options.borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount, outer));\n ctx.fillStyle = options.backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n enableBorderRadius: true,\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (meta.type !== 'line') {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\nfunction decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n let target = null;\n let horizontal;\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n return null;\n}\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const target = [];\n const start = options.reverse ? scale.max : scale.min;\n const end = options.reverse ? scale.min : scale.max;\n let i, center, value;\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction buildStackLine(source) {\n const {chart, scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(chart, index);\n linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nconst isLineAndNotInHideAnimation = (meta) => meta.type === 'line' && !meta.hidden;\nfunction getLinesBelow(chart, index) {\n const below = [];\n const metas = chart.getSortedVisibleDatasetMetas();\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (isLineAndNotInHideAnimation(meta)) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (pointValue >= firstValue && pointValue <= lastValue) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\nfunction getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return createBoundaryLine(boundary, line);\n}\nfunction createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _clip(ctx, target, clipY) {\n ctx.beginPath();\n target.path(ctx);\n ctx.lineTo(target.last().x, clipY);\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = findSegmentEnd(start, end, points);\n const bounds = getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\nfunction _fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n _fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n _clip(ctx, target, area.bottom);\n }\n _fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction drawfill(ctx, source, area) {\n const target = getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n const me = this;\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me._margins = margins;\n me.setDimensions();\n me.buildLabels();\n me.fit();\n }\n setDimensions() {\n const me = this;\n if (me.isHorizontal()) {\n me.width = me.maxWidth;\n me.left = me._margins.left;\n me.right = me.width;\n } else {\n me.height = me.maxHeight;\n me.top = me._margins.top;\n me.bottom = me.height;\n }\n }\n buildLabels() {\n const me = this;\n const labelOpts = me.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [me.chart], me) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, me.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, me.chart.data));\n }\n if (me.options.reverse) {\n legendItems.reverse();\n }\n me.legendItems = legendItems;\n }\n fit() {\n const me = this;\n const {options, ctx} = me;\n if (!options.display) {\n me.width = me.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = me._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (me.isHorizontal()) {\n width = me.maxWidth;\n height = me._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = me.maxHeight;\n width = me._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n me.width = Math.min(width, options.maxWidth || me.maxWidth);\n me.height = Math.min(height, options.maxHeight || me.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const me = this;\n const {ctx, maxWidth, options: {labels: {padding}}} = me;\n const hitboxes = me.legendHitBoxes = [];\n const lineWidths = me.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n me.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const me = this;\n const {ctx, maxHeight, options: {labels: {padding}}} = me;\n const hitboxes = me.legendHitBoxes = [];\n const columnSizes = me.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n me.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n const me = this;\n if (!me.options.display) {\n return;\n }\n const titleHeight = me._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = me;\n const rtlHelper = getRtlAdapter(rtl, me.left, me.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);\n }\n hitbox.top += me.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += me.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n const me = this;\n if (me.options.display) {\n const ctx = me.ctx;\n clipArea(ctx, me);\n me._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const me = this;\n const {options: opts, columnSizes, lineWidths, ctx} = me;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n me.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = me.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, me.left + padding, me.right - lineWidths[0]),\n y: me.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: me.left + padding,\n y: _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(me.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n me.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(me.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > me.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, me.left + padding, me.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > me.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : me.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(me.ctx, opts.textDirection);\n }\n drawTitle() {\n const me = this;\n const opts = me.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);\n const ctx = me.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = me.left;\n let maxWidth = me.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...me.lineWidths);\n y = me.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, me.right - maxWidth);\n } else {\n const maxHeight = me.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, me.top, me.bottom - maxHeight - opts.labels.padding - me._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n const me = this;\n let i, hitBox, lh;\n if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n lh = me.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n return me.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const me = this;\n const opts = me.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = me._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove') {\n const previous = me._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, me], me);\n }\n me._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, me], me);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, me], me);\n }\n }\n}\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const me = this;\n const opts = me.options;\n me.left = 0;\n me.top = 0;\n if (!opts.display) {\n me.width = me.height = me.right = me.bottom = 0;\n return;\n }\n me.width = me.right = maxWidth;\n me.height = me.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n me._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + me._padding.height;\n if (me.isHorizontal()) {\n me.height = textSize;\n } else {\n me.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const me = this;\n const ctx = me.ctx;\n const opts = me.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + me._padding.top;\n const {titleX, titleY, maxWidth, rotation} = me._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip._chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const radiusAndPadding = cornerRadius + caretPadding;\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= radiusAndPadding;\n } else if (xAlign === 'right') {\n x += radiusAndPadding;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return Object.assign(Object.create(parent), {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._chart = config._chart;\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const me = this;\n const cached = me._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = me._chart;\n const options = me.options.setContext(me.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(me._chart, opts);\n if (opts._cacheable) {\n me._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n const me = this;\n return me.$context ||\n\t\t\t(me.$context = createTooltipContext(me._chart.getContext(), me, me._tooltipItems));\n }\n getTitle(context, options) {\n const me = this;\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(me, [context]);\n const title = callbacks.title.apply(me, [context]);\n const afterTitle = callbacks.afterTitle.apply(me, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const me = this;\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(me, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(me, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(me, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const me = this;\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(me, [tooltipItems]);\n const footer = callbacks.footer.apply(me, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(me, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const me = this;\n const active = me._active;\n const data = me._chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(me._chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(me, context));\n labelPointStyles.push(scoped.labelPointStyle.call(me, context));\n labelTextColors.push(scoped.labelTextColor.call(me, context));\n });\n me.labelColors = labelColors;\n me.labelPointStyles = labelPointStyles;\n me.labelTextColors = labelTextColors;\n me.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const me = this;\n const options = me.options.setContext(me.getContext());\n const active = me._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (me.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(me, active, me._eventPosition);\n tooltipItems = me._createItems(options);\n me.title = me.getTitle(tooltipItems, options);\n me.beforeBody = me.getBeforeBody(tooltipItems, options);\n me.body = me.getBody(tooltipItems, options);\n me.afterBody = me.getAfterBody(tooltipItems, options);\n me.footer = me.getFooter(tooltipItems, options);\n const size = me._size = getTooltipSize(me, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(me._chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, me._chart);\n me.xAlign = alignment.xAlign;\n me.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n me._tooltipItems = tooltipItems;\n me.$context = undefined;\n if (properties) {\n me._resolveAnimations().update(me, properties);\n }\n if (changed && options.external) {\n options.external.call(me, {chart: me._chart, tooltip: me, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {cornerRadius, caretSize} = options;\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + cornerRadius + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - cornerRadius - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const me = this;\n const title = me.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n pt.x = getAlignedX(me, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const me = this;\n const labelColors = me.labelColors[i];\n const labelPointStyle = me.labelPointStyles[i];\n const {boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(me, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = me.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const me = this;\n const {body} = me;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(me, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(me.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + 1) : (boxWidth + 2)\n : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = me.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n me._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(me.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const me = this;\n const footer = me.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n pt.x = getAlignedX(me, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const radius = options.cornerRadius;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - radius, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - radius);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + radius, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + radius);\n ctx.quadraticCurveTo(x, y, x + radius, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const me = this;\n const chart = me._chart;\n const anims = me.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(me, me._active, me._eventPosition);\n if (!position) {\n return;\n }\n const size = me._size = getTooltipSize(me, options);\n const positionAndSize = Object.assign({}, position, me._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n me.xAlign = alignment.xAlign;\n me.yAlign = alignment.yAlign;\n me.width = size.width;\n me.height = size.height;\n me.caretX = position.x;\n me.caretY = position.y;\n me._resolveAnimations().update(me, point);\n }\n }\n }\n draw(ctx) {\n const me = this;\n const options = me.options.setContext(me.getContext());\n let opacity = me.opacity;\n if (!opacity) {\n return;\n }\n me._updateAnimationTarget(options);\n const tooltipSize = {\n width: me.width,\n height: me.height\n };\n const pt = {\n x: me.x,\n y: me.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = me.title.length || me.beforeBody.length || me.body.length || me.afterBody.length || me.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n me.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n me.drawTitle(pt, ctx, options);\n me.drawBody(pt, ctx, options);\n me.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const me = this;\n const lastActive = me._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = me._chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = me._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n me._active = active;\n me._eventPosition = eventPosition;\n me.update(true);\n }\n }\n handleEvent(e, replay) {\n const me = this;\n const options = me.options;\n const lastActive = me._active || [];\n let changed = false;\n let active = [];\n if (e.type !== 'mouseout') {\n active = me._chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n }\n const positionChanged = me._positionChanged(active, e);\n changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n me._active = active;\n if (options.enabled || options.external) {\n me._eventPosition = {\n x: e.x,\n y: e.y\n };\n me.update(true, replay);\n }\n }\n return changed;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({_chart: chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n chart.notifyPlugins('afterTooltipDraw', args);\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: plugin_filler,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index) => typeof raw === 'string'\n ? labels.push(raw) - 1\n : isNaN(raw) ? null : index;\nfunction findOrAddLabel(labels, raw, index) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw));\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const me = this;\n const {minDefined, maxDefined} = me.getUserBounds();\n let {min, max} = me.getMinMax(true);\n if (me.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = me.getLabels().length - 1;\n }\n }\n me.min = min;\n me.max = max;\n }\n buildTicks() {\n const me = this;\n const min = me.min;\n const max = me.max;\n const offset = me.options.offset;\n const ticks = [];\n let labels = me.getLabels();\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n me._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n me._startValue = me.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const me = this;\n const labels = me.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n const me = this;\n super.configure();\n if (!me.isHorizontal()) {\n me._reversePixels = !me._reversePixels;\n }\n }\n getPixelForValue(value) {\n const me = this;\n if (typeof value !== 'number') {\n value = me.parse(value);\n }\n return value === null ? NaN : me.getPixelForDecimal((value - me._startValue) / me._valueRange);\n }\n getPixelForTick(index) {\n const me = this;\n const ticks = me.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return me.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n const me = this;\n return Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const me = this;\n const {beginAtZero} = me.options;\n const {minDefined, maxDefined} = me.getUserBounds();\n let {min, max} = me;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n me.min = min;\n me.max = max;\n }\n getTickLimit() {\n const me = this;\n const tickOpts = me.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\n } else {\n maxTicks = me.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const me = this;\n const opts = me.options;\n const tickOpts = opts.ticks;\n let maxTicks = me.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: me._maxDigits(),\n horizontal: me.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = me._range || me;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, me, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n me.start = me.max;\n me.end = me.min;\n } else {\n me.start = me.min;\n me.end = me.max;\n }\n return ticks;\n }\n configure() {\n const me = this;\n const ticks = me.ticks;\n let start = me.min;\n let end = me.max;\n super.configure();\n if (me.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n me._startValue = start;\n me._endValue = end;\n me._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const me = this;\n const {min, max} = me.getMinMax(true);\n me.min = isNumberFinite(min) ? min : 0;\n me.max = isNumberFinite(max) ? max : 1;\n me.handleTickRangeOptions();\n }\n computeTickLimit() {\n const me = this;\n const horizontal = me.isHorizontal();\n const length = horizontal ? me.width : me.height;\n const minRotation = toRadians(me.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = me._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const me = this;\n const {min, max} = me.getMinMax(true);\n me.min = isNumberFinite(min) ? Math.max(0, min) : null;\n me.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (me.options.beginAtZero) {\n me._zero = true;\n }\n me.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const me = this;\n const {minDefined, maxDefined} = me.getUserBounds();\n let min = me.min;\n let max = me.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (me._zero && me.min !== me._suggestedMin && min === exp(me.min, 0)) {\n setMin(exp(min, -1));\n }\n me.min = min;\n me.max = max;\n }\n buildTicks() {\n const me = this;\n const opts = me.options;\n const generationOptions = {\n min: me._userMin,\n max: me._userMax\n };\n const ticks = generateTicks(generationOptions, me);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, me, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n me.start = me.max;\n me.end = me.min;\n } else {\n me.start = me.min;\n me.end = me.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale);\n }\n configure() {\n const me = this;\n const start = me.min;\n super.configure();\n me._startValue = log10(start);\n me._valueRange = log10(me.max) - log10(start);\n }\n getPixelForValue(value) {\n const me = this;\n if (value === undefined || value === 0) {\n value = me.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return me.getPixelForDecimal(value === me.min\n ? 0\n : (log10(value) - me._startValue) / me._valueRange);\n }\n getValueForPixel(pixel) {\n const me = this;\n const decimal = me.getDecimalForPixel(pixel);\n return Math.pow(10, me._startValue + decimal * me._valueRange);\n }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const furthestLimits = {\n l: 0,\n r: scale.width,\n t: 0,\n b: scale.height - scale.paddingTop\n };\n const furthestAngles = {};\n const labelSizes = [];\n const padding = [];\n const valueCount = scale.getLabels().length;\n for (let i = 0; i < valueCount; i++) {\n const opts = scale.options.pointLabels.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i]);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = scale.getIndexAngle(i);\n const angle = toDegrees(angleRadians);\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n if (hLimits.start < furthestLimits.l) {\n furthestLimits.l = hLimits.start;\n furthestAngles.l = angleRadians;\n }\n if (hLimits.end > furthestLimits.r) {\n furthestLimits.r = hLimits.end;\n furthestAngles.r = angleRadians;\n }\n if (vLimits.start < furthestLimits.t) {\n furthestLimits.t = vLimits.start;\n furthestAngles.t = angleRadians;\n }\n if (vLimits.end > furthestLimits.b) {\n furthestLimits.b = vLimits.end;\n furthestAngles.b = angleRadians;\n }\n }\n scale._setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale.getLabels().length;\n const opts = scale.options;\n const tickBackdropHeight = getTickBackdropHeight(opts);\n const outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n for (let i = 0; i < valueCount; i++) {\n const extra = (i === 0 ? tickBackdropHeight / 2 : 0);\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i]);\n const angle = toDegrees(scale.getIndexAngle(i));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction numberOrZero(param) {\n return isNumber(param) ? param : 0;\n}\nfunction createPointLabelContext(parent, index, label) {\n return Object.assign(Object.create(parent), {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const me = this;\n me.width = me.maxWidth;\n me.height = me.maxHeight;\n me.paddingTop = getTickBackdropHeight(me.options) / 2;\n me.xCenter = Math.floor(me.width / 2);\n me.yCenter = Math.floor((me.height - me.paddingTop) / 2);\n me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\n }\n determineDataLimits() {\n const me = this;\n const {min, max} = me.getMinMax(false);\n me.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n me.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n me.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n const me = this;\n LinearScaleBase.prototype.generateTickLabels.call(me, ticks);\n me._pointLabels = me.getLabels().map((value, index) => {\n const label = callback(me.options.pointLabels.callback, [value, index], me);\n return label || label === 0 ? label : '';\n });\n }\n fit() {\n const me = this;\n const opts = me.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(me);\n } else {\n me.setCenterPoint(0, 0, 0, 0);\n }\n }\n _setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {\n const me = this;\n let radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n let radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n let radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n let radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\n radiusReductionLeft = numberOrZero(radiusReductionLeft);\n radiusReductionRight = numberOrZero(radiusReductionRight);\n radiusReductionTop = numberOrZero(radiusReductionTop);\n radiusReductionBottom = numberOrZero(radiusReductionBottom);\n me.drawingArea = Math.max(largestPossibleRadius / 2, Math.min(\n Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2)));\n me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n const me = this;\n const maxRight = me.width - rightMovement - me.drawingArea;\n const maxLeft = leftMovement + me.drawingArea;\n const maxTop = topMovement + me.drawingArea;\n const maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;\n me.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);\n me.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / this.getLabels().length;\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n const me = this;\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = me.drawingArea / (me.max - me.min);\n if (me.options.reverse) {\n return (me.max - value) * scalingFactor;\n }\n return (value - me.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const me = this;\n const scaledDistance = distance / (me.drawingArea / (me.max - me.min));\n return me.options.reverse ? me.max - scaledDistance : me.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const me = this;\n const pointLabels = me._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(me.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter) {\n const me = this;\n const angle = me.getIndexAngle(index) - HALF_PI;\n return {\n x: Math.cos(angle) * distanceFromCenter + me.xCenter,\n y: Math.sin(angle) * distanceFromCenter + me.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const me = this;\n const {backgroundColor, grid: {circular}} = me.options;\n if (backgroundColor) {\n const ctx = me.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(me, me.getDistanceFromCenterForValue(me._endValue), circular, me.getLabels().length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const me = this;\n const ctx = me.ctx;\n const opts = me.options;\n const {angleLines, grid} = opts;\n const labelCount = me.getLabels().length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(me, labelCount);\n }\n if (grid.display) {\n me.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = me.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(me.getContext(index - 1));\n drawRadiusLine(me, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = me.getLabels().length - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(me.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\n position = me.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(me.xCenter, me.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const me = this;\n const ctx = me.ctx;\n const opts = me.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = me.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(me.xCenter, me.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n me.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(me.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = me.getDistanceFromCenterForValue(me.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const me = this;\n const options = me.options;\n const adapter = me._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = me.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(me._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(me.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n me.min = Math.min(min, max - 1);\n me.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const me = this;\n const options = me.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? me.getLabelTimestamps() : me._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n me.min = me._userMin || timestamps[0];\n me.max = me._userMax || timestamps[timestamps.length - 1];\n }\n const min = me.min;\n const max = me.max;\n const ticks = _filterBetween(timestamps, min, max);\n me._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, me._getLabelCapacity(min))\n : determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\n me._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined\n : determineMajorUnit(me._unit);\n me.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(me, ticks, me._majorUnit);\n }\n initOffsets(timestamps) {\n const me = this;\n let start = 0;\n let end = 0;\n let first, last;\n if (me.options.offset && timestamps.length) {\n first = me.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (me.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = me.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - me.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n me._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const me = this;\n const adapter = me._adapter;\n const min = me.min;\n const max = me.max;\n const options = me.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, me._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && me.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const me = this;\n const adapter = me._adapter;\n const timeOpts = me.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const me = this;\n const options = me.options;\n const formats = options.time.displayFormats;\n const unit = me._unit;\n const majorUnit = me._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = me._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], me) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n const me = this;\n return value === null ? NaN : (value - me.min) / (me.max - me.min);\n }\n getPixelForValue(value) {\n const me = this;\n const offsets = me._offsets;\n const pos = me.getDecimalForValue(value);\n return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const me = this;\n const offsets = me._offsets;\n const pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return me.min + pos * (me.max - me.min);\n }\n _getLabelSize(label) {\n const me = this;\n const ticksOpts = me.options.ticks;\n const tickLabelWidth = me.ctx.measureText(label).width;\n const angle = toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = me._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const me = this;\n const timeOpts = me.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = me._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\n const size = me._getLabelSize(exampleLabel);\n const capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n const me = this;\n let timestamps = me._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = me.getMatchingVisibleMetas();\n if (me._normalized && metas.length) {\n return (me._cache.data = metas[0].controller.getAllParsedValues(me));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(me));\n }\n return (me._cache.data = me.normalize(timestamps));\n }\n getLabelTimestamps() {\n const me = this;\n const timestamps = me._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = me.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(me, labels[i]));\n }\n return (me._cache.labels = me._normalized ? timestamps : me.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const me = this;\n const timestamps = me._getTimestampsForTable();\n const table = me._table = me.buildLookupTable(timestamps);\n me._minPos = interpolate(table, me.min);\n me._tableRange = interpolate(table, me.max) - me._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n const me = this;\n let timestamps = me._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = me.getDataTimestamps();\n const label = me.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = me.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = me._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const me = this;\n const offsets = me._offsets;\n const decimal = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(me._table, decimal * me._tableRange + me._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","import { Chart } from 'chart.js';\nChart.defaults.color = '#b0b0b0';\nexport var scales = {\n y: {\n display: true,\n ticks: {\n suggestedMin: 0 // minimum will be 0, unless there is a lower value.\n\n },\n gridLines: {\n color: '#606060',\n zeroLineColor: '#606060'\n }\n }\n};\nexport var color_rose = '#e7c9e5';\nexport var color_blue = '#64a6bd';\nexport var backgroundChartDiv = '#404040';\nexport default {};","import { Chart, LineController, LineElement, PointElement, LinearScale, CategoryScale, BarElement, BarController } from 'chart.js';\nimport { scales, color_rose, color_blue } from \"./ChartConfig\";\nChart.register(LineController, LineElement, PointElement, LinearScale, CategoryScale, BarElement, BarController);\nexport default function ThreeStatsChart(ctx, renderer) {\n var lastValidCompareIndex = -1;\n var timestamp = Date.now();\n var textureDataset = {\n label: 'texture count',\n data: [{\n x: 0,\n y: 0\n }],\n borderColor: color_rose,\n borderWidth: 1.5,\n pointRadius: 1\n };\n var geometryDataset = {\n label: 'geometry count',\n data: [{\n x: 0,\n y: 0\n }],\n borderColor: color_blue,\n borderWidth: 1.5,\n pointRadius: 1\n };\n var label = ['0s'];\n var chart = new Chart(ctx, {\n type: 'line',\n data: {\n labels: label,\n datasets: [textureDataset, geometryDataset]\n },\n options: {\n animation: {\n duration: 10\n },\n scales: scales\n }\n });\n\n this.update = function (displayed) {\n var limit = 60;\n var timeInS = Math.floor((Date.now() - timestamp) / 1000);\n var lbl = \"\".concat(timeInS, \"s\");\n var identical = lastValidCompareIndex > 0 && label[lastValidCompareIndex] == lbl;\n\n if (identical) {\n label.push('');\n } else {\n label.push(lbl);\n lastValidCompareIndex = label.length - 1;\n }\n\n if (label.length > limit) {\n label.shift();\n lastValidCompareIndex--;\n }\n\n var memory = renderer.info.memory;\n textureDataset.data.push({\n x: timeInS,\n y: memory.textures\n });\n geometryDataset.data.push({\n x: timeInS,\n y: memory.geometries\n });\n\n if (textureDataset.data.length > limit) {\n textureDataset.data.shift();\n geometryDataset.data.shift();\n }\n\n if (displayed) {\n chart.update();\n }\n };\n\n this.resize = function () {\n chart.resize();\n };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport * as THREE from 'three'; // TODO regler le probleme glsl\n\n/* babel-plugin-inline-import './fonts/optimer_regular.json' */\nvar fontJS = \"{\\\"glyphs\\\":{\\\"\\u03BF\\\":{\\\"x_min\\\":41,\\\"x_max\\\":710,\\\"ha\\\":753,\\\"o\\\":\\\"m 371 -15 q 131 78 222 -15 q 41 322 41 172 q 133 573 41 474 q 378 672 225 672 q 619 574 528 672 q 710 326 710 477 q 617 80 710 175 q 371 -15 525 -15 m 377 619 q 226 530 272 619 q 180 327 180 441 q 227 125 180 216 q 375 35 274 35 q 524 123 478 35 q 570 326 570 211 q 524 529 570 440 q 377 619 479 619 \\\"},\\\"S\\\":{\\\"x_min\\\":50,\\\"x_max\\\":639,\\\"ha\\\":699,\\\"o\\\":\\\"m 88 208 q 179 88 122 131 q 318 46 237 46 q 457 98 397 46 q 518 227 518 150 q 401 400 518 336 q 184 498 293 448 q 68 688 68 566 q 156 880 68 811 q 370 950 244 950 q 480 936 430 950 q 597 891 530 922 q 570 822 583 858 q 553 756 558 786 l 539 756 q 354 897 502 897 q 231 855 282 897 q 181 742 181 813 q 298 580 181 640 q 519 483 408 531 q 639 286 639 413 q 538 68 639 152 q 301 -15 438 -15 q 166 2 229 -15 q 50 59 104 19 q 68 135 62 104 q 75 205 75 166 l 88 208 \\\"},\\\"/\\\":{\\\"x_min\\\":-36.03125,\\\"x_max\\\":404.15625,\\\"ha\\\":383,\\\"o\\\":\\\"m -36 -125 l 340 1025 l 404 1024 l 28 -126 l -36 -125 \\\"},\\\"\\u03A4\\\":{\\\"x_min\\\":11,\\\"x_max\\\":713,\\\"ha\\\":725,\\\"o\\\":\\\"m 11 839 l 15 884 l 11 932 q 194 927 72 932 q 361 922 316 922 q 544 927 421 922 q 713 932 668 932 q 707 883 707 911 q 707 861 707 870 q 713 834 707 852 q 609 850 666 843 q 504 857 552 857 l 428 857 q 426 767 428 830 q 424 701 424 704 l 428 220 q 442 0 428 122 q 362 8 401 3 q 323 5 344 8 q 282 0 301 2 q 289 132 282 40 q 296 259 296 225 l 296 683 l 296 857 q 11 839 164 857 \\\"},\\\"\\u03D5\\\":{\\\"x_min\\\":41,\\\"x_max\\\":960,\\\"ha\\\":1006,\\\"o\\\":\\\"m 441 -10 q 162 76 283 -10 q 41 316 41 163 q 162 562 41 470 q 441 654 283 654 q 434 838 441 719 q 427 971 427 957 q 464 965 443 968 q 503 962 485 962 q 540 965 519 962 q 578 970 560 968 q 563 654 563 824 q 839 567 719 654 q 960 324 960 481 q 841 79 960 169 q 563 -10 722 -10 q 570 -201 563 -68 q 578 -371 578 -334 q 505 -362 539 -362 q 465 -365 483 -362 q 427 -372 446 -368 q 434 -161 427 -297 q 441 -10 441 -26 m 563 39 q 757 118 690 39 q 824 330 824 198 q 750 523 824 445 q 564 601 677 601 l 563 319 l 563 39 m 441 319 l 441 601 q 253 523 326 601 q 180 330 180 446 q 245 117 180 195 q 439 39 310 39 l 441 319 \\\"},\\\"y\\\":{\\\"x_min\\\":4.171875,\\\"x_max\\\":665.28125,\\\"ha\\\":664,\\\"o\\\":\\\"m 4 654 l 86 647 l 165 654 q 202 536 188 577 q 241 431 215 495 l 363 129 l 473 413 q 552 654 519 537 q 606 647 583 647 q 665 654 633 647 q 416 125 531 388 q 223 -372 301 -137 l 187 -366 q 141 -366 163 -366 q 112 -372 122 -370 l 290 -22 q 4 654 170 294 \\\"},\\\"\\u2248\\\":{\\\"x_min\\\":118.0625,\\\"x_max\\\":1019.453125,\\\"ha\\\":1139,\\\"o\\\":\\\"m 765 442 q 564 487 700 442 q 376 533 429 533 q 250 506 298 533 q 118 427 202 480 l 118 501 q 245 572 180 545 q 376 600 311 600 q 574 553 438 600 q 765 507 709 507 q 888 534 829 507 q 1019 614 947 562 l 1019 538 q 892 467 954 493 q 765 442 830 442 m 759 214 q 568 260 702 214 q 376 307 433 307 q 236 272 300 307 q 118 202 173 238 l 118 277 q 247 346 181 320 q 380 372 312 372 q 570 326 445 372 q 765 281 695 281 q 883 306 830 281 q 1019 388 936 331 l 1019 313 q 894 240 959 266 q 759 214 829 214 \\\"},\\\"\\u03A0\\\":{\\\"x_min\\\":108,\\\"x_max\\\":927.453125,\\\"ha\\\":1036,\\\"o\\\":\\\"m 432 846 l 263 846 q 260 634 263 781 q 257 475 257 486 q 262 236 257 395 q 268 0 268 77 q 229 3 255 0 q 188 8 202 8 q 149 3 177 8 q 108 0 121 0 q 117 239 108 70 q 126 465 126 408 q 122 711 126 620 q 108 932 119 803 q 285 926 166 932 q 464 921 405 921 q 695 926 541 921 q 927 932 849 932 q 915 793 921 871 q 909 659 909 716 l 909 504 q 917 245 909 427 q 926 0 926 62 q 887 4 913 0 q 847 8 860 8 q 810 5 827 8 q 768 0 792 2 q 773 259 768 94 q 778 469 778 423 l 778 731 l 773 846 l 432 846 \\\"},\\\"\\u0390\\\":{\\\"x_min\\\":-41,\\\"x_max\\\":384,\\\"ha\\\":342,\\\"o\\\":\\\"m 105 333 l 105 520 q 104 566 105 544 q 97 654 103 588 q 141 647 131 648 q 166 647 152 647 q 234 654 196 647 q 225 555 226 599 q 224 437 224 510 l 224 406 q 229 194 224 337 q 234 0 234 51 q 202 3 217 1 q 166 5 186 5 q 128 3 149 5 q 97 0 108 1 q 101 165 97 51 q 105 333 105 279 m 18 865 q 61 846 43 865 q 80 804 80 828 q 61 761 80 779 q 18 743 43 743 q -22 761 -4 743 q -41 804 -41 779 q -22 846 -41 828 q 18 865 -4 865 m 172 929 q 189 969 179 956 q 225 982 199 982 q 256 971 243 982 q 270 941 270 961 q 257 904 270 919 l 149 743 l 117 743 l 172 929 m 324 865 q 366 846 348 865 q 384 804 384 828 q 366 761 384 779 q 324 743 348 743 q 281 761 298 743 q 265 804 265 779 q 281 846 265 828 q 324 865 298 865 \\\"},\\\"g\\\":{\\\"x_min\\\":32,\\\"x_max\\\":672,\\\"ha\\\":688,\\\"o\\\":\\\"m 81 123 q 112 201 81 169 q 193 252 144 233 l 193 262 q 97 329 130 277 q 64 447 64 380 q 141 610 64 549 q 323 672 218 672 q 421 661 357 672 q 500 650 486 651 l 672 654 l 672 582 q 599 592 635 587 q 537 597 563 597 q 607 458 607 548 q 527 294 607 356 q 342 232 447 232 q 291 235 319 232 q 255 239 262 239 q 208 220 228 239 q 188 173 188 201 q 221 120 188 136 q 296 104 254 104 l 427 104 q 603 56 534 104 q 672 -93 672 9 q 560 -299 672 -226 q 309 -372 448 -372 q 115 -327 199 -372 q 32 -183 32 -283 q 76 -62 32 -110 q 193 8 121 -13 q 112 51 143 25 q 81 123 81 77 m 332 278 q 439 332 401 278 q 478 457 478 386 q 441 575 478 525 q 338 625 404 625 q 232 570 271 625 q 194 447 194 515 q 230 328 194 379 q 332 278 266 278 m 337 -316 q 491 -270 423 -316 q 559 -141 559 -224 q 500 -29 559 -62 q 353 3 441 3 q 199 -36 263 3 q 136 -162 136 -76 q 195 -277 136 -238 q 337 -316 255 -316 \\\"},\\\"\\xB2\\\":{\\\"x_min\\\":15.28125,\\\"x_max\\\":412.5,\\\"ha\\\":496,\\\"o\\\":\\\"m 297 744 q 270 830 297 795 q 197 866 244 866 q 120 837 149 866 q 83 761 90 808 l 76 759 q 54 802 68 780 q 31 837 40 824 q 210 901 108 901 q 334 862 278 901 q 390 758 390 824 q 282 568 390 656 q 111 428 174 479 l 293 428 q 350 431 316 428 q 412 439 384 434 l 406 397 l 412 356 l 304 361 l 111 361 l 15 355 l 15 378 q 220 567 144 484 q 297 744 297 651 \\\"},\\\"\\u039A\\\":{\\\"x_min\\\":108,\\\"x_max\\\":856.625,\\\"ha\\\":821,\\\"o\\\":\\\"m 255 314 q 261 132 255 250 q 268 0 268 13 q 229 4 255 0 q 188 8 202 8 q 148 4 174 8 q 108 0 121 0 q 117 239 108 70 q 126 465 126 408 q 122 712 126 621 q 108 932 119 803 q 153 928 124 932 q 188 925 183 925 q 231 928 203 925 q 267 932 259 932 l 255 671 l 255 499 q 480 693 375 586 q 687 932 585 800 q 732 932 710 932 q 777 932 753 932 l 837 932 q 606 727 720 830 q 389 522 493 623 q 525 358 465 426 q 666 202 586 290 q 856 0 747 115 l 746 0 q 692 -1 716 0 q 644 -8 669 -2 q 571 92 610 44 q 477 204 532 140 l 255 459 l 255 314 \\\"},\\\"\\xEB\\\":{\\\"x_min\\\":40,\\\"x_max\\\":646.9375,\\\"ha\\\":681,\\\"o\\\":\\\"m 406 42 q 602 130 523 42 l 621 130 q 613 93 617 112 q 609 47 609 73 q 496 0 558 14 q 369 -15 435 -15 q 130 73 220 -15 q 40 311 40 162 q 126 562 40 456 q 355 669 212 669 q 564 590 481 669 q 646 386 646 512 l 644 331 q 438 333 562 331 q 313 335 315 335 l 179 331 q 235 127 179 212 q 406 42 291 42 m 219 929 q 271 906 249 929 q 294 854 294 884 q 273 800 294 822 q 221 778 252 778 q 166 800 190 778 q 143 854 143 822 q 165 906 143 884 q 219 929 187 929 m 460 929 q 513 906 492 929 q 534 854 534 884 q 513 799 534 820 q 461 778 493 778 q 407 800 429 778 q 385 854 385 822 q 407 906 385 884 q 460 929 429 929 m 513 392 l 513 437 q 470 563 513 509 q 356 618 427 618 q 233 552 271 618 q 183 390 195 487 l 513 392 \\\"},\\\"e\\\":{\\\"x_min\\\":41,\\\"x_max\\\":645.15625,\\\"ha\\\":681,\\\"o\\\":\\\"m 406 42 q 602 130 523 42 l 618 125 q 611 86 614 104 q 609 44 609 67 q 497 0 561 14 q 370 -15 434 -15 q 130 73 220 -15 q 41 311 41 161 q 127 563 41 455 q 356 672 214 672 q 563 592 482 672 q 645 385 645 512 l 643 331 l 313 335 l 179 331 q 235 126 179 210 q 406 42 291 42 m 511 392 l 513 436 q 470 563 513 509 q 356 618 427 618 q 230 553 268 618 q 179 388 191 488 l 511 392 \\\"},\\\"\\u03CC\\\":{\\\"x_min\\\":41,\\\"x_max\\\":710,\\\"ha\\\":753,\\\"o\\\":\\\"m 371 -15 q 131 78 222 -15 q 41 322 41 172 q 133 573 41 474 q 378 672 225 672 q 619 574 528 672 q 710 326 710 477 q 617 80 710 175 q 371 -15 525 -15 m 524 943 q 558 974 542 964 q 595 985 574 985 q 632 969 618 985 q 646 932 646 954 q 632 897 646 911 q 591 866 618 883 l 390 743 l 341 743 l 524 943 m 377 619 q 226 530 272 619 q 180 327 180 441 q 227 125 180 216 q 375 35 274 35 q 524 123 478 35 q 570 326 570 211 q 524 529 570 440 q 377 619 479 619 \\\"},\\\"J\\\":{\\\"x_min\\\":-71,\\\"x_max\\\":277,\\\"ha\\\":385,\\\"o\\\":\\\"m 118 -40 q 131 62 128 9 q 135 184 135 115 q 132 462 135 325 q 127 690 130 598 q 111 932 123 782 q 159 928 129 932 q 193 925 189 925 q 238 927 221 925 q 277 932 256 929 q 268 665 277 843 q 260 457 260 487 l 260 165 q 260 107 260 147 q 260 48 260 68 q 169 -155 260 -88 q -62 -222 79 -222 l -71 -180 q 50 -134 1 -166 q 118 -40 100 -102 \\\"},\\\"\\xBB\\\":{\\\"x_min\\\":43,\\\"x_max\\\":543,\\\"ha\\\":607,\\\"o\\\":\\\"m 196 322 l 43 607 l 81 645 l 303 322 l 81 0 l 43 37 l 196 322 m 436 322 l 283 607 l 322 645 l 543 322 l 322 0 l 283 37 l 436 322 \\\"},\\\"\\xA9\\\":{\\\"x_min\\\":80,\\\"x_max\\\":1058,\\\"ha\\\":1139,\\\"o\\\":\\\"m 816 905 q 992 726 927 841 q 1058 481 1058 611 q 912 138 1058 283 q 567 -6 766 -6 q 225 139 370 -6 q 80 481 80 284 q 224 826 80 681 q 569 971 368 971 q 816 905 698 971 m 569 918 q 263 788 392 918 q 134 481 134 659 q 261 175 134 306 q 566 45 389 45 q 872 174 741 45 q 1004 478 1004 304 q 947 699 1004 596 q 787 859 890 801 q 569 918 684 918 m 570 724 q 441 652 483 724 q 399 490 399 581 q 438 320 399 396 q 560 245 478 245 q 664 278 621 245 q 723 370 707 311 l 798 370 q 720 232 788 283 q 561 181 653 181 q 379 268 446 181 q 313 476 313 355 q 380 694 313 604 q 571 785 447 785 q 717 738 656 785 q 793 610 779 691 l 715 610 q 664 692 705 660 q 570 724 624 724 \\\"},\\\"\\u03CE\\\":{\\\"x_min\\\":39.71875,\\\"x_max\\\":1028.9375,\\\"ha\\\":1068,\\\"o\\\":\\\"m 534 528 l 596 528 l 594 305 q 616 117 594 193 q 722 42 638 42 q 850 118 811 42 q 888 293 888 194 q 829 502 888 409 q 664 654 769 594 l 717 648 q 805 654 766 648 q 967 510 905 606 q 1028 304 1028 413 q 948 81 1028 177 q 744 -15 867 -15 q 622 16 678 -15 q 534 104 566 47 q 445 16 500 48 q 323 -15 389 -15 q 118 83 196 -15 q 39 311 39 182 q 100 511 39 419 q 262 654 161 604 q 303 650 278 651 q 349 648 327 648 l 402 654 q 238 501 296 593 q 179 291 179 409 q 218 116 179 191 q 348 42 257 42 q 419 68 390 42 q 461 138 448 94 q 472 216 469 175 q 475 303 475 257 q 472 420 475 353 q 469 529 470 486 l 534 528 m 681 943 q 714 974 699 964 q 751 985 730 985 q 788 969 774 985 q 802 932 802 954 q 787 896 802 912 q 746 866 773 880 l 547 743 l 498 743 l 681 943 \\\"},\\\"\\u2265\\\":{\\\"x_min\\\":176.1875,\\\"x_max\\\":963,\\\"ha\\\":1139,\\\"o\\\":\\\"m 963 462 l 176 196 l 176 266 l 850 491 l 176 718 l 176 788 l 963 522 l 963 462 m 963 26 l 176 26 l 176 93 l 963 93 l 963 26 \\\"},\\\"^\\\":{\\\"x_min\\\":0,\\\"x_max\\\":390,\\\"ha\\\":403,\\\"o\\\":\\\"m 150 978 l 239 978 l 390 743 l 344 743 l 195 875 l 49 743 l 0 743 l 150 978 \\\"},\\\"\\xAB\\\":{\\\"x_min\\\":48,\\\"x_max\\\":549.390625,\\\"ha\\\":607,\\\"o\\\":\\\"m 152 326 l 309 42 l 268 3 l 48 326 l 268 649 l 309 611 l 152 326 m 394 326 l 549 42 l 509 3 l 288 326 l 509 649 l 549 611 l 394 326 \\\"},\\\"D\\\":{\\\"x_min\\\":108,\\\"x_max\\\":991,\\\"ha\\\":1043,\\\"o\\\":\\\"m 126 465 q 117 704 126 536 q 108 931 108 872 l 210 929 q 350 934 251 929 q 477 939 449 939 q 579 936 553 939 q 709 917 605 934 q 902 775 814 900 q 991 483 991 650 q 852 130 991 261 q 491 0 713 0 l 378 0 l 228 7 l 203 7 q 148 4 173 7 q 108 0 123 1 q 117 239 108 70 q 126 465 126 408 m 402 64 q 724 168 609 64 q 840 479 840 273 q 730 774 840 671 q 428 878 621 878 q 345 873 400 878 q 262 869 289 869 l 255 497 l 255 376 l 262 76 q 332 68 292 72 q 402 64 373 64 \\\"},\\\"w\\\":{\\\"x_min\\\":4.171875,\\\"x_max\\\":1052.78125,\\\"ha\\\":1047,\\\"o\\\":\\\"m 4 655 q 55 648 41 648 q 86 647 69 647 q 165 654 120 647 q 190 540 176 587 q 238 394 204 492 l 329 141 q 498 654 419 386 q 551 647 526 647 q 609 654 577 647 q 637 544 620 601 q 677 420 654 487 l 770 135 l 872 413 q 911 532 893 472 q 944 654 930 592 q 979 647 970 648 q 1000 647 988 647 q 1052 654 1022 647 q 961 457 1002 555 q 871 235 919 359 q 782 0 824 110 q 755 3 772 0 q 733 6 738 6 q 708 3 724 6 q 686 0 692 0 q 650 127 667 72 q 611 239 632 183 l 518 494 q 432 258 475 382 q 348 0 390 134 q 325 3 336 1 q 297 5 313 5 q 269 3 284 5 q 245 0 254 1 q 162 244 200 140 q 86 447 125 347 q 4 655 47 546 \\\"},\\\"$\\\":{\\\"x_min\\\":89,\\\"x_max\\\":666,\\\"ha\\\":749,\\\"o\\\":\\\"m 139 186 l 146 186 q 213 91 165 119 q 342 50 261 63 l 342 416 q 142 515 196 458 q 89 648 89 573 q 164 819 89 752 q 342 886 239 886 q 330 985 342 936 l 359 979 l 404 984 q 400 924 401 945 q 399 886 399 904 q 510 874 457 886 q 605 834 562 862 q 582 788 592 808 q 555 729 572 768 l 547 729 q 495 810 535 783 q 399 837 455 837 l 399 520 q 610 419 554 479 q 666 277 666 359 q 588 87 666 164 q 399 0 511 9 l 399 -32 q 399 -63 399 -48 q 405 -125 400 -78 l 368 -121 l 329 -125 l 342 0 q 210 13 273 0 q 98 58 147 27 l 139 186 m 342 836 q 237 787 278 826 q 196 686 196 748 q 237 588 196 626 q 342 537 279 551 l 342 836 m 553 231 q 513 337 553 300 q 399 402 473 375 l 399 51 q 512 113 471 66 q 553 231 553 159 \\\"},\\\"\\u2027\\\":{\\\"x_min\\\":134,\\\"x_max\\\":309,\\\"ha\\\":446,\\\"o\\\":\\\"m 222 636 q 284 611 259 636 q 309 548 309 586 q 284 486 309 512 q 222 461 260 461 q 160 486 186 461 q 134 548 134 511 q 159 610 134 584 q 222 636 185 636 \\\"},\\\"\\\\\\\\\\\":{\\\"x_min\\\":-36,\\\"x_max\\\":403.140625,\\\"ha\\\":383,\\\"o\\\":\\\"m -36 1025 l 28 1025 l 403 -125 l 340 -125 l -36 1025 \\\"},\\\"\\u0399\\\":{\\\"x_min\\\":109,\\\"x_max\\\":271,\\\"ha\\\":385,\\\"o\\\":\\\"m 127 465 q 123 711 127 620 q 109 932 120 803 q 154 927 129 929 q 190 925 179 925 q 238 928 209 925 q 271 931 266 931 q 263 788 271 887 q 256 659 256 690 l 256 448 l 256 283 q 263 135 256 238 q 271 0 271 31 q 231 3 258 0 q 190 8 204 8 q 151 5 172 8 q 109 0 129 2 q 118 239 109 70 q 127 465 127 408 \\\"},\\\"\\u038E\\\":{\\\"x_min\\\":-1,\\\"x_max\\\":1204.5625,\\\"ha\\\":1165,\\\"o\\\":\\\"m 758 177 l 758 386 q 651 570 717 458 q 543 750 585 681 q 431 931 501 819 q 483 928 449 931 q 522 925 518 925 q 572 927 550 925 q 606 931 593 930 q 666 800 633 866 q 735 676 699 734 l 849 475 q 968 688 910 575 q 1086 931 1027 801 l 1142 926 q 1174 927 1160 926 q 1204 931 1187 929 q 1014 627 1099 769 l 891 415 l 891 240 q 894 101 891 198 q 897 0 897 5 q 860 4 885 1 q 820 6 835 6 q 778 4 793 6 q 743 0 763 2 q 753 88 748 36 q 758 177 758 140 m 182 943 q 215 974 200 964 q 252 985 231 985 q 289 969 274 985 q 305 932 305 954 q 290 896 305 911 q 248 866 275 882 l 48 743 l -1 743 l 182 943 \\\"},\\\"\\u2019\\\":{\\\"x_min\\\":90.28125,\\\"x_max\\\":305.5625,\\\"ha\\\":374,\\\"o\\\":\\\"m 169 859 q 197 923 177 894 q 250 953 218 953 q 288 939 272 953 q 305 902 305 925 q 295 857 305 882 q 269 811 284 833 l 120 568 l 90 576 l 169 859 \\\"},\\\"\\u039D\\\":{\\\"x_min\\\":98,\\\"x_max\\\":911.890625,\\\"ha\\\":1011,\\\"o\\\":\\\"m 112 230 q 114 486 112 315 q 117 741 117 656 l 117 950 l 166 950 q 326 766 239 865 q 468 606 413 667 q 610 451 524 544 l 821 227 l 821 604 q 816 765 821 685 q 803 931 812 845 l 855 927 l 911 931 q 901 831 906 884 q 897 741 897 779 q 894 413 897 619 q 892 165 892 207 l 892 -15 l 849 -15 q 730 125 796 50 q 589 281 664 201 l 193 702 l 193 330 q 212 -1 193 169 l 149 2 l 98 -1 q 108 125 105 79 q 112 230 112 170 \\\"},\\\"-\\\":{\\\"x_min\\\":58.328125,\\\"x_max\\\":388.890625,\\\"ha\\\":449,\\\"o\\\":\\\"m 58 390 l 388 390 l 388 273 l 58 273 l 58 390 \\\"},\\\"Q\\\":{\\\"x_min\\\":51,\\\"x_max\\\":1074.609375,\\\"ha\\\":1119,\\\"o\\\":\\\"m 566 -14 q 194 113 338 -14 q 51 465 51 241 q 192 820 51 690 q 559 950 333 950 q 892 853 754 950 q 1047 654 1031 756 q 1065 525 1062 551 q 1068 462 1068 499 q 1065 405 1068 429 q 1050 305 1062 381 q 960 144 1038 229 q 748 6 881 59 l 930 -112 q 1004 -161 963 -136 q 1074 -200 1045 -186 q 1008 -228 1035 -214 q 951 -267 980 -243 q 876 -208 912 -234 q 803 -154 841 -182 l 606 -14 l 566 -14 m 202 468 q 290 163 202 283 q 559 43 379 43 q 826 163 738 43 q 915 468 915 284 q 825 770 915 651 q 559 889 735 889 q 348 826 429 889 q 225 638 267 763 q 202 468 202 552 \\\"},\\\"\\u03C2\\\":{\\\"x_min\\\":44,\\\"x_max\\\":613.453125,\\\"ha\\\":644,\\\"o\\\":\\\"m 305 -206 q 350 -218 325 -218 q 447 -177 407 -218 q 487 -79 487 -136 q 376 55 487 4 q 159 156 266 106 q 44 365 44 231 q 143 585 44 499 q 380 672 242 672 q 506 658 448 672 q 613 616 564 645 q 587 500 595 559 l 562 500 q 501 586 549 557 q 391 616 453 616 q 233 551 296 616 q 170 393 170 486 q 216 271 170 320 q 339 196 263 223 l 467 149 q 569 76 531 119 q 608 -27 608 34 q 522 -206 608 -136 q 321 -293 437 -276 l 305 -206 \\\"},\\\"M\\\":{\\\"x_min\\\":55,\\\"x_max\\\":1165,\\\"ha\\\":1238,\\\"o\\\":\\\"m 190 950 l 243 950 q 331 772 291 851 q 412 612 370 693 q 504 436 454 532 l 626 214 q 742 435 671 298 q 882 711 813 572 q 1001 950 952 850 l 1052 950 q 1082 649 1067 791 q 1118 341 1098 508 q 1165 0 1139 174 q 1121 8 1139 5 q 1088 11 1103 11 q 1049 6 1071 11 q 1008 0 1027 2 q 998 226 1008 109 q 974 461 989 343 q 944 695 959 579 l 748 312 q 610 0 665 152 l 594 1 l 576 0 q 227 685 402 364 l 188 307 q 172 128 175 179 q 168 0 168 77 q 138 4 157 1 q 110 6 118 6 q 81 4 93 6 q 55 0 68 2 q 121 333 89 168 q 171 652 152 498 q 190 950 190 805 \\\"},\\\"\\u03A8\\\":{\\\"x_min\\\":73,\\\"x_max\\\":995.609375,\\\"ha\\\":1071,\\\"o\\\":\\\"m 609 0 q 561 5 585 2 q 532 8 536 8 q 494 5 515 8 q 456 0 474 2 q 463 151 456 45 q 470 297 470 258 q 180 383 287 297 q 73 650 73 469 l 73 817 l 73 932 q 139 925 110 925 q 180 928 155 925 q 212 931 206 931 q 200 818 204 861 q 197 723 197 774 l 197 688 l 197 638 q 268 438 197 508 q 472 368 340 368 l 473 481 q 464 736 473 566 q 456 932 456 905 q 499 927 481 929 q 532 925 518 925 q 577 927 557 925 q 609 931 596 930 q 601 635 609 841 q 594 368 594 429 l 645 372 q 816 465 765 372 q 868 691 868 559 q 861 829 868 740 q 855 932 855 919 q 896 927 878 929 q 924 925 913 925 q 971 927 955 925 q 995 931 987 930 l 994 839 l 994 675 q 894 388 994 480 q 594 297 794 297 q 601 142 594 249 q 609 0 609 35 \\\"},\\\"C\\\":{\\\"x_min\\\":51,\\\"x_max\\\":881.5625,\\\"ha\\\":913,\\\"o\\\":\\\"m 828 737 q 552 889 733 889 q 295 768 383 889 q 207 469 207 647 q 299 177 207 305 q 551 50 391 50 q 710 86 637 50 q 855 189 783 122 l 870 183 q 858 122 862 147 q 855 69 855 97 q 521 -15 699 -15 q 180 116 309 -15 q 51 462 51 248 q 189 820 51 690 q 556 950 327 950 q 719 930 638 950 q 881 875 799 911 q 857 809 867 843 q 845 737 847 775 l 828 737 \\\"},\\\"\\u0153\\\":{\\\"x_min\\\":39,\\\"x_max\\\":1195.9375,\\\"ha\\\":1226,\\\"o\\\":\\\"m 359 -15 q 125 76 212 -15 q 39 318 39 167 q 125 571 39 470 q 362 672 212 672 q 514 640 441 672 q 641 551 588 608 q 897 672 741 672 q 1110 593 1024 672 q 1195 390 1195 515 l 1193 331 q 1022 332 1108 331 q 851 334 935 333 l 708 331 q 765 124 708 206 q 944 42 822 42 q 1145 130 1068 42 l 1162 130 q 1155 85 1158 110 q 1151 47 1152 60 q 1036 0 1100 14 q 904 -15 973 -15 q 754 12 819 -15 q 641 106 689 40 q 514 14 584 44 q 359 -15 444 -15 m 376 625 q 224 534 270 625 q 179 328 179 443 q 224 124 179 215 q 369 34 269 34 q 521 127 470 34 q 573 328 573 221 q 526 534 573 443 q 376 625 480 625 m 1061 392 l 1061 423 q 1017 561 1061 504 q 894 618 973 618 q 756 549 805 618 q 708 390 708 480 l 1061 392 \\\"},\\\"!\\\":{\\\"x_min\\\":136,\\\"x_max\\\":312,\\\"ha\\\":449,\\\"o\\\":\\\"m 223 156 q 285 130 259 156 q 312 68 312 105 q 285 8 312 32 q 223 -15 259 -15 q 161 9 187 -15 q 136 68 136 33 q 160 130 136 105 q 223 156 185 156 m 150 752 l 144 841 q 161 919 144 888 q 223 950 178 950 q 282 925 260 950 q 304 863 304 901 q 299 808 304 845 q 295 752 295 770 l 246 250 q 223 250 238 250 q 199 250 206 250 l 150 752 \\\"},\\\"\\xE7\\\":{\\\"x_min\\\":34,\\\"x_max\\\":614.5625,\\\"ha\\\":644,\\\"o\\\":\\\"m 607 119 l 592 41 q 490 -2 549 10 q 363 -15 431 -15 q 130 80 227 -15 q 34 313 34 175 q 132 576 34 480 q 397 672 231 672 q 511 659 456 672 q 614 617 565 647 q 597 558 604 587 q 584 492 589 528 l 570 492 q 507 587 547 553 q 406 622 467 622 q 234 534 293 622 q 176 329 176 447 q 238 126 176 211 q 414 42 300 42 q 592 124 521 42 l 607 119 m 202 -212 q 350 -246 273 -246 q 414 -232 388 -246 q 440 -186 440 -219 q 421 -142 440 -158 q 373 -126 402 -126 l 323 -126 l 323 0 l 367 0 l 367 -77 l 404 -73 q 495 -102 457 -73 q 533 -183 533 -132 q 494 -270 533 -237 q 402 -303 456 -303 q 286 -294 335 -303 q 184 -261 238 -286 l 202 -212 \\\"},\\\"{\\\":{\\\"x_min\\\":116,\\\"x_max\\\":567.390625,\\\"ha\\\":683,\\\"o\\\":\\\"m 491 909 q 421 874 445 909 q 397 792 397 839 l 397 744 l 397 583 q 368 434 397 493 q 263 354 339 376 q 367 272 338 332 q 397 125 397 212 l 397 -35 q 414 -149 397 -108 q 471 -197 431 -191 q 529 -204 511 -204 q 567 -204 548 -204 l 567 -276 q 387 -239 459 -276 q 315 -105 315 -203 l 315 -28 l 315 132 q 296 244 315 194 q 240 303 277 294 q 176 314 204 312 q 116 317 148 317 l 116 389 q 270 429 225 389 q 315 576 315 469 l 315 737 q 348 918 315 870 q 450 977 381 966 q 567 983 503 983 l 567 912 l 491 909 \\\"},\\\"X\\\":{\\\"x_min\\\":0,\\\"x_max\\\":739,\\\"ha\\\":739,\\\"o\\\":\\\"m 200 285 l 318 456 q 18 932 159 718 q 63 929 33 932 q 109 926 94 926 q 168 929 147 926 q 198 932 188 932 q 296 743 244 841 q 391 568 348 644 l 489 726 q 597 932 548 825 q 627 927 614 929 q 661 926 641 926 q 693 929 671 926 q 728 932 715 932 q 616 781 673 862 q 524 652 558 700 l 427 512 q 523 347 480 419 q 614 197 566 275 q 739 0 662 119 q 686 3 719 0 q 647 6 652 6 q 595 4 618 6 q 558 0 572 1 q 459 197 512 97 q 353 398 405 298 l 265 249 q 174 96 193 130 q 127 0 155 62 q 89 3 113 0 q 62 6 65 6 q 26 4 43 6 q 0 0 9 1 l 200 285 \\\"},\\\"\\xF4\\\":{\\\"x_min\\\":40,\\\"x_max\\\":712,\\\"ha\\\":753,\\\"o\\\":\\\"m 371 -15 q 131 79 223 -15 q 40 322 40 173 q 133 572 40 473 q 380 672 227 672 q 621 575 530 672 q 712 327 712 479 q 619 80 712 175 q 371 -15 527 -15 m 332 978 l 421 978 l 572 743 l 525 743 l 376 875 l 229 743 l 180 743 l 332 978 m 377 622 q 227 532 274 622 q 180 327 180 442 q 227 125 180 216 q 375 35 274 35 q 524 124 478 35 q 570 327 570 214 q 524 531 570 441 q 377 622 479 622 \\\"},\\\"#\\\":{\\\"x_min\\\":78,\\\"x_max\\\":972.4375,\\\"ha\\\":1050,\\\"o\\\":\\\"m 497 647 l 675 647 l 791 969 l 877 968 l 761 647 l 972 647 l 948 576 l 736 576 l 671 390 l 896 390 l 873 319 l 644 319 l 531 0 l 446 0 l 559 319 l 382 319 l 266 0 l 182 0 l 294 319 l 78 319 l 102 390 l 320 390 l 386 576 l 151 576 l 176 647 l 410 647 l 526 969 l 610 969 l 497 647 m 472 576 l 407 390 l 587 390 l 650 576 l 472 576 \\\"},\\\"\\u03B9\\\":{\\\"x_min\\\":96,\\\"x_max\\\":233.5,\\\"ha\\\":342,\\\"o\\\":\\\"m 104 333 l 104 521 q 103 567 104 545 q 96 655 102 589 q 141 648 130 648 q 165 647 151 647 q 233 654 196 647 q 224 555 226 599 q 223 437 223 511 l 223 406 q 228 194 223 337 q 233 0 233 51 q 201 3 216 1 q 165 5 185 5 q 127 3 148 5 q 96 0 107 1 q 100 165 96 51 q 104 333 104 279 \\\"},\\\"\\u0386\\\":{\\\"x_min\\\":12,\\\"x_max\\\":910.609375,\\\"ha\\\":896,\\\"o\\\":\\\"m 328 639 l 458 950 q 489 944 464 947 q 522 950 507 944 q 655 613 602 745 q 770 331 709 480 q 910 0 832 181 q 859 3 891 0 q 823 6 827 6 q 772 4 795 6 q 735 0 749 1 q 672 195 692 135 q 613 353 652 255 l 449 358 l 285 353 l 233 205 q 173 0 194 94 l 116 5 q 76 2 91 5 q 55 0 62 0 q 146 211 101 105 q 229 404 192 317 q 328 639 266 490 m 195 943 q 228 974 213 964 q 265 985 244 985 q 302 969 287 985 q 318 932 318 954 q 303 896 318 911 q 261 866 288 882 l 61 743 l 12 743 l 195 943 m 450 419 l 585 425 l 451 761 l 318 425 l 450 419 \\\"},\\\")\\\":{\\\"x_min\\\":65.671875,\\\"x_max\\\":332,\\\"ha\\\":449,\\\"o\\\":\\\"m 332 376 q 271 81 332 217 q 96 -183 211 -54 q 65 -151 83 -164 q 193 104 155 -16 q 232 386 232 226 q 191 661 232 533 q 65 918 150 789 q 96 950 87 933 q 273 681 215 816 q 332 376 332 545 \\\"},\\\"\\u03B5\\\":{\\\"x_min\\\":53,\\\"x_max\\\":567,\\\"ha\\\":628,\\\"o\\\":\\\"m 506 516 q 433 591 467 566 q 353 616 400 616 q 261 580 298 616 q 225 492 225 545 q 268 406 225 437 q 372 375 311 375 l 418 375 l 417 349 l 417 310 l 343 317 q 236 282 280 317 q 193 183 193 247 q 238 77 193 117 q 352 38 284 38 q 460 66 410 38 q 543 144 510 94 q 553 99 547 121 q 567 54 558 76 q 452 2 515 19 q 321 -15 388 -15 q 134 31 216 -15 q 53 175 53 78 q 95 286 53 246 q 214 355 137 326 q 127 408 162 370 q 93 497 93 445 q 165 625 93 579 q 323 672 237 672 q 430 654 378 672 q 541 604 481 637 q 522 564 529 584 q 506 516 514 545 \\\"},\\\"\\u0394\\\":{\\\"x_min\\\":0,\\\"x_max\\\":899,\\\"ha\\\":899,\\\"o\\\":\\\"m 899 0 q 701 5 833 0 q 501 11 569 11 q 251 5 418 11 q 0 0 84 0 q 225 473 126 251 q 407 932 323 696 q 432 929 415 932 q 457 926 448 926 q 482 927 471 926 q 505 932 493 929 q 691 449 601 664 q 899 0 782 234 m 281 429 q 158 90 212 259 q 290 84 201 90 q 423 79 379 79 l 456 79 q 587 81 550 79 q 692 90 625 83 l 651 188 l 576 383 l 422 778 l 281 429 \\\"},\\\"\\xE2\\\":{\\\"x_min\\\":43,\\\"x_max\\\":655.5,\\\"ha\\\":649,\\\"o\\\":\\\"m 234 -15 q 98 33 153 -15 q 43 162 43 82 q 106 303 43 273 q 303 364 169 333 q 444 448 437 395 q 403 568 444 521 q 288 616 362 616 q 191 587 233 616 q 124 507 149 559 l 95 520 l 104 591 q 202 651 144 631 q 323 672 261 672 q 500 622 444 672 q 557 455 557 573 l 557 133 q 567 69 557 84 q 618 54 577 54 q 655 58 643 54 l 655 26 q 594 5 626 14 q 537 -6 562 -3 q 438 85 453 -6 q 342 10 388 35 q 234 -15 296 -15 m 279 978 l 368 978 l 522 743 l 471 743 l 323 875 l 176 743 l 126 743 l 279 978 m 176 186 q 204 98 176 133 q 284 64 232 64 q 390 107 342 64 q 438 212 438 151 l 438 345 q 239 293 303 319 q 176 186 176 268 \\\"},\\\"}\\\":{\\\"x_min\\\":114,\\\"x_max\\\":567,\\\"ha\\\":683,\\\"o\\\":\\\"m 369 576 q 405 438 369 487 q 527 389 441 389 l 567 389 l 567 317 q 415 278 461 317 q 369 132 369 239 l 369 -28 q 319 -229 369 -182 q 114 -276 270 -276 l 114 -204 q 252 -172 218 -204 q 286 -83 286 -141 l 286 -35 l 286 125 q 314 271 286 212 q 418 354 342 329 q 311 435 337 382 q 286 584 286 488 l 286 745 q 268 860 286 818 q 191 913 251 903 l 114 913 l 114 983 l 186 982 q 287 960 242 982 q 346 900 331 938 q 365 822 362 862 q 369 737 369 783 l 369 576 \\\"},\\\"\\u2030\\\":{\\\"x_min\\\":28,\\\"x_max\\\":1511,\\\"ha\\\":1536,\\\"o\\\":\\\"m 799 0 q 647 62 708 0 q 586 218 586 124 q 647 372 586 309 q 799 436 709 436 q 949 373 888 436 q 1011 223 1011 311 q 995 130 1011 176 q 918 35 972 70 q 799 0 865 0 m 1298 0 q 1146 62 1206 0 q 1087 218 1087 124 q 1148 372 1087 308 q 1299 436 1209 436 q 1449 373 1388 436 q 1511 223 1511 311 q 1494 130 1511 169 q 1418 34 1472 69 q 1298 0 1365 0 m 241 448 q 89 510 150 448 q 28 663 28 573 q 89 820 28 755 q 241 885 151 885 q 391 823 329 885 q 453 672 453 761 q 434 580 453 620 q 359 483 412 518 q 241 448 307 448 m 863 1015 l 227 -125 l 158 -125 l 793 1015 l 863 1015 m 897 260 q 872 353 897 310 q 798 397 847 397 q 718 340 737 397 q 700 202 700 283 q 719 86 700 133 q 798 40 738 40 q 866 73 840 40 q 892 149 892 106 q 895 206 894 169 q 897 260 897 242 m 339 684 q 319 797 339 750 q 244 845 300 845 q 161 784 182 845 q 141 645 141 723 q 165 540 141 590 q 237 490 189 490 q 303 524 278 490 q 334 598 329 558 q 339 684 339 638 m 1397 260 q 1373 356 1397 315 q 1297 397 1349 397 q 1218 340 1237 397 q 1200 202 1200 283 q 1219 87 1200 134 q 1297 40 1238 40 q 1366 73 1340 40 q 1392 149 1392 106 q 1395 206 1394 169 q 1397 260 1397 242 \\\"},\\\"\\xC4\\\":{\\\"x_min\\\":-16,\\\"x_max\\\":839.5625,\\\"ha\\\":826,\\\"o\\\":\\\"m 258 638 l 389 951 q 420 945 395 948 q 453 951 438 945 q 570 651 500 826 q 688 360 640 477 q 839 0 736 242 q 788 3 820 0 q 752 6 756 6 q 702 3 728 6 q 665 0 675 0 q 599 204 615 158 q 542 357 584 251 l 378 357 l 214 357 l 161 207 q 130 109 147 170 q 102 0 113 47 l 45 5 q 20 4 29 5 q -16 0 10 4 q 72 203 29 105 q 169 427 115 301 q 258 638 222 552 m 293 1208 q 345 1186 325 1208 q 366 1133 366 1164 q 345 1080 366 1102 q 293 1058 324 1058 q 239 1080 261 1058 q 217 1133 217 1102 q 239 1185 217 1163 q 293 1208 261 1208 m 535 1208 q 587 1186 565 1208 q 609 1133 609 1164 q 587 1080 609 1103 q 535 1058 565 1058 q 481 1080 503 1058 q 459 1133 459 1102 q 481 1185 459 1163 q 535 1208 503 1208 m 378 421 l 515 425 l 381 762 l 247 425 l 378 421 \\\"},\\\"a\\\":{\\\"x_min\\\":44,\\\"x_max\\\":653.734375,\\\"ha\\\":647,\\\"o\\\":\\\"m 233 -15 q 99 33 154 -15 q 44 162 44 82 q 105 302 44 273 q 302 363 167 331 q 444 448 437 395 q 401 567 444 519 q 287 615 359 615 q 190 587 231 615 q 124 508 149 560 l 95 519 l 103 591 q 204 651 148 631 q 323 672 260 672 q 499 623 443 672 q 555 457 555 574 l 555 132 q 566 70 555 86 q 616 55 578 55 l 653 55 l 653 26 q 594 4 624 15 q 536 -6 564 -6 q 468 15 492 -6 q 436 83 445 38 q 341 9 387 34 q 233 -15 294 -15 m 175 185 q 204 99 175 135 q 282 63 234 63 q 389 106 343 63 q 436 211 436 150 l 436 344 q 239 294 304 320 q 175 185 175 268 \\\"},\\\"\\u2014\\\":{\\\"x_min\\\":226.390625,\\\"x_max\\\":1138.890625,\\\"ha\\\":1367,\\\"o\\\":\\\"m 226 375 l 1138 375 l 1138 292 l 226 292 l 226 375 \\\"},\\\"=\\\":{\\\"x_min\\\":169.4375,\\\"x_max\\\":969.453125,\\\"ha\\\":1139,\\\"o\\\":\\\"m 969 499 l 169 499 l 169 564 l 969 564 l 969 499 m 969 248 l 169 248 l 169 315 l 969 315 l 969 248 \\\"},\\\"N\\\":{\\\"x_min\\\":98,\\\"x_max\\\":911.890625,\\\"ha\\\":1011,\\\"o\\\":\\\"m 112 230 q 114 486 112 315 q 117 741 117 656 l 117 950 l 166 950 q 326 766 239 865 q 468 606 413 667 q 610 451 524 544 l 821 227 l 821 604 q 816 765 821 685 q 803 931 812 845 l 855 927 l 911 931 q 901 831 906 884 q 897 741 897 779 q 894 413 897 619 q 892 165 892 207 l 892 -15 l 849 -15 q 730 125 796 50 q 589 281 664 201 l 193 702 l 193 330 q 212 -1 193 169 l 149 2 l 98 -1 q 108 125 105 79 q 112 230 112 170 \\\"},\\\"\\u03C1\\\":{\\\"x_min\\\":65,\\\"x_max\\\":711,\\\"ha\\\":758,\\\"o\\\":\\\"m 191 -99 q 195 -235 191 -145 q 199 -371 199 -325 q 161 -367 169 -367 q 134 -366 153 -366 q 96 -368 116 -366 q 65 -372 76 -370 q 70 -190 65 -311 q 76 -8 76 -69 q 73 166 76 67 q 70 329 71 265 q 148 578 70 484 q 380 672 226 672 q 617 573 524 672 q 711 329 711 474 q 625 84 711 184 q 396 -15 539 -15 q 285 7 334 -15 q 191 78 236 30 l 191 -99 m 377 619 q 231 533 271 619 q 191 327 191 447 q 241 103 191 169 q 376 38 292 38 q 525 125 479 38 q 571 326 571 212 q 525 529 571 440 q 377 619 480 619 \\\"},\\\"2\\\":{\\\"x_min\\\":22,\\\"x_max\\\":622,\\\"ha\\\":749,\\\"o\\\":\\\"m 449 648 q 410 789 449 727 q 298 851 371 851 q 173 802 219 851 q 128 676 128 753 l 118 673 q 84 740 100 712 q 47 799 69 768 q 313 911 158 911 q 507 844 426 911 q 589 667 589 777 q 527 479 589 555 q 315 258 466 404 l 169 118 l 442 118 q 531 123 485 118 q 622 136 576 129 q 617 102 619 117 q 616 68 616 87 q 617 37 616 54 q 622 0 619 20 q 438 4 562 0 q 252 8 315 8 q 142 7 195 8 q 22 0 88 6 l 22 40 q 234 238 155 158 q 380 430 312 319 q 449 648 449 541 \\\"},\\\"\\xFC\\\":{\\\"x_min\\\":90,\\\"x_max\\\":664,\\\"ha\\\":754,\\\"o\\\":\\\"m 653 498 q 653 329 653 443 q 653 158 653 215 q 664 0 653 82 q 631 3 647 1 q 598 5 616 5 q 563 3 583 5 q 533 0 544 1 l 538 118 q 440 18 494 52 q 312 -15 385 -15 q 148 50 201 -15 q 96 229 96 115 l 96 354 l 96 516 l 90 655 q 120 650 103 651 q 158 648 136 648 q 192 650 175 648 q 227 656 210 651 q 220 446 227 592 q 213 247 213 300 q 247 115 213 163 q 362 68 281 68 q 477 113 428 68 q 531 217 525 159 q 538 340 538 274 q 533 520 538 394 q 528 655 528 647 q 558 650 542 651 q 596 648 574 648 q 629 650 612 648 q 663 656 646 651 q 653 498 653 574 m 253 929 q 307 906 285 929 q 330 854 330 884 q 309 800 330 822 q 257 778 288 778 q 202 800 225 778 q 180 854 180 823 q 200 906 180 884 q 253 929 221 929 m 498 929 q 549 906 527 929 q 572 854 572 884 q 551 799 572 820 q 499 778 531 778 q 444 800 466 778 q 422 854 422 822 q 444 906 422 884 q 498 929 466 929 \\\"},\\\"Z\\\":{\\\"x_min\\\":6.9375,\\\"x_max\\\":801.390625,\\\"ha\\\":828,\\\"o\\\":\\\"m 6 36 q 222 324 112 176 q 425 605 333 473 l 597 857 l 433 857 q 59 836 247 857 l 65 883 l 59 932 q 262 927 134 932 q 427 922 390 922 q 622 927 491 922 q 801 932 754 932 l 801 904 q 594 629 709 785 q 399 361 479 473 q 201 77 319 249 l 427 77 q 581 82 520 77 q 801 103 643 87 l 797 68 l 795 54 l 797 34 l 801 0 q 504 4 683 0 q 325 8 326 8 q 166 4 272 8 q 6 0 61 0 l 6 36 \\\"},\\\"u\\\":{\\\"x_min\\\":90,\\\"x_max\\\":662.21875,\\\"ha\\\":754,\\\"o\\\":\\\"m 653 497 l 653 156 q 654 83 653 122 q 661 -1 656 44 q 623 3 632 2 q 596 4 615 4 q 572 3 581 4 q 533 -1 563 2 l 536 117 q 439 18 491 51 q 313 -15 386 -15 q 147 48 199 -15 q 96 227 96 112 l 96 352 l 96 516 l 90 654 q 158 647 125 647 q 189 648 178 647 q 226 654 200 650 q 220 450 226 586 q 215 246 215 314 q 248 114 215 163 q 361 66 281 66 q 473 112 426 66 q 527 225 520 158 q 536 340 536 282 q 531 497 536 393 q 527 654 527 601 q 572 647 563 647 q 595 647 581 647 q 626 648 616 647 q 662 654 637 650 l 653 497 \\\"},\\\"k\\\":{\\\"x_min\\\":97,\\\"x_max\\\":677.5625,\\\"ha\\\":683,\\\"o\\\":\\\"m 104 656 q 100 873 104 741 q 97 1025 97 1005 q 164 1018 134 1018 q 231 1025 196 1018 q 227 825 231 962 q 223 622 223 687 l 223 377 l 245 377 q 507 654 391 506 q 563 647 538 647 q 616 647 589 647 q 648 652 638 651 l 349 398 l 548 165 q 608 93 577 127 q 677 19 638 59 l 677 0 q 628 3 659 0 q 591 6 597 6 q 544 3 567 6 q 510 0 520 0 q 438 101 473 54 q 360 197 402 148 l 269 308 l 252 324 l 223 326 q 227 164 223 272 q 231 0 231 55 q 200 4 215 2 q 164 5 185 5 q 127 3 146 5 q 97 0 108 1 q 100 386 97 151 q 104 656 104 620 \\\"},\\\"\\u0397\\\":{\\\"x_min\\\":109,\\\"x_max\\\":928.453125,\\\"ha\\\":1039,\\\"o\\\":\\\"m 257 317 q 262 142 257 253 q 267 0 267 30 q 226 3 253 0 q 188 8 200 8 q 147 3 174 8 q 109 0 121 0 q 116 243 109 72 q 124 465 124 415 q 116 710 124 540 q 109 932 109 880 q 152 929 121 932 q 188 926 183 926 q 231 929 200 926 q 267 932 262 932 q 262 719 267 854 q 257 547 257 584 q 406 544 301 547 q 517 541 511 541 q 666 544 562 541 q 777 547 770 547 q 773 786 777 641 q 769 932 769 930 q 813 929 781 932 q 849 926 845 926 q 893 929 861 926 q 928 932 924 932 q 914 795 920 866 q 909 659 909 723 l 909 505 q 918 252 909 420 q 927 0 927 84 q 887 4 913 0 q 848 8 861 8 q 811 5 829 8 q 769 0 793 2 q 773 103 769 41 q 777 176 777 166 l 777 317 l 777 465 q 604 466 692 465 q 430 469 517 467 l 257 465 l 257 317 \\\"},\\\"\\u0391\\\":{\\\"x_min\\\":-15.28125,\\\"x_max\\\":838.890625,\\\"ha\\\":825,\\\"o\\\":\\\"m 257 639 l 387 950 q 402 945 395 947 q 417 944 409 944 q 452 950 437 944 q 576 629 536 733 q 686 359 617 526 q 838 0 755 192 q 789 3 820 0 q 751 6 758 6 q 700 4 723 6 q 663 0 677 1 q 600 199 622 137 q 543 353 579 260 l 377 358 l 215 353 l 162 205 q 130 110 145 160 q 101 0 115 59 l 44 5 q 6 2 20 5 q -15 0 -8 0 q 76 211 30 105 q 158 404 121 318 q 257 639 195 490 m 378 419 l 513 425 l 379 761 l 246 425 l 378 419 \\\"},\\\"\\xDF\\\":{\\\"x_min\\\":94,\\\"x_max\\\":726,\\\"ha\\\":765,\\\"o\\\":\\\"m 107 431 l 107 611 l 107 761 q 200 948 118 872 q 395 1025 283 1025 q 543 979 478 1025 q 608 852 608 933 q 530 709 608 783 q 453 586 453 636 q 589 457 453 547 q 726 259 726 368 q 648 64 726 143 q 453 -15 570 -15 q 379 -6 418 -15 q 309 15 339 1 l 334 128 l 348 127 q 405 70 368 91 q 485 49 442 49 q 583 92 544 49 q 622 193 622 135 q 484 365 622 280 q 347 525 347 450 q 433 667 347 561 q 520 838 520 773 q 483 939 520 899 q 386 979 446 979 q 269 924 313 979 q 226 795 226 870 l 226 629 l 226 344 q 229 141 226 265 q 233 1 233 18 q 196 4 219 1 q 166 8 173 8 q 123 5 142 8 q 94 1 105 2 q 100 250 94 91 q 107 431 107 409 \\\"},\\\"\\xE9\\\":{\\\"x_min\\\":40,\\\"x_max\\\":646.9375,\\\"ha\\\":681,\\\"o\\\":\\\"m 406 42 q 602 130 523 42 l 621 130 q 613 93 617 112 q 609 47 609 73 q 496 0 558 14 q 369 -15 435 -15 q 130 73 220 -15 q 40 311 40 162 q 126 562 40 456 q 355 669 212 669 q 564 590 481 669 q 646 386 646 512 l 644 331 q 438 333 562 331 q 313 335 315 335 l 179 331 q 235 127 179 212 q 406 42 291 42 m 406 945 q 440 976 424 966 q 477 986 455 986 q 528 934 528 986 q 513 895 528 912 q 471 866 498 879 l 272 743 l 222 743 l 406 945 m 513 392 l 513 437 q 470 563 513 509 q 356 618 427 618 q 233 552 271 618 q 183 390 195 487 l 513 392 \\\"},\\\"s\\\":{\\\"x_min\\\":68,\\\"x_max\\\":531,\\\"ha\\\":593,\\\"o\\\":\\\"m 117 161 q 172 69 130 102 q 276 36 214 36 q 378 67 333 36 q 424 152 424 98 q 334 260 424 224 q 168 320 251 290 q 79 460 79 366 q 147 612 79 552 q 310 672 216 672 q 400 660 355 672 q 500 627 446 649 l 461 508 l 448 508 q 401 587 433 561 q 314 614 369 614 q 223 584 262 614 q 185 505 185 555 q 358 375 185 427 q 531 197 531 322 q 450 39 531 93 q 259 -15 369 -15 q 68 23 162 -15 l 103 161 l 117 161 \\\"},\\\"B\\\":{\\\"x_min\\\":109,\\\"x_max\\\":751,\\\"ha\\\":801,\\\"o\\\":\\\"m 127 559 q 109 931 127 759 l 203 929 q 338 932 244 929 q 438 935 432 935 q 629 883 549 935 q 709 726 709 832 q 638 579 709 633 q 464 504 567 524 q 673 438 595 490 q 751 268 751 387 q 639 66 751 133 q 382 0 528 0 l 232 6 q 162 3 211 6 q 109 0 113 0 q 118 287 109 86 q 127 559 127 488 m 256 257 l 256 149 l 261 61 l 337 57 q 526 108 450 57 q 602 266 602 159 q 523 428 602 386 q 312 471 444 471 l 256 471 l 256 257 m 569 706 q 507 834 569 788 q 361 879 446 879 l 261 875 q 252 709 252 798 l 252 522 q 476 558 384 522 q 569 706 569 595 \\\"},\\\"\\u2026\\\":{\\\"x_min\\\":119,\\\"x_max\\\":1005,\\\"ha\\\":1160,\\\"o\\\":\\\"m 191 130 q 244 108 223 130 q 266 55 266 87 q 244 5 266 25 q 191 -15 223 -15 q 139 4 160 -15 q 119 55 119 23 q 139 108 119 87 q 191 130 159 130 m 560 130 q 612 108 591 130 q 634 55 634 87 q 612 5 634 25 q 560 -15 591 -15 q 507 4 528 -15 q 487 55 487 23 q 507 109 487 88 q 560 130 528 130 m 930 130 q 983 108 962 130 q 1005 55 1005 87 q 983 5 1005 25 q 930 -15 962 -15 q 878 4 899 -15 q 858 55 858 23 q 878 108 858 87 q 930 130 898 130 \\\"},\\\"?\\\":{\\\"x_min\\\":128,\\\"x_max\\\":520,\\\"ha\\\":601,\\\"o\\\":\\\"m 307 156 q 367 130 342 156 q 392 68 392 105 q 367 7 392 30 q 307 -15 343 -15 q 244 8 269 -15 q 220 68 220 32 q 244 130 220 105 q 307 156 269 156 m 329 250 q 214 290 261 250 q 168 399 168 331 q 287 595 168 479 q 406 776 406 712 q 371 858 406 823 q 292 894 337 894 q 207 867 243 894 q 162 794 171 840 l 150 794 q 142 835 146 822 q 128 894 139 849 q 210 936 165 922 q 305 950 255 950 q 457 893 394 950 q 520 748 520 837 q 398 550 520 657 q 276 370 276 443 q 293 316 276 337 q 343 296 310 296 q 397 302 372 296 l 383 256 q 357 251 365 252 q 329 250 348 250 \\\"},\\\"H\\\":{\\\"x_min\\\":108,\\\"x_max\\\":927.453125,\\\"ha\\\":1036,\\\"o\\\":\\\"m 258 318 q 263 143 258 255 q 268 0 268 30 q 229 3 255 0 q 188 8 202 8 q 148 3 174 8 q 108 0 121 0 q 117 239 108 70 q 126 465 126 408 q 122 711 126 620 q 108 932 119 803 q 153 928 124 932 q 188 925 183 925 q 231 928 204 925 q 268 932 259 932 q 263 719 268 854 q 258 547 258 584 l 517 543 l 777 547 q 773 786 777 641 q 769 932 769 930 q 814 928 785 932 q 848 925 842 925 q 894 928 864 925 q 927 932 923 932 q 914 798 919 868 q 909 659 909 729 l 909 448 l 909 283 q 916 135 909 238 q 924 0 924 31 q 885 4 911 0 q 846 8 860 8 q 807 4 832 8 q 769 0 781 0 q 773 101 769 37 q 777 177 777 164 l 777 318 l 777 468 q 604 468 720 468 q 431 468 489 468 l 258 468 l 258 318 \\\"},\\\"\\u03BD\\\":{\\\"x_min\\\":0,\\\"x_max\\\":632,\\\"ha\\\":654,\\\"o\\\":\\\"m 319 8 q 296 5 309 8 q 272 0 283 2 q 200 206 234 120 q 0 654 165 291 q 84 647 45 647 q 113 647 98 647 q 168 654 127 648 q 252 402 204 529 l 360 131 q 469 358 440 267 q 499 520 499 448 q 492 579 499 543 q 477 641 486 615 q 552 649 527 645 q 613 661 576 652 q 628 611 625 623 q 632 576 632 598 q 621 501 632 536 q 560 373 611 466 q 461 190 509 280 q 372 0 412 99 q 345 3 363 0 q 319 8 327 8 \\\"},\\\"\\xEE\\\":{\\\"x_min\\\":-25,\\\"x_max\\\":365.328125,\\\"ha\\\":340,\\\"o\\\":\\\"m 104 144 l 104 522 l 97 655 q 138 650 113 651 q 167 649 162 649 q 233 655 206 649 q 225 506 225 581 q 229 254 225 423 q 233 0 233 84 q 201 3 216 1 q 164 5 186 5 q 127 3 146 5 q 97 0 108 1 l 104 144 m 125 978 l 214 978 l 365 743 l 319 743 l 170 875 l 24 743 l -25 743 l 125 978 \\\"},\\\"c\\\":{\\\"x_min\\\":36,\\\"x_max\\\":613.78125,\\\"ha\\\":644,\\\"o\\\":\\\"m 606 119 l 594 41 q 493 -3 548 7 q 365 -15 438 -15 q 131 79 227 -15 q 36 312 36 173 q 134 576 36 480 q 399 672 233 672 q 513 658 459 672 q 613 616 566 645 q 586 492 597 563 l 571 492 q 510 586 550 553 q 406 619 470 619 q 235 532 294 619 q 176 327 176 445 q 237 125 176 209 q 415 42 299 42 q 594 122 520 42 l 606 119 \\\"},\\\"\\xB6\\\":{\\\"x_min\\\":18,\\\"x_max\\\":531,\\\"ha\\\":590,\\\"o\\\":\\\"m 298 968 l 531 968 l 531 910 l 473 910 l 473 4 l 415 4 l 415 910 l 305 910 l 305 4 l 247 4 l 247 558 q 99 602 163 558 q 27 690 36 645 q 18 744 18 734 q 90 896 18 824 q 298 968 163 968 \\\"},\\\"\\u03B2\\\":{\\\"x_min\\\":96,\\\"x_max\\\":737.671875,\\\"ha\\\":779,\\\"o\\\":\\\"m 160 -365 q 129 -367 151 -365 q 96 -369 107 -369 q 100 -253 96 -325 q 104 -169 104 -182 l 104 101 l 104 565 q 168 898 104 771 q 419 1025 232 1025 q 605 960 525 1025 q 686 787 686 895 q 641 641 686 705 q 522 548 597 577 q 682 454 626 515 q 737 290 737 394 q 648 73 737 162 q 431 -15 559 -15 q 324 3 372 -15 q 226 61 276 22 q 224 -44 226 19 q 223 -110 223 -107 l 230 -369 q 193 -367 220 -369 q 160 -365 166 -365 m 356 564 q 507 618 458 564 q 557 779 557 673 q 520 917 557 859 q 407 975 483 975 q 279 906 323 975 q 234 752 234 838 q 232 613 234 701 q 230 506 230 524 l 226 355 l 230 230 q 275 94 230 147 q 406 41 321 41 q 552 116 504 41 q 600 297 600 192 q 550 443 600 386 q 412 499 500 499 q 361 497 384 499 q 327 493 337 494 l 329 516 l 329 565 l 356 564 \\\"},\\\"\\u039C\\\":{\\\"x_min\\\":55,\\\"x_max\\\":1165,\\\"ha\\\":1238,\\\"o\\\":\\\"m 190 950 l 243 950 q 331 772 291 851 q 412 612 370 693 q 504 436 454 532 l 626 214 q 742 435 671 298 q 882 711 813 572 q 1001 950 952 850 l 1052 950 q 1082 649 1067 791 q 1118 341 1098 508 q 1165 0 1139 174 q 1121 8 1139 5 q 1088 11 1103 11 q 1049 6 1071 11 q 1008 0 1027 2 q 998 226 1008 109 q 974 461 989 343 q 944 695 959 579 l 748 312 q 610 0 665 152 l 594 1 l 576 0 q 227 685 402 364 l 188 307 q 172 128 175 179 q 168 0 168 77 q 138 4 157 1 q 110 6 118 6 q 81 4 93 6 q 55 0 68 2 q 121 333 89 168 q 171 652 152 498 q 190 950 190 805 \\\"},\\\"\\u038C\\\":{\\\"x_min\\\":-1,\\\"x_max\\\":1305,\\\"ha\\\":1356,\\\"o\\\":\\\"m 288 465 q 429 820 288 690 q 796 950 570 950 q 1129 853 991 950 q 1284 654 1268 757 q 1302 525 1299 551 q 1305 462 1305 500 q 1302 402 1305 426 q 1284 277 1299 379 q 1131 80 1268 175 q 797 -15 993 -15 q 684 -10 733 -15 q 541 29 635 -5 q 367 186 447 64 q 288 465 288 308 m 182 943 q 215 974 200 964 q 251 985 230 985 q 289 969 274 985 q 304 932 304 954 q 290 896 304 911 q 247 866 275 882 l 48 743 l -1 743 l 182 943 m 439 468 q 527 162 439 282 q 796 42 616 42 q 1063 162 975 42 q 1152 468 1152 283 q 1062 770 1152 651 q 796 889 972 889 q 585 826 666 889 q 462 639 504 764 q 439 468 439 552 \\\"},\\\"\\u0389\\\":{\\\"x_min\\\":-1.390625,\\\"x_max\\\":1233.046875,\\\"ha\\\":1341,\\\"o\\\":\\\"m 564 316 q 569 142 564 254 q 574 0 574 30 q 535 4 561 0 q 494 8 508 8 q 454 4 480 8 q 414 0 427 0 q 423 239 414 70 q 432 465 432 408 q 428 711 432 620 q 414 931 425 802 q 459 928 430 931 q 494 924 489 924 q 537 928 510 924 q 574 931 565 931 q 569 719 574 854 q 564 547 564 584 l 823 543 l 1083 547 q 1078 786 1083 641 q 1074 931 1074 930 q 1119 928 1091 931 q 1153 924 1148 924 q 1199 928 1170 924 q 1233 931 1228 931 q 1221 798 1226 868 q 1217 659 1217 729 l 1215 448 l 1217 283 q 1225 135 1217 238 q 1233 0 1233 31 q 1194 4 1220 0 q 1154 8 1167 8 q 1113 4 1140 8 q 1075 0 1087 0 q 1078 100 1075 37 q 1082 176 1082 163 l 1083 316 l 1083 465 q 910 466 1026 465 q 737 468 795 468 l 564 465 l 564 316 m 181 943 q 215 974 200 964 q 251 985 230 985 q 288 969 273 985 q 304 932 304 954 q 289 896 304 911 q 247 866 275 882 l 47 743 l -1 743 l 181 943 \\\"},\\\"\\u2022\\\":{\\\"x_min\\\":204.171875,\\\"x_max\\\":795.828125,\\\"ha\\\":1003,\\\"o\\\":\\\"m 501 789 q 709 702 622 789 q 795 493 795 615 q 709 286 795 372 q 501 201 623 201 q 290 286 377 201 q 204 493 204 371 q 226 605 204 550 q 312 725 248 661 q 501 789 376 789 \\\"},\\\"\\xA5\\\":{\\\"x_min\\\":32,\\\"x_max\\\":699,\\\"ha\\\":750,\\\"o\\\":\\\"m 313 278 q 176 273 268 278 q 50 268 83 268 l 50 335 q 147 332 82 335 q 246 329 213 329 l 313 329 l 313 436 l 176 436 l 50 432 l 50 495 q 182 492 90 495 q 281 490 275 490 l 126 743 l 32 888 l 91 883 l 191 887 q 225 814 208 845 q 287 699 241 783 l 397 512 q 477 653 433 570 q 592 887 521 736 l 643 883 l 699 887 l 625 773 l 554 655 l 454 490 q 593 492 496 490 q 697 495 690 495 l 697 431 l 434 436 l 434 330 l 572 329 q 636 332 595 329 q 697 335 678 335 l 697 268 l 568 278 l 434 278 q 434 143 434 208 q 442 0 435 77 l 365 5 l 299 0 q 310 131 307 54 q 313 278 313 208 \\\"},\\\"(\\\":{\\\"x_min\\\":114,\\\"x_max\\\":380.5625,\\\"ha\\\":449,\\\"o\\\":\\\"m 114 388 q 175 684 114 545 q 351 950 237 822 q 380 918 361 933 q 253 660 291 782 q 215 379 215 538 q 256 103 215 231 q 380 -151 297 -25 q 351 -183 361 -167 q 173 84 232 -50 q 114 388 114 219 \\\"},\\\"U\\\":{\\\"x_min\\\":101,\\\"x_max\\\":919.0625,\\\"ha\\\":1015,\\\"o\\\":\\\"m 181 926 q 228 929 195 926 q 263 932 262 932 q 251 804 255 853 q 248 697 248 755 l 248 457 q 315 134 248 212 q 515 57 382 57 q 733 129 654 57 q 813 334 813 201 l 813 458 l 813 655 q 810 797 813 733 q 798 931 807 862 q 827 927 813 929 q 859 926 841 926 q 888 929 868 926 q 919 932 907 932 q 905 779 909 853 q 902 600 902 705 l 902 366 q 793 81 902 178 q 492 -15 685 -15 q 211 66 307 -15 q 116 323 116 147 l 116 425 l 116 698 q 109 826 116 759 q 101 931 103 893 q 138 927 120 929 q 181 926 156 926 \\\"},\\\"\\u03B3\\\":{\\\"x_min\\\":-12,\\\"x_max\\\":701,\\\"ha\\\":681,\\\"o\\\":\\\"m 642 647 q 701 654 669 647 q 593 440 633 520 q 502 247 553 359 l 411 48 l 411 -90 q 415 -238 411 -138 q 419 -372 419 -337 l 372 -366 q 282 -372 325 -366 q 287 -195 282 -313 q 292 -33 292 -76 q 260 192 292 47 q 170 460 229 338 q 39 583 111 583 l -12 579 l -10 608 l -12 638 q 43 662 14 653 q 101 672 71 672 q 279 554 234 672 q 398 143 324 437 q 496 393 439 244 q 590 654 553 541 q 615 648 607 650 q 642 647 623 647 \\\"},\\\"\\u03B1\\\":{\\\"x_min\\\":41,\\\"x_max\\\":827.109375,\\\"ha\\\":846,\\\"o\\\":\\\"m 705 352 q 803 -1 763 155 l 739 1 l 673 -1 l 632 172 q 521 36 593 87 q 356 -15 448 -15 q 129 81 217 -15 q 41 316 41 177 q 130 569 41 467 q 368 672 220 672 q 537 622 464 672 q 659 486 610 573 q 711 654 691 569 l 770 650 l 827 654 q 763 505 792 576 q 705 352 734 434 m 377 619 q 226 530 272 619 q 181 326 181 442 q 223 124 181 214 q 367 34 265 34 q 528 137 480 34 q 601 323 577 240 q 527 531 578 444 q 377 619 475 619 \\\"},\\\"F\\\":{\\\"x_min\\\":108,\\\"x_max\\\":613.5625,\\\"ha\\\":671,\\\"o\\\":\\\"m 258 316 q 263 142 258 254 q 268 0 268 30 q 229 3 255 0 q 188 8 202 8 q 148 3 174 8 q 108 0 121 0 q 117 239 108 70 q 126 465 126 408 q 122 711 126 620 q 108 932 119 802 l 358 928 l 613 931 l 610 886 l 613 836 q 505 855 549 851 q 388 860 460 860 l 260 860 l 258 671 l 258 528 l 398 528 q 587 541 480 528 l 584 497 l 587 451 l 394 463 l 258 463 l 258 316 \\\"},\\\"\\xAD\\\":{\\\"x_min\\\":0,\\\"x_max\\\":683.328125,\\\"ha\\\":683,\\\"o\\\":\\\"m 0 374 l 683 374 l 683 289 l 0 289 l 0 374 \\\"},\\\":\\\":{\\\"x_min\\\":134,\\\"x_max\\\":309,\\\"ha\\\":446,\\\"o\\\":\\\"m 222 636 q 284 611 259 636 q 309 548 309 586 q 284 486 309 512 q 222 461 260 461 q 160 486 186 461 q 134 548 134 511 q 159 610 134 584 q 222 636 185 636 m 221 156 q 283 131 257 156 q 309 69 309 107 q 284 8 309 32 q 221 -15 259 -15 q 159 9 185 -15 q 134 69 134 33 q 159 131 134 107 q 221 156 185 156 \\\"},\\\"\\u03A7\\\":{\\\"x_min\\\":0,\\\"x_max\\\":739,\\\"ha\\\":739,\\\"o\\\":\\\"m 200 285 l 318 456 q 18 932 159 718 q 63 929 33 932 q 109 926 94 926 q 168 929 147 926 q 198 932 188 932 q 296 743 244 841 q 391 568 348 644 l 489 726 q 597 932 548 825 q 627 927 614 929 q 661 926 641 926 q 693 929 671 926 q 728 932 715 932 q 616 781 673 862 q 524 652 558 700 l 427 512 q 523 347 480 419 q 614 197 566 275 q 739 0 662 119 q 686 3 719 0 q 647 6 652 6 q 595 4 618 6 q 558 0 572 1 q 459 197 512 97 q 353 398 405 298 l 265 249 q 174 96 193 130 q 127 0 155 62 q 89 3 113 0 q 62 6 65 6 q 26 4 43 6 q 0 0 9 1 l 200 285 \\\"},\\\"*\\\":{\\\"x_min\\\":94,\\\"x_max\\\":580,\\\"ha\\\":675,\\\"o\\\":\\\"m 336 940 q 367 944 349 940 q 389 948 385 948 q 368 850 375 902 q 362 747 362 799 q 522 873 442 800 q 548 812 539 829 q 580 778 556 796 q 386 702 485 750 q 476 661 427 680 q 575 629 524 643 q 521 535 539 587 q 441 604 478 573 q 362 661 403 634 q 369 564 362 615 q 391 459 377 513 q 360 463 379 459 q 336 467 340 467 q 306 463 325 467 q 282 459 288 459 q 304 568 296 522 q 313 661 313 615 q 152 535 221 602 q 128 589 138 569 q 97 630 117 608 q 185 661 140 643 q 287 704 231 679 q 189 746 234 728 q 94 777 145 763 q 125 818 113 795 q 150 873 137 841 q 227 805 184 839 q 313 747 269 771 q 309 810 313 784 q 282 950 305 836 q 310 942 297 945 q 336 940 324 940 \\\"},\\\"\\xB0\\\":{\\\"x_min\\\":176,\\\"x_max\\\":508,\\\"ha\\\":683,\\\"o\\\":\\\"m 176 889 q 228 1010 176 961 q 355 1060 280 1060 q 460 1011 413 1060 q 508 904 508 962 q 455 785 508 839 q 337 731 402 731 q 222 776 269 731 q 176 889 176 821 m 241 880 q 266 805 241 836 q 336 775 292 775 q 413 811 386 775 q 441 899 441 847 q 417 985 441 952 q 343 1018 393 1018 q 281 995 307 1018 q 247 940 254 973 q 241 880 241 906 \\\"},\\\"V\\\":{\\\"x_min\\\":0,\\\"x_max\\\":852.78125,\\\"ha\\\":853,\\\"o\\\":\\\"m 190 477 l 74 759 l 0 932 l 83 926 q 134 929 98 926 q 173 931 170 931 q 206 829 187 884 q 248 704 224 773 l 308 548 l 454 153 l 586 502 q 729 931 666 713 l 790 927 l 852 931 q 643 467 748 720 q 470 0 538 215 q 445 4 457 1 q 418 6 432 6 q 384 3 399 6 q 366 0 368 0 q 279 256 331 123 q 190 477 226 389 \\\"},\\\"\\u039E\\\":{\\\"x_min\\\":58.328125,\\\"x_max\\\":818.0625,\\\"ha\\\":878,\\\"o\\\":\\\"m 437 821 q 258 817 377 821 q 77 813 138 813 q 84 851 83 838 q 84 872 84 864 q 77 932 84 900 q 256 928 137 932 q 437 924 376 924 q 618 928 497 924 q 797 932 738 932 l 791 872 q 794 842 791 861 q 797 813 797 822 q 619 817 738 813 q 437 821 500 821 m 470 430 q 335 425 440 430 q 183 421 230 421 q 187 456 186 433 q 188 481 188 480 q 183 543 188 515 q 304 538 215 543 q 437 533 394 533 q 572 538 481 533 q 694 543 662 543 l 687 482 l 694 421 q 572 425 650 421 q 470 430 494 430 m 437 8 q 250 4 376 8 q 58 0 123 0 l 63 63 l 58 129 q 268 124 134 129 q 437 119 401 119 q 636 124 502 119 q 818 129 769 129 l 813 63 l 818 0 q 627 4 754 0 q 437 8 501 8 \\\"},\\\"\\xA0\\\":{\\\"x_min\\\":0,\\\"x_max\\\":0,\\\"ha\\\":375},\\\"\\u03AB\\\":{\\\"x_min\\\":-26,\\\"x_max\\\":746,\\\"ha\\\":708,\\\"o\\\":\\\"m 299 177 l 299 387 q 190 577 235 501 q 87 747 146 652 q -26 931 29 841 q 23 929 -13 931 q 65 926 61 926 q 110 929 78 926 q 146 931 143 931 q 208 800 175 866 q 278 676 241 734 l 391 475 q 627 931 519 693 l 683 927 q 721 929 701 927 q 746 931 741 931 q 652 786 702 866 q 557 627 602 705 l 432 415 l 432 241 q 435 97 432 184 q 439 0 439 10 q 395 4 414 2 q 361 6 376 6 q 320 4 336 6 q 286 0 304 2 q 294 88 290 36 q 299 177 299 141 m 233 1208 q 286 1187 265 1208 q 307 1133 307 1166 q 285 1080 307 1103 q 233 1058 263 1058 q 179 1080 202 1058 q 157 1133 157 1103 q 179 1186 157 1164 q 233 1208 202 1208 m 475 1208 q 528 1186 506 1208 q 550 1133 550 1164 q 528 1080 550 1103 q 475 1058 506 1058 q 422 1080 444 1058 q 400 1133 400 1102 q 421 1186 400 1164 q 475 1208 443 1208 \\\"},\\\"0\\\":{\\\"x_min\\\":48,\\\"x_max\\\":699,\\\"ha\\\":749,\\\"o\\\":\\\"m 372 909 q 621 773 544 909 q 699 451 699 637 q 627 116 699 252 q 372 -19 556 -19 q 120 114 193 -19 q 48 444 48 247 q 120 774 48 639 q 372 909 193 909 m 187 365 q 226 137 187 238 q 373 37 266 37 q 457 62 421 37 q 519 142 494 88 q 552 271 545 196 q 559 455 559 346 q 526 736 559 622 q 371 851 493 851 q 245 783 280 851 q 198 647 210 716 q 187 444 187 577 l 187 365 \\\"},\\\"\\u201D\\\":{\\\"x_min\\\":104.171875,\\\"x_max\\\":570.828125,\\\"ha\\\":625,\\\"o\\\":\\\"m 184 858 q 211 924 193 898 q 265 951 230 951 q 320 903 316 951 q 310 856 320 881 q 283 812 300 831 l 136 568 l 104 576 l 184 858 m 433 858 q 468 928 452 905 q 516 951 483 951 q 555 938 540 951 q 570 903 570 926 q 561 859 570 881 q 536 812 552 837 l 387 568 l 355 576 l 433 858 \\\"},\\\"@\\\":{\\\"x_min\\\":78,\\\"x_max\\\":1289,\\\"ha\\\":1367,\\\"o\\\":\\\"m 906 640 l 970 640 l 876 266 l 864 203 q 886 157 864 172 q 940 142 908 142 q 1136 262 1062 142 q 1211 513 1211 383 q 1067 801 1211 693 q 735 909 923 909 q 324 753 495 909 q 154 362 154 598 q 301 1 154 135 q 679 -132 448 -132 q 904 -99 791 -132 q 1105 -6 1016 -67 l 1129 -43 q 923 -150 1033 -113 q 694 -188 812 -188 q 258 -43 439 -188 q 78 350 78 100 q 273 791 78 614 q 737 969 469 969 q 1122 843 955 969 q 1289 507 1289 717 q 1187 214 1289 346 q 930 82 1086 82 q 835 103 879 82 q 792 170 792 124 l 792 203 q 709 116 762 150 q 595 82 655 82 q 439 139 493 82 q 386 302 386 197 q 471 553 386 441 q 692 665 556 665 q 797 639 754 665 q 864 556 840 613 l 906 640 m 849 477 q 796 572 835 535 q 701 609 758 609 q 529 511 592 609 q 467 297 467 413 q 503 184 467 230 q 605 139 540 139 q 733 188 679 139 q 807 313 787 238 l 849 477 \\\"},\\\"\\u038A\\\":{\\\"x_min\\\":-1.390625,\\\"x_max\\\":580.0625,\\\"ha\\\":690,\\\"o\\\":\\\"m 433 465 q 429 711 433 620 q 414 931 426 802 q 461 927 435 929 q 498 925 487 925 q 546 928 517 925 q 580 931 575 931 q 572 788 580 887 q 564 659 564 690 l 562 448 l 564 283 q 572 135 564 238 q 580 0 580 31 q 539 4 567 0 q 498 8 512 8 q 457 5 480 8 q 414 0 435 2 q 423 239 414 70 q 433 465 433 408 m 181 943 q 215 974 200 964 q 251 985 230 985 q 288 969 273 985 q 304 932 304 954 q 289 896 304 911 q 247 866 275 882 l 47 743 l -1 743 l 181 943 \\\"},\\\"\\xF6\\\":{\\\"x_min\\\":40,\\\"x_max\\\":712,\\\"ha\\\":753,\\\"o\\\":\\\"m 371 -15 q 131 79 223 -15 q 40 322 40 173 q 133 572 40 473 q 380 672 227 672 q 621 575 530 672 q 712 327 712 479 q 619 80 712 175 q 371 -15 527 -15 m 253 929 q 307 906 285 929 q 330 854 330 884 q 309 800 330 822 q 257 778 288 778 q 202 800 225 778 q 180 854 180 823 q 200 906 180 884 q 253 929 221 929 m 498 929 q 549 906 527 929 q 572 854 572 884 q 551 799 572 820 q 499 778 531 778 q 444 800 466 778 q 422 854 422 822 q 444 906 422 884 q 498 929 466 929 m 377 622 q 227 532 274 622 q 180 327 180 442 q 227 125 180 216 q 375 35 274 35 q 524 124 478 35 q 570 327 570 214 q 524 531 570 441 q 377 622 479 622 \\\"},\\\"i\\\":{\\\"x_min\\\":91.765625,\\\"x_max\\\":244,\\\"ha\\\":342,\\\"o\\\":\\\"m 100 144 l 100 520 l 93 654 q 161 648 130 648 q 194 649 182 648 q 229 654 207 650 q 221 579 224 616 q 219 505 219 543 q 224 240 219 417 q 229 0 229 63 q 197 3 212 1 q 161 5 181 5 q 116 2 131 5 q 91 0 100 0 l 100 144 m 168 963 q 223 940 202 963 q 244 881 244 917 q 222 831 244 849 q 168 813 200 813 q 115 833 137 813 q 93 885 93 853 q 113 941 93 919 q 168 963 134 963 \\\"},\\\"\\u0392\\\":{\\\"x_min\\\":109,\\\"x_max\\\":751,\\\"ha\\\":801,\\\"o\\\":\\\"m 127 559 q 109 931 127 759 l 203 929 q 338 932 244 929 q 438 935 432 935 q 629 883 549 935 q 709 726 709 832 q 638 579 709 633 q 464 504 567 524 q 673 438 595 490 q 751 268 751 387 q 639 66 751 133 q 382 0 528 0 l 232 6 q 162 3 211 6 q 109 0 113 0 q 118 287 109 86 q 127 559 127 488 m 256 257 l 256 149 l 261 61 l 337 57 q 526 108 450 57 q 602 266 602 159 q 523 428 602 386 q 312 471 444 471 l 256 471 l 256 257 m 569 706 q 507 834 569 788 q 361 879 446 879 l 261 875 q 252 709 252 798 l 252 522 q 476 558 384 522 q 569 706 569 595 \\\"},\\\"\\u2264\\\":{\\\"x_min\\\":176,\\\"x_max\\\":962.703125,\\\"ha\\\":1139,\\\"o\\\":\\\"m 288 491 l 962 266 l 962 196 l 176 462 l 176 521 l 962 788 l 962 718 l 288 491 m 962 26 l 176 26 l 176 93 l 962 93 l 962 26 \\\"},\\\"\\u03C5\\\":{\\\"x_min\\\":79,\\\"x_max\\\":703,\\\"ha\\\":774,\\\"o\\\":\\\"m 703 397 q 596 110 703 236 q 332 -15 489 -15 q 145 54 211 -15 q 79 244 79 123 l 83 430 q 81 542 83 486 q 79 654 80 598 l 146 650 l 217 654 q 209 503 217 608 q 202 366 202 398 l 202 261 q 240 105 202 168 q 369 43 279 43 q 523 133 476 43 q 571 341 571 223 q 548 493 571 418 q 488 645 526 568 q 550 648 529 645 q 627 659 571 650 q 703 397 703 538 \\\"},\\\"]\\\":{\\\"x_min\\\":83,\\\"x_max\\\":332,\\\"ha\\\":449,\\\"o\\\":\\\"m 209 -154 l 83 -158 l 85 -129 l 85 -98 q 183 -104 128 -104 l 229 -104 l 232 386 l 232 880 l 185 880 q 134 877 162 880 q 83 872 107 874 l 85 903 l 85 932 l 205 929 l 332 929 q 326 852 332 909 q 321 766 321 794 l 321 455 l 321 2 l 332 -158 l 209 -154 \\\"},\\\"m\\\":{\\\"x_min\\\":91,\\\"x_max\\\":1075,\\\"ha\\\":1167,\\\"o\\\":\\\"m 101 155 l 101 494 q 98 568 101 529 q 91 654 96 606 q 155 647 123 647 l 221 654 l 216 537 q 317 638 261 604 q 450 672 373 672 q 629 547 581 672 q 733 639 677 606 q 860 672 789 672 q 1018 606 968 672 q 1069 429 1069 540 l 1069 298 l 1069 136 l 1075 0 q 1038 3 1063 0 q 1006 6 1013 6 q 968 3 992 6 q 938 0 943 0 q 944 203 938 68 q 950 406 950 338 q 918 536 950 486 q 810 587 887 587 q 699 540 745 587 q 648 452 653 493 q 642 376 643 410 q 641 326 641 342 l 641 314 q 644 132 641 258 q 647 0 647 6 q 607 4 621 2 q 581 5 593 5 q 542 2 570 5 q 514 0 515 0 q 519 168 514 55 q 524 321 524 280 l 524 406 q 490 534 524 482 q 383 587 457 587 q 273 541 314 587 q 223 436 231 496 q 216 314 216 376 q 219 133 216 244 q 222 0 222 22 q 183 3 207 0 q 154 6 159 6 q 117 4 134 6 q 91 0 100 1 l 101 155 \\\"},\\\"\\u03C7\\\":{\\\"x_min\\\":-1,\\\"x_max\\\":725.390625,\\\"ha\\\":713,\\\"o\\\":\\\"m 500 426 q 554 536 528 476 q 607 654 580 595 l 675 650 l 725 652 q 623 507 672 586 q 519 330 573 427 l 444 197 q 575 -85 507 55 q 719 -371 643 -227 q 665 -371 701 -371 q 611 -371 629 -371 l 560 -371 q 444 -115 497 -230 q 358 72 392 -1 l 255 -95 q 178 -237 208 -174 q 125 -371 147 -299 l 62 -371 l 0 -371 q 125 -192 68 -278 q 240 -5 182 -106 l 324 136 l 201 402 q 146 519 174 460 q 43 587 103 587 l -1 584 l -1 638 q 128 672 57 672 q 222 627 181 672 q 292 522 264 583 l 359 374 l 411 260 l 500 426 \\\"},\\\"8\\\":{\\\"x_min\\\":59,\\\"x_max\\\":689,\\\"ha\\\":749,\\\"o\\\":\\\"m 110 696 q 187 853 110 797 q 370 909 264 909 q 558 854 480 909 q 636 694 636 800 q 589 575 636 621 q 467 510 543 529 l 467 499 q 630 413 572 475 q 689 247 689 351 q 597 51 689 120 q 374 -18 505 -18 q 149 48 239 -18 q 59 247 59 115 q 118 414 59 347 q 281 499 178 480 l 281 510 q 157 570 205 521 q 110 696 110 619 m 371 531 q 472 577 437 531 q 507 693 507 624 q 470 810 507 764 q 366 856 433 856 q 271 807 305 856 q 238 693 238 758 q 271 578 238 625 q 371 531 305 531 m 373 31 q 505 97 461 31 q 550 255 550 164 q 506 415 550 348 q 373 482 462 482 q 239 416 283 482 q 195 255 195 351 q 240 96 195 162 q 373 31 285 31 \\\"},\\\"\\u03AF\\\":{\\\"x_min\\\":96,\\\"x_max\\\":429.34375,\\\"ha\\\":342,\\\"o\\\":\\\"m 104 333 l 104 520 q 103 566 104 544 q 96 654 102 588 q 141 647 130 648 q 165 647 151 647 q 233 654 196 647 q 224 555 226 599 q 223 437 223 511 l 223 406 q 228 194 223 337 q 233 0 233 51 q 201 3 216 1 q 165 5 185 5 q 127 3 148 5 q 96 0 107 1 q 100 165 96 51 q 104 333 104 279 m 308 943 q 341 974 326 964 q 377 985 357 985 q 415 969 401 985 q 429 932 429 954 q 414 896 429 912 q 373 866 400 880 l 174 743 l 125 743 l 308 943 \\\"},\\\"\\u0396\\\":{\\\"x_min\\\":6.9375,\\\"x_max\\\":801.390625,\\\"ha\\\":828,\\\"o\\\":\\\"m 6 36 q 222 324 112 176 q 425 605 333 473 l 597 857 l 433 857 q 59 836 247 857 l 65 883 l 59 932 q 262 927 134 932 q 427 922 390 922 q 622 927 491 922 q 801 932 754 932 l 801 904 q 594 629 709 785 q 399 361 479 473 q 201 77 319 249 l 427 77 q 581 82 520 77 q 801 103 643 87 l 797 68 l 795 54 l 797 34 l 801 0 q 504 4 683 0 q 325 8 326 8 q 166 4 272 8 q 6 0 61 0 l 6 36 \\\"},\\\"R\\\":{\\\"x_min\\\":109,\\\"x_max\\\":806.234375,\\\"ha\\\":785,\\\"o\\\":\\\"m 261 0 q 223 3 248 0 q 185 8 198 8 q 148 5 168 8 q 109 0 127 2 q 118 306 109 90 q 127 598 127 523 q 122 761 127 672 q 109 931 117 849 l 203 929 l 409 935 q 618 882 529 935 q 708 719 708 830 q 634 559 708 615 q 442 473 560 503 q 620 240 533 355 q 806 0 708 124 l 732 5 l 610 0 q 449 240 529 127 q 283 455 369 353 l 251 455 l 251 307 q 256 138 251 245 q 261 0 261 31 m 570 699 q 504 835 570 791 q 344 879 439 879 l 261 875 q 253 772 255 834 q 251 701 251 709 l 251 504 q 479 542 388 504 q 570 699 570 581 \\\"},\\\"\\xD7\\\":{\\\"x_min\\\":203.984375,\\\"x_max\\\":938.015625,\\\"ha\\\":1139,\\\"o\\\":\\\"m 892 775 l 938 729 l 616 406 l 938 86 l 892 38 l 571 361 l 247 38 l 203 86 l 525 407 l 204 729 l 247 775 l 570 453 l 892 775 \\\"},\\\"o\\\":{\\\"x_min\\\":41,\\\"x_max\\\":710,\\\"ha\\\":753,\\\"o\\\":\\\"m 371 -15 q 131 78 222 -15 q 41 322 41 172 q 133 573 41 474 q 378 672 225 672 q 619 574 528 672 q 710 326 710 477 q 617 80 710 175 q 371 -15 525 -15 m 377 619 q 226 530 272 619 q 180 327 180 441 q 227 125 180 216 q 375 35 274 35 q 524 123 478 35 q 570 326 570 211 q 524 529 570 440 q 377 619 479 619 \\\"},\\\"5\\\":{\\\"x_min\\\":75,\\\"x_max\\\":654,\\\"ha\\\":749,\\\"o\\\":\\\"m 116 201 q 176 77 131 120 q 303 35 221 35 q 454 98 396 35 q 512 255 512 161 q 457 407 512 346 q 313 469 403 469 q 170 417 227 469 l 150 428 l 158 526 q 158 662 158 570 q 158 801 158 754 l 147 888 l 383 879 l 412 879 q 628 887 520 879 q 624 848 626 870 q 622 818 622 826 l 626 760 l 425 761 l 227 761 q 221 631 227 717 q 216 500 216 544 q 375 536 296 536 q 572 465 491 536 q 654 279 654 394 q 550 60 654 139 q 304 -18 447 -18 q 179 -6 231 -18 q 75 34 127 4 q 101 201 87 118 l 116 201 \\\"},\\\"7\\\":{\\\"x_min\\\":122.609375,\\\"x_max\\\":729.5625,\\\"ha\\\":749,\\\"o\\\":\\\"m 461 553 l 586 770 l 362 770 q 129 755 232 770 q 133 786 132 769 q 135 820 135 804 q 128 888 135 853 l 408 883 l 729 887 l 729 871 q 463 429 582 641 q 251 0 344 216 l 194 8 q 153 5 169 8 q 122 0 137 2 q 214 146 179 91 q 333 339 249 201 q 461 553 417 477 \\\"},\\\"K\\\":{\\\"x_min\\\":108,\\\"x_max\\\":856.625,\\\"ha\\\":821,\\\"o\\\":\\\"m 255 314 q 261 132 255 250 q 268 0 268 13 q 229 4 255 0 q 188 8 202 8 q 148 4 174 8 q 108 0 121 0 q 117 239 108 70 q 126 465 126 408 q 122 712 126 621 q 108 932 119 803 q 153 928 124 932 q 188 925 183 925 q 231 928 203 925 q 267 932 259 932 l 255 671 l 255 499 q 480 693 375 586 q 687 932 585 800 q 732 932 710 932 q 777 932 753 932 l 837 932 q 606 727 720 830 q 389 522 493 623 q 525 358 465 426 q 666 202 586 290 q 856 0 747 115 l 746 0 q 692 -1 716 0 q 644 -8 669 -2 q 571 92 610 44 q 477 204 532 140 l 255 459 l 255 314 \\\"},\\\",\\\":{\\\"x_min\\\":40.28125,\\\"x_max\\\":272.21875,\\\"ha\\\":374,\\\"o\\\":\\\"m 131 75 q 160 147 144 120 q 213 175 176 175 q 272 119 272 175 q 259 67 272 91 q 231 18 245 43 l 73 -243 l 40 -231 l 131 75 \\\"},\\\"d\\\":{\\\"x_min\\\":55,\\\"x_max\\\":676,\\\"ha\\\":758,\\\"o\\\":\\\"m 668 762 l 672 137 l 676 -1 q 638 3 653 1 q 611 5 623 5 q 574 2 597 5 q 547 -1 551 -1 l 557 119 q 336 -15 484 -15 q 127 86 200 -15 q 55 330 55 187 q 127 569 55 467 q 332 672 199 672 q 457 643 402 672 q 551 556 513 615 l 551 756 l 551 789 l 551 818 q 542 1025 551 927 q 609 1018 576 1018 q 639 1019 628 1018 q 675 1025 651 1020 l 668 762 m 374 57 q 515 139 473 57 q 557 332 557 222 q 513 522 557 437 q 374 607 470 607 q 236 522 278 607 q 194 332 194 438 q 235 141 194 225 q 374 57 277 57 \\\"},\\\"\\xA8\\\":{\\\"x_min\\\":83.71875,\\\"x_max\\\":550.390625,\\\"ha\\\":625,\\\"o\\\":\\\"m 471 659 q 441 593 458 618 q 389 568 424 568 q 350 579 365 568 q 335 613 335 591 q 346 660 335 633 q 371 706 358 687 l 519 950 l 550 940 l 471 659 m 221 659 q 192 593 211 618 q 137 568 174 568 q 83 613 83 568 q 93 658 83 637 q 119 706 103 680 l 268 950 l 300 940 l 221 659 \\\"},\\\"E\\\":{\\\"x_min\\\":108,\\\"x_max\\\":613.5625,\\\"ha\\\":686,\\\"o\\\":\\\"m 126 465 q 122 711 126 620 q 108 932 119 802 l 353 928 l 610 931 l 606 884 l 610 836 q 508 853 562 847 q 408 860 453 860 l 260 860 l 258 671 l 258 528 l 398 528 q 587 541 480 528 l 584 497 l 587 451 l 394 463 l 258 463 l 258 316 l 264 73 q 456 76 380 73 q 613 94 531 80 l 610 47 l 613 0 l 358 4 l 108 0 q 117 239 108 70 q 126 465 126 408 \\\"},\\\"Y\\\":{\\\"x_min\\\":-28,\\\"x_max\\\":746,\\\"ha\\\":707,\\\"o\\\":\\\"m 297 177 l 297 386 q 191 570 256 458 q 84 750 125 682 q -28 932 42 819 q 24 928 -9 932 q 63 925 59 925 q 112 927 91 925 q 146 932 134 930 q 207 800 174 866 q 275 676 239 735 l 389 475 q 509 688 451 575 q 627 932 567 801 l 683 926 q 715 927 701 926 q 746 932 729 929 q 555 627 640 769 l 432 415 l 432 240 q 435 101 432 198 q 438 0 438 5 q 401 4 426 1 q 361 6 376 6 q 319 4 334 6 q 284 0 304 2 q 292 88 288 36 q 297 177 297 140 \\\"},\\\"\\\\\\\"\\\":{\\\"x_min\\\":64,\\\"x_max\\\":315,\\\"ha\\\":379,\\\"o\\\":\\\"m 133 587 l 64 587 l 64 957 l 133 957 l 133 587 m 315 587 l 247 587 l 247 957 l 315 957 l 315 587 \\\"},\\\"\\xEA\\\":{\\\"x_min\\\":40,\\\"x_max\\\":646.9375,\\\"ha\\\":681,\\\"o\\\":\\\"m 406 42 q 602 130 523 42 l 621 130 q 613 93 617 112 q 609 47 609 73 q 496 0 558 14 q 369 -15 435 -15 q 130 73 220 -15 q 40 311 40 162 q 126 562 40 456 q 355 669 212 669 q 564 590 481 669 q 646 386 646 512 l 644 331 q 438 333 562 331 q 314 335 315 335 l 179 331 q 235 127 179 212 q 406 42 291 42 m 296 978 l 386 978 l 537 743 l 488 743 l 340 875 l 193 743 l 143 743 l 296 978 m 513 392 l 513 437 q 470 563 513 509 q 356 618 427 618 q 233 552 271 618 q 183 390 195 487 l 513 392 \\\"},\\\"\\u03B4\\\":{\\\"x_min\\\":41,\\\"x_max\\\":670,\\\"ha\\\":710,\\\"o\\\":\\\"m 102 840 q 185 981 102 937 q 375 1025 268 1025 q 497 1010 436 1025 q 621 968 559 995 q 595 876 604 923 q 500 947 547 923 q 393 972 453 972 q 280 937 328 972 q 233 840 233 902 q 272 742 233 794 q 434 627 312 691 q 613 504 556 563 q 670 305 670 445 q 581 75 670 165 q 350 -15 492 -15 q 125 73 210 -15 q 41 305 41 162 q 113 526 41 430 q 306 622 186 622 q 145 726 189 674 q 102 840 102 779 m 356 576 q 221 492 261 576 q 181 302 181 409 q 223 118 181 203 q 356 34 265 34 q 490 116 450 34 q 530 307 530 198 q 489 492 530 409 q 356 576 449 576 \\\"},\\\"\\u03AD\\\":{\\\"x_min\\\":53,\\\"x_max\\\":598.828125,\\\"ha\\\":628,\\\"o\\\":\\\"m 506 516 q 433 591 467 566 q 353 616 400 616 q 261 580 298 616 q 225 492 225 545 q 268 406 225 437 q 372 375 311 375 l 418 375 l 417 352 l 417 313 l 343 317 q 237 282 281 317 q 193 185 193 247 q 238 78 193 118 q 352 38 284 38 q 460 66 410 38 q 543 144 510 94 q 553 99 547 121 q 567 54 558 76 q 452 2 515 19 q 321 -15 388 -15 q 134 31 216 -15 q 53 176 53 78 q 96 286 53 246 q 214 355 139 326 q 127 408 162 370 q 93 497 93 445 q 165 625 93 579 q 323 672 237 672 q 430 654 378 672 q 541 604 481 637 q 522 564 529 584 q 506 516 514 545 m 476 944 q 510 975 494 965 q 547 986 526 986 q 584 970 569 986 q 598 933 598 954 q 584 898 598 912 q 541 867 569 884 l 342 744 l 293 744 l 476 944 \\\"},\\\"\\u03C9\\\":{\\\"x_min\\\":39.71875,\\\"x_max\\\":1028.9375,\\\"ha\\\":1068,\\\"o\\\":\\\"m 535 526 l 596 528 l 594 305 q 616 117 594 193 q 722 42 638 42 q 850 118 811 42 q 888 293 888 194 q 829 502 888 409 q 664 654 769 594 l 717 648 q 805 654 766 648 q 967 510 905 606 q 1028 304 1028 413 q 948 81 1028 177 q 744 -15 867 -15 q 622 16 678 -15 q 534 104 566 47 q 445 16 500 48 q 323 -15 389 -15 q 118 83 196 -15 q 39 311 39 182 q 100 511 39 419 q 262 654 161 604 q 303 650 278 651 q 349 648 327 648 l 402 654 q 238 501 296 593 q 179 291 179 409 q 218 116 179 191 q 348 42 257 42 q 419 68 390 42 q 461 137 448 94 q 472 216 469 175 q 475 303 475 257 q 472 419 475 353 q 469 528 470 485 l 535 526 \\\"},\\\"\\xB4\\\":{\\\"x_min\\\":90.28125,\\\"x_max\\\":305.5625,\\\"ha\\\":374,\\\"o\\\":\\\"m 169 859 q 197 923 177 894 q 250 953 218 953 q 288 939 272 953 q 305 902 305 925 q 295 857 305 882 q 269 811 284 833 l 120 568 l 90 576 l 169 859 \\\"},\\\"\\xB1\\\":{\\\"x_min\\\":169,\\\"x_max\\\":969,\\\"ha\\\":1139,\\\"o\\\":\\\"m 602 549 l 969 549 l 969 482 l 602 482 l 602 247 l 534 247 l 534 482 l 169 482 l 169 549 l 534 549 l 534 779 l 602 779 l 602 549 m 969 33 l 169 33 l 169 100 l 969 100 l 969 33 \\\"},\\\"|\\\":{\\\"x_min\\\":305,\\\"x_max\\\":376,\\\"ha\\\":683,\\\"o\\\":\\\"m 376 448 l 305 448 l 305 956 l 376 956 l 376 448 m 376 -233 l 305 -233 l 305 272 l 376 272 l 376 -233 \\\"},\\\"\\u03CB\\\":{\\\"x_min\\\":79,\\\"x_max\\\":703,\\\"ha\\\":774,\\\"o\\\":\\\"m 703 395 q 595 110 703 236 q 332 -15 488 -15 q 145 54 211 -15 q 79 244 79 123 l 83 429 q 81 542 83 486 q 79 654 80 598 l 146 650 l 217 654 q 209 502 217 608 q 202 365 202 397 l 202 261 q 240 105 202 168 q 369 43 279 43 q 523 132 476 43 q 571 340 571 222 q 548 493 571 418 q 488 645 526 568 q 550 647 529 645 q 627 658 571 650 q 703 395 703 537 m 227 928 q 281 907 259 928 q 304 853 304 886 q 283 800 304 822 q 230 778 262 778 q 175 800 197 778 q 153 853 153 822 q 174 906 153 884 q 227 928 195 928 m 469 928 q 523 906 501 928 q 545 853 545 884 q 524 799 545 821 q 472 778 504 778 q 418 800 440 778 q 396 853 396 822 q 416 905 396 883 q 469 928 437 928 \\\"},\\\"\\xA7\\\":{\\\"x_min\\\":64,\\\"x_max\\\":620,\\\"ha\\\":675,\\\"o\\\":\\\"m 114 36 l 128 36 q 198 -76 148 -33 q 319 -120 247 -120 q 430 -78 384 -120 q 476 27 476 -37 q 369 169 476 116 q 170 252 269 210 q 64 419 64 312 q 91 522 64 476 q 171 609 119 568 q 122 739 122 669 q 195 896 122 837 q 369 956 268 956 q 473 940 422 956 q 576 894 523 925 q 559 864 568 882 q 521 775 551 846 l 508 775 q 445 871 483 839 q 343 903 407 903 q 251 867 289 903 q 213 777 213 832 q 318 644 213 694 q 514 563 415 604 q 620 408 620 507 q 592 299 620 348 q 515 213 565 251 q 560 143 544 179 q 576 65 576 108 q 494 -112 576 -46 q 298 -178 412 -178 q 179 -163 239 -178 q 76 -119 120 -148 q 97 -42 86 -89 q 114 36 108 4 m 138 479 q 257 340 138 396 q 478 238 376 285 q 524 285 508 261 q 541 342 541 310 q 384 490 541 423 q 197 587 228 556 q 156 532 175 563 q 138 479 138 501 \\\"},\\\"b\\\":{\\\"x_min\\\":78,\\\"x_max\\\":703,\\\"ha\\\":758,\\\"o\\\":\\\"m 152 1018 q 219 1025 181 1018 q 212 916 214 966 q 210 788 210 866 l 210 755 l 210 555 q 419 672 283 672 q 629 569 555 672 q 703 322 703 466 q 630 79 703 173 q 414 -15 558 -15 q 296 8 350 -15 q 193 79 242 31 q 160 49 175 64 q 120 -1 145 33 l 78 -1 q 87 106 82 43 q 92 213 92 169 l 92 545 q 88 784 92 625 q 85 1025 85 944 q 152 1018 119 1018 m 383 605 q 243 520 285 605 q 202 323 202 435 q 245 133 202 218 q 383 48 288 48 q 522 132 480 48 q 564 326 564 217 q 522 519 564 434 q 383 605 480 605 \\\"},\\\"q\\\":{\\\"x_min\\\":54,\\\"x_max\\\":675,\\\"ha\\\":758,\\\"o\\\":\\\"m 608 -368 q 579 -368 591 -368 q 540 -373 567 -369 q 549 -213 548 -312 q 551 -101 551 -115 l 551 99 q 339 -15 476 -15 q 130 82 207 -15 q 54 316 54 180 q 125 564 54 456 q 333 672 197 672 q 464 636 407 672 q 557 535 520 601 q 546 655 557 594 q 586 649 576 650 q 611 648 597 648 q 674 655 640 648 l 671 433 q 669 163 671 298 q 666 -106 668 27 l 675 -373 q 643 -369 658 -370 q 608 -368 627 -368 m 373 48 q 515 134 473 48 q 557 331 557 220 q 511 514 557 433 q 372 596 466 596 q 234 512 276 596 q 193 322 193 429 q 236 133 193 218 q 373 48 279 48 \\\"},\\\"\\u03A9\\\":{\\\"x_min\\\":8,\\\"x_max\\\":1119.125,\\\"ha\\\":1129,\\\"o\\\":\\\"m 449 0 q 318 4 410 0 q 223 8 227 8 l 10 0 l 13 47 q 11 74 13 59 q 8 95 9 88 q 119 88 69 90 q 249 86 169 86 q 103 261 152 170 q 55 473 55 352 q 200 822 55 694 q 567 950 345 950 q 931 823 791 950 q 1072 473 1072 697 q 1025 261 1072 350 q 878 86 978 173 q 992 91 902 86 q 1119 96 1083 96 l 1114 33 l 1117 0 l 906 8 q 778 4 867 8 q 682 0 688 0 l 682 72 q 864 215 807 122 q 921 451 921 309 q 834 764 921 639 q 565 889 747 889 q 296 767 384 889 q 209 454 209 645 q 268 217 209 319 q 449 72 327 115 l 449 0 \\\"},\\\"\\u03CD\\\":{\\\"x_min\\\":79,\\\"x_max\\\":703,\\\"ha\\\":774,\\\"o\\\":\\\"m 703 395 q 595 110 703 236 q 332 -15 488 -15 q 145 54 211 -15 q 79 244 79 123 l 83 429 q 81 541 83 484 q 79 652 80 597 l 146 648 l 217 652 q 209 502 217 606 q 202 365 202 397 l 202 261 q 240 105 202 168 q 369 43 279 43 q 523 132 476 43 q 571 340 571 222 q 548 491 571 416 q 488 644 526 566 q 550 646 529 644 q 627 656 571 648 q 703 395 703 536 m 499 941 q 532 972 517 962 q 568 983 547 983 q 606 967 592 983 q 620 930 620 952 q 605 894 620 910 q 564 865 590 878 l 365 741 l 316 741 l 499 941 \\\"},\\\"\\xD6\\\":{\\\"x_min\\\":51,\\\"x_max\\\":1069,\\\"ha\\\":1121,\\\"o\\\":\\\"m 51 465 q 191 819 51 688 q 559 950 332 950 q 891 852 750 950 q 1046 659 1031 755 q 1065 535 1062 562 q 1069 462 1069 508 q 1066 395 1069 416 q 1047 275 1063 373 q 894 80 1031 176 q 562 -15 756 -15 q 451 -8 503 -15 q 304 31 399 -2 q 130 187 209 65 q 51 465 51 308 m 439 1208 q 491 1186 470 1208 q 513 1133 513 1164 q 491 1080 513 1103 q 439 1058 470 1058 q 385 1080 409 1058 q 362 1133 362 1102 q 384 1186 362 1164 q 439 1208 407 1208 m 682 1208 q 735 1186 713 1208 q 757 1133 757 1164 q 735 1080 757 1103 q 682 1058 713 1058 q 628 1079 650 1058 q 607 1133 607 1101 q 628 1186 607 1164 q 682 1208 650 1208 m 204 469 q 292 162 204 283 q 559 42 380 42 q 827 162 739 42 q 916 469 916 283 q 825 767 916 648 q 559 887 735 887 q 349 825 430 887 q 226 638 267 763 q 204 469 204 558 \\\"},\\\"z\\\":{\\\"x_min\\\":15.28125,\\\"x_max\\\":606.9375,\\\"ha\\\":647,\\\"o\\\":\\\"m 15 29 q 164 224 88 124 q 302 416 240 323 l 418 586 l 270 586 q 181 581 218 586 q 62 565 145 577 l 68 609 l 62 654 q 181 648 115 650 q 330 646 248 646 l 363 646 l 393 646 q 606 654 500 646 l 606 626 q 453 428 545 549 q 317 246 361 306 q 194 68 273 185 l 343 68 q 456 72 400 68 q 594 86 513 77 l 588 42 l 594 0 l 280 8 q 148 4 237 8 q 15 0 59 0 l 15 29 \\\"},\\\"\\u2122\\\":{\\\"x_min\\\":176,\\\"x_max\\\":918,\\\"ha\\\":1139,\\\"o\\\":\\\"m 463 930 l 346 930 l 346 614 l 293 614 l 293 930 l 176 930 l 176 969 l 463 969 l 463 930 m 736 690 l 840 968 l 918 969 l 918 614 l 871 614 l 871 927 l 752 614 l 719 614 l 594 930 l 594 614 l 548 614 l 548 969 l 625 969 l 736 690 \\\"},\\\"\\u03AE\\\":{\\\"x_min\\\":91,\\\"x_max\\\":662,\\\"ha\\\":754,\\\"o\\\":\\\"m 594 -365 q 557 -366 577 -365 q 526 -369 537 -368 q 531 -189 526 -310 q 537 -7 537 -68 l 537 406 q 503 536 537 485 q 391 587 469 587 q 255 508 290 587 q 220 315 220 430 q 222 133 220 259 q 224 1 224 8 l 158 6 l 91 1 l 101 156 l 101 495 q 97 584 101 527 q 93 655 93 640 q 119 650 105 652 q 155 648 134 648 q 185 650 175 648 q 221 655 195 651 l 220 538 q 321 637 265 602 q 452 672 378 672 q 604 603 552 672 q 656 430 656 535 l 656 329 l 656 -186 q 659 -293 656 -227 q 662 -370 662 -359 q 630 -366 645 -368 q 594 -365 614 -365 m 481 944 q 515 975 499 965 q 552 986 531 986 q 589 970 575 986 q 603 933 603 955 q 589 898 603 912 q 547 868 575 884 l 348 744 l 298 744 l 481 944 \\\"},\\\"\\u0398\\\":{\\\"x_min\\\":51,\\\"x_max\\\":1068,\\\"ha\\\":1119,\\\"o\\\":\\\"m 51 465 q 193 820 51 690 q 562 950 335 950 q 893 852 755 950 q 1047 653 1031 755 q 1065 525 1062 551 q 1068 462 1068 500 q 1065 402 1068 426 q 1047 280 1062 379 q 892 83 1033 182 q 560 -15 751 -15 q 435 -7 480 -15 q 299 32 390 0 q 130 187 209 65 q 51 465 51 308 m 202 468 q 290 163 202 283 q 559 43 379 43 q 826 163 738 43 q 915 468 915 283 q 826 770 915 652 q 559 889 738 889 q 254 720 306 889 q 202 468 202 552 m 560 507 q 683 510 608 507 q 768 514 758 514 l 765 465 l 765 429 q 648 432 730 429 q 558 435 566 435 q 440 432 523 435 q 351 429 357 429 l 353 470 l 353 514 q 474 510 400 514 q 560 507 549 507 \\\"},\\\"\\xAE\\\":{\\\"x_min\\\":80,\\\"x_max\\\":1058,\\\"ha\\\":1139,\\\"o\\\":\\\"m 816 905 q 992 726 927 841 q 1058 481 1058 611 q 912 138 1058 283 q 567 -6 766 -6 q 225 139 370 -6 q 80 481 80 284 q 224 826 80 681 q 569 971 368 971 q 816 905 698 971 m 569 918 q 263 788 392 918 q 134 481 134 659 q 261 175 134 306 q 566 45 389 45 q 872 174 741 45 q 1004 478 1004 304 q 947 699 1004 596 q 787 859 890 801 q 569 918 684 918 m 815 619 q 776 521 815 562 q 681 468 738 480 l 809 209 l 709 208 l 592 456 l 462 457 l 462 209 l 376 209 l 376 771 l 581 771 q 745 737 676 771 q 815 619 815 704 m 462 714 l 462 513 l 566 513 q 682 532 635 513 q 729 611 729 551 q 681 692 729 671 q 564 714 634 714 l 462 714 \\\"},\\\"\\xC9\\\":{\\\"x_min\\\":109,\\\"x_max\\\":614.5625,\\\"ha\\\":685,\\\"o\\\":\\\"m 124 465 q 116 710 124 540 q 109 932 109 880 l 353 929 l 610 929 q 607 904 607 918 q 607 884 607 891 l 610 838 q 407 860 506 860 l 259 860 l 257 670 l 257 530 l 397 530 q 586 542 492 530 q 584 518 584 530 q 584 499 584 506 q 586 450 584 465 q 487 458 542 454 q 393 463 432 463 l 257 463 l 257 318 l 262 74 q 452 77 381 74 q 614 94 524 80 l 613 47 l 614 0 l 356 0 l 109 0 q 116 243 109 72 q 124 465 124 415 m 426 1225 q 461 1255 445 1244 q 499 1267 478 1267 q 536 1251 522 1267 q 549 1212 549 1236 q 533 1176 549 1192 q 492 1147 517 1160 l 292 1024 l 242 1024 l 426 1225 \\\"},\\\"~\\\":{\\\"x_min\\\":284,\\\"x_max\\\":1080,\\\"ha\\\":1368,\\\"o\\\":\\\"m 850 650 q 667 750 761 650 q 511 850 573 850 q 396 793 431 850 q 362 650 362 737 l 284 650 q 339 846 284 768 q 508 924 395 924 q 697 824 606 924 q 853 725 788 725 q 969 779 936 725 q 1002 924 1002 834 l 1080 924 q 1023 727 1080 805 q 850 650 966 650 \\\"},\\\"\\u0395\\\":{\\\"x_min\\\":108,\\\"x_max\\\":613.5625,\\\"ha\\\":686,\\\"o\\\":\\\"m 126 465 q 122 711 126 620 q 108 932 119 802 l 353 928 l 610 931 l 606 884 l 610 836 q 508 853 562 847 q 408 860 453 860 l 260 860 l 258 671 l 258 528 l 398 528 q 587 541 480 528 l 584 497 l 587 451 l 394 463 l 258 463 l 258 316 l 264 73 q 456 76 380 73 q 613 94 531 80 l 610 47 l 613 0 l 358 4 l 108 0 q 117 239 108 70 q 126 465 126 408 \\\"},\\\"\\xB3\\\":{\\\"x_min\\\":48,\\\"x_max\\\":424,\\\"ha\\\":496,\\\"o\\\":\\\"m 159 636 l 156 663 q 178 661 167 661 q 200 661 189 661 q 280 690 248 661 q 312 767 312 719 q 212 869 312 869 q 143 846 168 869 q 107 781 117 823 l 102 779 q 84 812 93 795 q 66 845 75 830 q 134 886 98 871 q 212 901 171 901 q 341 873 284 901 q 398 778 398 845 q 355 691 398 724 q 252 643 313 658 q 373 610 322 643 q 424 509 424 577 q 353 385 424 427 q 196 343 283 343 q 48 373 117 343 q 57 422 52 391 q 66 469 63 454 l 75 469 q 120 399 88 425 q 199 374 153 374 q 294 409 254 374 q 334 499 334 444 q 299 588 334 553 q 207 623 264 623 q 179 620 193 623 q 156 617 166 618 l 159 636 \\\"},\\\"[\\\":{\\\"x_min\\\":116,\\\"x_max\\\":364.609375,\\\"ha\\\":449,\\\"o\\\":\\\"m 127 2 l 127 386 l 127 769 l 116 932 l 235 929 l 364 929 l 363 908 l 363 872 q 263 880 313 880 l 216 880 l 216 387 l 216 -105 l 264 -105 q 329 -102 308 -105 q 364 -98 351 -99 l 363 -123 l 363 -158 l 237 -154 l 116 -158 q 121 -81 116 -138 q 127 2 127 -24 \\\"},\\\"L\\\":{\\\"x_min\\\":108,\\\"x_max\\\":627.453125,\\\"ha\\\":629,\\\"o\\\":\\\"m 126 465 q 122 712 126 621 q 108 932 119 803 q 149 930 126 932 q 188 926 173 927 q 233 929 202 926 q 268 932 265 932 q 263 797 268 883 q 258 684 258 711 q 261 332 258 577 q 264 73 264 86 l 402 73 q 512 78 458 73 q 627 94 566 84 l 624 47 l 627 0 l 358 4 l 108 0 q 117 239 108 70 q 126 465 126 408 \\\"},\\\"\\u03C3\\\":{\\\"x_min\\\":41,\\\"x_max\\\":802.109375,\\\"ha\\\":806,\\\"o\\\":\\\"m 625 644 l 802 651 l 797 611 l 802 566 l 626 573 q 690 464 671 527 q 710 327 710 402 q 616 81 710 177 q 371 -15 522 -15 q 131 78 222 -15 q 41 322 41 172 q 131 572 41 472 q 371 672 221 672 q 439 665 403 672 q 508 653 475 659 q 569 645 541 646 q 625 644 597 644 m 376 619 q 226 530 272 619 q 181 326 181 442 q 224 124 181 213 q 369 35 268 35 q 522 123 474 35 q 570 326 570 211 q 524 529 570 440 q 376 619 479 619 \\\"},\\\"\\u03B6\\\":{\\\"x_min\\\":75,\\\"x_max\\\":675,\\\"ha\\\":683,\\\"o\\\":\\\"m 642 987 l 642 949 q 425 760 524 860 q 260 545 326 661 q 194 303 194 428 q 194 278 194 289 q 202 215 194 267 q 335 141 210 163 q 558 116 447 128 q 675 -7 675 91 q 643 -109 675 -65 q 544 -232 612 -154 l 500 -205 q 565 -113 555 -131 q 576 -66 576 -94 q 552 -20 576 -37 q 292 22 509 2 q 75 240 75 41 q 143 487 75 357 q 297 719 212 616 q 508 949 383 821 l 359 949 q 252 945 301 949 q 130 933 204 941 l 134 977 l 130 1025 q 272 1021 186 1025 q 372 1018 358 1018 q 526 1021 429 1018 q 643 1025 623 1025 l 642 987 \\\"},\\\"\\u03B8\\\":{\\\"x_min\\\":48,\\\"x_max\\\":699,\\\"ha\\\":749,\\\"o\\\":\\\"m 375 909 q 621 773 544 909 q 699 456 699 638 q 627 118 699 255 q 372 -19 556 -19 q 120 114 193 -19 q 48 444 48 247 q 122 773 48 638 q 375 909 196 909 m 184 383 q 221 136 184 242 q 374 31 259 31 q 534 137 505 31 q 564 424 564 244 l 408 428 l 184 423 l 184 383 m 371 858 q 257 804 300 858 q 196 673 214 751 q 186 581 189 630 q 184 483 184 532 l 322 478 q 461 480 364 478 q 564 483 558 483 q 528 747 564 637 q 371 858 493 858 \\\"},\\\"\\u039F\\\":{\\\"x_min\\\":51,\\\"x_max\\\":1068,\\\"ha\\\":1119,\\\"o\\\":\\\"m 51 465 q 192 820 51 690 q 559 950 333 950 q 892 853 754 950 q 1047 654 1031 757 q 1065 525 1062 551 q 1068 462 1068 500 q 1065 402 1068 426 q 1047 277 1062 379 q 894 80 1031 175 q 560 -15 756 -15 q 447 -10 496 -15 q 304 29 398 -5 q 130 186 210 64 q 51 465 51 308 m 202 468 q 290 162 202 282 q 559 42 379 42 q 826 162 738 42 q 915 468 915 283 q 825 770 915 651 q 559 889 735 889 q 348 826 429 889 q 225 639 267 764 q 202 468 202 552 \\\"},\\\"\\u0393\\\":{\\\"x_min\\\":108,\\\"x_max\\\":627.453125,\\\"ha\\\":629,\\\"o\\\":\\\"m 448 932 l 627 932 q 623 902 624 921 q 621 874 621 883 l 627 836 q 402 863 512 863 l 264 863 q 261 586 264 779 q 258 379 258 393 q 263 181 258 313 q 268 0 268 48 l 187 5 l 108 0 q 121 209 117 106 q 126 427 126 311 q 117 686 126 504 q 108 932 108 869 l 448 932 \\\"},\\\" \\\":{\\\"x_min\\\":0,\\\"x_max\\\":0,\\\"ha\\\":375},\\\"%\\\":{\\\"x_min\\\":28,\\\"x_max\\\":1011,\\\"ha\\\":1032,\\\"o\\\":\\\"m 799 0 q 647 62 708 0 q 586 218 586 124 q 647 372 586 309 q 799 436 709 436 q 949 373 888 436 q 1011 223 1011 311 q 995 130 1011 176 q 918 35 972 70 q 799 0 865 0 m 863 1015 l 227 -125 l 158 -125 l 793 1015 l 863 1015 m 241 451 q 89 513 150 451 q 28 668 28 576 q 89 823 28 759 q 241 888 150 888 q 391 825 330 888 q 453 673 453 762 q 434 581 453 623 q 359 486 412 521 q 241 451 307 451 m 897 260 q 872 353 897 310 q 798 397 847 397 q 718 340 737 397 q 700 202 700 283 q 719 86 700 133 q 798 40 738 40 q 866 73 840 40 q 892 149 892 106 q 895 206 894 169 q 897 260 897 242 m 339 689 q 312 812 339 775 q 240 849 285 849 q 160 788 179 849 q 141 648 141 728 q 164 541 141 590 q 240 493 188 493 q 307 527 281 493 q 334 602 334 561 q 339 689 339 641 \\\"},\\\"P\\\":{\\\"x_min\\\":109,\\\"x_max\\\":722,\\\"ha\\\":736,\\\"o\\\":\\\"m 127 559 q 109 931 127 759 l 231 927 q 337 931 270 927 q 416 935 403 935 q 632 874 543 935 q 722 694 722 814 q 616 493 722 564 q 371 422 510 422 l 252 422 q 257 200 252 348 q 262 0 262 52 q 224 3 249 0 q 185 8 199 8 q 147 5 168 8 q 109 0 127 2 q 118 287 109 85 q 127 559 127 488 m 576 684 q 515 826 576 773 q 364 879 455 879 l 262 875 q 254 781 257 827 q 252 688 252 735 l 252 476 q 507 530 439 476 q 576 684 576 584 \\\"},\\\"\\u038F\\\":{\\\"x_min\\\":-1,\\\"x_max\\\":1355.953125,\\\"ha\\\":1365,\\\"o\\\":\\\"m 685 0 q 555 4 646 0 q 460 8 464 8 l 247 0 l 250 47 q 248 74 250 59 q 244 95 246 88 q 355 88 305 90 q 486 86 405 86 q 340 261 389 170 q 292 473 292 352 q 437 822 292 694 q 804 950 582 950 q 1168 823 1028 950 q 1309 473 1309 697 q 1262 261 1309 350 q 1115 86 1215 173 q 1229 91 1139 86 q 1355 96 1319 96 l 1351 33 l 1354 0 l 1143 8 q 1014 4 1104 8 q 918 0 924 0 l 918 72 q 1100 215 1043 122 q 1158 451 1158 309 q 1071 764 1158 639 q 802 889 984 889 q 533 767 621 889 q 446 454 446 645 q 505 217 446 319 q 685 72 564 115 l 685 0 m 182 943 q 215 974 200 964 q 251 985 230 985 q 289 969 274 985 q 304 932 304 954 q 290 896 304 911 q 247 866 275 882 l 48 743 l -1 743 l 182 943 \\\"},\\\"\\u0388\\\":{\\\"x_min\\\":-1.390625,\\\"x_max\\\":920.015625,\\\"ha\\\":992,\\\"o\\\":\\\"m 432 465 q 428 711 432 620 q 414 932 425 802 l 660 928 l 917 932 l 912 884 l 917 836 q 814 853 868 847 q 714 860 760 860 l 567 860 l 564 671 l 564 528 l 704 528 q 893 541 786 528 l 890 497 l 893 451 l 700 462 l 564 462 l 564 317 l 570 74 q 762 77 686 74 q 920 94 838 80 l 917 47 l 920 0 l 664 4 l 414 0 q 423 239 414 70 q 432 465 432 408 m 181 943 q 215 974 200 964 q 251 985 230 985 q 288 969 273 985 q 304 932 304 954 q 289 896 304 911 q 247 866 275 882 l 47 743 l -1 743 l 181 943 \\\"},\\\"_\\\":{\\\"x_min\\\":0,\\\"x_max\\\":683.328125,\\\"ha\\\":683,\\\"o\\\":\\\"m 683 -322 l 0 -322 l 0 -256 l 683 -256 l 683 -322 \\\"},\\\"\\u03AA\\\":{\\\"x_min\\\":-3,\\\"x_max\\\":388,\\\"ha\\\":386,\\\"o\\\":\\\"m 126 465 q 118 710 126 540 q 111 932 111 880 q 156 929 123 932 q 192 926 190 926 q 238 929 205 926 q 276 932 271 932 q 265 697 276 863 q 255 465 255 530 q 265 230 255 397 q 276 0 276 63 q 233 3 260 0 q 192 8 205 8 q 153 5 176 8 q 111 0 131 2 q 118 243 111 72 q 126 465 126 415 m 73 1208 q 124 1186 102 1208 q 146 1133 146 1164 q 123 1081 146 1105 q 73 1058 101 1058 q 19 1080 42 1058 q -3 1133 -3 1103 q 19 1185 -3 1163 q 73 1208 41 1208 m 313 1208 q 366 1186 344 1208 q 388 1133 388 1164 q 365 1080 388 1103 q 313 1058 342 1058 q 260 1080 283 1058 q 238 1133 238 1103 q 260 1185 238 1163 q 313 1208 282 1208 \\\"},\\\"+\\\":{\\\"x_min\\\":169,\\\"x_max\\\":970,\\\"ha\\\":1139,\\\"o\\\":\\\"m 603 441 l 970 441 l 970 374 l 603 374 l 603 0 l 536 0 l 536 374 l 169 374 l 169 441 l 536 441 l 536 816 l 603 816 l 603 441 \\\"},\\\"\\xBD\\\":{\\\"x_min\\\":83,\\\"x_max\\\":1094.125,\\\"ha\\\":1172,\\\"o\\\":\\\"m 250 743 l 245 836 q 181 804 205 818 q 120 768 156 791 q 104 788 117 775 q 83 808 91 801 q 200 851 141 825 q 327 913 259 877 l 336 911 q 331 724 336 850 q 326 551 326 598 l 326 391 q 301 394 319 391 q 280 397 283 397 q 254 394 271 397 q 233 391 238 391 q 246 551 242 473 q 250 743 250 629 m 859 1015 l 929 1015 l 312 -124 l 243 -124 l 859 1015 m 982 363 q 959 443 982 413 q 887 478 936 473 q 821 458 852 478 q 784 407 790 439 l 778 377 l 773 376 q 728 448 753 416 q 899 513 801 513 q 1019 476 967 513 q 1072 374 1072 439 q 955 189 1072 285 q 806 67 838 93 l 978 67 q 1094 79 1039 67 q 1090 63 1092 76 q 1088 41 1088 49 q 1094 3 1088 18 q 981 3 1056 3 q 867 3 906 3 q 791 3 842 3 q 714 3 739 3 l 714 25 q 913 198 844 125 q 982 363 982 270 \\\"},\\\"\\u03A1\\\":{\\\"x_min\\\":109,\\\"x_max\\\":722,\\\"ha\\\":736,\\\"o\\\":\\\"m 127 559 q 109 931 127 759 l 231 927 q 337 931 270 927 q 416 935 403 935 q 632 874 543 935 q 722 694 722 814 q 616 493 722 564 q 371 422 510 422 l 252 422 q 257 200 252 348 q 262 0 262 52 q 224 3 249 0 q 185 8 199 8 q 147 5 168 8 q 109 0 127 2 q 118 287 109 85 q 127 559 127 488 m 576 684 q 515 826 576 773 q 364 879 455 879 l 262 875 q 254 781 257 827 q 252 688 252 735 l 252 476 q 507 530 439 476 q 576 684 576 584 \\\"},\\\"'\\\":{\\\"x_min\\\":88.890625,\\\"x_max\\\":306.9375,\\\"ha\\\":374,\\\"o\\\":\\\"m 169 858 q 196 923 177 896 q 250 951 215 951 q 289 937 272 951 q 306 903 306 923 q 295 858 306 883 q 269 812 284 833 l 122 568 l 88 576 l 169 858 \\\"},\\\"T\\\":{\\\"x_min\\\":11,\\\"x_max\\\":713,\\\"ha\\\":725,\\\"o\\\":\\\"m 11 839 l 15 884 l 11 932 q 194 927 72 932 q 361 922 316 922 q 544 927 421 922 q 713 932 668 932 q 707 883 707 911 q 707 861 707 870 q 713 834 707 852 q 609 850 666 843 q 504 857 552 857 l 428 857 q 426 767 428 830 q 424 701 424 704 l 428 220 q 442 0 428 122 q 362 8 401 3 q 323 5 344 8 q 282 0 301 2 q 289 132 282 40 q 296 259 296 225 l 296 683 l 296 857 q 11 839 164 857 \\\"},\\\"\\u03A6\\\":{\\\"x_min\\\":50,\\\"x_max\\\":1068,\\\"ha\\\":1119,\\\"o\\\":\\\"m 637 -25 q 559 -15 591 -15 q 527 -17 544 -15 q 483 -25 509 -19 l 487 68 q 181 179 313 68 q 50 465 50 291 q 172 744 50 647 q 487 865 295 842 l 483 958 q 522 952 502 955 q 559 950 543 950 q 596 952 576 950 q 637 958 616 955 l 631 865 q 942 758 816 865 q 1068 465 1068 651 q 944 184 1068 286 q 631 68 820 83 l 637 -25 m 501 502 q 497 677 501 570 q 494 800 494 784 q 278 698 354 786 q 203 466 203 611 q 282 231 203 331 q 494 132 361 132 q 497 363 494 225 q 501 502 501 501 m 915 466 q 839 706 915 612 q 626 800 764 800 q 622 636 626 738 q 618 470 618 533 q 622 301 618 408 q 626 132 626 194 q 839 226 764 132 q 915 466 915 320 \\\"},\\\"j\\\":{\\\"x_min\\\":-55,\\\"x_max\\\":248,\\\"ha\\\":342,\\\"o\\\":\\\"m 113 391 q 106 543 113 444 q 100 654 100 641 q 144 648 135 648 q 167 648 153 648 q 202 649 189 648 q 241 654 214 650 q 237 507 241 595 q 234 405 234 419 l 234 -13 l 234 -109 q 154 -303 234 -234 q -55 -372 74 -372 l -55 -333 q 78 -267 44 -323 q 113 -103 113 -212 l 113 -26 l 113 391 m 171 963 q 226 940 205 963 q 248 881 248 917 q 226 831 248 849 q 171 813 204 813 q 116 833 139 813 q 94 885 94 853 q 115 941 94 919 q 171 963 136 963 \\\"},\\\"\\u03A3\\\":{\\\"x_min\\\":44.4375,\\\"x_max\\\":790.28125,\\\"ha\\\":825,\\\"o\\\":\\\"m 729 883 l 733 835 q 272 855 519 855 q 544 500 391 691 q 372 312 446 399 q 219 119 297 224 l 455 119 q 638 124 522 119 q 790 129 755 129 l 784 86 l 783 68 l 784 42 q 785 25 784 33 q 790 0 786 17 q 558 4 694 0 q 416 8 422 8 q 230 4 350 8 q 44 0 111 0 l 44 50 q 169 182 105 109 q 307 344 232 255 l 406 468 q 242 689 314 594 q 76 899 170 785 l 76 932 q 231 929 123 932 q 345 926 340 926 q 568 929 412 926 q 733 932 723 932 l 729 883 \\\"},\\\"1\\\":{\\\"x_min\\\":72,\\\"x_max\\\":472,\\\"ha\\\":749,\\\"o\\\":\\\"m 334 626 q 331 722 334 655 q 329 793 329 788 q 228 737 278 765 q 133 673 177 709 q 102 713 124 688 q 72 743 80 737 q 274 827 177 780 q 458 935 372 875 l 472 929 q 463 552 472 804 q 455 259 455 300 l 459 0 q 421 5 441 2 q 384 8 401 8 q 349 5 367 8 q 312 0 330 2 q 329 289 324 133 q 334 626 334 445 \\\"},\\\"\\xE4\\\":{\\\"x_min\\\":43,\\\"x_max\\\":655.5,\\\"ha\\\":649,\\\"o\\\":\\\"m 234 -15 q 98 33 153 -15 q 43 162 43 82 q 106 303 43 273 q 303 364 169 333 q 444 448 437 395 q 403 568 444 521 q 288 616 362 616 q 191 587 233 616 q 124 507 149 559 l 95 520 l 104 591 q 202 651 144 631 q 323 672 261 672 q 500 622 444 672 q 557 455 557 573 l 557 133 q 567 69 557 84 q 618 54 577 54 q 655 58 643 54 l 655 26 q 594 5 626 14 q 537 -6 562 -3 q 438 85 453 -6 q 342 10 388 35 q 234 -15 296 -15 m 203 929 q 254 906 232 929 q 277 854 277 884 q 256 799 277 820 q 204 778 236 778 q 149 800 173 778 q 126 854 126 822 q 148 906 126 884 q 203 929 170 929 m 444 929 q 498 906 476 929 q 521 854 521 884 q 500 800 521 822 q 447 778 479 778 q 392 800 415 778 q 370 854 370 823 q 392 906 370 884 q 444 929 414 929 m 176 186 q 204 98 176 133 q 284 64 232 64 q 390 107 342 64 q 438 212 438 151 l 438 345 q 239 293 303 319 q 176 186 176 268 \\\"},\\\"<\\\":{\\\"x_min\\\":176,\\\"x_max\\\":961.109375,\\\"ha\\\":1139,\\\"o\\\":\\\"m 279 406 l 960 130 l 961 56 l 176 379 l 176 432 l 960 756 l 960 682 l 279 406 \\\"},\\\"\\xA3\\\":{\\\"x_min\\\":65,\\\"x_max\\\":728.890625,\\\"ha\\\":749,\\\"o\\\":\\\"m 67 47 l 65 98 l 116 101 q 203 168 176 112 q 231 292 231 224 q 227 375 231 330 q 221 444 223 420 q 139 441 171 444 q 76 432 107 439 l 78 479 l 76 503 q 105 495 92 498 q 134 493 117 493 l 219 493 q 212 550 214 522 q 209 609 209 578 q 304 825 209 742 q 537 909 399 909 q 633 896 592 909 q 723 864 673 884 q 666 731 694 809 l 656 731 q 605 825 641 791 q 512 859 570 859 q 383 796 427 859 q 340 646 340 734 l 345 493 l 366 493 q 523 502 450 493 l 521 466 l 526 434 q 438 441 493 439 q 345 444 383 444 l 345 378 q 310 238 345 302 q 213 107 275 173 q 527 113 421 107 q 728 134 633 119 l 721 66 q 728 0 721 34 q 542 3 666 0 q 358 8 419 8 q 176 3 285 8 q 65 0 67 0 l 67 47 \\\"},\\\"\\xB9\\\":{\\\"x_min\\\":82,\\\"x_max\\\":347,\\\"ha\\\":496,\\\"o\\\":\\\"m 255 731 l 255 833 l 123 759 q 104 780 120 763 q 82 801 87 797 q 208 850 148 822 q 337 917 269 878 l 347 912 q 341 721 347 848 q 336 529 336 593 l 336 356 q 311 358 327 356 q 289 361 295 361 q 264 358 280 361 q 242 356 248 356 q 251 498 247 407 q 255 731 255 590 \\\"},\\\"t\\\":{\\\"x_min\\\":18,\\\"x_max\\\":415.21875,\\\"ha\\\":425,\\\"o\\\":\\\"m 18 586 l 22 630 l 18 654 q 133 643 80 643 q 131 732 133 669 q 129 799 129 796 q 199 827 163 811 q 263 863 234 843 q 252 758 255 811 q 250 643 250 705 q 334 645 310 643 q 401 654 358 647 l 398 618 l 401 586 q 248 594 323 594 l 243 258 l 243 162 q 272 76 243 109 q 353 43 301 43 q 387 44 369 43 q 415 48 405 46 l 415 4 q 349 -10 378 -5 q 290 -15 319 -15 q 174 18 221 -15 q 123 118 128 51 l 123 200 l 129 387 l 133 594 q 84 592 113 594 q 18 586 55 590 \\\"},\\\"\\u03BB\\\":{\\\"x_min\\\":2.78125,\\\"x_max\\\":652.78125,\\\"ha\\\":657,\\\"o\\\":\\\"m 302 670 q 227 871 262 803 q 111 940 193 940 q 78 937 94 940 q 20 924 62 934 l 20 978 q 96 1012 59 1000 q 170 1025 133 1025 q 329 947 287 1025 q 427 692 372 869 q 538 340 481 515 q 652 1 594 166 l 579 5 l 504 0 q 336 573 423 305 q 218 301 272 438 q 111 0 163 163 l 61 6 q 27 3 48 6 q 2 0 5 0 q 302 670 165 329 \\\"},\\\"\\xF9\\\":{\\\"x_min\\\":90,\\\"x_max\\\":664,\\\"ha\\\":754,\\\"o\\\":\\\"m 653 498 q 653 329 653 443 q 653 158 653 215 q 664 0 653 81 q 631 3 647 1 q 598 5 616 5 q 563 3 583 5 q 533 0 544 1 l 538 118 q 440 18 494 52 q 312 -15 385 -15 q 148 50 201 -15 q 96 229 96 115 l 96 354 l 96 516 l 90 655 q 120 650 103 651 q 158 648 136 648 q 192 650 175 648 q 227 655 210 651 q 220 445 227 591 q 213 247 213 299 q 247 115 213 163 q 362 68 281 68 q 477 113 428 68 q 531 217 525 159 q 538 340 538 274 q 533 520 538 394 q 528 655 528 647 q 561 650 548 651 q 596 648 574 648 q 663 655 628 648 q 653 498 653 573 m 445 743 l 244 866 q 205 896 223 877 q 187 934 187 915 q 202 970 187 955 q 238 986 217 986 q 277 973 256 986 q 309 945 298 961 l 496 743 l 445 743 \\\"},\\\"W\\\":{\\\"x_min\\\":0,\\\"x_max\\\":1306.953125,\\\"ha\\\":1307,\\\"o\\\":\\\"m 0 932 q 47 927 31 929 q 76 926 62 926 q 121 929 88 926 q 155 931 154 931 q 262 547 200 750 l 380 171 q 470 437 415 272 q 552 693 525 602 q 619 931 580 784 l 672 926 q 700 928 684 926 q 726 931 716 930 q 825 604 787 727 q 883 419 862 482 q 969 171 904 357 l 1087 522 q 1143 720 1120 623 q 1187 931 1166 816 q 1221 929 1197 931 q 1247 926 1245 926 q 1280 928 1262 926 q 1306 931 1298 930 q 1131 467 1218 716 q 990 0 1045 217 q 963 4 980 1 q 937 7 947 7 q 904 3 925 7 q 880 0 883 0 q 761 385 831 184 l 641 733 l 491 287 q 402 0 438 133 q 370 3 391 0 q 344 7 350 7 q 315 4 327 7 q 287 0 302 2 q 206 296 252 142 q 122 568 161 450 q 0 932 83 686 \\\"},\\\"\\xEF\\\":{\\\"x_min\\\":-25,\\\"x_max\\\":365.328125,\\\"ha\\\":340,\\\"o\\\":\\\"m 104 144 l 104 522 l 97 655 q 138 650 113 651 q 167 648 162 648 q 233 655 206 648 q 225 506 225 581 q 229 254 225 423 q 233 0 233 84 q 201 3 216 1 q 164 5 186 5 q 128 3 143 5 q 97 0 113 1 l 104 144 m 50 929 q 102 906 80 929 q 125 854 125 884 q 104 799 125 820 q 52 778 84 778 q -2 800 19 778 q -25 854 -25 822 q -4 906 -25 884 q 50 929 16 929 m 290 929 q 343 906 320 929 q 365 854 365 884 q 345 799 365 820 q 294 778 324 778 q 238 800 260 778 q 216 854 216 822 q 237 906 216 884 q 290 929 258 929 \\\"},\\\">\\\":{\\\"x_min\\\":176.390625,\\\"x_max\\\":963,\\\"ha\\\":1139,\\\"o\\\":\\\"m 963 379 l 176 56 l 176 130 l 858 406 l 176 682 l 176 756 l 962 432 l 963 379 \\\"},\\\"v\\\":{\\\"x_min\\\":0,\\\"x_max\\\":658.328125,\\\"ha\\\":654,\\\"o\\\":\\\"m 0 655 q 54 648 38 648 q 86 647 69 647 q 113 647 100 647 q 168 654 127 648 q 252 402 204 529 l 358 134 l 470 436 q 543 654 508 533 q 570 650 554 651 q 600 648 586 648 q 636 648 618 648 q 658 654 652 652 q 506 340 577 502 q 372 0 436 177 q 347 5 362 2 q 319 8 333 8 q 296 5 309 8 q 272 0 283 2 q 200 206 234 120 q 0 655 165 292 \\\"},\\\"\\u03C4\\\":{\\\"x_min\\\":30,\\\"x_max\\\":677,\\\"ha\\\":701,\\\"o\\\":\\\"m 423 573 l 419 303 q 423 146 419 250 q 428 0 428 42 q 394 4 410 2 q 359 5 378 5 q 333 4 343 5 q 289 0 323 4 l 298 194 l 294 573 q 156 553 207 573 q 57 472 105 534 q 30 559 49 522 q 149 626 82 609 q 307 644 216 644 l 510 644 q 604 647 545 644 q 677 651 664 651 l 671 610 q 677 566 671 586 q 527 569 618 566 q 423 573 436 573 \\\"},\\\"\\xFB\\\":{\\\"x_min\\\":90,\\\"x_max\\\":664,\\\"ha\\\":754,\\\"o\\\":\\\"m 653 498 q 653 328 653 442 q 653 158 653 215 q 664 0 653 81 q 631 3 647 1 q 598 5 616 5 q 563 3 583 5 q 533 0 544 1 l 538 118 q 440 18 494 52 q 312 -15 385 -15 q 148 50 201 -15 q 96 229 96 115 l 96 354 l 96 516 l 90 655 q 120 650 103 651 q 158 648 136 648 q 192 649 175 648 q 227 655 210 651 q 220 445 227 591 q 213 247 213 299 q 247 115 213 163 q 362 68 281 68 q 477 113 428 68 q 531 217 525 159 q 538 340 538 274 q 533 520 538 394 q 528 655 528 647 q 558 650 542 651 q 596 648 574 648 q 629 649 612 648 q 663 655 646 651 q 653 498 653 573 m 332 978 l 421 978 l 572 743 l 525 743 l 376 875 l 227 743 l 180 743 l 332 978 \\\"},\\\"\\u03BE\\\":{\\\"x_min\\\":64,\\\"x_max\\\":654,\\\"ha\\\":656,\\\"o\\\":\\\"m 562 861 q 502 941 539 911 q 414 972 465 972 q 299 917 342 972 q 256 788 256 862 q 312 650 256 701 q 458 599 369 599 l 526 599 l 524 563 l 524 528 q 480 533 503 532 q 427 535 457 535 q 271 494 337 535 q 197 408 205 454 q 187 347 188 361 q 186 326 186 333 q 186 294 186 300 q 190 282 187 287 q 238 200 201 229 q 335 153 276 171 l 494 118 q 610 73 567 100 q 654 -13 654 46 q 628 -103 654 -60 q 511 -238 602 -146 l 466 -210 q 541 -121 530 -139 q 553 -75 553 -103 q 393 16 553 -18 q 149 92 234 50 q 64 276 64 133 q 130 462 64 379 q 299 575 197 544 q 175 652 222 600 q 128 780 128 704 q 213 954 128 883 q 405 1025 298 1025 q 507 1009 458 1025 q 609 965 555 994 q 585 914 600 945 q 562 861 571 883 \\\"},\\\"&\\\":{\\\"x_min\\\":76,\\\"x_max\\\":917.671875,\\\"ha\\\":975,\\\"o\\\":\\\"m 360 -18 q 160 41 245 -18 q 76 211 76 101 q 137 382 76 315 q 314 515 199 448 q 249 618 273 569 q 225 722 225 668 q 287 872 225 812 q 441 932 349 932 q 581 891 520 932 q 643 777 643 851 q 588 640 643 701 q 453 532 533 579 q 568 390 509 459 q 690 253 627 321 q 815 530 792 379 l 829 530 l 887 466 q 814 327 856 396 q 727 209 772 259 q 807 115 760 169 q 917 0 853 61 q 855 1 896 0 q 791 2 813 2 l 739 0 l 649 110 q 515 15 586 48 q 360 -18 445 -18 m 341 475 q 234 380 267 419 q 201 273 201 340 q 258 125 201 190 q 401 61 316 61 q 508 86 458 61 q 606 154 559 111 l 341 475 m 547 770 q 524 854 547 823 q 454 886 502 886 q 363 851 402 886 q 325 769 325 817 q 344 685 325 718 q 422 575 363 652 q 514 661 481 615 q 547 770 547 708 \\\"},\\\"\\u039B\\\":{\\\"x_min\\\":0,\\\"x_max\\\":852.78125,\\\"ha\\\":853,\\\"o\\\":\\\"m 662 452 l 778 172 l 852 0 l 769 5 q 734 4 747 5 q 679 0 722 4 q 647 102 661 55 q 605 226 633 148 l 547 383 l 401 777 l 266 429 q 191 213 226 319 q 125 0 157 108 l 62 2 l 0 0 q 205 459 95 191 q 380 932 315 726 q 404 927 393 929 q 431 926 416 926 q 459 929 441 926 q 487 932 477 932 q 548 743 511 850 q 662 452 586 637 \\\"},\\\"I\\\":{\\\"x_min\\\":109,\\\"x_max\\\":271,\\\"ha\\\":385,\\\"o\\\":\\\"m 127 465 q 123 711 127 620 q 109 932 120 803 q 154 927 129 929 q 190 925 179 925 q 238 928 209 925 q 271 931 266 931 q 263 788 271 887 q 256 659 256 690 l 256 448 l 256 283 q 263 135 256 238 q 271 0 271 31 q 231 3 258 0 q 190 8 204 8 q 151 5 172 8 q 109 0 129 2 q 118 239 109 70 q 127 465 127 408 \\\"},\\\"G\\\":{\\\"x_min\\\":51,\\\"x_max\\\":942,\\\"ha\\\":1001,\\\"o\\\":\\\"m 581 -15 q 198 107 345 -15 q 51 459 51 229 q 196 815 51 680 q 566 950 342 950 q 755 929 659 950 q 930 869 852 909 q 906 802 916 836 q 895 737 897 769 l 874 737 q 739 855 808 818 q 571 893 670 893 q 305 770 406 893 q 204 479 204 647 q 298 168 204 291 q 577 46 393 46 q 689 56 640 46 q 790 94 738 66 q 794 184 790 123 q 798 251 798 246 q 794 337 798 280 q 790 423 790 394 q 830 417 821 418 q 863 416 838 416 q 901 419 880 416 q 941 425 923 422 l 936 236 q 939 121 936 201 q 942 37 942 41 q 757 -1 843 11 q 581 -15 672 -15 \\\"},\\\"\\u03B0\\\":{\\\"x_min\\\":79,\\\"x_max\\\":703,\\\"ha\\\":774,\\\"o\\\":\\\"m 703 395 q 595 110 703 236 q 332 -15 488 -15 q 145 54 211 -15 q 79 244 79 123 l 83 430 q 81 542 83 486 q 79 654 80 598 l 146 650 l 217 654 q 209 502 217 608 q 202 365 202 397 l 202 261 q 240 105 202 168 q 369 43 279 43 q 523 132 476 43 q 571 340 571 222 q 548 493 571 418 q 488 645 526 568 q 550 647 529 645 q 627 658 571 650 q 703 395 703 537 m 209 865 q 250 846 232 865 q 269 804 269 828 q 251 761 269 780 q 209 743 234 743 q 166 761 184 743 q 148 804 148 779 q 166 846 148 828 q 209 865 184 865 m 361 929 q 378 969 368 956 q 414 982 388 982 q 458 941 458 982 q 446 904 458 919 l 338 743 l 306 743 l 361 929 m 513 865 q 555 846 537 865 q 573 804 573 828 q 555 761 573 779 q 513 743 537 743 q 470 761 487 743 q 454 804 454 779 q 470 846 454 828 q 513 865 487 865 \\\"},\\\"`\\\":{\\\"x_min\\\":86.5,\\\"x_max\\\":303.171875,\\\"ha\\\":374,\\\"o\\\":\\\"m 222 659 q 194 595 214 622 q 140 568 175 568 q 86 613 86 568 q 96 660 86 636 q 122 706 107 684 l 271 950 l 303 940 l 222 659 \\\"},\\\"\\u03A5\\\":{\\\"x_min\\\":-28,\\\"x_max\\\":746,\\\"ha\\\":707,\\\"o\\\":\\\"m 297 177 l 297 386 q 191 570 256 458 q 84 750 125 682 q -28 932 42 819 q 24 928 -9 932 q 63 925 59 925 q 112 927 91 925 q 146 932 134 930 q 207 800 174 866 q 275 676 239 735 l 389 475 q 509 688 451 575 q 627 932 567 801 l 683 926 q 715 927 701 926 q 746 932 729 929 q 555 627 640 769 l 432 415 l 432 240 q 435 101 432 198 q 438 0 438 5 q 401 4 426 1 q 361 6 376 6 q 319 4 334 6 q 284 0 304 2 q 292 88 288 36 q 297 177 297 140 \\\"},\\\"r\\\":{\\\"x_min\\\":89,\\\"x_max\\\":465.390625,\\\"ha\\\":488,\\\"o\\\":\\\"m 99 120 l 99 400 l 99 433 q 91 654 99 548 q 125 648 114 650 q 162 647 136 647 q 232 654 195 647 q 223 588 226 626 q 220 516 220 550 q 313 628 264 589 q 437 668 362 668 l 465 668 l 459 604 l 465 537 q 427 544 448 541 q 383 551 407 548 q 256 482 292 551 q 220 312 220 413 q 222 131 220 256 q 225 0 225 6 l 157 6 l 89 0 l 99 120 \\\"},\\\"x\\\":{\\\"x_min\\\":1,\\\"x_max\\\":635,\\\"ha\\\":632,\\\"o\\\":\\\"m 264 316 l 158 461 q 78 563 120 508 q 5 655 36 619 q 97 647 51 647 q 141 649 120 647 q 177 654 162 651 q 249 538 214 592 q 334 415 284 484 q 420 533 377 473 q 501 654 464 592 q 523 650 508 652 q 550 647 539 648 q 616 654 582 647 l 371 365 q 477 210 434 267 q 635 0 519 152 q 587 3 616 0 q 551 6 558 6 q 501 4 523 6 q 465 0 479 1 q 380 140 407 98 q 295 264 352 183 q 172 84 194 117 q 123 0 151 51 l 66 5 q 33 2 55 5 q 1 0 10 0 q 131 154 63 72 q 264 316 199 236 \\\"},\\\"\\xE8\\\":{\\\"x_min\\\":40,\\\"x_max\\\":646.9375,\\\"ha\\\":681,\\\"o\\\":\\\"m 407 42 q 602 130 523 42 l 621 130 q 613 93 617 112 q 609 47 609 73 q 496 0 558 14 q 369 -15 435 -15 q 130 73 220 -15 q 40 311 40 162 q 126 562 40 456 q 355 669 212 669 q 564 590 481 669 q 646 386 646 512 l 644 331 q 438 333 562 331 q 313 335 315 335 l 179 331 q 235 127 179 212 q 407 42 291 42 m 407 743 l 208 866 q 166 895 183 880 q 149 934 149 911 q 167 967 149 949 q 202 986 185 986 q 243 969 220 986 q 273 945 266 952 l 457 743 l 407 743 m 513 392 l 513 437 q 470 563 513 509 q 356 618 427 618 q 233 552 271 618 q 183 390 195 487 l 513 392 \\\"},\\\"\\u03BC\\\":{\\\"x_min\\\":84,\\\"x_max\\\":669.109375,\\\"ha\\\":754,\\\"o\\\":\\\"m 331 -15 q 265 -7 292 -15 q 210 19 238 0 l 208 -128 q 211 -266 208 -178 q 214 -373 214 -354 q 183 -369 198 -370 q 150 -368 168 -368 q 114 -370 133 -368 q 84 -373 95 -372 q 89 -165 84 -304 q 94 43 94 -26 q 89 363 94 149 q 84 655 84 578 q 150 647 118 647 q 219 654 180 647 q 213 495 219 601 q 208 334 208 390 q 232 155 208 227 q 339 75 256 83 q 471 112 419 75 q 531 212 523 150 q 539 332 539 273 q 536 518 539 388 q 533 655 533 648 q 600 647 568 647 q 669 654 629 647 q 660 477 662 566 q 658 257 658 389 q 660 113 658 171 q 669 -1 662 55 l 602 4 l 537 -1 l 539 106 q 449 17 502 50 q 331 -15 397 -15 \\\"},\\\"\\xF7\\\":{\\\"x_min\\\":169,\\\"x_max\\\":969,\\\"ha\\\":1139,\\\"o\\\":\\\"m 641 643 q 618 593 641 615 q 566 571 596 571 q 518 592 538 571 q 498 643 498 613 q 518 692 498 670 q 567 715 539 715 q 610 703 579 715 q 641 643 641 691 m 969 374 l 169 374 l 169 441 l 969 441 l 969 374 m 641 170 q 619 120 641 141 q 570 100 598 100 q 519 120 540 100 q 498 170 498 141 q 518 221 498 199 q 568 243 538 243 q 604 235 584 243 q 632 214 624 227 q 641 170 641 201 \\\"},\\\"h\\\":{\\\"x_min\\\":92,\\\"x_max\\\":665,\\\"ha\\\":758,\\\"o\\\":\\\"m 102 136 l 102 859 q 100 934 102 894 q 94 1025 98 975 q 136 1018 126 1019 q 158 1018 146 1018 q 226 1025 188 1018 q 222 957 223 1001 q 221 888 221 913 l 221 868 l 221 543 q 322 637 264 602 q 450 672 380 672 q 608 606 558 672 q 659 429 659 541 l 659 298 l 659 136 l 665 0 q 633 3 648 1 q 597 5 617 5 q 560 3 580 5 q 529 0 540 1 q 534 202 529 68 q 540 405 540 337 q 503 533 540 481 q 394 586 467 586 q 256 508 291 586 q 221 313 221 430 q 224 133 221 244 q 227 0 227 22 q 188 3 211 0 q 161 6 164 6 q 123 4 137 6 q 92 0 108 2 l 102 136 \\\"},\\\".\\\":{\\\"x_min\\\":100,\\\"x_max\\\":274,\\\"ha\\\":374,\\\"o\\\":\\\"m 187 156 q 248 130 223 156 q 274 68 274 105 q 248 8 274 32 q 187 -15 223 -15 q 125 8 150 -15 q 100 68 100 32 q 125 130 100 105 q 187 156 150 156 \\\"},\\\"\\u03C6\\\":{\\\"x_min\\\":39,\\\"x_max\\\":965,\\\"ha\\\":1006,\\\"o\\\":\\\"m 578 -371 q 505 -362 539 -362 q 465 -365 483 -362 q 427 -372 446 -368 q 433 -163 427 -298 q 440 -11 440 -29 q 156 76 274 -11 q 39 327 39 163 q 145 571 39 486 q 410 656 252 656 q 412 635 411 645 q 413 615 413 625 q 235 516 292 580 q 179 327 179 451 q 247 118 179 197 q 442 39 316 39 l 444 197 l 444 311 q 444 400 444 340 q 444 491 444 461 q 514 619 452 570 q 657 668 577 668 q 879 568 794 668 q 965 332 965 469 q 850 84 965 169 q 563 -14 735 0 q 570 -203 563 -71 q 578 -371 578 -334 m 826 347 q 794 534 826 451 q 677 617 763 617 q 592 572 621 617 q 563 470 563 527 l 559 350 l 563 39 q 759 126 693 39 q 826 347 826 213 \\\"},\\\";\\\":{\\\"x_min\\\":72.609375,\\\"x_max\\\":312,\\\"ha\\\":446,\\\"o\\\":\\\"m 224 636 q 287 611 262 636 q 312 548 312 586 q 287 486 312 511 q 224 461 262 461 q 162 486 188 461 q 137 548 137 512 q 162 611 137 586 q 224 636 187 636 m 164 75 q 198 157 182 140 q 244 175 214 175 q 304 119 304 175 q 296 75 304 93 q 262 18 287 56 l 103 -243 l 72 -231 l 164 75 \\\"},\\\"f\\\":{\\\"x_min\\\":12,\\\"x_max\\\":432.546875,\\\"ha\\\":397,\\\"o\\\":\\\"m 127 324 l 127 597 q 66 595 92 597 q 12 588 39 594 l 14 626 l 12 654 q 79 648 38 649 q 127 647 121 647 q 192 901 127 777 q 378 1025 257 1025 q 409 1022 400 1025 q 432 1015 418 1019 l 415 896 q 371 911 395 905 q 325 918 347 918 q 252 886 278 918 q 227 805 227 855 q 235 713 227 760 q 246 647 243 665 q 330 650 276 647 q 396 654 384 654 q 391 642 393 647 q 389 633 389 637 l 388 622 l 389 610 q 396 589 389 609 q 323 595 357 594 q 246 597 289 597 l 246 366 q 250 183 246 305 q 254 0 254 60 q 213 3 238 0 q 183 6 187 6 q 144 4 161 6 q 116 0 127 1 q 121 160 116 52 q 127 324 127 269 \\\"},\\\"\\u201C\\\":{\\\"x_min\\\":83.71875,\\\"x_max\\\":550.390625,\\\"ha\\\":625,\\\"o\\\":\\\"m 471 659 q 441 593 458 618 q 389 568 424 568 q 350 579 365 568 q 335 613 335 591 q 346 660 335 633 q 371 706 358 687 l 519 950 l 550 940 l 471 659 m 221 659 q 192 593 211 618 q 137 568 174 568 q 83 613 83 568 q 93 658 83 637 q 119 706 103 680 l 268 950 l 300 940 l 221 659 \\\"},\\\"A\\\":{\\\"x_min\\\":-15.28125,\\\"x_max\\\":838.890625,\\\"ha\\\":825,\\\"o\\\":\\\"m 257 639 l 387 950 q 402 945 395 947 q 417 944 409 944 q 452 950 437 944 q 576 629 536 733 q 686 359 617 526 q 838 0 755 192 q 789 3 820 0 q 751 6 758 6 q 700 4 723 6 q 663 0 677 1 q 600 199 622 137 q 543 353 579 260 l 377 358 l 215 353 l 162 205 q 130 110 145 160 q 101 0 115 59 l 44 5 q 6 2 20 5 q -15 0 -8 0 q 76 211 30 105 q 158 404 121 318 q 257 639 195 490 m 378 419 l 513 425 l 379 761 l 246 425 l 378 419 \\\"},\\\"6\\\":{\\\"x_min\\\":64,\\\"x_max\\\":692,\\\"ha\\\":749,\\\"o\\\":\\\"m 464 859 q 267 730 324 859 q 210 442 210 602 q 315 514 262 488 q 431 540 367 540 q 618 462 545 540 q 692 270 692 385 q 604 65 692 145 q 390 -15 516 -15 q 142 93 221 -15 q 64 377 64 201 q 167 745 64 581 q 462 909 270 909 q 524 905 501 909 q 579 890 547 902 l 574 827 q 521 851 547 844 q 464 859 495 859 m 554 258 q 510 409 554 347 q 380 471 466 471 q 255 409 300 471 q 210 264 210 348 q 253 105 210 172 q 384 39 297 39 q 485 73 441 39 q 540 148 529 108 q 552 206 551 187 q 554 258 554 225 \\\"},\\\"\\u2018\\\":{\\\"x_min\\\":86.5,\\\"x_max\\\":303.171875,\\\"ha\\\":374,\\\"o\\\":\\\"m 224 659 q 193 594 212 620 q 140 568 174 568 q 86 615 86 568 q 98 660 86 633 q 122 708 110 687 l 271 951 l 303 942 l 224 659 \\\"},\\\"\\u03CA\\\":{\\\"x_min\\\":-29,\\\"x_max\\\":362,\\\"ha\\\":342,\\\"o\\\":\\\"m 104 333 l 104 520 q 103 566 104 544 q 96 654 102 588 q 140 647 130 648 q 165 647 151 647 q 232 654 195 647 q 224 555 225 599 q 223 437 223 511 l 223 406 q 228 194 223 337 q 233 0 233 51 q 201 3 216 1 q 165 5 185 5 q 127 3 148 5 q 96 0 107 1 q 100 165 96 51 q 104 333 104 279 m 45 928 q 99 907 77 928 q 122 853 122 886 q 101 800 122 822 q 48 778 80 778 q -6 800 15 778 q -29 853 -29 822 q -7 906 -29 884 q 45 928 13 928 m 286 928 q 340 906 318 928 q 362 853 362 884 q 341 799 362 821 q 289 778 321 778 q 235 800 257 778 q 213 853 213 822 q 233 905 213 883 q 286 928 254 928 \\\"},\\\"\\u03C0\\\":{\\\"x_min\\\":19,\\\"x_max\\\":957,\\\"ha\\\":989,\\\"o\\\":\\\"m 702 5 l 635 0 q 639 114 635 44 q 643 196 643 185 l 643 575 l 508 575 l 373 575 l 369 284 q 373 143 369 236 q 377 0 377 50 q 345 3 360 1 q 309 5 329 5 q 271 3 292 5 q 239 0 250 1 l 248 196 l 243 575 q 130 553 171 575 q 43 472 89 532 q 19 559 35 519 q 139 627 71 611 q 305 644 207 644 l 658 644 l 852 644 l 957 651 l 951 610 l 957 566 l 769 575 l 765 310 q 769 154 765 257 q 773 0 773 51 q 739 3 755 1 q 702 5 724 5 \\\"},\\\"\\u03AC\\\":{\\\"x_min\\\":41,\\\"x_max\\\":827.109375,\\\"ha\\\":846,\\\"o\\\":\\\"m 705 352 q 803 -1 763 155 l 739 1 l 673 -1 l 632 172 q 521 36 593 87 q 356 -15 448 -15 q 129 81 217 -15 q 41 316 41 177 q 130 569 41 467 q 368 672 220 672 q 537 622 464 672 q 659 486 610 573 q 711 654 691 569 l 770 650 l 827 654 q 763 505 792 576 q 705 352 734 434 m 518 943 q 552 974 536 964 q 589 985 568 985 q 626 969 611 985 q 641 932 641 953 q 627 897 641 911 q 585 866 613 883 l 384 743 l 335 743 l 518 943 m 377 619 q 226 530 272 619 q 181 326 181 442 q 223 124 181 214 q 367 34 265 34 q 528 137 480 34 q 601 323 577 240 q 527 531 578 444 q 377 619 475 619 \\\"},\\\"O\\\":{\\\"x_min\\\":51,\\\"x_max\\\":1068,\\\"ha\\\":1119,\\\"o\\\":\\\"m 51 465 q 192 820 51 690 q 559 950 333 950 q 892 853 754 950 q 1047 654 1031 757 q 1065 525 1062 551 q 1068 462 1068 500 q 1065 402 1068 426 q 1047 277 1062 379 q 894 80 1031 175 q 560 -15 756 -15 q 447 -10 496 -15 q 304 29 398 -5 q 130 186 210 64 q 51 465 51 308 m 202 468 q 290 162 202 282 q 559 42 379 42 q 826 162 738 42 q 915 468 915 283 q 825 770 915 651 q 559 889 735 889 q 348 826 429 889 q 225 639 267 764 q 202 468 202 552 \\\"},\\\"n\\\":{\\\"x_min\\\":89,\\\"x_max\\\":661,\\\"ha\\\":754,\\\"o\\\":\\\"m 99 155 l 99 495 q 97 569 99 530 q 91 655 95 608 q 153 648 122 648 l 219 656 l 218 539 q 319 635 260 599 q 451 672 378 672 q 591 624 528 672 q 654 501 654 576 l 654 299 l 654 136 l 661 0 q 629 3 644 1 q 593 5 613 5 q 556 3 576 5 q 525 0 536 1 q 530 222 525 80 q 535 406 535 364 q 501 536 535 485 q 389 587 467 587 q 253 508 288 587 q 218 313 218 430 q 220 132 218 258 q 222 0 222 6 q 184 3 208 0 q 155 6 159 6 q 117 3 141 6 q 89 0 93 0 l 99 155 \\\"},\\\"3\\\":{\\\"x_min\\\":75,\\\"x_max\\\":644,\\\"ha\\\":749,\\\"o\\\":\\\"m 241 465 l 238 512 l 294 510 q 424 554 375 510 q 474 680 474 599 q 434 805 474 754 q 322 856 394 856 q 220 818 257 856 q 164 711 183 780 l 153 706 q 127 767 136 747 q 99 819 118 788 q 220 886 162 863 q 348 909 278 909 q 526 857 450 909 q 603 706 603 805 q 542 564 603 617 q 383 479 482 511 q 567 423 490 479 q 644 262 644 366 q 542 55 644 129 q 302 -18 441 -18 q 183 -6 240 -18 q 75 32 127 5 q 99 189 91 116 l 113 188 q 182 73 136 115 q 302 31 229 31 q 448 92 392 31 q 505 246 505 154 q 451 389 505 333 q 312 446 398 446 q 238 435 279 446 l 241 465 \\\"},\\\"9\\\":{\\\"x_min\\\":57,\\\"x_max\\\":688,\\\"ha\\\":749,\\\"o\\\":\\\"m 261 38 q 475 166 405 38 q 546 451 546 295 q 442 378 494 403 q 325 354 389 354 q 132 428 208 354 q 57 617 57 502 q 148 828 57 748 q 372 909 240 909 q 612 801 536 909 q 688 520 688 693 q 574 143 688 305 q 252 -18 461 -18 q 186 -14 211 -18 q 127 0 161 -11 l 113 90 q 180 51 143 64 q 261 38 218 38 m 372 419 q 501 482 457 419 q 546 634 546 545 q 504 790 546 725 q 373 855 462 855 q 238 791 284 855 q 193 637 193 727 q 238 482 193 545 q 372 419 284 419 \\\"},\\\"l\\\":{\\\"x_min\\\":100,\\\"x_max\\\":237.5,\\\"ha\\\":342,\\\"o\\\":\\\"m 107 118 l 107 881 q 104 965 107 915 q 101 1025 101 1016 q 169 1018 138 1018 q 237 1025 203 1018 q 228 872 230 948 q 226 684 226 797 l 226 512 l 232 111 l 237 0 q 205 3 220 1 q 169 5 189 5 q 131 3 152 5 q 100 0 111 1 l 107 118 \\\"},\\\"\\u03BA\\\":{\\\"x_min\\\":97,\\\"x_max\\\":677.5625,\\\"ha\\\":683,\\\"o\\\":\\\"m 104 365 q 100 531 104 428 q 97 655 97 634 q 164 647 134 647 q 231 654 196 647 q 227 516 231 608 q 223 377 223 425 l 258 377 q 386 498 323 431 q 528 654 449 565 q 588 647 563 647 q 640 647 613 647 q 672 652 662 651 l 358 387 l 548 165 q 608 93 577 127 q 677 19 638 59 l 677 0 q 628 3 659 0 q 591 6 596 6 q 544 3 567 6 q 510 0 520 0 q 437 100 477 47 q 360 196 398 153 l 269 308 l 252 323 l 223 326 q 227 163 223 274 q 231 0 231 52 l 164 5 l 97 0 q 100 208 97 77 q 104 365 104 339 \\\"},\\\"4\\\":{\\\"x_min\\\":39,\\\"x_max\\\":691.78125,\\\"ha\\\":749,\\\"o\\\":\\\"m 453 252 l 177 257 l 39 253 l 39 291 q 204 522 111 392 q 345 721 297 653 q 475 906 394 789 l 527 906 l 581 906 q 575 805 581 872 q 569 705 569 739 l 569 343 l 598 343 q 644 344 620 343 q 690 350 667 345 l 683 297 q 686 270 683 287 q 691 244 689 254 q 568 253 629 253 l 568 137 l 569 0 l 505 6 l 437 0 q 450 120 447 51 q 453 252 453 190 m 453 767 l 344 626 q 230 465 298 562 q 144 343 162 368 l 453 343 l 453 767 \\\"},\\\"p\\\":{\\\"x_min\\\":83,\\\"x_max\\\":702,\\\"ha\\\":758,\\\"o\\\":\\\"m 91 -106 q 89 202 91 47 q 87 513 88 358 l 83 655 q 109 650 95 652 q 146 648 124 648 q 177 650 165 648 q 213 655 188 651 q 202 535 202 591 q 297 637 246 602 q 425 672 349 672 q 630 567 558 672 q 702 322 702 463 q 629 84 702 183 q 423 -15 556 -15 q 210 99 287 -15 l 210 -101 q 214 -244 210 -148 q 219 -373 219 -340 q 185 -369 201 -370 q 151 -368 170 -368 q 130 -368 138 -368 q 83 -373 123 -368 q 87 -240 83 -329 q 91 -106 91 -151 m 384 596 q 245 514 289 596 q 202 328 202 433 q 244 134 202 220 q 383 48 286 48 q 520 131 478 48 q 563 322 563 215 q 519 509 563 423 q 384 596 475 596 \\\"},\\\"\\u03C8\\\":{\\\"x_min\\\":78,\\\"x_max\\\":1002,\\\"ha\\\":1038,\\\"o\\\":\\\"m 78 294 l 82 477 l 82 654 l 145 650 l 215 654 q 209 517 215 605 q 203 421 203 430 l 203 341 q 264 117 203 197 q 465 38 325 38 l 468 260 q 461 535 468 342 q 455 786 455 729 q 496 779 479 782 q 526 776 513 776 q 566 780 545 776 q 600 786 587 784 q 591 496 600 690 q 583 270 583 302 l 587 38 q 791 132 715 38 q 867 357 867 227 q 824 641 867 506 q 885 645 857 641 q 960 656 912 648 q 1002 419 1002 544 q 891 118 1002 231 q 587 -13 780 5 l 591 -221 l 600 -372 q 561 -365 578 -367 q 526 -363 543 -363 q 491 -366 511 -363 q 455 -372 471 -369 q 461 -162 455 -302 q 468 -13 468 -22 q 194 64 310 -13 q 78 294 78 142 \\\"},\\\"\\xDC\\\":{\\\"x_min\\\":101,\\\"x_max\\\":919.0625,\\\"ha\\\":1015,\\\"o\\\":\\\"m 182 927 l 262 931 q 250 805 253 854 q 247 697 247 757 l 247 457 q 314 136 247 212 q 516 60 381 60 q 733 130 654 60 q 813 336 813 201 l 813 458 l 813 657 q 799 931 813 802 l 859 927 l 919 931 q 905 770 909 863 q 901 600 901 677 l 901 366 q 792 82 901 179 q 491 -15 684 -15 q 211 66 307 -15 q 116 325 116 148 l 116 426 l 116 698 q 112 805 116 757 q 101 931 109 854 l 182 927 m 410 1208 q 462 1186 442 1208 q 483 1133 483 1164 q 460 1081 483 1105 q 410 1058 438 1058 q 356 1080 379 1058 q 334 1133 334 1103 q 356 1185 334 1163 q 410 1208 378 1208 m 650 1208 q 704 1187 682 1208 q 727 1133 727 1166 q 704 1080 727 1103 q 650 1058 681 1058 q 598 1078 620 1058 q 576 1133 576 1099 q 598 1185 576 1163 q 650 1208 620 1208 \\\"},\\\"\\xE0\\\":{\\\"x_min\\\":43,\\\"x_max\\\":655.5,\\\"ha\\\":649,\\\"o\\\":\\\"m 234 -15 q 98 33 153 -15 q 43 162 43 82 q 106 303 43 273 q 303 364 169 333 q 444 448 437 395 q 403 568 444 521 q 288 616 362 616 q 191 587 233 616 q 124 507 149 559 l 95 520 l 104 591 q 202 651 144 631 q 323 672 261 672 q 500 622 444 672 q 557 455 557 573 l 557 133 q 567 69 557 84 q 618 54 577 54 q 655 58 643 54 l 655 26 q 594 5 626 14 q 537 -6 562 -3 q 438 85 453 -6 q 342 10 388 35 q 234 -15 296 -15 m 392 743 l 191 866 q 152 896 170 877 q 133 934 133 915 q 148 970 133 955 q 186 986 163 986 q 222 972 200 986 q 254 945 245 958 l 442 743 l 392 743 m 176 186 q 204 98 176 133 q 284 64 232 64 q 390 107 342 64 q 438 212 438 151 l 438 345 q 239 293 303 319 q 176 186 176 268 \\\"},\\\"\\u03B7\\\":{\\\"x_min\\\":91,\\\"x_max\\\":662,\\\"ha\\\":754,\\\"o\\\":\\\"m 594 -365 q 557 -366 577 -365 q 526 -369 537 -368 q 531 -189 526 -310 q 537 -7 537 -68 l 537 406 q 503 536 537 485 q 391 587 469 587 q 255 508 290 587 q 220 315 220 430 q 222 133 220 259 q 224 1 224 8 l 158 6 l 91 1 l 101 156 l 101 495 q 97 584 101 527 q 93 655 93 640 q 119 650 105 652 q 155 648 134 648 q 185 650 175 648 q 221 655 195 651 l 220 538 q 321 637 265 602 q 452 672 378 672 q 604 603 552 672 q 656 430 656 535 l 656 329 l 656 -186 q 659 -293 656 -227 q 662 -370 662 -359 q 630 -366 645 -368 q 594 -365 614 -365 \\\"}},\\\"cssFontWeight\\\":\\\"normal\\\",\\\"ascender\\\":1267,\\\"underlinePosition\\\":-133,\\\"cssFontStyle\\\":\\\"normal\\\",\\\"boundingBox\\\":{\\\"yMin\\\":-373.75,\\\"xMin\\\":-71,\\\"yMax\\\":1267,\\\"xMax\\\":1511},\\\"resolution\\\":1000,\\\"original_font_information\\\":{\\\"postscript_name\\\":\\\"Optimer-Regular\\\",\\\"version_string\\\":\\\"Version 1.00 2004 initial release\\\",\\\"vendor_url\\\":\\\"http://www.magenta.gr/\\\",\\\"full_font_name\\\":\\\"Optimer\\\",\\\"font_family_name\\\":\\\"Optimer\\\",\\\"copyright\\\":\\\"Copyright (c) Magenta Ltd., 2004\\\",\\\"description\\\":\\\"\\\",\\\"trademark\\\":\\\"\\\",\\\"designer\\\":\\\"\\\",\\\"designer_url\\\":\\\"\\\",\\\"unique_font_identifier\\\":\\\"Magenta Ltd.:Optimer:22-10-104\\\",\\\"license_url\\\":\\\"http://www.ellak.gr/fonts/MgOpen/license.html\\\",\\\"license_description\\\":\\\"Copyright (c) 2004 by MAGENTA Ltd. All Rights Reserved.\\\\r\\\\n\\\\r\\\\nPermission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license (\\\\\\\"Fonts\\\\\\\") and associated documentation files (the \\\\\\\"Font Software\\\\\\\"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: \\\\r\\\\n\\\\r\\\\nThe above copyright and this permission notice shall be included in all copies of one or more of the Font Software typefaces.\\\\r\\\\n\\\\r\\\\nThe Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word \\\\\\\"MgOpen\\\\\\\", or if the modifications are accepted for inclusion in the Font Software itself by the each appointed Administrator.\\\\r\\\\n\\\\r\\\\nThis License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the \\\\\\\"MgOpen\\\\\\\" name.\\\\r\\\\n\\\\r\\\\nThe Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. \\\\r\\\\n\\\\r\\\\nTHE FONT SOFTWARE IS PROVIDED \\\\\\\"AS IS\\\\\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL MAGENTA OR PERSONS OR BODIES IN CHARGE OF ADMINISTRATION AND MAINTENANCE OF THE FONT SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.\\\",\\\"manufacturer_name\\\":\\\"Magenta Ltd.\\\",\\\"font_sub_family_name\\\":\\\"Regular\\\"},\\\"descender\\\":-374,\\\"familyName\\\":\\\"Optimer\\\",\\\"lineHeight\\\":1640,\\\"underlineThickness\\\":20}\";\nvar font = new THREE.Font(JSON.parse(fontJS));\nvar matText = new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 0, 0)\n});\n\nvar OBBHelper = /*#__PURE__*/function (_THREE$Box3Helper) {\n _inherits(OBBHelper, _THREE$Box3Helper);\n\n var _super = _createSuper(OBBHelper);\n\n function OBBHelper(OBB, text, color) {\n var _this;\n\n _classCallCheck(this, OBBHelper);\n\n color = color || new THREE.Color(Math.random(), Math.random(), Math.random());\n _this = _super.call(this, OBB.box3D, color.getHex());\n _this.obb = OBB;\n _this.material.linewidth = 2;\n _this.frustumCulled = false;\n _this.matrixAutoUpdate = false;\n _this.rotationAutoUpdate = false;\n\n if (text) {\n var geometryText = new THREE.TextGeometry(text, {\n font: font,\n curveSegments: 1\n });\n _this.textMesh = new THREE.Mesh(geometryText, matText);\n\n _this.textMesh.rotateZ(Math.PI * 0.5);\n\n _this.textMesh.scale.set(0.001, 0.001, 0.001);\n\n _this.textMesh.position.set(0.9, 0.5, 1);\n\n _this.textMesh.frustumCulled = false;\n\n _this.add(_this.textMesh);\n }\n\n _this.updateMatrixWorld(true);\n\n return _this;\n }\n\n _createClass(OBBHelper, [{\n key: \"removeChildren\",\n value: function removeChildren() {\n this.material.dispose();\n this.geometry.dispose();\n\n if (this.textMesh) {\n if (Array.isArray(this.textMesh.material)) {\n var _iterator = _createForOfIteratorHelper(this.textMesh.material),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var material = _step.value;\n material.dispose();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n this.textMesh.material.dispose();\n }\n\n this.textMesh.geometry.dispose();\n delete this.textMesh;\n }\n }\n }, {\n key: \"updateMatrixWorld\",\n value: function updateMatrixWorld() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.obb.box3D.isEmpty()) {\n return;\n }\n\n this.quaternion.copy(this.obb.quaternion);\n this.obb.box3D.getCenter(this.position).applyQuaternion(this.quaternion).add(this.obb.position);\n this.obb.box3D.getSize(this.scale);\n this.scale.multiplyScalar(0.5);\n this.updateMatrix();\n THREE.Object3D.prototype.updateMatrixWorld.call(this, force);\n }\n }]);\n\n return OBBHelper;\n}(THREE.Box3Helper);\n\nexport default OBBHelper;","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { CameraHelper, Color, Vector3 } from 'three';\nimport Coordinates from \"../../src/Core/Geographic/Coordinates\";\nimport { MAIN_LOOP_EVENTS } from \"../../src/Core/MainLoop\";\nimport OBB from \"../../src/Renderer/OBB\";\nimport * as THREE from 'three';\nimport ThreeStatsChart from \"./charts/ThreeStatsChart\";\nimport { backgroundChartDiv, color_blue } from \"./charts/ChartConfig\";\nimport OBBHelper from \"./OBBHelper\";\n/**\n * Create a debug instance attached to an itowns instance\n *\n * @Constructor\n * @param {Scene} scene the itowns Scene\n * @return {Debug} a debug instance\n */\n// disabling eslint errors as it is the exported constructor\n\nfunction Debug(view, datDebugTool, chartDivContainer) {\n var _this = this;\n\n // CHARTS\n // Create default charts div if missing\n if (!chartDivContainer) {\n chartDivContainer = document.createElement('div');\n chartDivContainer.id = 'chart-div';\n chartDivContainer.style.cssText = \"z-index: 10; position: absolute; bottom: 0; left: 0; width: 100vw; height: 30%; background-color: \".concat(backgroundChartDiv, \"; display: none\");\n document.body.appendChild(chartDivContainer);\n }\n\n this.chartDivContainer = chartDivContainer;\n var canvas = this.createChartContainer('three-info');\n var ctx = canvas.getContext('2d');\n this.charts = [];\n this.charts.push(new ThreeStatsChart(ctx, view.mainLoop.gfxEngine.renderer));\n var charts = this.charts;\n var tileLayer = view.tileLayer;\n var initialPosition = new Coordinates(view.referenceCrs, 0.0, 0.0, 0.0);\n var geoPosition = new Coordinates('EPSG:4326', 0.0, 0.0, 0.0);\n\n function debugChartUpdate(updateDuration) {\n var displayed = chartDivContainer.style.display != 'none';\n charts.forEach(function (c) {\n return c.update(displayed, updateDuration);\n });\n } // DEBUG CONTROLS\n\n\n var gui = datDebugTool.addFolder('Debug Tools');\n var state = {\n displayCharts: false,\n eventsDebug: false,\n debugCameraWindow: false,\n freeze: false\n };\n var before;\n\n var startChart = function () {\n before = Date.now();\n };\n\n var endChart = function () {\n var duration = Date.now() - before; // debug graphs update\n\n debugChartUpdate(duration);\n }; // charts\n\n\n gui.add(state, 'displayCharts').name('Display charts').onChange(function (newValue) {\n if (newValue) {\n view.addFrameRequester(MAIN_LOOP_EVENTS.UPDATE_START, startChart);\n view.addFrameRequester(MAIN_LOOP_EVENTS.UPDATE_END, endChart);\n chartDivContainer.style.display = 'flex';\n } else {\n view.removeFrameRequester(MAIN_LOOP_EVENTS.UPDATE_START, startChart);\n view.removeFrameRequester(MAIN_LOOP_EVENTS.UPDATE_END, endChart);\n chartDivContainer.style.display = 'none';\n }\n\n _this.updateChartDivSize();\n\n view.notifyChange();\n });\n gui.add(state, 'debugCameraWindow').name('debug Camera').onChange(function (value) {\n if (value) {\n view.addFrameRequester(MAIN_LOOP_EVENTS.AFTER_RENDER, renderCameraDebug);\n } else {\n view.removeFrameRequester(MAIN_LOOP_EVENTS.AFTER_RENDER, renderCameraDebug);\n }\n\n view.notifyChange();\n });\n gui.add(state, 'freeze').name('freeze update').onChange(function (newValue) {\n tileLayer.frozen = newValue;\n view.notifyChange();\n }); // camera-target-updated event\n\n var LatController;\n var LongController;\n var eventFolder;\n var controls = view.controls;\n initialPosition.crs = view.referenceCrs;\n var cursorWorldPosition = new THREE.Vector3();\n var getCenter = controls && controls.getCameraTargetPosition ? controls.getCameraTargetPosition : function () {\n return view.camera.camera3D.position;\n };\n\n var cameraTargetListener = function (event) {\n if (view.getPickingPositionFromDepth(view.eventToViewCoords(event), cursorWorldPosition)) {\n initialPosition.setFromVector3(cursorWorldPosition).as('EPSG:4326', geoPosition);\n state.latitude = \"\".concat(geoPosition.y.toFixed(6));\n state.longitude = \"\".concat(geoPosition.x.toFixed(6));\n } else {\n state.latitude = '---------';\n state.longitude = '---------';\n }\n\n LatController.updateDisplay();\n LongController.updateDisplay();\n };\n\n gui.add(state, 'eventsDebug').name('Debug event').onChange(function () {\n return function (newValue) {\n if (newValue) {\n eventFolder = gui.addFolder('Events');\n eventFolder.open();\n initialPosition.setFromVector3(getCenter()).as('EPSG:4326', geoPosition);\n state.latitude = \"\".concat(geoPosition.y.toFixed(6));\n state.longitude = \"\".concat(geoPosition.x.toFixed(6));\n LatController = eventFolder.add(state, 'latitude');\n LongController = eventFolder.add(state, 'longitude');\n view.domElement.addEventListener('mousemove', cameraTargetListener);\n } else {\n view.domElement.removeEventListener('mousemove', cameraTargetListener);\n gui.removeFolder('Events');\n }\n };\n }()); // Camera debug\n\n var helper = new CameraHelper(view.camera.camera3D);\n var debugCamera = view.camera.camera3D.clone();\n debugCamera.fov *= 1.5;\n debugCamera.updateProjectionMatrix();\n var g = view.mainLoop.gfxEngine;\n var r = g.renderer;\n var fogDistance = 10e10;\n var layerAtmosphere = view.getLayerById('atmosphere');\n\n if (layerAtmosphere) {\n fogDistance = layerAtmosphere.fog.distance;\n }\n\n helper.visible = false;\n view.scene.add(helper); // Displayed tiles boundind box\n\n var displayedTilesObb = new OBB();\n var displayedTilesObbHelper = new OBBHelper(displayedTilesObb, '', new Color(color_blue));\n displayedTilesObbHelper.visible = false;\n view.scene.add(displayedTilesObb);\n view.scene.add(displayedTilesObbHelper);\n\n function updateFogDistance(obj) {\n if (obj.material && fogDistance) {\n obj.material.fogDistance = fogDistance;\n }\n }\n\n var clearColor = new Color();\n var lookAtCameraDebug = new Vector3();\n\n function renderCameraDebug() {\n if (state.debugCameraWindow && debugCamera) {\n var ratio = 0.25;\n var size = {\n x: g.width * ratio,\n y: g.height * ratio\n };\n debugCamera.aspect = size.x / size.y;\n var camera = view.camera.camera3D;\n var coord = new Coordinates(view.referenceCrs, camera.position).as(tileLayer.extent.crs);\n var extent = view.tileLayer.info.displayed.extent;\n displayedTilesObb.setFromExtent(extent);\n displayedTilesObbHelper.visible = true;\n displayedTilesObbHelper.updateMatrixWorld(true); // Note Method to compute near and far...\n // const bbox = displayedTilesObb.box3D.clone().applyMatrix4(displayedTilesObb.matrixWorld);\n // const distance = bbox.distanceToPoint(view.camera.camera3D.position);\n // console.log('distance', distance, distance + bbox.getBoundingSphere(sphere).radius * 2);\n // Compute position camera debug\n\n var altitudeCameraDebug = 1.5 * coord.z;\n coord.z = altitudeCameraDebug;\n coord.as(view.referenceCrs).toVector3(debugCamera.position); // Compute recoil camera\n\n camera.worldToLocal(debugCamera.position);\n debugCamera.position.z += altitudeCameraDebug;\n camera.localToWorld(debugCamera.position); // Compute target camera debug\n\n lookAtCameraDebug.copy(view.camera.camera3D.position);\n camera.worldToLocal(lookAtCameraDebug);\n lookAtCameraDebug.z -= altitudeCameraDebug * 1.5;\n camera.localToWorld(lookAtCameraDebug);\n debugCamera.lookAt(lookAtCameraDebug);\n helper.update();\n debugCamera.updateProjectionMatrix();\n\n if (layerAtmosphere) {\n layerAtmosphere.object3d.visible = false;\n fogDistance = 10e10;\n\n var _iterator = _createForOfIteratorHelper(tileLayer.level0Nodes),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var obj = _step.value;\n obj.traverseVisible(updateFogDistance);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var deltaY = state.displayCharts ? Math.round(parseFloat(chartDivContainer.style.height.replace('%', '')) * g.height / 100) + 3 : 0;\n helper.visible = true;\n helper.updateMatrixWorld(true);\n r.getClearColor(clearColor);\n r.setViewport(g.width - size.x, deltaY, size.x, size.y);\n r.setScissor(g.width - size.x, deltaY, size.x, size.y);\n r.setScissorTest(true);\n r.setClearColor(backgroundChartDiv);\n r.clear();\n r.render(view.scene, debugCamera);\n r.setScissorTest(false);\n r.setClearColor(clearColor);\n r.setViewport(0, 0, g.width, g.height);\n helper.visible = false;\n displayedTilesObbHelper.visible = false;\n\n if (layerAtmosphere) {\n layerAtmosphere.object3d.visible = true;\n }\n\n if (layerAtmosphere) {\n fogDistance = layerAtmosphere.fog.distance;\n\n var _iterator2 = _createForOfIteratorHelper(tileLayer.level0Nodes),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _obj = _step2.value;\n\n _obj.traverseVisible(updateFogDistance);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n }\n }\n}\n\nDebug.prototype.createChartContainer = function (chartId) {\n var div = document.createElement('div');\n div.style.cssText = \"background-color: \".concat(backgroundChartDiv, \"; flex: auto;\");\n this.chartDivContainer.appendChild(div);\n var chartCanvas = document.createElement('canvas');\n chartCanvas.height = '20rem';\n chartCanvas.id = chartId;\n div.appendChild(chartCanvas);\n return chartCanvas;\n};\n\nDebug.prototype.updateChartDivSize = function () {\n var count = 0;\n\n var _iterator3 = _createForOfIteratorHelper(this.chartDivContainer.getElementsByTagName('div')),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var div = _step3.value;\n\n if (div.style.display !== 'none') {\n count++;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var size = Math.floor(100 / count);\n\n var _iterator4 = _createForOfIteratorHelper(this.chartDivContainer.getElementsByTagName('div')),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _div = _step4.value;\n\n if (_div.style.display !== 'none') {\n _div.style.width = \"\".concat(size, \"%\");\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n this.charts.forEach(function (c) {\n c.resize();\n c.update();\n });\n};\n\nexport default Debug;","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { MODE } from \"../../src/Renderer/PointsMaterial\";\nexport default {\n initTools: function initTools(view, layer, datUi) {\n var update = function () {\n return view.notifyChange(layer, true);\n };\n\n layer.debugUI = datUi.addFolder(\"\".concat(layer.id));\n layer.debugUI.add(layer, 'visible').name('Visible').onChange(update);\n layer.debugUI.add(layer, 'sseThreshold').name('SSE threshold').onChange(update);\n layer.debugUI.add(layer, 'octreeDepthLimit', -1, 20).name('Depth limit').onChange(update);\n layer.debugUI.add(layer, 'pointBudget', 1, 15000000).name('Max point count').onChange(update);\n layer.debugUI.add(layer.object3d.position, 'z', -50, 50).name('Z translation').onChange(function () {\n layer.object3d.updateMatrixWorld();\n view.notifyChange(layer);\n });\n layer.dbgStickyNode = '';\n layer.dbgDisplaySticky = false;\n layer.dbgDisplayChildren = true;\n layer.dbgDisplayParents = true;\n var styleUI = layer.debugUI.addFolder('Styling');\n\n if (layer.material.mode != undefined) {\n styleUI.add(layer.material, 'mode', MODE).name('Display mode').onChange(update);\n styleUI.add(layer, 'maxIntensityRange', 0, 1).name('Intensity max').onChange(update);\n }\n\n styleUI.add(layer, 'opacity', 0, 1).name('Layer Opacity').onChange(update);\n styleUI.add(layer, 'pointSize', 0, 15).name('Point Size').onChange(update);\n\n if (layer.material.picking != undefined) {\n styleUI.add(layer.material, 'picking').name('Display picking id').onChange(update);\n } // UI\n\n\n var debugUI = layer.debugUI.addFolder('Debug');\n debugUI.add(layer.bboxes, 'visible').name('Display Bounding Boxes').onChange(update);\n debugUI.add(layer, 'dbgStickyNode').name('Sticky node name').onChange(update);\n debugUI.add(layer, 'dbgDisplaySticky').name('Display sticky node').onChange(update);\n debugUI.add(layer, 'dbgDisplayChildren').name('Display children of sticky node').onChange(update);\n debugUI.add(layer, 'dbgDisplayParents').name('Display parents of sticky node').onChange(update);\n\n var isInHierarchy = function (name1, name2) {\n return layer.dbgDisplaySticky && name1 === name2 || layer.dbgDisplayParents && name1.startsWith(name2) || layer.dbgDisplayChildren && name2.startsWith(name1);\n };\n\n view.addFrameRequester('before_layer_update', function () {\n if (layer.dbgStickyNode.length) {\n layer.displayedCount = 0;\n var stickies = layer.dbgStickyNode.split(',');\n\n var _iterator = _createForOfIteratorHelper(layer.group.children),\n _step;\n\n try {\n var _loop = function () {\n var pts = _step.value;\n pts.visible = stickies.some(function (name) {\n return isInHierarchy(name, pts.owner.name);\n });\n\n if (pts.boxHelper) {\n pts.boxHelper.visible = pts.visible;\n }\n\n if (pts.visible) {\n layer.displayedCount += pts.geometry.attributes.position.count;\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n });\n }\n};","import { Chart } from 'chart.js';\nimport { scales, color_rose, color_blue } from \"./ChartConfig\";\nexport default function TileObjectsChart(ctx, tileLayer) {\n var lastValidCompareIndex = 0;\n var timestamp = Date.now();\n var viewLevelStartDataset = {\n label: 'Update 1st level',\n data: [{\n x: 0,\n y: 0\n }],\n borderColor: color_rose,\n borderWidth: 1.5,\n pointRadius: 1\n };\n var viewUpdateDurationDataset = {\n label: 'Update duration (ms)',\n data: [{\n x: 0,\n y: 0\n }],\n borderColor: color_blue,\n borderWidth: 1.5,\n pointRadius: 1\n };\n var label = ['0s'];\n var nbObjectsChart = new Chart(ctx, {\n type: 'line',\n data: {\n labels: label,\n datasets: [viewLevelStartDataset, viewUpdateDurationDataset]\n },\n options: {\n animation: {\n duration: 10\n },\n scales: scales\n }\n });\n\n this.update = function (displayed, updateDuration) {\n // update line graph\n // update time\n var limit = 60;\n var timeInS = Math.floor((Date.now() - timestamp) / 1000);\n var lbl = \"\".concat(timeInS, \"s\");\n var identical = lastValidCompareIndex > 0 && label[lastValidCompareIndex] == lbl;\n\n if (identical) {\n label.push('');\n } else {\n label.push(lbl);\n lastValidCompareIndex = label.length - 1;\n }\n\n if (label.length > limit) {\n label.shift();\n lastValidCompareIndex--;\n }\n\n viewLevelStartDataset.data.push({\n x: 0,\n y: tileLayer._latestUpdateStartingLevel\n });\n viewUpdateDurationDataset.data.push({\n x: 0,\n y: updateDuration\n });\n\n if (viewLevelStartDataset.data.length > limit) {\n viewLevelStartDataset.data.shift();\n viewUpdateDurationDataset.data.shift();\n }\n\n if (displayed) {\n nbObjectsChart.update();\n }\n };\n\n this.resize = function () {\n nbObjectsChart.resize();\n };\n}","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { Chart } from 'chart.js';\nimport { scales, color_rose, color_blue } from \"./ChartConfig\";\nexport default function TileVisibilityChart(ctx, tileLayer) {\n var nbVisibleLabels = [];\n var nbVisibleData = [];\n var nbDisplayedData = [];\n var nbVisibleChart = new Chart(ctx, {\n type: 'bar',\n data: {\n labels: nbVisibleLabels,\n datasets: [{\n label: 'Visible node per level',\n data: nbVisibleData,\n backgroundColor: color_rose\n }, {\n label: 'Diplayed node per level',\n data: nbDisplayedData,\n backgroundColor: color_blue\n }]\n },\n options: {\n scales: scales\n }\n });\n\n this.update = function (displayed) {\n function countVisible(node, stats) {\n if (!node || !node.visible) {\n return;\n }\n\n if (node.level >= 0 && node.layer === tileLayer) {\n if (stats[node.level]) {\n stats[node.level][0] += 1;\n } else {\n stats[node.level] = [1, 0];\n }\n\n if (node.material.visible) {\n stats[node.level][1] += 1;\n }\n }\n\n if (node.children) {\n var _iterator = _createForOfIteratorHelper(node.children),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var child = _step.value;\n countVisible(child, stats);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n } // update bar graph\n\n\n var stats = {};\n countVisible(tileLayer.object3d, stats);\n nbVisibleLabels.length = 0;\n nbVisibleData.length = 0;\n\n for (var level in stats) {\n if ({}.hasOwnProperty.call(stats, level)) {\n nbVisibleLabels[level] = \"\".concat(level);\n nbVisibleData[level] = stats[level][0];\n nbDisplayedData[level] = stats[level][1];\n }\n }\n\n if (displayed) {\n nbVisibleChart.update();\n }\n };\n\n this.resize = function () {\n nbVisibleChart.resize();\n };\n}","// TODO: move to GeometryLayer\nfunction addMaterialLayerProperty(layer, key, value) {\n layer.defineLayerProperty(key, value, function () {\n var root = layer.parent ? layer.parent.object3d : layer.object3d;\n root.traverse(function (object) {\n if (object.layer == layer && object.material) {\n object.material[key] = layer[key];\n } else if (object.content && object.content.layer == layer) {\n object.content.traverse(function (o) {\n if (o.material) {\n o.material[key] = layer[key];\n }\n });\n }\n });\n });\n}\n\nexport default {\n addWireFrameCheckbox: function addWireFrameCheckbox(gui, view, layer) {\n gui.add(layer, 'wireframe').name('Wireframe').onChange(function () {\n return view.notifyChange(layer);\n });\n },\n addMaterialSize: function addMaterialSize(gui, view, layer, begin, end) {\n addMaterialLayerProperty(layer, 'size', 1);\n gui.add(layer, 'size', begin, end).name('Size').onChange(function () {\n return view.notifyChange(layer);\n });\n },\n addMaterialLineWidth: function addMaterialLineWidth(gui, view, layer, begin, end) {\n addMaterialLayerProperty(layer, 'linewidth', 1);\n gui.add(layer, 'linewidth', begin, end).name('Line Width').onChange(function () {\n return view.notifyChange(layer);\n });\n },\n createGeometryDebugUI: function createGeometryDebugUI(datDebugTool, view, layer) {\n var gui = datDebugTool.addFolder(\"Layer \".concat(layer.id));\n gui.add(layer, 'visible').name('Visible').onChange(function () {\n return view.notifyChange(layer);\n });\n gui.add(layer, 'opacity', 0, 1).name('Opacity').onChange(function () {\n return view.notifyChange(layer);\n });\n return gui;\n }\n};","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport * as THREE from 'three';\nimport TWEEN from '@tweenjs/tween.js';\nimport View from \"../../src/Core/View\";\nimport GeometryLayer from \"../../src/Layer/GeometryLayer\";\nimport { MAIN_LOOP_EVENTS } from \"../../src/Core/MainLoop\";\nimport ObjectRemovalHelper from \"../../src/Process/ObjectRemovalHelper\";\nimport TileObjectChart from \"./charts/TileObjectChart\";\nimport TileVisibilityChart from \"./charts/TileVisibilityChart\";\nimport GeometryDebug from \"./GeometryDebug\";\nimport Debug from \"./Debug\";\nimport OBBHelper from \"./OBBHelper\";\n\nfunction applyToNodeFirstMaterial(view, root, layer, cb) {\n root.traverse(function (object) {\n if (object.material && object.layer === layer) {\n cb(object.material);\n }\n });\n view.notifyChange();\n}\n\nvar selectedNode;\n/**\n * Select tile\n *\n * @param {View} view\n * @param {Object} mouseOrEvt - mouse position in window coordinates (0, 0 = top-left)\n * or MouseEvent or TouchEvent.\n * @param {boolean} [showInfo=true] Show tile information in console.\n * @return {TileMesh} Selected tile.\n */\n\nfunction selectTileAt(view, mouseOrEvt) {\n var showInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (selectedNode) {\n selectedNode.material.overlayAlpha = 0;\n selectedNode.material.showOutline = view.tileLayer.showOutline;\n view.notifyChange(selectedNode);\n }\n\n var picked = view.tileLayer.pickObjectsAt(view, mouseOrEvt);\n selectedNode = picked.length ? picked[0].object : undefined;\n\n if (selectedNode) {\n if (showInfo) {\n // eslint-disable-next-line no-console\n console.info(selectedNode);\n }\n\n selectedNode.material.overlayAlpha = 0.5;\n selectedNode.material.showOutline = true;\n view.notifyChange(selectedNode);\n }\n\n return selectedNode;\n}\n\nexport default function createTileDebugUI(datDebugTool, view, layer, debugInstance) {\n var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (!view.isDebugMode && !force) {\n return;\n }\n\n debugInstance = debugInstance || new Debug(view, datDebugTool);\n layer = layer || view.tileLayer;\n var gui = GeometryDebug.createGeometryDebugUI(datDebugTool, view, layer);\n var objectChardId = \"\".concat(layer.id, \"-nb-objects\");\n var canvasObjectChardId = debugInstance.createChartContainer(objectChardId);\n var visibleChardId = \"\".concat(layer.id, \"-nb-visible\");\n var canvasVisibleChardId = debugInstance.createChartContainer(visibleChardId);\n debugInstance.charts.push(new TileObjectChart(canvasObjectChardId.getContext('2d'), layer));\n debugInstance.charts.push(new TileVisibilityChart(canvasVisibleChardId.getContext('2d'), layer));\n layer.showOutline = false;\n layer.wireframe = false;\n var state = {\n objectChart: true,\n visibilityChart: true,\n sseHelper: false\n }; // tiles outline\n\n gui.add(layer, 'showOutline').name('Show tiles').onChange(function (newValue) {\n layer.showOutline = newValue;\n applyToNodeFirstMaterial(view, layer.object3d, layer, function (material) {\n material.showOutline = newValue;\n });\n }); // tiles wireframe\n\n gui.add(layer, 'wireframe').name('Wireframe').onChange(function () {\n view.notifyChange(layer);\n }); // TileObjectChart visibility\n\n gui.add(state, 'objectChart').name('Object chart').onChange(function (newValue) {\n if (newValue) {\n document.getElementById(objectChardId).parentNode.style.display = 'block';\n } else {\n document.getElementById(objectChardId).parentNode.style.display = 'none';\n }\n\n debugInstance.updateChartDivSize();\n debugInstance.charts.forEach(function (c) {\n return c.update();\n });\n }); // TileVisibilityChart visibility\n\n gui.add(state, 'visibilityChart').name('Visibility chart').onChange(function (newValue) {\n if (newValue) {\n document.getElementById(visibleChardId).parentNode.style.display = 'block';\n } else {\n document.getElementById(visibleChardId).parentNode.style.display = 'none';\n }\n\n debugInstance.updateChartDivSize();\n debugInstance.charts.forEach(function (c) {\n return c.update();\n });\n }); // Bounding box control\n\n var obb_layer_id = \"\".concat(layer.id, \"_obb_debug\");\n var sb_layer_id = \"\".concat(layer.id, \"_sb_debug\");\n var geometrySphere = new THREE.SphereGeometry(1, 16, 16);\n\n function debugIdUpdate(context, layer, node) {\n var enabled = context.camera.camera3D.layers.test({\n mask: 1 << layer.threejsLayer\n });\n\n if (!node.parent || !enabled) {\n ObjectRemovalHelper.removeChildrenAndCleanupRecursively(layer, node);\n return;\n }\n\n var helper = node.children.filter(function (n) {\n return n.layer && n.layer.id == layer.id;\n })[0];\n\n if (node.material && node.material.visible) {\n if (!helper) {\n // add the ability to hide all the debug obj for one layer at once\n var l = context.view.getLayerById(layer.id);\n var l3js = l.threejsLayer;\n\n if (layer.id == obb_layer_id) {\n helper = new OBBHelper(node.obb, \"id:\".concat(node.id));\n\n if (helper.children[0]) {\n helper.children[0].layers.set(l3js);\n }\n } else if (layer.id == sb_layer_id) {\n var color = new THREE.Color(Math.random(), Math.random(), Math.random());\n var material = new THREE.MeshBasicMaterial({\n color: color.getHex(),\n wireframe: true\n });\n helper = new THREE.Mesh(geometrySphere, material);\n helper.position.copy(node.boundingSphere.center);\n helper.scale.multiplyScalar(node.boundingSphere.radius);\n }\n\n helper.layers.set(l3js);\n helper.layer = layer;\n node.add(helper);\n helper.updateMatrixWorld(true); // if we don't do that, our OBBHelper will never get removed,\n // because once a node is invisible, children are not removed\n // any more\n\n var hiddenHandler = node.material.addEventListener('hidden', function () {\n node.material.removeEventListener(hiddenHandler);\n var i = node.children.length;\n\n while (i--) {\n var c = node.children[i];\n\n if (c.layer === sb_layer_id) {\n if (c.dispose) {\n c.dispose();\n } else if (Array.isArray(c.material)) {\n var _iterator = _createForOfIteratorHelper(c.material),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _material = _step.value;\n\n _material.dispose();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n c.material.dispose();\n }\n\n node.children.splice(i, 1);\n }\n }\n });\n }\n\n if (layer.id == sb_layer_id) {\n helper.position.copy(node.boundingSphere.center);\n helper.scale.set(1, 1, 1).multiplyScalar(node.boundingSphere.radius);\n }\n\n helper.updateMatrixWorld(true);\n helper.visible = true;\n } else if (helper) {\n helper.visible = false;\n }\n }\n\n var obbLayer = new GeometryLayer(obb_layer_id, new THREE.Object3D(), {\n update: debugIdUpdate,\n visible: false,\n cacheLifeTime: Infinity,\n source: false\n });\n View.prototype.addLayer.call(view, obbLayer, layer).then(function (l) {\n gui.add(l, 'visible').name('Bounding boxes').onChange(function () {\n view.notifyChange(l);\n });\n });\n var sbLayer = new GeometryLayer(sb_layer_id, new THREE.Object3D(), {\n update: debugIdUpdate,\n visible: false,\n cacheLifeTime: Infinity,\n source: false\n });\n View.prototype.addLayer.call(view, sbLayer, layer).then(function (l) {\n gui.add(l, 'visible').name('Bounding Spheres').onChange(function () {\n view.notifyChange(l);\n });\n });\n var viewerDiv = document.getElementById('viewerDiv');\n var circle = document.createElement('span');\n circle.className = 'circleBase';\n viewerDiv.appendChild(circle);\n var centerNode = new THREE.Vector3();\n var actualNode;\n\n var animationFrameRequester = function () {\n TWEEN.update();\n view.notifyChange();\n };\n\n var removeAnimationRequester = function () {\n TWEEN.removeAll();\n\n if (view._frameRequesters[MAIN_LOOP_EVENTS.BEFORE_RENDER].includes(animationFrameRequester)) {\n view.removeFrameRequester(MAIN_LOOP_EVENTS.BEFORE_RENDER, animationFrameRequester);\n }\n };\n\n function picking(event) {\n var selectNode = selectTileAt(view, event, false);\n\n if (selectNode) {\n circle.style.display = 'table-cell';\n centerNode.copy(selectNode.boundingSphere.center).applyMatrix4(selectNode.matrixWorld);\n var project = centerNode.project(view.camera.camera3D);\n var coords = view.normalizedToViewCoords(project);\n var size = selectNode.screenSize;\n\n if (actualNode != selectNode) {\n var actualSize = Number(circle.style.width.replace('px', ''));\n actualNode = selectNode;\n removeAnimationRequester();\n new TWEEN.Tween({\n size: actualSize\n }).to({\n size: size\n }, 500).easing(TWEEN.Easing.Sinusoidal.In).easing(TWEEN.Easing.Exponential.Out).onUpdate(function (object) {\n circle.style['line-height'] = \"\".concat(object.size, \"px\");\n circle.style.width = \"\".concat(object.size, \"px\");\n circle.style.height = \"\".concat(object.size, \"px\");\n circle.innerHTML = \"\".concat(Math.floor(object.size), \" px\");\n circle.style.left = \"\".concat(coords.x - object.size * 0.5, \"px\");\n circle.style.top = \"\".concat(coords.y - object.size * 0.5, \"px\");\n }).onComplete(removeAnimationRequester).start();\n view.addFrameRequester(MAIN_LOOP_EVENTS.BEFORE_RENDER, animationFrameRequester);\n }\n } else {\n circle.style.display = 'none';\n }\n }\n\n gui.add(state, 'sseHelper').name('Sse helper').onChange(function (v) {\n if (v) {\n window.addEventListener('mousemove', picking, false);\n } else {\n circle.style.display = 'none';\n removeAnimationRequester();\n window.removeEventListener('mousemove', picking);\n }\n });\n var currKey = null;\n window.addEventListener('mousedown', function (event) {\n if (currKey == 83) {\n selectTileAt(view, event);\n }\n });\n window.addEventListener('keydown', function (event) {\n currKey = event.which;\n });\n window.addEventListener('keyup', function () {\n currKey = null;\n });\n}","import * as THREE from 'three';\nimport View from \"../../src/Core/View\";\nimport GeometryLayer from \"../../src/Layer/GeometryLayer\";\nimport GeometryDebug from \"./GeometryDebug\";\nimport OBBHelper from \"./OBBHelper\";\nvar bboxMesh = new THREE.Mesh();\nexport default function create3dTilesDebugUI(datDebugTool, view, _3dTileslayer) {\n var gui = GeometryDebug.createGeometryDebugUI(datDebugTool, view, _3dTileslayer);\n var regionBoundingBoxParent = new THREE.Group();\n view.scene.add(regionBoundingBoxParent); // add wireframe\n\n GeometryDebug.addWireFrameCheckbox(gui, view, _3dTileslayer); // Bounding box control\n\n var obb_layer_id = \"\".concat(_3dTileslayer.id, \"_obb_debug\");\n var obbLayer = new GeometryLayer(obb_layer_id, new THREE.Object3D(), {\n update: function (context, layer, node) {\n var enabled = context.camera.camera3D.layers.test({\n mask: 1 << layer.threejsLayer\n });\n\n if (!enabled) {\n return;\n }\n\n var metadata = node.userData.metadata;\n var helper = node.userData.obb;\n\n if (node.visible && metadata.boundingVolume) {\n if (!helper) {\n // 3dtiles with region\n if (metadata.boundingVolume.region) {\n helper = new OBBHelper(metadata.boundingVolume.region, \"id:\".concat(node.id));\n regionBoundingBoxParent.add(helper);\n helper.updateMatrixWorld(true); // 3dtiles with box\n } else if (metadata.boundingVolume.box) {\n bboxMesh.geometry.boundingBox = metadata.boundingVolume.box;\n helper = new THREE.BoxHelper(bboxMesh);\n helper.material.linewidth = 2; // 3dtiles with Sphere\n } else if (metadata.boundingVolume.sphere) {\n var geometry = new THREE.SphereGeometry(metadata.boundingVolume.sphere.radius, 32, 32);\n var material = new THREE.MeshBasicMaterial({\n wireframe: true\n });\n helper = new THREE.Mesh(geometry, material);\n helper.position.copy(metadata.boundingVolume.sphere.center);\n }\n\n if (helper) {\n helper.layer = layer; // add the ability to hide all the debug obj for one layer at once\n\n var l3js = layer.threejsLayer;\n helper.layers.set(l3js);\n\n if (helper.children.length) {\n helper.children[0].layers.set(l3js);\n }\n\n node.userData.obb = helper;\n helper.updateMatrixWorld();\n }\n\n if (helper && !metadata.boundingVolume.region) {\n // compensate B3dm orientation correction\n var gltfUpAxis = _3dTileslayer.tileset.asset.gltfUpAxis;\n\n if (gltfUpAxis === undefined || gltfUpAxis === 'Y') {\n helper.rotation.x = -Math.PI * 0.5;\n } else if (gltfUpAxis === 'X') {\n helper.rotation.z = -Math.PI * 0.5;\n } // Add helper to parent to apply the correct transformation\n\n\n node.parent.add(helper);\n helper.updateMatrix();\n helper.updateMatrixWorld(true);\n }\n }\n\n if (helper) {\n helper.visible = true;\n\n if (typeof helper.setMaterialVisibility === 'function') {\n helper.setMaterialVisibility(true);\n }\n }\n } else if (helper) {\n helper.visible = false;\n\n if (typeof helper.setMaterialVisibility === 'function') {\n helper.setMaterialVisibility(false);\n }\n }\n },\n visible: false,\n cacheLifeTime: Infinity,\n source: false\n });\n View.prototype.addLayer.call(view, obbLayer, _3dTileslayer).then(function (l) {\n gui.add(l, 'visible').name('Bounding boxes').onChange(function () {\n view.notifyChange(view.camera.camera3D);\n });\n }); // The sse Threshold for each tile\n\n gui.add(_3dTileslayer, 'sseThreshold', 0, 100).name('sseThreshold').onChange(function () {\n view.notifyChange(view.camera.camera3D);\n });\n}"],"names":["root","factory","exports","module","define","amd","self","requestAnimFrame","window","callback","requestAnimationFrame","throttled","fn","thisArg","updateFn","updateArgs","args","Array","prototype","slice","call","ticking","rest","apply","_alignStartEnd","align","start","end","uid","id","isNullOrUndef","value","isArray","type","Object","toString","substr","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","dimension","endsWith","parseFloat","each","loopable","reverse","i","len","keys","length","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","index","clone$1","source","map","target","create","klen","k","isValidKey","key","indexOf","_merger","options","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","indexOfDotOrLength","idx","resolveObjectKey","obj","pos","_capitalize","str","charAt","toUpperCase","defined","isFunction","PI","Math","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","round","almostEquals","niceRange","pow","floor","fraction","isNumber","n","isNaN","x","y","epsilon","abs","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","e","p","distanceBetweenPoints","pt1","pt2","sqrt","_angleDiff","a","b","_normalizeAngle","_angleBetween","angle","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","atEdge","t","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","m","d","easeInOutBounce","A","B","C","D","E","F","c","f","hex","h1","h2","eq","v","lim","l","h","p2b","n2b","b2n","n2p","RGB_RE","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","r","g","calln","hsl2rgb","hue","map$1","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names$1","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","functionParse","exec","rgbParse","p1","p2","hwb2rgb","hsv2rgb","hueParse","Color","constructor","ret","unpacked","tkeys","j","ok","nk","replace","parseInt","unpack","transparent","toLowerCase","nameParse","this","_rgb","_valid","rgbString","hexString","isShort","hslString","mix","color","weight","me","c1","c2","w2","w1","alpha","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","index_esm","isPatternOrGradient","CanvasGradient","CanvasPattern","getHoverColor","overrides","descriptors","getScope$1","node","split","set","scope","values","defaults","_descriptors","animation","undefined","backgroundColor","borderColor","datasets","devicePixelRatio","context","chart","platform","getDevicePixelRatio","elements","events","font","family","size","style","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","describe","get","override","route","name","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","enumerable","local","_scriptable","startsWith","_indexable","_fallback","_measureText","data","gc","longest","string","textWidth","measureText","width","push","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","splice","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","point","area","margin","left","right","top","bottom","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","text","opts","lines","strokeWidth","strokeColor","line","translation","fillStyle","textAlign","textBaseline","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","RegExp","FONT_STYLE","toLineHeight","matches","match","_readValueToProps","props","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","console","warn","toFontString","resolve","inputs","info","cacheable","_lookup","table","cmp","mid","hi","lo","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","forEach","_arrayUnique","items","Set","add","from","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","Symbol","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","prefix","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","has","getKeysFromAllScopes","includes","ownKeys","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","isScriptable","Error","join","delete","_resolveScriptable","isIndexable","arr","filter","item","resolver","_resolveArray","_resolveWithContext","allKeys","configurable","scriptable","indexable","_allKeys","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","points","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","d12","s01","s12","fa","fb","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","delta","iPixel","vPixel","monotoneCompute","splineCurveMonotone","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","positions","getPositionedStyle","styles","suffix","result","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","box","native","touches","offsetX","offsetY","shadowRoot","useOffsetPos","getBoundingClientRect","clientX","clientY","getCanvasPosition","round1","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","addEventListener","removeEventListener","readUsedSize","el","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","Map","formatNumber","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","propertyFn","between","compare","normalize","normalizeSegment","count","_boundSegment","segment","bounds","startBound","endBound","getSegment","prevValue","inside","subStart","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","animator","_request","_charts","_running","_lastDate","_notify","anims","date","callbacks","numSteps","duration","initial","currentStep","_refresh","_update","Date","now","remaining","running","draw","_active","_total","tick","pop","_getAnims","charts","complete","progress","listen","event","cb","reduce","acc","cur","_duration","stop","cancel","remove","interpolators","boolean","to","factor","c0","valid","number","Animation","cfg","currentValue","_fn","_easing","easing","_start","delay","_loop","_target","_prop","_from","_to","_promises","active","update","elapsed","remain","wait","promises","Promise","res","rej","resolved","method","animationOptions","colors","properties","numbers","resize","show","animations","visible","hide","Animations","config","_chart","_properties","configure","animatedProps","getOwnPropertyNames","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","all","awaitAll","then","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","shift","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$context","_syncList","initialize","linkScales","_stacked","addElements","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","defineProperty","base","object","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","parse","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","NEGATIVE_INFINITY","otherMin","otherMax","minDefined","maxDefined","getUserBounds","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","disabled","toClip","defaultClip","chartArea","hidden","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","updateElement","updateSharedOptions","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","_onDataUnshift","computeMinSampleSize","_cache","$bar","metas","concat","sort","getAllScaleValues","curr","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","BarController","iAxisKey","vAxisKey","super","bars","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","last","grouped","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","_index_","offset","grid","_value_","beginAtZero","BubbleController","getPixelForDecimal","tooltip","title","DoughnutController","innerRadius","outerRadius","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","aspectRatio","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_dataset","animationsDisabled","pointCount","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","scaleRangesChanged","_datasetIndex","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","display","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","DateAdapter","formats","timestamp","amount","unit","diff","startOf","weekday","endOf","members","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","optimizedEvaluateItems","position","handler","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","distance","getAxisItems","rangeMethod","intersectsItem","evaluateAllVisibleItems","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","params","layout","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","fullSize","setBoxDims","placeBoxes","userPadding","padding","placed","stackWeight","layouts","addBox","_layers","z","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","wrap","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","buildStacks","setLayoutDims","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","getMaximumSize","isAttached","BasicPlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","passive","removeListener","createAttachObserver","observer","MutationObserver","entries","addedNodes","added","observe","childList","subtree","createDetachObserver","container","removedNodes","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","clientWidth","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","fromNativeEvent","addListener","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","bbWidth","bbHeight","margins","containerSize","containerStyle","containerBorder","containerPadding","clientHeight","getContainerSize","isConnected","Element","tooltipPosition","getProps","hasValue","final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","newTicks","majorStart","majorEnd","ceil","grace","drawBorder","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","_toLeftRightCenter","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","init","suggestedMin","suggestedMax","getTicks","xLabels","yLabels","beforeUpdate","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","ticksLimit","maxTicksLimit","_tickSize","maxScale","maxChart","determineMaxTicks","majorIndices","enabled","getMajorIndices","numMajorIndices","first","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","labelPadding","_computeLabelArea","drawBackground","fillRect","findIndex","drawGrid","drawLine","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","titleX","titleY","titleArgs","tz","gz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","routes","propertyParts","sourceName","sourceScope","parts","routeDefaults","registerDefaults","unregister","registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getElement","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","Chart","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","timeout","clearTimeout","setTimeout","debounce","resizeDelay","_initialize","error","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","setsEqual","unbindEvents","_updateLayout","_updateDatasets","_eventHandler","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","_updateHoverStyles","replay","hoverOptions","deactivated","activated","eventFilter","_handleEvent","lastEvent","invalidatePlugins","clipArc","pixelMargin","angleMargin","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","angleDelta","o","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","parseBorderRadius$1","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","version","ArcElement","fullCircles","chartX","chartY","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","atan2","getAngleFromPoint","rAdjust","halfAngle","halfRadius","radiusOffset","drawArc","inner","lineJoin","drawFullCircleBorders","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","segmentOptions","findStartAndEnd","segments","baseStyle","p0","p0DataIndex","p1DataIndex","doSplitByStyles","splitByStyles","solidSegments","_computeSegments","interpolate","sub","_boundSegments","_interpolate","_getInterpolationMethod","interpolated","segmentMethod","path","strokePathWithCache","strokePathDirect","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","outer","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","boundingRects","addRectPath","WeakMap","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","String","createTooltipItem","getTooltipSize","body","footer","boxWidth","boxHeight","bodyFont","titleFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","radiusAndPadding","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","getTitle","beforeTitle","afterTitle","getBeforeBody","getBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","rtlHelper","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","usePointStyle","drawOptions","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","hasTooltipContent","globalAlpha","direction","original","getPropertyPriority","setProperty","prevTextDirection","overrideTextDirection","textDirection","restoreTextDirection","positionChanged","_positionChanged","handleEvent","CategoryScale","_startValue","_valueRange","addIfString","lastIndexOf","findOrAddLabel","relativeLabelSize","minSpacing","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","generateTicks$1","LinearScale","isMajor","tickVal","LogarithmicScale","_zero","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","measureLabelSize","determineLimits","getTextAlignForAngle","yForAngle","pathRadiusLine","labelCount","getPointPosition","param","RadialLinearScale","drawingArea","_pointLabels","_pointLabelItems","furthestLimits","furthestAngles","valueCount","getPointLabelContext","plFont","textSize","hLimits","vLimits","_setReductions","tickBackdropHeight","outerDistance","extra","pointLabelPosition","buildPointLabelItems","fitWithPointLabels","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","time","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","gridLines","zeroLineColor","color_rose","color_blue","backgroundChartDiv","ThreeStatsChart","renderer","lastValidCompareIndex","textureDataset","pointRadius","geometryDataset","displayed","timeInS","lbl","memory","textures","geometries","_arrayLikeToArray","arr2","matText","_THREE$Box3Helper","OBBHelper","Derived","hasNativeReflectConstruct","_super","construct","sham","Boolean","valueOf","_isNativeReflectConstruct","Super","NewTarget","OBB","_this","random","box3D","getHex","obb","material","linewidth","frustumCulled","matrixAutoUpdate","rotationAutoUpdate","geometryText","curveSegments","textMesh","rotateZ","updateMatrixWorld","dispose","geometry","_step","_iterator","allowArrayLike","it","iterator","minLen","test","_unsupportedIterableToArray","done","_e","TypeError","err","normalCompletion","didErr","_e2","_createForOfIteratorHelper","force","isEmpty","quaternion","copy","getCenter","applyQuaternion","getSize","multiplyScalar","updateMatrix","Debug","view","datDebugTool","chartDivContainer","createElement","cssText","appendChild","createChartContainer","mainLoop","gfxEngine","LatController","LongController","eventFolder","tileLayer","initialPosition","Coordinates","referenceCrs","geoPosition","gui","addFolder","state","displayCharts","eventsDebug","debugCameraWindow","startChart","endChart","updateDuration","onChange","newValue","addFrameRequester","removeFrameRequester","updateChartDivSize","notifyChange","renderCameraDebug","frozen","controls","crs","cursorWorldPosition","getCameraTargetPosition","camera","camera3D","cameraTargetListener","getPickingPositionFromDepth","eventToViewCoords","setFromVector3","as","latitude","toFixed","longitude","updateDisplay","open","domElement","removeFolder","helper","CameraHelper","debugCamera","fov","updateProjectionMatrix","fogDistance","layerAtmosphere","getLayerById","fog","scene","displayedTilesObb","displayedTilesObbHelper","updateFogDistance","clearColor","lookAtCameraDebug","Vector3","aspect","coord","extent","setFromExtent","altitudeCameraDebug","toVector3","worldToLocal","localToWorld","lookAt","object3d","level0Nodes","traverseVisible","getClearColor","setViewport","setScissor","setScissorTest","setClearColor","_step2","_iterator2","chartId","div","chartCanvas","_step3","_iterator3","getElementsByTagName","_step4","_iterator4","_div","initTools","layer","datUi","debugUI","dbgStickyNode","dbgDisplaySticky","dbgDisplayChildren","dbgDisplayParents","styleUI","picking","bboxes","displayedCount","stickies","group","children","pts","name1","name2","owner","boxHelper","attributes","TileObjectsChart","viewLevelStartDataset","viewUpdateDurationDataset","nbObjectsChart","_latestUpdateStartingLevel","TileVisibilityChart","nbVisibleLabels","nbVisibleData","nbDisplayedData","nbVisibleChart","stats","level","countVisible","addMaterialLayerProperty","defineLayerProperty","traverse","content","addWireFrameCheckbox","addMaterialSize","begin","addMaterialLineWidth","createGeometryDebugUI","applyToNodeFirstMaterial","selectedNode","selectTileAt","mouseOrEvt","showInfo","overlayAlpha","showOutline","picked","pickObjectsAt","createTileDebugUI","debugInstance","isDebugMode","GeometryDebug","objectChardId","canvasObjectChardId","visibleChardId","canvasVisibleChardId","wireframe","objectChart","visibilityChart","sseHelper","obb_layer_id","sb_layer_id","geometrySphere","obbLayer","GeometryLayer","debugIdUpdate","cacheLifeTime","View","sbLayer","viewerDiv","circle","className","actualNode","centerNode","animationFrameRequester","removeAnimationRequester","_frameRequesters","currKey","which","mask","threejsLayer","l3js","boundingSphere","hiddenHandler","ObjectRemovalHelper","selectNode","applyMatrix4","matrixWorld","project","coords","normalizedToViewCoords","screenSize","actualSize","onUpdate","innerHTML","bboxMesh","create3dTilesDebugUI","_3dTileslayer","regionBoundingBoxParent","metadata","userData","boundingVolume","region","boundingBox","sphere","gltfUpAxis","tileset","asset","setMaterialVisibility"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"debug.js","mappings":"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","sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://[name]/./node_modules/chart.js/dist/chart.esm.js","webpack://[name]/./utils/debug/charts/ChartConfig.js","webpack://[name]/./utils/debug/charts/ThreeStatsChart.js","webpack://[name]/./utils/debug/OBBHelper.js","webpack://[name]/./utils/debug/Debug.js","webpack://[name]/./utils/debug/PotreeDebug.js","webpack://[name]/./utils/debug/charts/TileObjectChart.js","webpack://[name]/./utils/debug/charts/TileVisibilityChart.js","webpack://[name]/./utils/debug/GeometryDebug.js","webpack://[name]/./utils/debug/TileDebug.js","webpack://[name]/./utils/debug/3dTilesDebug.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"debug\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"debug\"] = factory();\n\telse\n\t\troot[\"debug\"] = factory();\n})(self, function() {\nreturn ","/*!\n * Chart.js v3.6.2\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n const idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n let pos = 0;\n let idx = indexOfDotOrLength(key, pos);\n while (obj && idx > pos) {\n obj = obj[key.substr(pos, idx - pos)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n return obj;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\nconst map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = '0123456789ABCDEF';\nconst h1 = (b) => hex[b & 0xF];\nconst h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF));\nfunction isShort(v) {\n\treturn eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\nfunction hexParse(str) {\n\tvar len = str.length;\n\tvar ret;\n\tif (str[0] === '#') {\n\t\tif (len === 4 || len === 5) {\n\t\t\tret = {\n\t\t\t\tr: 255 & map[str[1]] * 17,\n\t\t\t\tg: 255 & map[str[2]] * 17,\n\t\t\t\tb: 255 & map[str[3]] * 17,\n\t\t\t\ta: len === 5 ? map[str[4]] * 17 : 255\n\t\t\t};\n\t\t} else if (len === 7 || len === 9) {\n\t\t\tret = {\n\t\t\t\tr: map[str[1]] << 4 | map[str[2]],\n\t\t\t\tg: map[str[3]] << 4 | map[str[4]],\n\t\t\t\tb: map[str[5]] << 4 | map[str[6]],\n\t\t\t\ta: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n\t\t\t};\n\t\t}\n\t}\n\treturn ret;\n}\nfunction hexString(v) {\n\tvar f = isShort(v) ? h1 : h2;\n\treturn v\n\t\t? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '')\n\t\t: v;\n}\nfunction round(v) {\n\treturn v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n\treturn lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n\treturn lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n\treturn lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n\treturn lim(round(v * 100), 0, 100);\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n\tconst m = RGB_RE.exec(str);\n\tlet a = 255;\n\tlet r, g, b;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[7] !== r) {\n\t\tconst v = +m[7];\n\t\ta = 255 & (m[8] ? p2b(v) : v * 255);\n\t}\n\tr = +m[1];\n\tg = +m[3];\n\tb = +m[5];\n\tr = 255 & (m[2] ? p2b(r) : r);\n\tg = 255 & (m[4] ? p2b(g) : g);\n\tb = 255 & (m[6] ? p2b(b) : b);\n\treturn {\n\t\tr: r,\n\t\tg: g,\n\t\tb: b,\n\t\ta: a\n\t};\n}\nfunction rgbString(v) {\n\treturn v && (\n\t\tv.a < 255\n\t\t\t? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n\t\t\t: `rgb(${v.r}, ${v.g}, ${v.b})`\n\t);\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\treturn [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n\tconst f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n\tconst rgb = hsl2rgbn(h, 1, 0.5);\n\tlet i;\n\tif (w + b > 1) {\n\t\ti = 1 / (w + b);\n\t\tw *= i;\n\t\tb *= i;\n\t}\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] *= 1 - w - b;\n\t\trgb[i] += w;\n\t}\n\treturn rgb;\n}\nfunction rgb2hsl(v) {\n\tconst range = 255;\n\tconst r = v.r / range;\n\tconst g = v.g / range;\n\tconst b = v.b / range;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h, s, d;\n\tif (max !== min) {\n\t\td = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\th = max === r\n\t\t\t? ((g - b) / d) + (g < b ? 6 : 0)\n\t\t\t: max === g\n\t\t\t\t? (b - r) / d + 2\n\t\t\t\t: (r - g) / d + 4;\n\t\th = h * 60 + 0.5;\n\t}\n\treturn [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n\treturn (\n\t\tArray.isArray(a)\n\t\t\t? f(a[0], a[1], a[2])\n\t\t\t: f(a, b, c)\n\t).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n\treturn calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n\treturn calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n\treturn calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n\treturn (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n\tconst m = HUE_RE.exec(str);\n\tlet a = 255;\n\tlet v;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[5] !== v) {\n\t\ta = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n\t}\n\tconst h = hue(+m[2]);\n\tconst p1 = +m[3] / 100;\n\tconst p2 = +m[4] / 100;\n\tif (m[1] === 'hwb') {\n\t\tv = hwb2rgb(h, p1, p2);\n\t} else if (m[1] === 'hsv') {\n\t\tv = hsv2rgb(h, p1, p2);\n\t} else {\n\t\tv = hsl2rgb(h, p1, p2);\n\t}\n\treturn {\n\t\tr: v[0],\n\t\tg: v[1],\n\t\tb: v[2],\n\t\ta: a\n\t};\n}\nfunction rotate(v, deg) {\n\tvar h = rgb2hsl(v);\n\th[0] = hue(h[0] + deg);\n\th = hsl2rgb(h);\n\tv.r = h[0];\n\tv.g = h[1];\n\tv.b = h[2];\n}\nfunction hslString(v) {\n\tif (!v) {\n\t\treturn;\n\t}\n\tconst a = rgb2hsl(v);\n\tconst h = a[0];\n\tconst s = n2p(a[1]);\n\tconst l = n2p(a[2]);\n\treturn v.a < 255\n\t\t? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n\t\t: `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map$1 = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n\tconst unpacked = {};\n\tconst keys = Object.keys(names);\n\tconst tkeys = Object.keys(map$1);\n\tlet i, j, k, ok, nk;\n\tfor (i = 0; i < keys.length; i++) {\n\t\tok = nk = keys[i];\n\t\tfor (j = 0; j < tkeys.length; j++) {\n\t\t\tk = tkeys[j];\n\t\t\tnk = nk.replace(k, map$1[k]);\n\t\t}\n\t\tk = parseInt(names[ok], 16);\n\t\tunpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n\t}\n\treturn unpacked;\n}\nlet names$1;\nfunction nameParse(str) {\n\tif (!names$1) {\n\t\tnames$1 = unpack();\n\t\tnames$1.transparent = [0, 0, 0, 0];\n\t}\n\tconst a = names$1[str.toLowerCase()];\n\treturn a && {\n\t\tr: a[0],\n\t\tg: a[1],\n\t\tb: a[2],\n\t\ta: a.length === 4 ? a[3] : 255\n\t};\n}\nfunction modHSL(v, i, ratio) {\n\tif (v) {\n\t\tlet tmp = rgb2hsl(v);\n\t\ttmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n\t\ttmp = hsl2rgb(tmp);\n\t\tv.r = tmp[0];\n\t\tv.g = tmp[1];\n\t\tv.b = tmp[2];\n\t}\n}\nfunction clone(v, proto) {\n\treturn v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n\tvar v = {r: 0, g: 0, b: 0, a: 255};\n\tif (Array.isArray(input)) {\n\t\tif (input.length >= 3) {\n\t\t\tv = {r: input[0], g: input[1], b: input[2], a: 255};\n\t\t\tif (input.length > 3) {\n\t\t\t\tv.a = n2b(input[3]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = clone(input, {r: 0, g: 0, b: 0, a: 1});\n\t\tv.a = n2b(v.a);\n\t}\n\treturn v;\n}\nfunction functionParse(str) {\n\tif (str.charAt(0) === 'r') {\n\t\treturn rgbParse(str);\n\t}\n\treturn hueParse(str);\n}\nclass Color {\n\tconstructor(input) {\n\t\tif (input instanceof Color) {\n\t\t\treturn input;\n\t\t}\n\t\tconst type = typeof input;\n\t\tlet v;\n\t\tif (type === 'object') {\n\t\t\tv = fromObject(input);\n\t\t} else if (type === 'string') {\n\t\t\tv = hexParse(input) || nameParse(input) || functionParse(input);\n\t\t}\n\t\tthis._rgb = v;\n\t\tthis._valid = !!v;\n\t}\n\tget valid() {\n\t\treturn this._valid;\n\t}\n\tget rgb() {\n\t\tvar v = clone(this._rgb);\n\t\tif (v) {\n\t\t\tv.a = b2n(v.a);\n\t\t}\n\t\treturn v;\n\t}\n\tset rgb(obj) {\n\t\tthis._rgb = fromObject(obj);\n\t}\n\trgbString() {\n\t\treturn this._valid ? rgbString(this._rgb) : this._rgb;\n\t}\n\thexString() {\n\t\treturn this._valid ? hexString(this._rgb) : this._rgb;\n\t}\n\thslString() {\n\t\treturn this._valid ? hslString(this._rgb) : this._rgb;\n\t}\n\tmix(color, weight) {\n\t\tconst me = this;\n\t\tif (color) {\n\t\t\tconst c1 = me.rgb;\n\t\t\tconst c2 = color.rgb;\n\t\t\tlet w2;\n\t\t\tconst p = weight === w2 ? 0.5 : weight;\n\t\t\tconst w = 2 * p - 1;\n\t\t\tconst a = c1.a - c2.a;\n\t\t\tconst w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\tw2 = 1 - w1;\n\t\t\tc1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n\t\t\tc1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n\t\t\tc1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n\t\t\tc1.a = p * c1.a + (1 - p) * c2.a;\n\t\t\tme.rgb = c1;\n\t\t}\n\t\treturn me;\n\t}\n\tclone() {\n\t\treturn new Color(this.rgb);\n\t}\n\talpha(a) {\n\t\tthis._rgb.a = n2b(a);\n\t\treturn this;\n\t}\n\tclearer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 - ratio;\n\t\treturn this;\n\t}\n\tgreyscale() {\n\t\tconst rgb = this._rgb;\n\t\tconst val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n\t\trgb.r = rgb.g = rgb.b = val;\n\t\treturn this;\n\t}\n\topaquer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 + ratio;\n\t\treturn this;\n\t}\n\tnegate() {\n\t\tconst v = this._rgb;\n\t\tv.r = 255 - v.r;\n\t\tv.g = 255 - v.g;\n\t\tv.b = 255 - v.b;\n\t\treturn this;\n\t}\n\tlighten(ratio) {\n\t\tmodHSL(this._rgb, 2, ratio);\n\t\treturn this;\n\t}\n\tdarken(ratio) {\n\t\tmodHSL(this._rgb, 2, -ratio);\n\t\treturn this;\n\t}\n\tsaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, ratio);\n\t\treturn this;\n\t}\n\tdesaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, -ratio);\n\t\treturn this;\n\t}\n\trotate(deg) {\n\t\trotate(this._rgb, deg);\n\t\treturn this;\n\t}\n}\nfunction index_esm(input) {\n\treturn new Color(input);\n}\n\nconst isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern;\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.describe(_descriptors);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n let type, xOffset, yOffset, size, cornerRadius;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, scope);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(evt, canvas) {\n const e = evt.native || evt;\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _alignStartEnd as $, _rlookupByKey as A, toPadding as B, each as C, getMaximumSize as D, _getParentNode as E, readUsedSize as F, throttled as G, HALF_PI as H, supportsEventListenerOptions as I, _isDomSupported as J, log10 as K, _factorize as L, finiteOrDefault as M, callback as N, _addGrace as O, PI as P, toDegrees as Q, _measureText as R, _int16Range as S, TAU as T, _alignPixel as U, clipArea as V, renderText as W, unclipArea as X, toFont as Y, _toLeftRightCenter as Z, _arrayUnique as _, resolve as a, overrides as a0, merge as a1, _capitalize as a2, descriptors as a3, isFunction as a4, _attachContext as a5, _createResolver as a6, _descriptors as a7, mergeIf as a8, uid as a9, noop as aA, distanceBetweenPoints as aB, _setMinAndMaxByKey as aC, niceNum as aD, almostWhole as aE, almostEquals as aF, _decimalPlaces as aG, _longestText as aH, _filterBetween as aI, _lookup as aJ, getHoverColor as aK, clone$1 as aL, _merger as aM, _mergerIf as aN, _deprecated as aO, toFontString as aP, splineCurve as aQ, splineCurveMonotone as aR, getStyle as aS, fontString as aT, toLineHeight as aU, PITAU as aV, INFINITY as aW, RAD_PER_DEG as aX, QUARTER_PI as aY, TWO_THIRDS_PI as aZ, _angleDiff as a_, debounce as aa, retinaScale as ab, clearCanvas as ac, setsEqual as ad, _elementsEqual as ae, getAngleFromPoint as af, _isBetween as ag, _readValueToProps as ah, _updateBezierControlPoints as ai, _computeSegments as aj, _boundSegments as ak, _steppedInterpolation as al, _bezierInterpolation as am, _pointInLine as an, _steppedLineTo as ao, _bezierCurveTo as ap, drawPoint as aq, addRoundedRectPath as ar, toTRBL as as, toTRBLCorners as at, _boundSegment as au, _normalizeAngle as av, getRtlAdapter as aw, overrideTextDirection as ax, _textX as ay, restoreTextDirection as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, getRelativePosition as y, _isPointInArea as z };\n","/*!\n * Chart.js v3.6.2\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as toPadding, C as each, D as getMaximumSize, E as _getParentNode, F as readUsedSize, G as throttled, I as supportsEventListenerOptions, J as _isDomSupported, K as log10, L as _factorize, M as finiteOrDefault, N as callback, O as _addGrace, Q as toDegrees, R as _measureText, S as _int16Range, U as _alignPixel, V as clipArea, W as renderText, X as unclipArea, Y as toFont, Z as _toLeftRightCenter, $ as _alignStartEnd, a0 as overrides, a1 as merge, a2 as _capitalize, a3 as descriptors, a4 as isFunction, a5 as _attachContext, a6 as _createResolver, a7 as _descriptors, a8 as mergeIf, a9 as uid, aa as debounce, ab as retinaScale, ac as clearCanvas, ad as setsEqual, ae as _elementsEqual, af as getAngleFromPoint, ag as _isBetween, ah as _readValueToProps, ai as _updateBezierControlPoints, aj as _computeSegments, ak as _boundSegments, al as _steppedInterpolation, am as _bezierInterpolation, an as _pointInLine, ao as _steppedLineTo, ap as _bezierCurveTo, aq as drawPoint, ar as addRoundedRectPath, as as toTRBL, at as toTRBLCorners, au as _boundSegment, av as _normalizeAngle, aw as getRtlAdapter, ax as overrideTextDirection, ay as _textX, az as restoreTextDirection, aA as noop, aB as distanceBetweenPoints, aC as _setMinAndMaxByKey, aD as niceNum, aE as almostWhole, aF as almostEquals, aG as _decimalPlaces, aH as _longestText, aI as _filterBetween, aJ as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || (elapsed < duration));\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n});\ndefaults.describe('animations', {\n _fallback: 'animation',\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const metasets = iScale.getMatchingVisibleMetas(this._type);\n const stacked = iScale.options.stacked;\n const ilen = metasets.length;\n const stacks = [];\n let i, item;\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n if (!item.controller.options.grouped) {\n continue;\n }\n if (typeof dataIndex !== 'undefined') {\n const val = item.controller.getParsed(dataIndex)[\n item.controller._cachedMeta.vScale.axis\n ];\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n stacks.push(item.stack);\n }\n if (item.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n};\n\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false,\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const dataset = this.getDataset();\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const dataset = this.getDataset();\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const dataset = this.getDataset();\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n return getRelativePosition$1(e, chart);\n}\nfunction evaluateAllVisibleItems(chart, handler) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n let index, data, element;\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n ({index, data} = metasets[i]);\n for (let j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n const items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n let items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (intersect && !element.inRange(position.x, position.y, useFinalPosition)) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n };\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const items = [];\n const axis = options.axis;\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateAllVisibleItems(chart, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n if (options.intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition)\n : getNearestItems(chart, position, axis, false, useFinalPosition);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition) :\n getNearestItems(chart, position, axis, false, useFinalPosition);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'x', intersect: options.intersect}, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'y', intersect: options.intersect}, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition$1(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(this.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = grid.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n if (isHorizontal) {\n x = pixel;\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {textAlign, x};\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n drawBorder() {\n const {chart, ctx, options: {grid}} = this;\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'destroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n return plugins;\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n const result = [];\n const context = chart.getContext();\n for (let i = 0; i < plugins.length; i++) {\n const plugin = plugins[i];\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.6.2\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nclass Chart {\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {mode});\n this._layers.sort(compare2Level('z', '_idx'));\n if (this._lastEvent) {\n this._eventHandler(this._lastEvent, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n const {canvas, ctx} = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n this.notifyPlugins('destroy');\n delete instances[this.id];\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {event: e, replay, cancelable: true};\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay) {\n const {_active: lastActive = [], options} = this;\n const hoverOptions = options.hover;\n const useFinalPosition = replay;\n let active = [];\n let changed = false;\n let lastEvent = null;\n if (e.type !== 'mouseout') {\n active = this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n lastEvent = e.type === 'click' ? this._lastEvent : e;\n }\n this._lastEvent = null;\n if (_isPointInArea(e, this.chartArea, this._minPadding)) {\n callback(options.onHover, [e, active, this], this);\n if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {\n callback(options.onClick, [e, active, this], this);\n }\n }\n changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n const {options} = element;\n const inner = options.borderAlign === 'inner';\n if (!options.borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = options.borderWidth * 2;\n ctx.lineJoin = 'round';\n } else {\n ctx.lineWidth = options.borderWidth;\n ctx.lineJoin = 'bevel';\n }\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (meta.type !== 'line') {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\nfunction decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n let target = null;\n let horizontal;\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n return null;\n}\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const target = [];\n const start = options.reverse ? scale.max : scale.min;\n const end = options.reverse ? scale.min : scale.max;\n let i, center, value;\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\nfunction getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return createBoundaryLine(boundary, line);\n}\nfunction createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _clip(ctx, target, clipY) {\n ctx.beginPath();\n target.path(ctx);\n ctx.lineTo(target.last().x, clipY);\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = findSegmentEnd(start, end, points);\n const bounds = getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\nfunction _fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n _fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n _clip(ctx, target, area.bottom);\n }\n _fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction drawfill(ctx, source, area) {\n const target = getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip._chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._chart = config._chart;\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this._chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this._chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this._chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n const title = callbacks.title.apply(this, [context]);\n const afterTitle = callbacks.afterTitle.apply(this, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n const footer = callbacks.footer.apply(this, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this._chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this._chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(this, context));\n labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n labelTextColors.push(scoped.labelTextColor.call(this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this._chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this._chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {chart: this._chart, tooltip: this, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this._chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this._chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this.update(true);\n }\n }\n handleEvent(e, replay) {\n const options = this.options;\n const lastActive = this._active || [];\n let changed = false;\n let active = [];\n if (e.type !== 'mouseout') {\n active = this._chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n }\n const positionChanged = this._positionChanged(active, e);\n changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({_chart: chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n chart.notifyPlugins('afterTooltipDraw', args);\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: plugin_filler,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const furthestLimits = {\n l: 0,\n r: scale.width,\n t: 0,\n b: scale.height - scale.paddingTop\n };\n const furthestAngles = {};\n const labelSizes = [];\n const padding = [];\n const valueCount = scale.getLabels().length;\n for (let i = 0; i < valueCount; i++) {\n const opts = scale.options.pointLabels.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i]);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = scale.getIndexAngle(i);\n const angle = toDegrees(angleRadians);\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n if (hLimits.start < furthestLimits.l) {\n furthestLimits.l = hLimits.start;\n furthestAngles.l = angleRadians;\n }\n if (hLimits.end > furthestLimits.r) {\n furthestLimits.r = hLimits.end;\n furthestAngles.r = angleRadians;\n }\n if (vLimits.start < furthestLimits.t) {\n furthestLimits.t = vLimits.start;\n furthestAngles.t = angleRadians;\n }\n if (vLimits.end > furthestLimits.b) {\n furthestLimits.b = vLimits.end;\n furthestAngles.b = angleRadians;\n }\n }\n scale._setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale.getLabels().length;\n const opts = scale.options;\n const tickBackdropHeight = getTickBackdropHeight(opts);\n const outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n for (let i = 0; i < valueCount; i++) {\n const extra = (i === 0 ? tickBackdropHeight / 2 : 0);\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i]);\n const angle = toDegrees(scale.getIndexAngle(i));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction numberOrZero(param) {\n return isNumber(param) ? param : 0;\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n this.width = this.maxWidth;\n this.height = this.maxHeight;\n this.paddingTop = getTickBackdropHeight(this.options) / 2;\n this.xCenter = Math.floor(this.width / 2);\n this.yCenter = Math.floor((this.height - this.paddingTop) / 2);\n this.drawingArea = Math.min(this.height - this.paddingTop, this.width) / 2;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n });\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n _setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {\n let radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n let radiusReductionRight = Math.max(furthestLimits.r - this.width, 0) / Math.sin(furthestAngles.r);\n let radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n let radiusReductionBottom = -Math.max(furthestLimits.b - (this.height - this.paddingTop), 0) / Math.cos(furthestAngles.b);\n radiusReductionLeft = numberOrZero(radiusReductionLeft);\n radiusReductionRight = numberOrZero(radiusReductionRight);\n radiusReductionTop = numberOrZero(radiusReductionTop);\n radiusReductionBottom = numberOrZero(radiusReductionBottom);\n this.drawingArea = Math.max(largestPossibleRadius / 2, Math.min(\n Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2)));\n this.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n const maxRight = this.width - rightMovement - this.drawingArea;\n const maxLeft = leftMovement + this.drawingArea;\n const maxTop = topMovement + this.drawingArea;\n const maxBottom = (this.height - this.paddingTop) - bottomMovement - this.drawingArea;\n this.xCenter = Math.floor(((maxLeft + maxRight) / 2) + this.left);\n this.yCenter = Math.floor(((maxTop + maxBottom) / 2) + this.top + this.paddingTop);\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / this.getLabels().length;\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter) {\n const angle = this.getIndexAngle(index) - HALF_PI;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this.getLabels().length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid} = opts;\n const labelCount = this.getLabels().length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(this.getContext(index - 1));\n drawRadiusLine(this, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = this.getLabels().length - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","import { Chart } from 'chart.js';\nChart.defaults.color = '#b0b0b0';\nexport var scales = {\n y: {\n display: true,\n ticks: {\n suggestedMin: 0 // minimum will be 0, unless there is a lower value.\n\n },\n gridLines: {\n color: '#606060',\n zeroLineColor: '#606060'\n }\n }\n};\nexport var color_rose = '#e7c9e5';\nexport var color_blue = '#64a6bd';\nexport var backgroundChartDiv = '#404040';\nexport default {};","import { Chart, LineController, LineElement, PointElement, LinearScale, CategoryScale, BarElement, BarController } from 'chart.js';\nimport { scales, color_rose, color_blue } from \"./ChartConfig\";\nChart.register(LineController, LineElement, PointElement, LinearScale, CategoryScale, BarElement, BarController);\nexport default function ThreeStatsChart(ctx, renderer) {\n var lastValidCompareIndex = -1;\n var timestamp = Date.now();\n var textureDataset = {\n label: 'texture count',\n data: [{\n x: 0,\n y: 0\n }],\n borderColor: color_rose,\n borderWidth: 1.5,\n pointRadius: 1\n };\n var geometryDataset = {\n label: 'geometry count',\n data: [{\n x: 0,\n y: 0\n }],\n borderColor: color_blue,\n borderWidth: 1.5,\n pointRadius: 1\n };\n var label = ['0s'];\n var chart = new Chart(ctx, {\n type: 'line',\n data: {\n labels: label,\n datasets: [textureDataset, geometryDataset]\n },\n options: {\n animation: {\n duration: 10\n },\n scales: scales\n }\n });\n\n this.update = function (displayed) {\n var limit = 60;\n var timeInS = Math.floor((Date.now() - timestamp) / 1000);\n var lbl = \"\".concat(timeInS, \"s\");\n var identical = lastValidCompareIndex > 0 && label[lastValidCompareIndex] == lbl;\n\n if (identical) {\n label.push('');\n } else {\n label.push(lbl);\n lastValidCompareIndex = label.length - 1;\n }\n\n if (label.length > limit) {\n label.shift();\n lastValidCompareIndex--;\n }\n\n var memory = renderer.info.memory;\n textureDataset.data.push({\n x: timeInS,\n y: memory.textures\n });\n geometryDataset.data.push({\n x: timeInS,\n y: memory.geometries\n });\n\n if (textureDataset.data.length > limit) {\n textureDataset.data.shift();\n geometryDataset.data.shift();\n }\n\n if (displayed) {\n chart.update();\n }\n };\n\n this.resize = function () {\n chart.resize();\n };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport * as THREE from 'three';\n\nvar OBBHelper = /*#__PURE__*/function (_THREE$Box3Helper) {\n _inherits(OBBHelper, _THREE$Box3Helper);\n\n var _super = _createSuper(OBBHelper);\n\n function OBBHelper(OBB, text, color) {\n var _this;\n\n _classCallCheck(this, OBBHelper);\n\n color = color || new THREE.Color(Math.random(), Math.random(), Math.random());\n _this = _super.call(this, OBB.box3D, color.getHex());\n _this.obb = OBB;\n _this.material.linewidth = 2;\n _this.frustumCulled = false;\n _this.matrixAutoUpdate = false;\n _this.rotationAutoUpdate = false;\n\n _this.updateMatrixWorld(true);\n\n return _this;\n }\n\n _createClass(OBBHelper, [{\n key: \"removeChildren\",\n value: function removeChildren() {\n this.material.dispose();\n this.geometry.dispose();\n }\n }, {\n key: \"updateMatrixWorld\",\n value: function updateMatrixWorld() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.obb.box3D.isEmpty()) {\n return;\n }\n\n this.quaternion.copy(this.obb.quaternion);\n this.obb.box3D.getCenter(this.position).applyQuaternion(this.quaternion).add(this.obb.position);\n this.obb.box3D.getSize(this.scale);\n this.scale.multiplyScalar(0.5);\n this.updateMatrix();\n THREE.Object3D.prototype.updateMatrixWorld.call(this, force);\n }\n }]);\n\n return OBBHelper;\n}(THREE.Box3Helper);\n\nexport default OBBHelper;","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { CameraHelper, Color, Vector3 } from 'three';\nimport Coordinates from \"../../src/Core/Geographic/Coordinates\";\nimport { MAIN_LOOP_EVENTS } from \"../../src/Core/MainLoop\";\nimport OBB from \"../../src/Renderer/OBB\";\nimport * as THREE from 'three';\nimport ThreeStatsChart from \"./charts/ThreeStatsChart\";\nimport { backgroundChartDiv, color_blue } from \"./charts/ChartConfig\";\nimport OBBHelper from \"./OBBHelper\";\n/**\n * Create a debug instance attached to an itowns instance\n *\n * @Constructor\n * @param {Scene} scene the itowns Scene\n * @return {Debug} a debug instance\n */\n// disabling eslint errors as it is the exported constructor\n\nfunction Debug(view, datDebugTool, chartDivContainer) {\n var _this = this;\n\n // CHARTS\n // Create default charts div if missing\n if (!chartDivContainer) {\n chartDivContainer = document.createElement('div');\n chartDivContainer.id = 'chart-div';\n chartDivContainer.style.cssText = \"z-index: 10; position: absolute; bottom: 0; left: 0; width: 100vw; height: 30%; background-color: \".concat(backgroundChartDiv, \"; display: none\");\n document.body.appendChild(chartDivContainer);\n }\n\n this.chartDivContainer = chartDivContainer;\n var canvas = this.createChartContainer('three-info');\n var ctx = canvas.getContext('2d');\n this.charts = [];\n this.charts.push(new ThreeStatsChart(ctx, view.mainLoop.gfxEngine.renderer));\n var charts = this.charts;\n var tileLayer = view.tileLayer;\n var initialPosition = new Coordinates(view.referenceCrs, 0.0, 0.0, 0.0);\n var geoPosition = new Coordinates('EPSG:4326', 0.0, 0.0, 0.0);\n\n function debugChartUpdate(updateDuration) {\n var displayed = chartDivContainer.style.display != 'none';\n charts.forEach(function (c) {\n return c.update(displayed, updateDuration);\n });\n } // DEBUG CONTROLS\n\n\n var gui = datDebugTool.addFolder('Debug Tools');\n var state = {\n displayCharts: false,\n eventsDebug: false,\n debugCameraWindow: false,\n freeze: false\n };\n var before;\n\n var startChart = function () {\n before = Date.now();\n };\n\n var endChart = function () {\n var duration = Date.now() - before; // debug graphs update\n\n debugChartUpdate(duration);\n }; // charts\n\n\n gui.add(state, 'displayCharts').name('Display charts').onChange(function (newValue) {\n if (newValue) {\n view.addFrameRequester(MAIN_LOOP_EVENTS.UPDATE_START, startChart);\n view.addFrameRequester(MAIN_LOOP_EVENTS.UPDATE_END, endChart);\n chartDivContainer.style.display = 'flex';\n } else {\n view.removeFrameRequester(MAIN_LOOP_EVENTS.UPDATE_START, startChart);\n view.removeFrameRequester(MAIN_LOOP_EVENTS.UPDATE_END, endChart);\n chartDivContainer.style.display = 'none';\n }\n\n _this.updateChartDivSize();\n\n view.notifyChange();\n });\n gui.add(state, 'debugCameraWindow').name('debug Camera').onChange(function (value) {\n if (value) {\n view.addFrameRequester(MAIN_LOOP_EVENTS.AFTER_RENDER, renderCameraDebug);\n } else {\n view.removeFrameRequester(MAIN_LOOP_EVENTS.AFTER_RENDER, renderCameraDebug);\n }\n\n view.notifyChange();\n });\n gui.add(state, 'freeze').name('freeze update').onChange(function (newValue) {\n tileLayer.frozen = newValue;\n view.notifyChange();\n }); // camera-target-updated event\n\n var LatController;\n var LongController;\n var eventFolder;\n var controls = view.controls;\n initialPosition.crs = view.referenceCrs;\n var cursorWorldPosition = new THREE.Vector3();\n var getCenter = controls && controls.getCameraTargetPosition ? controls.getCameraTargetPosition : function () {\n return view.camera.camera3D.position;\n };\n\n var cameraTargetListener = function (event) {\n if (view.getPickingPositionFromDepth(view.eventToViewCoords(event), cursorWorldPosition)) {\n initialPosition.setFromVector3(cursorWorldPosition).as('EPSG:4326', geoPosition);\n state.latitude = \"\".concat(geoPosition.y.toFixed(6));\n state.longitude = \"\".concat(geoPosition.x.toFixed(6));\n } else {\n state.latitude = '---------';\n state.longitude = '---------';\n }\n\n LatController.updateDisplay();\n LongController.updateDisplay();\n };\n\n gui.add(state, 'eventsDebug').name('Debug event').onChange(function () {\n return function (newValue) {\n if (newValue) {\n eventFolder = gui.addFolder('Events');\n eventFolder.open();\n initialPosition.setFromVector3(getCenter()).as('EPSG:4326', geoPosition);\n state.latitude = \"\".concat(geoPosition.y.toFixed(6));\n state.longitude = \"\".concat(geoPosition.x.toFixed(6));\n LatController = eventFolder.add(state, 'latitude');\n LongController = eventFolder.add(state, 'longitude');\n view.domElement.addEventListener('mousemove', cameraTargetListener);\n } else {\n view.domElement.removeEventListener('mousemove', cameraTargetListener);\n gui.removeFolder('Events');\n }\n };\n }()); // Camera debug\n\n var helper = new CameraHelper(view.camera.camera3D);\n var debugCamera = view.camera.camera3D.clone();\n debugCamera.fov *= 1.5;\n debugCamera.updateProjectionMatrix();\n var g = view.mainLoop.gfxEngine;\n var r = g.renderer;\n var fogDistance = 10e10;\n var layerAtmosphere = view.getLayerById('atmosphere');\n\n if (layerAtmosphere) {\n fogDistance = layerAtmosphere.fog.distance;\n }\n\n helper.visible = false;\n view.scene.add(helper); // Displayed tiles boundind box\n\n var displayedTilesObb = new OBB();\n var displayedTilesObbHelper = new OBBHelper(displayedTilesObb, '', new Color(color_blue));\n displayedTilesObbHelper.visible = false;\n view.scene.add(displayedTilesObb);\n view.scene.add(displayedTilesObbHelper);\n\n function updateFogDistance(obj) {\n if (obj.material && fogDistance) {\n obj.material.fogDistance = fogDistance;\n }\n }\n\n var clearColor = new Color();\n var lookAtCameraDebug = new Vector3();\n\n function renderCameraDebug() {\n if (state.debugCameraWindow && debugCamera) {\n var ratio = 0.25;\n var size = {\n x: g.width * ratio,\n y: g.height * ratio\n };\n debugCamera.aspect = size.x / size.y;\n var camera = view.camera.camera3D;\n var coord = new Coordinates(view.referenceCrs, camera.position).as(tileLayer.extent.crs);\n var extent = view.tileLayer.info.displayed.extent;\n displayedTilesObb.setFromExtent(extent);\n displayedTilesObbHelper.visible = true;\n displayedTilesObbHelper.updateMatrixWorld(true); // Note Method to compute near and far...\n // const bbox = displayedTilesObb.box3D.clone().applyMatrix4(displayedTilesObb.matrixWorld);\n // const distance = bbox.distanceToPoint(view.camera.camera3D.position);\n // console.log('distance', distance, distance + bbox.getBoundingSphere(sphere).radius * 2);\n // Compute position camera debug\n\n var altitudeCameraDebug = 1.5 * coord.z;\n coord.z = altitudeCameraDebug;\n coord.as(view.referenceCrs).toVector3(debugCamera.position); // Compute recoil camera\n\n camera.worldToLocal(debugCamera.position);\n debugCamera.position.z += altitudeCameraDebug;\n camera.localToWorld(debugCamera.position); // Compute target camera debug\n\n lookAtCameraDebug.copy(view.camera.camera3D.position);\n camera.worldToLocal(lookAtCameraDebug);\n lookAtCameraDebug.z -= altitudeCameraDebug * 1.5;\n camera.localToWorld(lookAtCameraDebug);\n debugCamera.lookAt(lookAtCameraDebug);\n helper.update();\n debugCamera.updateProjectionMatrix();\n\n if (layerAtmosphere) {\n layerAtmosphere.object3d.visible = false;\n fogDistance = 10e10;\n\n var _iterator = _createForOfIteratorHelper(tileLayer.level0Nodes),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var obj = _step.value;\n obj.traverseVisible(updateFogDistance);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var deltaY = state.displayCharts ? Math.round(parseFloat(chartDivContainer.style.height.replace('%', '')) * g.height / 100) + 3 : 0;\n helper.visible = true;\n helper.updateMatrixWorld(true);\n r.getClearColor(clearColor);\n r.setViewport(g.width - size.x, deltaY, size.x, size.y);\n r.setScissor(g.width - size.x, deltaY, size.x, size.y);\n r.setScissorTest(true);\n r.setClearColor(backgroundChartDiv);\n r.clear();\n r.render(view.scene, debugCamera);\n r.setScissorTest(false);\n r.setClearColor(clearColor);\n r.setViewport(0, 0, g.width, g.height);\n helper.visible = false;\n displayedTilesObbHelper.visible = false;\n\n if (layerAtmosphere) {\n layerAtmosphere.object3d.visible = true;\n }\n\n if (layerAtmosphere) {\n fogDistance = layerAtmosphere.fog.distance;\n\n var _iterator2 = _createForOfIteratorHelper(tileLayer.level0Nodes),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _obj = _step2.value;\n\n _obj.traverseVisible(updateFogDistance);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n }\n }\n}\n\nDebug.prototype.createChartContainer = function (chartId) {\n var div = document.createElement('div');\n div.style.cssText = \"background-color: \".concat(backgroundChartDiv, \"; flex: auto;\");\n this.chartDivContainer.appendChild(div);\n var chartCanvas = document.createElement('canvas');\n chartCanvas.height = '20rem';\n chartCanvas.id = chartId;\n div.appendChild(chartCanvas);\n return chartCanvas;\n};\n\nDebug.prototype.updateChartDivSize = function () {\n var count = 0;\n\n var _iterator3 = _createForOfIteratorHelper(this.chartDivContainer.getElementsByTagName('div')),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var div = _step3.value;\n\n if (div.style.display !== 'none') {\n count++;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var size = Math.floor(100 / count);\n\n var _iterator4 = _createForOfIteratorHelper(this.chartDivContainer.getElementsByTagName('div')),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _div = _step4.value;\n\n if (_div.style.display !== 'none') {\n _div.style.width = \"\".concat(size, \"%\");\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n this.charts.forEach(function (c) {\n c.resize();\n c.update();\n });\n};\n\nexport default Debug;","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { MODE } from \"../../src/Renderer/PointsMaterial\";\nexport default {\n initTools: function initTools(view, layer, datUi) {\n var update = function () {\n return view.notifyChange(layer, true);\n };\n\n layer.debugUI = datUi.addFolder(\"\".concat(layer.id));\n layer.debugUI.add(layer, 'visible').name('Visible').onChange(update);\n layer.debugUI.add(layer, 'sseThreshold').name('SSE threshold').onChange(update);\n layer.debugUI.add(layer, 'octreeDepthLimit', -1, 20).name('Depth limit').onChange(update);\n layer.debugUI.add(layer, 'pointBudget', 1, 15000000).name('Max point count').onChange(update);\n layer.debugUI.add(layer.object3d.position, 'z', -50, 50).name('Z translation').onChange(function () {\n layer.object3d.updateMatrixWorld();\n view.notifyChange(layer);\n });\n layer.dbgStickyNode = '';\n layer.dbgDisplaySticky = false;\n layer.dbgDisplayChildren = true;\n layer.dbgDisplayParents = true;\n var styleUI = layer.debugUI.addFolder('Styling');\n\n if (layer.material.mode != undefined) {\n styleUI.add(layer.material, 'mode', MODE).name('Display mode').onChange(update);\n styleUI.add(layer, 'maxIntensityRange', 0, 1).name('Intensity max').onChange(update);\n }\n\n styleUI.add(layer, 'opacity', 0, 1).name('Layer Opacity').onChange(update);\n styleUI.add(layer, 'pointSize', 0, 15).name('Point Size').onChange(update);\n\n if (layer.material.picking != undefined) {\n styleUI.add(layer.material, 'picking').name('Display picking id').onChange(update);\n } // UI\n\n\n var debugUI = layer.debugUI.addFolder('Debug');\n debugUI.add(layer.bboxes, 'visible').name('Display Bounding Boxes').onChange(update);\n debugUI.add(layer, 'dbgStickyNode').name('Sticky node name').onChange(update);\n debugUI.add(layer, 'dbgDisplaySticky').name('Display sticky node').onChange(update);\n debugUI.add(layer, 'dbgDisplayChildren').name('Display children of sticky node').onChange(update);\n debugUI.add(layer, 'dbgDisplayParents').name('Display parents of sticky node').onChange(update);\n\n var isInHierarchy = function (name1, name2) {\n return layer.dbgDisplaySticky && name1 === name2 || layer.dbgDisplayParents && name1.startsWith(name2) || layer.dbgDisplayChildren && name2.startsWith(name1);\n };\n\n view.addFrameRequester('before_layer_update', function () {\n if (layer.dbgStickyNode.length) {\n layer.displayedCount = 0;\n var stickies = layer.dbgStickyNode.split(',');\n\n var _iterator = _createForOfIteratorHelper(layer.group.children),\n _step;\n\n try {\n var _loop = function () {\n var pts = _step.value;\n pts.visible = stickies.some(function (name) {\n return isInHierarchy(name, pts.owner.name);\n });\n\n if (pts.boxHelper) {\n pts.boxHelper.visible = pts.visible;\n }\n\n if (pts.visible) {\n layer.displayedCount += pts.geometry.attributes.position.count;\n }\n };\n\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n });\n }\n};","import { Chart } from 'chart.js';\nimport { scales, color_rose, color_blue } from \"./ChartConfig\";\nexport default function TileObjectsChart(ctx, tileLayer) {\n var lastValidCompareIndex = 0;\n var timestamp = Date.now();\n var viewLevelStartDataset = {\n label: 'Update 1st level',\n data: [{\n x: 0,\n y: 0\n }],\n borderColor: color_rose,\n borderWidth: 1.5,\n pointRadius: 1\n };\n var viewUpdateDurationDataset = {\n label: 'Update duration (ms)',\n data: [{\n x: 0,\n y: 0\n }],\n borderColor: color_blue,\n borderWidth: 1.5,\n pointRadius: 1\n };\n var label = ['0s'];\n var nbObjectsChart = new Chart(ctx, {\n type: 'line',\n data: {\n labels: label,\n datasets: [viewLevelStartDataset, viewUpdateDurationDataset]\n },\n options: {\n animation: {\n duration: 10\n },\n scales: scales\n }\n });\n\n this.update = function (displayed, updateDuration) {\n // update line graph\n // update time\n var limit = 60;\n var timeInS = Math.floor((Date.now() - timestamp) / 1000);\n var lbl = \"\".concat(timeInS, \"s\");\n var identical = lastValidCompareIndex > 0 && label[lastValidCompareIndex] == lbl;\n\n if (identical) {\n label.push('');\n } else {\n label.push(lbl);\n lastValidCompareIndex = label.length - 1;\n }\n\n if (label.length > limit) {\n label.shift();\n lastValidCompareIndex--;\n }\n\n viewLevelStartDataset.data.push({\n x: 0,\n y: tileLayer._latestUpdateStartingLevel\n });\n viewUpdateDurationDataset.data.push({\n x: 0,\n y: updateDuration\n });\n\n if (viewLevelStartDataset.data.length > limit) {\n viewLevelStartDataset.data.shift();\n viewUpdateDurationDataset.data.shift();\n }\n\n if (displayed) {\n nbObjectsChart.update();\n }\n };\n\n this.resize = function () {\n nbObjectsChart.resize();\n };\n}","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { Chart } from 'chart.js';\nimport { scales, color_rose, color_blue } from \"./ChartConfig\";\nexport default function TileVisibilityChart(ctx, tileLayer) {\n var nbVisibleLabels = [];\n var nbVisibleData = [];\n var nbDisplayedData = [];\n var nbVisibleChart = new Chart(ctx, {\n type: 'bar',\n data: {\n labels: nbVisibleLabels,\n datasets: [{\n label: 'Visible node per level',\n data: nbVisibleData,\n backgroundColor: color_rose\n }, {\n label: 'Diplayed node per level',\n data: nbDisplayedData,\n backgroundColor: color_blue\n }]\n },\n options: {\n scales: scales\n }\n });\n\n this.update = function (displayed) {\n function countVisible(node, stats) {\n if (!node || !node.visible) {\n return;\n }\n\n if (node.level >= 0 && node.layer === tileLayer) {\n if (stats[node.level]) {\n stats[node.level][0] += 1;\n } else {\n stats[node.level] = [1, 0];\n }\n\n if (node.material.visible) {\n stats[node.level][1] += 1;\n }\n }\n\n if (node.children) {\n var _iterator = _createForOfIteratorHelper(node.children),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var child = _step.value;\n countVisible(child, stats);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n } // update bar graph\n\n\n var stats = {};\n countVisible(tileLayer.object3d, stats);\n nbVisibleLabels.length = 0;\n nbVisibleData.length = 0;\n\n for (var level in stats) {\n if ({}.hasOwnProperty.call(stats, level)) {\n nbVisibleLabels[level] = \"\".concat(level);\n nbVisibleData[level] = stats[level][0];\n nbDisplayedData[level] = stats[level][1];\n }\n }\n\n if (displayed) {\n nbVisibleChart.update();\n }\n };\n\n this.resize = function () {\n nbVisibleChart.resize();\n };\n}","// TODO: move to GeometryLayer\nfunction addMaterialLayerProperty(layer, key, value) {\n layer.defineLayerProperty(key, value, function () {\n var root = layer.parent ? layer.parent.object3d : layer.object3d;\n root.traverse(function (object) {\n if (object.layer == layer && object.material) {\n object.material[key] = layer[key];\n } else if (object.content && object.content.layer == layer) {\n object.content.traverse(function (o) {\n if (o.material) {\n o.material[key] = layer[key];\n }\n });\n }\n });\n });\n}\n\nexport default {\n addWireFrameCheckbox: function addWireFrameCheckbox(gui, view, layer) {\n gui.add(layer, 'wireframe').name('Wireframe').onChange(function () {\n return view.notifyChange(layer);\n });\n },\n addMaterialSize: function addMaterialSize(gui, view, layer, begin, end) {\n addMaterialLayerProperty(layer, 'size', 1);\n gui.add(layer, 'size', begin, end).name('Size').onChange(function () {\n return view.notifyChange(layer);\n });\n },\n addMaterialLineWidth: function addMaterialLineWidth(gui, view, layer, begin, end) {\n addMaterialLayerProperty(layer, 'linewidth', 1);\n gui.add(layer, 'linewidth', begin, end).name('Line Width').onChange(function () {\n return view.notifyChange(layer);\n });\n },\n createGeometryDebugUI: function createGeometryDebugUI(datDebugTool, view, layer) {\n var gui = datDebugTool.addFolder(\"Layer \".concat(layer.id));\n gui.add(layer, 'visible').name('Visible').onChange(function () {\n return view.notifyChange(layer);\n });\n gui.add(layer, 'opacity', 0, 1).name('Opacity').onChange(function () {\n return view.notifyChange(layer);\n });\n return gui;\n }\n};","function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport * as THREE from 'three';\nimport TWEEN from '@tweenjs/tween.js';\nimport View from \"../../src/Core/View\";\nimport GeometryLayer from \"../../src/Layer/GeometryLayer\";\nimport { MAIN_LOOP_EVENTS } from \"../../src/Core/MainLoop\";\nimport ObjectRemovalHelper from \"../../src/Process/ObjectRemovalHelper\";\nimport TileObjectChart from \"./charts/TileObjectChart\";\nimport TileVisibilityChart from \"./charts/TileVisibilityChart\";\nimport GeometryDebug from \"./GeometryDebug\";\nimport Debug from \"./Debug\";\nimport OBBHelper from \"./OBBHelper\";\n\nfunction applyToNodeFirstMaterial(view, root, layer, cb) {\n root.traverse(function (object) {\n if (object.material && object.layer === layer) {\n cb(object.material);\n }\n });\n view.notifyChange();\n}\n\nvar selectedNode;\n/**\n * Select tile\n *\n * @param {View} view\n * @param {Object} mouseOrEvt - mouse position in window coordinates (0, 0 = top-left)\n * or MouseEvent or TouchEvent.\n * @param {boolean} [showInfo=true] Show tile information in console.\n * @return {TileMesh} Selected tile.\n */\n\nfunction selectTileAt(view, mouseOrEvt) {\n var showInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (selectedNode) {\n selectedNode.material.overlayAlpha = 0;\n selectedNode.material.showOutline = view.tileLayer.showOutline;\n view.notifyChange(selectedNode);\n }\n\n var picked = view.tileLayer.pickObjectsAt(view, mouseOrEvt);\n selectedNode = picked.length ? picked[0].object : undefined;\n\n if (selectedNode) {\n if (showInfo) {\n // eslint-disable-next-line no-console\n console.info(selectedNode);\n }\n\n selectedNode.material.overlayAlpha = 0.5;\n selectedNode.material.showOutline = true;\n view.notifyChange(selectedNode);\n }\n\n return selectedNode;\n}\n\nexport default function createTileDebugUI(datDebugTool, view, layer, debugInstance) {\n var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (!view.isDebugMode && !force) {\n return;\n }\n\n debugInstance = debugInstance || new Debug(view, datDebugTool);\n layer = layer || view.tileLayer;\n var gui = GeometryDebug.createGeometryDebugUI(datDebugTool, view, layer);\n var objectChardId = \"\".concat(layer.id, \"-nb-objects\");\n var canvasObjectChardId = debugInstance.createChartContainer(objectChardId);\n var visibleChardId = \"\".concat(layer.id, \"-nb-visible\");\n var canvasVisibleChardId = debugInstance.createChartContainer(visibleChardId);\n debugInstance.charts.push(new TileObjectChart(canvasObjectChardId.getContext('2d'), layer));\n debugInstance.charts.push(new TileVisibilityChart(canvasVisibleChardId.getContext('2d'), layer));\n layer.showOutline = false;\n layer.wireframe = false;\n var state = {\n objectChart: true,\n visibilityChart: true,\n sseHelper: false\n }; // tiles outline\n\n gui.add(layer, 'showOutline').name('Show tiles').onChange(function (newValue) {\n layer.showOutline = newValue;\n applyToNodeFirstMaterial(view, layer.object3d, layer, function (material) {\n material.showOutline = newValue;\n });\n }); // tiles wireframe\n\n gui.add(layer, 'wireframe').name('Wireframe').onChange(function () {\n view.notifyChange(layer);\n }); // TileObjectChart visibility\n\n gui.add(state, 'objectChart').name('Object chart').onChange(function (newValue) {\n if (newValue) {\n document.getElementById(objectChardId).parentNode.style.display = 'block';\n } else {\n document.getElementById(objectChardId).parentNode.style.display = 'none';\n }\n\n debugInstance.updateChartDivSize();\n debugInstance.charts.forEach(function (c) {\n return c.update();\n });\n }); // TileVisibilityChart visibility\n\n gui.add(state, 'visibilityChart').name('Visibility chart').onChange(function (newValue) {\n if (newValue) {\n document.getElementById(visibleChardId).parentNode.style.display = 'block';\n } else {\n document.getElementById(visibleChardId).parentNode.style.display = 'none';\n }\n\n debugInstance.updateChartDivSize();\n debugInstance.charts.forEach(function (c) {\n return c.update();\n });\n }); // Bounding box control\n\n var obb_layer_id = \"\".concat(layer.id, \"_obb_debug\");\n var sb_layer_id = \"\".concat(layer.id, \"_sb_debug\");\n var geometrySphere = new THREE.SphereGeometry(1, 16, 16);\n\n function debugIdUpdate(context, layer, node) {\n var enabled = context.camera.camera3D.layers.test({\n mask: 1 << layer.threejsLayer\n });\n\n if (!node.parent || !enabled) {\n ObjectRemovalHelper.removeChildrenAndCleanupRecursively(layer, node);\n return;\n }\n\n var helper = node.children.filter(function (n) {\n return n.layer && n.layer.id == layer.id;\n })[0];\n\n if (node.material && node.material.visible) {\n if (!helper) {\n // add the ability to hide all the debug obj for one layer at once\n var l = context.view.getLayerById(layer.id);\n var l3js = l.threejsLayer;\n\n if (layer.id == obb_layer_id) {\n helper = new OBBHelper(node.obb);\n\n if (helper.children[0]) {\n helper.children[0].layers.set(l3js);\n }\n } else if (layer.id == sb_layer_id) {\n var color = new THREE.Color(Math.random(), Math.random(), Math.random());\n var material = new THREE.MeshBasicMaterial({\n color: color.getHex(),\n wireframe: true\n });\n helper = new THREE.Mesh(geometrySphere, material);\n helper.position.copy(node.boundingSphere.center);\n helper.scale.multiplyScalar(node.boundingSphere.radius);\n }\n\n helper.layers.set(l3js);\n helper.layer = layer;\n node.add(helper);\n helper.updateMatrixWorld(true); // if we don't do that, our OBBHelper will never get removed,\n // because once a node is invisible, children are not removed\n // any more\n\n var hiddenHandler = node.material.addEventListener('hidden', function () {\n node.material.removeEventListener(hiddenHandler);\n var i = node.children.length;\n\n while (i--) {\n var c = node.children[i];\n\n if (c.layer === sb_layer_id) {\n if (c.dispose) {\n c.dispose();\n } else if (Array.isArray(c.material)) {\n var _iterator = _createForOfIteratorHelper(c.material),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _material = _step.value;\n\n _material.dispose();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n c.material.dispose();\n }\n\n node.children.splice(i, 1);\n }\n }\n });\n }\n\n if (layer.id == sb_layer_id) {\n helper.position.copy(node.boundingSphere.center);\n helper.scale.set(1, 1, 1).multiplyScalar(node.boundingSphere.radius);\n }\n\n helper.updateMatrixWorld(true);\n helper.visible = true;\n } else if (helper) {\n helper.visible = false;\n }\n }\n\n var obbLayer = new GeometryLayer(obb_layer_id, new THREE.Object3D(), {\n update: debugIdUpdate,\n visible: false,\n cacheLifeTime: Infinity,\n source: false\n });\n View.prototype.addLayer.call(view, obbLayer, layer).then(function (l) {\n gui.add(l, 'visible').name('Bounding boxes').onChange(function () {\n view.notifyChange(l);\n });\n });\n var sbLayer = new GeometryLayer(sb_layer_id, new THREE.Object3D(), {\n update: debugIdUpdate,\n visible: false,\n cacheLifeTime: Infinity,\n source: false\n });\n View.prototype.addLayer.call(view, sbLayer, layer).then(function (l) {\n gui.add(l, 'visible').name('Bounding Spheres').onChange(function () {\n view.notifyChange(l);\n });\n });\n var viewerDiv = document.getElementById('viewerDiv');\n var circle = document.createElement('span');\n circle.className = 'circleBase';\n viewerDiv.appendChild(circle);\n var centerNode = new THREE.Vector3();\n var actualNode;\n\n var animationFrameRequester = function () {\n TWEEN.update();\n view.notifyChange();\n };\n\n var removeAnimationRequester = function () {\n TWEEN.removeAll();\n\n if (view._frameRequesters[MAIN_LOOP_EVENTS.BEFORE_RENDER].includes(animationFrameRequester)) {\n view.removeFrameRequester(MAIN_LOOP_EVENTS.BEFORE_RENDER, animationFrameRequester);\n }\n };\n\n function picking(event) {\n var selectNode = selectTileAt(view, event, false);\n\n if (selectNode) {\n circle.style.display = 'table-cell';\n centerNode.copy(selectNode.boundingSphere.center).applyMatrix4(selectNode.matrixWorld);\n var project = centerNode.project(view.camera.camera3D);\n var coords = view.normalizedToViewCoords(project);\n var size = selectNode.screenSize;\n\n if (actualNode != selectNode) {\n var actualSize = Number(circle.style.width.replace('px', ''));\n actualNode = selectNode;\n removeAnimationRequester();\n new TWEEN.Tween({\n size: actualSize\n }).to({\n size: size\n }, 500).easing(TWEEN.Easing.Sinusoidal.In).easing(TWEEN.Easing.Exponential.Out).onUpdate(function (object) {\n circle.style['line-height'] = \"\".concat(object.size, \"px\");\n circle.style.width = \"\".concat(object.size, \"px\");\n circle.style.height = \"\".concat(object.size, \"px\");\n circle.innerHTML = \"\".concat(Math.floor(object.size), \" px\");\n circle.style.left = \"\".concat(coords.x - object.size * 0.5, \"px\");\n circle.style.top = \"\".concat(coords.y - object.size * 0.5, \"px\");\n }).onComplete(removeAnimationRequester).start();\n view.addFrameRequester(MAIN_LOOP_EVENTS.BEFORE_RENDER, animationFrameRequester);\n }\n } else {\n circle.style.display = 'none';\n }\n }\n\n gui.add(state, 'sseHelper').name('Sse helper').onChange(function (v) {\n if (v) {\n window.addEventListener('mousemove', picking, false);\n } else {\n circle.style.display = 'none';\n removeAnimationRequester();\n window.removeEventListener('mousemove', picking);\n }\n });\n var currKey = null;\n window.addEventListener('mousedown', function (event) {\n if (currKey == 83) {\n selectTileAt(view, event);\n }\n });\n window.addEventListener('keydown', function (event) {\n currKey = event.which;\n });\n window.addEventListener('keyup', function () {\n currKey = null;\n });\n}","import * as THREE from 'three';\nimport View from \"../../src/Core/View\";\nimport GeometryLayer from \"../../src/Layer/GeometryLayer\";\nimport GeometryDebug from \"./GeometryDebug\";\nimport OBBHelper from \"./OBBHelper\";\nvar bboxMesh = new THREE.Mesh();\nexport default function create3dTilesDebugUI(datDebugTool, view, _3dTileslayer) {\n var gui = GeometryDebug.createGeometryDebugUI(datDebugTool, view, _3dTileslayer);\n var regionBoundingBoxParent = new THREE.Group();\n view.scene.add(regionBoundingBoxParent); // add wireframe\n\n GeometryDebug.addWireFrameCheckbox(gui, view, _3dTileslayer); // Bounding box control\n\n var obb_layer_id = \"\".concat(_3dTileslayer.id, \"_obb_debug\");\n var obbLayer = new GeometryLayer(obb_layer_id, new THREE.Object3D(), {\n update: function (context, layer, node) {\n var enabled = context.camera.camera3D.layers.test({\n mask: 1 << layer.threejsLayer\n });\n\n if (!enabled) {\n return;\n }\n\n var metadata = node.userData.metadata;\n var helper = node.userData.obb;\n\n if (node.visible && metadata.boundingVolume) {\n if (!helper) {\n // 3dtiles with region\n if (metadata.boundingVolume.region) {\n helper = new OBBHelper(metadata.boundingVolume.region, \"id:\".concat(node.id));\n regionBoundingBoxParent.add(helper);\n helper.updateMatrixWorld(true); // 3dtiles with box\n } else if (metadata.boundingVolume.box) {\n bboxMesh.geometry.boundingBox = metadata.boundingVolume.box;\n helper = new THREE.BoxHelper(bboxMesh);\n helper.material.linewidth = 2; // 3dtiles with Sphere\n } else if (metadata.boundingVolume.sphere) {\n var geometry = new THREE.SphereGeometry(metadata.boundingVolume.sphere.radius, 32, 32);\n var material = new THREE.MeshBasicMaterial({\n wireframe: true\n });\n helper = new THREE.Mesh(geometry, material);\n helper.position.copy(metadata.boundingVolume.sphere.center);\n }\n\n if (helper) {\n helper.layer = layer; // add the ability to hide all the debug obj for one layer at once\n\n var l3js = layer.threejsLayer;\n helper.layers.set(l3js);\n\n if (helper.children.length) {\n helper.children[0].layers.set(l3js);\n }\n\n node.userData.obb = helper;\n helper.updateMatrixWorld();\n }\n\n if (helper && !metadata.boundingVolume.region) {\n // compensate B3dm orientation correction\n var gltfUpAxis = _3dTileslayer.tileset.asset.gltfUpAxis;\n\n if (gltfUpAxis === undefined || gltfUpAxis === 'Y') {\n helper.rotation.x = -Math.PI * 0.5;\n } else if (gltfUpAxis === 'X') {\n helper.rotation.z = -Math.PI * 0.5;\n } // Add helper to parent to apply the correct transformation\n\n\n node.parent.add(helper);\n helper.updateMatrix();\n helper.updateMatrixWorld(true);\n }\n }\n\n if (helper) {\n helper.visible = true;\n\n if (typeof helper.setMaterialVisibility === 'function') {\n helper.setMaterialVisibility(true);\n }\n }\n } else if (helper) {\n helper.visible = false;\n\n if (typeof helper.setMaterialVisibility === 'function') {\n helper.setMaterialVisibility(false);\n }\n }\n },\n visible: false,\n cacheLifeTime: Infinity,\n source: false\n });\n View.prototype.addLayer.call(view, obbLayer, _3dTileslayer).then(function (l) {\n gui.add(l, 'visible').name('Bounding boxes').onChange(function () {\n view.notifyChange(view.camera.camera3D);\n });\n }); // The sse Threshold for each tile\n\n gui.add(_3dTileslayer, 'sseThreshold', 0, 100).name('sseThreshold').onChange(function () {\n view.notifyChange(view.camera.camera3D);\n });\n}"],"names":["root","factory","exports","module","define","amd","self","requestAnimFrame","window","callback","requestAnimationFrame","throttled","fn","thisArg","updateFn","updateArgs","args","Array","prototype","slice","call","ticking","rest","apply","_alignStartEnd","align","start","end","uid","id","isNullOrUndef","value","isArray","type","Object","toString","substr","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","dimension","endsWith","parseFloat","each","loopable","reverse","i","len","keys","length","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","index","clone$1","source","map","target","create","klen","k","isValidKey","key","indexOf","_merger","options","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","indexOfDotOrLength","idx","resolveObjectKey","obj","pos","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","item","has","PI","Math","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","round","almostEquals","niceRange","pow","floor","fraction","isNumber","n","isNaN","x","y","epsilon","abs","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","e","p","distanceBetweenPoints","pt1","pt2","sqrt","_angleDiff","_normalizeAngle","_angleBetween","angle","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","atEdge","t","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","m","d","easeInOutBounce","A","B","C","D","E","F","c","f","hex","h1","h2","eq","v","lim","l","h","p2b","n2b","b2n","n2p","RGB_RE","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","r","g","calln","hsl2rgb","hue","map$1","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names$1","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","functionParse","exec","rgbParse","p1","p2","hwb2rgb","hsv2rgb","hueParse","Color","constructor","ret","unpacked","tkeys","j","ok","nk","replace","parseInt","unpack","transparent","toLowerCase","nameParse","this","_rgb","_valid","rgbString","hexString","isShort","hslString","mix","color","weight","me","c1","c2","w2","w1","alpha","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","index_esm","isPatternOrGradient","CanvasGradient","CanvasPattern","getHoverColor","overrides","descriptors","getScope$1","node","split","set","scope","values","defaults","_descriptors","animation","undefined","backgroundColor","borderColor","datasets","devicePixelRatio","context","chart","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","describe","get","override","route","name","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","enumerable","local","_scriptable","startsWith","_indexable","_fallback","_measureText","data","gc","longest","string","textWidth","measureText","width","push","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","splice","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","point","area","margin","left","right","top","bottom","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","text","opts","lines","strokeWidth","strokeColor","line","translation","fillStyle","textAlign","textBaseline","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","RegExp","FONT_STYLE","toLineHeight","matches","match","_readValueToProps","props","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","console","warn","toFontString","resolve","inputs","info","cacheable","createContext","parentContext","_lookup","table","cmp","mid","hi","lo","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","forEach","_arrayUnique","items","Set","add","from","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","Symbol","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","prefix","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","includes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","isScriptable","Error","join","delete","_resolveScriptable","isIndexable","arr","filter","resolver","_resolveArray","_resolveWithContext","allKeys","configurable","scriptable","indexable","_allKeys","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","points","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","d12","s01","s12","fa","fb","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","delta","iPixel","vPixel","monotoneCompute","splineCurveMonotone","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","positions","getPositionedStyle","styles","suffix","result","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","box","native","touches","offsetX","offsetY","shadowRoot","useOffsetPos","getBoundingClientRect","clientX","clientY","getCanvasPosition","round1","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","addEventListener","removeEventListener","readUsedSize","el","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","Map","formatNumber","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","propertyFn","between","compare","normalize","normalizeSegment","count","_boundSegment","segment","bounds","startBound","endBound","getSegment","prevValue","inside","subStart","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","animator","_request","_charts","_running","_lastDate","_notify","anims","date","callbacks","numSteps","duration","initial","currentStep","_refresh","_update","Date","now","remaining","running","draw","_active","_total","tick","pop","_getAnims","charts","complete","progress","listen","event","cb","reduce","acc","cur","_duration","stop","cancel","remove","interpolators","boolean","to","factor","c0","valid","number","Animation","cfg","currentValue","_fn","_easing","easing","_start","delay","_loop","_target","_prop","_from","_to","_promises","active","update","elapsed","remain","wait","promises","Promise","res","rej","resolved","method","animationOptions","colors","properties","numbers","resize","show","animations","visible","hide","Animations","config","_chart","_properties","configure","animatedProps","getOwnPropertyNames","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","all","awaitAll","then","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","shift","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$context","_syncList","initialize","linkScales","_stacked","addElements","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","defineProperty","base","object","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","parse","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","hidden","createStack","NEGATIVE_INFINITY","otherMin","otherMax","minDefined","maxDefined","getUserBounds","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","disabled","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","updateElement","updateSharedOptions","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","concat","sort","getAllScaleValues","curr","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","super","bars","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","last","grouped","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","_index_","offset","grid","_value_","beginAtZero","BubbleController","getPixelForDecimal","tooltip","title","DoughnutController","innerRadius","outerRadius","getter","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","aspectRatio","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_dataset","animationsDisabled","pointCount","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","scaleRangesChanged","_datasetIndex","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","display","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","DateAdapter","formats","timestamp","amount","unit","diff","startOf","weekday","endOf","members","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","optimizedEvaluateItems","position","handler","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","distance","getAxisItems","rangeMethod","intersectsItem","evaluateAllVisibleItems","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","params","layout","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","fullSize","setBoxDims","placeBoxes","userPadding","padding","placed","stackWeight","autoPadding","layouts","addBox","_layers","z","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","wrap","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","buildStacks","setLayoutDims","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","getMaximumSize","isAttached","updateConfig","BasicPlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","passive","removeListener","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","container","clientWidth","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","fromNativeEvent","addListener","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","bbWidth","bbHeight","margins","containerSize","containerStyle","containerBorder","containerPadding","clientHeight","getContainerSize","isConnected","Element","tooltipPosition","getProps","hasValue","final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","newTicks","majorStart","majorEnd","ceil","grace","drawBorder","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","_toLeftRightCenter","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","init","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","beforeUpdate","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","ticksLimit","maxTicksLimit","_tickSize","maxScale","maxChart","determineMaxTicks","majorIndices","enabled","getMajorIndices","numMajorIndices","first","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","labelPadding","_computeLabelArea","drawBackground","fillRect","findIndex","drawGrid","drawLine","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","titleX","titleY","titleArgs","tz","gz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","routes","propertyParts","sourceName","sourceScope","parts","routeDefaults","registerDefaults","unregister","registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getElement","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","error","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","Chart","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","timeout","clearTimeout","setTimeout","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_updateLayout","_updateDatasets","_eventHandler","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","_updateHoverStyles","replay","hoverOptions","deactivated","activated","eventFilter","_handleEvent","lastEvent","invalidatePlugins","clipArc","pixelMargin","angleMargin","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","angleDelta","o","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","parseBorderRadius$1","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","version","ArcElement","fullCircles","chartX","chartY","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","atan2","getAngleFromPoint","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","inner","lineJoin","drawFullCircleBorders","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","segmentOptions","findStartAndEnd","segments","chartContext","baseStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","doSplitByStyles","splitByStyles","solidSegments","_computeSegments","interpolate","sub","_boundSegments","_interpolate","_getInterpolationMethod","interpolated","segmentMethod","path","strokePathWithCache","strokePathDirect","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","outer","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","boundingRects","addRectPath","WeakMap","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","String","createTooltipItem","getTooltipSize","body","footer","boxWidth","boxHeight","bodyFont","titleFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","getTitle","beforeTitle","afterTitle","getBeforeBody","getBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","rtlHelper","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","usePointStyle","drawOptions","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","hasTooltipContent","globalAlpha","direction","original","getPropertyPriority","setProperty","prevTextDirection","overrideTextDirection","textDirection","restoreTextDirection","positionChanged","_positionChanged","handleEvent","CategoryScale","_startValue","_valueRange","_addedLabels","added","addedLabels","unshift","addIfString","lastIndexOf","findOrAddLabel","relativeLabelSize","minSpacing","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","generateTicks$1","LinearScale","isMajor","tickVal","LogarithmicScale","_zero","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","getTextAlignForAngle","yForAngle","pathRadiusLine","labelCount","getPointPosition","param","RadialLinearScale","drawingArea","_pointLabels","_pointLabelItems","furthestLimits","furthestAngles","valueCount","getPointLabelContext","plFont","textSize","hLimits","vLimits","_setReductions","tickBackdropHeight","outerDistance","extra","pointLabelPosition","buildPointLabelItems","fitWithPointLabels","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","time","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","gridLines","zeroLineColor","color_rose","color_blue","backgroundChartDiv","ThreeStatsChart","renderer","lastValidCompareIndex","textureDataset","pointRadius","geometryDataset","displayed","timeInS","lbl","memory","textures","geometries","_THREE$Box3Helper","OBBHelper","Derived","hasNativeReflectConstruct","_super","construct","sham","Boolean","valueOf","_isNativeReflectConstruct","Super","NewTarget","OBB","_this","random","box3D","getHex","obb","material","linewidth","frustumCulled","matrixAutoUpdate","rotationAutoUpdate","updateMatrixWorld","dispose","geometry","force","isEmpty","quaternion","copy","getCenter","applyQuaternion","getSize","multiplyScalar","updateMatrix","_createForOfIteratorHelper","allowArrayLike","it","iterator","minLen","_arrayLikeToArray","test","_unsupportedIterableToArray","done","_e","TypeError","err","normalCompletion","didErr","_e2","arr2","Debug","view","datDebugTool","chartDivContainer","createElement","cssText","appendChild","createChartContainer","mainLoop","gfxEngine","LatController","LongController","eventFolder","tileLayer","initialPosition","Coordinates","referenceCrs","geoPosition","gui","addFolder","state","displayCharts","eventsDebug","debugCameraWindow","startChart","endChart","updateDuration","onChange","newValue","addFrameRequester","removeFrameRequester","updateChartDivSize","notifyChange","renderCameraDebug","frozen","controls","crs","cursorWorldPosition","getCameraTargetPosition","camera","camera3D","cameraTargetListener","getPickingPositionFromDepth","eventToViewCoords","setFromVector3","as","latitude","toFixed","longitude","updateDisplay","open","domElement","removeFolder","helper","CameraHelper","debugCamera","fov","updateProjectionMatrix","fogDistance","layerAtmosphere","getLayerById","fog","scene","displayedTilesObb","displayedTilesObbHelper","updateFogDistance","clearColor","lookAtCameraDebug","Vector3","aspect","coord","extent","setFromExtent","altitudeCameraDebug","toVector3","worldToLocal","localToWorld","lookAt","object3d","_step","_iterator","level0Nodes","traverseVisible","getClearColor","setViewport","setScissor","setScissorTest","setClearColor","_step2","_iterator2","chartId","div","chartCanvas","_step3","_iterator3","getElementsByTagName","_step4","_iterator4","_div","initTools","layer","datUi","debugUI","dbgStickyNode","dbgDisplaySticky","dbgDisplayChildren","dbgDisplayParents","styleUI","picking","bboxes","displayedCount","stickies","group","children","pts","name1","name2","owner","boxHelper","attributes","TileObjectsChart","viewLevelStartDataset","viewUpdateDurationDataset","nbObjectsChart","_latestUpdateStartingLevel","TileVisibilityChart","nbVisibleLabels","nbVisibleData","nbDisplayedData","nbVisibleChart","stats","level","countVisible","addMaterialLayerProperty","defineLayerProperty","traverse","content","addWireFrameCheckbox","addMaterialSize","begin","addMaterialLineWidth","createGeometryDebugUI","applyToNodeFirstMaterial","selectedNode","selectTileAt","mouseOrEvt","showInfo","overlayAlpha","showOutline","picked","pickObjectsAt","createTileDebugUI","debugInstance","isDebugMode","GeometryDebug","objectChardId","canvasObjectChardId","visibleChardId","canvasVisibleChardId","wireframe","objectChart","visibilityChart","sseHelper","obb_layer_id","sb_layer_id","geometrySphere","obbLayer","GeometryLayer","debugIdUpdate","cacheLifeTime","View","sbLayer","viewerDiv","circle","className","actualNode","centerNode","animationFrameRequester","removeAnimationRequester","_frameRequesters","currKey","which","mask","threejsLayer","l3js","boundingSphere","hiddenHandler","ObjectRemovalHelper","selectNode","applyMatrix4","matrixWorld","project","coords","normalizedToViewCoords","screenSize","actualSize","onUpdate","innerHTML","bboxMesh","create3dTilesDebugUI","_3dTileslayer","regionBoundingBoxParent","metadata","userData","boundingVolume","region","boundingBox","sphere","gltfUpAxis","tileset","asset","setMaterialVisibility"],"sourceRoot":""}
|