“ast”:null,“code”:“function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }nn/*n Highcharts JS v7.2.0 (2019-09-03)nn © 2009-2018 Torstein Honsinn License: www.highcharts.com/licensen*/n(function (P, N) {n "object" === (typeof module === "undefined" ? "undefined" : _typeof(module)) && module.exports ? (N["default"] = N, module.exports = P.document ? N(P) : N) : "function" === typeof define && define.amd ? define("highcharts/highcharts", function () {n return N(P);n }) : (P.Highcharts && P.Highcharts.error(16, !0), P.Highcharts = N(P));n})("undefined" !== typeof window ? window : this, function (P) {n function N(c, n, A, D) {n c.hasOwnProperty(n) || (c[n] = D.apply(null, A));n }nn var H = {};n N(H, "parts/Globals.js", [], function () {n var c = "undefined" !== typeof P ? P : "undefined" !== typeof window ? window : {},n n = c.document,n A = c.navigator && c.navigator.userAgent || "",n D = n && n.createElementNS && !!n.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect,n F = /(edge|msie|trident)/i.test(A) && !c.opera,n z = -1 !== A.indexOf("Firefox"),n u = -1 !== A.indexOf("Chrome"),n L = z && 4 > parseInt(A.split("Firefox/")[1], 10);n return {n product: "Highcharts",n version: "7.2.0",n deg2rad: 2 * Math.PI / 360,n doc: n,n hasBidiBug: L,n hasTouch: !!c.TouchEvent,n isMS: F,n isWebKit: -1 !== A.indexOf("AppleWebKit"),n isFirefox: z,n isChrome: u,n isSafari: !u && -1 !== A.indexOf("Safari"),n isTouchDevice: /(Mobile|Android|Windows Phone)/.test(A),n SVG_NS: "http://www.w3.org/2000/svg",n chartCount: 0,n seriesTypes: {},n symbolSizes: {},n svg: D,n win: c,n marginNames: ["plotTop", "marginRight", "marginBottom", "plotLeft"],n noop: function noop() {},n charts: [],n dateFormats: {}n };n });n N(H, "parts/Utilities.js", [H["parts/Globals.js"]], function © {n function n(b, a) {n return parseInt(b, a || 10);n }nn function A(b) {n return "string" === typeof b;n }nn function D(b) {n b = Object.prototype.toString.call(b);n return "[object Array]" === b || "[object Array Iterator]" === b;n }nn function F(b, a) {n return !!b && "object" === _typeof(b) && (!a || !D(b));n }nn function z(b) {n return F(b) && "number" === typeof b.nodeType;n }nn function u(b) {n var a = b && b.constructor;n return !(!F(b, !0) || z(b) || !a || !a.name || "Object" === a.name);n }nn function L(b) {n return "number" === typeof b && !isNaN(b) && Infinity > b && -Infinity < b;\n }\n\n function y(b) {\n return \"undefined\" !== typeof b && null !== b;\n }\n\n function C(b, a, d) {\n var f;\n A(a) ? y(d) ? b.setAttribute(a, d) : b && b.getAttribute && ((f = b.getAttribute(a)) || \"class\" !== a || (f = b.getAttribute(a + \"Name\"))) : x(a, function (a, d) {\n b.setAttribute(d, a);\n });\n return f;\n }\n\n function x(b, a, d) {\n for (var f in b) {\n Object.hasOwnProperty.call(b, f) && a.call(d || b[f], b[f], f, b);\n }\n }\n\n c.timers = [];\n var m = c.charts,\n p = c.doc,\n g = c.win;\n\n c.error = function (b, a, d) {\n var f = L(b) ? \"Highcharts error #\" + b + \": www.highcharts.com/errors/\" + b : b,\n e = function e() {\n if (a) throw Error(f);\n g.console && console.log(f);\n };\n\n d ? c.fireEvent(d, \"displayError\", {\n code: b,\n message: f\n }, e) : e();\n };\n\n c.Fx = function (b, a, d) {\n this.options = a;\n this.elem = b;\n this.prop = d;\n };\n\n c.Fx.prototype = {\n dSetter: function dSetter() {\n var b = this.paths[0],\n a = this.paths[1],\n d = [],\n f = this.now,\n e = b.length;\n if (1 === f) d = this.toD;else if (e === a.length && 1 > f) for (; e–;) {n var c = parseFloat(b[e]);n d[e] = isNaN© ? a[e] : f * parseFloat("" + (a[e] - c)) + c;n } else d = a;n this.elem.attr("d", d, null, !0);n },n update: function update() {n var b = this.elem,n a = this.prop,n d = this.now,n f = this.options.step;n if (this[a + "Setter"]) this[a + "Setter"]();else b.attr ? b.element && b.attr(a, d, null, !0) : b.style[a] = d + this.unit;n f && f.call(b, d, this);n },n run: function run(b, a, d) {n var f = this,n e = f.options,n h = function h(a) {n return h.stopped ? !1 : f.step(a);n },n r = g.requestAnimationFrame || function (a) {n setTimeout(a, 13);n },n E = function E() {n for (var a = 0; a < c.timers.length; a++) {\n c.timers[a]() || c.timers.splice(a--, 1);\n }\n\n c.timers.length && r(E);\n };\n\n b !== a || this.elem[\"forceAnimate:\" + this.prop] ? (this.startTime = +new Date(), this.start = b, this.end = a, this.unit = d, this.now = this.start, this.pos = 0, h.elem = this.elem, h.prop = this.prop, h() && 1 === c.timers.push(h) && r(E)) : (delete e.curAnim[this.prop], e.complete && 0 === Object.keys(e.curAnim).length && e.complete.call(this.elem));\n },\n step: function step(b) {\n var a = +new Date(),\n d = this.options,\n f = this.elem,\n e = d.complete,\n c = d.duration,\n r = d.curAnim;\n if (f.attr && !f.element) b = !1;else if (b || a >= c + this.startTime) {n this.now = this.end;n this.pos = 1;n this.update();n var E = r[this.prop] = !0;n x(r, function (a) {n !0 !== a && (E = !1);n });n E && e && e.call(f);n b = !1;n } else this.pos = d.easing((a - this.startTime) / c), this.now = this.start + (this.end - this.start) * this.pos, this.update(), b = !0;n return b;n },n initPath: function initPath(b, a, d) {n function f(a) {n for (t = a.length; t–;) {n var b = "M" === a[t] || "L" === a[t];n var d = /[a-zA-Z]/.test(a[t + 3]);n b && d && a.splice(t + 1, 0, a[t + 1], a[t + 2], a[t + 1], a[t + 2]);n }n }nn function e(a, b) {n for (; a.length < J;) {\n a[0] = b[J - a.length];\n var d = a.slice(0, v);\n [].splice.apply(a, [0, 0].concat(d));\n B && (d = a.slice(a.length - v), [].splice.apply(a, [a.length, 0].concat(d)), t--);\n }\n\n a[0] = \"M\";\n }\n\n function c(a, b) {\n for (var d = (J - a.length) / v; 0 < d && d--;) {\n k = a.slice().splice(a.length / I - v, v * I), k[0] = b[J - v - d * v], q && (k[v - 6] = k[v - 2], k[v - 5] = k[v - 1]), [].splice.apply(a, [a.length / I, 0].concat(k)), B && d--;\n }\n }\n\n a = a || \"\";\n var r = b.startX,\n E = b.endX,\n q = -1 < a.indexOf(\"C\"),\n v = q ? 7 : 3,\n k,\n t;\n a = a.split(\" \");\n d = d.slice();\n var B = b.isArea,\n I = B ? 2 : 1;\n q && (f(a), f(d));\n\n if (r && E) {\n for (t = 0; t < r.length; t++) {\n if (r[t] === E[0]) {\n var w = t;\n break;\n } else if (r[0] === E[E.length - r.length + t]) {\n w = t;\n var l = !0;\n break;\n } else if (r[r.length - 1] === E[E.length - r.length + t]) {\n w = r.length - t;\n break;\n }\n }\n\n \"undefined\" === typeof w && (a = []);\n }\n\n if (a.length && L(w)) {\n var J = d.length + w * I * v;\n l ? (e(a, d), c(d, a)) : (e(d, a), c(a, d));\n }\n\n return [a, d];\n },\n fillSetter: function fillSetter() {\n c.Fx.prototype.strokeSetter.apply(this, arguments);\n },\n strokeSetter: function strokeSetter() {\n this.elem.attr(this.prop, c.color(this.start).tweenTo(c.color(this.end), this.pos), null, !0);\n }\n };\n\n c.merge = function () {\n var b,\n a = arguments,\n d = {},\n f = function f(a, b) {\n \"object\" !== _typeof(a) && (a = {});\n x(b, function (d, e) {\n !F(d, !0) || u(d) || z(d) ? a[e] = b[e] : a[e] = f(a[e] || {}, d);\n });\n return a;\n };\n\n !0 === a[0] && (d = a[1], a = Array.prototype.slice.call(a, 2));\n var e = a.length;\n\n for (b = 0; b < e; b++) {\n d = f(d, a[b]);\n }\n\n return d;\n };\n\n c.syncTimeout = function (b, a, d) {\n if (a) return setTimeout(b, a, d);\n b.call(0, d);\n };\n\n c.clearTimeout = function (b) {\n y(b) && clearTimeout(b);\n };\n\n c.extend = function (b, a) {\n var d;\n b || (b = {});\n\n for (d in a) {\n b[d] = a[d];\n }\n\n return b;\n };\n\n c.pick = function () {\n var b = arguments,\n a,\n d = b.length;\n\n for (a = 0; a < d; a++) {\n var f = b[a];\n if (\"undefined\" !== typeof f && null !== f) return f;\n }\n };\n\n c.css = function (b, a) {\n c.isMS && !c.svg && a && \"undefined\" !== typeof a.opacity && (a.filter = \"alpha(opacity=\" + 100 * a.opacity + \")\");\n c.extend(b.style, a);\n };\n\n c.createElement = function (b, a, d, f, e) {\n b = p.createElement(b);\n var h = c.css;\n a && c.extend(b, a);\n e && h(b, {\n padding: \"0\",\n border: \"none\",\n margin: \"0\"\n });\n d && h(b, d);\n f && f.appendChild(b);\n return b;\n };\n\n c.extendClass = function (b, a) {\n var d = function d() {};\n\n d.prototype = new b();\n c.extend(d.prototype, a);\n return d;\n };\n\n c.pad = function (b, a, d) {\n return Array((a || 2) + 1 - String(b).replace(\"-\", \"\").length).join(d || \"0\") + b;\n };\n\n c.relativeLength = function (b, a, d) {\n return /%$/.test(b) ? a * parseFloat(b) / 100 + (d || 0) : parseFloat(b);\n };\n\n c.wrap = function (b, a, d) {\n var f = b[a];\n\n b[a] = function () {\n var a = Array.prototype.slice.call(arguments),\n b = arguments,\n c = this;\n\n c.proceed = function () {\n f.apply(c, arguments.length ? arguments : b);\n };\n\n a.unshift(f);\n a = d.apply(this, a);\n c.proceed = null;\n return a;\n };\n };\n\n c.datePropsToTimestamps = function (b) {\n x(b, function (a, d) {\n F(a) && \"function\" === typeof a.getTime ? b[d] = a.getTime() : (F(a) || D(a)) && c.datePropsToTimestamps(a);\n });\n };\n\n c.formatSingle = function (b, a, d) {\n var f = /\\.([0-9])/,\n e = c.defaultOptions.lang;\n /f$/.test(b) ? (d = (d = b.match(f)) ? d[1] : -1, null !== a && (a = c.numberFormat(a, d, e.decimalPoint, -1 < b.indexOf(\",\") ? e.thousandsSep : \"\"))) : a = (d || c.time).dateFormat(b, a);\n return a;\n };\n\n c.format = function (b, a, d) {\n for (var f = \"{\", e = !1, h, r, E, q, v = [], k; b;) {\n f = b.indexOf(f);\n if (-1 === f) break;\n h = b.slice(0, f);\n\n if (e) {\n h = h.split(\":\");\n r = h.shift().split(\".\");\n q = r.length;\n k = a;\n\n for (E = 0; E < q; E++) {\n k && (k = k[r[E]]);\n }\n\n h.length && (k = c.formatSingle(h.join(\":\"), k, d));\n v.push(k);\n } else v.push(h);\n\n b = b.slice(f + 1);\n f = (e = !e) ? \"}\" : \"{\";\n }\n\n v.push(b);\n return v.join(\"\");\n };\n\n c.getMagnitude = function (b) {\n return Math.pow(10, Math.floor(Math.log(b) / Math.LN10));\n };\n\n c.normalizeTickInterval = function (b, a, d, f, e) {\n var h = b;\n d = c.pick(d, 1);\n var r = b / d;\n a || (a = e ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] : [1, 2, 2.5, 5, 10], !1 === f && (1 === d ? a = a.filter(function (a) {\n return 0 === a % 1;\n }) : .1 >= d && (a = [1 / d])));nn for (f = 0; f < a.length && !(h = a[f], e && h * d >= b || !e && r <= (a[f] + (a[f + 1] || a[f])) / 2); f++) {\n ;\n }\n\n return h = c.correctFloat(h * d, -Math.round(Math.log(.001) / Math.LN10));\n };\n\n c.stableSort = function (b, a) {\n var d = b.length,\n f,\n e;\n\n for (e = 0; e < d; e++) {\n b[e].safeI = e;\n }\n\n b.sort(function (b, d) {\n f = a(b, d);\n return 0 === f ? b.safeI - d.safeI : f;\n });\n\n for (e = 0; e < d; e++) {\n delete b[e].safeI;\n }\n };\n\n c.arrayMin = function (b) {\n for (var a = b.length, d = b[0]; a--;) {\n b[a] < d && (d = b[a]);\n }\n\n return d;\n };\n\n c.arrayMax = function (b) {\n for (var a = b.length, d = b[0]; a--;) {\n b[a] > d && (d = b[a]);n }nn return d;n };nn c.destroyObjectProperties = function (b, a) {n x(b, function (d, f) {n d && d !== a && d.destroy && d.destroy();n delete b[f];n });n };nn c.discardElement = function (b) {n var a = c.garbageBin;n a || (a = c.createElement("div"));n b && a.appendChild(b);n a.innerHTML = "";n };nn c.correctFloat = function (b, a) {n return parseFloat(b.toPrecision(a || 14));n };nn c.setAnimation = function (b, a) {n a.renderer.globalAnimation = c.pick(b, a.options.chart.animation, !0);n };nn c.animObject = function (b) {n return F(b) ? c.merge(b) : {n duration: b ? 500 : 0n };n };nn c.timeUnits = {n millisecond: 1,n second: 1E3,n minute: 6E4,n hour: 36E5,n day: 864E5,n week: 6048E5,n month: 24192E5,n year: 314496E5n };nn c.numberFormat = function (b, a, d, f) {n b = +b || 0;n a = +a;n var e = c.defaultOptions.lang,n h = (b.toString().split(".")[1] || "").split("e")[0].length,n r = b.toString().split("e");n if (-1 === a) a = Math.min(h, 20);else if (!L(a)) a = 2;else if (a && r[1] && 0 > r[1]) {n var m = a + +r[1];n 0 <= m ? (r[0] = (+r[0]).toExponential(m).split(\"e\")[0], a = m) : (r[0] = r[0].split(\".\")[0] || 0, b = 20 > a ? (r[0] * Math.pow(10, r[1])).toFixed(a) : 0, r[1] = 0);n }n var q = (Math.abs(r[1] ? r[0] : b) + Math.pow(10, -Math.max(a, h) - 1)).toFixed(a);n h = String(n(q));n m = 3 < h.length ? h.length % 3 : 0;\n d = c.pick(d, e.decimalPoint);\n f = c.pick(f, e.thousandsSep);\n b = (0 > b ? "-" : "") + (m ? h.substr(0, m) + f : "");n b += h.substr(m).replace(/(\d{3})(?=\d)/g, "$1" + f);n a && (b += d + q.slice(-a));n r[1] && 0 !== +b && (b += "e" + r[1]);n return b;n };nn Math.easeInOutSine = function (b) {n return -.5 * (Math.cos(Math.PI * b) - 1);n };nn c.getStyle = function (b, a, d) {n if ("width" === a) return a = Math.min(b.offsetWidth, b.scrollWidth), d = b.getBoundingClientRect && b.getBoundingClientRect().width, d < a && d >= a - 1 && (a = Math.floor(d)), Math.max(0, a - c.getStyle(b, "padding-left") - c.getStyle(b, "padding-right"));n if ("height" === a) return Math.max(0, Math.min(b.offsetHeight, b.scrollHeight) - c.getStyle(b, "padding-top") - c.getStyle(b, "padding-bottom"));n g.getComputedStyle || c.error(27, !0);n if (b = g.getComputedStyle(b, void 0)) b = b.getPropertyValue(a), c.pick(d, "opacity" !== a) && (b = n(b));n return b;n };nn c.inArray = function (b, a, d) {n return a.indexOf(b, d);n };nn c.find = Array.prototype.find ? function (b, a) {n return b.find(a);n } : function (b, a) {n var d,n f = b.length;nn for (d = 0; d < f; d++) {\n if (a(b[d], d)) return b[d];\n }\n };\n c.keys = Object.keys;\n\n c.offset = function (b) {\n var a = p.documentElement;\n b = b.parentElement || b.parentNode ? b.getBoundingClientRect() : {\n top: 0,\n left: 0\n };\n return {\n top: b.top + (g.pageYOffset || a.scrollTop) - (a.clientTop || 0),\n left: b.left + (g.pageXOffset || a.scrollLeft) - (a.clientLeft || 0)\n };\n };\n\n c.stop = function (b, a) {\n for (var d = c.timers.length; d--;) {\n c.timers[d].elem !== b || a && a !== c.timers[d].prop || (c.timers[d].stopped = !0);\n }\n };\n\n x({\n map: \"map\",\n each: \"forEach\",\n grep: \"filter\",\n reduce: \"reduce\",\n some: \"some\"\n }, function (b, a) {\n c[a] = function (a) {\n return Array.prototype[b].apply(a, [].slice.call(arguments, 1));\n };\n });\n\n c.addEvent = function (b, a, d, f) {\n void 0 === f && (f = {});\n var e = b.addEventListener || c.addEventListenerPolyfill;\n var h = \"function\" === typeof b && b.prototype ? b.prototype.protoEvents = b.prototype.protoEvents || {} : b.hcEvents = b.hcEvents || {};\n c.Point && b instanceof c.Point && b.series && b.series.chart && (b.series.chart.runTrackerClick = !0);\n e && e.call(b, a, d, !1);\n h[a] || (h[a] = []);\n h[a].push({\n fn: d,\n order: \"number\" === typeof f.order ? f.order : Infinity\n });\n h[a].sort(function (a, b) {\n return a.order - b.order;\n });\n return function () {\n c.removeEvent(b, a, d);\n };\n };\n\n c.removeEvent = function (b, a, d) {\n function f(a, d) {\n var e = b.removeEventListener || c.removeEventListenerPolyfill;\n e && e.call(b, a, d, !1);\n }\n\n function e(d) {\n var e;\n\n if (b.nodeName) {\n if (a) {\n var c = {};\n c[a] = !0;\n } else c = d;\n\n x(c, function (a, b) {\n if (d[b]) for (e = d[b].length; e--;) {\n f(b, d[b][e].fn);\n }\n });\n }\n }\n\n var h;\n [\"protoEvents\", \"hcEvents\"].forEach(function (c) {\n var r = b[c];\n r && (a ? (h = r[a] || [], d ? (r[a] = h.filter(function (a) {\n return d !== a.fn;\n }), f(a, d)) : (e(r), r[a] = [])) : (e(r), b[c] = {}));\n });\n };\n\n c.fireEvent = function (b, a, d, f) {\n var e;\n d = d || {};\n\n if (p.createEvent && (b.dispatchEvent || b.fireEvent)) {\n var h = p.createEvent(\"Events\");\n h.initEvent(a, !0, !0);\n c.extend(h, d);\n b.dispatchEvent ? b.dispatchEvent(h) : b.fireEvent(a, h);\n } else d.target || c.extend(d, {\n preventDefault: function preventDefault() {\n d.defaultPrevented = !0;\n },\n target: b,\n type: a\n }), function (a, f) {\n void 0 === a && (a = []);\n void 0 === f && (f = []);\n var c = 0,\n h = 0,\n k = a.length + f.length;\n\n for (e = 0; e < k; e++) {\n !1 === (a[c] ? f[h] ? a[c].order <= f[h].order ? a[c++] : f[h++] : a[c++] : f[h++]).fn.call(b, d) && d.preventDefault();\n }\n }(b.protoEvents && b.protoEvents[a], b.hcEvents && b.hcEvents[a]);\n\n f && !d.defaultPrevented && f.call(b, d);\n };\n\n c.animate = function (b, a, d) {\n var f,\n e = \"\",\n h,\n r;\n\n if (!F(d)) {\n var m = arguments;\n d = {\n duration: m[2],\n easing: m[3],\n complete: m[4]\n };\n }\n\n L(d.duration) || (d.duration = 400);\n d.easing = \"function\" === typeof d.easing ? d.easing : Math[d.easing] || Math.easeInOutSine;\n d.curAnim = c.merge(a);\n x(a, function (q, v) {\n c.stop(b, v);\n r = new c.Fx(b, d, v);\n h = null;\n \"d\" === v ? (r.paths = r.initPath(b, b.d, a.d), r.toD = a.d, f = 0, h = 1) : b.attr ? f = b.attr(v) : (f = parseFloat(c.getStyle(b, v)) || 0, \"opacity\" !== v && (e = \"px\"));\n h || (h = q);\n h && h.match && h.match(\"px\") && (h = h.replace(/px/g, \"\"));\n r.run(f, h, e);\n });\n };\n\n c.seriesType = function (b, a, d, f, e) {\n var h = c.getOptions(),\n r = c.seriesTypes;\n h.plotOptions[b] = c.merge(h.plotOptions[a], d);\n r[b] = c.extendClass(r[a] || function () {}, f);\n r[b].prototype.type = b;\n e && (r[b].prototype.pointClass = c.extendClass(c.Point, e));\n return r[b];\n };\n\n c.uniqueKey = function () {\n var b = Math.random().toString(36).substring(2, 9),\n a = 0;\n return function () {\n return \"highcharts-\" + b + \"-\" + a++;\n };\n }();\n\n c.isFunction = function (b) {\n return \"function\" === typeof b;\n };\n\n g.jQuery && (g.jQuery.fn.highcharts = function () {\n var b = [].slice.call(arguments);\n if (this[0]) return b[0] ? (new c[A(b[0]) ? b.shift() : \"Chart\"](this[0], b[0], b[1]), this) : m[C(this[0], \"data-highcharts-chart\")];\n });\n return {\n attr: C,\n defined: y,\n erase: function erase(b, a) {\n for (var d = b.length; d--;) {\n if (b[d] === a) {\n b.splice(d, 1);\n break;\n }\n }\n },\n isArray: D,\n isClass: u,\n isDOMElement: z,\n isNumber: L,\n isObject: F,\n isString: A,\n objectEach: x,\n pInt: n,\n splat: function splat(b) {\n return D(b) ? b : [b];\n }\n };\n });\n N(H, \"parts/Color.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.isNumber,\n D = n.pInt,\n F = c.merge;\n\n c.Color = function (z) {\n if (!(this instanceof c.Color)) return new c.Color(z);\n this.init(z);\n };\n\n c.Color.prototype = {\n parsers: [{\n regex: /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,\n parse: function parse(c) {\n return [D(c[1]), D(c[2]), D(c[3]), parseFloat(c[4], 10)];\n }\n }, {\n regex: /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,\n parse: function parse(c) {\n return [D(c[1]), D(c[2]), D(c[3]), 1];\n }\n }],\n names: {\n white: \"#ffffff\",\n black: \"#000000\"\n },\n init: function init(z) {\n var u, n;\n if ((this.input = z = this.names[z && z.toLowerCase ? z.toLowerCase() : \"\"] || z) && z.stops) this.stops = z.stops.map(function (x) {\n return new c.Color(x[1]);\n });else {\n if (z && z.charAt && \"#\" === z.charAt()) {\n var y = z.length;\n z = parseInt(z.substr(1), 16);\n 7 === y ? u = [(z & 16711680) >> 16, (z & 65280) >> 8, z & 255, 1] : 4 === y && (u = [(z & 3840) >> 4 | (z & 3840) >> 8, (z & 240) >> 4 | z & 240, (z & 15) << 4 | z & 15, 1]);\n }\n\n if (!u) for (n = this.parsers.length; n-- && !u;) {\n var C = this.parsers[n];\n (y = C.regex.exec(z)) && (u = C.parse(y));\n }\n }\n this.rgba = u || [];\n },\n get: function get(c) {\n var u = this.input,\n z = this.rgba;\n\n if (this.stops) {\n var y = F(u);\n y.stops = [].concat(y.stops);\n this.stops.forEach(function (u, x) {\n y.stops[x] = [y.stops[x][0], u.get(c)];\n });\n } else y = z && A(z[0]) ? \"rgb\" === c || !c && 1 === z[3] ? \"rgb(\" + z[0] + \",\" + z[1] + \",\" + z[2] + \")\" : \"a\" === c ? z[3] : \"rgba(\" + z.join(\",\") + \")\" : u;\n\n return y;\n },\n brighten: function brighten(c) {\n var u,\n z = this.rgba;\n if (this.stops) this.stops.forEach(function (u) {\n u.brighten(c);\n });else if (A(c) && 0 !== c) for (u = 0; 3 > u; u++) {n z[u] += D(255 * c), 0 > z[u] && (z[u] = 0), 255 < z[u] && (z[u] = 255);\n }\n return this;\n },\n setOpacity: function setOpacity(c) {\n this.rgba[3] = c;\n return this;\n },\n tweenTo: function tweenTo(c, u) {\n var z = this.rgba,\n y = c.rgba;\n y.length && z && z.length ? (c = 1 !== y[3] || 1 !== z[3], u = (c ? \"rgba(\" : \"rgb(\") + Math.round(y[0] + (z[0] - y[0]) * (1 - u)) + \",\" + Math.round(y[1] + (z[1] - y[1]) * (1 - u)) + \",\" + Math.round(y[2] + (z[2] - y[2]) * (1 - u)) + (c ? \",\" + (y[3] + (z[3] - y[3]) * (1 - u)) : \"\") + \")\") : u = c.input || \"none\";\n return u;\n }\n };\n\n c.color = function (z) {\n return new c.Color(z);\n };\n });\n N(H, \"parts/SvgRenderer.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.attr,\n D = n.defined,\n F = n.erase,\n z = n.isArray,\n u = n.isNumber,\n L = n.isObject,\n y = n.isString,\n C = n.objectEach,\n x = n.pInt,\n m = n.splat,\n p = c.addEvent,\n g = c.animate,\n b = c.charts,\n a = c.color,\n d = c.css,\n f = c.createElement,\n e = c.deg2rad,\n h = c.destroyObjectProperties,\n r = c.doc,\n E = c.extend,\n q = c.hasTouch,\n v = c.isFirefox,\n k = c.isMS,\n t = c.isWebKit,\n B = c.merge,\n I = c.noop,\n w = c.pick,\n l = c.removeEvent,\n J = c.stop,\n K = c.svg,\n T = c.SVG_NS,\n R = c.symbolSizes,\n S = c.win;\n\n var M = c.SVGElement = function () {\n return this;\n };\n\n E(M.prototype, {\n opacity: 1,\n SVG_NS: T,\n textProps: \"direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline cursor\".split(\" \"),\n init: function init(a, b) {\n this.element = \"span\" === b ? f(b) : r.createElementNS(this.SVG_NS, b);\n this.renderer = a;\n c.fireEvent(this, \"afterInit\");\n },\n animate: function animate(a, b, d) {\n var G = c.animObject(w(b, this.renderer.globalAnimation, !0));\n w(r.hidden, r.msHidden, r.webkitHidden, !1) && (G.duration = 0);\n 0 !== G.duration ? (d && (G.complete = d), g(this, a, G)) : (this.attr(a, void 0, d), C(a, function (a, b) {\n G.step && G.step.call(this, a, {\n prop: b,\n pos: 1\n });\n }, this));\n return this;\n },\n complexColor: function complexColor(a, b, d) {\n var G = this.renderer,\n l,\n w,\n e,\n f,\n k,\n O,\n t,\n h,\n J,\n K,\n r,\n Q = [],\n M;\n c.fireEvent(this.renderer, \"complexColor\", {\n args: arguments\n }, function () {\n a.radialGradient ? w = \"radialGradient\" : a.linearGradient && (w = \"linearGradient\");\n w && (e = a[w], k = G.gradients, t = a.stops, K = d.radialReference, z(e) && (a[w] = e = {\n x1: e[0],\n y1: e[1],\n x2: e[2],\n y2: e[3],\n gradientUnits: \"userSpaceOnUse\"\n }), \"radialGradient\" === w && K && !D(e.gradientUnits) && (f = e, e = B(e, G.getRadialAttr(K, f), {\n gradientUnits: \"userSpaceOnUse\"\n })), C(e, function (a, G) {\n \"id\" !== G && Q.push(G, a);\n }), C(t, function (a) {\n Q.push(a);\n }), Q = Q.join(\",\"), k[Q] ? r = k[Q].attr(\"id\") : (e.id = r = c.uniqueKey(), k[Q] = O = G.createElement(w).attr(e).add(G.defs), O.radAttr = f, O.stops = [], t.forEach(function (a) {\n 0 === a[1].indexOf(\"rgba\") ? (l = c.color(a[1]), h = l.get(\"rgb\"), J = l.get(\"a\")) : (h = a[1], J = 1);\n a = G.createElement(\"stop\").attr({\n offset: a[0],\n \"stop-color\": h,\n \"stop-opacity\": J\n }).add(O);\n O.stops.push(a);\n })), M = \"url(\" + G.url + \"#\" + r + \")\", d.setAttribute(b, M), d.gradient = Q, a.toString = function () {\n return M;\n });\n });\n },\n applyTextOutline: function applyTextOutline(a) {\n var b = this.element,\n G;\n -1 !== a.indexOf(\"contrast\") && (a = a.replace(/contrast/g, this.renderer.getContrast(b.style.fill)));\n a = a.split(\" \");\n var d = a[a.length - 1];\n\n if ((G = a[0]) && \"none\" !== G && c.svg) {\n this.fakeTS = !0;\n a = [].slice.call(b.getElementsByTagName(\"tspan\"));\n this.ySetter = this.xSetter;\n G = G.replace(/(^[\\d\\.]+)(.*?)$/g, function (a, b, G) {\n return 2 * b + G;\n });\n this.removeTextOutline(a);\n var w = b.firstChild;\n a.forEach(function (a, l) {\n 0 === l && (a.setAttribute(\"x\", b.getAttribute(\"x\")), l = b.getAttribute(\"y\"), a.setAttribute(\"y\", l || 0), null === l && b.setAttribute(\"y\", 0));\n a = a.cloneNode(1);\n A(a, {\n \"class\": \"highcharts-text-outline\",\n fill: d,\n stroke: d,\n \"stroke-width\": G,\n \"stroke-linejoin\": \"round\"\n });\n b.insertBefore(a, w);\n });\n }\n },\n removeTextOutline: function removeTextOutline(a) {\n for (var b = a.length, G; b--;) {\n G = a[b], \"highcharts-text-outline\" === G.getAttribute(\"class\") && F(a, this.element.removeChild(G));\n }\n },\n symbolCustomAttribs: \"x y width height r start end innerR anchorX anchorY rounded\".split(\" \"),\n attr: function attr(a, b, d, l) {\n var G = this.element,\n w,\n e = this,\n f,\n k,\n O = this.symbolCustomAttribs;\n\n if (\"string\" === typeof a && void 0 !== b) {\n var t = a;\n a = {};\n a[t] = b;\n }\n\n \"string\" === typeof a ? e = (this[a + \"Getter\"] || this._defaultGetter).call(this, a, G) : (C(a, function (b, d) {\n f = !1;\n l || J(this, d);\n this.symbolName && -1 !== c.inArray(d, O) && (w || (this.symbolAttr(a), w = !0), f = !0);\n !this.rotation || \"x\" !== d && \"y\" !== d || (this.doTransform = !0);\n f || (k = this[d + \"Setter\"] || this._defaultSetter, k.call(this, b, d, G), !this.styledMode && this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(d) && this.updateShadows(d, b, k));\n }, this), this.afterSetters());\n d && d.call(this);\n return e;\n },\n afterSetters: function afterSetters() {\n this.doTransform && (this.updateTransform(), this.doTransform = !1);\n },\n updateShadows: function updateShadows(a, b, d) {\n for (var G = this.shadows, l = G.length; l--;) {\n d.call(G[l], \"height\" === a ? Math.max(b - (G[l].cutHeight || 0), 0) : \"d\" === a ? this.d : b, a, G[l]);\n }\n },\n addClass: function addClass(a, b) {\n var d = this.attr(\"class\") || \"\";\n b || (a = (a || \"\").split(/ /g).reduce(function (a, b) {\n -1 === d.indexOf(b) && a.push(b);\n return a;\n }, d ? [d] : []).join(\" \"));\n a !== d && this.attr(\"class\", a);\n return this;\n },\n hasClass: function hasClass(a) {\n return -1 !== (this.attr(\"class\") || \"\").split(\" \").indexOf(a);\n },\n removeClass: function removeClass(a) {\n return this.attr(\"class\", (this.attr(\"class\") || \"\").replace(a, \"\"));\n },\n symbolAttr: function symbolAttr(a) {\n var b = this;\n \"x y r start end width height innerR anchorX anchorY clockwise\".split(\" \").forEach(function (d) {\n b[d] = w(a[d], b[d]);\n });\n b.attr({\n d: b.renderer.symbols[b.symbolName](b.x, b.y, b.width, b.height, b)\n });\n },\n clip: function clip(a) {\n return this.attr(\"clip-path\", a ? \"url(\" + this.renderer.url + \"#\" + a.id + \")\" : \"none\");\n },\n crisp: function crisp(a, b) {\n b = b || a.strokeWidth || 0;\n var d = Math.round(b) % 2 / 2;\n a.x = Math.floor(a.x || this.x || 0) + d;\n a.y = Math.floor(a.y || this.y || 0) + d;\n a.width = Math.floor((a.width || this.width || 0) - 2 * d);\n a.height = Math.floor((a.height || this.height || 0) - 2 * d);\n D(a.strokeWidth) && (a.strokeWidth = b);\n return a;\n },\n css: function css(a) {\n var b = this.styles,\n G = {},\n l = this.element,\n w = \"\",\n e = !b,\n f = [\"textOutline\", \"textOverflow\", \"width\"];\n a && a.color && (a.fill = a.color);\n b && C(a, function (a, d) {\n a !== b[d] && (G[d] = a, e = !0);\n });\n\n if (e) {\n b && (a = E(b, G));\n if (a) if (null === a.width || \"auto\" === a.width) delete this.textWidth;else if (\"text\" === l.nodeName.toLowerCase() && a.width) var k = this.textWidth = x(a.width);\n this.styles = a;\n k && !K && this.renderer.forExport && delete a.width;\n\n if (l.namespaceURI === this.SVG_NS) {\n var c = function c(a, b) {\n return \"-\" + b.toLowerCase();\n };\n\n C(a, function (a, b) {\n -1 === f.indexOf(b) && (w += b.replace(/([A-Z])/g, c) + \":\" + a + \";\");\n });\n w && A(l, \"style\", w);\n } else d(l, a);\n\n this.added && (\"text\" === this.element.nodeName && this.renderer.buildText(this), a && a.textOutline && this.applyTextOutline(a.textOutline));\n }\n\n return this;\n },\n getStyle: function getStyle(a) {\n return S.getComputedStyle(this.element || this, \"\").getPropertyValue(a);\n },\n strokeWidth: function strokeWidth() {\n if (!this.renderer.styledMode) return this[\"stroke-width\"] || 0;\n var a = this.getStyle(\"stroke-width\");\n if (a.indexOf(\"px\") === a.length - 2) a = x(a);else {\n var b = r.createElementNS(T, \"rect\");\n A(b, {\n width: a,\n \"stroke-width\": 0\n });\n this.element.parentNode.appendChild(b);\n a = b.getBBox().width;\n b.parentNode.removeChild(b);\n }\n return a;\n },\n on: function on(a, b) {\n var d = this,\n l = d.element;\n q && \"click\" === a ? (l.ontouchstart = function (a) {\n d.touchEventFired = Date.now();\n a.preventDefault();\n b.call(l, a);\n }, l.onclick = function (a) {\n (-1 === S.navigator.userAgent.indexOf(\"Android\") || 1100 < Date.now() - (d.touchEventFired || 0)) && b.call(l, a);\n }) : l[\"on\" + a] = b;\n return this;\n },\n setRadialReference: function setRadialReference(a) {\n var b = this.renderer.gradients[this.element.gradient];\n this.element.radialReference = a;\n b && b.radAttr && b.animate(this.renderer.getRadialAttr(a, b.radAttr));\n return this;\n },\n translate: function translate(a, b) {\n return this.attr({\n translateX: a,\n translateY: b\n });\n },\n invert: function invert(a) {\n this.inverted = a;\n this.updateTransform();\n return this;\n },\n updateTransform: function updateTransform() {\n var a = this.translateX || 0,\n b = this.translateY || 0,\n d = this.scaleX,\n l = this.scaleY,\n e = this.inverted,\n f = this.rotation,\n k = this.matrix,\n c = this.element;\n e && (a += this.width, b += this.height);\n a = [\"translate(\" + a + \",\" + b + \")\"];\n D(k) && a.push(\"matrix(\" + k.join(\",\") + \")\");\n e ? a.push(\"rotate(90) scale(-1,1)\") : f && a.push(\"rotate(\" + f + \" \" + w(this.rotationOriginX, c.getAttribute(\"x\"), 0) + \" \" + w(this.rotationOriginY, c.getAttribute(\"y\") || 0) + \")\");\n (D(d) || D(l)) && a.push(\"scale(\" + w(d, 1) + \" \" + w(l, 1) + \")\");\n a.length && c.setAttribute(\"transform\", a.join(\" \"));\n },\n toFront: function toFront() {\n var a = this.element;\n a.parentNode.appendChild(a);\n return this;\n },\n align: function align(a, b, d) {\n var l,\n G = {};\n var e = this.renderer;\n var f = e.alignedObjects;\n var k, c;\n\n if (a) {\n if (this.alignOptions = a, this.alignByTranslate = b, !d || y(d)) this.alignTo = l = d || \"renderer\", F(f, this), f.push(this), d = null;\n } else a = this.alignOptions, b = this.alignByTranslate, l = this.alignTo;\n\n d = w(d, e[l], e);\n l = a.align;\n e = a.verticalAlign;\n f = (d.x || 0) + (a.x || 0);\n var t = (d.y || 0) + (a.y || 0);\n \"right\" === l ? k = 1 : \"center\" === l && (k = 2);\n k && (f += (d.width - (a.width || 0)) / k);\n G[b ? \"translateX\" : \"x\"] = Math.round(f);\n \"bottom\" === e ? c = 1 : \"middle\" === e && (c = 2);\n c && (t += (d.height - (a.height || 0)) / c);\n G[b ? \"translateY\" : \"y\"] = Math.round(t);\n this[this.placed ? \"animate\" : \"attr\"](G);\n this.placed = !0;\n this.alignAttr = G;\n return this;\n },\n getBBox: function getBBox(a, b) {\n var d,\n l = this.renderer,\n G = this.element,\n f = this.styles,\n k = this.textStr,\n c,\n t = l.cache,\n h = l.cacheKeys,\n O = G.namespaceURI === this.SVG_NS;\n b = w(b, this.rotation);\n var B = b * e;\n var J = l.styledMode ? G && M.prototype.getStyle.call(G, \"font-size\") : f && f.fontSize;\n\n if (D(k)) {\n var K = k.toString();\n -1 === K.indexOf(\"<\") && (K = K.replace(/[0-9]/g, \"0\"));\n K += [\"\", b || 0, J, this.textWidth, f && f.textOverflow].join();\n }\n\n K && !a && (d = t[K]);\n\n if (!d) {\n if (O || l.forExport) {\n try {\n (c = this.fakeTS && function (a) {\n [].forEach.call(G.querySelectorAll(\".highcharts-text-outline\"), function (b) {\n b.style.display = a;\n });\n }) && c(\"none\"), d = G.getBBox ? E({}, G.getBBox()) : {\n width: G.offsetWidth,\n height: G.offsetHeight\n }, c && c(\"\");\n } catch (Z) {\n \"\";\n }\n\n if (!d || 0 > d.width) d = {n width: 0,n height: 0n };n } else d = this.htmlGetBBox();nn l.isSVG && (a = d.width, l = d.height, O && (d.height = l = {n "11px,17": 14,n "13px,20": 16n }[f && f.fontSize + "," + Math.round(l)] || l), b && (d.width = Math.abs(l * Math.sin(B)) + Math.abs(a * Math.cos(B)), d.height = Math.abs(l * Math.cos(B)) + Math.abs(a * Math.sin(B))));nn if (K && 0 < d.height) {\n for (; 250 < h.length;) {\n delete t[h.shift()];\n }\n\n t[K] || h.push(K);\n t[K] = d;\n }\n }\n\n return d;\n },\n show: function show(a) {\n return this.attr({\n visibility: a ? \"inherit\" : \"visible\"\n });\n },\n hide: function hide(a) {\n a ? this.attr({\n y: -9999\n }) : this.attr({\n visibility: \"hidden\"\n });\n return this;\n },\n fadeOut: function fadeOut(a) {\n var b = this;\n b.animate({\n opacity: 0\n }, {\n duration: a || 150,\n complete: function complete() {\n b.attr({\n y: -9999\n });\n }\n });\n },\n add: function add(a) {\n var b = this.renderer,\n d = this.element;\n a && (this.parentGroup = a);\n this.parentInverted = a && a.inverted;\n void 0 !== this.textStr && b.buildText(this);\n this.added = !0;\n if (!a || a.handleZ || this.zIndex) var l = this.zIndexSetter();\n l || (a ? a.element : b.box).appendChild(d);\n if (this.onAdd) this.onAdd();\n return this;\n },\n safeRemoveChild: function safeRemoveChild(a) {\n var b = a.parentNode;\n b && b.removeChild(a);\n },\n destroy: function destroy() {\n var a = this,\n b = a.element || {},\n d = a.renderer,\n l = d.isSVG && \"SPAN\" === b.nodeName && a.parentGroup,\n w = b.ownerSVGElement,\n e = a.clipPath;\n b.onclick = b.onmouseout = b.onmouseover = b.onmousemove = b.point = null;\n J(a);\n e && w && ([].forEach.call(w.querySelectorAll(\"[clip-path],[CLIP-PATH]\"), function (a) {\n -1 < a.getAttribute(\"clip-path\").indexOf(e.element.id) && a.removeAttribute(\"clip-path\");\n }), a.clipPath = e.destroy());\n\n if (a.stops) {\n for (w = 0; w < a.stops.length; w++) {\n a.stops[w] = a.stops[w].destroy();\n }\n\n a.stops = null;\n }\n\n a.safeRemoveChild(b);\n\n for (d.styledMode || a.destroyShadows(); l && l.div && 0 === l.div.childNodes.length;) {\n b = l.parentGroup, a.safeRemoveChild(l.div), delete l.div, l = b;\n }\n\n a.alignTo && F(d.alignedObjects, a);\n C(a, function (b, d) {\n a[d] && a[d].parentGroup === a && a[d].destroy && a[d].destroy();\n delete a[d];\n });\n },\n shadow: function shadow(a, b, d) {\n var l = [],\n e,\n f = this.element;\n if (!a) this.destroyShadows();else if (!this.shadows) {\n var G = w(a.width, 3);\n var k = (a.opacity || .15) / G;\n var c = this.parentInverted ? \"(-1,-1)\" : \"(\" + w(a.offsetX, 1) + \", \" + w(a.offsetY, 1) + \")\";\n\n for (e = 1; e <= G; e++) {\n var t = f.cloneNode(0);\n var h = 2 * G + 1 - 2 * e;\n A(t, {\n stroke: a.color || \"#000000\",\n \"stroke-opacity\": k * e,\n \"stroke-width\": h,\n transform: \"translate\" + c,\n fill: \"none\"\n });\n t.setAttribute(\"class\", (t.getAttribute(\"class\") || \"\") + \" highcharts-shadow\");\n d && (A(t, \"height\", Math.max(A(t, \"height\") - h, 0)), t.cutHeight = h);\n b ? b.element.appendChild(t) : f.parentNode && f.parentNode.insertBefore(t, f);\n l.push(t);\n }\n\n this.shadows = l;\n }\n return this;\n },\n destroyShadows: function destroyShadows() {\n (this.shadows || []).forEach(function (a) {\n this.safeRemoveChild(a);\n }, this);\n this.shadows = void 0;\n },\n xGetter: function xGetter(a) {\n \"circle\" === this.element.nodeName && (\"x\" === a ? a = \"cx\" : \"y\" === a && (a = \"cy\"));\n return this._defaultGetter(a);\n },\n _defaultGetter: function _defaultGetter(a) {\n a = w(this[a + \"Value\"], this[a], this.element ? this.element.getAttribute(a) : null, 0);\n /^[\\-0-9\\.]+$/.test(a) && (a = parseFloat(a));\n return a;\n },\n dSetter: function dSetter(a, b, d) {\n a && a.join && (a = a.join(\" \"));\n /(NaN| {2}|^$)/.test(a) && (a = \"M 0 0\");\n this[b] !== a && (d.setAttribute(b, a), this[b] = a);\n },\n dashstyleSetter: function dashstyleSetter(a) {\n var b,\n d = this[\"stroke-width\"];\n \"inherit\" === d && (d = 1);\n\n if (a = a && a.toLowerCase()) {\n a = a.replace(\"shortdashdotdot\", \"3,1,1,1,1,1,\").replace(\"shortdashdot\", \"3,1,1,1\").replace(\"shortdot\", \"1,1,\").replace(\"shortdash\", \"3,1,\").replace(\"longdash\", \"8,3,\").replace(/dot/g, \"1,3,\").replace(\"dash\", \"4,3,\").replace(/,$/, \"\").split(\",\");\n\n for (b = a.length; b--;) {\n a[b] = x(a[b]) * d;\n }\n\n a = a.join(\",\").replace(/NaN/g, \"none\");\n this.element.setAttribute(\"stroke-dasharray\", a);\n }\n },\n alignSetter: function alignSetter(a) {\n var b = {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n };\n b[a] && (this.alignValue = a, this.element.setAttribute(\"text-anchor\", b[a]));\n },\n opacitySetter: function opacitySetter(a, b, d) {\n this[b] = a;\n d.setAttribute(b, a);\n },\n titleSetter: function titleSetter(a) {\n var b = this.element.getElementsByTagName(\"title\")[0];\n b || (b = r.createElementNS(this.SVG_NS, \"title\"), this.element.appendChild(b));\n b.firstChild && b.removeChild(b.firstChild);\n b.appendChild(r.createTextNode(String(w(a, \"\")).replace(/<[^>]*>/g, "").replace(/</g, "<\").replace(/>/g, \">")));n },n textSetter: function textSetter(a) {n a !== this.textStr && (delete this.bBox, delete this.textPxLength, this.textStr = a, this.added && this.renderer.buildText(this));n },n setTextPath: function setTextPath(a, b) {n var d = this.element,n l = {n textAnchor: "text-anchor"n },n w = !1,n e = this.textPathWrapper,n f = !e;n b = B(!0, {n enabled: !0,n attributes: {n dy: -5,n startOffset: "50%",n textAnchor: "middle"n }n }, b);n var k = b.attributes;nn if (a && b && b.enabled) {n this.options && this.options.padding && (k.dx = -this.options.padding);n e || (this.textPathWrapper = e = this.renderer.createElement("textPath"), w = !0);n var G = e.element;n (b = a.element.getAttribute("id")) || a.element.setAttribute("id", b = c.uniqueKey());n if (f) for (a = d.getElementsByTagName("tspan"); a.length;) {n a[0].setAttribute("y", 0), G.appendChild(a[0]);n }n w && e.add({n element: this.text ? this.text.element : dn });n G.setAttributeNS("http://www.w3.org/1999/xlink", "href", this.renderer.url + "#" + b);n D(k.dy) && (G.parentNode.setAttribute("dy", k.dy), delete k.dy);n D(k.dx) && (G.parentNode.setAttribute("dx", k.dx), delete k.dx);n C(k, function (a, b) {n G.setAttribute(l[b] || b, a);n });n d.removeAttribute("transform");n this.removeTextOutline.call(e, [].slice.call(d.getElementsByTagName("tspan")));n this.text && !this.renderer.styledMode && this.attr({n fill: "none",n "stroke-width": 0n });n this.applyTextOutline = this.updateTransform = I;n } else e && (delete this.updateTransform, delete this.applyTextOutline, this.destroyTextPath(d, a));nn return this;n },n destroyTextPath: function destroyTextPath(a, b) {n var d;n b.element.setAttribute("id", "");nn for (d = this.textPathWrapper.element.childNodes; d.length;) {n a.firstChild.appendChild(d[0]);n }nn a.firstChild.removeChild(this.textPathWrapper.element);n delete b.textPathWrapper;n },n fillSetter: function fillSetter(a, b, d) {n "string" === typeof a ? d.setAttribute(b, a) : a && this.complexColor(a, b, d);n },n visibilitySetter: function visibilitySetter(a, b, d) {n "inherit" === a ? d.removeAttribute(b) : this[b] !== a && d.setAttribute(b, a);n this[b] = a;n },n zIndexSetter: function zIndexSetter(a, b) {n var d = this.renderer,n l = this.parentGroup,n w = (l || d).element || d.box,n e = this.element,n f = !1;n d = w === d.box;n var k = this.added;n var c;n D(a) ? (e.setAttribute("data-z-index", a), a = +a, this[b] === a && (k = !1)) : D(this[b]) && e.removeAttribute("data-z-index");n this[b] = a;nn if (k) {n (a = this.zIndex) && l && (l.handleZ = !0);n b = w.childNodes;nn for (c = b.length - 1; 0 <= c && !f; c--) {\n l = b[c];\n k = l.getAttribute(\"data-z-index\");\n var G = !D(k);\n if (l !== e) if (0 > a && G && !d && !c) w.insertBefore(e, b[c]), f = !0;else if (x(k) <= a || G && (!D(a) || 0 <= a)) w.insertBefore(e, b[c + 1] || null), f = !0;\n }\n\n f || (w.insertBefore(e, b[d ? 3 : 0] || null), f = !0);\n }\n\n return f;\n },\n _defaultSetter: function _defaultSetter(a, b, d) {\n d.setAttribute(b, a);\n }\n });\n M.prototype.yGetter = M.prototype.xGetter;\n\n M.prototype.translateXSetter = M.prototype.translateYSetter = M.prototype.rotationSetter = M.prototype.verticalAlignSetter = M.prototype.rotationOriginXSetter = M.prototype.rotationOriginYSetter = M.prototype.scaleXSetter = M.prototype.scaleYSetter = M.prototype.matrixSetter = function (a, b) {\n this[b] = a;\n this.doTransform = !0;\n };\n\n M.prototype[\"stroke-widthSetter\"] = M.prototype.strokeSetter = function (a, b, d) {\n this[b] = a;\n this.stroke && this[\"stroke-width\"] ? (M.prototype.fillSetter.call(this, this.stroke, \"stroke\", d), d.setAttribute(\"stroke-width\", this[\"stroke-width\"]), this.hasStroke = !0) : \"stroke-width\" === b && 0 === a && this.hasStroke ? (d.removeAttribute(\"stroke\"), this.hasStroke = !1) : this.renderer.styledMode && this[\"stroke-width\"] && (d.setAttribute(\"stroke-width\", this[\"stroke-width\"]), this.hasStroke = !0);\n };\n\n n = c.SVGRenderer = function () {\n this.init.apply(this, arguments);\n };\n\n E(n.prototype, {\n Element: M,\n SVG_NS: T,\n init: function init(a, b, l, w, e, f, k) {\n var c = this.createElement(\"svg\").attr({\n version: \"1.1\",\n \"class\": \"highcharts-root\"\n });\n k || c.css(this.getStyle(w));\n w = c.element;\n a.appendChild(w);\n A(a, \"dir\", \"ltr\");\n -1 === a.innerHTML.indexOf(\"xmlns\") && A(w, \"xmlns\", this.SVG_NS);\n this.isSVG = !0;\n this.box = w;\n this.boxWrapper = c;\n this.alignedObjects = [];\n this.url = (v || t) && r.getElementsByTagName(\"base\").length ? S.location.href.split(\"#\")[0].replace(/<[^>]*>/g, "").replace(/([\(‘\)])/g, "\\$1").replace(/ /g, "%20") : "";n this.createElement("desc").add().element.appendChild(r.createTextNode("Created with Highcharts 7.2.0"));n this.defs = this.createElement("defs").add();n this.allowHTML = f;n this.forExport = e;n this.styledMode = k;n this.gradients = {};n this.cache = {};n this.cacheKeys = [];n this.imgCount = 0;n this.setSize(b, l, !1);n var G;n v && a.getBoundingClientRect && (b = function b() {n d(a, {n left: 0,n top: 0n });n G = a.getBoundingClientRect();n d(a, {n left: Math.ceil(G.left) - G.left + "px",n top: Math.ceil(G.top) - G.top + "px"n });n }, b(), this.unSubPixelFix = p(S, "resize", b));n },n definition: function definition(a) {n function b(a, l) {n var w;n m(a).forEach(function (a) {n var e = d.createElement(a.tagName),n f = {};n C(a, function (a, b) {n "tagName" !== b && "children" !== b && "textContent" !== b && (f[b] = a);n });n e.attr(f);n e.add(l || d.defs);n a.textContent && e.element.appendChild(r.createTextNode(a.textContent));n b(a.children || [], e);n w = e;n });n return w;n }nn var d = this;n return b(a);n },n getStyle: function getStyle(a) {n return this.style = E({n fontFamily: ’"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif’,n fontSize: "12px"n }, a);n },n setStyle: function setStyle(a) {n this.boxWrapper.css(this.getStyle(a));n },n isHidden: function isHidden() {n return !this.boxWrapper.getBBox().width;n },n destroy: function destroy() {n var a = this.defs;n this.box = null;n this.boxWrapper = this.boxWrapper.destroy();n h(this.gradients || {});n this.gradients = null;n a && (this.defs = a.destroy());n this.unSubPixelFix && this.unSubPixelFix();n return this.alignedObjects = null;n },n createElement: function createElement(a) {n var b = new this.Element();n b.init(this, a);n return b;n },n draw: I,n getRadialAttr: function getRadialAttr(a, b) {n return {n cx: a[0] - a[2] / 2 + b.cx * a[2],n cy: a[1] - a[2] / 2 + b.cy * a[2],n r: b.r * a[2]n };n },n truncate: function truncate(a, b, d, l, w, e, f) {n var k = this,n c = a.rotation,n t,n G = l ? 1 : 0,n h = (d || l).length,n B = h,n J = [],n K = function K(a) {n b.firstChild && b.removeChild(b.firstChild);n a && b.appendChild(r.createTextNode(a));n },n M = function M(e, c) {n c = c || e;n if (void 0 === J[c]) if (b.getSubStringLength) try {n J[c] = w + b.getSubStringLength(0, l ? c + 1 : c);n } catch (aa) {n "";n } else k.getSpanWidth && (K(f(d || l, e)), J[c] = w + k.getSpanWidth(a, b));n return J[c];n },n O;nn a.rotation = 0;n var q = M(b.textContent.length);nn if (O = w + q > e) {n for (; G <= h;) {\n B = Math.ceil((G + h) / 2), l && (t = f(l, B)), q = M(B, t && t.length - 1), G === h ? G = h + 1 : q > e ? h = B - 1 : G = B;n }nn 0 === h ? K("") : d && h === d.length - 1 || K(t || f(d || l, B));n }nn l && l.splice(0, B);n a.actualWidth = q;n a.rotation = c;n return O;n },n escapes: {n "&": "&",n "<\": \"<\",\n \">": ">",n "‘": "'",n ’"‘: "”"n },n buildText: function buildText(a) {n var b = a.element,n l = this,n e = l.forExport,n f = w(a.textStr, "").toString(),n k = -1 !== f.indexOf("<\"),\n c = b.childNodes,\n t,\n h = A(b, \"x\"),\n G = a.styles,\n B = a.textWidth,\n J = G && G.lineHeight,\n M = G && G.textOutline,\n q = G && \"ellipsis\" === G.textOverflow,\n v = G && \"nowrap\" === G.whiteSpace,\n I = G && G.fontSize,\n m,\n g = c.length;\n G = B && !a.added && this.box;\n\n var E = function E(a) {\n var d;\n l.styledMode || (d = /(px|em)$/.test(a && a.style.fontSize) ? a.style.fontSize : I || l.style.fontSize || 12);\n return J ? x(J) : l.fontMetrics(d, a.getAttribute(\"style\") ? a : b).h;\n },\n p = function p(a, b) {\n C(l.escapes, function (d, l) {\n b && -1 !== b.indexOf(d) || (a = a.toString().replace(new RegExp(d, \"g\"), l));\n });\n return a;\n },\n R = function R(a, b) {\n var d = a.indexOf(\"<\");\n a = a.substring(d, a.indexOf(\">") - d);n d = a.indexOf(b + "=");n if (-1 !== d && (d = d + b.length + 1, b = a.charAt(d), ’"‘ === b || "’" === b)) return a = a.substring(d + 1), a.substring(0, a.indexOf(b));n },n S = //g;nn var u = [f, q, v, J, M, I, B].join();nn if (u !== a.textCache) {n for (a.textCache = u; g–;) {n b.removeChild(c[g]);n }nn k || M || q || B || -1 !== f.indexOf(" ") && (!v || S.test(f)) ? (G && G.appendChild(b), k ? (f = l.styledMode ? f.replace(/<(b|strong)>/g, ‘’).replace(/<(i|em)>/g, ‘’) : f.replace(/<(b|strong)>/g, ‘’).replace(/<(i|em)>/g, ‘’), f = f.replace(//g, "").split(S)) : f = [f], f = f.filter(function (a) {n return "" !== a;n }), f.forEach(function (w, f) {n var k = 0,n c = 0;n w = w.replace(/^\s+|\s+$/g, "").replace(//g, "|||");n var G = w.split("|||");n G.forEach(function (w) {n if ("" !== w || 1 === G.length) {n var J = {},n M = r.createElementNS(l.SVG_NS, "tspan"),n O,n g;n (O = R(w, "class")) && A(M, "class", O);n if (O = R(w, "style")) O = O.replace(/(;| |^)color([ :])/, "$1fill$2"), A(M, "style", O);n (g = R(w, "href")) && !e && (A(M, "onclick", ‘location.href="’ + g + ‘"’), A(M, "class", "highcharts-anchor"), l.styledMode || d(M, {n cursor: "pointer"n }));n w = p(w.replace(/<[a-zA-Z\\/](.|\\n)*?>/g, "") || " ");nn if (" " !== w) {n M.appendChild(r.createTextNode(w));n k ? J.dx = 0 : f && null !== h && (J.x = h);n A(M, J);n b.appendChild(M);n !k && m && (!K && e && d(M, {n display: "block"n }), A(M, "dy", E(M)));nn if (B) {n var Q = w.replace(/([^\^])-/g, "$1- ").split(" ");n J = !v && (1 < G.length || f || 1 < Q.length);\n g = 0;\n var x = E(M);\n if (q) t = l.truncate(a, M, w, void 0, 0, Math.max(0, B - parseInt(I || 12, 10)), function (a, b) {\n return a.substring(0, b) + \"\\u2026\";\n });else if (J) for (; Q.length;) {\n Q.length && !v && 0 < g && (M = r.createElementNS(T, \"tspan\"), A(M, {\n dy: x,\n x: h\n }), O && A(M, \"style\", O), M.appendChild(r.createTextNode(Q.join(\" \").replace(/- /g, \"-\"))), b.appendChild(M)), l.truncate(a, M, null, Q, 0 === g ? c : 0, B, function (a, b) {\n return Q.slice(0, b).join(\" \").replace(/- /g, \"-\");\n }), c = a.actualWidth, g++;\n }\n }\n\n k++;\n }\n }\n });\n m = m || b.childNodes.length;\n }), q && t && a.attr(\"title\", p(a.textStr, [\"<\", \">\"])), G && G.removeChild(b), M && a.applyTextOutline && a.applyTextOutline(M)) : b.appendChild(r.createTextNode(p(f)));\n }\n },\n getContrast: function getContrast(b) {\n b = a(b).rgba;\n b[0] *= 1;\n b[1] *= 1.2;\n b[2] *= .5;\n return 459 < b[0] + b[1] + b[2] ? \"#000000\" : \"#FFFFFF\";\n },\n button: function button(a, b, d, l, w, e, f, c, t, h) {\n var G = this.label(a, b, d, t, null, null, h, null, \"button\"),\n J = 0,\n K = this.styledMode;\n G.attr(B({\n padding: 8,\n r: 2\n }, w));\n\n if (!K) {\n w = B({\n fill: \"#f7f7f7\",\n stroke: \"#cccccc\",\n \"stroke-width\": 1,\n style: {\n color: \"#333333\",\n cursor: \"pointer\",\n fontWeight: \"normal\"\n }\n }, w);\n var M = w.style;\n delete w.style;\n e = B(w, {\n fill: \"#e6e6e6\"\n }, e);\n var r = e.style;\n delete e.style;\n f = B(w, {\n fill: \"#e6ebf5\",\n style: {\n color: \"#000000\",\n fontWeight: \"bold\"\n }\n }, f);\n var q = f.style;\n delete f.style;\n c = B(w, {\n style: {\n color: \"#cccccc\"\n }\n }, c);\n var O = c.style;\n delete c.style;\n }\n\n p(G.element, k ? \"mouseover\" : \"mouseenter\", function () {\n 3 !== J && G.setState(1);\n });\n p(G.element, k ? \"mouseout\" : \"mouseleave\", function () {\n 3 !== J && G.setState(J);\n });\n\n G.setState = function (a) {\n 1 !== a && (G.state = J = a);\n G.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass(\"highcharts-button-\" + [\"normal\", \"hover\", \"pressed\", \"disabled\"][a || 0]);\n K || G.attr([w, e, f, c][a || 0]).css([M, r, q, O][a || 0]);\n };\n\n K || G.attr(w).css(E({\n cursor: \"default\"\n }, M));\n return G.on(\"click\", function (a) {\n 3 !== J && l.call(G, a);\n });\n },\n crispLine: function crispLine(a, b) {\n a[1] === a[4] && (a[1] = a[4] = Math.round(a[1]) - b % 2 / 2);\n a[2] === a[5] && (a[2] = a[5] = Math.round(a[2]) + b % 2 / 2);\n return a;\n },\n path: function path(a) {\n var b = this.styledMode ? {} : {\n fill: \"none\"\n };\n z(a) ? b.d = a : L(a) && E(b, a);\n return this.createElement(\"path\").attr(b);\n },\n circle: function circle(a, b, d) {\n a = L(a) ? a : void 0 === a ? {} : {\n x: a,\n y: b,\n r: d\n };\n b = this.createElement(\"circle\");\n\n b.xSetter = b.ySetter = function (a, b, d) {\n d.setAttribute(\"c\" + b, a);\n };\n\n return b.attr(a);\n },\n arc: function arc(a, b, d, l, w, e) {\n L(a) ? (l = a, b = l.y, d = l.r, a = l.x) : l = {\n innerR: l,\n start: w,\n end: e\n };\n a = this.symbol(\"arc\", a, b, d, d, l);\n a.r = d;\n return a;\n },\n rect: function rect(a, b, d, l, w, e) {\n w = L(a) ? a.r : w;\n var f = this.createElement(\"rect\");\n a = L(a) ? a : void 0 === a ? {} : {\n x: a,\n y: b,\n width: Math.max(d, 0),\n height: Math.max(l, 0)\n };\n this.styledMode || (void 0 !== e && (a.strokeWidth = e, a = f.crisp(a)), a.fill = \"none\");\n w && (a.r = w);\n\n f.rSetter = function (a, b, d) {\n f.r = a;\n A(d, {\n rx: a,\n ry: a\n });\n };\n\n f.rGetter = function () {\n return f.r;\n };\n\n return f.attr(a);\n },\n setSize: function setSize(a, b, d) {\n var l = this.alignedObjects,\n e = l.length;\n this.width = a;\n this.height = b;\n\n for (this.boxWrapper.animate({\n width: a,\n height: b\n }, {\n step: function step() {\n this.attr({\n viewBox: \"0 0 \" + this.attr(\"width\") + \" \" + this.attr(\"height\")\n });\n },\n duration: w(d, !0) ? void 0 : 0\n }); e--;) {\n l[e].align();\n }\n },\n g: function g(a) {\n var b = this.createElement(\"g\");\n return a ? b.attr({\n \"class\": \"highcharts-\" + a\n }) : b;\n },\n image: function image(a, b, d, l, w, e) {\n var f = {\n preserveAspectRatio: \"none\"\n },\n k = function k(a, b) {\n a.setAttributeNS ? a.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", b) : a.setAttribute(\"hc-svg-href\", b);\n },\n c = function c(b) {\n k(t.element, a);\n e.call(t, b);\n };\n\n 1 < arguments.length && E(f, {\n x: b,\n y: d,\n width: l,\n height: w\n });\n var t = this.createElement(\"image\").attr(f);\n e ? (k(t.element, \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\"), f = new S.Image(), p(f, \"load\", c), f.src = a, f.complete && c({})) : k(t.element, a);\n return t;\n },\n symbol: function symbol(a, l, e, k, c, t) {\n var h = this,\n B = /^url\\((.*?)\\)$/,\n G = B.test(a),\n J = !G && (this.symbols[a] ? a : \"circle\"),\n K = J && this.symbols[J],\n M = D(l) && K && K.call(this.symbols, Math.round(l), Math.round(e), k, c, t);\n\n if (K) {\n var q = this.path(M);\n h.styledMode || q.attr(\"fill\", \"none\");\n E(q, {\n symbolName: J,\n x: l,\n y: e,\n width: k,\n height: c\n });\n t && E(q, t);\n } else if (G) {\n var v = a.match(B)[1];\n q = this.image(v);\n q.imgwidth = w(R[v] && R[v].width, t && t.width);\n q.imgheight = w(R[v] && R[v].height, t && t.height);\n\n var I = function I() {\n q.attr({\n width: q.width,\n height: q.height\n });\n };\n\n [\"width\", \"height\"].forEach(function (a) {\n q[a + \"Setter\"] = function (a, b) {\n var d = {},\n l = this[\"img\" + b],\n w = \"width\" === b ? \"translateX\" : \"translateY\";\n this[b] = a;\n D(l) && (t && \"within\" === t.backgroundSize && this.width && this.height && (l = Math.round(l * Math.min(this.width / this.imgwidth, this.height / this.imgheight))), this.element && this.element.setAttribute(b, l), this.alignByTranslate || (d[w] = ((this[b] || 0) - l) / 2, this.attr(d)));\n };\n });\n D(l) && q.attr({\n x: l,\n y: e\n });\n q.isImg = !0;\n D(q.imgwidth) && D(q.imgheight) ? I() : (q.attr({\n width: 0,\n height: 0\n }), f(\"img\", {\n onload: function onload() {\n var a = b[h.chartIndex];\n 0 === this.width && (d(this, {\n position: \"absolute\",\n top: \"-999em\"\n }), r.body.appendChild(this));\n R[v] = {\n width: this.width,\n height: this.height\n };\n q.imgwidth = this.width;\n q.imgheight = this.height;\n q.element && I();\n this.parentNode && this.parentNode.removeChild(this);\n h.imgCount--;\n if (!h.imgCount && a && a.onload) a.onload();\n },\n src: v\n }), this.imgCount++);\n }\n\n return q;\n },\n symbols: {\n circle: function circle(a, b, d, l) {\n return this.arc(a + d / 2, b + l / 2, d / 2, l / 2, {\n start: .5 * Math.PI,\n end: 2.5 * Math.PI,\n open: !1\n });\n },\n square: function square(a, b, d, l) {\n return [\"M\", a, b, \"L\", a + d, b, a + d, b + l, a, b + l, \"Z\"];\n },\n triangle: function triangle(a, b, d, l) {\n return [\"M\", a + d / 2, b, \"L\", a + d, b + l, a, b + l, \"Z\"];\n },\n \"triangle-down\": function triangleDown(a, b, d, l) {\n return [\"M\", a, b, \"L\", a + d, b, a + d / 2, b + l, \"Z\"];\n },\n diamond: function diamond(a, b, d, l) {\n return [\"M\", a + d / 2, b, \"L\", a + d, b + l / 2, a + d / 2, b + l, a, b + l / 2, \"Z\"];\n },\n arc: function arc(a, b, d, l, e) {\n var f = e.start,\n k = e.r || d,\n c = e.r || l || d,\n t = e.end - .001;\n d = e.innerR;\n l = w(e.open, .001 > Math.abs(e.end - e.start - 2 * Math.PI));n var h = Math.cos(f),n B = Math.sin(f),n J = Math.cos(t);n t = Math.sin(t);n f = .001 > e.end - f - Math.PI ? 0 : 1;n e = ["M", a + k * h, b + c * B, "A", k, c, 0, f, w(e.clockwise, 1), a + k * J, b + c * t];n D(d) && e.push(l ? "M" : "L", a + d * J, b + d * t, "A", d, d, 0, f, 0, a + d * h, b + d * B);n e.push(l ? "" : "Z");n return e;n },n callout: function callout(a, b, d, l, w) {n var e = Math.min(w && w.r || 0, d, l),n f = e + 6,n k = w && w.anchorX;n w = w && w.anchorY;n var c = ["M", a + e, b, "L", a + d - e, b, "C", a + d, b, a + d, b, a + d, b + e, "L", a + d, b + l - e, "C", a + d, b + l, a + d, b + l, a + d - e, b + l, "L", a + e, b + l, "C", a, b + l, a, b + l, a, b + l - e, "L", a, b + e, "C", a, b, a, b, a + e, b];n k && k > d ? w > b + f && w < b + l - f ? c.splice(13, 3, \"L\", a + d, w - 6, a + d + 6, w, a + d, w + 6, a + d, b + l - e) : c.splice(13, 3, \"L\", a + d, l / 2, k, w, a + d, l / 2, a + d, b + l - e) : k && 0 > k ? w > b + f && w < b + l - f ? c.splice(33, 3, \"L\", a, w + 6, a - 6, w, a, w - 6, a, b + e) : c.splice(33, 3, \"L\", a, l / 2, k, w, a, l / 2, a, b + e) : w && w > l && k > a + f && k < a + d - f ? c.splice(23, 3, \"L\", k + 6, b + l, k, b + l + 6, k - 6, b + l, a + e, b + l) : w && 0 > w && k > a + f && k < a + d - f && c.splice(3, 3, \"L\", k - 6, b, k, b - 6, k + 6, b, d - e, b);\n return c;\n }\n },\n clipRect: function clipRect(a, b, d, l) {\n var w = c.uniqueKey() + \"-\",\n e = this.createElement(\"clipPath\").attr({\n id: w\n }).add(this.defs);\n a = this.rect(a, b, d, l, 0).add(e);\n a.id = w;\n a.clipPath = e;\n a.count = 0;\n return a;\n },\n text: function text(a, b, d, l) {\n var w = {};\n if (l && (this.allowHTML || !this.forExport)) return this.html(a, b, d);\n w.x = Math.round(b || 0);\n d && (w.y = Math.round(d));\n D(a) && (w.text = a);\n a = this.createElement(\"text\").attr(w);\n l || (a.xSetter = function (a, b, d) {\n var l = d.getElementsByTagName(\"tspan\"),\n w = d.getAttribute(b),\n e;\n\n for (e = 0; e < l.length; e++) {\n var f = l[e];\n f.getAttribute(b) === w && f.setAttribute(b, a);\n }\n\n d.setAttribute(b, a);\n });\n return a;\n },\n fontMetrics: function fontMetrics(a, b) {\n a = !this.styledMode && /px/.test(a) || !S.getComputedStyle ? a || b && b.style && b.style.fontSize || this.style && this.style.fontSize : b && M.prototype.getStyle.call(b, \"font-size\");\n a = /px/.test(a) ? x(a) : 12;\n b = 24 > a ? a + 3 : Math.round(1.2 * a);n return {n h: b,n b: Math.round(.8 * b),n f: an };n },n rotCorr: function rotCorr(a, b, d) {n var l = a;n b && d && (l = Math.max(l * Math.cos(b * e), 4));n return {n x: -a / 3 * Math.sin(b * e),n y: ln };n },n label: function label(a, b, d, w, e, f, k, c, t) {n var h = this,n J = h.styledMode,n K = h.g("button" !== t && "label"),n q = K.text = h.text("", 0, 0, k).attr({n zIndex: 1n }),n r,n v,n G = 0,n I = 3,n m = 0,n g,n p,n O,n T,n x,n Q = {},n R,n S,n z = /^url\((.*?)\)$/.test(w),n y = J || z,n n = function n() {n return J ? r.strokeWidth() % 2 / 2 : (R ? parseInt(R, 10) : 0) % 2 / 2;n };nn t && K.addClass("highcharts-" + t);nn var L = function L() {n var a = q.element.style,n b = {};n v = (void 0 === g || void 0 === p || x) && D(q.textStr) && q.getBBox();n K.width = (g || v.width || 0) + 2 * I + m;n K.height = (p || v.height || 0) + 2 * I;n S = I + Math.min(h.fontMetrics(a && a.fontSize, q).b, v ? v.height : Infinity);n y && (r || (K.box = r = h.symbols[w] || z ? h.symbol(w) : h.rect(), r.addClass(("button" === t ? "" : "highcharts-label-box") + (t ? " highcharts-" + t + "-box" : "")), r.add(K), a = n(), b.x = a, b.y = (c ? -S : 0) + a), b.width = Math.round(K.width), b.height = Math.round(K.height), r.attr(E(b, Q)), Q = {});n };nn var C = function C() {n var a = m + I;n var b = c ? 0 : S;n D(g) && v && ("center" === x || "right" === x) && (a += {n center: .5,n right: 1n * (g - v.width));n if (a !== q.x || b !== q.y) q.attr("x", a), q.hasBoxWidthChanged && (v = q.getBBox(!0), L()), void 0 !== b && q.attr("y", b);n q.x = a;n q.y = b;n };nn var A = function A(a, b) n r ? r.attr(a, b) : Q[a] = b;n };nn K.onAdd = function () {n q.add(K);n K.attr({n text: a || 0 === a ? a : "",n x: b,n y: dn });n r && D(e) && K.attr({n anchorX: e,n anchorY: fn });n };nn K.widthSetter = function (a) {n g = u(a) ? a : null;n };nn K.heightSetter = function (a) {n p = a;n };nn K["text-alignSetter"] = function (a) {n x = a;n };nn K.paddingSetter = function (a) {n D(a) && a !== I && (I = K.padding = a, C());n };nn K.paddingLeftSetter = function (a) {n D(a) && a !== m && (m = a, C());n };nn K.alignSetter = function (a) {n a = {n left: 0,n center: .5,n right: 1n ;n a !== G && (G = a, v && K.attr(n x: On }));n };nn K.textSetter = function (a) {n void 0 !== a && q.attr({n text: an });n L();n C();n };nn K["stroke-widthSetter"] = function (a, b) {n a && (y = !0);n R = this["stroke-width"] = a;n A(b, a);n };nn J ? K.rSetter = function (a, b) {n A(b, a);n } : K.strokeSetter = K.fillSetter = K.rSetter = function (a, b) {n "r" !== b && ("fill" === b && a && (y = !0), K[b] = a);n A(b, a);n };nn K.anchorXSetter = function (a, b) {n e = K.anchorX = a;n A(b, Math.round(a) - n() - O);n };nn K.anchorYSetter = function (a, b) {n f = K.anchorY = a;n A(b, a - T);n };nn K.xSetter = function (a) {n K.x = a;n G && (a -= G * ((g || v.width) + 2 * I), K["forceAnimate:x"] = !0);n O = Math.round(a);n K.attr("translateX", O);n };nn K.ySetter = function (a) {n T = K.y = Math.round(a);n K.attr("translateY", T);n };nn var U = K.css;n k = {n css: function css(a) {n if (a) {n var b = {};n a = B(a);n K.textProps.forEach(function (d) {n void 0 !== a[d] && (b[d] = a[d], delete a[d]);n });n q.css(b);n "width" in b && L();n "fontSize" in b && (L(), C());n }nn return U.call(K, a);n },n getBBox: function getBBox() {n return {n width: v.width + 2 * I,n height: v.height + 2 * I,n x: v.x - I,n y: v.y - In };n },n destroy: function destroy() {n l(K.element, "mouseenter");n l(K.element, "mouseleave");n q && (q = q.destroy());n r && (r = r.destroy());n M.prototype.destroy.call(K);n K = h = L = C = A = null;n }n };n J || (k.shadow = function (a) {n a && (L(), r && r.shadow(a));n return K;n });n return E(K, k);n }n });n c.Renderer = n;n });n N(H, "parts/Html.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.attr,n D = n.defined,n F = n.pInt,n z = c.createElement,n u = c.css,n L = c.extend,n y = c.isFirefox,n C = c.isMS,n x = c.isWebKit,n m = c.pick,n p = c.SVGElement;n n = c.SVGRenderer;n var g = c.win;n L(p.prototype, {n htmlCss: function htmlCss(b) {n var a = "SPAN" === this.element.tagName && b && "width" in b,n d = m(a && b.width, void 0);nn if (a) {n delete b.width;n this.textWidth = d;n var f = !0;n }nn b && "ellipsis" === b.textOverflow && (b.whiteSpace = "nowrap", b.overflow = "hidden");n this.styles = L(this.styles, b);n u(this.element, b);n f && this.htmlUpdateTransform();n return this;n },n htmlGetBBox: function htmlGetBBox() {n var b = this.element;n return {n x: b.offsetLeft,n y: b.offsetTop,n width: b.offsetWidth,n height: b.offsetHeightn };n },n htmlUpdateTransform: function htmlUpdateTransform() {n if (this.added) {n var b = this.renderer,n a = this.element,n d = this.translateX || 0,n f = this.translateY || 0,n e = this.x || 0,n c = this.y || 0,n r = this.textAlign || "left",n m = {n left: 0,n center: .5,n right: 1n ,n q = this.styles,n v = q && q.whiteSpace;n u(a, {n marginLeft: d,n marginTop: fn });n !b.styledMode && this.shadows && this.shadows.forEach(function (a) {n u(a, {n marginLeft: d + 1,n marginTop: f + 1n });n });n this.inverted && [].forEach.call(a.childNodes, function (d) {n b.invertChild(d, a);n });nn if ("SPAN" === a.tagName) {n q = this.rotation;n var k = this.textWidth && F(this.textWidth),n t = [q, r, a.innerHTML, this.textWidth, this.textAlign].join(),n B;n (B = k !== this.oldTextWidth) && !(B = k > this.oldTextWidth) && ((B = this.textPxLength) || (u(a, {n width: "",n whiteSpace: v || "nowrap"n }), B = a.offsetWidth), B = B > k);n B && (/[ \-]/.test(a.textContent || a.innerText) || "ellipsis" === a.style.textOverflow) ? (u(a, {n width: k + "px",n display: "block",n whiteSpace: v || "normal"n }), this.oldTextWidth = k, this.hasBoxWidthChanged = !0) : this.hasBoxWidthChanged = !1;n t !== this.cTT && (v = b.fontMetrics(a.style.fontSize, a).b, !D(q) || q === (this.oldRotation || 0) && r === this.oldAlign || this.setSpanRotation(q, m, v), this.getSpanCorrection(!D(q) && this.textPxLength || a.offsetWidth, v, m, q, r));n u(a, {n left: e + (this.xCorr || 0) + "px",n top: c + (this.yCorr || 0) + "px"n });n this.cTT = t;n this.oldRotation = q;n this.oldAlign = r;n }n } else this.alignOnAdd = !0;n },n setSpanRotation: function setSpanRotation(b, a, d) {n var f = {},n e = this.renderer.getTransformKey();n f[e] = f.transform = "rotate(" + b + "deg)";n f[e + (y ? "Origin" : "-origin")] = f.transformOrigin = 100 * a + "% " + d + "px";n u(this.element, f);n },n getSpanCorrection: function getSpanCorrection(b, a, d) {n this.xCorr = -b * d;n this.yCorr = -a;n }n });n L(n.prototype, {n getTransformKey: function getTransformKey() {n return C && !/Edge/.test(g.navigator.userAgent) ? "-ms-transform" : x ? "-webkit-transform" : y ? "MozTransform" : g.opera ? "-o-transform" : "";n },n html: function html(b, a, d) {n var f = this.createElement("span"),n e = f.element,n c = f.renderer,n r = c.isSVG,n g = function g(a, b) {n ["opacity", "visibility"].forEach(function (d) {n a[d + "Setter"] = function (e, f, k) {n var w = a.div ? a.div.style : b;n p.prototype[d + "Setter"].call(this, e, f, k);n w && (w[f] = e);n };n });n a.addedSetters = !0;n };nn f.textSetter = function (a) {n a !== e.innerHTML && (delete this.bBox, delete this.oldTextWidth);n this.textStr = a;n e.innerHTML = m(a, "");n f.doTransform = !0;n };nn r && g(f, f.element.style);nn f.xSetter = f.ySetter = f.alignSetter = f.rotationSetter = function (a, b) {n "align" === b && (b = "textAlign");n f[b] = a;n f.doTransform = !0;n };nn f.afterSetters = function () {n this.doTransform && (this.htmlUpdateTransform(), this.doTransform = !1);n };nn f.attr({n text: b,n x: Math.round(a),n y: Math.round(d)n }).css({n position: "absolute"n });n c.styledMode || f.css({n fontFamily: this.style.fontFamily,n fontSize: this.style.fontSizen });n e.style.whiteSpace = "nowrap";n f.css = f.htmlCss;n r && (f.add = function (a) {n var b = c.box.parentNode,n d = [];nn if (this.parentGroup = a) {n var t = a.div;nn if (!t) {n for (; a;) {n d.push(a), a = a.parentGroup;n }nn d.reverse().forEach(function (a) {n function e(b, d) {n a[d] = b;n "translateX" === d ? l.left = b + "px" : l.top = b + "px";n a.doTransform = !0;n }nn var w = A(a.element, "class");n t = a.div = a.div || z("div", w ? {n className: wn } : void 0, {n position: "absolute",n left: (a.translateX || 0) + "px",n top: (a.translateY || 0) + "px",n display: a.display,n opacity: a.opacity,n pointerEvents: a.styles && a.styles.pointerEventsn }, t || b);n var l = t.style;n L(a, {n classSetter: function (a) {n return function (b) {n this.element.setAttribute("class", b);n a.className = b;n };n }(t),n on: function on() {n d[0].div && f.on.apply({n element: d[0].divn }, arguments);n return a;n },n translateXSetter: e,n translateYSetter: en });n a.addedSetters || g(a);n });n }n } else t = b;nn t.appendChild(e);n f.added = !0;n f.alignOnAdd && f.htmlUpdateTransform();n return f;n });n return f;n }n });n });n N(H, "parts/Time.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.defined,n D = n.isObject,n F = n.objectEach,n z = n.splat,n u = c.extend,n L = c.merge,n y = c.pick,n C = c.timeUnits,n x = c.win;nn c.Time = function © {n this.update(c, !1);n };nn c.Time.prototype = {n defaultOptions: {},n update: function update© {n var m = y(c && c.useUTC, !0),n g = this;n this.options = c = L(!0, this.options || {}, c);n this.Date = c.Date || x.Date || Date;n this.timezoneOffset = (this.useUTC = m) && c.timezoneOffset;n this.getTimezoneOffset = this.timezoneOffsetFunction();n (this.variableTimezone = !(m && !c.getTimezoneOffset && !c.timezone)) || this.timezoneOffset ? (this.get = function (b, a) {n var d = a.getTime(),n f = d - g.getTimezoneOffset(a);n a.setTime(f);n b = a["getUTC" + b]();n a.setTime(d);n return b;n }, this.set = function (b, a, d) {n if ("Milliseconds" === b || "Seconds" === b || "Minutes" === b && 0 === a.getTimezoneOffset() % 60) a["set" + b](d);else {n var f = g.getTimezoneOffset(a);n f = a.getTime() - f;n a.setTime(f);n a["setUTC" + b](d);n b = g.getTimezoneOffset(a);n f = a.getTime() + b;n a.setTime(f);n }n }) : m ? (this.get = function (b, a) {n return a["getUTC" + b]();n }, this.set = function (b, a, d) {n return a["setUTC" + b](d);n }) : (this.get = function (b, a) {n return a["get" + b]();n }, this.set = function (b, a, d) {n return a["set" + b](d);n });n },n makeTime: function makeTime(m, p, g, b, a, d) {n if (this.useUTC) {n var f = this.Date.UTC.apply(0, arguments);n var e = this.getTimezoneOffset(f);n f += e;n var h = this.getTimezoneOffset(f);n e !== h ? f += h - e : e - 36E5 !== this.getTimezoneOffset(f - 36E5) || c.isSafari || (f -= 36E5);n } else f = new this.Date(m, p, y(g, 1), y(b, 0), y(a, 0), y(d, 0)).getTime();nn return f;n },n timezoneOffsetFunction: function timezoneOffsetFunction() {n var m = this,n p = this.options,n g = x.moment;n if (!this.useUTC) return function (b) {n return 6E4 * new Date(b).getTimezoneOffset();n };nn if (p.timezone) {n if (g) return function (b) {n return 6E4 * -g.tz(b, p.timezone).utcOffset();n };n c.error(25);n }nn return this.useUTC && p.getTimezoneOffset ? function (b) {n return 6E4 * p.getTimezoneOffset(b);n } : function () {n return 6E4 * (m.timezoneOffset || 0);n };n },n dateFormat: function dateFormat(m, p, g) {n if (!A(p) || isNaN(p)) return c.defaultOptions.lang.invalidDate || "";n m = c.pick(m, "%Y-%m-%d %H:%M:%S");n var b = this,n a = new this.Date(p),n d = this.get("Hours", a),n f = this.get("Day", a),n e = this.get("Date", a),n h = this.get("Month", a),n r = this.get("FullYear", a),n E = c.defaultOptions.lang,n q = E.weekdays,n v = E.shortWeekdays,n k = c.pad;n a = c.extend({n a: v ? v[f] : q[f].substr(0, 3),n A: q[f],n d: k(e),n e: k(e, 2, " "),n w: f,n b: E.shortMonths[h],n B: E.months[h],n m: k(h + 1),n o: h + 1,n y: r.toString().substr(2, 2),n Y: r,n H: k(d),n k: d,n I: k(d % 12 || 12),n l: d % 12 || 12,n M: k(b.get("Minutes", a)),n p: 12 > d ? "AM" : "PM",n P: 12 > d ? "am" : "pm",n S: k(a.getSeconds()),n L: k(Math.floor(p % 1E3), 3)n }, c.dateFormats);n F(a, function (a, d) {n for (; -1 !== m.indexOf("%" + d);) {n m = m.replace("%" + d, "function" === typeof a ? a.call(b, p) : a);n }n });n return g ? m.substr(0, 1).toUpperCase() + m.substr(1) : m;n },n resolveDTLFormat: function resolveDTLFormat© {n return D(c, !0) ? c : (c = z©, {n main: c[0],n from: c[1],n to: c[2]n });n },n getTimeTicks: function getTimeTicks(c, p, g, b) {n var a = this,n d = [],n f = {};n var e = new a.Date(p);n var h = c.unitRange,n r = c.count || 1,n m;n b = y(b, 1);nn if (A(p)) {n a.set("Milliseconds", e, h >= C.second ? 0 : r * Math.floor(a.get("Milliseconds", e) / r));n h >= C.second && a.set("Seconds", e, h >= C.minute ? 0 : r * Math.floor(a.get("Seconds", e) / r));n h >= C.minute && a.set("Minutes", e, h >= C.hour ? 0 : r * Math.floor(a.get("Minutes", e) / r));n h >= C.hour && a.set("Hours", e, h >= C.day ? 0 : r * Math.floor(a.get("Hours", e) / r));n h >= C.day && a.set("Date", e, h >= C.month ? 1 : Math.max(1, r * Math.floor(a.get("Date", e) / r)));nn if (h >= C.month) {n a.set("Month", e, h >= C.year ? 0 : r * Math.floor(a.get("Month", e) / r));n var q = a.get("FullYear", e);n }nn h >= C.year && a.set("FullYear", e, q - q % r);n h === C.week && (q = a.get("Day", e), a.set("Date", e, a.get("Date", e) - q + b + (q < b ? -7 : 0)));\n q = a.get(\"FullYear\", e);\n b = a.get(\"Month\", e);\n var v = a.get(\"Date\", e),\n k = a.get(\"Hours\", e);\n p = e.getTime();\n a.variableTimezone && (m = g - p > 4 * C.month || a.getTimezoneOffset(p) !== a.getTimezoneOffset(g));n p = e.getTime();nn for (e = 1; p < g;) {\n d.push(p), p = h === C.year ? a.makeTime(q + e * r, 0) : h === C.month ? a.makeTime(q, b + e * r) : !m || h !== C.day && h !== C.week ? m && h === C.hour && 1 < r ? a.makeTime(q, b, v, k + e * r) : p + h * r : a.makeTime(q, b, v + e * r * (h === C.day ? 1 : 7)), e++;\n }\n\n d.push(p);\n h <= C.hour && 1E4 > d.length && d.forEach(function (b) {n 0 === b % 18E5 && "000000000" === a.dateFormat("%H%M%S%L", b) && (f[b] = "day");n });n }nn d.info = u(c, {n higherRanks: f,n totalRange: h * rn });n return d;n }n };n });n N(H, "parts/Options.js", [H["parts/Globals.js"]], function © {n var n = c.color,n A = c.merge;n c.defaultOptions = {n colors: "#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1".split(" "),n symbols: ["circle", "diamond", "square", "triangle", "triangle-down"],n lang: {n loading: "Loading…",n months: "January February March April May June July August September October November December".split(" "),n shortMonths: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),n weekdays: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),n decimalPoint: ".",n numericSymbols: "kMGTPE".split(""),n resetZoom: "Reset zoom",n resetZoomTitle: "Reset zoom level 1:1",n thousandsSep: " "n },n global: {},n time: c.Time.prototype.defaultOptions,n chart: {n styledMode: !1,n borderRadius: 0,n colorCount: 10,n defaultSeriesType: "line",n ignoreHiddenSeries: !0,n spacing: [10, 10, 15, 10],n resetZoomButton: {n theme: {n zIndex: 6n },n position: {n align: "right",n x: -10,n y: 10n }n },n width: null,n height: null,n borderColor: "#335cad",n backgroundColor: "#ffffff",n plotBorderColor: "#cccccc"n },n title: {n text: "Chart title",n align: "center",n margin: 15,n widthAdjust: -44n },n subtitle: {n text: "",n align: "center",n widthAdjust: -44n },n caption: {n margin: 15,n text: "",n align: "left",n verticalAlign: "bottom"n },n plotOptions: {},n labels: {n style: {n position: "absolute",n color: "#333333"n }n },n legend: {n enabled: !0,n align: "center",n alignColumns: !0,n layout: "horizontal",n labelFormatter: function labelFormatter() {n return this.name;n },n borderColor: "#999999",n borderRadius: 0,n navigation: {n activeColor: "#003399",n inactiveColor: "#cccccc"n },n itemStyle: {n color: "#333333",n cursor: "pointer",n fontSize: "12px",n fontWeight: "bold",n textOverflow: "ellipsis"n },n itemHoverStyle: {n color: "#000000"n },n itemHiddenStyle: {n color: "#cccccc"n },n shadow: !1,n itemCheckboxStyle: {n position: "absolute",n width: "13px",n height: "13px"n },n squareSymbol: !0,n symbolPadding: 5,n verticalAlign: "bottom",n x: 0,n y: 0,n title: {n style: {n fontWeight: "bold"n }n }n },n loading: {n labelStyle: {n fontWeight: "bold",n position: "relative",n top: "45%"n },n style: {n position: "absolute",n backgroundColor: "#ffffff",n opacity: .5,n textAlign: "center"n }n },n tooltip: {n enabled: !0,n animation: c.svg,n borderRadius: 3,n dateTimeLabelFormats: {n millisecond: "%A, %b %e, %H:%M:%S.%L",n second: "%A, %b %e, %H:%M:%S",n minute: "%A, %b %e, %H:%M",n hour: "%A, %b %e, %H:%M",n day: "%A, %b %e, %Y",n week: "Week from %A, %b %e, %Y",n month: "%B %Y",n year: "%Y"n },n footerFormat: "",n padding: 8,n snap: c.isTouchDevice ? 25 : 10,n headerFormat: ‘{point.key}
’,n pointFormat: "\u25CF {series.name}: {point.y}
",n backgroundColor: n("#f7f7f7").setOpacity(.85).get(),n borderWidth: 1,n shadow: !0,n style: {n color: "#333333",n cursor: "default",n fontSize: "12px",n pointerEvents: "none",n whiteSpace: "nowrap"n }n },n credits: {n enabled: !0,n href: "https://www.highcharts.com?credits",n position: {n align: "right",n x: -10,n verticalAlign: "bottom",n y: -5n },n style: {n cursor: "pointer",n color: "#999999",n fontSize: "9px"n },n text: "Highcharts.com"n }n };nn c.setOptions = function (n) {n c.defaultOptions = A(!0, c.defaultOptions, n);n c.time.update(A(c.defaultOptions.global, c.defaultOptions.time), !1);n return c.defaultOptions;n };nn c.getOptions = function () {n return c.defaultOptions;n };nn c.defaultPlotOptions = c.defaultOptions.plotOptions;n c.time = new c.Time(A(c.defaultOptions.global, c.defaultOptions.time));nn c.dateFormat = function (n, A, z) {n return c.time.dateFormat(n, A, z);n };nn "";n });n N(H, "parts/Tick.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.defined,n D = n.isNumber,n F = c.correctFloat,n z = c.destroyObjectProperties,n u = c.fireEvent,n L = c.merge,n y = c.pick,n C = c.deg2rad;nn c.Tick = function (c, m, p, g, b) {n this.axis = c;n this.pos = m;n this.type = p || "";n this.isNewLabel = this.isNew = !0;n this.parameters = b || {};n this.tickmarkOffset = this.parameters.tickmarkOffset;n this.options = this.parameters.options;n p || g || this.addLabel();n };nn c.Tick.prototype = {n addLabel: function addLabel() {n var x = this,n m = x.axis,n p = m.options,n g = m.chart,n b = m.categories,n a = m.names,n d = x.pos,n f = y(x.options && x.options.labels, p.labels),n e = m.tickPositions,n h = d === e[0],n r = d === e[e.length - 1];n b = this.parameters.category || (b ? y(b[d], a[d], d) : d);n var E = x.label;n e = e.info;n var q, v;nn if (m.isDatetimeAxis && e) {n var k = g.time.resolveDTLFormat(p.dateTimeLabelFormats[!p.grid && e.higherRanks[d] || e.unitName]);n var t = k.main;n }nn x.isFirst = h;n x.isLast = r;n x.formatCtx = {n axis: m,n chart: g,n isFirst: h,n isLast: r,n dateTimeLabelFormat: t,n tickPositionInfo: e,n value: m.isLog ? F(m.lin2log(b)) : b,n pos: dn };n p = m.labelFormatter.call(x.formatCtx, this.formatCtx);n if (v = k && k.list) x.shortenLabel = function () {n for (q = 0; q < v.length; q++) {\n if (E.attr({\n text: m.labelFormatter.call(c.extend(x.formatCtx, {\n dateTimeLabelFormat: v[q]\n }))\n }), E.getBBox().width < m.getSlotWidth(x) - 2 * y(f.padding, 5)) return;\n }\n\n E.attr({\n text: \"\"\n });\n };\n if (A(E)) E && E.textStr !== p && (!E.textWidth || f.style && f.style.width || E.styles.width || E.css({\n width: null\n }), E.attr({\n text: p\n }), E.textPxLength = E.getBBox().width);else {\n if (x.label = E = A(p) && f.enabled ? g.renderer.text(p, 0, 0, f.useHTML).add(m.labelGroup) : null) g.styledMode || E.css(L(f.style)), E.textPxLength = E.getBBox().width;\n x.rotation = 0;\n }\n },\n getLabelSize: function getLabelSize() {\n return this.label ? this.label.getBBox()[this.axis.horiz ? \"height\" : \"width\"] : 0;\n },\n handleOverflow: function handleOverflow(c) {\n var m = this.axis,\n p = m.options.labels,\n g = c.x,\n b = m.chart.chartWidth,\n a = m.chart.spacing,\n d = y(m.labelLeft, Math.min(m.pos, a[3]));\n a = y(m.labelRight, Math.max(m.isRadial ? 0 : m.pos + m.len, b - a[1]));\n var f = this.label,\n e = this.rotation,\n h = {\n left: 0,\n center: .5,\n right: 1\n }[m.labelAlign || f.attr(\"align\")],\n r = f.getBBox().width,\n E = m.getSlotWidth(this),\n q = E,\n v = 1,\n k,\n t = {};\n if (e || \"justify\" !== y(p.overflow, \"justify\")) 0 > e && g - h * r < d ? k = Math.round(g / Math.cos(e * C) - d) : 0 < e && g + h * r > a && (k = Math.round((b - g) / Math.cos(e * C)));else if (b = g + (1 - h) * r, g - h * r < d ? q = c.x + q * (1 - h) - d : b > a && (q = a - c.x + q * h, v = -1), q = Math.min(E, q), q < E && \"center\" === m.labelAlign && (c.x += v * (E - q - h * (E - Math.min(r, q)))), r > q || m.autoRotation && (f.styles || {}).width) k = q;n k && (this.shortenLabel ? this.shortenLabel() : (t.width = Math.floor(k), (p.style || {}).textOverflow || (t.textOverflow = "ellipsis"), f.css(t)));n },n getPosition: function getPosition(x, m, p, g) {n var b = this.axis,n a = b.chart,n d = g && a.oldChartHeight || a.chartHeight;n x = {n x: x ? c.correctFloat(b.translate(m + p, null, null, g) + b.transB) : b.left + b.offset + (b.opposite ? (g && a.oldChartWidth || a.chartWidth) - b.right - b.left : 0),n y: x ? d - b.bottom + b.offset - (b.opposite ? b.height : 0) : c.correctFloat(d - b.translate(m + p, null, null, g) - b.transB)n };n x.y = Math.max(Math.min(x.y, 1E5), -1E5);n u(this, "afterGetPosition", {n pos: xn });n return x;n },n getLabelPosition: function getLabelPosition(c, m, p, g, b, a, d, f) {n var e = this.axis,n h = e.transA,n r = e.isLinked && e.linkedParent ? e.linkedParent.reversed : e.reversed,n E = e.staggerLines,n q = e.tickRotCorr || {n x: 0,n y: 0n },n v = b.y,n k = g || e.reserveSpaceDefault ? 0 : -e.labelOffset * ("center" === e.labelAlign ? .5 : 1),n t = {};n A(v) || (v = 0 === e.side ? p.rotation ? -8 : -p.getBBox().height : 2 === e.side ? q.y + 8 : Math.cos(p.rotation * C) * (q.y - p.getBBox(!1, 0).height / 2));n c = c + b.x + k + q.x - (a && g ? a * h * (r ? -1 : 1) : 0);n m = m + v - (a && !g ? a * h * (r ? 1 : -1) : 0);n E && (p = d / (f || 1) % E, e.opposite && (p = E - p - 1), m += e.labelOffset / E * p);n t.x = c;n t.y = Math.round(m);n u(this, "afterGetLabelPosition", {n pos: t,n tickmarkOffset: a,n index: dn });n return t;n },n getMarkPath: function getMarkPath(c, m, p, g, b, a) {n return a.crispLine(["M", c, m, "L", c + (b ? 0 : -p), m + (b ? p : 0)], g);n },n renderGridLine: function renderGridLine(c, m, p) {n var g = this.axis,n b = g.options,n a = this.gridLine,n d = {},n f = this.pos,n e = this.type,n h = y(this.tickmarkOffset, g.tickmarkOffset),n r = g.chart.renderer,n E = e ? e + "Grid" : "grid",n q = b[E + "LineWidth"],n v = b[E + "LineColor"];n b = b[E + "LineDashStyle"];n a || (g.chart.styledMode || (d.stroke = v, d["stroke-width"] = q, b && (d.dashstyle = b)), e || (d.zIndex = 1), c && (m = 0), this.gridLine = a = r.path().attr(d).addClass("highcharts-" + (e ? e + "-" : "") + "grid-line").add(g.gridGroup));n if (a && (p = g.getPlotLinePath({n value: f + h,n lineWidth: a.strokeWidth() * p,n force: "pass",n old: cn }))) a[c || this.isNew ? "attr" : "animate"]({n d: p,n opacity: mn });n },n renderMark: function renderMark(c, m, p) {n var g = this.axis,n b = g.options,n a = g.chart.renderer,n d = this.type,n f = d ? d + "Tick" : "tick",n e = g.tickSize(f),n h = this.mark,n r = !h,n E = c.x;n c = c.y;n var q = y(b[f + "Width"], !d && g.isXAxis ? 1 : 0);n b = b[f + "Color"];n e && (g.opposite && (e[0] = -e[0]), r && (this.mark = h = a.path().addClass("highcharts-" + (d ? d + "-" : "") + "tick").add(g.axisGroup), g.chart.styledMode || h.attr({n stroke: b,n "stroke-width": qn })), h[r ? "attr" : "animate"]({n d: this.getMarkPath(E, c, e[0], h.strokeWidth() * p, g.horiz, a),n opacity: mn }));n },n renderLabel: function renderLabel(c, m, p, g) {n var b = this.axis,n a = b.horiz,n d = b.options,n f = this.label,n e = d.labels,n h = e.step;n b = y(this.tickmarkOffset, b.tickmarkOffset);n var r = !0,n E = c.x;n c = c.y;n f && D(E) && (f.xy = c = this.getLabelPosition(E, c, f, a, e, b, g, h), this.isFirst && !this.isLast && !y(d.showFirstLabel, 1) || this.isLast && !this.isFirst && !y(d.showLastLabel, 1) ? r = !1 : !a || e.step || e.rotation || m || 0 === p || this.handleOverflow©, h && g % h && (r = !1), r && D(c.y) ? (c.opacity = p, f[this.isNewLabel ? "attr" : "animate"]©, this.isNewLabel = !1) : (f.attr("y", -9999), this.isNewLabel = !0));n },n render: function render(x, m, p) {n var g = this.axis,n b = g.horiz,n a = this.pos,n d = y(this.tickmarkOffset, g.tickmarkOffset);n a = this.getPosition(b, a, d, m);n d = a.x;n var f = a.y;n g = b && d === g.pos + g.len || !b && f === g.pos ? -1 : 1;n p = y(p, 1);n this.isActive = !0;n this.renderGridLine(m, p, g);n this.renderMark(a, p, g);n this.renderLabel(a, m, p, x);n this.isNew = !1;n c.fireEvent(this, "afterRender");n },n destroy: function destroy() {n z(this, this.axis);n }n };n });n N(H, "parts/Axis.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.defined,n D = n.isArray,n F = n.isNumber,n z = n.isString,n u = n.objectEach,n L = n.splat,n y = c.addEvent,n C = c.animObject,n x = c.arrayMax,n m = c.arrayMin,n p = c.color,n g = c.correctFloat,n b = c.defaultOptions,n a = c.deg2rad,n d = c.destroyObjectProperties,n f = c.extend,n e = c.fireEvent,n h = c.format,n r = c.getMagnitude,n E = c.merge,n q = c.normalizeTickInterval,n v = c.pick,n k = c.removeEvent,n t = c.seriesTypes,n B = c.syncTimeout,n I = c.Tick;nn n = function n() {n this.init.apply(this, arguments);n };nn c.extend(n.prototype, {n defaultOptions: {n dateTimeLabelFormats: {n millisecond: {n main: "%H:%M:%S.%L",n range: !1n },n second: {n main: "%H:%M:%S",n range: !1n },n minute: {n main: "%H:%M",n range: !1n },n hour: {n main: "%H:%M",n range: !1n },n day: {n main: "%e. %b"n },n week: {n main: "%e. %b"n },n month: {n main: "%b ‘%y"n },n year: {n main: "%Y"n }n },n endOnTick: !1,n labels: {n enabled: !0,n indentation: 10,n x: 0,n style: {n color: "#666666",n cursor: "default",n fontSize: "11px"n }n },n maxPadding: .01,n minorTickLength: 2,n minorTickPosition: "outside",n minPadding: .01,n showEmpty: !0,n startOfWeek: 1,n startOnTick: !1,n tickLength: 10,n tickPixelInterval: 100,n tickmarkPlacement: "between",n tickPosition: "outside",n title: {n align: "middle",n style: {n color: "#666666"n }n },n type: "linear",n minorGridLineColor: "#f2f2f2",n minorGridLineWidth: 1,n minorTickColor: "#999999",n lineColor: "#ccd6eb",n lineWidth: 1,n gridLineColor: "#e6e6e6",n tickColor: "#ccd6eb"n },n defaultYAxisOptions: {n endOnTick: !0,n maxPadding: .05,n minPadding: .05,n tickPixelInterval: 72,n showLastLabel: !0,n labels: {n x: -8n },n startOnTick: !0,n title: {n rotation: 270,n text: "Values"n },n stackLabels: {n allowOverlap: !1,n enabled: !1,n crop: !0,n overflow: "justify",n formatter: function formatter() {n return c.numberFormat(this.total, -1);n },n style: {n color: "#000000",n fontSize: "11px",n fontWeight: "bold",n textOutline: "1px contrast"n }n },n gridLineWidth: 1,n lineWidth: 0n },n defaultLeftAxisOptions: {n labels: {n x: -15n },n title: {n rotation: 270n }n },n defaultRightAxisOptions: {n labels: {n x: 15n },n title: {n rotation: 90n }n },n defaultBottomAxisOptions: {n labels: {n autoRotation: [-45],n x: 0n },n margin: 15,n title: {n rotation: 0n }n },n defaultTopAxisOptions: {n labels: {n autoRotation: [-45],n x: 0n },n margin: 15,n title: {n rotation: 0n }n },n init: function init(a, b) {n var d = b.isX,n l = this;n l.chart = a;n l.horiz = a.inverted && !l.isZAxis ? !d : d;n l.isXAxis = d;n l.coll = l.coll || (d ? "xAxis" : "yAxis");n e(this, "init", {n userOptions: bn });n l.opposite = b.opposite;n l.side = b.side || (l.horiz ? l.opposite ? 0 : 2 : l.opposite ? 1 : 3);n l.setOptions(b);n var w = this.options,n f = w.type;n l.labelFormatter = w.labels.formatter || l.defaultLabelFormatter;n l.userOptions = b;n l.minPixelPadding = 0;n l.reversed = w.reversed;n l.visible = !1 !== w.visible;n l.zoomEnabled = !1 !== w.zoomEnabled;n l.hasNames = "category" === f || !0 === w.categories;n l.categories = w.categories || l.hasNames;n l.names || (l.names = [], l.names.keys = {});n l.plotLinesAndBandsGroups = {};n l.isLog = "logarithmic" === f;n l.isDatetimeAxis = "datetime" === f;n l.positiveValuesOnly = l.isLog && !l.allowNegativeLog;n l.isLinked = A(w.linkedTo);n l.ticks = {};n l.labelEdge = [];n l.minorTicks = {};n l.plotLinesAndBands = [];n l.alternateBands = {};n l.len = 0;n l.minRange = l.userMinRange = w.minRange || w.maxZoom;n l.range = w.range;n l.offset = w.offset || 0;n l.stacks = {};n l.oldStacks = {};n l.stacksTouched = 0;n l.max = null;n l.min = null;n l.crosshair = v(w.crosshair, L(a.options.tooltip.crosshairs)[d ? 0 : 1], !1);n b = l.options.events;n -1 === a.axes.indexOf(l) && (d ? a.axes.splice(a.xAxis.length, 0, l) : a.axes.push(l), a[l.coll].push(l));n l.series = l.series || [];n a.inverted && !l.isZAxis && d && void 0 === l.reversed && (l.reversed = !0);n u(b, function (a, b) {n c.isFunction(a) && y(l, b, a);n });n l.lin2log = w.linearToLogConverter || l.lin2log;n l.isLog && (l.val2lin = l.log2lin, l.lin2val = l.lin2log);n e(this, "afterInit");n },n setOptions: function setOptions(a) {n this.options = E(this.defaultOptions, "yAxis" === this.coll && this.defaultYAxisOptions, [this.defaultTopAxisOptions, this.defaultRightAxisOptions, this.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side], E(b[this.coll], a));n e(this, "afterSetOptions", {n userOptions: an });n },n defaultLabelFormatter: function defaultLabelFormatter() {n var a = this.axis,n d = this.value,n e = a.chart.time,n f = a.categories,n k = this.dateTimeLabelFormat,n t = b.lang,n B = t.numericSymbols;n t = t.numericSymbolMagnitude || 1E3;n var r = B && B.length,n q = a.options.labels.format;n a = a.isLog ? Math.abs(d) : a.tickInterval;n if (q) var v = h(q, this, e);else if (f) v = d;else if (k) v = e.dateFormat(k, d);else if (r && 1E3 <= a) for (; r-- && void 0 === v;) {\n e = Math.pow(t, r + 1), a >= e && 0 === 10 * d % e && null !== B[r] && 0 !== d && (v = c.numberFormat(d / e, -1) + B[r]);n }n void 0 === v && (v = 1E4 <= Math.abs(d) ? c.numberFormat(d, -1) : c.numberFormat(d, -1, void 0, \"\"));\n return v;\n },\n getSeriesExtremes: function getSeriesExtremes() {\n var a = this,\n b = a.chart,\n d;\n e(this, \"getSeriesExtremes\", null, function () {\n a.hasVisibleSeries = !1;\n a.dataMin = a.dataMax = a.threshold = null;\n a.softThreshold = !a.isXAxis;\n a.buildStacks && a.buildStacks();\n a.series.forEach(function (l) {\n if (l.visible || !b.options.chart.ignoreHiddenSeries) {\n var e = l.options,\n w = e.threshold;\n a.hasVisibleSeries = !0;\n a.positiveValuesOnly && 0 >= w && (w = null);nn if (a.isXAxis) {n if (e = l.xData, e.length) {n d = l.getXExtremes(e);n var f = d.min;n var c = d.max;n F(f) || f instanceof Date || (e = e.filter(F), d = l.getXExtremes(e), f = d.min, c = d.max);n e.length && (a.dataMin = Math.min(v(a.dataMin, f), f), a.dataMax = Math.max(v(a.dataMax, c), c));n }n } else if (l.getExtremes(), c = l.dataMax, f = l.dataMin, A(f) && A© && (a.dataMin = Math.min(v(a.dataMin, f), f), a.dataMax = Math.max(v(a.dataMax, c), c)), A(w) && (a.threshold = w), !e.softThreshold || a.positiveValuesOnly) a.softThreshold = !1;n }n });n });n e(this, "afterGetSeriesExtremes");n },n translate: function translate(a, b, d, e, f, c) {n var l = this.linkedParent || this,n w = 1,n k = 0,n t = e ? l.oldTransA : l.transA;n e = e ? l.oldMin : l.min;n var h = l.minPixelPadding;n f = (l.isOrdinal || l.isBroken || l.isLog && f) && l.lin2val;n t || (t = l.transA);n d && (w *= -1, k = l.len);n l.reversed && (w *= -1, k -= w * (l.sector || l.len));n b ? (a = (a * w + k - h) / t + e, f && (a = l.lin2val(a))) : (f && (a = l.val2lin(a)), a = F(e) ? w * (a - e) * t + k + w * h + (F© ? t * c : 0) : void 0);n return a;n },n toPixels: function toPixels(a, b) {n return this.translate(a, !1, !this.horiz, null, !0) + (b ? 0 : this.pos);n },n toValue: function toValue(a, b) {n return this.translate(a - (b ? 0 : this.pos), !0, !this.horiz, null, !0);n },n getPlotLinePath: function getPlotLinePath(a) {n var b = this,n d = b.chart,n f = b.left,n w = b.top,n c = a.old,n k = a.value,n t = a.translatedValue,n h = a.lineWidth,n B = a.force,n r,n q,n I,n m,n g = c && d.oldChartHeight || d.chartHeight,n p = c && d.oldChartWidth || d.chartWidth,n E,n x = b.transB,n u = function u(a, b, d) {n if ("pass" !== B && a < b || a > d) B ? a = Math.min(Math.max(b, a), d) : E = !0;n return a;n };nn a = {n value: k,n lineWidth: h,n old: c,n force: B,n acrossPanes: a.acrossPanes,n translatedValue: tn };n e(this, "getPlotLinePath", a, function (a) {n t = v(t, b.translate(k, null, null, c));n t = Math.min(Math.max(-1E5, t), 1E5);n r = I = Math.round(t + x);n q = m = Math.round(g - t - x);n F(t) ? b.horiz ? (q = w, m = g - b.bottom, r = I = u(r, f, f + b.width)) : (r = f, I = p - b.right, q = m = u(q, w, w + b.height)) : (E = !0, B = !1);n a.path = E && !B ? null : d.renderer.crispLine(["M", r, q, "L", I, m], h || 1);n });n return a.path;n },n getLinearTickPositions: function getLinearTickPositions(a, b, d) {n var l = g(Math.floor(b / a) * a);n d = g(Math.ceil(d / a) * a);n var e = [],n f;n g(l + a) === l && (f = 20);n if (this.single) return [b];nn for (b = l; b <= d;) {\n e.push(b);\n b = g(b + a, f);\n if (b === w) break;\n var w = b;\n }\n\n return e;\n },\n getMinorTickInterval: function getMinorTickInterval() {\n var a = this.options;\n return !0 === a.minorTicks ? v(a.minorTickInterval, \"auto\") : !1 === a.minorTicks ? null : a.minorTickInterval;\n },\n getMinorTickPositions: function getMinorTickPositions() {\n var a = this,\n b = a.options,\n d = a.tickPositions,\n e = a.minorTickInterval,\n f = [],\n c = a.pointRangePadding || 0,\n k = a.min - c;\n c = a.max + c;\n var t = c - k;\n if (t && t / e < a.len / 3) if (a.isLog) this.paddedTicks.forEach(function (b, d, l) {\n d && f.push.apply(f, a.getLogTickPositions(e, l[d - 1], l[d], !0));\n });else if (a.isDatetimeAxis && \"auto\" === this.getMinorTickInterval()) f = f.concat(a.getTimeTicks(a.normalizeTimeTickInterval(e), k, c, b.startOfWeek));else for (b = k + (d[0] - k) % e; b <= c && b !== f[0]; b += e) {\n f.push(b);\n }\n 0 !== f.length && a.trimTicks(f);\n return f;\n },\n adjustForMinRange: function adjustForMinRange() {\n var a = this.options,\n b = this.min,\n d = this.max,\n e,\n f,\n c,\n k,\n t;\n this.isXAxis && void 0 === this.minRange && !this.isLog && (A(a.min) || A(a.max) ? this.minRange = null : (this.series.forEach(function (a) {\n k = a.xData;\n\n for (f = t = a.xIncrement ? 1 : k.length - 1; 0 < f; f--) {\n if (c = k[f] - k[f - 1], void 0 === e || c < e) e = c;\n }\n }), this.minRange = Math.min(5 * e, this.dataMax - this.dataMin)));\n\n if (d - b < this.minRange) {\n var h = this.dataMax - this.dataMin >= this.minRange;n var B = this.minRange;n var r = (B - d + b) / 2;n r = [b - r, v(a.min, b - r)];n h && (r[2] = this.isLog ? this.log2lin(this.dataMin) : this.dataMin);n b = x®;n d = [b + B, v(a.max, b + B)];n h && (d[2] = this.isLog ? this.log2lin(this.dataMax) : this.dataMax);n d = m(d);n d - b < B && (r[0] = d - B, r[1] = v(a.min, d - B), b = x(r));\n }\n\n this.min = b;\n this.max = d;\n },\n getClosest: function getClosest() {\n var a;\n this.categories ? a = 1 : this.series.forEach(function (b) {\n var d = b.closestPointRange,\n l = b.visible || !b.chart.options.chart.ignoreHiddenSeries;\n !b.noSharedTooltip && A(d) && l && (a = A(a) ? Math.min(a, d) : d);\n });\n return a;\n },\n nameToX: function nameToX(a) {\n var b = D(this.categories),\n d = b ? this.categories : this.names,\n e = a.options.x;\n a.series.requireSorting = !1;\n A(e) || (e = !1 === this.options.uniqueNames ? a.series.autoIncrement() : b ? d.indexOf(a.name) : v(d.keys[a.name], -1));\n\n if (-1 === e) {\n if (!b) var f = d.length;\n } else f = e;\n\n void 0 !== f && (this.names[f] = a.name, this.names.keys[a.name] = f);\n return f;\n },\n updateNames: function updateNames() {\n var a = this,\n b = this.names;\n 0 < b.length && (Object.keys(b.keys).forEach(function (a) {\n delete b.keys[a];\n }), b.length = 0, this.minRange = this.userMinRange, (this.series || []).forEach(function (b) {\n b.xIncrement = null;\n if (!b.points || b.isDirtyData) a.max = Math.max(a.max, b.xData.length - 1), b.processData(), b.generatePoints();\n b.data.forEach(function (d, l) {\n if (d && d.options && void 0 !== d.name) {\n var e = a.nameToX(d);\n void 0 !== e && e !== d.x && (d.x = e, b.xData[l] = e);\n }\n });\n }));\n },\n setAxisTranslation: function setAxisTranslation(a) {\n var b = this,\n d = b.max - b.min,\n f = b.axisPointRange || 0,\n c = 0,\n w = 0,\n k = b.linkedParent,\n h = !!b.categories,\n B = b.transA,\n r = b.isXAxis;\n\n if (r || h || f) {\n var q = b.getClosest();\n k ? (c = k.minPointOffset, w = k.pointRangePadding) : b.series.forEach(function (a) {\n var d = h ? 1 : r ? v(a.options.pointRange, q, 0) : b.axisPointRange || 0,\n l = a.options.pointPlacement;\n f = Math.max(f, d);\n if (!b.single || h) a = t.xrange && a instanceof t.xrange ? !r : r, c = Math.max(c, a && z(l) ? 0 : d / 2), w = Math.max(w, a && \"on\" === l ? 0 : d);\n });\n k = b.ordinalSlope && q ? b.ordinalSlope / q : 1;\n b.minPointOffset = c *= k;\n b.pointRangePadding = w *= k;\n b.pointRange = Math.min(f, d);\n r && (b.closestPointRange = q);\n }\n\n a && (b.oldTransA = B);\n b.translationSlope = b.transA = B = b.staticScale || b.len / (d + w || 1);\n b.transB = b.horiz ? b.left : b.bottom;\n b.minPixelPadding = B * c;\n e(this, \"afterSetAxisTranslation\");\n },\n minFromRange: function minFromRange() {\n return this.max - this.range;\n },\n setTickInterval: function setTickInterval(a) {\n var b = this,\n d = b.chart,\n f = b.options,\n w = b.isLog,\n k = b.isDatetimeAxis,\n t = b.isXAxis,\n h = b.isLinked,\n B = f.maxPadding,\n I = f.minPadding,\n m = f.tickInterval,\n p = f.tickPixelInterval,\n E = b.categories,\n x = F(b.threshold) ? b.threshold : null,\n u = b.softThreshold;\n k || E || h || this.getTickAmount();\n var z = v(b.userMin, f.min);\n var y = v(b.userMax, f.max);\n\n if (h) {\n b.linkedParent = d[b.coll][f.linkedTo];\n var n = b.linkedParent.getExtremes();\n b.min = v(n.min, n.dataMin);\n b.max = v(n.max, n.dataMax);\n f.type !== b.linkedParent.options.type && c.error(11, 1, d);\n } else {\n if (!u && A(x)) if (b.dataMin >= x) n = x, I = 0;else if (b.dataMax <= x) {\n var L = x;\n B = 0;\n }\n b.min = v(z, n, b.dataMin);\n b.max = v(y, L, b.dataMax);\n }\n\n w && (b.positiveValuesOnly && !a && 0 >= Math.min(b.min, v(b.dataMin, b.min)) && c.error(10, 1, d), b.min = g(b.log2lin(b.min), 15), b.max = g(b.log2lin(b.max), 15));n b.range && A(b.max) && (b.userMin = b.min = z = Math.max(b.dataMin, b.minFromRange()), b.userMax = y = b.max, b.range = null);n e(b, "foundExtremes");n b.beforePadding && b.beforePadding();n b.adjustForMinRange();n !(E || b.axisPointRange || b.usePercentage || h) && A(b.min) && A(b.max) && (d = b.max - b.min) && (!A(z) && I && (b.min -= d * I), !A(y) && B && (b.max += d * B));n F(f.softMin) && !F(b.userMin) && f.softMin < b.min && (b.min = z = f.softMin);\n F(f.softMax) && !F(b.userMax) && f.softMax > b.max && (b.max = y = f.softMax);n F(f.floor) && (b.min = Math.min(Math.max(b.min, f.floor), Number.MAX_VALUE));n F(f.ceiling) && (b.max = Math.max(Math.min(b.max, f.ceiling), v(b.userMax, -Number.MAX_VALUE)));n u && A(b.dataMin) && (x = x || 0, !A(z) && b.min < x && b.dataMin >= x ? b.min = b.options.minRange ? Math.min(x, b.max - b.minRange) : x : !A(y) && b.max > x && b.dataMax <= x && (b.max = b.options.minRange ? Math.max(x, b.min + b.minRange) : x));\n b.tickInterval = b.min === b.max || void 0 === b.min || void 0 === b.max ? 1 : h && !m && p === b.linkedParent.options.tickPixelInterval ? m = b.linkedParent.tickInterval : v(m, this.tickAmount ? (b.max - b.min) / Math.max(this.tickAmount - 1, 1) : void 0, E ? 1 : (b.max - b.min) * p / Math.max(b.len, p));\n t && !a && b.series.forEach(function (a) {\n a.processData(b.min !== b.oldMin || b.max !== b.oldMax);\n });\n b.setAxisTranslation(!0);\n b.beforeSetTickPositions && b.beforeSetTickPositions();\n b.postProcessTickInterval && (b.tickInterval = b.postProcessTickInterval(b.tickInterval));\n b.pointRange && !m && (b.tickInterval = Math.max(b.pointRange, b.tickInterval));\n a = v(f.minTickInterval, b.isDatetimeAxis && b.closestPointRange);\n !m && b.tickInterval < a && (b.tickInterval = a);\n k || w || m || (b.tickInterval = q(b.tickInterval, null, r(b.tickInterval), v(f.allowDecimals, !(.5 < b.tickInterval && 5 > b.tickInterval && 1E3 < b.max && 9999 > b.max)), !!this.tickAmount));n this.tickAmount || (b.tickInterval = b.unsquish());n this.setTickPositions();n },n setTickPositions: function setTickPositions() {n var a = this.options,n b = a.tickPositions;n var d = this.getMinorTickInterval();n var f = a.tickPositioner,n k = a.startOnTick,n t = a.endOnTick;n this.tickmarkOffset = this.categories && "between" === a.tickmarkPlacement && 1 === this.tickInterval ? .5 : 0;n this.minorTickInterval = "auto" === d && this.tickInterval ? this.tickInterval / 5 : d;n this.single = this.min === this.max && A(this.min) && !this.tickAmount && (parseInt(this.min, 10) === this.min || !1 !== a.allowDecimals);n this.tickPositions = d = b && b.slice();n !d && (!this.ordinalPositions && (this.max - this.min) / this.tickInterval > Math.max(2 * this.len, 200) ? (d = [this.min, this.max], c.error(19, !1, this.chart)) : d = this.isDatetimeAxis ? this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval, a.units), this.min, this.max, a.startOfWeek, this.ordinalPositions, this.closestPointRange, !0) : this.isLog ? this.getLogTickPositions(this.tickInterval, this.min, this.max) : this.getLinearTickPositions(this.tickInterval, this.min, this.max), d.length > this.len && (d = [d[0], d.pop()], d[0] === d[1] && (d.length = 1)), this.tickPositions = d, f && (f = f.apply(this, [this.min, this.max]))) && (this.tickPositions = d = f);n this.paddedTicks = d.slice(0);n this.trimTicks(d, k, t);n this.isLinked || (this.single && 2 > d.length && !this.categories && (this.min -= .5, this.max += .5), b || f || this.adjustTickAmount());n e(this, "afterSetTickPositions");n },n trimTicks: function trimTicks(a, b, d) {n var f = a[0],n c = a[a.length - 1],n l = this.minPointOffset || 0;n e(this, "trimTicks");nn if (!this.isLinked) {n if (b && -Infinity !== f) this.min = f;else for (; this.min - l > a[0];) {n a.shift();n }n if (d) this.max = c;else for (; this.max + l < a[a.length - 1];) {\n a.pop();\n }\n 0 === a.length && A(f) && !this.options.tickPositions && a.push((c + f) / 2);\n }\n },\n alignToOthers: function alignToOthers() {\n var a = {},\n b,\n d = this.options;\n !1 === this.chart.options.chart.alignTicks || !1 === d.alignTicks || !1 === d.startOnTick || !1 === d.endOnTick || this.isLog || this.chart[this.coll].forEach(function (d) {\n var f = d.options;\n f = [d.horiz ? f.left : f.top, f.width, f.height, f.pane].join();\n d.series.length && (a[f] ? b = !0 : a[f] = 1);\n });\n return b;\n },\n getTickAmount: function getTickAmount() {\n var a = this.options,\n b = a.tickAmount,\n d = a.tickPixelInterval;\n !A(a.tickInterval) && this.len < d && !this.isRadial && !this.isLog && a.startOnTick && a.endOnTick && (b = 2);\n !b && this.alignToOthers() && (b = Math.ceil(this.len / d) + 1);\n 4 > b && (this.finalTickAmt = b, b = 5);n this.tickAmount = b;n },n adjustTickAmount: function adjustTickAmount() {n var a = this.options,n b = this.tickInterval,n d = this.tickPositions,n f = this.tickAmount,n e = this.finalTickAmt,n c = d && d.length,n k = v(this.threshold, this.softThreshold ? 0 : null),n t;nn if (this.hasData()) {n if (c < f) {\n for (t = this.min; d.length < f;) {\n d.length % 2 || t === k ? d.push(g(d[d.length - 1] + b)) : d.unshift(g(d[0] - b));\n }\n\n this.transA *= (c - 1) / (f - 1);\n this.min = a.startOnTick ? d[0] : Math.min(this.min, d[0]);\n this.max = a.endOnTick ? d[d.length - 1] : Math.max(this.max, d[d.length - 1]);\n } else c > f && (this.tickInterval *= 2, this.setTickPositions());nn if (A(e)) {n for (b = a = d.length; b–;) {n (3 === e && 1 === b % 2 || 2 >= e && 0 < b && b < a - 1) && d.splice(b, 1);\n }\n\n this.finalTickAmt = void 0;\n }\n }\n },\n setScale: function setScale() {\n var a = this.series.some(function (a) {\n return a.isDirtyData || a.isDirty || a.xAxis && a.xAxis.isDirty;\n }),\n b;\n this.oldMin = this.min;\n this.oldMax = this.max;\n this.oldAxisLength = this.len;\n this.setAxisSize();\n (b = this.len !== this.oldAxisLength) || a || this.isLinked || this.forceRedraw || this.userMin !== this.oldUserMin || this.userMax !== this.oldUserMax || this.alignToOthers() ? (this.resetStacks && this.resetStacks(), this.forceRedraw = !1, this.getSeriesExtremes(), this.setTickInterval(), this.oldUserMin = this.userMin, this.oldUserMax = this.userMax, this.isDirty || (this.isDirty = b || this.min !== this.oldMin || this.max !== this.oldMax)) : this.cleanStacks && this.cleanStacks();\n e(this, \"afterSetScale\");\n },\n setExtremes: function setExtremes(a, b, d, c, k) {\n var l = this,\n w = l.chart;\n d = v(d, !0);\n l.series.forEach(function (a) {\n delete a.kdTree;\n });\n k = f(k, {\n min: a,\n max: b\n });\n e(l, \"setExtremes\", k, function () {\n l.userMin = a;\n l.userMax = b;\n l.eventArgs = k;\n d && w.redraw(c);\n });\n },\n zoom: function zoom(a, b) {\n var d = this.dataMin,\n f = this.dataMax,\n c = this.options,\n k = Math.min(d, v(c.min, d)),\n l = Math.max(f, v(c.max, f));\n a = {\n newMin: a,\n newMax: b\n };\n e(this, \"zoom\", a, function (a) {\n var b = a.newMin,\n e = a.newMax;\n if (b !== this.min || e !== this.max) this.allowZoomOutside || (A(d) && (b < k && (b = k), b > l && (b = l)), A(f) && (e < k && (e = k), e > l && (e = l))), this.displayBtn = void 0 !== b || void 0 !== e, this.setExtremes(b, e, !1, void 0, {n trigger: "zoom"n });n a.zoomed = !0;n });n return a.zoomed;n },n setAxisSize: function setAxisSize() {n var a = this.chart,n b = this.options,n d = b.offsets || [0, 0, 0, 0],n f = this.horiz,n e = this.width = Math.round(c.relativeLength(v(b.width, a.plotWidth - d[3] + d[1]), a.plotWidth)),n k = this.height = Math.round(c.relativeLength(v(b.height, a.plotHeight - d[0] + d[2]), a.plotHeight)),n t = this.top = Math.round(c.relativeLength(v(b.top, a.plotTop + d[0]), a.plotHeight, a.plotTop));n b = this.left = Math.round(c.relativeLength(v(b.left, a.plotLeft + d[3]), a.plotWidth, a.plotLeft));n this.bottom = a.chartHeight - k - t;n this.right = a.chartWidth - e - b;n this.len = Math.max(f ? e : k, 0);n this.pos = f ? b : t;n },n getExtremes: function getExtremes() {n var a = this.isLog;n return {n min: a ? g(this.lin2log(this.min)) : this.min,n max: a ? g(this.lin2log(this.max)) : this.max,n dataMin: this.dataMin,n dataMax: this.dataMax,n userMin: this.userMin,n userMax: this.userMaxn };n },n getThreshold: function getThreshold(a) {n var b = this.isLog,n d = b ? this.lin2log(this.min) : this.min;n b = b ? this.lin2log(this.max) : this.max;n null === a || -Infinity === a ? a = d : Infinity === a ? a = b : d > a ? a = d : b < a && (a = b);\n return this.translate(a, 0, 1, 0, 1);\n },\n autoLabelAlign: function autoLabelAlign(a) {\n var b = (v(a, 0) - 90 * this.side + 720) % 360;\n a = {\n align: \"center\"\n };\n e(this, \"autoLabelAlign\", a, function (a) {\n 15 < b && 165 > b ? a.align = "right" : 195 < b && 345 > b && (a.align = "left");n });n return a.align;n },n tickSize: function tickSize(a) {n var b = this.options,n d = b[a + "Length"],n f = v(b[a + "Width"], "tick" === a && this.isXAxis && !this.categories ? 1 : 0);nn if (f && d) {n "inside" === b[a + "Position"] && (d = -d);n var c = [d, f];n }nn a = {n tickSize: cn };n e(this, "afterTickSize", a);n return a.tickSize;n },n labelMetrics: function labelMetrics() {n var a = this.tickPositions && this.tickPositions[0] || 0;n return this.chart.renderer.fontMetrics(this.options.labels.style && this.options.labels.style.fontSize, this.ticks[a] && this.ticks[a].label);n },n unsquish: function unsquish() {n var b = this.options.labels,n d = this.horiz,n f = this.tickInterval,n e = f,n c = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / f),n k,n t = b.rotation,n h = this.labelMetrics(),n B,n r = Number.MAX_VALUE,n q,n I = this.max - this.min,n m = function m(a) {n var b = a / (c || 1);n b = 1 < b ? Math.ceil(b) : 1;\n b * f > I && Infinity !== a && Infinity !== c && I && (b = Math.ceil(I / f));n return g(b * f);n };nn d ? (q = !b.staggerLines && !b.step && (A(t) ? [t] : c < v(b.autoRotationLimit, 80) && b.autoRotation)) && q.forEach(function (b) {\n if (b === t || b && -90 <= b && 90 >= b) {n B = m(Math.abs(h.h / Math.sin(a * b)));n var d = B + Math.abs(b / 360);n d < r && (r = d, k = b, e = B);\n }\n }) : b.step || (e = m(h.h));\n this.autoRotation = q;\n this.labelRotation = v(k, t);\n return e;\n },\n getSlotWidth: function getSlotWidth(a) {\n var b = this.chart,\n d = this.horiz,\n f = this.options.labels,\n e = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1),\n c = b.margin[3];\n return a && a.slotWidth || d && 2 > (f.step || 0) && !f.rotation && (this.staggerLines || 1) * this.len / e || !d && (f.style && parseInt(f.style.width, 10) || c && c - b.spacing[3] || .33 * b.chartWidth);n },n renderUnsquish: function renderUnsquish() {n var a = this.chart,n b = a.renderer,n d = this.tickPositions,n f = this.ticks,n e = this.options.labels,n c = e && e.style || {},n k = this.horiz,n t = this.getSlotWidth(),n h = Math.max(1, Math.round(t - 2 * (e.padding || 5))),n B = {},n r = this.labelMetrics(),n q = e.style && e.style.textOverflow,n v = 0;n z(e.rotation) || (B.rotation = e.rotation || 0);n d.forEach(function (a) {n (a = f[a]) && a.label && a.label.textPxLength > v && (v = a.label.textPxLength);n });n this.maxLabelLength = v;n if (this.autoRotation) v > h && v > r.h ? B.rotation = this.labelRotation : this.labelRotation = 0;else if (t) {n var I = h;nn if (!q) {n var m = "clip";nn for (h = d.length; !k && h–;) {n var g = d[h];n if (g = f[g].label) g.styles && "ellipsis" === g.styles.textOverflow ? g.css({n textOverflow: "clip"n }) : g.textPxLength > t && g.css({n width: t + "px"n }), g.getBBox().height > this.len / d.length - (r.h - r.f) && (g.specificTextOverflow = "ellipsis");n }n }n }n B.rotation && (I = v > .5 * a.chartHeight ? .33 * a.chartHeight : v, q || (m = "ellipsis"));n if (this.labelAlign = e.align || this.autoLabelAlign(this.labelRotation)) B.align = this.labelAlign;n d.forEach(function (a) {n var b = (a = f[a]) && a.label,n d = c.width,n e = {};n b && (b.attr(B), a.shortenLabel ? a.shortenLabel() : I && !d && "nowrap" !== c.whiteSpace && (I < b.textPxLength || \"SPAN\" === b.element.tagName) ? (e.width = I, q || (e.textOverflow = b.specificTextOverflow || m), b.css(e)) : b.styles && b.styles.width && !e.width && !d && b.css({\n width: null\n }), delete b.specificTextOverflow, a.rotation = B.rotation);\n }, this);\n this.tickRotCorr = b.rotCorr(r.b, this.labelRotation || 0, 0 !== this.side);\n },\n hasData: function hasData() {\n return this.series.some(function (a) {\n return a.hasData();\n }) || this.options.showEmpty && A(this.min) && A(this.max);\n },\n addTitle: function addTitle(a) {\n var b = this.chart.renderer,\n d = this.horiz,\n f = this.opposite,\n e = this.options.title,\n c,\n k = this.chart.styledMode;\n this.axisTitle || ((c = e.textAlign) || (c = (d ? {\n low: \"left\",\n middle: \"center\",\n high: \"right\"\n } : {\n low: f ? \"right\" : \"left\",\n middle: \"center\",\n high: f ? \"left\" : \"right\"\n })[e.align]), this.axisTitle = b.text(e.text, 0, 0, e.useHTML).attr({\n zIndex: 7,\n rotation: e.rotation || 0,\n align: c\n }).addClass(\"highcharts-axis-title\"), k || this.axisTitle.css(E(e.style)), this.axisTitle.add(this.axisGroup), this.axisTitle.isNew = !0);\n k || e.style.width || this.isRadial || this.axisTitle.css({\n width: this.len\n });\n this.axisTitle[a ? \"show\" : \"hide\"](a);\n },\n generateTick: function generateTick(a) {\n var b = this.ticks;\n b[a] ? b[a].addLabel() : b[a] = new I(this, a);\n },\n getOffset: function getOffset() {\n var a = this,\n b = a.chart,\n d = b.renderer,\n f = a.options,\n c = a.tickPositions,\n k = a.ticks,\n t = a.horiz,\n h = a.side,\n B = b.inverted && !a.isZAxis ? [1, 0, 3, 2][h] : h,\n r,\n q = 0,\n I = 0,\n m = f.title,\n g = f.labels,\n p = 0,\n E = b.axisOffset;\n b = b.clipOffset;\n var x = [-1, 1, 1, -1][h],\n z = f.className,\n y = a.axisParent;\n var n = a.hasData();\n a.showAxis = r = n || v(f.showEmpty, !0);\n a.staggerLines = a.horiz && g.staggerLines;\n a.axisGroup || (a.gridGroup = d.g(\"grid\").attr({\n zIndex: f.gridZIndex || 1\n }).addClass(\"highcharts-\" + this.coll.toLowerCase() + \"-grid \" + (z || \"\")).add(y), a.axisGroup = d.g(\"axis\").attr({\n zIndex: f.zIndex || 2\n }).addClass(\"highcharts-\" + this.coll.toLowerCase() + \" \" + (z || \"\")).add(y), a.labelGroup = d.g(\"axis-labels\").attr({\n zIndex: g.zIndex || 7\n }).addClass(\"highcharts-\" + a.coll.toLowerCase() + \"-labels \" + (z || \"\")).add(y));\n n || a.isLinked ? (c.forEach(function (b, d) {\n a.generateTick(b, d);\n }), a.renderUnsquish(), a.reserveSpaceDefault = 0 === h || 2 === h || {\n 1: \"left\",\n 3: \"right\"\n }[h] === a.labelAlign, v(g.reserveSpace, \"center\" === a.labelAlign ? !0 : null, a.reserveSpaceDefault) && c.forEach(function (a) n p = Math.max(k[a].getLabelSize(), p);n }), a.staggerLines && (p *= a.staggerLines), a.labelOffset = p * (a.opposite ? -1 : 1)) : u(k, function (a, b) {n a.destroy();n delete k[b];n });nn if (m && m.text && !1 !== m.enabled && (a.addTitle®, r && !1 !== m.reserveSpace)) {n a.titleOffset = q = a.axisTitle.getBBox()[t ? "height" : "width"];n var L = m.offset;n I = A(L) ? 0 : v(m.margin, t ? 5 : 10);n }nn a.renderLine();n a.offset = x * v(f.offset, E[h] ? E[h] + (f.margin || 0) : 0);n a.tickRotCorr = a.tickRotCorr || {n x: 0,n y: 0n };n d = 0 === h ? -a.labelMetrics().h : 2 === h ? a.tickRotCorr.y : 0;n I = Math.abs(p) + I;n p && (I = I - d + x * (t ? v(g.y, a.tickRotCorr.y + 8 * x) : g.x));n a.axisTitleMargin = v(L, I);n a.getMaxLabelDimensions && (a.maxLabelDimensions = a.getMaxLabelDimensions(k, c));n t = this.tickSize("tick");n E[h] = Math.max(E[h], a.axisTitleMargin + q + x * a.offset, I, c && c.length && t ? t[0] + x * a.offset : 0);n f = f.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() / 2);n b[B] = Math.max(b[B], f);n e(this, "afterGetOffset");n },n getLinePath: function getLinePath(a) {n var b = this.chart,n d = this.opposite,n f = this.offset,n e = this.horiz,n c = this.left + (d ? this.width : 0) + f;n f = b.chartHeight - this.bottom - (d ? this.height : 0) + f;n d && (a *= -1);n return b.renderer.crispLine(["M", e ? this.left : c, e ? f : this.top, "L", e ? b.chartWidth - this.right : c, e ? f : b.chartHeight - this.bottom], a);n },n renderLine: function renderLine() {n this.axisLine || (this.axisLine = this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup), this.chart.styledMode || this.axisLine.attr({n stroke: this.options.lineColor,n "stroke-width": this.options.lineWidth,n zIndex: 7n }));n },n getTitlePosition: function getTitlePosition() {n var a = this.horiz,n b = this.left,n d = this.top,n f = this.len,n c = this.options.title,n k = a ? b : d,n t = this.opposite,n h = this.offset,n B = c.x || 0,n r = c.y || 0,n q = this.axisTitle,n v = this.chart.renderer.fontMetrics(c.style && c.style.fontSize, q);n q = Math.max(q.getBBox(null, 0).height - v.h - 1, 0);n f = {n low: k + (a ? 0 : f),n middle: k + f / 2,n high: k + (a ? f : 0)n ;n b = (a ? d + this.height : b) + (a ? 1 : -1) * (t ? -1 : 1) * this.axisTitleMargin + [-q, q, v.f, -q];n a = n x: a ? f + B : b + (t ? this.width : 0) + h + B,n y: a ? b + r - (t ? this.height : 0) + h : f + rn };n e(this, "afterGetTitlePosition", {n titlePosition: an });n return a;n },n renderMinorTick: function renderMinorTick(a) {n var b = this.chart.hasRendered && F(this.oldMin),n d = this.minorTicks;n d[a] || (d[a] = new I(this, a, "minor"));n b && d[a].isNew && d[a].render(null, !0);n d[a].render(null, !1, 1);n },n renderTick: function renderTick(a, b) {n var d = this.isLinked,n f = this.ticks,n e = this.chart.hasRendered && F(this.oldMin);n if (!d || a >= this.min && a <= this.max) f[a] || (f[a] = new I(this, a)), e && f[a].isNew && f[a].render(b, !0, -1), f[a].render(b);\n },\n render: function render() {\n var a = this,\n b = a.chart,\n d = a.options,\n f = a.isLog,\n k = a.isLinked,\n t = a.tickPositions,\n h = a.axisTitle,\n r = a.ticks,\n q = a.minorTicks,\n v = a.alternateBands,\n m = d.stackLabels,\n g = d.alternateGridColor,\n p = a.tickmarkOffset,\n E = a.axisLine,\n x = a.showAxis,\n z = C(b.renderer.globalAnimation),\n y,\n n;\n a.labelEdge.length = 0;\n a.overlap = !1;\n [r, q, v].forEach(function (a) {\n u(a, function (a) {\n a.isActive = !1;\n });\n });\n if (a.hasData() || k) a.minorTickInterval && !a.categories && a.getMinorTickPositions().forEach(function (b) {\n a.renderMinorTick(b);\n }), t.length && (t.forEach(function (b, d) {\n a.renderTick(b, d);\n }), p && (0 === a.min || a.single) && (r[-1] || (r[-1] = new I(a, -1, null, !0)), r[-1].render(-1))), g && t.forEach(function (d, e) {\n n = void 0 !== t[e + 1] ? t[e + 1] + p : a.max - p;\n 0 === e % 2 && d < a.max && n <= a.max + (b.polar ? -p : p) && (v[d] || (v[d] = new c.PlotLineOrBand(a)), y = d + p, v[d].options = {\n from: f ? a.lin2log(y) : y,\n to: f ? a.lin2log(n) : n,\n color: g\n }, v[d].render(), v[d].isActive = !0);\n }), a._addedPlotLB || ((d.plotLines || []).concat(d.plotBands || []).forEach(function (b) {\n a.addPlotBandOrLine(b);\n }), a._addedPlotLB = !0);\n [r, q, v].forEach(function (a) {\n var d,\n f = [],\n e = z.duration;\n u(a, function (a, b) {\n a.isActive || (a.render(b, !1, 0), a.isActive = !1, f.push(b));\n });\n B(function () {\n for (d = f.length; d--;) {\n a[f[d]] && !a[f[d]].isActive && (a[f[d]].destroy(), delete a[f[d]]);\n }\n }, a !== v && b.hasRendered && e ? e : 0);\n });\n E && (E[E.isPlaced ? \"animate\" : \"attr\"]({\n d: this.getLinePath(E.strokeWidth())\n }), E.isPlaced = !0, E[x ? \"show\" : \"hide\"](x));\n h && x && (d = a.getTitlePosition(), F(d.y) ? (h[h.isNew ? \"attr\" : \"animate\"](d), h.isNew = !1) : (h.attr(\"y\", -9999), h.isNew = !0));\n m && m.enabled && a.renderStackTotals();\n a.isDirty = !1;\n e(this, \"afterRender\");\n },\n redraw: function redraw() {\n this.visible && (this.render(), this.plotLinesAndBands.forEach(function (a) {\n a.render();\n }));\n this.series.forEach(function (a) {\n a.isDirty = !0;\n });\n },\n keepProps: \"extKey hcEvents names series userMax userMin\".split(\" \"),\n destroy: function destroy(a) {\n var b = this,\n f = b.stacks,\n c = b.plotLinesAndBands,\n t;\n e(this, \"destroy\", {\n keepEvents: a\n });\n a || k(b);\n u(f, function (a, b) {\n d(a);\n f[b] = null;\n });\n [b.ticks, b.minorTicks, b.alternateBands].forEach(function (a) {\n d(a);\n });\n if (c) for (a = c.length; a--;) {\n c[a].destroy();\n }\n \"stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar\".split(\" \").forEach(function (a) {\n b[a] && (b[a] = b[a].destroy());\n });\n\n for (t in b.plotLinesAndBandsGroups) {\n b.plotLinesAndBandsGroups[t] = b.plotLinesAndBandsGroups[t].destroy();\n }\n\n u(b, function (a, d) {\n -1 === b.keepProps.indexOf(d) && delete b[d];\n });\n },\n drawCrosshair: function drawCrosshair(a, b) {\n var d,\n f = this.crosshair,\n c = v(f.snap, !0),\n k,\n l = this.cross;\n e(this, \"drawCrosshair\", {\n e: a,\n point: b\n });\n a || (a = this.cross && this.cross.e);\n\n if (this.crosshair && !1 !== (A(b) || !c)) {\n c ? A(b) && (k = v(\"colorAxis\" !== this.coll ? b.crosshairPos : null, this.isXAxis ? b.plotX : this.len - b.plotY)) : k = a && (this.horiz ? a.chartX - this.pos : this.len - a.chartY + this.pos);\n A(k) && (d = this.getPlotLinePath({\n value: b && (this.isXAxis ? b.x : v(b.stackY, b.y)),\n translatedValue: k\n }) || null);\n\n if (!A(d)) {\n this.hideCrosshair();\n return;\n }\n\n c = this.categories && !this.isRadial;\n l || (this.cross = l = this.chart.renderer.path().addClass(\"highcharts-crosshair highcharts-crosshair-\" + (c ? \"category \" : \"thin \") + f.className).attr({\n zIndex: v(f.zIndex, 2)\n }).add(), this.chart.styledMode || (l.attr({\n stroke: f.color || (c ? p(\"#ccd6eb\").setOpacity(.25).get() : \"#cccccc\"),\n \"stroke-width\": v(f.width, 1)\n }).css({\n \"pointer-events\": \"none\"\n }), f.dashStyle && l.attr({\n dashstyle: f.dashStyle\n })));\n l.show().attr({\n d: d\n });\n c && !f.width && l.attr({\n \"stroke-width\": this.transA\n });\n this.cross.e = a;\n } else this.hideCrosshair();\n\n e(this, \"afterDrawCrosshair\", {\n e: a,\n point: b\n });\n },\n hideCrosshair: function hideCrosshair() {\n this.cross && this.cross.hide();\n e(this, \"afterHideCrosshair\");\n }\n });\n return c.Axis = n;\n });\n N(H, \"parts/DateTimeAxis.js\", [H[\"parts/Globals.js\"]], function (c) {\n var n = c.Axis,\n A = c.getMagnitude,\n D = c.normalizeTickInterval,\n F = c.timeUnits;\n\n n.prototype.getTimeTicks = function () {\n return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);\n };\n\n n.prototype.normalizeTimeTickInterval = function (c, u) {\n var z = u || [[\"millisecond\", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], [\"second\", [1, 2, 5, 10, 15, 30]], [\"minute\", [1, 2, 5, 10, 15, 30]], [\"hour\", [1, 2, 3, 4, 6, 8, 12]], [\"day\", [1, 2]], [\"week\", [1, 2]], [\"month\", [1, 2, 3, 4, 6]], [\"year\", null]];\n u = z[z.length - 1];\n var y = F[u[0]],\n n = u[1],\n x;\n\n for (x = 0; x < z.length && !(u = z[x], y = F[u[0]], n = u[1], z[x + 1] && c <= (y * n[n.length - 1] + F[z[x + 1][0]]) / 2); x++) {\n ;\n }\n\n y === F.year && c < 5 * y && (n = [1, 2, 5]);\n c = D(c / y, n, \"year\" === u[0] ? Math.max(A(c / y), 1) : 1);\n return {\n unitRange: y,\n count: c,\n unitName: u[0]\n };\n };\n });\n N(H, \"parts/LogarithmicAxis.js\", [H[\"parts/Globals.js\"]], function (c) {\n var n = c.Axis,\n A = c.getMagnitude,\n D = c.normalizeTickInterval,\n F = c.pick;\n\n n.prototype.getLogTickPositions = function (c, u, n, y) {\n var z = this.options,\n x = this.len,\n m = [];\n y || (this._minorAutoInterval = null);\n if (.5 <= c) c = Math.round(c), m = this.getLinearTickPositions(c, u, n);else if (.08 <= c) {\n x = Math.floor(u);\n var p, g;\n\n for (z = .3 < c ? [1, 2, 4] : .15 < c ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9]; x < n + 1 && !g; x++) {\n var b = z.length;\n\n for (p = 0; p < b && !g; p++) {\n var a = this.log2lin(this.lin2log(x) * z[p]);\n a > u && (!y || d <= n) && void 0 !== d && m.push(d);\n d > n && (g = !0);n var d = a;n }n }n } else u = this.lin2log(u), n = this.lin2log(n), c = y ? this.getMinorTickInterval() : z.tickInterval, c = F("auto" === c ? null : c, this._minorAutoInterval, z.tickPixelInterval / (y ? 5 : 1) * (n - u) / ((y ? x / this.tickPositions.length : x) || 1)), c = D(c, null, A©), m = this.getLinearTickPositions(c, u, n).map(this.log2lin), y || (this._minorAutoInterval = c / 5);n y || (this.tickInterval = c);n return m;n };nn n.prototype.log2lin = function © {n return Math.log© / Math.LN10;n };nn n.prototype.lin2log = function © {n return Math.pow(10, c);n };n });n N(H, "parts/PlotLineOrBand.js", [H["parts/Globals.js"], H["parts/Axis.js"], H["parts/Utilities.js"]], function (c, n, A) {n var D = A.defined,n F = A.erase,n z = A.objectEach,n u = c.arrayMax,n L = c.arrayMin,n y = c.destroyObjectProperties,n C = c.merge,n x = c.pick;nn c.PlotLineOrBand = function (c, p) {n this.axis = c;n p && (this.options = p, this.id = p.id);n };nn c.PlotLineOrBand.prototype = {n render: function render() {n c.fireEvent(this, "render");n var m = this,n p = m.axis,n g = p.horiz,n b = m.options,n a = b.label,n d = m.label,n f = b.to,n e = b.from,n h = b.value,n r = D(e) && D(f),n E = D(h),n q = m.svgElem,n v = !q,n k = [],n t = b.color,n B = x(b.zIndex, 0),n I = b.events;n k = {n "class": "highcharts-plot-" + (r ? "band " : "line ") + (b.className || "")n };n var w = {},n l = p.chart.renderer,n J = r ? "bands" : "lines";n p.isLog && (e = p.log2lin(e), f = p.log2lin(f), h = p.log2lin(h));n p.chart.styledMode || (E ? (k.stroke = t || "#999999", k["stroke-width"] = x(b.width, 1), b.dashStyle && (k.dashstyle = b.dashStyle)) : r && (k.fill = t || "#e6ebf5", b.borderWidth && (k.stroke = b.borderColor, k["stroke-width"] = b.borderWidth)));n w.zIndex = B;n J += "-" + B;n (t = p.plotLinesAndBandsGroups[J]) || (p.plotLinesAndBandsGroups[J] = t = l.g("plot-" + J).attr(w).add());n v && (m.svgElem = q = l.path().attr(k).add(t));n if (E) k = p.getPlotLinePath({n value: h,n lineWidth: q.strokeWidth(),n acrossPanes: b.acrossPanesn });else if ® k = p.getPlotBandPath(e, f, b);else return;n (v || !q.d) && k && k.length ? (q.attr({n d: kn }), I && z(I, function (a, b) {n q.on(b, function (a) {n I[b].apply(m, [a]);n });n })) : q && (k ? (q.show(!0), q.animate({n d: kn })) : q.d && (q.hide(), d && (m.label = d = d.destroy())));n a && (D(a.text) || D(a.formatter)) && k && k.length && 0 < p.width && 0 < p.height && !k.isFlat ? (a = C({\n align: g && r && \"center\",\n x: g ? !r && 4 : 10,\n verticalAlign: !g && r && \"middle\",\n y: g ? r ? 16 : 10 : r ? 6 : -4,\n rotation: g && !r && 90\n }, a), this.renderLabel(a, k, r, B)) : d && d.hide();\n return m;\n },\n renderLabel: function renderLabel(c, p, g, b) {\n var a = this.label,\n d = this.axis.chart.renderer;\n a || (a = {\n align: c.textAlign || c.align,\n rotation: c.rotation,\n \"class\": \"highcharts-plot-\" + (g ? \"band\" : \"line\") + \"-label \" + (c.className || \"\")\n }, a.zIndex = b, b = this.getLabelText(c), this.label = a = d.text(b, 0, 0, c.useHTML).attr(a).add(), this.axis.chart.styledMode || a.css(c.style));\n d = p.xBounds || [p[1], p[4], g ? p[6] : p[1]];\n p = p.yBounds || [p[2], p[5], g ? p[7] : p[2]];\n g = L(d);\n b = L(p);\n a.align(c, !1, {\n x: g,\n y: b,\n width: u(d) - g,\n height: u(p) - b\n });\n a.show(!0);\n },\n getLabelText: function getLabelText(c) {\n return D(c.formatter) ? c.formatter.call(this) : c.text;\n },\n destroy: function destroy() {\n F(this.axis.plotLinesAndBands, this);\n delete this.axis;\n y(this);\n }\n };\n c.extend(n.prototype, {\n getPlotBandPath: function getPlotBandPath(c, p) {\n var g = this.getPlotLinePath({\n value: p,\n force: !0,\n acrossPanes: this.options.acrossPanes\n }),\n b = this.getPlotLinePath({\n value: c,\n force: !0,\n acrossPanes: this.options.acrossPanes\n }),\n a = [],\n d = this.horiz,\n f = 1;\n c = c < this.min && p < this.min || c > this.max && p > this.max;nn if (b && g) {n if © {n var e = b.toString() === g.toString();n f = 0;n }nn for (c = 0; c < b.length; c += 6) {\n d && g[c + 1] === b[c + 1] ? (g[c + 1] += f, g[c + 4] += f) : d || g[c + 2] !== b[c + 2] || (g[c + 2] += f, g[c + 5] += f), a.push(\"M\", b[c + 1], b[c + 2], \"L\", b[c + 4], b[c + 5], g[c + 4], g[c + 5], g[c + 1], g[c + 2], \"z\"), a.isFlat = e;\n }\n }\n\n return a;\n },\n addPlotBand: function addPlotBand(c) {\n return this.addPlotBandOrLine(c, \"plotBands\");\n },\n addPlotLine: function addPlotLine(c) {\n return this.addPlotBandOrLine(c, \"plotLines\");\n },\n addPlotBandOrLine: function addPlotBandOrLine(m, p) {\n var g = new c.PlotLineOrBand(this, m).render(),\n b = this.userOptions;\n\n if (g) {\n if (p) {\n var a = b[p] || [];\n a.push(m);\n b[p] = a;\n }\n\n this.plotLinesAndBands.push(g);\n }\n\n return g;\n },\n removePlotBandOrLine: function removePlotBandOrLine(c) {\n for (var m = this.plotLinesAndBands, g = this.options, b = this.userOptions, a = m.length; a--;) {\n m[a].id === c && m[a].destroy();\n }\n\n [g.plotLines || [], b.plotLines || [], g.plotBands || [], b.plotBands || []].forEach(function (b) {\n for (a = b.length; a--;) {\n b[a].id === c && F(b, b[a]);\n }\n });\n },\n removePlotBand: function removePlotBand(c) {\n this.removePlotBandOrLine(c);\n },\n removePlotLine: function removePlotLine(c) {\n this.removePlotBandOrLine(c);\n }\n });\n });\n N(H, \"parts/Tooltip.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.defined,\n D = n.isNumber,\n F = n.isString,\n z = n.splat;\n \"\";\n var u = c.doc,\n L = c.extend,\n y = c.format,\n C = c.merge,\n x = c.pick,\n m = c.syncTimeout,\n p = c.timeUnits;\n\n c.Tooltip = function () {\n this.init.apply(this, arguments);\n };\n\n c.Tooltip.prototype = {\n init: function init(c, b) {\n this.chart = c;\n this.options = b;\n this.crosshairs = [];\n this.now = {\n x: 0,\n y: 0\n };\n this.isHidden = !0;\n this.split = b.split && !c.inverted;\n this.shared = b.shared || this.split;\n this.outside = x(b.outside, !(!c.scrollablePixelsX && !c.scrollablePixelsY)) && !this.split;\n },\n cleanSplit: function cleanSplit(c) {\n this.chart.series.forEach(function (b) {\n var a = b && b.tt;\n a && (!a.isActive || c ? b.tt = a.destroy() : a.isActive = !1);\n });\n },\n applyFilter: function applyFilter() {\n var c = this.chart;\n c.renderer.definition({\n tagName: \"filter\",\n id: \"drop-shadow-\" + c.index,\n opacity: .5,\n children: [{\n tagName: \"feGaussianBlur\",\n \"in\": \"SourceAlpha\",\n stdDeviation: 1\n }, {\n tagName: \"feOffset\",\n dx: 1,\n dy: 1\n }, {\n tagName: \"feComponentTransfer\",\n children: [{\n tagName: \"feFuncA\",\n type: \"linear\",\n slope: .3\n }]\n }, {\n tagName: \"feMerge\",\n children: [{\n tagName: \"feMergeNode\"\n }, {\n tagName: \"feMergeNode\",\n \"in\": \"SourceGraphic\"\n }]\n }]\n });\n c.renderer.definition({\n tagName: \"style\",\n textContent: \".highcharts-tooltip-\" + c.index + \"{filter:url(#drop-shadow-\" + c.index + \")}\"\n });\n },\n getLabel: function getLabel() {\n var g = this,\n b = this.chart.renderer,\n a = this.chart.styledMode,\n d = this.options,\n f = \"tooltip\" + (A(d.className) ? \" \" + d.className : \"\"),\n e;\n\n if (!this.label) {\n this.outside && (this.container = e = c.doc.createElement(\"div\"), e.className = \"highcharts-tooltip-container\", c.css(e, {\n position: \"absolute\",\n top: \"1px\",\n pointerEvents: d.style && d.style.pointerEvents,\n zIndex: 3\n }), c.doc.body.appendChild(e), this.renderer = b = new c.Renderer(e, 0, 0, {}, void 0, void 0, b.styledMode));\n this.split ? this.label = b.g(f) : (this.label = b.label(\"\", 0, 0, d.shape || \"callout\", null, null, d.useHTML, null, f).attr({\n padding: d.padding,\n r: d.borderRadius\n }), a || this.label.attr({\n fill: d.backgroundColor,\n \"stroke-width\": d.borderWidth\n }).css(d.style).shadow(d.shadow));\n a && (this.applyFilter(), this.label.addClass(\"highcharts-tooltip-\" + this.chart.index));\n\n if (this.outside) {\n var h = {\n x: this.label.xSetter,\n y: this.label.ySetter\n };\n\n this.label.xSetter = function (a, b) {\n h[b].call(this.label, g.distance);\n e.style.left = a + \"px\";\n };\n\n this.label.ySetter = function (a, b) {\n h[b].call(this.label, g.distance);\n e.style.top = a + \"px\";\n };\n }\n\n this.label.attr({\n zIndex: 8\n }).add();\n }\n\n return this.label;\n },\n update: function update(c) {\n this.destroy();\n C(!0, this.chart.options.tooltip.userOptions, c);\n this.init(this.chart, C(!0, this.options, c));\n },\n destroy: function destroy() {\n this.label && (this.label = this.label.destroy());\n this.split && this.tt && (this.cleanSplit(this.chart, !0), this.tt = this.tt.destroy());\n this.renderer && (this.renderer = this.renderer.destroy(), c.discardElement(this.container));\n c.clearTimeout(this.hideTimer);\n c.clearTimeout(this.tooltipTimeout);\n },\n move: function move(g, b, a, d) {\n var f = this,\n e = f.now,\n h = !1 !== f.options.animation && !f.isHidden && (1 < Math.abs(g - e.x) || 1 < Math.abs(b - e.y)),\n r = f.followPointer || 1 < f.len;\n L(e, {\n x: h ? (2 * e.x + g) / 3 : g,\n y: h ? (e.y + b) / 2 : b,\n anchorX: r ? void 0 : h ? (2 * e.anchorX + a) / 3 : a,\n anchorY: r ? void 0 : h ? (e.anchorY + d) / 2 : d\n });\n f.getLabel().attr(e);\n h && (c.clearTimeout(this.tooltipTimeout), this.tooltipTimeout = setTimeout(function () {\n f && f.move(g, b, a, d);\n }, 32));\n },\n hide: function hide(g) {\n var b = this;\n c.clearTimeout(this.hideTimer);\n g = x(g, this.options.hideDelay, 500);\n this.isHidden || (this.hideTimer = m(function () {\n b.getLabel()[g ? \"fadeOut\" : \"hide\"]();\n b.isHidden = !0;\n }, g));\n },\n getAnchor: function getAnchor(c, b) {\n var a = this.chart,\n d = a.pointer,\n f = a.inverted,\n e = a.plotTop,\n h = a.plotLeft,\n r = 0,\n g = 0,\n q,\n v;\n c = z(c);\n this.followPointer && b ? (void 0 === b.chartX && (b = d.normalize(b)), c = [b.chartX - a.plotLeft, b.chartY - e]) : c[0].tooltipPos ? c = c[0].tooltipPos : (c.forEach(function (a) {\n q = a.series.yAxis;\n v = a.series.xAxis;\n r += a.plotX + (!f && v ? v.left - h : 0);\n g += (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + (!f && q ? q.top - e : 0);\n }), r /= c.length, g /= c.length, c = [f ? a.plotWidth - g : r, this.shared && !f && 1 < c.length && b ? b.chartY - e : f ? a.plotHeight - r : g]);\n return c.map(Math.round);\n },\n getPosition: function getPosition(c, b, a) {\n var d = this.chart,\n f = this.distance,\n e = {},\n h = d.inverted && a.h || 0,\n r,\n g = this.outside,\n q = g ? u.documentElement.clientWidth - 2 * f : d.chartWidth,\n v = g ? Math.max(u.body.scrollHeight, u.documentElement.scrollHeight, u.body.offsetHeight, u.documentElement.offsetHeight, u.documentElement.clientHeight) : d.chartHeight,\n k = d.pointer.chartPosition,\n t = d.containerScaling,\n B = function B(a) {\n return t ? a * t.scaleX : a;\n },\n I = function I(a) {\n return t ? a * t.scaleY : a;\n },\n w = function w(e) {\n var l = \"x\" === e;\n return [e, l ? q : v, l ? c : b].concat(g ? [l ? B(c) : I(b), l ? k.left - f + B(a.plotX + d.plotLeft) : k.top - f + I(a.plotY + d.plotTop), 0, l ? q : v] : [l ? c : b, l ? a.plotX + d.plotLeft : a.plotY + d.plotTop, l ? d.plotLeft : d.plotTop, l ? d.plotLeft + d.plotWidth : d.plotTop + d.plotHeight]);\n },\n l = w(\"y\"),\n m = w(\"x\"),\n p = !this.followPointer && x(a.ttBelow, !d.inverted === !!a.negative),\n n = function n(a, b, d, c, k, l, t) {\n var w = \"y\" === a ? I(f) : B(f),\n r = (d - c) / 2,\n q = c < k - f,\n v = k + f + c < b,\n g = k - w - d + r;\n k = k + w - r;\n if (p && v) e[a] = k;else if (!p && q) e[a] = g;else if (q) e[a] = Math.min(t - c, 0 > g - h ? g : g - h);else if (v) e[a] = Math.max(l, k + h + d > b ? k : k + h);else return !1;n },n y = function y(a, b, d, c, k) {n var l;n k < f || k > b - f ? l = !1 : e[a] = k < d / 2 ? 1 : k > b - c / 2 ? b - c - 2 : k - d / 2;n return l;n },n z = function z(a) {n var b = l;n l = m;n m = b;n r = a;n },n M = function M() {n !1 !== n.apply(0, l) ? !1 !== y.apply(0, m) || r || (z(!0), M()) : r ? e.x = e.y = 0 : (z(!0), M());n };nn (d.inverted || 1 < this.len) && z();\n M();\n return e;\n },\n defaultFormatter: function defaultFormatter(c) {\n var b = this.points || z(this);\n var a = [c.tooltipFooterHeaderFormatter(b[0])];\n a = a.concat(c.bodyFormatter(b));\n a.push(c.tooltipFooterHeaderFormatter(b[0], !0));\n return a;\n },\n refresh: function refresh(g, b) {\n var a = this.chart,\n d = this.options,\n f = g,\n e = {},\n h = [];\n var r = d.formatter || this.defaultFormatter;\n e = this.shared;\n var m = a.styledMode;\n\n if (d.enabled) {\n c.clearTimeout(this.hideTimer);\n this.followPointer = z(f)[0].series.tooltipOptions.followPointer;\n var q = this.getAnchor(f, b);\n b = q[0];\n var v = q[1];\n !e || f.series && f.series.noSharedTooltip ? e = f.getLabelConfig() : (a.pointer.applyInactiveState(f), f.forEach(function (a) {\n a.setState(\"hover\");\n h.push(a.getLabelConfig());\n }), e = {\n x: f[0].category,\n y: f[0].y\n }, e.points = h, f = f[0]);\n this.len = h.length;\n r = r.call(e, this);\n e = f.series;\n this.distance = x(e.tooltipOptions.distance, 16);\n !1 === r ? this.hide() : (a = this.getLabel(), this.isHidden && a.attr({\n opacity: 1\n }).show(), this.split ? this.renderSplit(r, z(g)) : (d.style.width && !m || a.css({\n width: this.chart.spacingBox.width\n }), a.attr({\n text: r && r.join ? r.join(\"\") : r\n }), a.removeClass(/highcharts-color-[\\d]+/g).addClass(\"highcharts-color-\" + x(f.colorIndex, e.colorIndex)), m || a.attr({\n stroke: d.borderColor || f.color || e.color || \"#666666\"\n }), this.updatePosition({\n plotX: b,\n plotY: v,\n negative: f.negative,\n ttBelow: f.ttBelow,\n h: q[2] || 0\n })), this.isHidden = !1);\n c.fireEvent(this, \"refresh\");\n }\n },\n renderSplit: function renderSplit(g, b) {\n var a = this,\n d = [],\n f = this.chart,\n e = f.renderer,\n h = !0,\n r = this.options,\n m = 0,\n q,\n v = this.getLabel(),\n k = f.plotTop;\n F(g) && (g = [!1, g]);\n g.slice(0, b.length + 1).forEach(function (c, B) {\n if (!1 !== c && \"\" !== c) {\n B = b[B - 1] || {\n isHeader: !0,\n plotX: b[0].plotX,\n plotY: f.plotHeight\n };\n var t = B.series || a,\n w = t.tt,\n l = B.series || {},\n g = \"highcharts-color-\" + x(B.colorIndex, l.colorIndex, \"none\");\n w || (w = {\n padding: r.padding,\n r: r.borderRadius\n }, f.styledMode || (w.fill = r.backgroundColor, w[\"stroke-width\"] = r.borderWidth), t.tt = w = e.label(null, null, null, (B.isHeader ? r.headerShape : r.shape) || \"callout\", null, null, r.useHTML).addClass(\"highcharts-tooltip-box \" + g).attr(w).add(v));\n w.isActive = !0;\n w.attr({\n text: c\n });\n f.styledMode || w.css(r.style).shadow(r.shadow).attr({\n stroke: r.borderColor || B.color || l.color || \"#333333\"\n });\n c = w.getBBox();\n g = c.width + w.strokeWidth();\n B.isHeader ? (m = c.height, f.xAxis[0].opposite && (q = !0, k -= m), c = Math.max(0, Math.min(B.plotX + f.plotLeft - g / 2, f.chartWidth + (f.scrollablePixelsX ? f.scrollablePixelsX - f.marginRight : 0) - g))) : c = B.plotX + f.plotLeft - x(r.distance, 16) - g;\n 0 > c && (h = !1);n B.isHeader ? l = q ? -m : f.plotHeight + m : (l = l.yAxis, l = l.pos - k + Math.max(0, Math.min(B.plotY || 0, l.len)));n d.push({n target: l,n rank: B.isHeader ? 1 : 0,n size: t.tt.getBBox().height + 1,n point: B,n x: c,n tt: wn });n }n });n this.cleanSplit();n r.positioner && d.forEach(function (b) {n var d = r.positioner.call(a, b.tt.getBBox().width, b.size, b.point);n b.x = d.x;n b.align = 0;n b.target = d.y;n b.rank = x(d.rank, b.rank);n });n c.distribute(d, f.plotHeight + m);n d.forEach(function (b) {n var d = b.point,n c = d.series,n e = c && c.yAxis;n b.tt.attr({n visibility: void 0 === b.pos ? "hidden" : "inherit",n x: h || d.isHeader || r.positioner ? b.x : d.plotX + f.plotLeft + a.distance,n y: b.pos + k,n anchorX: d.isHeader ? d.plotX + f.plotLeft : d.plotX + c.xAxis.pos,n anchorY: d.isHeader ? f.plotTop + f.plotHeight / 2 : e.pos + Math.max(0, Math.min(d.plotY, e.len))n });n });n },n updatePosition: function updatePosition(g) {n var b = this.chart,n a = b.pointer,n d = this.getLabel(),n f = g.plotX + b.plotLeft,n e = g.plotY + b.plotTop;n a.chartPosition || (a.chartPosition = c.offset(b.container));n g = (this.options.positioner || this.getPosition).call(this, d.width, d.height, g);nn if (this.outside) {n var h = (this.options.borderWidth || 0) + 2 * this.distance;n this.renderer.setSize(d.width + h, d.height + h, !1);n if (b = b.containerScaling) c.css(this.container, {n transform: "scale(" + b.scaleX + ", " + b.scaleY + ")"n }), f *= b.scaleX, e *= b.scaleY;n f += a.chartPosition.left - g.x;n e += a.chartPosition.top - g.y;n }nn this.move(Math.round(g.x), Math.round(g.y || 0), f, e);n },n getDateFormat: function getDateFormat(c, b, a, d) {n var f = this.chart.time,n e = f.dateFormat("%m-%d %H:%M:%S.%L", b),n h = {n millisecond: 15,n second: 12,n minute: 9,n hour: 6,n day: 3n },n r = "millisecond";nn for (g in p) {n if (c === p.week && +f.dateFormat("%w", b) === a && "00:00:00.000" === e.substr(6)) {n var g = "week";n break;n }nn if (p[g] > c) {n g = r;n break;n }nn if (h[g] && e.substr(h[g]) !== "01-01 00:00:00.000".substr(h[g])) break;n "week" !== g && (r = g);n }nn if (g) var q = f.resolveDTLFormat(d[g]).main;n return q;n },n getXDateFormat: function getXDateFormat(c, b, a) {n b = b.dateTimeLabelFormats;n var d = a && a.closestPointRange;n return (d ? this.getDateFormat(d, c.x, a.options.startOfWeek, b) : b.day) || b.year;n },n tooltipFooterHeaderFormatter: function tooltipFooterHeaderFormatter(g, b) {n var a = b ? "footer" : "header",n d = g.series,n f = d.tooltipOptions,n e = f.xDateFormat,n h = d.xAxis,n r = h && "datetime" === h.options.type && D(g.key),n m = f[a + "Format"];n b = {n isFooter: b,n labelConfig: gn };n c.fireEvent(this, "headerFormatter", b, function (a) {n r && !e && (e = this.getXDateFormat(g, f, h));n r && e && (g.point && g.point.tooltipDateKeys || ["key"]).forEach(function (a) {n m = m.replace("{point." + a + "}", "{point." + a + ":" + e + "}");n });n d.chart.styledMode && (m = this.styledModeFormat(m));n a.text = y(m, {n point: g,n series: dn }, this.chart.time);n });n return b.text;n },n bodyFormatter: function bodyFormatter© {n return c.map(function (b) {n var a = b.series.tooltipOptions;n return (a[(b.point.formatPrefix || "point") + "Formatter"] || b.point.tooltipFormatter).call(b.point, a[(b.point.formatPrefix || "point") + "Format"] || "");n });n },n styledModeFormat: function styledModeFormat© {n return c.replace(’style="font-size: 10px"‘, ’class="highcharts-header"‘).replace(/style="color:{(point|series)\.color}"/g, ’class="highcharts-color-{$1.colorIndex}"‘);n }n };n });n N(H, "parts/Pointer.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.attr,n D = n.defined,n F = n.isNumber,n z = n.isObject,n u = n.objectEach,n L = n.splat,n y = c.addEvent,n C = c.charts,n x = c.color,n m = c.css,n p = c.extend,n g = c.find,n b = c.fireEvent,n a = c.offset,n d = c.pick,n f = c.Tooltip;nn c.Pointer = function (a, b) {n this.init(a, b);n };nn c.Pointer.prototype = {n init: function init(a, b) {n this.options = b;n this.chart = a;n this.runChartClick = b.chart.events && !!b.chart.events.click;n this.pinchDown = [];n this.lastValidTouch = {};n f && (a.tooltip = new f(a, b.tooltip), this.followTouchMove = d(b.tooltip.followTouchMove, !0));n this.setDOMEvents();n },n zoomOption: function zoomOption(a) {n var b = this.chart,n c = b.options.chart,n f = c.zoomType || "";n b = b.inverted;n /touch/.test(a.type) && (f = d(c.pinchType, f));n this.zoomX = a = /x/.test(f);n this.zoomY = f = /y/.test(f);n this.zoomHor = a && !b || f && b;n this.zoomVert = f && !b || a && b;n this.hasZoom = a || f;n },n normalize: function normalize(b, d) {n var c = b.touches ? b.touches.length ? b.touches.item(0) : b.changedTouches[0] : b;n d || (this.chartPosition = d = a(this.chart.container));n var f = c.pageX - d.left;n d = c.pageY - d.top;n if (c = this.chart.containerScaling) f /= c.scaleX, d /= c.scaleY;n return p(b, {n chartX: Math.round(f),n chartY: Math.round(d)n });n },n getCoordinates: function getCoordinates(a) {n var b = {n xAxis: [],n yAxis: []n };n this.chart.axes.forEach(function (d) {n b[d.isXAxis ? "xAxis" : "yAxis"].push({n axis: d,n value: d.toValue(a[d.horiz ? "chartX" : "chartY"])n });n });n return b;n },n findNearestKDPoint: function findNearestKDPoint(a, b, d) {n var c;n a.forEach(function (a) {n var f = !(a.noSharedTooltip && b) && 0 > a.options.findNearestPointBy.indexOf("y");n a = a.searchPoint(d, f);nn if ((f = z(a, !0)) && !(f = !z(c, !0))) {n f = c.distX - a.distX;n var e = c.dist - a.dist,n t = (a.series.group && a.series.group.zIndex) - (c.series.group && c.series.group.zIndex);n f = 0 < (0 !== f && b ? f : 0 !== e ? e : 0 !== t ? t : c.series.index > a.series.index ? -1 : 1);n }nn f && (c = a);n });n return c;n },n getPointFromEvent: function getPointFromEvent(a) {n a = a.target;nn for (var b; a && !b;) {n b = a.point, a = a.parentNode;n }nn return b;n },n getChartCoordinatesFromPoint: function getChartCoordinatesFromPoint(a, b) {n var c = a.series,n f = c.xAxis;n c = c.yAxis;n var e = d(a.clientX, a.plotX),n h = a.shapeArgs;n if (f && c) return b ? {n chartX: f.len + f.pos - e,n chartY: c.len + c.pos - a.plotYn } : {n chartX: e + f.pos,n chartY: a.plotY + c.posn };n if (h && h.x && h.y) return {n chartX: h.x,n chartY: h.yn };n },n getHoverData: function getHoverData(a, b, c, f, q, v) {n var e,n t = [];n f = !(!f || !a);n var h = b && !b.stickyTracking ? [b] : c.filter(function (a) {n return a.visible && !(!q && a.directTouch) && d(a.options.enableMouseTracking, !0) && a.stickyTracking;n });n b = (e = f || !v ? a : this.findNearestKDPoint(h, q, v)) && e.series;n e && (q && !b.noSharedTooltip ? (h = c.filter(function (a) {n return a.visible && !(!q && a.directTouch) && d(a.options.enableMouseTracking, !0) && !a.noSharedTooltip;n }), h.forEach(function (a) {n var b = g(a.points, function (a) {n return a.x === e.x && !a.isNull;n });n z(b) && (a.chart.isBoosting && (b = a.getPoint(b)), t.push(b));n })) : t.push(e));n return {n hoverPoint: e,n hoverSeries: b,n hoverPoints: tn };n },n runPointActions: function runPointActions(a, b) {n var f = this.chart,n e = f.tooltip && f.tooltip.options.enabled ? f.tooltip : void 0,n h = e ? e.shared : !1,n v = b || f.hoverPoint,n k = v && v.series || f.hoverSeries;n k = this.getHoverData(v, k, f.series, (!a || "touchmove" !== a.type) && (!!b || k && k.directTouch && this.isDirectTouch), h, a);n v = k.hoverPoint;n var t = k.hoverPoints;n b = (k = k.hoverSeries) && k.tooltipOptions.followPointer;n h = h && k && !k.noSharedTooltip;nn if (v && (v !== f.hoverPoint || e && e.isHidden)) {n (f.hoverPoints || []).forEach(function (a) {n -1 === t.indexOf(a) && a.setState();n });n if (f.hoverSeries !== k) k.onMouseOver();n this.applyInactiveState(t);n (t || []).forEach(function (a) {n a.setState("hover");n });n f.hoverPoint && f.hoverPoint.firePointEvent("mouseOut");n if (!v.series) return;n v.firePointEvent("mouseOver");n f.hoverPoints = t;n f.hoverPoint = v;n e && e.refresh(h ? t : v, a);n } else b && e && !e.isHidden && (v = e.getAnchor([{}], a), e.updatePosition({n plotX: v[0],n plotY: v[1]n }));nn this.unDocMouseMove || (this.unDocMouseMove = y(f.container.ownerDocument, "mousemove", function (a) {n var b = C[c.hoverChartIndex];n if (b) b.pointer.onDocumentMouseMove(a);n }));n f.axes.forEach(function (b) {n var f = d(b.crosshair.snap, !0),n e = f ? c.find(t, function (a) {n return a.series[b.coll] === b;n }) : void 0;n e || !f ? b.drawCrosshair(a, e) : b.hideCrosshair();n });n },n applyInactiveState: function applyInactiveState(a) {n var b = [],n d;n (a || []).forEach(function (a) {n d = a.series;n b.push(d);n d.linkedParent && b.push(d.linkedParent);n d.linkedSeries && (b = b.concat(d.linkedSeries));n d.navigatorSeries && b.push(d.navigatorSeries);n });n this.chart.series.forEach(function (a) {n -1 === b.indexOf(a) ? a.setState("inactive", !0) : a.options.inactiveOtherPoints && a.setAllPointsToState("inactive");n });n },n reset: function reset(a, b) {n var d = this.chart,n c = d.hoverSeries,n f = d.hoverPoint,n e = d.hoverPoints,n k = d.tooltip,n t = k && k.shared ? e : f;n a && t && L(t).forEach(function (b) {n b.series.isCartesian && void 0 === b.plotX && (a = !1);n });n if (a) k && t && L(t).length && (k.refresh(t), k.shared && e ? e.forEach(function (a) {n a.setState(a.state, !0);n a.series.isCartesian && (a.series.xAxis.crosshair && a.series.xAxis.drawCrosshair(null, a), a.series.yAxis.crosshair && a.series.yAxis.drawCrosshair(null, a));n }) : f && (f.setState(f.state, !0), d.axes.forEach(function (a) {n a.crosshair && a.drawCrosshair(null, f);n })));else {n if (f) f.onMouseOut();n e && e.forEach(function (a) {n a.setState();n });n if © c.onMouseOut();n k && k.hide(b);n this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove());n d.axes.forEach(function (a) {n a.hideCrosshair();n });n this.hoverX = d.hoverPoints = d.hoverPoint = null;n }n },n scaleGroups: function scaleGroups(a, b) {n var d = this.chart,n c;n d.series.forEach(function (f) {n c = a || f.getPlotBox();n f.xAxis && f.xAxis.zoomEnabled && f.group && (f.group.attr©, f.markerGroup && (f.markerGroup.attr©, f.markerGroup.clip(b ? d.clipRect : null)), f.dataLabelsGroup && f.dataLabelsGroup.attr©);n });n d.clipRect.attr(b || d.clipBox);n },n dragStart: function dragStart(a) {n var b = this.chart;n b.mouseIsDown = a.type;n b.cancelClick = !1;n b.mouseDownX = this.mouseDownX = a.chartX;n b.mouseDownY = this.mouseDownY = a.chartY;n },n drag: function drag(a) {n var b = this.chart,n d = b.options.chart,n c = a.chartX,n f = a.chartY,n e = this.zoomHor,n k = this.zoomVert,n t = b.plotLeft,n B = b.plotTop,n I = b.plotWidth,n w = b.plotHeight,n l = this.selectionMarker,n g = this.mouseDownX,n m = this.mouseDownY,n p = d.panKey && a[d.panKey + "Key"];n if (!l || !l.touch) if (c < t ? c = t : c > t + I && (c = t + I), f < B ? f = B : f > B + w && (f = B + w), this.hasDragged = Math.sqrt(Math.pow(g - c, 2) + Math.pow(m - f, 2)), 10 < this.hasDragged) {\n var u = b.isInsidePlot(g - t, m - B);\n b.hasCartesianSeries && (this.zoomX || this.zoomY) && u && !p && !l && (this.selectionMarker = l = b.renderer.rect(t, B, e ? 1 : I, k ? 1 : w, 0).attr({\n \"class\": \"highcharts-selection-marker\",\n zIndex: 7\n }).add(), b.styledMode || l.attr({\n fill: d.selectionMarkerFill || x(\"#335cad\").setOpacity(.25).get()\n }));\n l && e && (c -= g, l.attr({\n width: Math.abs(c),\n x: (0 < c ? 0 : c) + g\n }));\n l && k && (c = f - m, l.attr({\n height: Math.abs(c),\n y: (0 < c ? 0 : c) + m\n }));\n u && !l && d.panning && b.pan(a, d.panning);\n }\n },\n drop: function drop(a) {\n var d = this,\n c = this.chart,\n f = this.hasPinched;\n\n if (this.selectionMarker) {\n var e = {\n originalEvent: a,\n xAxis: [],\n yAxis: []\n },\n v = this.selectionMarker,\n k = v.attr ? v.attr(\"x\") : v.x,\n t = v.attr ? v.attr(\"y\") : v.y,\n B = v.attr ? v.attr(\"width\") : v.width,\n I = v.attr ? v.attr(\"height\") : v.height,\n w;\n if (this.hasDragged || f) c.axes.forEach(function (b) {\n if (b.zoomEnabled && D(b.min) && (f || d[{\n xAxis: \"zoomX\",\n yAxis: \"zoomY\"\n ])) n var c = b.horiz,n l = "touchend" === a.type ? b.minPixelPadding : 0,n h = b.toValue((c ? k : t) + l);n c = b.toValue((c ? k + B : t + I) - l);n e[b.coll].push({n axis: b,n min: Math.min(h, c),n max: Math.max(h, c)n });n w = !0;n }n }), w && b(c, "selection", e, function (a) {n c.zoom(p(a, f ? {n animation: !1n } : null));n });n F(c.index) && (this.selectionMarker = this.selectionMarker.destroy());n f && this.scaleGroups();n }nn c && F(c.index) && (m(c.container, {n cursor: c._cursorn }), c.cancelClick = 10 < this.hasDragged, c.mouseIsDown = this.hasDragged = this.hasPinched = !1, this.pinchDown = []);\n },\n onContainerMouseDown: function onContainerMouseDown(a) {\n a = this.normalize(a);\n 2 !== a.button && (this.zoomOption(a), a.preventDefault && a.preventDefault(), this.dragStart(a));\n },\n onDocumentMouseUp: function onDocumentMouseUp(a) {\n C[c.hoverChartIndex] && C[c.hoverChartIndex].pointer.drop(a);\n },\n onDocumentMouseMove: function onDocumentMouseMove(a) {\n var b = this.chart,\n d = this.chartPosition;\n a = this.normalize(a, d);\n !d || this.inClass(a.target, \"highcharts-tracker\") || b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || this.reset();\n },\n onContainerMouseLeave: function onContainerMouseLeave(a) {\n var b = C[c.hoverChartIndex];\n b && (a.relatedTarget || a.toElement) && (b.pointer.reset(), b.pointer.chartPosition = null);\n },\n onContainerMouseMove: function onContainerMouseMove(a) {\n var b = this.chart;\n D(c.hoverChartIndex) && C[c.hoverChartIndex] && C[c.hoverChartIndex].mouseIsDown || (c.hoverChartIndex = b.index);\n a = this.normalize(a);\n a.preventDefault || (a.returnValue = !1);\n \"mousedown\" === b.mouseIsDown && this.drag(a);\n !this.inClass(a.target, \"highcharts-tracker\") && !b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || b.openMenu || this.runPointActions(a);\n },\n inClass: function inClass(a, b) {\n for (var d; a;) {\n if (d = A(a, \"class\")) {\n if (-1 !== d.indexOf(b)) return !0;\n if (-1 !== d.indexOf(\"highcharts-container\")) return !1;\n }\n\n a = a.parentNode;\n }\n },\n onTrackerMouseOut: function onTrackerMouseOut(a) {\n var b = this.chart.hoverSeries;\n a = a.relatedTarget || a.toElement;\n this.isDirectTouch = !1;\n if (!(!b || !a || b.stickyTracking || this.inClass(a, \"highcharts-tooltip\") || this.inClass(a, \"highcharts-series-\" + b.index) && this.inClass(a, \"highcharts-tracker\"))) b.onMouseOut();\n },\n onContainerClick: function onContainerClick(a) {\n var d = this.chart,\n c = d.hoverPoint,\n f = d.plotLeft,\n e = d.plotTop;\n a = this.normalize(a);\n d.cancelClick || (c && this.inClass(a.target, \"highcharts-tracker\") ? (b(c.series, \"click\", p(a, {\n point: c\n })), d.hoverPoint && c.firePointEvent(\"click\", a)) : (p(a, this.getCoordinates(a)), d.isInsidePlot(a.chartX - f, a.chartY - e) && b(d, \"click\", a)));\n },\n setDOMEvents: function setDOMEvents() {\n var a = this,\n b = a.chart.container,\n d = b.ownerDocument;\n\n b.onmousedown = function (b) {\n a.onContainerMouseDown(b);\n };\n\n b.onmousemove = function (b) {\n a.onContainerMouseMove(b);\n };\n\n b.onclick = function (b) {\n a.onContainerClick(b);\n };\n\n this.unbindContainerMouseLeave = y(b, \"mouseleave\", a.onContainerMouseLeave);\n c.unbindDocumentMouseUp || (c.unbindDocumentMouseUp = y(d, \"mouseup\", a.onDocumentMouseUp));\n c.hasTouch && (y(b, \"touchstart\", function (b) {\n a.onContainerTouchStart(b);\n }), y(b, \"touchmove\", function (b) {\n a.onContainerTouchMove(b);\n }), c.unbindDocumentTouchEnd || (c.unbindDocumentTouchEnd = y(d, \"touchend\", a.onDocumentTouchEnd)));\n },\n destroy: function destroy() {\n var a = this;\n a.unDocMouseMove && a.unDocMouseMove();\n this.unbindContainerMouseLeave();\n c.chartCount || (c.unbindDocumentMouseUp && (c.unbindDocumentMouseUp = c.unbindDocumentMouseUp()), c.unbindDocumentTouchEnd && (c.unbindDocumentTouchEnd = c.unbindDocumentTouchEnd()));\n clearInterval(a.tooltipTimeout);\n u(a, function (b, d) {\n a[d] = null;\n });\n }\n };\n });\n N(H, \"parts/TouchPointer.js\", [H[\"parts/Globals.js\"]], function (c) {\n var n = c.charts,\n A = c.extend,\n D = c.noop,\n F = c.pick;\n A(c.Pointer.prototype, {\n pinchTranslate: function pinchTranslate(c, u, n, y, A, x) {\n this.zoomHor && this.pinchTranslateDirection(!0, c, u, n, y, A, x);\n this.zoomVert && this.pinchTranslateDirection(!1, c, u, n, y, A, x);\n },\n pinchTranslateDirection: function pinchTranslateDirection(c, u, n, y, A, x, m, p) {\n var g = this.chart,\n b = c ? \"x\" : \"y\",\n a = c ? \"X\" : \"Y\",\n d = \"chart\" + a,\n f = c ? \"width\" : \"height\",\n e = g[\"plot\" + (c ? \"Left\" : \"Top\")],\n h,\n r,\n E = p || 1,\n q = g.inverted,\n v = g.bounds[c ? \"h\" : \"v\"],\n k = 1 === u.length,\n t = u[0][d],\n B = n[0][d],\n I = !k && u[1][d],\n w = !k && n[1][d];\n\n n = function n() {\n !k && 20 < Math.abs(t - I) && (E = p || Math.abs(B - w) / Math.abs(t - I));\n r = (e - B) / E + t;\n h = g[\"plot\" + (c ? \"Width\" : \"Height\")] / E;\n };\n\n n();\n u = r;\n\n if (u < v.min) {\n u = v.min;\n var l = !0;\n } else u + h > v.max && (u = v.max - h, l = !0);nn l ? (B -= .8 * (B - m[b][0]), k || (w -= .8 * (w - m[b][1])), n()) : m[b] = [B, w];n q || (x[b] = r - e, x[f] = h);n x = q ? 1 / E : E;n A[f] = h;n A[b] = u;n y[q ? c ? "scaleY" : "scaleX" : "scale" + a] = E;n y["translate" + a] = x * e + (B - x * t);n },n pinch: function pinch© {n var u = this,n n = u.chart,n y = u.pinchDown,n z = c.touches,n x = z.length,n m = u.lastValidTouch,n p = u.hasZoom,n g = u.selectionMarker,n b = {},n a = 1 === x && (u.inClass(c.target, "highcharts-tracker") && n.runTrackerClick || u.runChartClick),n d = {};n 1 < x && (u.initiated = !0);\n p && u.initiated && !a && c.preventDefault();\n [].map.call(z, function (a) {\n return u.normalize(a);\n });\n \"touchstart\" === c.type ? ([].forEach.call(z, function (a, b) {\n y[b] = {\n chartX: a.chartX,\n chartY: a.chartY\n };\n }), m.x = [y[0].chartX, y[1] && y[1].chartX], m.y = [y[0].chartY, y[1] && y[1].chartY], n.axes.forEach(function (a) {\n if (a.zoomEnabled) {\n var b = n.bounds[a.horiz ? \"h\" : \"v\"],\n d = a.minPixelPadding,\n c = a.toPixels(Math.min(F(a.options.min, a.dataMin), a.dataMin)),\n f = a.toPixels(Math.max(F(a.options.max, a.dataMax), a.dataMax)),\n q = Math.max(c, f);\n b.min = Math.min(a.pos, Math.min(c, f) - d);\n b.max = Math.max(a.pos + a.len, q + d);\n }\n }), u.res = !0) : u.followTouchMove && 1 === x ? this.runPointActions(u.normalize(c)) : y.length && (g || (u.selectionMarker = g = A({\n destroy: D,\n touch: !0\n }, n.plotBox)), u.pinchTranslate(y, z, b, g, d, m), u.hasPinched = p, u.scaleGroups(b, d), u.res && (u.res = !1, this.reset(!1, 0)));\n },\n touch: function touch(n, u) {\n var z = this.chart,\n y;\n if (z.index !== c.hoverChartIndex) this.onContainerMouseLeave({\n relatedTarget: !0\n });\n c.hoverChartIndex = z.index;\n if (1 === n.touches.length) {\n if (n = this.normalize(n), (y = z.isInsidePlot(n.chartX - z.plotLeft, n.chartY - z.plotTop)) && !z.openMenu) {\n u && this.runPointActions(n);\n\n if (\"touchmove\" === n.type) {\n u = this.pinchDown;\n var A = u[0] ? 4 <= Math.sqrt(Math.pow(u[0].chartX - n.chartX, 2) + Math.pow(u[0].chartY - n.chartY, 2)) : !1;\n }\n\n F(A, !0) && this.pinch(n);\n } else u && this.reset();\n } else 2 === n.touches.length && this.pinch(n);\n },\n onContainerTouchStart: function onContainerTouchStart(c) {\n this.zoomOption(c);\n this.touch(c, !0);\n },\n onContainerTouchMove: function onContainerTouchMove(c) {\n this.touch(c);\n },\n onDocumentTouchEnd: function onDocumentTouchEnd(z) {\n n[c.hoverChartIndex] && n[c.hoverChartIndex].pointer.drop(z);\n }\n });\n });\n N(H, \"parts/MSPointer.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.objectEach,\n D = c.addEvent,\n F = c.charts,\n z = c.css,\n u = c.doc;\n n = c.extend;\n var L = c.noop,\n y = c.Pointer,\n C = c.removeEvent,\n x = c.win,\n m = c.wrap;\n\n if (!c.hasTouch && (x.PointerEvent || x.MSPointerEvent)) {\n var p = {},\n g = !!x.PointerEvent,\n b = function b() {\n var a = [];\n\n a.item = function (a) {\n return this[a];\n };\n\n A(p, function (b) {\n a.push({\n pageX: b.pageX,\n pageY: b.pageY,\n target: b.target\n });\n });\n return a;\n },\n a = function a(_a, f, e, h) {\n \"touch\" !== _a.pointerType && _a.pointerType !== _a.MSPOINTER_TYPE_TOUCH || !F[c.hoverChartIndex] || (h(_a), h = F[c.hoverChartIndex].pointer, h[f]({\n type: e,\n target: _a.currentTarget,\n preventDefault: L,\n touches: b()\n }));\n };\n\n n(y.prototype, {\n onContainerPointerDown: function onContainerPointerDown(b) {\n a(b, \"onContainerTouchStart\", \"touchstart\", function (a) {\n p[a.pointerId] = {\n pageX: a.pageX,\n pageY: a.pageY,\n target: a.currentTarget\n };\n });\n },\n onContainerPointerMove: function onContainerPointerMove(b) {\n a(b, \"onContainerTouchMove\", \"touchmove\", function (a) {\n p[a.pointerId] = {\n pageX: a.pageX,\n pageY: a.pageY\n };\n p[a.pointerId].target || (p[a.pointerId].target = a.currentTarget);\n });\n },\n onDocumentPointerUp: function onDocumentPointerUp(b) {\n a(b, \"onDocumentTouchEnd\", \"touchend\", function (a) {\n delete p[a.pointerId];\n });\n },\n batchMSEvents: function batchMSEvents(a) {\n a(this.chart.container, g ? \"pointerdown\" : \"MSPointerDown\", this.onContainerPointerDown);\n a(this.chart.container, g ? \"pointermove\" : \"MSPointerMove\", this.onContainerPointerMove);\n a(u, g ? \"pointerup\" : \"MSPointerUp\", this.onDocumentPointerUp);\n }\n });\n m(y.prototype, \"init\", function (a, b, c) {\n a.call(this, b, c);\n this.hasZoom && z(b.container, {\n \"-ms-touch-action\": \"none\",\n \"touch-action\": \"none\"\n });\n });\n m(y.prototype, \"setDOMEvents\", function (a) {\n a.apply(this);\n (this.hasZoom || this.followTouchMove) && this.batchMSEvents(D);\n });\n m(y.prototype, \"destroy\", function (a) {\n this.batchMSEvents(C);\n a.call(this);\n });\n }\n });\n N(H, \"parts/Legend.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.defined,\n D = n.isNumber,\n F = c.addEvent,\n z = c.css,\n u = c.discardElement,\n L = c.fireEvent;\n n = c.isFirefox;\n var y = c.marginNames,\n C = c.merge,\n x = c.pick,\n m = c.setAnimation,\n p = c.stableSort,\n g = c.win,\n b = c.wrap;\n\n c.Legend = function (a, b) {\n this.init(a, b);\n };\n\n c.Legend.prototype = {\n init: function init(a, b) {\n this.chart = a;\n this.setOptions(b);\n b.enabled && (this.render(), F(this.chart, \"endResize\", function () {\n this.legend.positionCheckboxes();\n }), this.proximate ? this.unchartrender = F(this.chart, \"render\", function () {\n this.legend.proximatePositions();\n this.legend.positionItems();\n }) : this.unchartrender && this.unchartrender());\n },\n setOptions: function setOptions(a) {\n var b = x(a.padding, 8);\n this.options = a;\n this.chart.styledMode || (this.itemStyle = a.itemStyle, this.itemHiddenStyle = C(this.itemStyle, a.itemHiddenStyle));\n this.itemMarginTop = a.itemMarginTop || 0;\n this.padding = b;\n this.initialItemY = b - 5;\n this.symbolWidth = x(a.symbolWidth, 16);\n this.pages = [];\n this.proximate = \"proximate\" === a.layout && !this.chart.inverted;\n },\n update: function update(a, b) {\n var d = this.chart;\n this.setOptions(C(!0, this.options, a));\n this.destroy();\n d.isDirtyLegend = d.isDirtyBox = !0;\n x(b, !0) && d.redraw();\n L(this, \"afterUpdate\");\n },\n colorizeItem: function colorizeItem(a, b) {\n a.legendGroup[b ? \"removeClass\" : \"addClass\"](\"highcharts-legend-item-hidden\");\n\n if (!this.chart.styledMode) {\n var d = this.options,\n c = a.legendItem,\n h = a.legendLine,\n r = a.legendSymbol,\n g = this.itemHiddenStyle.color;\n d = b ? d.itemStyle.color : g;\n var q = b ? a.color || g : g,\n v = a.options && a.options.marker,\n k = {\n fill: q\n };\n c && c.css({\n fill: d,\n color: d\n });\n h && h.attr({\n stroke: q\n });\n r && (v && r.isMarker && (k = a.pointAttribs(), b || (k.stroke = k.fill = g)), r.attr(k));\n }\n\n L(this, \"afterColorizeItem\", {\n item: a,\n visible: b\n });\n },\n positionItems: function positionItems() {\n this.allItems.forEach(this.positionItem, this);\n this.chart.isResizing || this.positionCheckboxes();\n },\n positionItem: function positionItem(a) {\n var b = this.options,\n c = b.symbolPadding;\n b = !b.rtl;\n var e = a._legendItemPos,\n h = e[0];\n e = e[1];\n var r = a.checkbox;\n if ((a = a.legendGroup) && a.element) a[A(a.translateY) ? \"animate\" : \"attr\"]({\n translateX: b ? h : this.legendWidth - h - 2 * c - 4,\n translateY: e\n });\n r && (r.x = h, r.y = e);\n },\n destroyItem: function destroyItem(a) {\n var b = a.checkbox;\n [\"legendItem\", \"legendLine\", \"legendSymbol\", \"legendGroup\"].forEach(function (b) {\n a[b] && (a[b] = a[b].destroy());\n });\n b && u(a.checkbox);\n },\n destroy: function destroy() {\n function a(a) {\n this[a] && (this[a] = this[a].destroy());\n }\n\n this.getAllItems().forEach(function (b) {\n [\"legendItem\", \"legendGroup\"].forEach(a, b);\n });\n \"clipRect up down pager nav box title group\".split(\" \").forEach(a, this);\n this.display = null;\n },\n positionCheckboxes: function positionCheckboxes() {\n var a = this.group && this.group.alignAttr,\n b = this.clipHeight || this.legendHeight,\n c = this.titleHeight;\n\n if (a) {\n var e = a.translateY;\n this.allItems.forEach(function (d) {\n var f = d.checkbox;\n\n if (f) {\n var h = e + c + f.y + (this.scrollOffset || 0) + 3;\n z(f, {\n left: a.translateX + d.checkboxOffset + f.x - 20 + \"px\",\n top: h + \"px\",\n display: this.proximate || h > e - 6 && h < e + b - 6 ? \"\" : \"none\"\n });\n }\n }, this);\n }\n },\n renderTitle: function renderTitle() {\n var a = this.options,\n b = this.padding,\n c = a.title,\n e = 0;\n c.text && (this.title || (this.title = this.chart.renderer.label(c.text, b - 3, b - 4, null, null, null, a.useHTML, null, \"legend-title\").attr({\n zIndex: 1\n }), this.chart.styledMode || this.title.css(c.style), this.title.add(this.group)), c.width || this.title.css({\n width: this.maxLegendWidth + \"px\"\n }), a = this.title.getBBox(), e = a.height, this.offsetWidth = a.width, this.contentGroup.attr({\n translateY: e\n }));\n this.titleHeight = e;\n },\n setText: function setText(a) {\n var b = this.options;\n a.legendItem.attr({\n text: b.labelFormat ? c.format(b.labelFormat, a, this.chart.time) : b.labelFormatter.call(a)\n });\n },\n renderItem: function renderItem(a) {\n var b = this.chart,\n c = b.renderer,\n e = this.options,\n h = this.symbolWidth,\n r = e.symbolPadding,\n g = this.itemStyle,\n q = this.itemHiddenStyle,\n v = \"horizontal\" === e.layout ? x(e.itemDistance, 20) : 0,\n k = !e.rtl,\n t = a.legendItem,\n B = !a.series,\n I = !B && a.series.drawLegendSymbol ? a.series : a,\n w = I.options;\n w = this.createCheckboxForItem && w && w.showCheckbox;\n v = h + r + v + (w ? 20 : 0);\n var l = e.useHTML,\n m = a.options.className;\n t || (a.legendGroup = c.g(\"legend-item\").addClass(\"highcharts-\" + I.type + \"-series highcharts-color-\" + a.colorIndex + (m ? \" \" + m : \"\") + (B ? \" highcharts-series-\" + a.index : \"\")).attr({\n zIndex: 1\n }).add(this.scrollGroup), a.legendItem = t = c.text(\"\", k ? h + r : -r, this.baseline || 0, l), b.styledMode || t.css(C(a.visible ? g : q)), t.attr({\n align: k ? \"left\" : \"right\",\n zIndex: 2\n }).add(a.legendGroup), this.baseline || (this.fontMetrics = c.fontMetrics(b.styledMode ? 12 : g.fontSize, t), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, t.attr(\"y\", this.baseline)), this.symbolHeight = e.symbolHeight || this.fontMetrics.f, I.drawLegendSymbol(this, a), this.setItemEvents && this.setItemEvents(a, t, l));\n w && !a.checkbox && this.createCheckboxForItem(a);\n this.colorizeItem(a, a.visible);\n !b.styledMode && g.width || t.css({\n width: (e.itemWidth || this.widthOption || b.spacingBox.width) - v\n });\n this.setText(a);\n b = t.getBBox();\n a.itemWidth = a.checkboxOffset = e.itemWidth || a.legendItemWidth || b.width + v;\n this.maxItemWidth = Math.max(this.maxItemWidth, a.itemWidth);\n this.totalItemWidth += a.itemWidth;\n this.itemHeight = a.itemHeight = Math.round(a.legendItemHeight || b.height || this.symbolHeight);\n },\n layoutItem: function layoutItem(a) {\n var b = this.options,\n c = this.padding,\n e = \"horizontal\" === b.layout,\n h = a.itemHeight,\n g = b.itemMarginBottom || 0,\n m = this.itemMarginTop,\n q = e ? x(b.itemDistance, 20) : 0,\n v = this.maxLegendWidth;\n b = b.alignColumns && this.totalItemWidth > v ? this.maxItemWidth : a.itemWidth;n e && this.itemX - c + b > v && (this.itemX = c, this.lastLineHeight && (this.itemY += m + this.lastLineHeight + g), this.lastLineHeight = 0);n this.lastItemY = m + this.itemY + g;n this.lastLineHeight = Math.max(h, this.lastLineHeight);n a._legendItemPos = [this.itemX, this.itemY];n e ? this.itemX += b : (this.itemY += m + h + g, this.lastLineHeight = h);n this.offsetWidth = this.widthOption || Math.max((e ? this.itemX - c - (a.checkbox ? 0 : q) : b) + c, this.offsetWidth);n },n getAllItems: function getAllItems() {n var a = [];n this.chart.series.forEach(function (b) {n var d = b && b.options;n b && x(d.showInLegend, A(d.linkedTo) ? !1 : void 0, !0) && (a = a.concat(b.legendItems || ("point" === d.legendType ? b.data : b)));n });n L(this, "afterGetAllItems", {n allItems: an });n return a;n },n getAlignment: function getAlignment() {n var a = this.options;n return this.proximate ? a.align.charAt(0) + "tv" : a.floating ? "" : a.align.charAt(0) + a.verticalAlign.charAt(0) + a.layout.charAt(0);n },n adjustMargins: function adjustMargins(a, b) {n var d = this.chart,n c = this.options,n h = this.getAlignment();n h && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function (f, e) {n f.test(h) && !A(a[e]) && (d[y[e]] = Math.max(d[y[e]], d.legend[(e + 1) % 2 ? "legendHeight" : "legendWidth"] + [1, -1, -1, 1][e] * c[e % 2 ? "x" : "y"] + x(c.margin, 12) + b[e] + (d.titleOffset[e] || 0)));n });n },n proximatePositions: function proximatePositions() {n var a = this.chart,n b = [],n f = "left" === this.options.align;n this.allItems.forEach(function (d) {n var e = f;nn if (d.yAxis && d.points) {n d.xAxis.options.reversed && (e = !e);n var g = c.find(e ? d.points : d.points.slice(0).reverse(), function (a) {n return D(a.plotY);n });n e = d.legendGroup.getBBox().height;n var m = d.yAxis.top - a.plotTop;n d.visible ? (g = g ? g.plotY : d.yAxis.height, g += m - .3 * e) : g = m + d.yAxis.height;n b.push({n target: g,n size: e,n item: dn });n }n }, this);n c.distribute(b, a.plotHeight);n b.forEach(function (b) {n b.item._legendItemPos[1] = a.plotTop - a.spacing[0] + b.pos;n });n },n render: function render() {n var a = this.chart,n b = a.renderer,n f = this.group,n e,n h = this.box,n g = this.options,n m = this.padding;n this.itemX = m;n this.itemY = this.initialItemY;n this.lastItemY = this.offsetWidth = 0;n this.widthOption = c.relativeLength(g.width, a.spacingBox.width - m);n var q = a.spacingBox.width - 2 * m - g.x;n -1 < [\"rm\", \"lm\"].indexOf(this.getAlignment().substring(0, 2)) && (q /= 2);\n this.maxLegendWidth = this.widthOption || q;\n f || (this.group = f = b.g(\"legend\").attr({\n zIndex: 7\n }).add(), this.contentGroup = b.g().attr({\n zIndex: 1\n }).add(f), this.scrollGroup = b.g().add(this.contentGroup));\n this.renderTitle();\n q = this.getAllItems();\n p(q, function (a, b) {\n return (a.options && a.options.legendIndex || 0) - (b.options && b.options.legendIndex || 0);\n });\n g.reversed && q.reverse();\n this.allItems = q;\n this.display = e = !!q.length;\n this.itemHeight = this.totalItemWidth = this.maxItemWidth = this.lastLineHeight = 0;\n q.forEach(this.renderItem, this);\n q.forEach(this.layoutItem, this);\n q = (this.widthOption || this.offsetWidth) + m;\n var v = this.lastItemY + this.lastLineHeight + this.titleHeight;\n v = this.handleOverflow(v);\n v += m;\n h || (this.box = h = b.rect().addClass(\"highcharts-legend-box\").attr({\n r: g.borderRadius\n }).add(f), h.isNew = !0);\n a.styledMode || h.attr({\n stroke: g.borderColor,\n \"stroke-width\": g.borderWidth || 0,\n fill: g.backgroundColor || \"none\"\n }).shadow(g.shadow);\n 0 < q && 0 < v && (h[h.isNew ? \"attr\" : \"animate\"](h.crisp.call({}, {\n x: 0,\n y: 0,\n width: q,\n height: v\n }, h.strokeWidth())), h.isNew = !1);\n h[e ? \"show\" : \"hide\"]();\n a.styledMode && \"none\" === f.getStyle(\"display\") && (q = v = 0);\n this.legendWidth = q;\n this.legendHeight = v;\n e && (b = a.spacingBox, h = b.y, /(lth|ct|rth)/.test(this.getAlignment()) && 0 < a.titleOffset[0] ? h += a.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && 0 < a.titleOffset[2] && (h -= a.titleOffset[2]), h !== b.y && (b = C(b, {\n y: h\n })), f.align(C(g, {\n width: q,\n height: v,\n verticalAlign: this.proximate ? \"top\" : g.verticalAlign\n }), !0, b));\n this.proximate || this.positionItems();\n L(this, \"afterRender\");\n },\n handleOverflow: function handleOverflow(a) {\n var b = this,\n c = this.chart,\n e = c.renderer,\n h = this.options,\n g = h.y,\n m = this.padding;\n g = c.spacingBox.height + (\"top\" === h.verticalAlign ? -g : g) - m;\n\n var q = h.maxHeight,\n v,\n k = this.clipRect,\n t = h.navigation,\n B = x(t.animation, !0),\n I = t.arrowSize || 12,\n w = this.nav,\n l = this.pages,\n p,\n K = this.allItems,\n n = function n(a) {\n \"number\" === typeof a ? k.attr({\n height: a\n }) : k && (b.clipRect = k.destroy(), b.contentGroup.clip());\n b.contentGroup.div && (b.contentGroup.div.style.clip = a ? \"rect(\" + m + \"px,9999px,\" + (m + a) + \"px,0)\" : \"auto\");\n },\n u = function u(a) {\n b[a] = e.circle(0, 0, 1.3 * I).translate(I / 2, I / 2).add(w);\n c.styledMode || b[a].attr(\"fill\", \"rgba(0,0,0,0.0001)\");\n return b[a];\n };\n\n \"horizontal\" !== h.layout || \"middle\" === h.verticalAlign || h.floating || (g /= 2);\n q && (g = Math.min(g, q));\n l.length = 0;\n a > g && !1 !== t.enabled ? (this.clipHeight = v = Math.max(g - 20 - this.titleHeight - m, 0), this.currentPage = x(this.currentPage, 1), this.fullHeight = a, K.forEach(function (a, b) {n var d = a._legendItemPos[1],n c = Math.round(a.legendItem.getBBox().height),n f = l.length;n if (!f || d - l[f - 1] > v && (p || d) !== l[f - 1]) l.push(p || d), f++;n a.pageIx = f - 1;n p && (K[b - 1].pageIx = f - 1);n b === K.length - 1 && d + c - l[f - 1] > v && d !== p && (l.push(d), a.pageIx = f);n d !== p && (p = d);n }), k || (k = b.clipRect = e.clipRect(0, m, 9999, 0), b.contentGroup.clip(k)), n(v), w || (this.nav = w = e.g().attr({n zIndex: 1n }).add(this.group), this.up = e.symbol("triangle", 0, 0, I, I).add(w), u("upTracker").on("click", function () {n b.scroll(-1, B);n }), this.pager = e.text("", 15, 10).addClass("highcharts-legend-navigation"), c.styledMode || this.pager.css(t.style), this.pager.add(w), this.down = e.symbol("triangle-down", 0, 0, I, I).add(w), u("downTracker").on("click", function () {n b.scroll(1, B);n })), b.scroll(0), a = g) : w && (n(), this.nav = w.destroy(), this.scrollGroup.attr({n translateY: 1n }), this.clipHeight = 0);n return a;n },n scroll: function scroll(a, b) {n var d = this.pages,n c = d.length,n h = this.currentPage + a;n a = this.clipHeight;n var g = this.options.navigation,n p = this.pager,n q = this.padding;n h > c && (h = c);n 0 < h && (void 0 !== b && m(b, this.chart), this.nav.attr({\n translateX: q,\n translateY: a + this.padding + 7 + this.titleHeight,\n visibility: \"visible\"\n }), [this.up, this.upTracker].forEach(function (a) {\n a.attr({\n \"class\": 1 === h ? \"highcharts-legend-nav-inactive\" : \"highcharts-legend-nav-active\"\n });\n }), p.attr({\n text: h + \"/\" + c\n }), [this.down, this.downTracker].forEach(function (a) {\n a.attr({\n x: 18 + this.pager.getBBox().width,\n \"class\": h === c ? \"highcharts-legend-nav-inactive\" : \"highcharts-legend-nav-active\"\n });\n }, this), this.chart.styledMode || (this.up.attr({\n fill: 1 === h ? g.inactiveColor : g.activeColor\n }), this.upTracker.css({\n cursor: 1 === h ? \"default\" : \"pointer\"\n }), this.down.attr({\n fill: h === c ? g.inactiveColor : g.activeColor\n }), this.downTracker.css({\n cursor: h === c ? \"default\" : \"pointer\"\n })), this.scrollOffset = -d[h - 1] + this.initialItemY, this.scrollGroup.animate({\n translateY: this.scrollOffset\n }), this.currentPage = h, this.positionCheckboxes());\n }\n };\n c.LegendSymbolMixin = {\n drawRectangle: function drawRectangle(a, b) {\n var d = a.symbolHeight,\n c = a.options.squareSymbol;\n b.legendSymbol = this.chart.renderer.rect(c ? (a.symbolWidth - d) / 2 : 0, a.baseline - d + 1, c ? d : a.symbolWidth, d, x(a.options.symbolRadius, d / 2)).addClass(\"highcharts-point\").attr({\n zIndex: 3\n }).add(b.legendGroup);\n },\n drawLineMarker: function drawLineMarker(a) {\n var b = this.options,\n c = b.marker,\n e = a.symbolWidth,\n h = a.symbolHeight,\n g = h / 2,\n m = this.chart.renderer,\n q = this.legendGroup;\n a = a.baseline - Math.round(.3 * a.fontMetrics.b);\n var v = {};\n this.chart.styledMode || (v = {\n \"stroke-width\": b.lineWidth || 0\n }, b.dashStyle && (v.dashstyle = b.dashStyle));\n this.legendLine = m.path([\"M\", 0, a, \"L\", e, a]).addClass(\"highcharts-graph\").attr(v).add(q);\n c && !1 !== c.enabled && e && (b = Math.min(x(c.radius, g), g), 0 === this.symbol.indexOf(\"url\") && (c = C(c, {\n width: h,\n height: h\n }), b = 0), this.legendSymbol = c = m.symbol(this.symbol, e / 2 - b, a - b, 2 * b, 2 * b, c).addClass(\"highcharts-point\").add(q), c.isMarker = !0);\n }\n };\n (/Trident\\/7\\.0/.test(g.navigator && g.navigator.userAgent) || n) && b(c.Legend.prototype, \"positionItem\", function (a, b) {\n var d = this,\n c = function c() {\n b._legendItemPos && a.call(d, b);\n };\n\n c();\n d.bubbleLegend || setTimeout(c);\n });\n });\n N(H, \"parts/Chart.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.attr,\n D = n.defined,\n F = n.erase,\n z = n.isArray,\n u = n.isNumber,\n L = n.isObject,\n y = n.isString,\n C = n.objectEach,\n x = n.pInt,\n m = n.splat,\n p = c.addEvent,\n g = c.animate,\n b = c.animObject,\n a = c.doc,\n d = c.Axis,\n f = c.createElement,\n e = c.defaultOptions,\n h = c.discardElement,\n r = c.charts,\n E = c.css,\n q = c.extend,\n v = c.find,\n k = c.fireEvent,\n t = c.Legend,\n B = c.marginNames,\n I = c.merge,\n w = c.Pointer,\n l = c.pick,\n J = c.removeEvent,\n K = c.seriesTypes,\n T = c.syncTimeout,\n R = c.win,\n S = c.Chart = function () {\n this.getArgs.apply(this, arguments);\n };\n\n c.chart = function (a, b, d) {\n return new S(a, b, d);\n };\n\n q(S.prototype, {\n callbacks: [],\n getArgs: function getArgs() {\n var a = [].slice.call(arguments);\n if (y(a[0]) || a[0].nodeName) this.renderTo = a.shift();\n this.init(a[0], a[1]);\n },\n init: function init(a, b) {\n var d,\n f = a.series,\n l = a.plotOptions || {};\n k(this, \"init\", {\n args: arguments\n }, function () {\n a.series = null;\n d = I(e, a);\n C(d.plotOptions, function (a, b) {\n L(a) && (a.tooltip = l[b] && I(l[b].tooltip) || void 0);\n });\n d.tooltip.userOptions = a.chart && a.chart.forExport && a.tooltip.userOptions || a.tooltip;\n d.series = a.series = f;\n this.userOptions = a;\n var t = d.chart,\n B = t.events;\n this.margin = [];\n this.spacing = [];\n this.bounds = {\n h: {},\n v: {}\n };\n this.labelCollectors = [];\n this.callback = b;\n this.isResizing = 0;\n this.options = d;\n this.axes = [];\n this.series = [];\n this.time = a.time && Object.keys(a.time).length ? new c.Time(a.time) : c.time;\n this.styledMode = t.styledMode;\n this.hasCartesianSeries = t.showAxes;\n var h = this;\n h.index = r.length;\n r.push(h);\n c.chartCount++;\n B && C(B, function (a, b) {\n c.isFunction(a) && p(h, b, a);\n });\n h.xAxis = [];\n h.yAxis = [];\n h.pointCount = h.colorCounter = h.symbolCounter = 0;\n k(h, \"afterInit\");\n h.firstRender();\n });\n },\n initSeries: function initSeries(a) {\n var b = this.options.chart;\n (b = K[a.type || b.type || b.defaultSeriesType]) || c.error(17, !0, this);\n b = new b();\n b.init(this, a);\n return b;\n },\n orderSeries: function orderSeries(a) {\n var b = this.series;\n\n for (a = a || 0; a < b.length; a++) {\n b[a] && (b[a].index = a, b[a].name = b[a].getName());\n }\n },\n isInsidePlot: function isInsidePlot(a, b, d) {\n var c = d ? b : a;\n a = d ? a : b;\n return 0 <= c && c <= this.plotWidth && 0 <= a && a <= this.plotHeight;\n },\n redraw: function redraw(a) {\n k(this, \"beforeRedraw\");\n var b = this.axes,\n d = this.series,\n f = this.pointer,\n e = this.legend,\n l = this.userOptions.legend,\n t = this.isDirtyLegend,\n h = this.hasCartesianSeries,\n B = this.isDirtyBox,\n w = this.renderer,\n g = w.isHidden(),\n v = [];\n this.setResponsive && this.setResponsive(!1);\n c.setAnimation(a, this);\n g && this.temporaryDisplay();\n this.layOutTitles();\n\n for (a = d.length; a--;) {\n var m = d[a];\n\n if (m.options.stacking) {\n var I = !0;\n\n if (m.isDirty) {\n var p = !0;\n break;\n }\n }\n }\n\n if (p) for (a = d.length; a--;) {\n m = d[a], m.options.stacking && (m.isDirty = !0);\n }\n d.forEach(function (a) {\n a.isDirty && (\"point\" === a.options.legendType ? (a.updateTotals && a.updateTotals(), t = !0) : l && (l.labelFormatter || l.labelFormat) && (t = !0));\n a.isDirtyData && k(a, \"updatedData\");\n });\n t && e && e.options.enabled && (e.render(), this.isDirtyLegend = !1);\n I && this.getStacks();\n h && b.forEach(function (a) {\n a.updateNames();\n a.setScale();\n });\n this.getMargins();\n h && (b.forEach(function (a) {\n a.isDirty && (B = !0);\n }), b.forEach(function (a) {\n var b = a.min + \",\" + a.max;\n a.extKey !== b && (a.extKey = b, v.push(function () {\n k(a, \"afterSetExtremes\", q(a.eventArgs, a.getExtremes()));\n delete a.eventArgs;\n }));\n (B || I) && a.redraw();\n }));\n B && this.drawChartBox();\n k(this, \"predraw\");\n d.forEach(function (a) {\n (B || a.isDirty) && a.visible && a.redraw();\n a.isDirtyData = !1;\n });\n f && f.reset(!0);\n w.draw();\n k(this, \"redraw\");\n k(this, \"render\");\n g && this.temporaryDisplay(!0);\n v.forEach(function (a) {\n a.call();\n });\n },\n get: function get(a) {\n function b(b) {\n return b.id === a || b.options && b.options.id === a;\n }\n\n var d = this.series,\n c;\n var f = v(this.axes, b) || v(this.series, b);\n\n for (c = 0; !f && c < d.length; c++) {\n f = v(d[c].points || [], b);\n }\n\n return f;\n },\n getAxes: function getAxes() {\n var a = this,\n b = this.options,\n c = b.xAxis = m(b.xAxis || {});\n b = b.yAxis = m(b.yAxis || {});\n k(this, \"getAxes\");\n c.forEach(function (a, b) {\n a.index = b;\n a.isX = !0;\n });\n b.forEach(function (a, b) {\n a.index = b;\n });\n c.concat(b).forEach(function (b) {\n new d(a, b);\n });\n k(this, \"afterGetAxes\");\n },\n getSelectedPoints: function getSelectedPoints() {\n var a = [];\n this.series.forEach(function (b) {\n a = a.concat((b[b.hasGroupedData ? \"points\" : \"data\"] || []).filter(function (a) {\n return l(a.selectedStaging, a.selected);\n }));\n });\n return a;\n },\n getSelectedSeries: function getSelectedSeries() {\n return this.series.filter(function (a) {\n return a.selected;\n });\n },\n setTitle: function setTitle(a, b, d) {\n this.applyDescription(\"title\", a);\n this.applyDescription(\"subtitle\", b);\n this.applyDescription(\"caption\", void 0);\n this.layOutTitles(d);\n },\n applyDescription: function applyDescription(a, b) {\n var d = this,\n c = \"title\" === a ? {\n color: \"#333333\",\n fontSize: this.options.isStock ? \"16px\" : \"18px\"\n } : {\n color: \"#666666\"\n };\n c = this.options[a] = I(!this.styledMode && {\n style: c\n }, this.options[a], b);\n var f = this[a];\n f && b && (this[a] = f = f.destroy());\n c && !f && (f = this.renderer.text(c.text, 0, 0, c.useHTML).attr({\n align: c.align,\n \"class\": \"highcharts-\" + a,\n zIndex: c.zIndex || 4\n }).add(), f.update = function (b) {\n d[{\n title: \"setTitle\",\n subtitle: \"setSubtitle\",\n caption: \"setCaption\"\n ](b);n }, this.styledMode || f.css(c.style), this = f);n },n layOutTitles: function layOutTitles(a) n var b = [0, 0, 0],n d = this.renderer,n c = this.spacingBox;n ["title", "subtitle", "caption"].forEach(function (a) {n var f = this[a],n e = this.options[a],n k = e.verticalAlign || "top";n a = "title" === a ? -3 : "top" === k ? b[0] + 2 : 0;nn if (f) {n if (!this.styledMode) var l = e.style.fontSize;n l = d.fontMetrics(l, f).b;n f.css({n width: (e.width || c.width + (e.widthAdjust || 0)) + "px"n });n var t = f.getBBox(e.useHTML).height;n f.align(q({n y: "bottom" === k ? l : a + l,n height: tn }, e), !1, "spacingBox");n e.floating || ("top" === k ? b[0] = Math.ceil(b[0] + t) : "bottom" === k && (b[2] = Math.ceil(b[2] + t)));n }n }, this);n b[0] && "top" === (this.options.title.verticalAlign || "top") && (b[0] += this.options.title.margin);n b[2] && "bottom" === this.options.caption.verticalAlign && (b[2] += this.options.caption.margin);n var f = !this.titleOffset || this.titleOffset.join(",") !== b.join(",");n this.titleOffset = b;n !this.isDirtyBox && f && (this.isDirtyBox = this.isDirtyLegend = f, this.hasRendered && l(a, !0) && this.isDirtyBox && this.redraw());n },n getChartSize: function getChartSize() {n var a = this.options.chart,n b = a.width;n a = a.height;n var d = this.renderTo;n D(b) || (this.containerWidth = c.getStyle(d, "width"));n D(a) || (this.containerHeight = c.getStyle(d, "height"));n this.chartWidth = Math.max(0, b || this.containerWidth || 600);n this.chartHeight = Math.max(0, c.relativeLength(a, this.chartWidth) || (1 < this.containerHeight ? this.containerHeight : 400));\n },\n temporaryDisplay: function temporaryDisplay(b) {\n var d = this.renderTo;\n if (b) for (; d && d.style;) {\n d.hcOrigStyle && (c.css(d, d.hcOrigStyle), delete d.hcOrigStyle), d.hcOrigDetached && (a.body.removeChild(d), d.hcOrigDetached = !1), d = d.parentNode;\n } else for (; d && d.style;) {\n a.body.contains(d) || d.parentNode || (d.hcOrigDetached = !0, a.body.appendChild(d));\n if (\"none\" === c.getStyle(d, \"display\", !1) || d.hcOricDetached) d.hcOrigStyle = {\n display: d.style.display,\n height: d.style.height,\n overflow: d.style.overflow\n }, b = {\n display: \"block\",\n overflow: \"hidden\"\n }, d !== this.renderTo && (b.height = 0), c.css(d, b), d.offsetWidth || d.style.setProperty(\"display\", \"block\", \"important\");\n d = d.parentNode;\n if (d === a.body) break;\n }\n },\n setClassName: function setClassName(a) {\n this.container.className = \"highcharts-container \" + (a || \"\");\n },\n getContainer: function getContainer() {\n var b = this.options,\n d = b.chart;\n var e = this.renderTo;\n var l = c.uniqueKey(),\n t,\n h;\n e || (this.renderTo = e = d.renderTo);\n y(e) && (this.renderTo = e = a.getElementById(e));\n e || c.error(13, !0, this);\n var B = x(A(e, \"data-highcharts-chart\"));\n u(B) && r[B] && r[B].hasRendered && r[B].destroy();\n A(e, \"data-highcharts-chart\", this.index);\n e.innerHTML = \"\";\n d.skipClone || e.offsetWidth || this.temporaryDisplay();\n this.getChartSize();\n B = this.chartWidth;\n var w = this.chartHeight;\n E(e, {\n overflow: \"hidden\"\n });\n this.styledMode || (t = q({\n position: \"relative\",\n overflow: \"hidden\",\n width: B + \"px\",\n height: w + \"px\",\n textAlign: \"left\",\n lineHeight: \"normal\",\n zIndex: 0,\n \"-webkit-tap-highlight-color\": \"rgba(0,0,0,0)\"\n }, d.style));\n this.container = e = f(\"div\", {\n id: l\n }, t, e);\n this._cursor = e.style.cursor;\n this.renderer = new (c[d.renderer] || c.Renderer)(e, B, w, null, d.forExport, b.exporting && b.exporting.allowHTML, this.styledMode);\n this.setClassName(d.className);\n if (this.styledMode) for (h in b.defs) {\n this.renderer.definition(b.defs[h]);\n } else this.renderer.setStyle(d.style);\n this.renderer.chartIndex = this.index;\n k(this, \"afterGetContainer\");\n },\n getMargins: function getMargins(a) {\n var b = this.spacing,\n d = this.margin,\n c = this.titleOffset;\n this.resetMargins();\n c[0] && !D(d[0]) && (this.plotTop = Math.max(this.plotTop, c[0] + b[0]));\n c[2] && !D(d[2]) && (this.marginBottom = Math.max(this.marginBottom, c[2] + b[2]));\n this.legend && this.legend.display && this.legend.adjustMargins(d, b);\n k(this, \"getMargins\");\n a || this.getAxisMargins();\n },\n getAxisMargins: function getAxisMargins() {\n var a = this,\n b = a.axisOffset = [0, 0, 0, 0],\n d = a.colorAxis,\n c = a.margin,\n f = function f(a) {\n a.forEach(function (a) {\n a.visible && a.getOffset();\n });\n };\n\n a.hasCartesianSeries ? f(a.axes) : d && d.length && f(d);\n B.forEach(function (d, f) {\n D(c[f]) || (a[d] += b[f]);\n });\n a.setChartSize();\n },\n reflow: function reflow(b) {\n var d = this,\n f = d.options.chart,\n e = d.renderTo,\n k = D(f.width) && D(f.height),\n l = f.width || c.getStyle(e, \"width\");\n f = f.height || c.getStyle(e, \"height\");\n e = b ? b.target : R;\n\n if (!k && !d.isPrinting && l && f && (e === R || e === a)) {\n if (l !== d.containerWidth || f !== d.containerHeight) c.clearTimeout(d.reflowTimeout), d.reflowTimeout = T(function () {\n d.container && d.setSize(void 0, void 0, !1);\n }, b ? 100 : 0);\n d.containerWidth = l;\n d.containerHeight = f;\n }\n },\n setReflow: function setReflow(a) {\n var b = this;\n !1 === a || this.unbindReflow ? !1 === a && this.unbindReflow && (this.unbindReflow = this.unbindReflow()) : (this.unbindReflow = p(R, \"resize\", function (a) {\n b.options && b.reflow(a);\n }), p(this, \"destroy\", this.unbindReflow));\n },\n setSize: function setSize(a, d, f) {\n var e = this,\n l = e.renderer;\n e.isResizing += 1;\n c.setAnimation(f, e);\n e.oldChartHeight = e.chartHeight;\n e.oldChartWidth = e.chartWidth;\n void 0 !== a && (e.options.chart.width = a);\n void 0 !== d && (e.options.chart.height = d);\n e.getChartSize();\n\n if (!e.styledMode) {\n var t = l.globalAnimation;\n (t ? g : E)(e.container, {\n width: e.chartWidth + \"px\",\n height: e.chartHeight + \"px\"\n }, t);\n }\n\n e.setChartSize(!0);\n l.setSize(e.chartWidth, e.chartHeight, f);\n e.axes.forEach(function (a) {\n a.isDirty = !0;\n a.setScale();\n });\n e.isDirtyLegend = !0;\n e.isDirtyBox = !0;\n e.layOutTitles();\n e.getMargins();\n e.redraw(f);\n e.oldChartHeight = null;\n k(e, \"resize\");\n T(function () {\n e && k(e, \"endResize\", null, function () {\n --e.isResizing;\n });\n }, b(t).duration);\n },\n setChartSize: function setChartSize(a) {\n var b = this.inverted,\n d = this.renderer,\n c = this.chartWidth,\n f = this.chartHeight,\n e = this.options.chart,\n l = this.spacing,\n t = this.clipOffset,\n B,\n h,\n w,\n g;\n this.plotLeft = B = Math.round(this.plotLeft);\n this.plotTop = h = Math.round(this.plotTop);\n this.plotWidth = w = Math.max(0, Math.round(c - B - this.marginRight));\n this.plotHeight = g = Math.max(0, Math.round(f - h - this.marginBottom));\n this.plotSizeX = b ? g : w;\n this.plotSizeY = b ? w : g;\n this.plotBorderWidth = e.plotBorderWidth || 0;\n this.spacingBox = d.spacingBox = {\n x: l[3],\n y: l[0],\n width: c - l[3] - l[1],\n height: f - l[0] - l[2]\n };\n this.plotBox = d.plotBox = {\n x: B,\n y: h,\n width: w,\n height: g\n };\n c = 2 * Math.floor(this.plotBorderWidth / 2);\n b = Math.ceil(Math.max(c, t[3]) / 2);\n d = Math.ceil(Math.max(c, t[0]) / 2);\n this.clipBox = {\n x: b,\n y: d,\n width: Math.floor(this.plotSizeX - Math.max(c, t[1]) / 2 - b),\n height: Math.max(0, Math.floor(this.plotSizeY - Math.max(c, t[2]) / 2 - d))\n };\n a || this.axes.forEach(function (a) {\n a.setAxisSize();\n a.setAxisTranslation();\n });\n k(this, \"afterSetChartSize\", {\n skipAxes: a\n });\n },\n resetMargins: function resetMargins() {\n k(this, \"resetMargins\");\n var a = this,\n b = a.options.chart;\n [\"margin\", \"spacing\"].forEach(function (d) {\n var c = b[d],\n f = L(c) ? c : [c, c, c, c];\n [\"Top\", \"Right\", \"Bottom\", \"Left\"].forEach(function (c, e) {\n a[d][e] = l(b[d + c], f[e]);\n });\n });\n B.forEach(function (b, d) {\n a[b] = l(a.margin[d], a.spacing[d]);\n });\n a.axisOffset = [0, 0, 0, 0];\n a.clipOffset = [0, 0, 0, 0];\n },\n drawChartBox: function drawChartBox() {\n var a = this.options.chart,\n b = this.renderer,\n d = this.chartWidth,\n c = this.chartHeight,\n f = this.chartBackground,\n e = this.plotBackground,\n l = this.plotBorder,\n t = this.styledMode,\n B = this.plotBGImage,\n h = a.backgroundColor,\n w = a.plotBackgroundColor,\n g = a.plotBackgroundImage,\n q,\n v = this.plotLeft,\n m = this.plotTop,\n I = this.plotWidth,\n p = this.plotHeight,\n r = this.plotBox,\n K = this.clipRect,\n x = this.clipBox,\n J = \"animate\";\n f || (this.chartBackground = f = b.rect().addClass(\"highcharts-background\").add(), J = \"attr\");\n if (t) var n = q = f.strokeWidth();else {\n n = a.borderWidth || 0;\n q = n + (a.shadow ? 8 : 0);\n h = {\n fill: h || \"none\"\n };\n if (n || f[\"stroke-width\"]) h.stroke = a.borderColor, h[\"stroke-width\"] = n;\n f.attr(h).shadow(a.shadow);\n }\n f[J]({\n x: q / 2,\n y: q / 2,\n width: d - q - n % 2,\n height: c - q - n % 2,\n r: a.borderRadius\n });\n J = \"animate\";\n e || (J = \"attr\", this.plotBackground = e = b.rect().addClass(\"highcharts-plot-background\").add());\n e[J](r);\n t || (e.attr({\n fill: w || \"none\"\n }).shadow(a.plotShadow), g && (B ? B.animate(r) : this.plotBGImage = b.image(g, v, m, I, p).add()));\n K ? K.animate({\n width: x.width,\n height: x.height\n }) : this.clipRect = b.clipRect(x);\n J = \"animate\";\n l || (J = \"attr\", this.plotBorder = l = b.rect().addClass(\"highcharts-plot-border\").attr({\n zIndex: 1\n }).add());\n t || l.attr({\n stroke: a.plotBorderColor,\n \"stroke-width\": a.plotBorderWidth || 0,\n fill: \"none\"\n });\n l[J](l.crisp({\n x: v,\n y: m,\n width: I,\n height: p\n }, -l.strokeWidth()));\n this.isDirtyBox = !1;\n k(this, \"afterDrawChartBox\");\n },\n propFromSeries: function propFromSeries() {\n var a = this,\n b = a.options.chart,\n d,\n c = a.options.series,\n f,\n e;\n [\"inverted\", \"angular\", \"polar\"].forEach(function (k) {\n d = K[b.type || b.defaultSeriesType];\n e = b[k] || d && d.prototype[k];\n\n for (f = c && c.length; !e && f--;) {\n (d = K[c[f].type]) && d.prototype[k] && (e = !0);\n }\n\n a[k] = e;\n });\n },\n linkSeries: function linkSeries() {\n var a = this,\n b = a.series;\n b.forEach(function (a) {\n a.linkedSeries.length = 0;\n });\n b.forEach(function (b) {\n var d = b.options.linkedTo;\n y(d) && (d = \":previous\" === d ? a.series[b.index - 1] : a.get(d)) && d.linkedParent !== b && (d.linkedSeries.push(b), b.linkedParent = d, b.visible = l(b.options.visible, d.options.visible, b.visible));\n });\n k(this, \"afterLinkSeries\");\n },\n renderSeries: function renderSeries() {\n this.series.forEach(function (a) {\n a.translate();\n a.render();\n });\n },\n renderLabels: function renderLabels() {\n var a = this,\n b = a.options.labels;\n b.items && b.items.forEach(function (d) {\n var c = q(b.style, d.style),\n f = x(c.left) + a.plotLeft,\n e = x(c.top) + a.plotTop + 12;\n delete c.left;\n delete c.top;\n a.renderer.text(d.html, f, e).attr({\n zIndex: 2\n }).css(c).add();\n });\n },\n render: function render() {\n var a = this.axes,\n b = this.colorAxis,\n d = this.renderer,\n c = this.options,\n f = 0,\n e = function e(a) {\n a.forEach(function (a) {\n a.visible && a.render();\n });\n };\n\n this.setTitle();\n this.legend = new t(this, c.legend);\n this.getStacks && this.getStacks();\n this.getMargins(!0);\n this.setChartSize();\n c = this.plotWidth;\n a.some(function (a) {\n if (a.horiz && a.visible && a.options.labels.enabled && a.series.length) return f = 21, !0;\n });\n var k = this.plotHeight = Math.max(this.plotHeight - f, 0);\n a.forEach(function (a) {\n a.setScale();\n });\n this.getAxisMargins();\n var l = 1.1 < c / this.plotWidth;\n var h = 1.05 < k / this.plotHeight;\n if (l || h) a.forEach(function (a) {\n (a.horiz && l || !a.horiz && h) && a.setTickInterval(!0);\n }), this.getMargins();\n this.drawChartBox();\n this.hasCartesianSeries ? e(a) : b && b.length && e(b);\n this.seriesGroup || (this.seriesGroup = d.g(\"series-group\").attr({\n zIndex: 3\n }).add());\n this.renderSeries();\n this.renderLabels();\n this.addCredits();\n this.setResponsive && this.setResponsive();\n this.updateContainerScaling();\n this.hasRendered = !0;\n },\n addCredits: function addCredits(a) {\n var b = this;\n a = I(!0, this.options.credits, a);\n a.enabled && !this.credits && (this.credits = this.renderer.text(a.text + (this.mapCredits || \"\"), 0, 0).addClass(\"highcharts-credits\").on(\"click\", function () {\n a.href && (R.location.href = a.href);\n }).attr({\n align: a.position.align,\n zIndex: 8\n }), b.styledMode || this.credits.css(a.style), this.credits.add().align(a.position), this.credits.update = function (a) {\n b.credits = b.credits.destroy();\n b.addCredits(a);\n });\n },\n updateContainerScaling: function updateContainerScaling() {\n var a = this.container;\n\n if (a.offsetWidth && a.offsetHeight && a.getBoundingClientRect) {\n var b = a.getBoundingClientRect(),\n d = b.width / a.offsetWidth;\n a = b.height / a.offsetHeight;\n 1 !== d || 1 !== a ? this.containerScaling = {\n scaleX: d,\n scaleY: a\n } : delete this.containerScaling;\n }\n },\n destroy: function destroy() {\n var a = this,\n b = a.axes,\n d = a.series,\n f = a.container,\n e,\n l = f && f.parentNode;\n k(a, \"destroy\");\n a.renderer.forExport ? F(r, a) : r[a.index] = void 0;\n c.chartCount--;\n a.renderTo.removeAttribute(\"data-highcharts-chart\");\n J(a);\n\n for (e = b.length; e--;) {\n b[e] = b[e].destroy();\n }\n\n this.scroller && this.scroller.destroy && this.scroller.destroy();\n\n for (e = d.length; e--;) {\n d[e] = d[e].destroy();\n }\n\n \"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer\".split(\" \").forEach(function (b) {\n var d = a[b];\n d && d.destroy && (a[b] = d.destroy());\n });\n f && (f.innerHTML = \"\", J(f), l && h(f));\n C(a, function (b, d) {\n delete a[d];\n });\n },\n firstRender: function firstRender() {\n var a = this,\n b = a.options;\n\n if (!a.isReadyToRender || a.isReadyToRender()) {\n a.getContainer();\n a.resetMargins();\n a.setChartSize();\n a.propFromSeries();\n a.getAxes();\n (z(b.series) ? b.series : []).forEach(function (b) {\n a.initSeries(b);\n });\n a.linkSeries();\n k(a, \"beforeRender\");\n w && (a.pointer = new w(a, b));\n a.render();\n if (!a.renderer.imgCount && a.onload) a.onload();\n a.temporaryDisplay(!0);\n }\n },\n onload: function onload() {\n this.callbacks.concat([this.callback]).forEach(function (a) {\n a && void 0 !== this.index && a.apply(this, [this]);\n }, this);\n k(this, \"load\");\n k(this, \"render\");\n D(this.index) && this.setReflow(this.options.chart.reflow);\n this.onload = null;\n }\n });\n });\n N(H, \"parts/ScrollablePlotArea.js\", [H[\"parts/Globals.js\"]], function (c) {\n var n = c.addEvent,\n A = c.Chart;\n \"\";\n n(A, \"afterSetChartSize\", function (n) {\n var A = this.options.chart.scrollablePlotArea,\n z = A && A.minWidth;\n A = A && A.minHeight;\n\n if (!this.renderer.forExport) {\n if (z) {\n if (this.scrollablePixelsX = z = Math.max(0, z - this.chartWidth)) {\n this.plotWidth += z;\n this.inverted ? (this.clipBox.height += z, this.plotBox.height += z) : (this.clipBox.width += z, this.plotBox.width += z);\n var u = {\n 1: {\n name: \"right\",\n value: z\n }\n };\n }\n } else A && (this.scrollablePixelsY = z = Math.max(0, A - this.chartHeight)) && (this.plotHeight += z, this.inverted ? (this.clipBox.width += z, this.plotBox.width += z) : (this.clipBox.height += z, this.plotBox.height += z), u = {\n 2: {\n name: \"bottom\",\n value: z\n }\n });\n\n u && !n.skipAxes && this.axes.forEach(function (n) {\n u[n.side] ? n.getPlotLinePath = function () {\n var y = u[n.side].name,\n z = this[y];\n this[y] = z - u[n.side].value;\n var x = c.Axis.prototype.getPlotLinePath.apply(this, arguments);\n this[y] = z;\n return x;\n } : (n.setAxisSize(), n.setAxisTranslation());\n });\n }\n });\n n(A, \"render\", function () {\n this.scrollablePixelsX || this.scrollablePixelsY ? (this.setUpScrolling && this.setUpScrolling(), this.applyFixed()) : this.fixedDiv && this.applyFixed();\n });\n\n A.prototype.setUpScrolling = function () {\n var n = {\n WebkitOverflowScrolling: \"touch\",\n overflowX: \"hidden\",\n overflowY: \"hidden\"\n };\n this.scrollablePixelsX && (n.overflowX = \"auto\");\n this.scrollablePixelsY && (n.overflowY = \"auto\");\n this.scrollingContainer = c.createElement(\"div\", {\n className: \"highcharts-scrolling\"\n }, n, this.renderTo);\n this.innerContainer = c.createElement(\"div\", {\n className: \"highcharts-inner-container\"\n }, null, this.scrollingContainer);\n this.innerContainer.appendChild(this.container);\n this.setUpScrolling = null;\n };\n\n A.prototype.moveFixedElements = function () {\n var c = this.container,\n n = this.fixedRenderer,\n z = \".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-reset-zoom .highcharts-subtitle .highcharts-title .highcharts-legend-checkbox\".split(\" \"),\n u;\n this.scrollablePixelsX && !this.inverted ? u = \".highcharts-yaxis\" : this.scrollablePixelsX && this.inverted ? u = \".highcharts-xaxis\" : this.scrollablePixelsY && !this.inverted ? u = \".highcharts-xaxis\" : this.scrollablePixelsY && this.inverted && (u = \".highcharts-yaxis\");\n z.push(u, u + \"-labels\");\n z.forEach(function (u) {\n [].forEach.call(c.querySelectorAll(u), function (c) {\n (c.namespaceURI === n.SVG_NS ? n.box : n.box.parentNode).appendChild(c);\n c.style.pointerEvents = \"auto\";\n });\n });\n };\n\n A.prototype.applyFixed = function () {\n var A,\n F = !this.fixedDiv,\n z = this.options.chart.scrollablePlotArea;\n F ? (this.fixedDiv = c.createElement(\"div\", {\n className: \"highcharts-fixed\"\n }, {\n position: \"absolute\",\n overflow: \"hidden\",\n pointerEvents: \"none\",\n zIndex: 2\n }, null, !0), this.renderTo.insertBefore(this.fixedDiv, this.renderTo.firstChild), this.renderTo.style.overflow = \"visible\", this.fixedRenderer = A = new c.Renderer(this.fixedDiv, this.chartWidth, this.chartHeight), this.scrollableMask = A.path().attr({\n fill: c.color(this.options.chart.backgroundColor || \"#fff\").setOpacity(c.pick(z.opacity, .85)).get(),\n zIndex: -1\n }).addClass(\"highcharts-scrollable-mask\").add(), this.moveFixedElements(), n(this, \"afterShowResetZoom\", this.moveFixedElements)) : this.fixedRenderer.setSize(this.chartWidth, this.chartHeight);\n A = this.chartWidth + (this.scrollablePixelsX || 0);\n var u = this.chartHeight + (this.scrollablePixelsY || 0);\n c.stop(this.container);\n this.container.style.width = A + \"px\";\n this.container.style.height = u + \"px\";\n this.renderer.boxWrapper.attr({\n width: A,\n height: u,\n viewBox: [0, 0, A, u].join(\" \")\n });\n this.chartBackground.attr({\n width: A,\n height: u\n });\n this.scrollablePixelsY && (this.scrollingContainer.style.height = this.chartHeight + \"px\");\n F && (z.scrollPositionX && (this.scrollingContainer.scrollLeft = this.scrollablePixelsX * z.scrollPositionX), z.scrollPositionY && (this.scrollingContainer.scrollTop = this.scrollablePixelsY * z.scrollPositionY));\n u = this.axisOffset;\n F = this.plotTop - u[0] - 1;\n z = this.plotLeft - u[3] - 1;\n A = this.plotTop + this.plotHeight + u[2] + 1;\n u = this.plotLeft + this.plotWidth + u[1] + 1;\n var L = this.plotLeft + this.plotWidth - (this.scrollablePixelsX || 0),\n y = this.plotTop + this.plotHeight - (this.scrollablePixelsY || 0);\n F = this.scrollablePixelsX ? [\"M\", 0, F, \"L\", this.plotLeft - 1, F, \"L\", this.plotLeft - 1, A, \"L\", 0, A, \"Z\", \"M\", L, F, \"L\", this.chartWidth, F, \"L\", this.chartWidth, A, \"L\", L, A, \"Z\"] : this.scrollablePixelsY ? [\"M\", z, 0, \"L\", z, this.plotTop - 1, \"L\", u, this.plotTop - 1, \"L\", u, 0, \"Z\", \"M\", z, y, \"L\", z, this.chartHeight, \"L\", u, this.chartHeight, \"L\", u, y, \"Z\"] : [\"M\", 0, 0];\n \"adjustHeight\" !== this.redrawTrigger && this.scrollableMask.attr({\n d: F\n });\n };\n });\n N(H, \"parts/Point.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.defined,\n D = n.erase,\n F = n.isArray,\n z = n.isNumber,\n u = n.isObject,\n L,\n y = c.extend,\n C = c.fireEvent,\n x = c.format,\n m = c.pick,\n p = c.uniqueKey,\n g = c.removeEvent;\n\n c.Point = L = function L() {};\n\n c.Point.prototype = {\n init: function init(b, a, d) {\n this.series = b;\n this.applyOptions(a, d);\n this.id = A(this.id) ? this.id : p();\n this.resolveColor();\n b.chart.pointCount++;\n C(this, \"afterInit\");\n return this;\n },\n resolveColor: function resolveColor() {\n var b = this.series;\n var a = b.chart.options.chart.colorCount;\n var d = b.chart.styledMode;\n d || this.options.color || (this.color = b.color);\n b.options.colorByPoint ? (d || (a = b.options.colors || b.chart.options.colors, this.color = this.color || a[b.colorCounter], a = a.length), d = b.colorCounter, b.colorCounter++, b.colorCounter === a && (b.colorCounter = 0)) : d = b.colorIndex;\n this.colorIndex = m(this.colorIndex, d);\n },\n applyOptions: function applyOptions(b, a) {\n var d = this.series,\n c = d.options.pointValKey || d.pointValKey;\n b = L.prototype.optionsToObject.call(this, b);\n y(this, b);\n this.options = this.options ? y(this.options, b) : b;\n b.group && delete this.group;\n b.dataLabels && delete this.dataLabels;\n c && (this.y = this[c]);\n this.formatPrefix = (this.isNull = m(this.isValid && !this.isValid(), null === this.x || !z(this.y))) ? \"null\" : \"point\";\n this.selected && (this.state = \"select\");\n \"name\" in this && void 0 === a && d.xAxis && d.xAxis.hasNames && (this.x = d.xAxis.nameToX(this));\n void 0 === this.x && d && (this.x = void 0 === a ? d.autoIncrement(this) : a);\n return this;\n },\n setNestedProperty: function setNestedProperty(b, a, d) {\n d.split(\".\").reduce(function (b, d, c, g) {\n b[d] = g.length - 1 === c ? a : u(b[d], !0) ? b[d] : {};\n return b[d];\n }, b);\n return b;\n },\n optionsToObject: function optionsToObject(b) {\n var a = {},\n d = this.series,\n f = d.options.keys,\n e = f || d.pointArrayMap || [\"y\"],\n h = e.length,\n g = 0,\n m = 0;\n if (z(b) || null === b) a[e[0]] = b;else if (F(b)) for (!f && b.length > h && (d = _typeof(b[0]), "string" === d ? a.name = b[0] : "number" === d && (a.x = b[0]), g++); m < h;) {\n f && void 0 === b[g] || (0 < e[m].indexOf(\".\") ? c.Point.prototype.setNestedProperty(a, b[g], e[m]) : a[e[m]] = b[g]), g++, m++;\n } else \"object\" === _typeof(b) && (a = b, b.dataLabels && (d._hasPointLabels = !0), b.marker && (d._hasPointMarkers = !0));\n return a;\n },\n getClassName: function getClassName() {\n return \"highcharts-point\" + (this.selected ? \" highcharts-point-select\" : \"\") + (this.negative ? \" highcharts-negative\" : \"\") + (this.isNull ? \" highcharts-null-point\" : \"\") + (void 0 !== this.colorIndex ? \" highcharts-color-\" + this.colorIndex : \"\") + (this.options.className ? \" \" + this.options.className : \"\") + (this.zone && this.zone.className ? \" \" + this.zone.className.replace(\"highcharts-negative\", \"\") : \"\");\n },\n getZone: function getZone() {\n var b = this.series,\n a = b.zones;\n b = b.zoneAxis || \"y\";\n var d = 0,\n c;\n\n for (c = a[d]; this[b] >= c.value;) {n c = a[++d];n }nn this.nonZonedColor || (this.nonZonedColor = this.color);n this.color = c && c.color && !this.options.color ? c.color : this.nonZonedColor;n return c;n },n destroy: function destroy() {n var b = this.series.chart,n a = b.hoverPoints,n d;n b.pointCount–;n a && (this.setState(), D(a, this), a.length || (b.hoverPoints = null));n if (this === b.hoverPoint) this.onMouseOut();n if (this.graphic || this.dataLabel || this.dataLabels) g(this), this.destroyElements();n this.legendItem && b.legend.destroyItem(this);nn for (d in this) {n this[d] = null;n }n },n destroyElements: function destroyElements(b) {n var a = this,n d = [],n c;n b = b || {n graphic: 1,n dataLabel: 1n };n b.graphic && d.push("graphic", "shadowGroup");n b.dataLabel && d.push("dataLabel", "dataLabelUpper", "connector");nn for (c = d.length; c–;) {n var e = d[c];n a[e] && (a[e] = a[e].destroy());n }nn ["dataLabel", "connector"].forEach(function (d) {n var c = d + "s";n b[d] && a[c] && (a[c].forEach(function (a) {n a.element && a.destroy();n }), delete a[c]);n });n },n getLabelConfig: function getLabelConfig() {n return {n x: this.category,n y: this.y,n color: this.color,n colorIndex: this.colorIndex,n key: this.name || this.category,n series: this.series,n point: this,n percentage: this.percentage,n total: this.total || this.stackTotaln };n },n tooltipFormatter: function tooltipFormatter(b) {n var a = this.series,n d = a.tooltipOptions,n c = m(d.valueDecimals, ""),n e = d.valuePrefix || "",n h = d.valueSuffix || "";n a.chart.styledMode && (b = a.chart.tooltip.styledModeFormat(b));n (a.pointArrayMap || ["y"]).forEach(function (a) {n a = "{point." + a;n if (e || h) b = b.replace(RegExp(a + "}", "g"), e + a + "}" + h);n b = b.replace(RegExp(a + "}", "g"), a + ":,." + c + "f}");n });n return x(b, {n point: this,n series: this.seriesn }, a.chart.time);n },n firePointEvent: function firePointEvent(b, a, d) {n var c = this,n e = this.series.options;n (e.point.events[b] || c.options && c.options.events && c.options.events[b]) && this.importEvents();n "click" === b && e.allowPointSelect && (d = function d(a) {n c.select && c.select(null, a.ctrlKey || a.metaKey || a.shiftKey);n });n C(this, b, a, d);n },n visible: !0n };n });n N(H, "parts/Series.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.defined,n D = n.erase,n F = n.isArray,n z = n.isNumber,n u = n.isString,n L = n.objectEach,n y = n.splat,n C = c.addEvent,n x = c.animObject,n m = c.arrayMax,n p = c.arrayMin,n g = c.correctFloat,n b = c.defaultOptions,n a = c.defaultPlotOptions,n d = c.extend,n f = c.fireEvent,n e = c.merge,n h = c.pick,n r = c.removeEvent,n E = c.SVGElement,n q = c.syncTimeout,n v = c.win;n c.Series = c.seriesType("line", null, {n lineWidth: 2,n allowPointSelect: !1,n showCheckbox: !1,n animation: {n duration: 1E3n },n events: {},n marker: {n lineWidth: 0,n lineColor: "#ffffff",n enabledThreshold: 2,n radius: 4,n states: {n normal: {n animation: !0n },n hover: {n animation: {n duration: 50n },n enabled: !0,n radiusPlus: 2,n lineWidthPlus: 1n },n select: {n fillColor: "#cccccc",n lineColor: "#000000",n lineWidth: 2n }n }n },n point: {n events: {}n },n dataLabels: {n align: "center",n formatter: function formatter() {n return null === this.y ? "" : c.numberFormat(this.y, -1);n },n padding: 5,n style: {n fontSize: "11px",n fontWeight: "bold",n color: "contrast",n textOutline: "1px contrast"n },n verticalAlign: "bottom",n x: 0,n y: 0n },n cropThreshold: 300,n opacity: 1,n pointRange: 0,n softThreshold: !0,n states: {n normal: {n animation: !0n },n hover: {n animation: {n duration: 50n },n lineWidthPlus: 1,n marker: {},n halo: {n size: 10,n opacity: .25n }n },n select: {n animation: {n duration: 0n }n },n inactive: {n animation: {n duration: 50n },n opacity: .2n }n },n stickyTracking: !0,n turboThreshold: 1E3,n findNearestPointBy: "x"n }, {n axisTypes: ["xAxis", "yAxis"],n coll: "series",n colorCounter: 0,n cropShoulder: 1,n directTouch: !1,n isCartesian: !0,n parallelArrays: ["x", "y"],n pointClass: c.Point,n requireSorting: !0,n sorted: !0,n init: function init(a, b) {n f(this, "init", {n options: bn });n var e = this,n k = a.series,n t;n this.eventOptions = this.eventOptions || {};n e.chart = a;n e.options = b = e.setOptions(b);n e.linkedSeries = [];n e.bindAxes();n d(e, {n name: b.name,n state: "",n visible: !1 !== b.visible,n selected: !0 === b.selectedn });n var l = b.events;n L(l, function (a, b) {n c.isFunction(a) && e.eventOptions[b] !== a && (c.isFunction(e.eventOptions[b]) && r(e, b, e.eventOptions[b]), e.eventOptions[b] = a, C(e, b, a));n });n if (l && l.click || b.point && b.point.events && b.point.events.click || b.allowPointSelect) a.runTrackerClick = !0;n e.getColor();n e.getSymbol();n e.parallelArrays.forEach(function (a) {n e[a + "Data"] || (e[a + "Data"] = []);n });n e.points || e.data || e.setData(b.data, !1);n e.isCartesian && (a.hasCartesianSeries = !0);n k.length && (t = k[k.length - 1]);n e._i = h(t && t._i, -1) + 1;n a.orderSeries(this.insert(k));n f(this, "afterInit");n },n insert: function insert(a) {n var b = this.options.index,n d;nn if (z(b)) {n for (d = a.length; d–;) {n if (b >= h(a[d].options.index, a[d]._i)) {n a.splice(d + 1, 0, this);n break;n }n }nn -1 === d && a.unshift(this);n d += 1;n } else a.push(this);nn return h(d, a.length - 1);n },n bindAxes: function bindAxes() {n var a = this,n b = a.options,n d = a.chart,n e;n f(this, "bindAxes", null, function () {n (a.axisTypes || []).forEach(function (f) {n d[f].forEach(function (d) {n e = d.options;n if (b[f] === e.index || void 0 !== b[f] && b[f] === e.id || void 0 === b[f] && 0 === e.index) a.insert(d.series), a[f] = d, d.isDirty = !0;n });n a[f] || a.optionalAxis === f || c.error(18, !0, d);n });n });n },n updateParallelArrays: function updateParallelArrays(a, b) {n var d = a.series,n c = arguments,n f = z(b) ? function © {n var f = "y" === c && d.toYData ? d.toYData(a) : a[c];n d[c + "Data"][b] = f;n } : function (a) {n Array.prototype[b].apply(d[a + "Data"], Array.prototype.slice.call(c, 2));n };n d.parallelArrays.forEach(f);n },n hasData: function hasData() {n return this.visible && void 0 !== this.dataMax && void 0 !== this.dataMin || this.visible && this.yData && 0 < this.yData.length;\n },\n autoIncrement: function autoIncrement() {\n var a = this.options,\n b = this.xIncrement,\n d,\n c = a.pointIntervalUnit,\n f = this.chart.time;\n b = h(b, a.pointStart, 0);\n this.pointInterval = d = h(this.pointInterval, a.pointInterval, 1);\n c && (a = new f.Date(b), \"day\" === c ? f.set(\"Date\", a, f.get(\"Date\", a) + d) : \"month\" === c ? f.set(\"Month\", a, f.get(\"Month\", a) + d) : \"year\" === c && f.set(\"FullYear\", a, f.get(\"FullYear\", a) + d), d = a.getTime() - b);\n this.xIncrement = b + d;\n return b;\n },\n setOptions: function setOptions(a) {\n var d = this.chart,\n c = d.options,\n k = c.plotOptions,\n w = d.userOptions || {};\n a = e(a);\n d = d.styledMode;\n var l = {\n plotOptions: k,\n userOptions: a\n };\n f(this, \"setOptions\", l);\n var g = l.plotOptions[this.type],\n q = w.plotOptions || {};\n this.userOptions = l.userOptions;\n w = e(g, k.series, w.plotOptions && w.plotOptions[this.type], a);\n this.tooltipOptions = e(b.tooltip, b.plotOptions.series && b.plotOptions.series.tooltip, b.plotOptions[this.type].tooltip, c.tooltip.userOptions, k.series && k.series.tooltip, k[this.type].tooltip, a.tooltip);\n this.stickyTracking = h(a.stickyTracking, q[this.type] && q[this.type].stickyTracking, q.series && q.series.stickyTracking, this.tooltipOptions.shared && !this.noSharedTooltip ? !0 : w.stickyTracking);\n null === g.marker && delete w.marker;\n this.zoneAxis = w.zoneAxis;\n c = this.zones = (w.zones || []).slice();\n !w.negativeColor && !w.negativeFillColor || w.zones || (k = {\n value: w[this.zoneAxis + \"Threshold\"] || w.threshold || 0,\n className: \"highcharts-negative\"\n }, d || (k.color = w.negativeColor, k.fillColor = w.negativeFillColor), c.push(k));\n c.length && A(c[c.length - 1].value) && c.push(d ? {} : {\n color: this.color,\n fillColor: this.fillColor\n });\n f(this, \"afterSetOptions\", {\n options: w\n });\n return w;\n },\n getName: function getName() {\n return h(this.options.name, \"Series \" + (this.index + 1));\n },\n getCyclic: function getCyclic(a, b, d) {\n var c = this.chart,\n f = this.userOptions,\n e = a + \"Index\",\n k = a + \"Counter\",\n t = d ? d.length : h(c.options.chart[a + \"Count\"], c[a + \"Count\"]);\n\n if (!b) {\n var B = h(f[e], f[\"_\" + e]);\n A(B) || (c.series.length || (c[k] = 0), f[\"_\" + e] = B = c[k] % t, c[k] += 1);\n d && (b = d[B]);\n }\n\n void 0 !== B && (this[e] = B);\n this[a] = b;\n },\n getColor: function getColor() {\n this.chart.styledMode ? this.getCyclic(\"color\") : this.options.colorByPoint ? this.options.color = null : this.getCyclic(\"color\", this.options.color || a[this.type].color, this.chart.options.colors);\n },\n getSymbol: function getSymbol() {\n this.getCyclic(\"symbol\", this.options.marker.symbol, this.chart.options.symbols);\n },\n findPointIndex: function findPointIndex(a, b) {\n var d = a.id;\n a = a.x;\n var c = this.points,\n f;\n\n if (d) {\n var e = (d = this.chart.get(d)) && d.index;\n void 0 !== e && (f = !0);\n }\n\n void 0 === e && z(a) && (e = this.xData.indexOf(a, b));\n -1 !== e && void 0 !== e && this.cropped && (e = e >= this.cropStart ? e - this.cropStart : e);n !f && c[e] && c[e].touched && (e = void 0);n return e;n },n drawLegendSymbol: c.LegendSymbolMixin.drawLineMarker,n updateData: function updateData(a) {n var b = this.options,n d = this.points,n c = [],n f,n e,n k,n h = this.requireSorting,n g = a.length === d.length,n q = !0;n this.xIncrement = null;n a.forEach(function (a, e) {n var l = A(a) && this.pointClass.prototype.optionsToObject.call({n series: thisn }, a) || {};n var t = l.x;n if (l.id || z(t)) if (t = this.findPointIndex(l, k), -1 === t || void 0 === t ? c.push(a) : d[t] && a !== b.data[t] ? (d[t].update(a, !1, null, !1), d[t].touched = !0, h && (k = t + 1)) : d[t] && (d[t].touched = !0), !g || e !== t || this.hasDerivedData) f = !0;n }, this);n if (f) for (a = d.length; a–;) {n (e = d[a]) && !e.touched && e.remove(!1);n } else g ? a.forEach(function (a, b) {n d[b].update && a !== d[b].y && d[b].update(a, !1, null, !1);n }) : q = !1;n d.forEach(function (a) {n a && (a.touched = !1);n });n if (!q) return !1;n c.forEach(function (a) {n this.addPoint(a, !1, null, null, !1);n }, this);n return !0;n },n setData: function setData(a, b, d, f) {n var e = this,n k = e.points,n t = k && k.length || 0,n g,n q = e.options,n v = e.chart,n m = null,n B = e.xAxis,n p = q.turboThreshold,n I = this.xData,n r = this.yData,n x = (g = e.pointArrayMap) && g.length,n n = q.keys,n y = 0,n E = 1,n A;n a = a || [];n g = a.length;n b = h(b, !0);n !1 !== f && g && t && !e.cropped && !e.hasGroupedData && e.visible && !e.isSeriesBoosting && (A = this.updateData(a));nn if (!A) {n e.xIncrement = null;n e.colorCounter = 0;n this.parallelArrays.forEach(function (a) {n e[a + "Data"].length = 0;n });nn if (p && g > p) {n for (d = 0; null === m && d < g;) {\n m = a[d], d++;\n }\n\n if (z(m)) for (d = 0; d < g; d++) {\n I[d] = this.autoIncrement(), r[d] = a[d];\n } else if (F(m)) {\n if (x) for (d = 0; d < g; d++) {\n m = a[d], I[d] = m[0], r[d] = m.slice(1, x + 1);\n } else for (n && (y = n.indexOf(\"x\"), E = n.indexOf(\"y\"), y = 0 <= y ? y : 0, E = 0 <= E ? E : 1), d = 0; d < g; d++) {\n m = a[d], I[d] = m[y], r[d] = m[E];\n }\n } else c.error(12, !1, v);\n } else for (d = 0; d < g; d++) {\n void 0 !== a[d] && (m = {\n series: e\n }, e.pointClass.prototype.applyOptions.apply(m, [a[d]]), e.updateParallelArrays(m, d));\n }\n\n r && u(r[0]) && c.error(14, !0, v);\n e.data = [];\n e.options.data = e.userOptions.data = a;\n\n for (d = t; d--;) {\n k[d] && k[d].destroy && k[d].destroy();\n }\n\n B && (B.minRange = B.userMinRange);\n e.isDirty = v.isDirtyBox = !0;\n e.isDirtyData = !!k;\n d = !1;\n }\n\n \"point\" === q.legendType && (this.processData(), this.generatePoints());\n b && v.redraw(d);\n },\n processData: function processData(a) {\n var b = this.xData,\n d = this.yData,\n f = b.length;\n var e = 0;\n var k = this.xAxis,\n h = this.options;\n var g = h.cropThreshold;\n var q = this.getExtremesFromAll || h.getExtremesFromAll,\n m = this.isCartesian;\n h = k && k.val2lin;\n var v = k && k.isLog,\n p = this.requireSorting;\n if (m && !this.isDirty && !k.isDirty && !this.yAxis.isDirty && !a) return !1;\n\n if (k) {\n a = k.getExtremes();\n var r = a.min;\n var x = a.max;\n }\n\n if (m && this.sorted && !q && (!g || f > g || this.forceCrop)) if (b[f - 1] < r || b[0] > x) b = [], d = [];else if (this.yData && (b[0] < r || b[f - 1] > x)) {n e = this.cropData(this.xData, this.yData, r, x);n b = e.xData;n d = e.yData;n e = e.start;n var n = !0;n }nn for (g = b.length || 1; –g;) {n if (f = v ? h(b[g]) - h(b[g - 1]) : b[g] - b[g - 1], 0 < f && (void 0 === u || f < u)) var u = f;else 0 > f && p && (c.error(15, !1, this.chart), p = !1);n }nn this.cropped = n;n this.cropStart = e;n this.processedXData = b;n this.processedYData = d;n this.closestPointRange = this.basePointRange = u;n },n cropData: function cropData(a, b, d, c, f) {n var e = a.length,n k = 0,n t = e,n g;n f = h(f, this.cropShoulder);nn for (g = 0; g < e; g++) {\n if (a[g] >= d) {n k = Math.max(0, g - f);n break;n }n }nn for (d = g; d < e; d++) {\n if (a[d] > c) {n t = d + f;n break;n }n }nn return {n xData: a.slice(k, t),n yData: b.slice(k, t),n start: k,n end: tn };n },n generatePoints: function generatePoints() {n var a = this.options,n b = a.data,n c = this.data,n e,n h = this.processedXData,n l = this.processedYData,n g = this.pointClass,n q = h.length,n m = this.cropStart || 0,n v = this.hasGroupedData;n a = a.keys;n var p = [],n r;n c || v || (c = [], c.length = b.length, c = this.data = c);n a && v && (this.options.keys = !1);nn for (r = 0; r < q; r++) {\n var x = m + r;\n\n if (v) {\n var n = new g().init(this, [h[r]].concat(y(l[r])));\n n.dataGroup = this.groupMap[r];\n n.dataGroup.options && (n.options = n.dataGroup.options, d(n, n.dataGroup.options), delete n.dataLabels);\n } else (n = c[x]) || void 0 === b[x] || (c[x] = n = new g().init(this, b[x], h[r]));\n\n n && (n.index = x, p[r] = n);\n }\n\n this.options.keys = a;\n if (c && (q !== (e = c.length) || v)) for (r = 0; r < e; r++) {\n r !== m || v || (r += q), c[r] && (c[r].destroyElements(), c[r].plotX = void 0);\n }\n this.data = c;\n this.points = p;\n f(this, \"afterGeneratePoints\");\n },\n getXExtremes: function getXExtremes(a) {\n return {\n min: p(a),\n max: m(a)\n };\n },\n getExtremes: function getExtremes(a) {\n var b = this.xAxis,\n d = this.yAxis,\n c = this.processedXData || this.xData,\n e = [],\n k = 0,\n h = 0;\n var g = 0;\n var q = this.requireSorting ? this.cropShoulder : 0,\n v = d ? d.positiveValuesOnly : !1,\n r;\n a = a || this.stackedYData || this.processedYData || [];\n d = a.length;\n b && (g = b.getExtremes(), h = g.min, g = g.max);\n\n for (r = 0; r < d; r++) {\n var x = c[r];\n var n = a[r];\n var u = (z(n) || F(n)) && (n.length || 0 < n || !v);\n x = this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || !b || (c[r + q] || x) >= h && (c[r - q] || x) <= g;\n if (u && x) if (u = n.length) for (; u--;) {\n z(n[u]) && (e[k++] = n[u]);\n } else e[k++] = n;\n }\n\n this.dataMin = p(e);\n this.dataMax = m(e);\n f(this, \"afterGetExtremes\");\n },\n translate: function translate() {\n this.processedXData || this.processData();\n this.generatePoints();\n var a = this.options,\n b = a.stacking,\n d = this.xAxis,\n c = d.categories,\n e = this.yAxis,\n l = this.points,\n q = l.length,\n m = !!this.modifyValue,\n v,\n p = this.pointPlacementToXValue(),\n r = z(p),\n n = a.threshold,\n x = a.startFromThreshold ? n : 0,\n u,\n y = this.zoneAxis || \"y\",\n E = Number.MAX_VALUE;\n\n for (v = 0; v < q; v++) {\n var C = l[v],\n L = C.x;\n var D = C.y;\n var H = C.low,\n N = b && e.stacks[(this.negStacks && D < (x ? 0 : n) ? \"-\" : \"\") + this.stackKey];\n e.positiveValuesOnly && null !== D && 0 >= D && (C.isNull = !0);n C.plotX = u = g(Math.min(Math.max(-1E5, d.translate(L, 0, 0, 0, 1, p, "flags" === this.type)), 1E5));nn if (b && this.visible && N && N[L]) {n var W = this.getStackIndicator(W, L, this.index);nn if (!C.isNull) {n var P = N[L];n var X = P.points[W.key];n }n }nn F(X) && (H = X[0], D = X[1], H === x && W.key === N[L].base && (H = h(z(n) && n, e.min)), e.positiveValuesOnly && 0 >= H && (H = null), C.total = C.stackTotal = P.total, C.percentage = P.total && C.y / P.total * 100, C.stackY = D, this.irregularWidths || P.setOffset(this.pointXOffset || 0, this.barW || 0));n C.yBottom = A(H) ? Math.min(Math.max(-1E5, e.translate(H, 0, 1, 0, 1)), 1E5) : null;n m && (D = this.modifyValue(D, C));n C.plotY = D = "number" === typeof D && Infinity !== D ? Math.min(Math.max(-1E5, e.translate(D, 0, 1, 0, 1)), 1E5) : void 0;n C.isInside = void 0 !== D && 0 <= D && D <= e.len && 0 <= u && u <= d.len;\n C.clientX = r ? g(d.translate(L, 0, 0, 0, 1, p)) : u;\n C.negative = C[y] < (a[y + \"Threshold\"] || n || 0);\n C.category = c && void 0 !== c[C.x] ? c[C.x] : C.x;\n\n if (!C.isNull) {\n void 0 !== Y && (E = Math.min(E, Math.abs(u - Y)));\n var Y = u;\n }\n\n C.zone = this.zones.length && C.getZone();\n }\n\n this.closestPointRangePx = E;\n f(this, \"afterTranslate\");\n },\n getValidPoints: function getValidPoints(a, b, d) {\n var c = this.chart;\n return (a || this.points || []).filter(function (a) {\n return b && !c.isInsidePlot(a.plotX, a.plotY, c.inverted) ? !1 : d || !a.isNull;\n });\n },\n getClipBox: function getClipBox(a, b) {\n var d = this.options,\n c = this.chart,\n f = c.inverted,\n e = this.xAxis,\n k = e && this.yAxis;\n a && !1 === d.clip && k ? a = f ? {\n y: -c.chartWidth + k.len + k.pos,\n height: c.chartWidth,\n width: c.chartHeight,\n x: -c.chartHeight + e.len + e.pos\n } : {\n y: -k.pos,\n height: c.chartHeight,\n width: c.chartWidth,\n x: -e.pos\n } : (a = this.clipBox || c.clipBox, b && (a.width = c.plotSizeX, a.x = 0));\n return b ? {\n width: a.width,\n x: a.x\n } : a;\n },\n setClip: function setClip(a) {\n var b = this.chart,\n d = this.options,\n c = b.renderer,\n f = b.inverted,\n e = this.clipBox,\n k = this.getClipBox(a),\n h = this.sharedClipKey || [\"_sharedClip\", a && a.duration, a && a.easing, k.height, d.xAxis, d.yAxis].join(),\n g = b[h],\n q = b[h + \"m\"];\n g || (a && (k.width = 0, f && (k.x = b.plotSizeX + (!1 !== d.clip ? 0 : b.plotTop)), b[h + \"m\"] = q = c.clipRect(f ? b.plotSizeX + 99 : -99, f ? -b.plotLeft : -b.plotTop, 99, f ? b.chartWidth : b.chartHeight)), b[h] = g = c.clipRect(k), g.count = {\n length: 0\n });\n a && !g.count[this.index] && (g.count[this.index] = !0, g.count.length += 1);\n if (!1 !== d.clip || a) this.group.clip(a || e ? g : b.clipRect), this.markerGroup.clip(q), this.sharedClipKey = h;\n a || (g.count[this.index] && (delete g.count[this.index], --g.count.length), 0 === g.count.length && h && b[h] && (e || (b[h] = b[h].destroy()), b[h + \"m\"] && (b[h + \"m\"] = b[h + \"m\"].destroy())));\n },\n animate: function animate(a) {\n var b = this.chart,\n d = x(this.options.animation);\n if (a) this.setClip(d);else {\n var c = this.sharedClipKey;\n a = b[c];\n var f = this.getClipBox(d, !0);\n a && a.animate(f, d);\n b[c + \"m\"] && b[c + \"m\"].animate({\n width: f.width + 99,\n x: f.x - (b.inverted ? 0 : 99)\n }, d);\n this.animate = null;\n }\n },\n afterAnimate: function afterAnimate() {\n this.setClip();\n f(this, \"afterAnimate\");\n this.finishedAnimating = !0;\n },\n drawPoints: function drawPoints() {\n var a = this.points,\n b = this.chart,\n d,\n c = this.options.marker,\n f = this[this.specialGroup] || this.markerGroup;\n var e = this.xAxis;\n var g = h(c.enabled, !e || e.isRadial ? !0 : null, this.closestPointRangePx >= c.enabledThreshold * c.radius);n if (!1 !== c.enabled || this._hasPointMarkers) for (e = 0; e < a.length; e++) {\n var q = a[e];\n var m = (d = q.graphic) ? \"animate\" : \"attr\";\n var v = q.marker || {};\n var p = !!q.marker;\n var r = g && void 0 === v.enabled || v.enabled;\n var n = !1 !== q.isInside;\n\n if (r && !q.isNull) {\n r = h(v.symbol, this.symbol);\n var x = this.markerAttribs(q, q.selected && \"select\");\n d ? d[n ? \"show\" : \"hide\"](n).animate(x) : n && (0 < x.width || q.hasImage) && (q.graphic = d = b.renderer.symbol(r, x.x, x.y, x.width, x.height, p ? v : c).add(f));\n if (d && !b.styledMode) d[m](this.pointAttribs(q, q.selected && \"select\"));\n d && d.addClass(q.getClassName(), !0);\n } else d && (q.graphic = d.destroy());\n }\n },\n markerAttribs: function markerAttribs(a, b) {\n var d = this.options.marker,\n c = a.marker || {},\n f = c.symbol || d.symbol,\n e = h(c.radius, d.radius);\n b && (d = d.states[b], b = c.states && c.states[b], e = h(b && b.radius, d && d.radius, e + (d && d.radiusPlus || 0)));\n a.hasImage = f && 0 === f.indexOf(\"url\");\n a.hasImage && (e = 0);\n a = {\n x: Math.floor(a.plotX) - e,\n y: a.plotY - e\n };\n e && (a.width = a.height = 2 * e);\n return a;\n },\n pointAttribs: function pointAttribs(a, b) {\n var d = this.options.marker,\n c = a && a.options,\n f = c && c.marker || {},\n e = this.color,\n k = c && c.color,\n t = a && a.color;\n c = h(f.lineWidth, d.lineWidth);\n var g = a && a.zone && a.zone.color;\n a = 1;\n e = k || g || t || e;\n k = f.fillColor || d.fillColor || e;\n e = f.lineColor || d.lineColor || e;\n b = b || \"normal\";\n d = d.states[b];\n b = f.states && f.states[b] || {};\n c = h(b.lineWidth, d.lineWidth, c + h(b.lineWidthPlus, d.lineWidthPlus, 0));\n k = b.fillColor || d.fillColor || k;\n e = b.lineColor || d.lineColor || e;\n a = h(b.opacity, d.opacity, a);\n return {\n stroke: e,\n \"stroke-width\": c,\n fill: k,\n opacity: a\n };\n },\n destroy: function destroy(a) {\n var b = this,\n d = b.chart,\n e = /AppleWebKit\\/533/.test(v.navigator.userAgent),\n k,\n l,\n h = b.data || [],\n g,\n q;\n f(b, \"destroy\");\n a || r(b);\n (b.axisTypes || []).forEach(function (a) {\n (q = b[a]) && q.series && (D(q.series, b), q.isDirty = q.forceRedraw = !0);\n });\n b.legendItem && b.chart.legend.destroyItem(b);\n\n for (l = h.length; l--;) {\n (g = h[l]) && g.destroy && g.destroy();\n }\n\n b.points = null;\n c.clearTimeout(b.animationTimeout);\n L(b, function (a, b) {\n a instanceof E && !a.survive && (k = e && \"group\" === b ? \"hide\" : \"destroy\", a[k]());\n });\n d.hoverSeries === b && (d.hoverSeries = null);\n D(d.series, b);\n d.orderSeries();\n L(b, function (d, c) {\n a && \"hcEvents\" === c || delete b[c];\n });\n },\n getGraphPath: function getGraphPath(a, b, d) {\n var c = this,\n f = c.options,\n e = f.step,\n k,\n h = [],\n t = [],\n g;\n a = a || c.points;\n (k = a.reversed) && a.reverse();\n (e = {\n right: 1,\n center: 2\n || e && 3) && k && (e = 4 - e);n !f.connectNulls || b || d || (a = this.getValidPoints(a));n a.forEach(function (k, l) {n var q = k.plotX,n v = k.plotY,n m = a[l - 1];n (k.leftCliff || m && m.rightCliff) && !d && (g = !0);n k.isNull && !A(b) && 0 < l ? g = !f.connectNulls : k.isNull && !b ? g = !0 : (0 === l || g ? l = [\"M\", k.plotX, k.plotY] : c.getPointSpline ? l = c.getPointSpline(a, k, l) : e ? (l = 1 === e ? [\"L\", m.plotX, v] : 2 === e ? [\"L\", (m.plotX + q) / 2, m.plotY, \"L\", (m.plotX + q) / 2, v] : [\"L\", q, m.plotY], l.push(\"L\", q, v)) : l = [\"L\", q, v], t.push(k.x), e && (t.push(k.x), 2 === e && t.push(k.x)), h.push.apply(h, l), g = !1);\n });\n h.xMap = t;\n return c.graphPath = h;\n },\n drawGraph: function drawGraph() {\n var a = this,\n b = this.options,\n d = (this.gappedPath || this.getGraphPath).call(this),\n c = this.chart.styledMode,\n f = [[\"graph\", \"highcharts-graph\"]];\n c || f[0].push(b.lineColor || this.color || \"#cccccc\", b.dashStyle);\n f = a.getZonesGraphs(f);\n f.forEach(function (f, e) {\n var k = f[0],\n l = a[k],\n h = l ? \"animate\" : \"attr\";\n l ? (l.endX = a.preventGraphAnimation ? null : d.xMap, l.animate({\n d: d\n })) : d.length && (a[k] = l = a.chart.renderer.path(d).addClass(f[1]).attr({\n zIndex: 1\n }).add(a.group));\n l && !c && (k = {\n stroke: f[2],\n \"stroke-width\": b.lineWidth,\n fill: a.fillGraph && a.color || \"none\"\n }, f[3] ? k.dashstyle = f[3] : \"square\" !== b.linecap && (k[\"stroke-linecap\"] = k[\"stroke-linejoin\"] = \"round\"), l[h](k).shadow(2 > e && b.shadow));n l && (l.startX = d.xMap, l.isArea = d.isArea);n });n },n getZonesGraphs: function getZonesGraphs(a) {n this.zones.forEach(function (b, d) {n d = ["zone-graph-" + d, "highcharts-graph highcharts-zone-graph-" + d + " " + (b.className || "")];n this.chart.styledMode || d.push(b.color || this.color, b.dashStyle || this.options.dashStyle);n a.push(d);n }, this);n return a;n },n applyZones: function applyZones() {n var a = this,n b = this.chart,n d = b.renderer,n c = this.zones,n f,n e,n g = this.clips || [],n q,n m = this.graph,n v = this.area,n p = Math.max(b.chartWidth, b.chartHeight),n r = this[(this.zoneAxis || "y") + "Axis"],n n = b.inverted,n x,n u,n y,n E = !1;nn if (c.length && (m || v) && r && void 0 !== r.min) {n var z = r.reversed;n var A = r.horiz;n m && !this.showLine && m.hide();n v && v.hide();n var C = r.getExtremes();n c.forEach(function (c, k) {n f = z ? A ? b.plotWidth : 0 : A ? 0 : r.toPixels(C.min) || 0;n f = Math.min(Math.max(h(e, f), 0), p);n e = Math.min(Math.max(Math.round(r.toPixels(h(c.value, C.max), !0) || 0), 0), p);n E && (f = e = r.toPixels(C.max));n x = Math.abs(f - e);n u = Math.min(f, e);n y = Math.max(f, e);n r.isXAxis ? (q = {n x: n ? y : u,n y: 0,n width: x,n height: pn }, A || (q.x = b.plotHeight - q.x)) : (q = {n x: 0,n y: n ? y : u,n width: p,n height: xn }, A && (q.y = b.plotWidth - q.y));n n && d.isVML && (q = r.isXAxis ? {n x: 0,n y: z ? u : y,n height: q.width,n width: b.chartWidthn } : {n x: q.y - b.plotLeft - b.spacingBox.x,n y: 0,n width: q.height,n height: b.chartHeightn });n g[k] ? g[k].animate(q) : g[k] = d.clipRect(q);n m && a["zone-graph-" + k].clip(g[k]);n v && a["zone-area-" + k].clip(g[k]);n E = c.value > C.max;n a.resetZones && 0 === e && (e = void 0);n });n this.clips = g;n } else a.visible && (m && m.show(!0), v && v.show(!0));n },n invertGroups: function invertGroups(a) {n function b() {n ["group", "markerGroup"].forEach(function (b) {n d[b] && (c.renderer.isVML && d[b].attr({n width: d.yAxis.len,n height: d.xAxis.lenn }), d[b].width = d.yAxis.len, d[b].height = d.xAxis.len, d[b].invert(a));n });n }nn var d = this,n c = d.chart;nn if (d.xAxis) {n var f = C(c, "resize", b);n C(d, "destroy", f);n b(a);n d.invertGroups = b;n }n },n plotGroup: function plotGroup(a, b, d, c, f) {n var e = this[a],n k = !e;n k && (this[a] = e = this.chart.renderer.g().attr({n zIndex: c || .1n }).add(f));n e.addClass("highcharts-" + b + " highcharts-series-" + this.index + " highcharts-" + this.type + "-series " + (A(this.colorIndex) ? "highcharts-color-" + this.colorIndex + " " : "") + (this.options.className || "") + (e.hasClass("highcharts-tracker") ? " highcharts-tracker" : ""), !0);n e.attr({n visibility: dn })[k ? "attr" : "animate"](this.getPlotBox());n return e;n },n getPlotBox: function getPlotBox() {n var a = this.chart,n b = this.xAxis,n d = this.yAxis;n a.inverted && (b = d, d = this.xAxis);n return {n translateX: b ? b.left : a.plotLeft,n translateY: d ? d.top : a.plotTop,n scaleX: 1,n scaleY: 1n };n },n render: function render() {n var a = this,n b = a.chart,n d = a.options,n c = !!a.animate && b.renderer.isSVG && x(d.animation).duration,n e = a.visible ? "inherit" : "hidden",n l = d.zIndex,n h = a.hasRendered,n g = b.seriesGroup,n m = b.inverted;n f(this, "render");n var v = a.plotGroup("group", "series", e, l, g);n a.markerGroup = a.plotGroup("markerGroup", "markers", e, l, g);n c && a.animate(!0);n v.inverted = a.isCartesian || a.invertable ? m : !1;n a.drawGraph && (a.drawGraph(), a.applyZones());n a.visible && a.drawPoints();n a.drawDataLabels && a.drawDataLabels();n a.redrawPoints && a.redrawPoints();n a.drawTracker && !1 !== a.options.enableMouseTracking && a.drawTracker();n a.invertGroups(m);n !1 === d.clip || a.sharedClipKey || h || v.clip(b.clipRect);n c && a.animate();n h || (a.animationTimeout = q(function () {n a.afterAnimate();n }, c));n a.isDirty = !1;n a.hasRendered = !0;n f(a, "afterRender");n },n redraw: function redraw() {n var a = this.chart,n b = this.isDirty || this.isDirtyData,n d = this.group,n c = this.xAxis,n f = this.yAxis;n d && (a.inverted && d.attr({n width: a.plotWidth,n height: a.plotHeightn }), d.animate({n translateX: h(c && c.left, a.plotLeft),n translateY: h(f && f.top, a.plotTop)n }));n this.translate();n this.render();n b && delete this.kdTree;n },n kdAxisArray: ["clientX", "plotY"],n searchPoint: function searchPoint(a, b) {n var d = this.xAxis,n c = this.yAxis,n f = this.chart.inverted;n return this.searchKDTree({n clientX: f ? d.len - a.chartY + d.pos : a.chartX - d.pos,n plotY: f ? c.len - a.chartX + c.pos : a.chartY - c.posn }, b, a);n },n buildKDTree: function buildKDTree(a) {n function b(a, c, f) {n var e;nn if (e = a && a.length) {n var k = d.kdAxisArray[c % f];n a.sort(function (a, b) {n return a[k] - b[k];n });n e = Math.floor(e / 2);n return {n point: a[e],n left: b(a.slice(0, e), c + 1, f),n right: b(a.slice(e + 1), c + 1, f)n };n }n }nn this.buildingKdTree = !0;n var d = this,n c = -1 < d.options.findNearestPointBy.indexOf(\"y\") ? 2 : 1;\n delete d.kdTree;\n q(function () {\n d.kdTree = b(d.getValidPoints(null, !d.directTouch), c, c);\n d.buildingKdTree = !1;\n }, d.options.kdNow || a && \"touchstart\" === a.type ? 0 : 1);\n },\n searchKDTree: function searchKDTree(a, b, d) {\n function c(a, b, d, l) {\n var g = b.point,\n q = f.kdAxisArray[d % l],\n t = g;\n var m = A(a[e]) && A(g[e]) ? Math.pow(a[e] - g[e], 2) : null;\n var v = A(a[k]) && A(g[k]) ? Math.pow(a[k] - g[k], 2) : null;\n v = (m || 0) + (v || 0);\n g.dist = A(v) ? Math.sqrt(v) : Number.MAX_VALUE;\n g.distX = A(m) ? Math.sqrt(m) : Number.MAX_VALUE;\n q = a[q] - g[q];\n v = 0 > q ? "left" : "right";n m = 0 > q ? "right" : "left";n b[v] && (v = c(a, b[v], d + 1, l), t = v[h] < t[h] ? v : g);\n b[m] && Math.sqrt(q * q) < t[h] && (a = c(a, b[m], d + 1, l), t = a[h] < t[h] ? a : t);\n return t;\n }\n\n var f = this,\n e = this.kdAxisArray[0],\n k = this.kdAxisArray[1],\n h = b ? \"distX\" : \"dist\";\n b = -1 < f.options.findNearestPointBy.indexOf(\"y\") ? 2 : 1;\n this.kdTree || this.buildingKdTree || this.buildKDTree(d);\n if (this.kdTree) return c(a, this.kdTree, b, b);\n },\n pointPlacementToXValue: function pointPlacementToXValue() {\n var a = this.options.pointPlacement;\n \"between\" === a && (a = .5);\n z(a) && (a *= h(this.options.pointRange || this.xAxis.pointRange));\n return a;\n }\n });\n \"\";\n });\n N(H, \"parts/Stacking.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.defined,\n D = n.objectEach;\n n = c.Axis;\n var F = c.Chart,\n z = c.correctFloat,\n u = c.destroyObjectProperties,\n L = c.format,\n y = c.pick,\n C = c.Series;\n\n c.StackItem = function (c, m, p, g, b) {\n var a = c.chart.inverted;\n this.axis = c;\n this.isNegative = p;\n this.options = m = m || {};\n this.x = g;\n this.total = null;\n this.points = {};\n this.stack = b;\n this.rightCliff = this.leftCliff = 0;\n this.alignOptions = {\n align: m.align || (a ? p ? \"left\" : \"right\" : \"center\"),\n verticalAlign: m.verticalAlign || (a ? \"middle\" : p ? \"bottom\" : \"top\"),\n y: m.y,\n x: m.x\n };\n this.textAlign = m.textAlign || (a ? p ? \"right\" : \"left\" : \"center\");\n };\n\n c.StackItem.prototype = {\n destroy: function destroy() {\n u(this, this.axis);\n },\n render: function render(c) {\n var m = this.axis.chart,\n p = this.options,\n g = p.format;\n g = g ? L(g, this, m.time) : p.formatter.call(this);\n this.label ? this.label.attr({\n text: g,\n visibility: \"hidden\"\n }) : (this.label = m.renderer.label(g, null, null, p.shape, null, null, p.useHTML, !1, \"stack-labels\"), g = {\n text: g,\n align: this.textAlign,\n rotation: p.rotation,\n padding: y(p.padding, 0),\n visibility: \"hidden\"\n }, this.label.attr(g), m.styledMode || this.label.css(p.style), this.label.added || this.label.add(c));\n this.label.labelrank = m.plotHeight;\n },\n setOffset: function setOffset(c, m, p, g, b) {\n var a = this.axis,\n d = a.chart;\n g = a.translate(a.usePercentage ? 100 : g ? g : this.total, 0, 0, 0, 1);\n p = a.translate(p ? p : 0);\n p = A(g) && Math.abs(g - p);\n c = y(b, d.xAxis[0].translate(this.x)) + c;\n a = A(g) && this.getStackBox(d, this, c, g, m, p, a);\n m = this.label;\n c = this.isNegative;\n b = \"justify\" === y(this.options.overflow, \"justify\");\n\n if (m && a) {\n p = m.getBBox();\n var f = d.inverted ? c ? p.width : 0 : p.width / 2,\n e = d.inverted ? p.height / 2 : c ? -4 : p.height + 4;\n this.alignOptions.x = y(this.options.x, 0);\n m.align(this.alignOptions, null, a);\n g = m.alignAttr;\n m.show();\n g.y -= e;\n b && (g.x -= f, C.prototype.justifyDataLabel.call(this.axis, m, this.alignOptions, g, p, a), g.x += f);\n g.x = m.alignAttr.x;\n m.attr({\n x: g.x,\n y: g.y\n });\n y(!b && this.options.crop, !0) && ((d = d.isInsidePlot(m.x + (d.inverted ? 0 : -p.width / 2), m.y) && d.isInsidePlot(m.x + (d.inverted ? c ? -p.width : p.width : p.width / 2), m.y + p.height)) || m.hide());\n }\n },\n getStackBox: function getStackBox(c, m, p, g, b, a, d) {\n var f = m.axis.reversed,\n e = c.inverted;\n c = d.height + d.pos - (e ? c.plotLeft : c.plotTop);\n m = m.isNegative && !f || !m.isNegative && f;\n return {\n x: e ? m ? g : g - a : p,\n y: e ? c - p - b : m ? c - g - a : c - g,\n width: e ? a : b,\n height: e ? b : a\n };\n }\n };\n\n F.prototype.getStacks = function () {\n var c = this,\n m = c.inverted;\n c.yAxis.forEach(function (c) {\n c.stacks && c.hasVisibleSeries && (c.oldStacks = c.stacks);\n });\n c.series.forEach(function (p) {\n var g = p.xAxis && p.xAxis.options || {};\n !p.options.stacking || !0 !== p.visible && !1 !== c.options.chart.ignoreHiddenSeries || (p.stackKey = [p.type, y(p.options.stack, \"\"), m ? g.top : g.left, m ? g.height : g.width].join());\n });\n };\n\n n.prototype.buildStacks = function () {\n var c = this.series,\n m = y(this.options.reversedStacks, !0),\n p = c.length,\n g;\n\n if (!this.isXAxis) {\n this.usePercentage = !1;\n\n for (g = p; g--;) {\n c[m ? g : p - g - 1].setStackedPoints();\n }\n\n for (g = 0; g < p; g++) {\n c[g].modifyStacks();\n }\n }\n };\n\n n.prototype.renderStackTotals = function () {\n var c = this.chart,\n m = c.renderer,\n p = this.stacks,\n g = this.stackTotalGroup;\n g || (this.stackTotalGroup = g = m.g(\"stack-labels\").attr({\n visibility: \"visible\",\n zIndex: 6\n }).add());\n g.translate(c.plotLeft, c.plotTop);\n D(p, function (b) {\n D(b, function (a) {\n a.render(g);\n });\n });\n };\n\n n.prototype.resetStacks = function () {\n var c = this,\n m = c.stacks;\n c.isXAxis || D(m, function (m) {\n D(m, function (g, b) {\n g.touched < c.stacksTouched ? (g.destroy(), delete m[b]) : (g.total = null, g.cumulative = null);\n });\n });\n };\n\n n.prototype.cleanStacks = function () {\n if (!this.isXAxis) {\n if (this.oldStacks) var c = this.stacks = this.oldStacks;\n D(c, function (c) {\n D(c, function (c) {\n c.cumulative = c.total;\n });\n });\n }\n };\n\n C.prototype.setStackedPoints = function () {\n if (this.options.stacking && (!0 === this.visible || !1 === this.chart.options.chart.ignoreHiddenSeries)) {\n var n = this.processedXData,\n m = this.processedYData,\n p = [],\n g = m.length,\n b = this.options,\n a = b.threshold,\n d = y(b.startFromThreshold && a, 0),\n f = b.stack;\n b = b.stacking;\n var e = this.stackKey,\n h = \"-\" + e,\n r = this.negStacks,\n u = this.yAxis,\n q = u.stacks,\n v = u.oldStacks,\n k,\n t;\n u.stacksTouched += 1;\n\n for (t = 0; t < g; t++) {\n var B = n[t];\n var I = m[t];\n var w = this.getStackIndicator(w, B, this.index);\n var l = w.key;\n var J = (k = r && I < (d ? 0 : a)) ? h : e;\n q[J] || (q[J] = {});\n q[J][B] || (v[J] && v[J][B] ? (q[J][B] = v[J][B], q[J][B].total = null) : q[J][B] = new c.StackItem(u, u.options.stackLabels, k, B, f));\n J = q[J][B];\n null !== I ? (J.points[l] = J.points[this.index] = [y(J.cumulative, d)], A(J.cumulative) || (J.base = l), J.touched = u.stacksTouched, 0 < w.index && !1 === this.singleStacks && (J.points[l][0] = J.points[this.index + \",\" + B + \",0\"][0])) : J.points[l] = J.points[this.index] = null;\n \"percent\" === b ? (k = k ? e : h, r && q[k] && q[k][B] ? (k = q[k][B], J.total = k.total = Math.max(k.total, J.total) + Math.abs(I) || 0) : J.total = z(J.total + (Math.abs(I) || 0))) : J.total = z(J.total + (I || 0));\n J.cumulative = y(J.cumulative, d) + (I || 0);\n null !== I && (J.points[l].push(J.cumulative), p[t] = J.cumulative);\n }\n\n \"percent\" === b && (u.usePercentage = !0);\n this.stackedYData = p;\n u.oldStacks = {};\n }\n };\n\n C.prototype.modifyStacks = function () {\n var c = this,\n m = c.stackKey,\n p = c.yAxis.stacks,\n g = c.processedXData,\n b,\n a = c.options.stacking;\n c[a + \"Stacker\"] && [m, \"-\" + m].forEach(function (d) {\n for (var f = g.length, e, h; f--;) {\n if (e = g[f], b = c.getStackIndicator(b, e, c.index, d), h = (e = p[d] && p[d][e]) && e.points[b.key]) c[a + \"Stacker\"](h, e, f);\n }\n });\n };\n\n C.prototype.percentStacker = function (c, m, p) {\n m = m.total ? 100 / m.total : 0;\n c[0] = z(c[0] * m);\n c[1] = z(c[1] * m);\n this.stackedYData[p] = c[1];\n };\n\n C.prototype.getStackIndicator = function (c, m, p, g) {\n !A(c) || c.x !== m || g && c.key !== g ? c = {\n x: m,\n index: 0,\n key: g\n } : c.index++;\n c.key = [p, m, c.index].join();\n return c;\n };\n });\n N(H, \"parts/Dynamics.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.defined,\n D = n.erase,\n F = n.isArray,\n z = n.isNumber,\n u = n.isObject,\n L = n.isString,\n y = n.objectEach,\n C = n.splat,\n x = c.addEvent,\n m = c.animate,\n p = c.Axis;\n n = c.Chart;\n var g = c.createElement,\n b = c.css,\n a = c.extend,\n d = c.fireEvent,\n f = c.merge,\n e = c.pick,\n h = c.Point,\n r = c.Series,\n E = c.seriesTypes,\n q = c.setAnimation;\n\n c.cleanRecursively = function (a, b) {\n var d = {};\n y(a, function (f, e) {\n if (u(a[e], !0) && !a.nodeType && b[e]) f = c.cleanRecursively(a[e], b[e]), Object.keys(f).length && (d[e] = f);else if (u(a[e]) || a[e] !== b[e]) d[e] = a[e];\n });\n return d;\n };\n\n a(n.prototype, {\n addSeries: function addSeries(a, b, c) {\n var f,\n k = this;\n a && (b = e(b, !0), d(k, \"addSeries\", {\n options: a\n }, function () {\n f = k.initSeries(a);\n k.isDirtyLegend = !0;\n k.linkSeries();\n d(k, \"afterAddSeries\", {\n series: f\n });\n b && k.redraw(c);\n }));\n return f;\n },\n addAxis: function addAxis(a, b, d, c) {\n return this.createAxis(b ? \"xAxis\" : \"yAxis\", {\n axis: a,\n redraw: d,\n animation: c\n });\n },\n addColorAxis: function addColorAxis(a, b, d) {\n return this.createAxis(\"colorAxis\", {\n axis: a,\n redraw: b,\n animation: d\n });\n },\n createAxis: function createAxis(a, b) {\n var d = this.options,\n k = \"colorAxis\" === a,\n h = b.redraw,\n g = b.animation;\n b = f(b.axis, {\n index: this[a].length,\n isX: \"xAxis\" === a\n });\n var l = k ? new c.ColorAxis(this, b) : new p(this, b);\n d[a] = C(d[a] || {});\n d[a].push(b);\n k && (this.isDirtyLegend = !0);\n e(h, !0) && this.redraw(g);\n return l;\n },\n showLoading: function showLoading(d) {\n var c = this,\n f = c.options,\n h = c.loadingDiv,\n q = f.loading,\n v = function v() {\n h && b(h, {\n left: c.plotLeft + \"px\",\n top: c.plotTop + \"px\",\n width: c.plotWidth + \"px\",\n height: c.plotHeight + \"px\"\n });\n };\n\n h || (c.loadingDiv = h = g(\"div\", {\n className: \"highcharts-loading highcharts-loading-hidden\"\n }, null, c.container), c.loadingSpan = g(\"span\", {\n className: \"highcharts-loading-inner\"\n }, null, h), x(c, \"redraw\", v));\n h.className = \"highcharts-loading\";\n c.loadingSpan.innerHTML = e(d, f.lang.loading, \"\");\n c.styledMode || (b(h, a(q.style, {\n zIndex: 10\n })), b(c.loadingSpan, q.labelStyle), c.loadingShown || (b(h, {\n opacity: 0,\n display: \"\"\n }), m(h, {\n opacity: q.style.opacity || .5\n }, {\n duration: q.showDuration || 0\n })));\n c.loadingShown = !0;\n v();\n },\n hideLoading: function hideLoading() {\n var a = this.options,\n d = this.loadingDiv;\n d && (d.className = \"highcharts-loading highcharts-loading-hidden\", this.styledMode || m(d, {\n opacity: 0\n }, {\n duration: a.loading.hideDuration || 100,\n complete: function complete() {\n b(d, {\n display: \"none\"\n });\n }\n }));\n this.loadingShown = !1;\n },\n propsRequireDirtyBox: \"backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow\".split(\" \"),\n propsRequireReflow: \"margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft\".split(\" \"),\n propsRequireUpdateSeries: \"chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip\".split(\" \"),\n collectionsWithUpdate: \"xAxis yAxis zAxis series colorAxis pane\".split(\" \"),\n update: function update(a, b, h, g) {\n var k = this,\n q = {\n credits: \"addCredits\",\n title: \"setTitle\",\n subtitle: \"setSubtitle\",\n caption: \"setCaption\"\n },\n l,\n m,\n t,\n v = a.isResponsiveOptions,\n r = [];\n d(k, \"update\", {\n options: a\n });\n v || k.setResponsive(!1, !0);\n a = c.cleanRecursively(a, k.options);\n f(!0, k.userOptions, a);\n\n if (l = a.chart) {\n f(!0, k.options.chart, l);\n \"className\" in l && k.setClassName(l.className);\n \"reflow\" in l && k.setReflow(l.reflow);\n\n if (\"inverted\" in l || \"polar\" in l || \"type\" in l) {\n k.propFromSeries();\n var p = !0;\n }\n\n \"alignTicks\" in l && (p = !0);\n y(l, function (a, b) {\n -1 !== k.propsRequireUpdateSeries.indexOf(\"chart.\" + b) && (m = !0);\n -1 !== k.propsRequireDirtyBox.indexOf(b) && (k.isDirtyBox = !0);\n v || -1 === k.propsRequireReflow.indexOf(b) || (t = !0);\n });\n !k.styledMode && \"style\" in l && k.renderer.setStyle(l.style);\n }\n\n !k.styledMode && a.colors && (this.options.colors = a.colors);\n a.plotOptions && f(!0, this.options.plotOptions, a.plotOptions);\n a.time && this.time === c.time && (this.time = new c.Time(a.time));\n y(a, function (a, b) {\n if (k[b] && \"function\" === typeof k[b].update) k[b].update(a, !1);else if (\"function\" === typeof k[q[b]]) k[q[b]](a);\n \"chart\" !== b && -1 !== k.propsRequireUpdateSeries.indexOf(b) && (m = !0);\n });\n this.collectionsWithUpdate.forEach(function (b) {\n if (a[b]) {\n if (\"series\" === b) {\n var d = [];\n k[b].forEach(function (a, b) {\n a.options.isInternal || d.push(e(a.options.index, b));\n });\n }\n\n C(a[b]).forEach(function (a, c) {\n (c = A(a.id) && k.get(a.id) || k[b][d ? d[c] : c]) && c.coll === b && (c.update(a, !1), h && (c.touched = !0));\n !c && h && k.collectionsWithInit[b] && (k.collectionsWithInit[b][0].apply(k, [a].concat(k.collectionsWithInit[b][1] || []).concat([!1])).touched = !0);\n });\n h && k[b].forEach(function (a) {\n a.touched || a.options.isInternal ? delete a.touched : r.push(a);\n });\n }\n });\n r.forEach(function (a) {\n a.remove && a.remove(!1);\n });\n p && k.axes.forEach(function (a) {\n a.update({}, !1);\n });\n m && k.series.forEach(function (a) {\n a.update({}, !1);\n });\n a.loading && f(!0, k.options.loading, a.loading);\n p = l && l.width;\n l = l && l.height;\n L(l) && (l = c.relativeLength(l, p || k.chartWidth));\n t || z(p) && p !== k.chartWidth || z(l) && l !== k.chartHeight ? k.setSize(p, l, g) : e(b, !0) && k.redraw(g);\n d(k, \"afterUpdate\", {\n options: a,\n redraw: b,\n animation: g\n });\n },\n setSubtitle: function setSubtitle(a, b) {\n this.applyDescription(\"subtitle\", a);\n this.layOutTitles(b);\n },\n setCaption: function setCaption(a, b) {\n this.applyDescription(\"caption\", a);\n this.layOutTitles(b);\n }\n });\n n.prototype.collectionsWithInit = {\n xAxis: [n.prototype.addAxis, [!0]],\n yAxis: [n.prototype.addAxis, [!1]],\n colorAxis: [n.prototype.addColorAxis, [!1]],\n series: [n.prototype.addSeries]\n };\n a(h.prototype, {\n update: function update(a, b, d, c) {\n function f() {\n k.applyOptions(a);\n null === k.y && h && (k.graphic = h.destroy());\n u(a, !0) && (h && h.element && a && a.marker && void 0 !== a.marker.symbol && (k.graphic = h.destroy()), a && a.dataLabels && k.dataLabel && (k.dataLabel = k.dataLabel.destroy()), k.connector && (k.connector = k.connector.destroy()));\n g = k.index;\n l.updateParallelArrays(k, g);\n m.data[g] = u(m.data[g], !0) || u(a, !0) ? k.options : e(a, m.data[g]);\n l.isDirty = l.isDirtyData = !0;\n !l.fixedBox && l.hasCartesianSeries && (q.isDirtyBox = !0);\n \"point\" === m.legendType && (q.isDirtyLegend = !0);\n b && q.redraw(d);\n }\n\n var k = this,\n l = k.series,\n h = k.graphic,\n g,\n q = l.chart,\n m = l.options;\n b = e(b, !0);\n !1 === c ? f() : k.firePointEvent(\"update\", {\n options: a\n }, f);\n },\n remove: function remove(a, b) {\n this.series.removePoint(this.series.data.indexOf(this), a, b);\n }\n });\n a(r.prototype, {\n addPoint: function addPoint(a, b, c, f, h) {\n var k = this.options,\n l = this.data,\n g = this.chart,\n q = this.xAxis;\n q = q && q.hasNames && q.names;\n var m = k.data,\n t = this.xData,\n v;\n b = e(b, !0);\n var r = {\n series: this\n };\n this.pointClass.prototype.applyOptions.apply(r, [a]);\n var p = r.x;\n var n = t.length;\n if (this.requireSorting && p < t[n - 1]) for (v = !0; n && t[n - 1] > p;) {n n–;n }n this.updateParallelArrays(r, "splice", n, 0, 0);n this.updateParallelArrays(r, n);n q && r.name && (q[p] = r.name);n m.splice(n, 0, a);n v && (this.data.splice(n, 0, null), this.processData());n "point" === k.legendType && this.generatePoints();n c && (l[0] && l[0].remove ? l[0].remove(!1) : (l.shift(), this.updateParallelArrays(r, "shift"), m.shift()));n !1 !== h && d(this, "addPoint", {n point: rn });n this.isDirtyData = this.isDirty = !0;n b && g.redraw(f);n },n removePoint: function removePoint(a, b, d) {n var c = this,n f = c.data,n k = f[a],n l = c.points,n h = c.chart,n g = function g() {n l && l.length === f.length && l.splice(a, 1);n f.splice(a, 1);n c.options.data.splice(a, 1);n c.updateParallelArrays(k || {n series: cn }, "splice", a, 1);n k && k.destroy();n c.isDirty = !0;n c.isDirtyData = !0;n b && h.redraw();n };nn q(d, h);n b = e(b, !0);n k ? k.firePointEvent("remove", null, g) : g();n },n remove: function remove(a, b, c, f) {n function k() {n h.destroy(f);n h.remove = null;n l.isDirtyLegend = l.isDirtyBox = !0;n l.linkSeries();n e(a, !0) && l.redraw(b);n }nn var h = this,n l = h.chart;n !1 !== c ? d(h, "remove", null, k) : k();n },n update: function update(b, k) {n b = c.cleanRecursively(b, this.userOptions);n d(this, "update", {n options: bn });n var h = this,n g = h.chart,n q = h.userOptions,n m = h.initialType || h.type,n l = b.type || q.type || g.options.chart.type,n r = !(this.hasDerivedData || b.dataGrouping || l && l !== this.type || void 0 !== b.pointStart || b.pointInterval || b.pointIntervalUnit || b.keys),n p = E[m].prototype,n v,n n = ["group", "markerGroup", "dataLabelsGroup", "transformGroup"],n u = ["eventOptions", "navigatorSeries", "baseSeries"],n x = h.finishedAnimating && {n animation: !1n },n y = {};n r && (u.push("data", "isDirtyData", "points", "processedXData", "processedYData", "xIncrement", "_hasPointMarkers", "_hasPointLabels", "mapMap", "mapData", "minY", "maxY", "minX", "maxX"), !1 !== b.visible && u.push("area", "graph"), h.parallelArrays.forEach(function (a) {n u.push(a + "Data");n }), b.data && this.setData(b.data, !1));n b = f(q, x, {n index: void 0 === q.index ? h.index : q.index,n pointStart: e(q.pointStart, h.xData[0])n }, !r && {n data: h.options.datan }, b);n r && b.data && (b.data = h.options.data);n u = n.concat(u);n u.forEach(function (a) {n u[a] = h[a];n delete h[a];n });n h.remove(!1, null, !1, !0);nn for (v in p) {n h[v] = void 0;n }nn E[l || m] ? a(h, E[l || m].prototype) : c.error(17, !0, g);n u.forEach(function (a) {n h[a] = u[a];n });n h.init(g, b);nn if (r && this.points) {n var z = h.options;n !1 === z.visible ? (y.graphic = 1, y.dataLabel = 1) : h._hasPointLabels || (l = z.marker, p = z.dataLabels, l && (!1 === l.enabled || "symbol" in l) && (y.graphic = 1), p && !1 === p.enabled && (y.dataLabel = 1));n this.points.forEach(function (a) {n a && a.series && (a.resolveColor(), Object.keys(y).length && a.destroyElements(y), !1 === z.showInLegend && a.legendItem && g.legend.destroyItem(a));n }, this);n }nn b.zIndex !== q.zIndex && n.forEach(function (a) {n h[a] && h[a].attr({n zIndex: b.zIndexn });n });n h.initialType = m;n g.linkSeries();n d(this, "afterUpdate");n e(k, !0) && g.redraw(r ? void 0 : !1);n },n setName: function setName(a) {n this.name = this.options.name = this.userOptions.name = a;n this.chart.isDirtyLegend = !0;n }n });n a(p.prototype, {n update: function update(b, d) {n var c = this.chart,n k = b && b.events || {};n b = f(this.userOptions, b);n c.options[this.coll].indexOf && (c.options[this.coll][c.options[this.coll].indexOf(this.userOptions)] = b);n y(c.options[this.coll].events, function (a, b) {n "undefined" === typeof k[b] && (k[b] = void 0);n });n this.destroy(!0);n this.init(c, a(b, {n events: kn }));n c.isDirtyBox = !0;n e(d, !0) && c.redraw();n },n remove: function remove(a) {n for (var b = this.chart, d = this.coll, c = this.series, f = c.length; f–;) {n c[f] && c[f].remove(!1);n }nn D(b.axes, this);n D(b[d], this);n F(b.options[d]) ? b.options[d].splice(this.options.index, 1) : delete b.options[d];n b[d].forEach(function (a, b) {n a.options.index = a.userOptions.index = b;n });n this.destroy();n b.isDirtyBox = !0;n e(a, !0) && b.redraw();n },n setTitle: function setTitle(a, b) {n this.update({n title: an }, b);n },n setCategories: function setCategories(a, b) {n this.update({n categories: an }, b);n }n });n });n N(H, "parts/AreaSeries.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.objectEach,n D = c.color,n F = c.pick,n z = c.Series;n n = c.seriesType;n n("area", "line", {n softThreshold: !1,n threshold: 0n }, {n singleStacks: !1,n getStackPoints: function getStackPoints© {n var n = [],n u = [],n z = this.xAxis,n x = this.yAxis,n m = x.stacks[this.stackKey],n p = {},n g = this.index,n b = x.series,n a = b.length,n d = F(x.options.reversedStacks, !0) ? 1 : -1,n f;n c = c || this.points;nn if (this.options.stacking) {n for (f = 0; f < c.length; f++) {\n c[f].leftNull = c[f].rightNull = null, p[c[f].x] = c[f];\n }\n\n A(m, function (a, b) {\n null !== a.total && u.push(b);\n });\n u.sort(function (a, b) {\n return a - b;\n });\n var e = b.map(function (a) {\n return a.visible;\n });\n u.forEach(function (b, c) {\n var h = 0,\n q,\n r;\n if (p[b] && !p[b].isNull) n.push(p[b]), [-1, 1].forEach(function (k) {\n var h = 1 === k ? \"rightNull\" : \"leftNull\",\n v = 0,\n n = m[u[c + k]];\n if (n) for (f = g; 0 <= f && f < a;) {\n q = n.points[f], q || (f === g ? p[b][h] = !0 : e[f] && (r = m[b].points[f]) && (v -= r[1] - r[0])), f += d;\n }\n p[b][1 === k ? \"rightCliff\" : \"leftCliff\"] = v;\n });else {\n for (f = g; 0 <= f && f < a;) {\n if (q = m[b].points[f]) {\n h = q[1];\n break;\n }\n\n f += d;\n }\n\n h = x.translate(h, 0, 1, 0, 1);\n n.push({\n isNull: !0,\n plotX: z.translate(b, 0, 0, 0, 1),\n x: b,\n plotY: h,\n yBottom: h\n });\n }\n });\n }\n\n return n;\n },\n getGraphPath: function getGraphPath(n) {\n var u = z.prototype.getGraphPath,\n y = this.options,\n A = y.stacking,\n x = this.yAxis,\n m,\n p = [],\n g = [],\n b = this.index,\n a = x.stacks[this.stackKey],\n d = y.threshold,\n f = Math.round(x.getThreshold(y.threshold));\n y = c.pick(y.connectNulls, \"percent\" === A);\n\n var e = function e(c, _e, k) {\n var h = n[c];\n c = A && a[h.x].points[b];\n var q = h[k + \"Null\"] || 0;\n k = h[k + \"Cliff\"] || 0;\n h = !0;\n\n if (k || q) {\n var m = (q ? c[0] : c[1]) + k;\n var v = c[0] + k;\n h = !!q;\n } else !A && n[_e] && n[_e].isNull && (m = v = d);\n\n void 0 !== m && (g.push({\n plotX: r,\n plotY: null === m ? f : x.getThreshold(m),\n isNull: h,\n isCliff: !0\n }), p.push({\n plotX: r,\n plotY: null === v ? f : x.getThreshold(v),\n doCurve: !1\n }));\n };\n\n n = n || this.points;\n A && (n = this.getStackPoints(n));\n\n for (m = 0; m < n.length; m++) {\n var h = n[m].isNull;\n var r = F(n[m].rectPlotX, n[m].plotX);\n var E = F(n[m].yBottom, f);\n if (!h || y) y || e(m, m - 1, \"left\"), h && !A && y || (g.push(n[m]), p.push({\n x: m,\n plotX: r,\n plotY: E\n })), y || e(m, m + 1, \"right\");\n }\n\n m = u.call(this, g, !0, !0);\n p.reversed = !0;\n h = u.call(this, p, !0, !0);\n h.length && (h[0] = \"L\");\n h = m.concat(h);\n u = u.call(this, g, !1, y);\n h.xMap = m.xMap;\n this.areaPath = h;\n return u;\n },\n drawGraph: function drawGraph() {\n this.areaPath = [];\n z.prototype.drawGraph.apply(this);\n var c = this,\n n = this.areaPath,\n y = this.options,\n A = [[\"area\", \"highcharts-area\", this.color, y.fillColor]];\n this.zones.forEach(function (n, m) {\n A.push([\"zone-area-\" + m, \"highcharts-area highcharts-zone-area-\" + m + \" \" + n.className, n.color || c.color, n.fillColor || y.fillColor]);\n });\n A.forEach(function (u) {\n var m = u[0],\n p = c[m],\n g = p ? \"animate\" : \"attr\",\n b = {};\n p ? (p.endX = c.preventGraphAnimation ? null : n.xMap, p.animate({\n d: n\n })) : (b.zIndex = 0, p = c[m] = c.chart.renderer.path(n).addClass(u[1]).add(c.group), p.isArea = !0);\n c.chart.styledMode || (b.fill = F(u[3], D(u[2]).setOpacity(F(y.fillOpacity, .75)).get()));\n p[g](b);\n p.startX = n.xMap;\n p.shiftUnit = y.step ? 2 : 1;\n });\n },\n drawLegendSymbol: c.LegendSymbolMixin.drawRectangle\n });\n \"\";\n });\n N(H, \"parts/SplineSeries.js\", [H[\"parts/Globals.js\"]], function (c) {\n var n = c.pick;\n c = c.seriesType;\n c(\"spline\", \"line\", {}, {\n getPointSpline: function getPointSpline(c, D, F) {\n var z = D.plotX,\n u = D.plotY,\n A = c[F - 1];\n F = c[F + 1];\n\n if (A && !A.isNull && !1 !== A.doCurve && !D.isCliff && F && !F.isNull && !1 !== F.doCurve && !D.isCliff) {\n c = A.plotY;\n var y = F.plotX;\n F = F.plotY;\n var C = 0;\n var x = (1.5 * z + A.plotX) / 2.5;\n var m = (1.5 * u + c) / 2.5;\n y = (1.5 * z + y) / 2.5;\n var p = (1.5 * u + F) / 2.5;\n y !== x && (C = (p - m) * (y - z) / (y - x) + u - p);\n m += C;\n p += C;\n m > c && m > u ? (m = Math.max(c, u), p = 2 * u - m) : m < c && m < u && (m = Math.min(c, u), p = 2 * u - m);\n p > F && p > u ? (p = Math.max(F, u), m = 2 * u - p) : p < F && p < u && (p = Math.min(F, u), m = 2 * u - p);\n D.rightContX = y;\n D.rightContY = p;\n }\n\n D = [\"C\", n(A.rightContX, A.plotX), n(A.rightContY, A.plotY), n(x, z), n(m, u), z, u];\n A.rightContX = A.rightContY = null;\n return D;\n }\n });\n \"\";\n });\n N(H, \"parts/AreaSplineSeries.js\", [H[\"parts/Globals.js\"]], function (c) {\n var n = c.seriesTypes.area.prototype,\n A = c.seriesType;\n A(\"areaspline\", \"spline\", c.defaultPlotOptions.area, {\n getStackPoints: n.getStackPoints,\n getGraphPath: n.getGraphPath,\n drawGraph: n.drawGraph,\n drawLegendSymbol: c.LegendSymbolMixin.drawRectangle\n });\n \"\";\n });\n N(H, \"parts/ColumnSeries.js\", [H[\"parts/Globals.js\"], H[\"parts/Utilities.js\"]], function (c, n) {\n var A = n.defined,\n D = n.isNumber,\n F = c.animObject,\n z = c.color,\n u = c.extend,\n L = c.merge,\n y = c.pick,\n C = c.Series;\n n = c.seriesType;\n var x = c.svg;\n n(\"column\", \"line\", {\n borderRadius: 0,\n crisp: !0,\n groupPadding: .2,\n marker: null,\n pointPadding: .1,\n minPointLength: 0,\n cropThreshold: 50,\n pointRange: null,\n states: {\n hover: {\n halo: !1,\n brightness: .1\n },\n select: {\n color: \"#cccccc\",\n borderColor: \"#000000\"\n }\n },\n dataLabels: {\n align: null,\n verticalAlign: null,\n y: null\n },\n softThreshold: !1,\n startFromThreshold: !0,\n stickyTracking: !1,\n tooltip: {\n distance: 6\n },\n threshold: 0,\n borderColor: \"#ffffff\"\n }, {\n cropShoulder: 0,\n directTouch: !0,\n trackerGroups: [\"group\", \"dataLabelsGroup\"],\n negStacks: !0,\n init: function init() {\n C.prototype.init.apply(this, arguments);\n var c = this,\n p = c.chart;\n p.hasRendered && p.series.forEach(function (g) {\n g.type === c.type && (g.isDirty = !0);\n });\n },\n getColumnMetrics: function getColumnMetrics() {\n var c = this,\n p = c.options,\n g = c.xAxis,\n b = c.yAxis,\n a = g.options.reversedStacks;\n a = g.reversed && !a || !g.reversed && a;\n var d,\n f = {},\n e = 0;\n !1 === p.grouping ? e = 1 : c.chart.series.forEach(function (a) {\n var h = a.yAxis,\n k = a.options;\n\n if (a.type === c.type && (a.visible || !c.chart.options.chart.ignoreHiddenSeries) && b.len === h.len && b.pos === h.pos) {\n if (k.stacking) {\n d = a.stackKey;\n void 0 === f[d] && (f[d] = e++);\n var g = f[d];\n } else !1 !== k.grouping && (g = e++);\n\n a.columnIndex = g;\n }\n });\n var h = Math.min(Math.abs(g.transA) * (g.ordinalSlope || p.pointRange || g.closestPointRange || g.tickInterval || 1), g.len),\n r = h * p.groupPadding,\n n = (h - 2 * r) / (e || 1);\n p = Math.min(p.maxPointWidth || g.len, y(p.pointWidth, n * (1 - 2 * p.pointPadding)));\n c.columnMetrics = {\n width: p,\n offset: (n - p) / 2 + (r + ((c.columnIndex || 0) + (a ? 1 : 0)) * n - h / 2) * (a ? -1 : 1)\n };\n return c.columnMetrics;\n },\n crispCol: function crispCol(c, p, g, b) {\n var a = this.chart,\n d = this.borderWidth,\n f = -(d % 2 ? .5 : 0);\n d = d % 2 ? .5 : 1;\n a.inverted && a.renderer.isVML && (d += 1);\n this.options.crisp && (g = Math.round(c + g) + f, c = Math.round(c) + f, g -= c);\n b = Math.round(p + b) + d;\n f = .5 >= Math.abs(p) && .5 < b;\n p = Math.round(p) + d;\n b -= p;\n f && b && (--p, b += 1);\n return {\n x: c,\n y: p,\n width: g,\n height: b\n };\n },\n translate: function translate() {\n var c = this,\n p = c.chart,\n g = c.options,\n b = c.dense = 2 > c.closestPointRange * c.xAxis.transA;n b = c.borderWidth = y(g.borderWidth, b ? 0 : 1);n var a = c.yAxis,n d = g.threshold,n f = c.translatedThreshold = a.getThreshold(d),n e = y(g.minPointLength, 5),n h = c.getColumnMetrics(),n r = h.width,n n = c.barW = Math.max(r, 1 + 2 * b),n q = c.pointXOffset = h.offset,n v = c.dataMin,n k = c.dataMax;n p.inverted && (f -= .5);n g.pointPadding && (n = Math.ceil(n));n C.prototype.translate.apply©;n c.points.forEach(function (b) {n var h = y(b.yBottom, f),n g = 999 + Math.abs(h),n m = r;n g = Math.min(Math.max(-g, b.plotY), a.len + g);n var l = b.plotX + q,n t = n,n u = Math.min(g, h),n x = Math.max(g, h) - u;nn if (e && Math.abs(x) < e) {\n x = e;\n var z = !a.reversed && !b.negative || a.reversed && b.negative;\n b.y === d && c.dataMax <= d && a.min < d && v !== k && (z = !z);\n u = Math.abs(u - f) > e ? h - e : f - (z ? e : 0);n }nn A(b.options.pointWidth) && (m = t = Math.ceil(b.options.pointWidth), l -= Math.round((m - r) / 2));n b.barX = l;n b.pointWidth = m;n b.tooltipPos = p.inverted ? [a.len + a.pos - p.plotLeft - g, c.xAxis.len - l - t / 2, x] : [l + t / 2, g + a.pos - p.plotTop, x];n b.shapeType = c.pointClass.prototype.shapeType || "rect";n b.shapeArgs = c.crispCol.apply(c, b.isNull ? [l, f, t, 0] : [l, u, t, x]);n });n },n getSymbol: c.noop,n drawLegendSymbol: c.LegendSymbolMixin.drawRectangle,n drawGraph: function drawGraph() {n this.group[this.dense ? "addClass" : "removeClass"]("highcharts-dense-data");n },n pointAttribs: function pointAttribs(c, p) {n var g = this.options,n b = this.pointAttrToOptions || {};n var a = b.stroke || "borderColor";n var d = b["stroke-width"] || "borderWidth",n f = c && c.color || this.color,n e = c && c[a] || g[a] || this.color || f,n h = c && c[d] || g[d] || this[d] || 0;n b = c && c.options.dashStyle || g.dashStyle;n var m = y(g.opacity, 1);nn if (c && this.zones.length) {n var n = c.getZone();n f = c.options.color || n && (n.color || c.nonZonedColor) || this.color;n n && (e = n.borderColor || e, b = n.dashStyle || b, h = n.borderWidth || h);n }nn p && (c = L(g.states[p], c.options.states && c.options.states[p] || {}), p = c.brightness, f = c.color || void 0 !== p && z(f).brighten(c.brightness).get() || f, e = c[a] || e, h = c[d] || h, b = c.dashStyle || b, m = y(c.opacity, m));n a = {n fill: f,n stroke: e,n "stroke-width": h,n opacity: mn };n b && (a.dashstyle = b);n return a;n },n drawPoints: function drawPoints() {n var c = this,n p = this.chart,n g = c.options,n b = p.renderer,n a = g.animationLimit || 250,n d;n c.points.forEach(function (f) {n var e = f.graphic,n h = e && p.pointCount < a ? \"animate\" : \"attr\";\n\n if (D(f.plotY) && null !== f.y) {\n d = f.shapeArgs;\n e && e.element.nodeName !== f.shapeType && (e = e.destroy());\n if (e) e[h](L(d));else f.graphic = e = b[f.shapeType](d).add(f.group || c.group);\n if (g.borderRadius) e[h]({\n r: g.borderRadius\n });\n p.styledMode || e[h](c.pointAttribs(f, f.selected && \"select\")).shadow(!1 !== f.allowShadow && g.shadow, null, g.stacking && !g.borderRadius);\n e.addClass(f.getClassName(), !0);\n } else e && (f.graphic = e.destroy());\n });\n },\n animate: function animate(c) {\n var m = this,\n g = this.yAxis,\n b = m.options,\n a = this.chart.inverted,\n d = {},\n f = a ? \"translateX\" : \"translateY\";\n if (x) if (c) d.scaleY = .001, c = Math.min(g.pos + g.len, Math.max(g.pos, g.toPixels(b.threshold))), a ? d.translateX = c - g.len : d.translateY = c, m.clipBox && m.setClip(), m.group.attr(d);else {\n var e = m.group.attr(f);\n m.group.animate({\n scaleY: 1\n }, u(F(m.options.animation), {\n step: function step(a, b) {\n d[f] = e + b.pos * (g.pos - e);\n m.group.attr(d);\n }\n }));\n m.animate = null;\n }\n },\n remove: function remove() {\n var c = this,\n p = c.chart;\n p.hasRendered && p.series.forEach(function (g) {\n g.type === c.type && (g.isDirty = !0);\n });\n C.prototype.remove.apply(c, arguments);\n }\n });\n \"\";\n });\n N(H, \"parts/BarSeries.js\", [H[\"parts/Globals.js\"]], function (c) {\n c = c.seriesType;\n c(\"bar\", \"column\", null, {\n inverted: !0\n });\n \"\";\n });\n N(H, \"parts/ScatterSeries.js\", [H[\"parts/Globals.js\"]], function (c) {\n var n = c.Series,\n A = c.seriesType;\n A(\"scatter\", \"line\", {\n lineWidth: 0,\n findNearestPointBy: \"xy\",\n jitter: {\n x: 0,\n y: 0\n },\n marker: {\n enabled: !0\n },\n tooltip: {\n headerFormat: \"\u25CF {series.name}
",n pointFormat: "x: {point.x}
y: {point.y}
"n }n }, {n sorted: !1,n requireSorting: !1,n noSharedTooltip: !0,n trackerGroups: ["group", "markerGroup", "dataLabelsGroup"],n takeOrdinalPosition: !1,n drawGraph: function drawGraph() {n this.options.lineWidth && n.prototype.drawGraph.call(this);n },n applyJitter: function applyJitter() {n var c = this,n n = this.options.jitter,n z = this.points.length;n n && this.points.forEach(function (u, A) {n ["x", "y"].forEach(function (y, C) {n var x = "plot" + y.toUpperCase();nn if (n[y] && !u.isNull) {n var m = c[y + "Axis"];n var p = n[y] * m.transA;nn if (m && !m.isLog) {n var g = Math.max(0, u[x] - p);n m = Math.min(m.len, u[x] + p);n C = 1E4 * Math.sin(A + C * z);n u[x] = g + (m - g) * (C - Math.floor(C));n "x" === y && (u.clientX = u.plotX);n }n }n });n });n }n });n c.addEvent(n, "afterTranslate", function () {n this.applyJitter && this.applyJitter();n });n "";n });n N(H, "mixins/centered-series.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.isNumber,n D = c.deg2rad,n F = c.pick,n z = c.relativeLength;n c.CenteredSeriesMixin = {n getCenter: function getCenter() {n var c = this.options,n n = this.chart,n y = 2 * (c.slicedOffset || 0),n A = n.plotWidth - 2 * y;n n = n.plotHeight - 2 * y;n var x = c.center;n x = [F(x[0], "50%"), F(x[1], "50%"), c.size || "100%", c.innerSize || 0];n var m = Math.min(A, n),n p;nn for (p = 0; 4 > p; ++p) {n var g = x[p];n c = 2 > p || 2 === p && /%$/.test(g);n x[p] = z(g, [A, n, m, x[2]][p]) + (c ? y : 0);n }nn x[3] > x[2] && (x[3] = x[2]);n return x;n },n getStartAndEndRadians: function getStartAndEndRadians(c, n) {n c = A© ? c : 0;n n = A(n) && n > c && 360 > n - c ? n : c + 360;n return {n start: D * (c + -90),n end: D * (n + -90)n };n }n };n });n N(H, "parts/PieSeries.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.defined,n D = n.isNumber,n F = c.addEvent;n n = c.CenteredSeriesMixin;n var z = n.getStartAndEndRadians,n u = c.merge,n H = c.noop,n y = c.pick,n C = c.Point,n x = c.Series,n m = c.seriesType,n p = c.fireEvent,n g = c.setAnimation;n m("pie", "line", {n center: [null, null],n clip: !1,n colorByPoint: !0,n dataLabels: {n allowOverlap: !0,n connectorPadding: 5,n distance: 30,n enabled: !0,n formatter: function formatter() {n return this.point.isNull ? void 0 : this.point.name;n },n softConnector: !0,n x: 0,n connectorShape: "fixedOffset",n crookDistance: "70%"n },n fillColor: void 0,n ignoreHiddenPoint: !0,n inactiveOtherPoints: !0,n legendType: "point",n marker: null,n size: null,n showInLegend: !1,n slicedOffset: 10,n stickyTracking: !1,n tooltip: {n followPointer: !0n },n borderColor: "#ffffff",n borderWidth: 1,n states: {n hover: {n brightness: .1n }n }n }, {n isCartesian: !1,n requireSorting: !1,n directTouch: !0,n noSharedTooltip: !0,n trackerGroups: ["group", "dataLabelsGroup"],n axisTypes: [],n pointAttribs: c.seriesTypes.column.prototype.pointAttribs,n animate: function animate(b) {n var a = this,n d = a.points,n c = a.startAngleRad;n b || (d.forEach(function (b) {n var d = b.graphic,n f = b.shapeArgs;n d && (d.attr({n r: b.startR || a.center[3] / 2,n start: c,n end: cn }), d.animate({n r: f.r,n start: f.start,n end: f.endn }, a.options.animation));n }), a.animate = null);n },n hasData: function hasData() {n return !!this.processedXData.length;n },n updateTotals: function updateTotals() {n var b,n a = 0,n d = this.points,n c = d.length,n e = this.options.ignoreHiddenPoint;nn for (b = 0; b < c; b++) {\n var h = d[b];\n a += e && !h.visible ? 0 : h.isNull ? 0 : h.y;\n }\n\n this.total = a;\n\n for (b = 0; b < c; b++) {\n h = d[b], h.percentage = 0 < a && (h.visible || !e) ? h.y / a * 100 : 0, h.total = a;\n }\n },\n generatePoints: function generatePoints() {\n x.prototype.generatePoints.call(this);\n this.updateTotals();\n },\n getX: function getX(b, a, d) {\n var c = this.center,\n e = this.radii ? this.radii[d.index] : c[2] / 2;\n return c[0] + (a ? -1 : 1) * Math.cos(Math.asin(Math.max(Math.min((b - c[1]) / (e + d.labelDistance), 1), -1))) * (e + d.labelDistance) + (0 < d.labelDistance ? (a ? -1 : 1) * this.options.dataLabels.padding : 0);\n },\n translate: function translate(b) {\n this.generatePoints();\n var a = 0,\n d = this.options,\n f = d.slicedOffset,\n e = f + (d.borderWidth || 0),\n h = z(d.startAngle, d.endAngle),\n g = this.startAngleRad = h.start;\n h = (this.endAngleRad = h.end) - g;\n var m = this.points,\n q = d.dataLabels.distance;\n d = d.ignoreHiddenPoint;\n var v,\n k = m.length;\n b || (this.center = b = this.getCenter());\n\n for (v = 0; v < k; v++) {\n var t = m[v];\n var n = g + a * h;\n if (!d || t.visible) a += t.percentage / 100;\n var u = g + a * h;\n t.shapeType = \"arc\";\n t.shapeArgs = {\n x: b[0],\n y: b[1],\n r: b[2] / 2,\n innerR: b[3] / 2,\n start: Math.round(1E3 * n) / 1E3,\n end: Math.round(1E3 * u) / 1E3\n };\n t.labelDistance = y(t.options.dataLabels && t.options.dataLabels.distance, q);\n t.labelDistance = c.relativeLength(t.labelDistance, t.shapeArgs.r);\n this.maxLabelDistance = Math.max(this.maxLabelDistance || 0, t.labelDistance);\n u = (u + n) / 2;\n u > 1.5 * Math.PI ? u -= 2 * Math.PI : u < -Math.PI / 2 && (u += 2 * Math.PI);\n t.slicedTranslation = {\n translateX: Math.round(Math.cos(u) * f),\n translateY: Math.round(Math.sin(u) * f)\n };\n var w = Math.cos(u) * b[2] / 2;\n var l = Math.sin(u) * b[2] / 2;\n t.tooltipPos = [b[0] + .7 * w, b[1] + .7 * l];\n t.half = u < -Math.PI / 2 || u > Math.PI / 2 ? 1 : 0;n t.angle = u;n n = Math.min(e, t.labelDistance / 5);n t.labelPosition = {n natural: {n x: b[0] + w + Math.cos(u) * t.labelDistance,n y: b[1] + l + Math.sin(u) * t.labelDistancen },n "final": {},n alignment: 0 > t.labelDistance ? "center" : t.half ? "right" : "left",n connectorPosition: {n breakAt: {n x: b[0] + w + Math.cos(u) * n,n y: b[1] + l + Math.sin(u) * nn },n touchingSliceAt: {n x: b[0] + w,n y: b[1] + ln }n }n };n }nn p(this, "afterTranslate");n },n drawEmpty: function drawEmpty() {n var b = this.options;nn if (0 === this.total) {n var a = this.center[0];n var d = this.center[1];n this.graph || (this.graph = this.chart.renderer.circle(a, d, 0).addClass("highcharts-graph").add(this.group));n this.graph.animate({n "stroke-width": b.borderWidth,n cx: a,n cy: d,n r: this.center[2] / 2,n fill: b.fillColor || "none",n stroke: b.color || "#cccccc"n });n } else this.graph && (this.graph = this.graph.destroy());n },n redrawPoints: function redrawPoints() {n var b = this,n a = b.chart,n d = a.renderer,n c,n e,n h,n g,n m = b.options.shadow;n this.drawEmpty();n !m || b.shadowGroup || a.styledMode || (b.shadowGroup = d.g("shadow").attr({n zIndex: -1n }).add(b.group));n b.points.forEach(function (f) {n var q = {};n e = f.graphic;nn if (!f.isNull && e) {n g = f.shapeArgs;n c = f.getTranslate();nn if (!a.styledMode) {n var k = f.shadowGroup;n m && !k && (k = f.shadowGroup = d.g("shadow").add(b.shadowGroup));n k && k.attr©;n h = b.pointAttribs(f, f.selected && "select");n }nn f.delayedRendering ? (e.setRadialReference(b.center).attr(g).attr©, a.styledMode || e.attr(h).attr({n "stroke-linejoin": "round"n }).shadow(m, k), f.delayedRendering = !1) : (e.setRadialReference(b.center), a.styledMode || u(!0, q, h), u(!0, q, g, c), e.animate(q));n e.attr({n visibility: f.visible ? "inherit" : "hidden"n });n e.addClass(f.getClassName());n } else e && (f.graphic = e.destroy());n });n },n drawPoints: function drawPoints() {n var b = this.chart.renderer;n this.points.forEach(function (a) {n a.graphic || (a.graphic = b[a.shapeType](a.shapeArgs).add(a.series.group), a.delayedRendering = !0);n });n },n searchPoint: H,n sortByAngle: function sortByAngle(b, a) {n b.sort(function (b, c) {n return void 0 !== b.angle && (c.angle - b.angle) * a;n });n },n drawLegendSymbol: c.LegendSymbolMixin.drawRectangle,n getCenter: n.getCenter,n getSymbol: H,n drawGraph: nulln }, {n init: function init() {n C.prototype.init.apply(this, arguments);n var b = this;n b.name = y(b.name, "Slice");nn var a = function a(_a2) {n b.slice("select" === _a2.type);n };nn F(b, "select", a);n F(b, "unselect", a);n return b;n },n isValid: function isValid() {n return D(this.y) && 0 <= this.y;\n },\n setVisible: function setVisible(b, a) {\n var c = this,\n f = c.series,\n e = f.chart,\n h = f.options.ignoreHiddenPoint;\n a = y(a, h);\n b !== c.visible && (c.visible = c.options.visible = b = void 0 === b ? !c.visible : b, f.options.data[f.data.indexOf(c)] = c.options, [\"graphic\", \"dataLabel\", \"connector\", \"shadowGroup\"].forEach(function (a) {\n if (c[a]) c[a][b ? \"show\" : \"hide\"](!0);\n }), c.legendItem && e.legend.colorizeItem(c, b), b || \"hover\" !== c.state || c.setState(\"\"), h && (f.isDirty = !0), a && e.redraw());\n },\n slice: function slice(b, a, c) {\n var d = this.series;\n g(c, d.chart);\n y(a, !0);\n this.sliced = this.options.sliced = A(b) ? b : !this.sliced;\n d.options.data[d.data.indexOf(this)] = this.options;\n this.graphic.animate(this.getTranslate());\n this.shadowGroup && this.shadowGroup.animate(this.getTranslate());\n },\n getTranslate: function getTranslate() {\n return this.sliced ? this.slicedTranslation : {\n translateX: 0,\n translateY: 0\n };\n },\n haloPath: function haloPath(b) {\n var a = this.shapeArgs;\n return this.sliced || !this.visible ? [] : this.series.chart.renderer.symbols.arc(a.x, a.y, a.r + b, a.r + b, {\n innerR: a.r - 1,\n start: a.start,\n end: a.end\n });\n },\n connectorShapes: {\n fixedOffset: function fixedOffset(b, a, c) {\n var d = a.breakAt;\n a = a.touchingSliceAt;\n return [\"M\", b.x, b.y].concat(c.softConnector ? [\"C\", b.x + (\"left\" === b.alignment ? -5 : 5), b.y, 2 * d.x - a.x, 2 * d.y - a.y, d.x, d.y] : [\"L\", d.x, d.y]).concat([\"L\", a.x, a.y]);\n },\n straight: function straight(b, a) {\n a = a.touchingSliceAt;\n return [\"M\", b.x, b.y, \"L\", a.x, a.y];\n },\n crookedLine: function crookedLine(b, a, d) {\n a = a.touchingSliceAt;\n var f = this.series,\n e = f.center[0],\n h = f.chart.plotWidth,\n g = f.chart.plotLeft;\n f = b.alignment;\n var m = this.shapeArgs.r;\n d = c.relativeLength(d.crookDistance, 1);\n d = \"left\" === f ? e + m + (h + g - e - m) * (1 - d) : g + (e - m) * d;\n e = [\"L\", d, b.y];\n if (\"left\" === f ? d > b.x || d < a.x : d < b.x || d > a.x) e = [];n return ["M", b.x, b.y].concat(e).concat(["L", a.x, a.y]);n }n },n getConnectorPath: function getConnectorPath() {n var b = this.labelPosition,n a = this.series.options.dataLabels,n c = a.connectorShape,n f = this.connectorShapes;n f[c] && (c = f[c]);n return c.call(this, {n x: b["final"].x,n y: b["final"].y,n alignment: b.alignmentn }, b.connectorPosition, a);n }n });n "";n });n N(H, "parts/DataLabels.js", [H["parts/Globals.js"], H["parts/Utilities.js"]], function (c, n) {n var A = n.defined,n D = n.isArray,n F = n.objectEach,n z = n.splat,n u = c.arrayMax,n H = c.extend,n y = c.format,n C = c.merge;n n = c.noop;n var x = c.pick,n m = c.relativeLength,n p = c.Series,n g = c.seriesTypes,n b = c.stableSort;nn c.distribute = function (a, d, f) {n function e(a, b) {n return a.target - b.target;n }nn var h,n g = !0,n m = a,n q = [];n var p = 0;n var k = m.reducedLen || d;nn for (h = a.length; h–;) {n p += a[h].size;n }nn if (p > k) {n b(a, function (a, b) {n return (b.rank || 0) - (a.rank || 0);n });nn for (p = h = 0; p <= k;) {\n p += a[h].size, h++;\n }\n\n q = a.splice(h - 1, a.length);\n }\n\n b(a, e);\n\n for (a = a.map(function (a) {\n return {\n size: a.size,\n targets: [a.target],\n align: x(a.align, .5)\n };\n }); g;) {\n for (h = a.length; h--;) {\n g = a[h], p = (Math.min.apply(0, g.targets) + Math.max.apply(0, g.targets)) / 2, g.pos = Math.min(Math.max(0, p - g.size * g.align), d - g.size);\n }\n\n h = a.length;\n\n for (g = !1; h--;) {\n 0 < h && a[h - 1].pos + a[h - 1].size > a[h].pos && (a[h - 1].size += a[h].size, a[h - 1].targets = a[h - 1].targets.concat(a[h].targets), a[h - 1].align = .5, a[h - 1].pos + a[h - 1].size > d && (a[h - 1].pos = d - a[h - 1].size), a.splice(h, 1), g = !0);n }n }nn m.push.apply(m, q);n h = 0;n a.some(function (a) {n var b = 0;n if (a.targets.some(function () {n m[h].pos = a.pos + b;n if (Math.abs(m[h].pos - m[h].target) > f) return m.slice(0, h + 1).forEach(function (a) {n delete a.pos;n }), m.reducedLen = (m.reducedLen || d) - .1 * d, m.reducedLen > .1 * d && c.distribute(m, d, f), !0;n b += m[h].size;n h++;n })) return !0;n });n b(m, e);n };nn p.prototype.drawDataLabels = function () {n function a(a, b) {n var c = b.filter;n return c ? (b = c.operator, a = a[c.property], c = c.value, ">" === b && a > c || "<\" === b && a < c || \">=" === b && a >= c || "<=\" === b && a <= c || \"==\" === b && a == c || \"===\" === b && a === c ? !0 : !1) : !0;\n }\n\n function b(a, b) {\n var c = [],\n d;\n if (D(a) && !D(b)) c = a.map(function (a) {\n return C(a, b);\n });else if (D(b) && !D(a)) c = b.map(function (b) {\n return C(a, b);\n });else if (D(a) || D(b)) for (d = Math.max(a.length, b.length); d--;) {\n c[d] = C(a[d], b[d]);\n } else c = C(a, b);\n return c;\n }\n\n var f = this,\n e = f.chart,\n h = f.options,\n g = h.dataLabels,\n m = f.points,\n q,\n p = f.hasRendered || 0,\n k = c.animObject(h.animation).duration,\n t = Math.min(k, 200),\n n = !e.renderer.forExport && x(g.defer, 0 < t),\n u = e.renderer;\n g = b(b(e.options.plotOptions && e.options.plotOptions.series && e.options.plotOptions.series.dataLabels, e.options.plotOptions && e.options.plotOptions[f.type] && e.options.plotOptions[f.type].dataLabels), g);\n c.fireEvent(this, \"drawDataLabels\");\n\n if (D(g) || g.enabled || f._hasPointLabels) {\n var w = f.plotGroup(\"dataLabelsGroup\", \"data-labels\", n && !p ? \"hidden\" : \"inherit\", g.zIndex || 6);\n n && (w.attr({\n opacity: +p\n }), p || setTimeout(function () {\n var a = f.dataLabelsGroup;\n a && (f.visible && w.show(!0), a[h.animation ? \"animate\" : \"attr\"]({\n opacity: 1\n }, {\n duration: t\n }));\n }, k - t));\n m.forEach(function (c) {\n q = z(b(g, c.dlOptions || c.options && c.options.dataLabels));\n q.forEach(function (b, d) {\n var k = b.enabled && (!c.isNull || c.dataLabelOnNull) && a(c, b),\n g = c.dataLabels ? c.dataLabels[d] : c.dataLabel,\n l = c.connectors ? c.connectors[d] : c.connector,\n q = x(b.distance, c.labelDistance),\n m = !g;\n\n if (k) {\n var t = c.getLabelConfig();\n var p = x(b[c.formatPrefix + \"Format\"], b.format);\n t = A(p) ? y(p, t, e.time) : (b[c.formatPrefix + \"Formatter\"] || b.formatter).call(t, b);\n p = b.style;\n var n = b.rotation;\n e.styledMode || (p.color = x(b.color, p.color, f.color, \"#000000\"), \"contrast\" === p.color && (c.contrastColor = u.getContrast(c.color || f.color), p.color = !A(q) && b.inside || 0 > q || h.stacking ? c.contrastColor : "#000000"), h.cursor && (p.cursor = h.cursor));n var r = {n r: b.borderRadius || 0,n rotation: n,n padding: b.padding,n zIndex: 1n };n e.styledMode || (r.fill = b.backgroundColor, r.stroke = b.borderColor, r["stroke-width"] = b.borderWidth);n F(r, function (a, b) {n void 0 === a && delete r[b];n });n }nn !g || k && A(t) ? k && A(t) && (g ? r.text = t : (c.dataLabels = c.dataLabels || [], g = c.dataLabels[d] = n ? u.text(t, 0, -9999).addClass("highcharts-data-label") : u.label(t, 0, -9999, b.shape, null, null, b.useHTML, null, "data-label"), d || (c.dataLabel = g), g.addClass(" highcharts-data-label-color-" + c.colorIndex + " " + (b.className || "") + (b.useHTML ? " highcharts-tracker" : ""))), g.options = b, g.attr®, e.styledMode || g.css(p).shadow(b.shadow), g.added || g.add(w), b.textPath && !b.useHTML && g.setTextPath(c.getDataLabelPath && c.getDataLabelPath(g) || c.graphic, b.textPath), f.alignDataLabel(c, g, b, null, m)) : (c.dataLabel = c.dataLabel && c.dataLabel.destroy(), c.dataLabels && (1 === c.dataLabels.length ? delete c.dataLabels : delete c.dataLabels[d]), d || delete c.dataLabel, l && (c.connector = c.connector.destroy(), c.connectors && (1 === c.connectors.length ? delete c.connectors : delete c.connectors[d])));n });n });n }nn c.fireEvent(this, "afterDrawDataLabels");n };nn p.prototype.alignDataLabel = function (a, b, c, e, h) {n var d = this.chart,n f = this.isCartesian && d.inverted,n g = x(a.dlBox && a.dlBox.centerX, a.plotX, -9999),n m = x(a.plotY, -9999),n k = b.getBBox(),n p = c.rotation,n n = c.align,n u = this.visible && (a.series.forceDL || d.isInsidePlot(g, Math.round(m), f) || e && d.isInsidePlot(g, f ? e.x + 1 : e.y + e.height - 1, f)),n w = "justify" === x(c.overflow, "justify");nn if (u) {n var l = d.renderer.fontMetrics(d.styledMode ? void 0 : c.style.fontSize, b).b;n e = H({n x: f ? this.yAxis.len - m : g,n y: Math.round(f ? this.xAxis.len - g : m),n width: 0,n height: 0n }, e);n H(c, {n width: k.width,n height: k.heightn });n p ? (w = !1, g = d.renderer.rotCorr(l, p), g = {n x: e.x + c.x + e.width / 2 + g.x,n y: e.y + c.y + {n top: 0,n middle: .5,n bottom: 1n }[c.verticalAlign] * e.heightn }, b[h ? "attr" : "animate"](g).attr(n align: nn }), m = (p + 720) % 360, m = 180 < m && 360 > m, "left" === n ? g.y -= m ? k.height : 0 : "center" === n ? (g.x -= k.width / 2, g.y -= k.height / 2) : "right" === n && (g.x -= k.width, g.y -= m ? 0 : k.height), b.placed = !0, b.alignAttr = g) : (b.align(c, null, e), g = b.alignAttr);n w && 0 <= e.height ? this.justifyDataLabel(b, c, g, k, e, h) : x(c.crop, !0) && (u = d.isInsidePlot(g.x, g.y) && d.isInsidePlot(g.x + k.width, g.y + k.height));\n if (c.shape && !p) b[h ? \"attr\" : \"animate\"]({\n anchorX: f ? d.plotWidth - a.plotY : a.plotX,\n anchorY: f ? d.plotHeight - a.plotX : a.plotY\n });\n }\n\n u || (b.hide(!0), b.placed = !1);\n };\n\n p.prototype.justifyDataLabel = function (a, b, c, e, g, m) {\n var d = this.chart,\n f = b.align,\n h = b.verticalAlign,\n k = a.box ? 0 : a.padding || 0;\n var p = c.x + k;\n\n if (0 > p) {n "right" === f ? (b.align = "left", b.inside = !0) : b.x = -p;n var n = !0;n }nn p = c.x + e.width - k;n p > d.plotWidth && ("left" === f ? (b.align = "right", b.inside = !0) : b.x = d.plotWidth - p, n = !0);n p = c.y + k;n 0 > p && ("bottom" === h ? (b.verticalAlign = "top", b.inside = !0) : b.y = -p, n = !0);n p = c.y + e.height - k;n p > d.plotHeight && ("top" === h ? (b.verticalAlign = "bottom", b.inside = !0) : b.y = d.plotHeight - p, n = !0);n n && (a.placed = !m, a.align(b, null, g));n return n;n };nn g.pie && (g.pie.prototype.dataLabelPositioners = {n radialDistributionY: function radialDistributionY(a) {n return a.top + a.distributeBox.pos;n },n radialDistributionX: function radialDistributionX(a, b, c, e) {n return a.getX(c < b.top + 2 || c > b.bottom - 2 ? e : c, b.half, b);n },n justify: function justify(a, b, c) {n return c[0] + (a.half ? -1 : 1) * (b + a.labelDistance);n },n alignToPlotEdges: function alignToPlotEdges(a, b, c, e) {n a = a.getBBox().width;n return b ? a + e : c - a - e;n },n alignToConnectors: function alignToConnectors(a, b, c, e) {n var d = 0,n f;n a.forEach(function (a) {n f = a.dataLabel.getBBox().width;n f > d && (d = f);n });n return b ? d + e : c - d - e;n }n }, g.pie.prototype.drawDataLabels = function () {n var a = this,n b = a.data,n f,n e = a.chart,n g = a.options.dataLabels,n m = g.connectorPadding,n n,n q = e.plotWidth,n v = e.plotHeight,n k = e.plotLeft,n t = Math.round(e.chartWidth / 3),n y,n z = a.center,n w = z[2] / 2,n l = z[1],n J,n D,n F,n H,n L = [[], []],n M,n G,n N,n Q,n P = [0, 0, 0, 0],n U = a.dataLabelPositioners,n V;n a.visible && (g.enabled || a._hasPointLabels) && (b.forEach(function (a) {n a.dataLabel && a.visible && a.dataLabel.shortened && (a.dataLabel.attr({n width: "auto"n }).css({n width: "auto",n textOverflow: "clip"n }), a.dataLabel.shortened = !1);n }), p.prototype.drawDataLabels.apply(a), b.forEach(function (a) {n a.dataLabel && (a.visible ? (L[a.half].push(a), a.dataLabel._pos = null, !A(g.style.width) && !A(a.options.dataLabels && a.options.dataLabels.style && a.options.dataLabels.style.width) && a.dataLabel.getBBox().width > t && (a.dataLabel.css({n width: .7 * tn }), a.dataLabel.shortened = !0)) : (a.dataLabel = a.dataLabel.destroy(), a.dataLabels && 1 === a.dataLabels.length && delete a.dataLabels));n }), L.forEach(function (b, d) {n var h = b.length,n p = [],n n;nn if (h) {n a.sortByAngle(b, d - .5);nn if (0 < a.maxLabelDistance) {\n var t = Math.max(0, l - w - a.maxLabelDistance);\n var r = Math.min(l + w + a.maxLabelDistance, e.plotHeight);\n b.forEach(function (a) {\n 0 < a.labelDistance && a.dataLabel && (a.top = Math.max(0, l - w - a.labelDistance), a.bottom = Math.min(l + w + a.labelDistance, e.plotHeight), n = a.dataLabel.getBBox().height || 21, a.distributeBox = {\n target: a.labelPosition.natural.y - a.top + n / 2,\n size: n,\n rank: a.y\n }, p.push(a.distributeBox));\n });\n t = r + n - t;\n c.distribute(p, t, t / 5);\n }\n\n for (Q = 0; Q < h; Q++) {\n f = b[Q];\n F = f.labelPosition;\n J = f.dataLabel;\n N = !1 === f.visible ? \"hidden\" : \"inherit\";\n G = t = F.natural.y;\n p && A(f.distributeBox) && (void 0 === f.distributeBox.pos ? N = \"hidden\" : (H = f.distributeBox.size, G = U.radialDistributionY(f)));\n delete f.positionIndex;\n if (g.justify) M = U.justify(f, w, z);else switch (g.alignTo) {\n case \"connectors\":\n M = U.alignToConnectors(b, d, q, k);\n break;\n\n case \"plotEdges\":\n M = U.alignToPlotEdges(J, d, q, k);\n break;\n\n default:\n M = U.radialDistributionX(a, f, G, t);\n }\n J._attr = {\n visibility: N,\n align: F.alignment\n };\n J._pos = {\n x: M + g.x + ({\n left: m,\n right: -m\n || 0),n y: G + g.y - 10n };n F.x = M;n F.y = G;n x(g.crop, !0) && (D = J.getBBox().width, t = null, M - D < m && 1 === d ? (t = Math.round(D - M + m), P = Math.max(t, P)) : M + D > q - m && 0 === d && (t = Math.round(M + D - q + m), P = Math.max(t, P)), 0 > G - H / 2 ? P = Math.max(Math.round(-G + H / 2), P) : G + H / 2 > v && (P = Math.max(Math.round(G + H / 2 - v), P)), J.sideOverflow = t);n }n }n }), 0 === u(P) || this.verifyDataLabelOverflow(P)) && (this.placeDataLabels(), this.points.forEach(function (b) {n V = C(g, b.options.dataLabels);nn if (n = x(V.connectorWidth, 1)) {n var c;n y = b.connector;nn if ((J = b.dataLabel) && J._pos && b.visible && 0 < b.labelDistance) {n N = J._attr.visibility;n if (c = !y) b.connector = y = e.renderer.path().addClass("highcharts-data-label-connector highcharts-color-" + b.colorIndex + (b.className ? " " + b.className : "")).add(a.dataLabelsGroup), e.styledMode || y.attr({n "stroke-width": n,n stroke: V.connectorColor || b.color || "#666666"n });n y[c ? "attr" : "animate"]({n d: b.getConnectorPath()n });n y.attr("visibility", N);n } else y && (b.connector = y.destroy());n }n }));n }, g.pie.prototype.placeDataLabels = function () {n this.points.forEach(function (a) {n var b = a.dataLabel,n c;n b && a.visible && ((c = b._pos) ? (b.sideOverflow && (b._attr.width = Math.max(b.getBBox().width - b.sideOverflow, 0), b.css({n width: b._attr.width + "px",n textOverflow: (this.options.dataLabels.style || {}).textOverflow || "ellipsis"n }), b.shortened = !0), b.attr(b._attr), b[b.moved ? "animate" : "attr"]©, b.moved = !0) : b && b.attr({n y: -9999n }));n delete a.distributeBox;n }, this);n }, g.pie.prototype.alignDataLabel = n, g.pie.prototype.verifyDataLabelOverflow = function (a) {n var b = this.center,n c = this.options,n e = c.center,n g = c.minSize || 80,n p = null !== c.size;nn if (!p) {n if (null !== e) var n = Math.max(b - Math.max(a, a), g);else n = Math.max(b - a - a, g), b += (a - a) / 2;n null !== e ? n = Math.max(Math.min(n, b - Math.max(a, a)), g) : (n = Math.max(Math.min(n, b - a - a), g), b += (a - a) / 2);n n < b ? (b = n, b = Math.min(m(c.innerSize || 0, n), n), this.translate(b), this.drawDataLabels && this.drawDataLabels()) : p = !0;n }nn return p;n });n g.column && (g.column.prototype.alignDataLabel = function (a, b, c, e, g) {n var d = this.chart.inverted,n f = a.series,n h = a.dlBox || a.shapeArgs,n m = x(a.below, a.plotY > x(this.translatedThreshold, f.yAxis.len)),n k = x(c.inside, !!this.options.stacking);n h && (e = C(h), 0 > e.y && (e.height += e.y, e.y = 0), h = e.y + e.height - f.yAxis.len, 0 < h && (e.height -= h), d && (e = {n x: f.yAxis.len - e.y - e.height,n y: f.xAxis.len - e.x - e.width,n width: e.height,n height: e.widthn }), k || (d ? (e.x += m ? 0 : e.width, e.width = 0) : (e.y += m ? e.height : 0, e.height = 0)));n c.align = x(c.align, !d || k ? "center" : m ? "right" : "left");n c.verticalAlign = x(c.verticalAlign, d || k ? "middle" : m ? "top" : "bottom");n p.prototype.alignDataLabel.call(this, a, b, c, e, g);n c.inside && a.contrastColor && b.css({n color: a.contrastColorn });n });n });n N(H, "modules/overlapping-datalabels.src.js", [H, H], function (c, n) {n var A = n.isArray,n D = n.objectEach;n n = c.Chart;n var F = c.pick,n z = c.addEvent,n u = c.fireEvent;n z(n, "render", function () {n var c = [];n (this.labelCollectors || []).forEach(function (n) {n c = c.concat(n());n });n (this.yAxis || []).forEach(function (n) {n n.options.stackLabels && !n.options.stackLabels.allowOverlap && D(n.stacks, function (n) {n D(n, function (n) {n c.push(n.label);n });n });n });n (this.series || []).forEach(function (n) {n var u = n.options.dataLabels;n n.visible && (!1 !== u.enabled || n._hasPointLabels) && n.points.forEach(function (n) {n n.visible && (A(n.dataLabels) ? n.dataLabels : n.dataLabel ? [n.dataLabel] : []).forEach(function (m) {n var p = m.options;n m.labelrank = F(p.labelrank, n.labelrank, n.shapeArgs && n.shapeArgs.height);n p.allowOverlap || c.push(m);n });n });n });n this.hideOverlappingLabels©;n });nn n.prototype.hideOverlappingLabels = function © {n var n = this,n z = c.length,n x = n.renderer,n m,n p,n g;nn var b = function b(a) {n var b = a.box ? 0 : a.padding || 0;n var c = 0;nn if (a && (!a.alignAttr || a.placed)) {n var d = a.alignAttr || {n x: a.attr("x"),n y: a.attr("y")n };n var f = a.parentGroup;n a.width || (c = a.getBBox(), a.width = c.width, a.height = c.height, c = x.fontMetrics(null, a.element).h);n return {n x: d.x + (f.translateX || 0) + b,n y: d.y + (f.translateY || 0) + b - c,n width: a.width - 2 * b,n height: a.height - 2 * bn };n }n };nn for (p = 0; p < z; p++) {n if (m = c) m.oldOpacity = m.opacity, m.newOpacity = 1, m.absoluteBox = b(m);n }nn c.sort(function (a, b) {n return (b.labelrank || 0) - (a.labelrank || 0);n });nn for (p = 0; p < z; p++) {n var a = (b = c) && b.absoluteBox;nn for (m = p + 1; m < z; ++m) {n var d = (g = c) && g.absoluteBox;n !a || !d || b === g || 0 === b.newOpacity || 0 === g.newOpacity || d.x > a.x + a.width || d.x + d.width < a.x || d.y > a.y + a.height || d.y + d.height < a.y || ((b.labelrank < g.labelrank ? b : g).newOpacity = 0);n }n }nn c.forEach(function (a) {n var b;nn if (a) {n var c = a.newOpacity;n a.oldOpacity !== c && (a.alignAttr && a.placed ? (c ? a.show(!0) : b = function b() {n a.hide(!0);n a.placed = !1;n }, a.alignAttr.opacity = c, a[a.isOld ? "animate" : "attr"](a.alignAttr, null, b), u(n, "afterHideOverlappingLabels")) : a.attr({n opacity: cn }));n a.isOld = !0;n }n });n };n });n N(H, "parts/Interaction.js", [H, H], function (c, n) {n var A = n.defined,n D = n.isArray,n F = n.isObject,n z = n.objectEach,n u = c.addEvent;n n = c.Chart;n var H = c.createElement,n y = c.css,n C = c.defaultOptions,n x = c.defaultPlotOptions,n m = c.extend,n p = c.fireEvent,n g = c.hasTouch,n b = c.Legend,n a = c.merge,n d = c.pick,n f = c.Point,n e = c.Series,n h = c.seriesTypes,n r = c.svg;n var E = c.TrackerMixin = {n drawTrackerPoint: function drawTrackerPoint() {n var a = this,n b = a.chart,n c = b.pointer,n d = function d(a) {n var b = c.getPointFromEvent(a);n void 0 !== b && (c.isDirectTouch = !0, b.onMouseOver(a));n },n e;nn a.points.forEach(function (a) {n e = D(a.dataLabels) ? a.dataLabels : a.dataLabel ? [a.dataLabel] : [];n a.graphic && (a.graphic.element.point = a);n e.forEach(function (b) {n b.div ? b.div.point = a : b.element.point = a;n });n });n a._hasTracking || (a.trackerGroups.forEach(function (e) {n if (a) {n a.addClass("highcharts-tracker").on("mouseover", d).on("mouseout", function (a) {n c.onTrackerMouseOut(a);n });n if (g) a.on("touchstart", d);n !b.styledMode && a.options.cursor && a.css(y).css({n cursor: a.options.cursorn });n }n }), a._hasTracking = !0);n p(this, "afterDrawTracker");n },n drawTrackerGraph: function drawTrackerGraph() {n var a = this,n b = a.options,n c = b.trackByArea,n d = [].concat(c ? a.areaPath : a.graphPath),n e = d.length,n f = a.chart,n h = f.pointer,n l = f.renderer,n m = f.options.tooltip.snap,n n = a.tracker,n u,n x = function x() {n if (f.hoverSeries !== a) a.onMouseOver();n },n y = "rgba(192,192,192," + (r ? .0001 : .002) + ")";nn if (e && !c) for (u = e + 1; u–;) {n "M" === d && d.splice(u + 1, 0, d[u + 1] - m, d[u + 2], "L"), (u && "M" === d || u === e) && d.splice(u, 0, "L", d[u - 2] + m, d[u - 1]);n }n n ? n.attr({n d: dn }) : a.graph && (a.tracker = l.path(d).attr({n visibility: a.visible ? "visible" : "hidden",n zIndex: 2n }).addClass(c ? "highcharts-tracker-area" : "highcharts-tracker-line").add(a.group), f.styledMode || a.tracker.attr({n "stroke-linejoin": "round",n stroke: y,n fill: c ? y : "none",n "stroke-width": a.graph.strokeWidth() + (c ? 0 : 2 * m)n }), [a.tracker, a.markerGroup].forEach(function (a) {n a.addClass("highcharts-tracker").on("mouseover", x).on("mouseout", function (a) {n h.onTrackerMouseOut(a);n });n b.cursor && !f.styledMode && a.css({n cursor: b.cursorn });n if (g) a.on("touchstart", x);n }));n p(this, "afterDrawTracker");n }n };n h.column && (h.column.prototype.drawTracker = E.drawTrackerPoint);n h.pie && (h.pie.prototype.drawTracker = E.drawTrackerPoint);n h.scatter && (h.scatter.prototype.drawTracker = E.drawTrackerPoint);n m(b.prototype, {n setItemEvents: function setItemEvents(b, c, d) {n var e = this,n g = e.chart.renderer.boxWrapper,n k = b instanceof f,n h = "highcharts-legend-" + (k ? "point" : "series") + "-active",n l = e.chart.styledMode;n (d ? c : b.legendGroup).on("mouseover", function () {n b.visible && e.allItems.forEach(function (a) {n b !== a && a.setState("inactive", !k);n });n b.setState("hover");n b.visible && g.addClass(h);n l || c.css(e.options.itemHoverStyle);n }).on("mouseout", function () {n e.chart.styledMode || c.css(a(b.visible ? e.itemStyle : e.itemHiddenStyle));n e.allItems.forEach(function (a) {n b !== a && a.setState("", !k);n });n g.removeClass(h);n b.setState();n }).on("click", function (a) {n var c = function c() {n b.setVisible && b.setVisible();n e.allItems.forEach(function (a) {n b !== a && a.setState(b.visible ? "inactive" : "", !k);n });n };nn g.removeClass(h);n a = {n browserEvent: an };n b.firePointEvent ? b.firePointEvent("legendItemClick", a, c) : p(b, "legendItemClick", a, c);n });n },n createCheckboxForItem: function createCheckboxForItem(a) {n a.checkbox = H("input", {n type: "checkbox",n className: "highcharts-legend-checkbox",n checked: a.selected,n defaultChecked: a.selectedn }, this.options.itemCheckboxStyle, this.chart.container);n u(a.checkbox, "click", function (b) {n p(a.series || a, "checkboxClick", {n checked: b.target.checked,n item: an }, function () {n a.select();n });n });n }n });n m(n.prototype, {n showResetZoom: function showResetZoom() {n function a() {n b.zoomOut();n }nn var b = this,n c = C.lang,n d = b.options.chart.resetZoomButton,n e = d.theme,n f = e.states,n g = "chart" === d.relativeTo || "spaceBox" === d.relativeTo ? null : "plotBox";n p(this, "beforeShowResetZoom", null, function () {n b.resetZoomButton = b.renderer.button(c.resetZoom, null, null, a, e, f && f.hover).attr({n align: d.position.align,n title: c.resetZoomTitlen }).addClass("highcharts-reset-zoom").add().align(d.position, !1, g);n });n p(this, "afterShowResetZoom");n },n zoomOut: function zoomOut() {n p(this, "selection", {n resetSelection: !0n }, this.zoom);n },n zoom: function zoom(a) {n var b = this,n c,n e = b.pointer,n f = !1,n g = b.inverted ? e.mouseDownX : e.mouseDownY;n !a || a.resetSelection ? (b.axes.forEach(function (a) {n c = a.zoom();n }), e.initiated = !1) : a.xAxis.concat(a.yAxis).forEach(function (a) {n var d = a.axis,n k = b.inverted ? d.left : d.top,n h = b.inverted ? k + d.width : k + d.height,n l = d.isXAxis,n m = !1;n if (!l && g >= k && g <= h || l || !A(g)) m = !0;n e[l ? "zoomX" : "zoomY"] && m && (c = d.zoom(a.min, a.max), d.displayBtn && (f = !0));n });n var h = b.resetZoomButton;n f && !h ? b.showResetZoom() : !f && F(h) && (b.resetZoomButton = h.destroy());n c && b.redraw(d(b.options.chart.animation, a && a.animation, 100 > b.pointCount));n },n pan: function pan(a, b) {n var c = this,n d = c.hoverPoints,n e;n p(this, "pan", {n originalEvent: an }, function () {n d && d.forEach(function (a) {n a.setState();n });n ("xy" === b ? [1, 0] : [1]).forEach(function (b) {n b = c[b ? "xAxis" : "yAxis"][0];n var d = b.horiz,n f = a[d ? "chartX" : "chartY"];n d = d ? "mouseDownX" : "mouseDownY";n var g = c,n k = (b.pointRange || 0) / 2,n h = b.reversed && !c.inverted || !b.reversed && c.inverted ? -1 : 1,n m = b.getExtremes(),n n = b.toValue(g - f, !0) + k * h;n h = b.toValue(g + b.len - f, !0) - k * h;n var p = h < n;n g = p ? h : n;n n = p ? n : h;n h = Math.min(m.dataMin, k ? m.min : b.toValue(b.toPixels(m.min) - b.minPixelPadding));n k = Math.max(m.dataMax, k ? m.max : b.toValue(b.toPixels(m.max) + b.minPixelPadding));n p = h - g;n 0 < p && (n += p, g = h);n p = n - k;n 0 < p && (n = k, g -= p);n b.series.length && g !== m.min && n !== m.max && (b.setExtremes(g, n, !1, !1, {n trigger: "pan"n }), e = !0);n c = f;n });n e && c.redraw(!1);n y(c.container, {n cursor: "move"n });n });n }n });n m(f.prototype, {n select: function select(a, b) {n var c = this,n e = c.series,n f = e.chart;n this.selectedStaging = a = d(a, !c.selected);n c.firePointEvent(a ? "select" : "unselect", {n accumulate: bn }, function () {n c.selected = c.options.selected = a;n e.options.data = c.options;n c.setState(a && "select");n b || f.getSelectedPoints().forEach(function (a) {n var b = a.series;n a.selected && a !== c && (a.selected = a.options.selected = !1, b.options.data = a.options, a.setState(f.hoverPoints && b.options.inactiveOtherPoints ? "inactive" : ""), a.firePointEvent("unselect"));n });n });n delete this.selectedStaging;n },n onMouseOver: function onMouseOver(a) {n var b = this.series.chart,n c = b.pointer;n a = a ? c.normalize(a) : c.getChartCoordinatesFromPoint(this, b.inverted);n c.runPointActions(a, this);n },n onMouseOut: function onMouseOut() {n var a = this.series.chart;n this.firePointEvent("mouseOut");n this.series.options.inactiveOtherPoints || (a.hoverPoints || []).forEach(function (a) {n a.setState();n });n a.hoverPoints = a.hoverPoint = null;n },n importEvents: function importEvents() {n if (!this.hasImportedEvents) {n var b = this,n d = a(b.series.options.point, b.options).events;n b.events = d;n z(d, function (a, d) {n c.isFunction(a) && u(b, d, a);n });n this.hasImportedEvents = !0;n }n },n setState: function setState(a, b) {n var c = this.series,n e = this.state,n f = c.options.states[a || "normal"] || {},n g = x.marker && c.options.marker,n h = g && !1 === g.enabled,n l = g && g.states && g.states[a || "normal"] || {},n n = !1 === l.enabled,n q = c.stateMarkerGraphic,n r = this.marker || {},n v = c.chart,n u = c.halo,n y,n z = g && c.markerAttribs;n a = a || "";nn if (!(a === this.state && !b || this.selected && "select" !== a || !1 === f.enabled || a && (n || h && !1 === l.enabled) || a && r.states && r.states && !1 === r.states.enabled)) {n this.state = a;n z && (y = c.markerAttribs(this, a));nn if (this.graphic) {n e && this.graphic.removeClass("highcharts-point-" + e);n a && this.graphic.addClass("highcharts-point-" + a);nn if (!v.styledMode) {n var A = c.pointAttribs(this, a);n var C = d(v.options.chart.animation, f.animation);n c.options.inactiveOtherPoints && ((this.dataLabels || []).forEach(function (a) {n a && a.animate({n opacity: A.opacityn }, C);n }), this.connector && this.connector.animate({n opacity: A.opacityn }, C));n this.graphic.animate(A, C);n }nn y && this.graphic.animate(y, d(v.options.chart.animation, l.animation, g.animation));n q && q.hide();n } else {n if (a && l) {n e = r.symbol || c.symbol;n q && q.currentSymbol !== e && (q = q.destroy());n if (y) if (q) q[b ? "animate" : "attr"]({n x: y.x,n y: y.yn });else e && (c.stateMarkerGraphic = q = v.renderer.symbol(e, y.x, y.y, y.width, y.height).add(c.markerGroup), q.currentSymbol = e);n !v.styledMode && q && q.attr(c.pointAttribs(this, a));n }nn q && (q[a && this.isInside ? "show" : "hide"](), q.element.point = this);n }nn a = f.halo;n f = (q = this.graphic || q) && q.visibility || "inherit";n a && a.size && q && "hidden" !== f ? (u || (c.halo = u = v.renderer.path().add(q.parentGroup)), u.show()[b ? "animate" : "attr"]({n d: this.haloPath(a.size)n }), u.attr({n "class": "highcharts-halo highcharts-color-" + d(this.colorIndex, c.colorIndex) + (this.className ? " " + this.className : ""),n visibility: f,n zIndex: -1n }), u.point = this, v.styledMode || u.attr(m({n fill: this.color || c.color,n "fill-opacity": a.opacityn }, a.attributes))) : u && u.point && u.point.haloPath && u.animate({n d: u.point.haloPath(0)n }, null, u.hide);n p(this, "afterSetState");n }n },n haloPath: function haloPath(a) {n return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX) - a, this.plotY - a, 2 * a, 2 * a);n }n });n m(e.prototype, {n onMouseOver: function onMouseOver() {n var a = this.chart,n b = a.hoverSeries;n if (b && b !== this) b.onMouseOut();n this.options.events.mouseOver && p(this, "mouseOver");n this.setState("hover");n a.hoverSeries = this;n },n onMouseOut: function onMouseOut() {n var a = this.options,n b = this.chart,n c = b.tooltip,n d = b.hoverPoint;n b.hoverSeries = null;n if (d) d.onMouseOut();n this && a.events.mouseOut && p(this, "mouseOut");n !c || this.stickyTracking || c.shared && !this.noSharedTooltip || c.hide();n b.series.forEach(function (a) {n a.setState("", !0);n });n },n setState: function setState(a, b) {n var c = this,n e = c.options,n f = c.graph,n g = e.inactiveOtherPoints,n h = e.states,n l = e.lineWidth,n m = e.opacity,n n = d(h[a || "normal"] && h[a || "normal"].animation, c.chart.options.chart.animation);n e = 0;n a = a || "";nn if (c.state !== a && ([c.group, c.markerGroup, c.dataLabelsGroup].forEach(function (b) {n b && (c.state && b.removeClass("highcharts-series-" + c.state), a && b.addClass("highcharts-series-" + a));n }), c.state = a, !c.chart.styledMode)) {n if (h && !1 === h.enabled) return;n a && (l = h.lineWidth || l + (h.lineWidthPlus || 0), m = d(h.opacity, m));n if (f && !f.dashstyle) for (h = {n "stroke-width": ln }, f.animate(h, n); c["zone-graph-" + e];) {n c["zone-graph-" + e].attr(h), e += 1;n }n g || [c.group, c.markerGroup, c.dataLabelsGroup, c.labelBySeries].forEach(function (a) {n a && a.animate({n opacity: mn }, n);n });n }nn b && g && c.points && c.setAllPointsToState(a);n },n setAllPointsToState: function setAllPointsToState(a) {n this.points.forEach(function (b) {n b.setState && b.setState(a);n });n },n setVisible: function setVisible(a, b) {n var c = this,n d = c.chart,n e = c.legendItem,n f = d.options.chart.ignoreHiddenSeries,n g = c.visible;n var h = (c.visible = a = c.options.visible = c.userOptions.visible = void 0 === a ? !g : a) ? "show" : "hide";n ["group", "dataLabelsGroup", "markerGroup", "tracker", "tt"].forEach(function (a) {n if (c) c[h]();n });n if (d.hoverSeries === c || (d.hoverPoint && d.hoverPoint.series) === c) c.onMouseOut();n e && d.legend.colorizeItem(c, a);n c.isDirty = !0;n c.options.stacking && d.series.forEach(function (a) {n a.options.stacking && a.visible && (a.isDirty = !0);n });n c.linkedSeries.forEach(function (b) {n b.setVisible(a, !1);n });n f && (d.isDirtyBox = !0);n p(c, h);n !1 !== b && d.redraw();n },n show: function show() {n this.setVisible(!0);n },n hide: function hide() {n this.setVisible(!1);n },n select: function select(a) {n this.selected = a = this.options.selected = void 0 === a ? !this.selected : a;n this.checkbox && (this.checkbox.checked = a);n p(this, a ? "select" : "unselect");n },n drawTracker: E.drawTrackerGraphn });n });n N(H, "parts/Responsive.js", [H, H], function (c, n) {n var A = n.isArray,n D = n.isObject,n F = n.objectEach,n z = n.splat;n n = c.Chart;n var u = c.pick;nn n.prototype.setResponsive = function (n, u) {n var y = this.options.responsive,n x = [],n m = this.currentResponsive;n !u && y && y.rules && y.rules.forEach(function (m) {n void 0 === m._id && (m._id = c.uniqueKey());n this.matchResponsiveRule(m, x);n }, this);n u = c.merge.apply(0, x.map(function (m) {n return c.find(y.rules, function © {n return c._id === m;n }).chartOptions;n }));n u.isResponsiveOptions = !0;n x = x.toString() || void 0;n x !== (m && m.ruleIds) && (m && this.update(m.undoOptions, n, !0), x ? (m = this.currentOptions(u), m.isResponsiveOptions = !0, this.currentResponsive = {n ruleIds: x,n mergedOptions: u,n undoOptions: mn }, this.update(u, n, !0)) : this.currentResponsive = void 0);n };nn n.prototype.matchResponsiveRule = function (c, n) {n var y = c.condition;n (y.callback || function () {n return this.chartWidth <= u(y.maxWidth, Number.MAX_VALUE) && this.chartHeight <= u(y.maxHeight, Number.MAX_VALUE) && this.chartWidth >= u(y.minWidth, 0) && this.chartHeight >= u(y.minHeight, 0);n }).call(this) && n.push(c._id);n };nn n.prototype.currentOptions = function © {n function n(c, p, g, b) {n var a;n F(c, function (c, f) {n if (!b && -1 < u.collectionsWithUpdate.indexOf(f)) for (c = z©, g = [], a = 0; a < c.length; a++) {n p[a] && (g[a] = {}, n(c, p[a], g[a], b + 1));n } else D© ? (g = A© ? [] : {}, n(c, p || {}, g, b + 1)) : g = void 0 === p ? null : p;n });n }nn var u = this,n x = {};n n(c, this.options, x, 0);n return x;n };n });n N(H, "masters/highcharts.src.js", [H, H], function (c, n) {n var A = c.extend;n A(c, {n attr: n.attr,n defined: n.defined,n erase: n.erase,n isArray: n.isArray,n isClass: n.isClass,n isDOMElement: n.isDOMElement,n isNumber: n.isNumber,n isObject: n.isObject,n isString: n.isString,n objectEach: n.objectEach,n pInt: n.pInt,n splat: n.splatn });n return c;n });n H._modules = H;n return H;n});“,”map“:null,”metadata“:{},”sourceType“:”module“}