PageSourceSearch

https://yelpix.com/wp-content/themes/pxlz/assets/js/modules/plugins/Chart.min.js?ver=6.8.11

js yelpix.com collected 2026-10-09 01:09:04 UTC 268,067 bytes, 4,289 lines download raw bytes

1/*!
2 * Chart.js
3 * http://chartjs.org/
4 * Version: 2.4.0
5 *
6 * Copyright 2016 Nick Downie
7 * Released under the MIT license
8 * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
9 */
10!function (t) {
11    if ("object" == typeof exports && "undefined" != typeof module)module.exports = t(); else if ("function" == typeof define && define.amd)define([], t); else {
12        var e;
13        e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, e.Chart = t()
14    }
15}(function () {
16    return function t(e, a, i) {
17        function n(r, l) {
18            if (!a[r]) {
19                if (!e[r]) {
20                    var s = "function" == typeof require && require;
21                    if (!l && s)return s(r, !0);
22                    if (o)return o(r, !0);
23                    var d = new Error("Cannot find module '" + r + "'");
24                    throw d.code = "MODULE_NOT_FOUND", d
25                }
26                var u = a[r] = {exports: {}};
27                e[r][0].call(u.exports, function (t) {
28                    var a = e[r][1][t];
29                    return n(a ? a : t)
30                }, u, u.exports, t, e, a, i)
31            }
32            return a[r].exports
33        }
34
35        for (var o = "function" == typeof require && require, r = 0; r < i.length; r++)n(i[r]);
36        return n
37    }({
38        1: [function (t, e, a) {
39        }, {}], 2: [function (t, e, a) {
40            function i(t) {
41                if (t) {
42                    var e = /^#([a-fA-F0-9]{3})$/, a = /^#([a-fA-F0-9]{6})$/, i = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/, n = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/, o = /(\w+)/, r = [0, 0, 0], l = 1, s = t.match(e);
43                    if (s) {
44                        s = s[1];
45                        for (var d = 0; d < r.length; d++)r[d] = parseInt(s[d] + s[d], 16)
46                    } else if (s = t.match(a)) {
47                        s = s[1];
48                        for (var d = 0; d < r.length; d++)r[d] = parseInt(s.slice(2 * d, 2 * d + 2), 16)
49                    } else if (s = t.match(i)) {
50                        for (var d = 0; d < r.length; d++)r[d] = parseInt(s[d + 1]);
51                        l = parseFloat(s[4])
52                    } else if (s = t.match(n)) {
53                        for (var d = 0; d < r.length; d++)r[d] = Math.round(2.55 * parseFloat(s[d + 1]));
54                        l = parseFloat(s[4])
55                    } else if (s = t.match(o)) {
56                        if ("transparent" == s[1])return [0, 0, 0, 0];
57                        if (r = y[s[1]], !r)return
58                    }
59                    for (var d = 0; d < r.length; d++)r[d] = v(r[d], 0, 255);
60                    return l = l || 0 == l ? v(l, 0, 1) : 1, r[3] = l, r
61                }
62            }
63
64            function n(t) {
65                if (t) {
66                    var e = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/, a = t.match(e);
67                    if (a) {
68                        var i = parseFloat(a[4]), n = v(parseInt(a[1]), 0, 360), o = v(parseFloat(a[2]), 0, 100), r = v(parseFloat(a[3]), 0, 100), l = v(isNaN(i) ? 1 : i, 0, 1);
69                        return [n, o, r, l]
70                    }
71                }
72            }
73
74            function o(t) {
75                if (t) {
76                    var e = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/, a = t.match(e);
77                    if (a) {
78                        var i = parseFloat(a[4]), n = v(parseInt(a[1]), 0, 360), o = v(parseFloat(a[2]), 0, 100), r = v(parseFloat(a[3]), 0, 100), l = v(isNaN(i) ? 1 : i, 0, 1);
79                        return [n, o, r, l]
80                    }
81                }
82            }
83
84            function r(t) {
85                var e = i(t);
86                return e && e.slice(0, 3)
87            }
88
89            function l(t) {
90                var e = n(t);
91                return e && e.slice(0, 3)
92            }
93
94            function s(t) {
95                var e = i(t);
96                return e ? e[3] : (e = n(t)) ? e[3] : (e = o(t)) ? e[3] : void 0
97            }
98
99            function d(t) {
100                return "#" + x(t[0]) + x(t[1]) + x(t[2])
101            }
102
103            function u(t, e) {
104                return 1 > e || t[3] && t[3] < 1 ? c(t, e) : "rgb(" + t[0] + ", " + t[1] + ", " + t[2] + ")"
105            }
106
107            function c(t, e) {
108                return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "rgba(" + t[0] + ", " + t[1] + ", " + t[2] + ", " + e + ")"
109            }
110
111            function h(t, e) {
112                if (1 > e || t[3] && t[3] < 1)return f(t, e);
113                var a = Math.round(t[0] / 255 * 100), i = Math.round(t[1] / 255 * 100), n = Math.round(t[2] / 255 * 100);
114                return "rgb(" + a + "%, " + i + "%, " + n + "%)"
115            }
116
117            function f(t, e) {
118                var a = Math.round(t[0] / 255 * 100), i = Math.round(t[1] / 255 * 100), n = Math.round(t[2] / 255 * 100);
119                return "rgba(" + a + "%, " + i + "%, " + n + "%, " + (e || t[3] || 1) + ")"
120            }
121
122            function g(t, e) {
123                return 1 > e || t[3] && t[3] < 1 ? p(t, e) : "hsl(" + t[0] + ", " + t[1] + "%, " + t[2] + "%)"
124            }
125
126            function p(t, e) {
127                return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hsla(" + t[0] + ", " + t[1] + "%, " + t[2] + "%, " + e + ")"
128            }
129
130            function m(t, e) {
131                return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hwb(" + t[0] + ", " + t[1] + "%, " + t[2] + "%" + (void 0 !== e && 1 !== e ? ", " + e : "") + ")"
132            }
133
134            function b(t) {
135                return k[t.slice(0, 3)]
136            }
137
138            function v(t, e, a) {
139                return Math.min(Math.max(e, t), a)
140            }
141
142            function x(t) {
143                var e = t.toString(16).toUpperCase();
144                return e.length < 2 ? "0" + e : e
145            }
146
147            var y = t(6);
148            e.exports = {
149                getRgba: i,
150                getHsla: n,
151                getRgb: r,
152                getHsl: l,
153                getHwb: o,
154                getAlpha: s,
155                hexString: d,
156                rgbString: u,
157                rgbaString: c,
158                percentString: h,
159                percentaString: f,
160                hslString: g,
161                hslaString: p,
162                hwbString: m,
163                keyword: b
164            };
165            var k = {};
166            for (var S in y)k[y[S]] = S
167        }, {6: 6}], 3: [function (t, e, a) {
168            var i = t(5), n = t(2), o = function (t) {
169                if (t instanceof o)return t;
170                if (!(this instanceof o))return new o(t);
171                this.values = {
172                    rgb: [0, 0, 0],
173                    hsl: [0, 0, 0],
174                    hsv: [0, 0, 0],
175                    hwb: [0, 0, 0],
176                    cmyk: [0, 0, 0, 0],
177                    alpha: 1
178                };
179                var e;
180                if ("string" == typeof t)if (e = n.getRgba(t))this.setValues("rgb", e); else if (e = n.getHsla(t))this.setValues("hsl", e); else {
181                    if (!(e = n.getHwb(t)))throw new Error('Unable to parse color from string "' + t + '"');
182                    this.setValues("hwb", e)
183                } else if ("object" == typeof t)if (e = t, void 0 !== e.r || void 0 !== e.red)this.setValues("rgb", e); else if (void 0 !== e.l || void 0 !== e.lightness)this.setValues("hsl", e); else if (void 0 !== e.v || void 0 !== e.value)this.setValues("hsv", e); else if (void 0 !== e.w || void 0 !== e.whiteness)this.setValues("hwb", e); else {
184                    if (void 0 === e.c && void 0 === e.cyan)throw new Error("Unable to parse color from object " + JSON.stringify(t));
185                    this.setValues("cmyk", e)
186                }
187            };
188            o.prototype = {
189                rgb: function () {
190                    return this.setSpace("rgb", arguments)
191                }, hsl: function () {
192                    return this.setSpace("hsl", arguments)
193                }, hsv: function () {
194                    return this.setSpace("hsv", arguments)
195                }, hwb: function () {
196                    return this.setSpace("hwb", arguments)
197                }, cmyk: function () {
198                    return this.setSpace("cmyk", arguments)
199                }, rgbArray: function () {
200                    return this.values.rgb
201                }, hslArray: function () {
202                    return this.values.hsl
203                }, hsvArray: function () {
204                    return this.values.hsv
205                }, hwbArray: function () {
206                    var t = this.values;
207                    return 1 !== t.alpha ? t.hwb.concat([t.alpha]) : t.hwb
208                }, cmykArray: function () {
209                    return this.values.cmyk
210                }, rgbaArray: function () {
211                    var t = this.values;
212                    return t.rgb.concat([t.alpha])
213                }, hslaArray: function () {
214                    var t = this.values;
215                    return t.hsl.concat([t.alpha])
216                }, alpha: function (t) {
217                    return void 0 === t ? this.values.alpha : (this.setValues("alph
217a", t), this)
218                }, red: function (t) {
219                    return this.setChannel("rgb", 0, t)
220                }, green: function (t) {
221                    return this.setChannel("rgb", 1, t)
222                }, blue: function (t) {
223                    return this.setChannel("rgb", 2, t)
224                }, hue: function (t) {
225                    return t && (t %= 360, t = 0 > t ? 360 + t : t), this.setChannel("hsl", 0, t)
226                }, saturation: function (t) {
227                    return this.setChannel("hsl", 1, t)
228                }, lightness: function (t) {
229                    return this.setChannel("hsl", 2, t)
230                }, saturationv: function (t) {
231                    return this.setChannel("hsv", 1, t)
232                }, whiteness: function (t) {
233                    return this.setChannel("hwb", 1, t)
234                }, blackness: function (t) {
235                    return this.setChannel("hwb", 2, t)
236                }, value: function (t) {
237                    return this.setChannel("hsv", 2, t)
238                }, cyan: function (t) {
239                    return this.setChannel("cmyk", 0, t)
240                }, magenta: function (t) {
241                    return this.setChannel("cmyk", 1, t)
242                }, yellow: function (t) {
243                    return this.setChannel("cmyk", 2, t)
244                }, black: function (t) {
245                    return this.setChannel("cmyk", 3, t)
246                }, hexString: function () {
247                    return n.hexString(this.values.rgb)
248                }, rgbString: function () {
249                    return n.rgbString(this.values.rgb, this.values.alpha)
250                }, rgbaString: function () {
251                    return n.rgbaString(this.values.rgb, this.values.alpha)
252                }, percentString: function () {
253                    return n.percentString(this.values.rgb, this.values.alpha)
254                }, hslString: function () {
255                    return n.hslString(this.values.hsl, this.values.alpha)
256                }, hslaString: function () {
257                    return n.hslaString(this.values.hsl, this.values.alpha)
258                }, hwbString: function () {
259                    return n.hwbString(this.values.hwb, this.values.alpha)
260                }, keyword: function () {
261                    return n.keyword(this.values.rgb, this.values.alpha)
262                }, rgbNumber: function () {
263                    var t = this.values.rgb;
264                    return t[0] << 16 | t[1] << 8 | t[2]
265                }, luminosity: function () {
266                    for (var t = this.values.rgb, e = [], a = 0; a < t.length; a++) {
267                        var i = t[a] / 255;
268                        e[a] = .03928 >= i ? i / 12.92 : Math.pow((i + .055) / 1.055, 2.4)
269                    }
270                    return .2126 * e[0] + .7152 * e[1] + .0722 * e[2]
271                }, contrast: function (t) {
272                    var e = this.luminosity(), a = t.luminosity();
273                    return e > a ? (e + .05) / (a + .05) : (a + .05) / (e + .05)
274                }, level: function (t) {
275                    var e = this.contrast(t);
276                    return e >= 7.1 ? "AAA" : e >= 4.5 ? "AA" : ""
277                }, dark: function () {
278                    var t = this.values.rgb, e = (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3;
279                    return 128 > e
280                }, light: function () {
281                    return !this.dark()
282                }, negate: function () {
283                    for (var t = [], e = 0; 3 > e; e++)t[e] = 255 - this.values.rgb[e];
284                    return this.setValues("rgb", t), this
285                }, lighten: function (t) {
286                    var e = this.values.hsl;
287                    return e[2] += e[2] * t, this.setValues("hsl", e), this
288                }, darken: function (t) {
289                    var e = this.values.hsl;
290                    return e[2] -= e[2] * t, this.setValues("hsl", e), this
291                }, saturate: function (t) {
292                    var e = this.values.hsl;
293                    return e[1] += e[1] * t, this.setValues("hsl", e), this
294                }, desaturate: function (t) {
295                    var e = this.values.hsl;
296                    return e[1] -= e[1] * t, this.setValues("hsl", e), this
297                }, whiten: function (t) {
298                    var e = this.values.hwb;
299                    return e[1] += e[1] * t, this.setValues("hwb", e), this
300                }, blacken: function (t) {
301                    var e = this.values.hwb;
302                    return e[2] += e[2] * t, this.setValues("hwb", e), this
303                }, greyscale: function () {
304                    var t = this.values.rgb, e = .3 * t[0] + .59 * t[1] + .11 * t[2];
305                    return this.setValues("rgb", [e, e, e]), this
306                }, clearer: function (t) {
307                    var e = this.values.alpha;
308                    return this.setValues("alpha", e - e * t), this
309                }, opaquer: function (t) {
310                    var e = this.values.alpha;
311                    return this.setValues("alpha", e + e * t), this
312                }, rotate: function (t) {
313                    var e = this.values.hsl, a = (e[0] + t) % 360;
314                    return e[0] = 0 > a ? 360 + a : a, this.setValues("hsl", e), this
315                }, mix: function (t, e) {
316                    var a = this, i = t, n = void 0 === e ? .5 : e, o = 2 * n - 1, r = a.alpha() - i.alpha(), l = ((o * r === -1 ? o : (o + r) / (1 + o * r)) + 1) / 2, s = 1 - l;
317                    return this.rgb(l * a.red() + s * i.red(), l * a.green() + s * i.green(), l * a.blue() + s * i.blue()).alpha(a.alpha() * n + i.alpha() * (1 - n))
318                }, toJSON: function () {
319                    return this.rgb()
320                }, clone: function () {
321                    var t, e, a = new o, i = this.values, n = a.values;
322                    for (var r in i)i.hasOwnProperty(r) && (t = i[r], e = {}.toString.call(t), "[object Array]" === e ? n[r] = t.slice(0) : "[object Number]" === e ? n[r] = t : console.error("unexpected color value:", t));
323                    return a
324                }
325            }, o.prototype.spaces = {
326                rgb: ["red", "green", "blue"],
327                hsl: ["hue", "saturation", "lightness"],
328                hsv: ["hue", "saturation", "value"],
329                hwb: ["hue", "whiteness", "blackness"],
330                cmyk: ["cyan", "magenta", "yellow", "black"]
331            }, o.prototype.maxes = {
332                rgb: [255, 255, 255],
333                hsl: [360, 100, 100],
334                hsv: [360, 100, 100],
335                hwb: [360, 100, 100],
336                cmyk: [100, 100, 100, 100]
337            }, o.prototype.getValues = function (t) {
338                for (var e = this.values, a = {}, i = 0; i < t.length; i++)a[t.charAt(i)] = e[t][i];
339                return 1 !== e.alpha && (a.a = e.alpha), a
340            }, o.prototype.setValues = function (t, e) {
341                var a, n = this.values, o = this.spaces, r = this.maxes, l = 1;
342                if ("alpha" === t)l = e; else if (e.length)n[t] = e.slice(0, t.length), l = e[t.length]; else if (void 0 !== e[t.charAt(0)]) {
343                    for (a = 0; a < t.length; a++)n[t][a] = e[t.charAt(a)];
344                    l = e.a
345                } else if (void 0 !== e[o[t][0]]) {
346                    var s = o[t];
347                    for (a = 0; a < t.length; a++)n[t][a] = e[s[a]];
348                    l = e.alpha
349                }
350                if (n.alpha = Math.max(0, Math.min(1, void 0 === l ? n.alpha : l)), "alpha" === t)return !1;
351                var d;
352                for (a = 0; a < t.length; a++)d = Math.max(0, Math.min(r[t][a], n[t][a])), n[t][a] = Math.round(d);
353                for (var u in o)u !== t && (n[u] = i[t][u](n[t]));
354                return !0
355            }, o.prototype.setSpace = function (t, e) {
356                var a = e[0];
357                return void 0 === a ? this.getValues(t) : ("number" == typeof a && (a = Array.prototype.slice.call(e)), this.setValues(t, a), this)
358            }, o.prototype.setChannel = function (t, e, a) {
359                var i = this.values[t];
360                return void 0 === a ? i[e] : a === i[e] ? this : (i[e] = a, this.setValues(t, i), this)
361            }, "undefined" != typeof window && (window.Color = o), e.exports = o
362        }, {2: 2, 5: 5}], 4: [function (t, e, a) {
363            function i(t) {
364                var e, a, i, n = t[0] / 255, o = t[1] / 255, r = t[2] / 255, l = Math.min(n, o, r), s = Math.max(n, o, r), d = s - l;
365                return s == l ? e = 0 : n == s ? e = (o - r) / d : o == s ? e = 2 + (r - n) / d : r == s && (e = 4 + (n - o) / d), e = Math.min(60 * e, 360), 0 > e && (e += 360), i = (l + s) / 2, a = s == l ? 0 : .5 >= i ? d / (s + l) : d / (2 - s - l), [e, 100 * a, 100 * i]
366            }
367
368            function n(t) {
369                var e, a, i, n = t[0], o = t[1], r = t[2], l = Math.min(n, o, r), s = Math.max(n, o, r), d = s - l;
370                return a = 0 == s ? 0 : d / s * 1e3 / 10, s == l ? e = 0 : n == s ? e = (o - r) / d : o == s ? e = 2 + (r - n) / d : r == s && (e = 4 + (n - o) / d), e = Math.min(60 * e, 360), 0 > e && (e += 360), i = s / 255 * 1e3 / 10, [e, a, i]
371            }
372
373            function o(t) {
374                var e = t[0], a = t[1], n = t[2], o = i(t)[0], r = 1 / 255 * Math.min(e, Math.min(a, n)), n = 1 - 1 / 255 * Math.max(e, Math.max(a, n));
375                return [o, 100 * r, 100 * n]
376            }
377
378            function l(t) {
379                var e, a, i, n, o = t[0] / 255, r = t[1] / 255, l = t[2] / 255;
380                return n = Math.min(1 - o, 1 - r, 1 - l), e = (1 - o - n) / (1 - n) || 0, a = (1 - r - n) / (1 - n) || 0, i = (1 - l - n) / (1 - n) || 0, [100 * e, 100 * a, 100 * i, 100 * n]
381            }
382
383            function s(t) {
384                return G[JSON.stringify(t)]
385            }
386
387            function d(t) {
388                var e = t[0] / 255, a = t[1] / 255, i = t[2] / 255;
389                e = e > .04045 ? Math.pow((e + .055) / 1.055, 2.4) : e / 12.92, a = a > .04045 ? Math.pow((a + .055) / 1.055, 2.4) : a / 12.92, i = i > .04045 ? Math.pow((i + .055) / 1.055, 2.4) : i / 12.92;
390                var n = .4124 * e + .3576 * a + .1805 * i, o = .2126 * e + .7152 * a + .0722 * i, r = .0193 * e + .1192 * a + .9505 * i;
391                return [100 * n, 100 * o, 100 * r]
392            }
393
394            function u(t) {
395                var e, a, i, n = d(t), o = n[0], r = n[1], l = n[2];
396                return o /= 95.047, r /= 100, l /= 108.883, o = o > .008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116, r = r > .008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116, l = l > .008856 ? Math.pow(l, 1 / 3) : 7.787 * l + 16 / 116, e = 116 * r - 16, a = 500 * (o - r), i = 200 * (r - l), [e, a, i]
397            }
398
399            function c(t) {
400                return W(u(t))
401            }
402
403            function h(t) {
404                var e, a, i, n, o, r = t[0] / 360, l = t[1] / 100, s = t[2] / 100;
405                if (0 == l)return o = 255 * s, [o, o, o];
406                a = .5 > s ? s * (1 + l) : s + l - s * l, e = 2 * s - a, n = [0, 0, 0];
407                for (var d = 0; 3 > d; d++)i = r + 1 / 3 * -(d - 1), 0 > i && i++, i > 1 && i--, o = 1 > 6 * i ? e + 6 * (a - e) * i : 1 > 2 * i ? a : 2 > 3 * i ? e + (a - e) * (2 / 3 - i) * 6 : e, n[d] = 255 * o;
408                return n
409            }
410
411            function f(t) {
412                var e, a, i = t[0], n = t[1] / 100, o = t[2] / 100;
413                return 0 === o ? [0, 0, 0] : (o *= 2, n *= 1 >= o ? o : 2 - o, a = (o + n) / 2, e = 2 * n / (o + n), [i, 100 * e, 100 * a])
414            }
415
416            function p(t) {
417                return o(h(t))
418            }
419
420            function m(t) {
421                return l(h(t))
422            }
423
424            function v(t) {
425                return s(h(t))
426            }
427
428            function x(t) {
429                var e = t[0] / 60, a = t[1] / 100, i = t[2] / 100, n = Math.floor(e) % 6, o = e - Math.floor(e), r = 255 * i * (1 - a), l = 255 * i * (1 - a * o), s = 255 * i * (1 - a * (1 - o)), i = 255 * i;
430                switch (n) {
431                    case 0:
432                        return [i, s, r];
433                    case 1:
434                        return [l, i, r];
435                    case 2:
436                        return [r, i, s];
437                    case 3:
438                        return [r, l, i];
439                    case 4:
440                        return [s, r, i];
441                    case 5:
442                        return [i, r, l]
443                }
444            }
445
446            function y(t) {
447                var e, a, i = t[0], n = t[1] / 100, o = t[2] / 100;
448                return a = (2 - n) * o, e = n * o, e /= 1 >= a ? a : 2 - a, e = e || 0, a /= 2, [i, 100 * e, 100 * a]
449            }
450
451            function k(t) {
452                return o(x(t))
453            }
454
455            function S(t) {
456                return l(x(t))
457            }
458
459            function w(t) {
460                return s(x(t))
461            }
462
463            function M(t) {
464                var e, a, i, n, o = t[0] / 360, l = t[1] / 100, s = t[2] / 100, d = l + s;
465                switch (d > 1 && (l /= d, s /= d), e = Math.floor(6 * o), a = 1 - s, i = 6 * o - e, 0 != (1 & e) && (i = 1 - i), n = l + i * (a - l), e) {
466                    default:
467                    case 6:
468                    case 0:
469                        r = a, g = n, b = l;
470                        break;
471                    case 1:
472                        r = n, g = a, b = l;
473                        break;
474                    case 2:
475                        r = l, g = a, b = n;
476                        break;
477                    case 3:
478                        r = l, g = n, b = a;
479                        break;
480                    case 4:
481                        r = n, g = l, b = a;
482                        break;
483                    case 5:
484                        r = a, g = l, b = n
485                }
486                return [255 * r, 255 * g, 255 * b]
487            }
488
489            function C(t) {
490                return i(M(t))
491            }
492
493            function D(t) {
494                return n(M(t))
495            }
496
497            function I(t) {
498                return l(M(t))
499            }
500
501            function A(t) {
502                return s(M(t))
503            }
504
505            function T(t) {
506                var e, a, i, n = t[0] / 100, o = t[1] / 100, r = t[2] / 100, l = t[3] / 100;
507                return e = 1 - Math.min(1, n * (1 - l) + l), a = 1 - Math.min(1, o * (1 - l) + l), i = 1 - Math.min(1, r * (1 - l) + l), [255 * e, 255 * a, 255 * i]
508            }
509
510            function P(t) {
511                return i(T(t))
512            }
513
514            function F(t) {
515                return n(T(t))
516            }
517
518            function _(t) {
519                return o(T(t))
520            }
521
522            function R(t) {
523                return s(T(t))
524            }
525
526            function V(t) {
527                var e, a, i, n = t[0] / 100, o = t[1] / 100, r = t[2] / 100;
528                return e = 3.2406 * n + -1.5372 * o + r * -.4986, a = n * -.9689 + 1.8758 * o + .0415 * r, i = .0557 * n + o * -.204 + 1.057 * r, e = e > .0031308 ? 1.055 * Math.pow(e, 1 / 2.4) - .055 : e = 12.92 * e, a = a > .0031308 ? 1.055 * Math.pow(a, 1 / 2.4) - .055 : a = 12.92 * a, i = i > .0031308 ? 1.055 * Math.pow(i, 1 / 2.4) - .055 : i = 12.92 * i, e = Math.min(Math.max(0, e), 1), a = Math.min(Math.max(0, a), 1), i = Math.min(Math.max(0, i), 1), [255 * e, 255 * a, 255 * i]
529            }
530
531            function L(t) {
532                var e, a, i, n = t[0], o = t[1], r = t[2];
533                return n /= 95.047, o /= 100, r /= 108.883, n = n > .008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116, o = o > .008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116, r = r > .008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116, e = 116 * o - 16, a = 500 * (n - o), i = 200 * (o - r), [e, a, i]
534            }
535
536            function O(t) {
537                return W(L(t))
538            }
539
540            function B(t) {
541                var e, a, i, n, o = t[0], r = t[1], l = t[2];
542                return 8 >= o ? (a = 100 * o / 903.3, n = 7.787 * (a / 100) + 16 / 116) : (a = 100 * Math.pow((o + 16) / 116, 3), n = Math.pow(a / 100, 1 / 3)), e = .008856 >= e / 95.047 ? e = 95.047 * (r / 500 + n - 16 / 116) / 7.787 : 95.047 * Math.pow(r / 500 + n, 3), i = .008859 >= i / 108.883 ? i = 108.883 * (n - l / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(n - l / 200, 3), [e, a, i]
543            }
544
545            function W(t) {
546                var e, a, i, n = t[0], o = t[1], r = t[2];
547                return e = Math.atan2(r, o), a = 360 * e / 2 / Math.PI, 0 > a && (a += 360), i = Math.sqrt(o * o + r * r), [n, i, a]
548            }
549
550            function z(t) {
551                return V(B(t))
552            }
553
554            function N(t) {
555                var e, a, i, n = t[0], o = t[1], r = t[2];
556                return i = r / 360 * 2 * Math.PI, e = o * Math.cos(i), a = o * Math.sin(i), [n, e, a]
557            }
558
559            function E(t) {
560                return B(N(t))
561            }
562
563            function H(t) {
564                return z(N(t))
565            }
566
567            function U(t) {
568                return Z[t]
569            }
570
571            function j(t) {
572                return i(U(t))
573            }
574
575            function q(t) {
576                return n(U(t))
577            }
578
579            function Y(t) {
580                return o(U(t))
581            }
582
583            function X(t) {
584                return l(U(t))
585            }
586
587            function K(t) {
588                return u(U(t))
589            }
590
591            function J(t) {
592                return d(U(t))
593            }
594
595            e.exports = {
596                rgb2hsl: i,
597                rgb2hsv: n,
598                rgb2hwb: o,
599                rgb2cmyk: l,
600                rgb2keyword: s,
601                rgb2xyz: d,
602                rgb2lab: u,
603                rgb2lch: c,
604                hsl2rgb: h,
605                hsl2hsv: f,
606                hsl2hwb: p,
607                hsl2cmyk: m,
608                hsl2keyword: v,
609                hsv2rgb: x,
610                hsv2hsl: y,
611                hsv2hwb: k,
612                hsv2cmyk: S,
613                hsv2keyword: w,
614                hwb2rgb: M,
615                hwb2hsl: C,
616                hwb2hsv: D,
617                hwb2cmyk: I,
618                hwb2keyword: A,
619                cmyk2rgb: T,
620                cmyk2hsl: P,
621                cmyk2hsv: F,
622                cmyk2hwb: _,
623                cmyk2keyword: R,
624                keyword2rgb: U,
625                keyword2hsl: j,
626                keyword2hsv: q,
627                keyword2hwb: Y,
628                keyword2cmyk: X,
629                keyword2lab: K,
630                keyword2xyz: J,
631                xyz2rgb: V,
632                xyz2lab: L,
633                xyz2lch: O,
634                lab2xyz: B,
635                lab2rgb: z,
636                lab2lch: W,
637                lch2lab: N,
638                lch2xyz: E,
639                lch2rgb: H
640            };
641            var Z = {
642                aliceblue: [240, 248, 255],
643                antiquewhite: [250, 235, 215],
644                aqua: [0, 255, 255],
645                aquamarine: [127, 255, 212],
646                azure: [240, 255, 255],
647                beige: [245, 245, 220],
648                bisque: [255, 228, 196],
649                black: [0, 0, 0],
650                blanchedalmond: [255, 235, 205],
651                blue: [0, 0, 255],
652                blueviolet: [138, 43, 226],
653                brown: [165, 42, 42],
654                burlywood: [222, 184, 135],
655                cadetblue: [95, 158, 160],
656                chartreuse: [127, 255, 0],
657                chocolate: [210, 105, 30],
658                coral: [255, 127, 80],
659                cornflowerblue: [100, 149, 237],
660                cornsilk: [255, 248, 220],
661                crimson: [220, 20, 60],
662                cyan: [0, 255, 255],
663                darkblue: [0, 0, 139],
664                darkcyan: [0, 139, 139],
665                darkgoldenrod: [184, 134, 11],
666                darkgray: [169, 169, 169],
667                darkgreen: [0, 100, 0],
668                darkgrey: [169, 169, 169],
669                darkkhaki: [189, 183, 107],
670                darkmagenta: [139, 0, 139],
671                darkolivegreen: [85, 107, 47],
672                darkorange: [255, 140, 0],
673                darkorchid: [153, 50, 204],
674                darkred: [139, 0, 0],
675                darksalmon: [233, 150, 122],
676                darkseagreen: [143, 188, 143],
677                darkslateblue: [72, 61, 139],
678                darkslategray: [47, 79, 79],
679                darkslategrey: [47, 79, 79],
680                darkturquoise: [0, 206, 209],
681                darkviolet: [148, 0, 211],
682                deeppink: [255, 20, 147],
683                deepskyblue: [0, 191, 255],
684                dimgray: [105, 105, 105],
685                dimgrey: [105, 105, 105],
686                dodgerblue: [30, 144, 255],
687                firebrick: [178, 34, 34],
688                floralwhite: [255, 250, 240],
689                forestgreen: [34, 139, 34],
690                fuchsia: [255, 0, 255],
691                gainsboro: [220, 220, 220],
692                ghostwhite: [248, 248, 255],
693                gold: [255, 215, 0],
694                goldenrod: [218, 165, 32],
695                gray: [128, 128, 128],
696                green: [0, 128, 0],
697                greenyellow: [173, 255, 47],
698                grey: [128, 128, 128],
699                honeydew: [240, 255, 240],
700                hotpink: [255, 105, 180],
701                indianred: [205, 92, 92],
702                indigo: [75, 0, 130],
703                ivory: [255, 255, 240],
704                khaki: [240, 230, 140],
705                lavender: [230, 230, 250],
706                lavenderblush: [255, 240, 245],
707                lawngreen: [124, 252, 0],
708                lemonchiffon: [255, 250, 205],
709                lightblue: [173, 216, 230],
710                lightcoral: [240, 128, 128],
711                lightcyan: [224, 255, 255],
712                lightgoldenrodyellow: [250, 250, 210],
713                lightgray: [211, 211, 211],
714                lightgreen: [144, 238, 144],
715                lightgrey: [211, 211, 211],
716                lightpink: [255, 182, 193],
717                lightsalmon: [255, 160, 122],
718                lightseagreen: [32, 178, 170],
719                lightskyblue: [135, 206, 250],
720                lightslategray: [119, 136, 153],
721                lightslategrey: [119, 136, 153],
722                lightsteelblue: [176, 196, 222],
723                lightyellow: [255, 255, 224],
724                lime: [0, 255, 0],
725                limegreen: [50, 205, 50],
726                linen: [250, 240, 230],
727                magenta: [255, 0, 255],
728                maroon: [128, 0, 0],
729                mediumaquamarine: [102, 205, 170],
730                mediumblue: [0, 0, 205],
731                mediumorchid: [186, 85, 211],
732                mediumpurple: [147, 112, 219],
733                mediumseagreen: [60, 179, 113],
734                mediumslateblue: [123, 104, 238],
735                mediumspringgreen: [0, 250, 154],
736                mediumturquoise: [72, 209, 204],
737                mediumvioletred: [199, 21, 133],
738                midnightblue: [25, 25, 112],
739                mintcream: [245, 255, 250],
740                mistyrose: [255, 228, 225],
741                moccasin: [255, 228, 181],
742                navajowhite: [255, 222, 173],
743                navy: [0, 0, 128],
744                oldlace: [253, 245, 230],
745                olive: [128, 128, 0],
746                olivedrab: [107, 142, 35],
747                orange: [255, 165, 0],
748                orangered: [255, 69, 0],
749                orchid: [218, 112, 214],
750                palegoldenrod: [238, 232, 170],
751                palegreen: [152, 251, 152],
752                paleturquoise: [175, 238, 238],
753                palevioletred: [219, 112, 147],
754                papayawhip: [255, 239, 213],
755                peachpuff: [255, 218, 185],
756                peru: [205, 133, 63],
757                pink: [255, 192, 203],
758                plum: [221, 160, 221],
759                powderblue: [176, 224, 230],
760                purple: [128, 0, 128],
761                rebeccapurple: [102, 51, 153],
762                red: [255, 0, 0],
763                rosybrown: [188, 143, 143],
764                royalblue: [65, 105, 225],
765                saddlebrown: [139, 69, 19],
766                salmon: [250, 128, 114],
767                sandybrown: [244, 164, 96],
768                seagreen: [46, 139, 87],
769                seashell: [255, 245, 238],
770                sienna: [160, 82, 45],
771                silver: [192, 192, 192],
772                skyblue: [135, 206, 235],
773                slateblue: [106, 90, 205],
774                slategray: [112, 128, 144],
775                slategrey: [112, 128, 144],
776                snow: [255, 250, 250],
777                springgreen: [0, 255, 127],
778                steelblue: [70, 130, 180],
779                tan: [210, 180, 140],
780                teal: [0, 128, 128],
781                thistle: [216, 191, 216],
782                tomato: [255, 99, 71],
783                turquoise: [64, 224, 208],
784                violet: [238, 130, 238],
785                wheat: [245, 222, 179],
786                white: [255, 255, 255],
787                whitesmoke: [245, 245, 245],
788                yellow: [255, 255, 0],
789                yellowgreen: [154, 205, 50]
790            }, G = {};
791            for (var Q in Z)G[JSON.stringify(Z[Q])] = Q
792        }, {}], 5: [function (t, e, a) {
793            var i = t(4), n = function () {
794                return new d
795            };
796            for (var o in i) {
797                n[o + "Raw"] = function (t) {
798                    return function (e) {
799                        return "number" == typeof e && (e = Array.prototype.slice.call(arguments)), i[t](e)
800                    }
801                }(o);
802 
802               var r = /(\w+)2(\w+)/.exec(o), l = r[1], s = r[2];
803                n[l] = n[l] || {}, n[l][s] = n[o] = function (t) {
804                    return function (e) {
805                        "number" == typeof e && (e = Array.prototype.slice.call(arguments));
806                        var a = i[t](e);
807                        if ("string" == typeof a || void 0 === a)return a;
808                        for (var n = 0; n < a.length; n++)a[n] = Math.round(a[n]);
809                        return a
810                    }
811                }(o)
812            }
813            var d = function () {
814                this.convs = {}
815            };
816            d.prototype.routeSpace = function (t, e) {
817                var a = e[0];
818                return void 0 === a ? this.getValues(t) : ("number" == typeof a && (a = Array.prototype.slice.call(e)), this.setValues(t, a))
819            }, d.prototype.setValues = function (t, e) {
820                return this.space = t, this.convs = {}, this.convs[t] = e, this
821            }, d.prototype.getValues = function (t) {
822                var e = this.convs[t];
823                if (!e) {
824                    var a = this.space, i = this.convs[a];
825                    e = n[a][t](i), this.convs[t] = e
826                }
827                return e
828            }, ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function (t) {
829                d.prototype[t] = function (e) {
830                    return this.routeSpace(t, arguments)
831                }
832            }), e.exports = n
833        }, {4: 4}], 6: [function (t, e, a) {
834            e.exports = {
835                aliceblue: [240, 248, 255],
836                antiquewhite: [250, 235, 215],
837                aqua: [0, 255, 255],
838                aquamarine: [127, 255, 212],
839                azure: [240, 255, 255],
840                beige: [245, 245, 220],
841                bisque: [255, 228, 196],
842                black: [0, 0, 0],
843                blanchedalmond: [255, 235, 205],
844                blue: [0, 0, 255],
845                blueviolet: [138, 43, 226],
846                brown: [165, 42, 42],
847                burlywood: [222, 184, 135],
848                cadetblue: [95, 158, 160],
849                chartreuse: [127, 255, 0],
850                chocolate: [210, 105, 30],
851                coral: [255, 127, 80],
852                cornflowerblue: [100, 149, 237],
853                cornsilk: [255, 248, 220],
854                crimson: [220, 20, 60],
855                cyan: [0, 255, 255],
856                darkblue: [0, 0, 139],
857                darkcyan: [0, 139, 139],
858                darkgoldenrod: [184, 134, 11],
859                darkgray: [169, 169, 169],
860                darkgreen: [0, 100, 0],
861                darkgrey: [169, 169, 169],
862                darkkhaki: [189, 183, 107],
863                darkmagenta: [139, 0, 139],
864                darkolivegreen: [85, 107, 47],
865                darkorange: [255, 140, 0],
866                darkorchid: [153, 50, 204],
867                darkred: [139, 0, 0],
868                darksalmon: [233, 150, 122],
869                darkseagreen: [143, 188, 143],
870                darkslateblue: [72, 61, 139],
871                darkslategray: [47, 79, 79],
872                darkslategrey: [47, 79, 79],
873                darkturquoise: [0, 206, 209],
874                darkviolet: [148, 0, 211],
875                deeppink: [255, 20, 147],
876                deepskyblue: [0, 191, 255],
877                dimgray: [105, 105, 105],
878                dimgrey: [105, 105, 105],
879                dodgerblue: [30, 144, 255],
880                firebrick: [178, 34, 34],
881                floralwhite: [255, 250, 240],
882                forestgreen: [34, 139, 34],
883                fuchsia: [255, 0, 255],
884                gainsboro: [220, 220, 220],
885                ghostwhite: [248, 248, 255],
886                gold: [255, 215, 0],
887                goldenrod: [218, 165, 32],
888                gray: [128, 128, 128],
889                green: [0, 128, 0],
890                greenyellow: [173, 255, 47],
891                grey: [128, 128, 128],
892                honeydew: [240, 255, 240],
893                hotpink: [255, 105, 180],
894                indianred: [205, 92, 92],
895                indigo: [75, 0, 130],
896                ivory: [255, 255, 240],
897                khaki: [240, 230, 140],
898                lavender: [230, 230, 250],
899                lavenderblush: [255, 240, 245],
900                lawngreen: [124, 252, 0],
901                lemonchiffon: [255, 250, 205],
902                lightblue: [173, 216, 230],
903                lightcoral: [240, 128, 128],
904                lightcyan: [224, 255, 255],
905                lightgoldenrodyellow: [250, 250, 210],
906                lightgray: [211, 211, 211],
907                lightgreen: [144, 238, 144],
908                lightgrey: [211, 211, 211],
909                lightpink: [255, 182, 193],
910                lightsalmon: [255, 160, 122],
911                lightseagreen: [32, 178, 170],
912                lightskyblue: [135, 206, 250],
913                lightslategray: [119, 136, 153],
914                lightslategrey: [119, 136, 153],
915                lightsteelblue: [176, 196, 222],
916                lightyellow: [255, 255, 224],
917                lime: [0, 255, 0],
918                limegreen: [50, 205, 50],
919                linen: [250, 240, 230],
920                magenta: [255, 0, 255],
921                maroon: [128, 0, 0],
922                mediumaquamarine: [102, 205, 170],
923                mediumblue: [0, 0, 205],
924                mediumorchid: [186, 85, 211],
925                mediumpurple: [147, 112, 219],
926                mediumseagreen: [60, 179, 113],
927                mediumslateblue: [123, 104, 238],
928                mediumspringgreen: [0, 250, 154],
929                mediumturquoise: [72, 209, 204],
930                mediumvioletred: [199, 21, 133],
931                midnightblue: [25, 25, 112],
932                mintcream: [245, 255, 250],
933                mistyrose: [255, 228, 225],
934                moccasin: [255, 228, 181],
935                navajowhite: [255, 222, 173],
936                navy: [0, 0, 128],
937                oldlace: [253, 245, 230],
938                olive: [128, 128, 0],
939                olivedrab: [107, 142, 35],
940                orange: [255, 165, 0],
941                orangered: [255, 69, 0],
942                orchid: [218, 112, 214],
943                palegoldenrod: [238, 232, 170],
944                palegreen: [152, 251, 152],
945                paleturquoise: [175, 238, 238],
946                palevioletred: [219, 112, 147],
947                papayawhip: [255, 239, 213],
948                peachpuff: [255, 218, 185],
949                peru: [205, 133, 63],
950                pink: [255, 192, 203],
951                plum: [221, 160, 221],
952                powderblue: [176, 224, 230],
953                purple: [128, 0, 128],
954                rebeccapurple: [102, 51, 153],
955                red: [255, 0, 0],
956                rosybrown: [188, 143, 143],
957                royalblue: [65, 105, 225],
958                saddlebrown: [139, 69, 19],
959                salmon: [250, 128, 114],
960                sandybrown: [244, 164, 96],
961                seagreen: [46, 139, 87],
962                seashell: [255, 245, 238],
963                sienna: [160, 82, 45],
964                silver: [192, 192, 192],
965                skyblue: [135, 206, 235],
966                slateblue: [106, 90, 205],
967                slategray: [112, 128, 144],
968                slategrey: [112, 128, 144],
969                snow: [255, 250, 250],
970                springgreen: [0, 255, 127],
971                steelblue: [70, 130, 180],
972                tan: [210, 180, 140],
973                teal: [0, 128, 128],
974                thistle: [216, 191, 216],
975                tomato: [255, 99, 71],
976                turquoise: [64, 224, 208],
977                violet: [238, 130, 238],
978                wheat: [245, 222, 179],
979                white: [255, 255, 255],
980                whitesmoke: [245, 245, 245],
981                yellow: [255, 255, 0],
982                yellowgreen: [154, 205, 50]
983            }
984        }, {}], 7: [function (t, e, a) {
985            var i = t(28)();
986            t(26)(i), t(22)(i), t(25)(i), t(21)(i), t(23)(i), t(24)(i), t(29)(i), t(33)(i), t(31)(i), t(34)(i), t(32)(i), t(35)(i), t(30)(i), t(27)(i), t(36)(i), t(37)(i), t(38)(i), t(39)(i), t(40)(i), t(43)(i), t(41)(i), t(42)(i), t(44)(i), t(45)(i), t(46)(i), t(15)(i), t(16)(i), t(17)(i), t(18)(i), t(19)(i), t(20)(i), t(8)(i), t(9)(i), t(10)(i), t(11)(i), t(12)(i), t(13)(i), t(14)(i), window.Chart = e.exports = i
987        }, {
988            10: 10,
989            11: 11,
990            12: 12,
991            13: 13,
992            14: 14,
993            15: 15,
994            16: 16,
995            17: 17,
996            18: 18,
997            19: 19,
998            20: 20,
999            21: 21,
1000            22: 22,
1001            23: 23,
1002            24: 24,
1003            25: 25,
1004            26: 26,
1005            27: 27,
1006            28: 28,
1007            29: 29,
1008            30: 30,
1009            31: 31,
1010            32: 32,
1011            33: 33,
1012            34: 34,
1013            35: 35,
1014            36: 36,
1015            37: 37,
1016            38: 38,
1017            39: 39,
1018            40: 40,
1019            41: 41,
1020            42: 42,
1021            43: 43,
1022            44: 44,
1023            45: 45,
1024            46: 46,
1025            8: 8,
1026            9: 9
1027        }], 8: [function (t, e, a) {
1028            "use strict";
1029            e.exports = function (t) {
1030                t.Bar = function (e, a) {
1031                    return a.type = "bar", new t(e, a)
1032                }
1033            }
1034        }, {}], 9: [function (t, e, a) {
1035            "use strict";
1036            e.exports = function (t) {
1037                t.Bubble = function (e, a) {
1038                    return a.type = "bubble", new t(e, a)
1039                }
1040            }
1041        }, {}], 10: [function (t, e, a) {
1042            "use strict";
1043            e.exports = function (t) {
1044                t.Doughnut = function (e, a) {
1045                    return a.type = "doughnut", new t(e, a)
1046                }
1047            }
1048        }, {}], 11: [function (t, e, a) {
1049            "use strict";
1050            e.exports = function (t) {
1051                t.Line = function (e, a) {
1052                    return a.type = "line", new t(e, a)
1053                }
1054            }
1055        }, {}], 12: [function (t, e, a) {
1056            "use strict";
1057            e.exports = function (t) {
1058                t.PolarArea = function (e, a) {
1059                    return a.type = "polarArea", new t(e, a)
1060                }
1061            }
1062        }, {}], 13: [function (t, e, a) {
1063            "use strict";
1064            e.exports = function (t) {
1065                t.Radar = function (e, a) {
1066                    return a.type = "radar", new t(e, a)
1067                }
1068            }
1069        }, {}], 14: [function (t, e, a) {
1070            "use strict";
1071            e.exports = function (t) {
1072                var e = {
1073                    hover: {mode: "single"},
1074                    scales: {
1075                        xAxes: [{type: "linear", position: "bottom", id: "x-axis-1"}],
1076                        yAxes: [{type: "linear", position: "left", id: "y-axis-1"}]
1077                    },
1078                    tooltips: {
1079                        callbacks: {
1080                            title: function () {
1081                                return ""
1082                            }, label: function (t) {
1083                                return "(" + t.xLabel + ", " + t.yLabel + ")"
1084                            }
1085                        }
1086                    }
1087                };
1088                t.defaults.scatter = e, t.controllers.scatter = t.controllers.line, t.Scatter = function (e, a) {
1089                    return a.type = "scatter", new t(e, a)
1090                }
1091            }
1092        }, {}], 15: [function (t, e, a) {
1093            "use strict";
1094            e.exports = function (t) {
1095                var e = t.helpers;
1096                t.defaults.bar = {
1097                    hover: {mode: "label"},
1098                    scales: {
1099                        xAxes: [{
1100                            type: "category",
1101                            categoryPercentage: .8,
1102                            barPercentage: .9,
1103                            gridLines: {offsetGridLines: !0}
1104                        }], yAxes: [{type: "linear"}]
1105                    }
1106                }, t.controllers.bar = t.DatasetController.extend({
1107                    dataElementType: t.elements.Rectangle,
1108                    initialize: function (e, a) {
1109                        t.DatasetController.prototype.initialize.call(this, e, a), this.getMeta().bar = !0
1110                    },
1111                    getBarCount: function () {
1112                        var t = this, a = 0;
1113                        return e.each(t.chart.data.datasets, function (e, i) {
1114                            var n = t.chart.getDatasetMeta(i);
1115                            n.bar && t.chart.isDatasetVisible(i) && ++a
1116                        }, t), a
1117                    },
1118                    update: function (t) {
1119                        var a = this;
1120                        e.each(a.getMeta().data, function (e, i) {
1121                            a.updateElement(e, i, t)
1122                        }, a)
1123                    },
1124                    updateElement: function (t, a, i) {
1125                        var n = this, o = n.getMeta(), r = n.getScaleForId(o.xAxisID), l = n.getScaleForId(o.yAxisID), s = l.getBasePixel(), d = n.chart.options.elements.rectangle, u = t.custom || {}, c = n.getDataset();
1126                        t._xScale = r, t._yScale = l, t._datasetIndex = n.index, t._index = a;
1127                        var h = n.getRuler(a);
1128                        t._model = {
1129                            x: n.calculateBarX(a, n.index, h),
1130                            y: i ? s : n.calculateBarY(a, n.index),
1131                            label: n.chart.data.labels[a],
1132                            datasetLabel: c.label,
1133                            base: i ? s : n.calculateBarBase(n.index, a),
1134                            width: n.calculateBarWidth(h),
1135                            backgroundColor: u.backgroundColor ? u.backgroundColor : e.getValueAtIndexOrDefault(c.backgroundColor, a, d.backgroundColor),
1136                            borderSkipped: u.borderSkipped ? u.borderSkipped : d.borderSkipped,
1137                            borderColor: u.borderColor ? u.borderColor : e.getValueAtIndexOrDefault(c.borderColor, a, d.borderColor),
1138                            borderWidth: u.borderWidth ? u.borderWidth : e.getValueAtIndexOrDefault(c.borderWidth, a, d.borderWidth)
1139                        }, t.pivot()
1140                    },
1141                    calculateBarBase: function (t, e) {
1142                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = 0;
1143                        if (n.options.stacked) {
1144                            for (var r = a.chart, l = r.data.datasets, s = Number(l[t].data[e]), d = 0; t > d; d++) {
1145                                var u = l[d], c = r.getDatasetMeta(d);
1146                                if (c.bar && c.yAxisID === n.id && r.isDatasetVisible(d)) {
1147                                    var h = Number(u.data[e]);
1148                                    o += 0 > s ? Math.min(h, 0) : Math.max(h, 0)
1149                                }
1150                            }
1151                            return n.getPixelForValue(o)
1152                        }
1153                        return n.getBasePixel()
1154                    },
1155                    getRuler: function (t) {
1156                        var e, a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = a.getBarCount();
1157                        e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length;
1158                        var r = e * n.options.categoryPercentage, l = (e - e * n.options.categoryPercentage) / 2, s = r / o;
1159                        if (n.ticks.length !== a.chart.data.labels.length) {
1160                            var d = n.ticks.length / a.chart.data.labels.length;
1161                            s *= d
1162                        }
1163                        var u = s * n.options.barPercentage, c = s - s * n.options.barPercentage;
1164                        return {
1165                            datasetCount: o,
1166                            tickWidth: e,
1167                            categoryWidth: r,
1168                            categorySpacing: l,
1169                            fullBarWidth: s,
1170                            barWidth: u,
1171                            barSpacing: c
1172                        }
1173                    },
1174                    calculateBarWidth: function (t) {
1175                        var e = this.getScaleForId(this.getMeta().xAxisID);
1176                        return e.options.barThickness ? e.options.barThickness : e.options.stacked ? t.categoryWidth : t.barWidth
1177                    },
1178                    getBarIndex: function (t) {
1179                        var e, a, i = 0;
1180                        for (a = 0; t > a; ++a)e = this.chart.getDatasetMeta(a), e.bar && this.chart.isDatasetVisible(a) && ++i;
1181                        return i
1182                    },
1183                    calculateBarX: function (t, e, a) {
1184                        var i = this, n = i.getMeta(), o = i.getScaleForId(n.xAxisID), r = i.getBarIndex(e), l = o.getPixelForValue(null, t, e, i.chart.isCombo);
1185                        return l -= i.chart.isCombo ? a.tickWidth / 2 : 0, o.options.stacked ? l + a.categoryWidth / 2 + a.categorySpacing : l + a.barWidth / 2 + a.categorySpacing + a.barWidth * r + a.barSpacing / 2 + a.barSpacing * r
1186                    },
1187                    calculateBarY: function (t, e) {
1188                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = Number(a.getDataset().data[t]);
1189                        if (n.options.stacked) {
1190                            for (var r = 0, l = 0, s = 0; e > s; s++) {
1191                                var d = a.chart.data.datasets[s], u = a.chart.getDatasetMeta(s);
1192                                if (u.bar && u.yAxisID === n.id && a.chart.isDatasetVisible(s)) {
1193                                    var c = Number(d.data[t]);
1194                                    0 > c ? l += c || 0 : r += c || 0
1195                                }
1196                            }
1197                            return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o)
1198                        }
1199                        return n.getPixelForValue(o)
1200                    },
1201                    draw: function (t) {
1202                        var e, a, i = this, n = t || 1, o = i.getMeta().data, r = i.getDataset();
1203                        for (e = 0, a = o.length; a > e; ++e) {
1204                            var l = r.data[e];
1205                            null === l || void 0 === l || isNaN(l) || o[e].transition(n).draw()
1206                        }
1207                    },
1208                    setHoverStyle: function (t) {
1209                        var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model;
1210                        o.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : e.getValueAtIndexOrDefault(a.hoverBackgroundColor, i, e.getHoverColor(o.backgroundColor)), o.borderColor = n.hoverBorderColor ? n.hoverBorderColor : e.getValueAtIndexOrDefault(a.hoverBorderColor, i, e.getHoverColor(o.borderColor)), o.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : e.getValueAtIndexOrDefault(a.hoverBorderWidth, i, o.borderWidth)
1211                    },
1212                    removeHoverStyle: function (t) {
1213                        var a = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model, r = this.chart.options.elements.rectangle;
1214                        o.backgroundColor = n.backgroundColor ? n.backgroundColor : e.getValueAtIndexOrDefault(a.backgroundColor, i, r.backgroundColor), o.borderColor = n.borderColor ? n.borderColor : e.getValueAtIndexOrDefault(a.borderColor, i, r.borderColor), o.borderWidth = n.borderWidth ? n.borderWidth : e.getValueAtIndexOrDefault(a.borderWidth, i, r.borderWidth)
1215                    }
1216                }), t.defaults.horizontalBar = {
1217                    hover: {mode: "label"},
1218                    scales: {
1219                        xAxes: [{type: "linear", position: "bottom"}],
1220                        yAxes: [{
1221                            position: "left",
1222                            type: "category",
1223                            categoryPercentage: .8,
1224                            barPercentage: .9,
1225                            gridLines: {offsetGridLines: !0}
1226                        }]
1227                    },
1228                    elements: {rectangle: {borderSkipped: "left"}},
1229                    tooltips: {
1230                        callbacks: {
1231                            title: function (t, e) {
1232                                var a = "";
1233                                return t.length > 0 && (t[0].yLabel ? a = t[0].yLabel : e.labels.length > 0 && t[0].index < e.labels.length && (a = e.labels[t[0].index])), a
1234                            }, label: function (t, e) {
1235                                var a = e.datasets[t.datasetIndex].label || "";
1236                                return a + ": " + t.xLabel
1237                            }
1238                        }
1239                    }
1240                }, t.controllers.horizontalBar = t.controllers.bar.extend({
1241                    updateElement: function (t, a, i) {
1242                        var n = this, o = n.getMeta(), r = n.getScaleForId(o.xAxisID), l = n.getScaleForId(o.yAxisID), s = r.getBasePixel(), d = t.custom || {}, u = n.getDataset(), c = n.chart.options.elements.rectangle;
1243                        t._xScale = r, t._yScale = l, t._datasetIndex = n.index, t._index = a;
1244                        var h = n.getRuler(a);
1245                        t._model = {
1246                            x: i ? s : n.calculateBarX(a, n.index),
1247                            y: n.calculateBarY(a, n.index, h),
1248                            label: n.chart.data.labels[a],
1249                            datasetLabel: u.label,
1250                            base: i ? s : n.calculateBarBase(n.index, a),
1251                            height: n.calculateBarHeight(h),
1252                            backgroundColor: d.backgroundColor ? d.backgroundColor : e.getValueAtIndexOrDefault(u.backgroundColor, a, c.backgroundColor),
1253                            borderSkipped: d.borderSkipped ? d.borderSkipped : c.borderSkipped,
1254                            borderColor: d.borderColor ? d.borderColor : e.getValueAtIndexOrDefault(u.borderColor, a, c.borderColor),
1255                            borderWidth: d.borderWidth ? d.borderWidth : e.getValueAtIndexOrDefault(u.borderWidth, a, c.borderWidth)
1256                        }, t.draw = function () {
1257                            function t(t) {
1258                                return s[(u + t) % 4]
1259                            }
1260
1261                            var e = this._chart.ctx, a = this._view, i = a.height / 2, n = a.y - i, o = a.y + i, r = a.base - (a.base - a.x), l = a.borderWidth / 2;
1262                            a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth;
1263                            var s = [[a.base, o], [a.base, n], [r, n], [r, o]], d = ["bottom", "left", "top", "right"], u = d.indexOf(a.borderSkipped, 0);
1264                            -1 === u && (u = 0), e.moveTo.apply(e, t(0));
1265                            for (var c = 1; 4 > c; c++)e.lineTo.apply(e, t(c));
1266                            e.fill(), a.borderWidth && e.stroke()
1267                        }, t.pivot()
1268                    }, calculateBarBase: function (t, e) {
1269                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = 0;
1270                        if (n.options.stacked) {
1271                            for (var r = a.chart, l = r.data.datasets, s = Number(l[t].data[e]), d = 0; t > d; d++) {
1272                                var u = l[d], c = r.getDatasetMeta(d);
1273                                if (c.bar && c.xAxisID === n.id && r.isDatasetVisible(d)) {
1274                                    var h = Number(u.data[e]);
1275                                    o += 0 > s ? Math.min(h, 0) : Math.max(h, 0)
1276                                }
1277                            }
1278                            return n.getPixelForValue(o)
1279                        }
1280                        return n.getBasePixel()
1281                    }, getRuler: function (t) {
1282                        var e, a = this, i = a.getMeta(), n = a.getScaleForId(i.yAxisID), o = a.getBarCount();
1283                        e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length;
1284                        var r = e * n.options.categoryPercentage, l = (e - e * n.options.categoryPercentage) / 2, s = r / o;
1285                        if (n.ticks.length !== a.chart.data.labels.length) {
1286                            var d = n.ticks.length / a.chart.data.labels.length;
1287                            s *= d
1288                        }
1289                        var u = s * n.options.barPercentage, c = s - s * n.options.barPercentage;
1290                        return {
1291                            datasetCount: o,
1292                            tickHeight: e,
1293                            categoryHeight: r,
1294                            categorySpacing: l,
1295                            fullBarHeight: s,
1296                            barHeight: u,
1297                            barSpacing: c
1298                        }
1299                    }, calculateBarHeight: function (t) {
1300                        var e = this, a = e.getScaleForId(e.getMeta().yAxisID);
1301                        return a.options.barThickness ? a.options.barThickness : a.options.stacked ? t.categoryHeight : t.barHeight
1302                    }, calculateBarX: function (t, e) {
1303                        var a = this, i = a.getMeta(), n = a.getScaleForId(i.xAxisID), o = Number(a.getDataset().data[t]);
1304                        if (n.options.stacked) {
1305                            for (var r = 0, l = 0, s = 0; e > s; s++) {
1306                                var d = a.chart.data.datasets[s], u = a.chart.getDatasetMeta(s);
1307                                if (u.bar && u.xAxisID === n.id && a.chart.isDatasetVisible(s)) {
1308                                    var c = Number(d.data[t]);
1309                                    0 > c ? l += c || 0 : r += c || 0
1310                                }
1311                            }
1312                            return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o)
1313                        }
1314                        return n.getPixelForValue(o)
1315                    }, calculateBarY: function (t, e, a) {
1316                        var i = this, n = i.getMeta(), o = i.getScaleForId(n.yAxisID), r = i.getBarIndex(e), l = o.getPixelForValue(null, t, e, i.chart.isCombo);
1317                        return l -= i.chart.isCombo ? a.tickHeight / 2 : 0, o.options.stacked ? l + a.categoryHeight / 2 + a.categorySpacing : l + a.barHeight / 2 + a.categorySpacing + a.barHeight * r + a.barSpacing / 2 + a.barSpacing * r
1318                    }
1319                })
1320            }
1321        }, {}], 16: [function (t, e, a) {
1322            "use strict";
1323            e.exports = function (t) {
1324                var e = t.helpers;
1325                t.defaults.bubble = {
1326                    hover: {mode: "single"},
1327                    scales: {
1328                        xAxes: [{type: "linear", position: "bottom", id: "x-axis-0"}],
1329                        yAxes: [{type: "linear", position: "left", id: "y-axis-0"}]
1330                    },
1331                    tooltips: {
1332                        callbacks: {
1333                            title: function () {
1334                                return ""
1335                            }, label: function (t, e) {
1336                                var a = e.datasets[t.datasetIndex].label || "", i = e.datasets[t.datasetIndex].data[t.index];
1337                                return a + ": (" + t.xLabel + ", " + t.yLabel + ", " + i.r + ")"
1338                            }
1339                        }
1340                    }
1341                }, t.controllers.bubble = t.DatasetController.extend({
1342                    dataElementType: t.elements.Point,
1343                    update: function (t) {
1344                        var a = this, i = a.getMeta(), n = i.data;
1345                        e.each(n, function (e, i) {
1346                            a.updateElement(e, i, t)
1347                        })
1348                    },
1349                    updateElement: function (a, i, n) {
1350                        var o = this, r = o.getMeta(), l = o.getScaleForId(r.xAxisID), s = o.getScaleForId(r.yAxisID), d = a.custom || {}, u = o.getDataset(), c = u.data[i], h = o.chart.options.elements.point, f = o.index;
1351                        e.extend(a, {
1352                            _xScale: l,
1353                            _yScale: s,
1354                            _datasetIndex: f,
1355                            _index: i,
1356                            _model: {
1357                                x: n ? l.getPixelForDecimal(.5) : l.getPixelForValue("object" == typeof c ? c : NaN, i, f, o.chart.isCombo),
1358                                y: n ? s.getBasePixel() : s.getPixelForValue(c, i, f),
1359                                radius: n ? 0 : d.radius ? d.radius : o.getRadius(c),
1360                                hitRadius: d.hitRadius ? d.hitRadius : e.getValueAtIndexOrDefault(u.hitRadius, i, h.hitRadius)
1361                            }
1362                        }), t.DatasetController.prototype.removeHoverStyle.call(o, a, h);
1363                        var g = a._model;
1364                        g.skip = d.skip ? d.skip : isNaN(g.x) || isNaN(g.y), a.pivot()
1365                    },
1366                    getRadius: function (t) {
1367                        return t.r || this.chart.options.elements.point.radius
1368                    },
1369                    setHoverStyle: function (a) {
1370                        var i = this;
1371                        t.DatasetController.prototype.setHoverStyle.call(i, a);
1372                        var n = i.chart.data.datasets[a._datasetIndex], o = a._index, r = a.
1372custom || {}, l = a._model;
1373                        l.radius = r.hoverRadius ? r.hoverRadius : e.getValueAtIndexOrDefault(n.hoverRadius, o, i.chart.options.elements.point.hoverRadius) + i.getRadius(n.data[o])
1374                    },
1375                    removeHoverStyle: function (e) {
1376                        var a = this;
1377                        t.DatasetController.prototype.removeHoverStyle.call(a, e, a.chart.options.elements.point);
1378                        var i = a.chart.data.datasets[e._datasetIndex].data[e._index], n = e.custom || {}, o = e._model;
1379                        o.radius = n.radius ? n.radius : a.getRadius(i)
1380                    }
1381                })
1382            }
1383        }, {}], 17: [function (t, e, a) {
1384            "use strict";
1385            e.exports = function (t) {
1386                var e = t.helpers, a = t.defaults;
1387                a.doughnut = {
1388                    animation: {animateRotate: !0, animateScale: !1},
1389                    aspectRatio: 1,
1390                    hover: {mode: "single"},
1391                    legendCallback: function (t) {
1392                        var e = [];
1393                        e.push('<ul class="' + t.id + '-legend">');
1394                        var a = t.data, i = a.datasets, n = a.labels;
1395                        if (i.length)for (var o = 0; o < i[0].data.length; ++o)e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '"></span>'), n[o] && e.push(n[o]), e.push("</li>");
1396                        return e.push("</ul>"), e.join("")
1397                    },
1398                    legend: {
1399                        labels: {
1400                            generateLabels: function (t) {
1401                                var a = t.data;
1402                                return a.labels.length && a.datasets.length ? a.labels.map(function (i, n) {
1403                                    var o = t.getDatasetMeta(0), r = a.datasets[0], l = o.data[n], s = l && l.custom || {}, d = e.getValueAtIndexOrDefault, u = t.options.elements.arc, c = s.backgroundColor ? s.backgroundColor : d(r.backgroundColor, n, u.backgroundColor), h = s.borderColor ? s.borderColor : d(r.borderColor, n, u.borderColor), f = s.borderWidth ? s.borderWidth : d(r.borderWidth, n, u.borderWidth);
1404                                    return {
1405                                        text: i,
1406                                        fillStyle: c,
1407                                        strokeStyle: h,
1408                                        lineWidth: f,
1409                                        hidden: isNaN(r.data[n]) || o.data[n].hidden,
1410                                        index: n
1411                                    }
1412                                }) : []
1413                            }
1414                        }, onClick: function (t, e) {
1415                            var a, i, n, o = e.index, r = this.chart;
1416                            for (a = 0, i = (r.data.datasets || []).length; i > a; ++a)n = r.getDatasetMeta(a), n.data[o] && (n.data[o].hidden = !n.data[o].hidden);
1417                            r.update()
1418                        }
1419                    },
1420                    cutoutPercentage: 50,
1421                    rotation: Math.PI * -.5,
1422                    circumference: 2 * Math.PI,
1423                    tooltips: {
1424                        callbacks: {
1425                            title: function () {
1426                                return ""
1427                            }, label: function (t, a) {
1428                                var i = a.labels[t.index], n = ": " + a.datasets[t.datasetIndex].data[t.index];
1429                                return e.isArray(i) ? (i = i.slice(), i[0] += n) : i += n, i
1430                            }
1431                        }
1432                    }
1433                }, a.pie = e.clone(a.doughnut), e.extend(a.pie, {cutoutPercentage: 0}), t.controllers.doughnut = t.controllers.pie = t.DatasetController.extend({
1434                    dataElementType: t.elements.Arc,
1435                    linkScales: e.noop,
1436                    getRingIndex: function (t) {
1437                        for (var e = 0, a = 0; t > a; ++a)this.chart.isDatasetVisible(a) && ++e;
1438                        return e
1439                    },
1440                    update: function (t) {
1441                        var a = this, i = a.chart, n = i.chartArea, o = i.options, r = o.elements.ar
vendor: 5,012 bytes, lines 1441-1505
1441c, l = n.right - n.left - r.borderWidth, s = n.bottom - n.top - r.borderWidth, d = Math.min(l, s), u = {
1442                            x: 0,
1443                            y: 0
1444                        }, c = a.getMeta(), h = o.cutoutPercentage, f = o.circumference;
1445                        if (f < 2 * Math.PI) {
1446                            var g = o.rotation % (2 * Math.PI);
1447                            g += 2 * Math.PI * (g >= Math.PI ? -1 : g < -Math.PI ? 1 : 0);
1448                            var p = g + f, m = {x: Math.cos(g), y: Math.sin(g)}, b = {
1449                                x: Math.cos(p),
1450                                y: Math.sin(p)
1451                            }, v = 0 >= g && p >= 0 || g <= 2 * Math.PI && 2 * Math.PI <= p, x = g <= .5 * Math.PI && .5 * Math.PI <= p || g <= 2.5 * Math.PI && 2.5 * Math.PI <= p, y = g <= -Math.PI && -Math.PI <= p || g <= Math.PI && Math.PI <= p, k = g <= .5 * -Math.PI && .5 * -Math.PI <= p || g <= 1.5 * Math.PI && 1.5 * Math.PI <= p, S = h / 100, w = {
1452                                x: y ? -1 : Math.min(m.x * (m.x < 0 ? 1 : S), b.x * (b.x < 0 ? 1 : S)),
1453                                y: k ? -1 : Math.min(m.y * (m.y < 0 ? 1 : S), b.y * (b.y < 0 ? 1 : S))
1454                            }, M = {
1455                                x: v ? 1 : Math.max(m.x * (m.x > 0 ? 1 : S), b.x * (b.x > 0 ? 1 : S)),
1456                                y: x ? 1 : Math.max(m.y * (m.y > 0 ? 1 : S), b.y * (b.y > 0 ? 1 : S))
1457                            }, C = {width: .5 * (M.x - w.x), height: .5 * (M.y - w.y)};
1458                            d = Math.min(l / C.width, s / C.height), u = {x: (M.x + w.x) * -.5, y: (M.y + w.y) * -.5}
1459                        }
1460                        i.borderWidth = a.getMaxBorderWidth(c.data), i.outerRadius = Math.max((d - i.borderWidth) / 2, 0), i.innerRadius = Math.max(h ? i.outerRadius / 100 * h : 1, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), i.offsetX = u.x * i.outerRadius, i.offsetY = u.y * i.outerRadius, c.total = a.calculateTotal(), a.outerRadius = i.outerRadius - i.radiusLength * a.getRingIndex(a.index), a.innerRadius = a.outerRadius - i.radiusLength, e.each(c.data, function (e, i) {
1461                            a.updateElement(e, i, t)
1462                        })
1463                    },
1464                    updateElement: function (t, a, i) {
1465                        var n = this, o = n.chart, r = o.chartArea, l = o.options, s = l.animation, d = (r.left + r.right) / 2, u = (r.top + r.bottom) / 2, c = l.rotation, h = l.rotation, f = n.getDataset(), g = i && s.animateRotate ? 0 : t.hidden ? 0 : n.calculateCircumference(f.data[a]) * (l.circumference / (2 * Math.PI)), p = i && s.animateScale ? 0 : n.innerRadius, m = i && s.animateScale ? 0 : n.outerRadius, b = e.getValueAtIndexOrDefault;
1466                        e.extend(t, {
1467                            _datasetIndex: n.index,
1468                            _index: a,
1469                            _model: {
1470                                x: d + o.offsetX,
1471                                y: u + o.offsetY,
1472                                startAngle: c,
1473                                endAngle: h,
1474                                circumference: g,
1475                                outerRadius: m,
1476                                innerRadius: p,
1477                                label: b(f.label, a, o.data.labels[a])
1478                            }
1479                        });
1480                        var v = t._model;
1481                        this.removeHoverStyle(t), i && s.animateRotate || (0 === a ? v.startAngle = l.rotation : v.startAngle = n.getMeta().data[a - 1]._model.endAngle, v.endAngle = v.startAngle + v.circumference), t.pivot()
1482                    },
1483                    removeHoverStyle: function (e) {
1484                        t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc)
1485                    },
1486                    calculateTotal: function () {
1487                        var t, a = this.getDataset(), i = this.getMeta(), n = 0;
1488                        return e.each(i.data, function (e, i) {
1489                            t = a.data[i], isNaN(t) || e.hidden || (n += Math.abs(t))
1490                        }), n
1491                    },
1492                    calculateCircumference: function (t) {
1493                        var e = this.getMeta().total;
1494                        return e > 0 && !isNaN(t) ? 2 * Math.PI * (t / e) : 0
1495                    },
1496                    getMaxBorderWidth: function (t) {
1497                        for (var e, a, i = 0, n = this.index, o = t.length, r = 0; o > r; r++)e = t[r]._model ? t[r]._model.borderWidth : 0, a = t[r]._chart ? t[r]._chart.config.data.datasets[n].hoverBorderWidth : 0, i = e > i ? e : i, i = a > i ? a : i;
1498                        return i
1499                    }
1500                })
1501            }
1502        }, {}], 18: [function (t, e, a) {
1503            "use strict";
1504            e.exports = function (t) {
1505                function e(t, e) {
1506                    return a.getValueOrDefault(t.showLine, e.showLines)
1507                }
1508
1509                var a = t.helpers;
1510                t.defaults.line = {
1511                    showLines: !0,
1512                    spanGaps: !1,
1513                    hover: {mode: "label"},
1514                    scales: {xAxes: [{type: "category", id: "x-axis-0"}], yAxes: [{type: "linear", id: "y-axis-0"}]}
1515                }, t.controllers.line = t.DatasetController.extend({
1516                    datasetElementType: t.elements.Line,
1517                    dataElementType: t.elements.Point,
1518                    update: function (t) {
1519                        var i, n, o, r = this, l = r.getMeta(), s = l.dataset, d = l.data || [], u = r.chart.options, c = u.elements.line, h = r.getScaleForId(l.yAxisID), f = r.getDataset(), g = e(f, u);
1520                        for (g && (o = s.custom || {}, void 0 !== f.tension && void 0 === f.lineTension && (f.lineTension = f.tension), s._scale = h, s._datasetIndex = r.index, s._children = d, s._model = {
1521                            spanGaps: f.spanGaps ? f.spanGaps : u.spanGaps,
1522                            tension: o.tension ? o.tension : a.getValueOrDefault(f.lineTension, c.tension),
1523                            backgroundColor: o.backgroundColor ? o.backgroundColor : f.backgroundColor || c.backgroundColor,
1524                            borderWidth: o.borderWidth ? o.borderWidth : f.borderWidth || c.borderWidth,
1525                            borderColor: o.borderColor ? o.borderColor : f.borderColor || c.borderColor,
1526                            borderCapStyle: o.borderCapStyle ? o.borderCapStyle : f.borderCapStyle || c.borderCapStyle,
1527                            borderDash: o.borderDash ? o.borderDash : f.borderDash || c.borderDash,
1528                            borderDashOffset: o.borderDashOffset ? o.borderDashOffset : f.borderDashOffset || c.borderDashOffset,
1529                            borderJoinStyle: o.borderJoinStyle ? o.borderJoinStyle : f.borderJoinStyle || c.borderJoinStyle,
1530                            fill: o.fill ? o.fill : void 0 !== f.fill ? f.fill : c.fill,
1531                            steppedLine: o.steppedLine ? o.steppedLine : a.getValueOrDefault(f.steppedLine, c.stepped),
1532                            cubicInterpolationMode: o.cubicInterpolationMode ? o.cubicInterpolationMode : a.getValueOrDefault(f.cubicInterpolationMode, c.cubicInterpolationMode),
1533                            scaleTop: h.top,
1534                            scaleBottom: h.bottom,
1535                            scaleZero: h.getBasePixel()
1536                        }, s.pivot()), i = 0, n = d.length; n > i; ++i)r.updateElement(d[i], i, t);
1537                        for (g && 0 !== s._model.tension && r.updateBezierControlPoints(), i = 0, n = d.length; n > i; ++i)d[i].pivot()
1538                    },
1539                    getPointBackgroundColor: function (t, e) {
1540                        var i = this.chart.options.elements.point.backgroundColor, n = this.getDataset(), o = t.custom || {};
1541                        return o.backgroundColor ? i = o.backgroundColor : n.pointBackgroundColor ? i = a.getValueAtIndexOrDefault(n.pointBackgroundColor, e, i) : n.backgroundColor && (i = n.backgroundColor), i
1542                    },
1543                    getPointBorderColor: function (t, e) {
1544                        var i = this.chart.options.elements.point.borderColor, n = this.getDataset(), o = t.custom || {};
1545                        return o.borderColor ? i = o.borderColor : n.pointBorderColor ? i = a.getValueAtIndexOrDefault(n.pointBorderColor, e, i) : n.borderColor && (i = n.borderColor), i
1546                    },
1547                    getPointBorderWidth: function (t, e) {
1548                        var i = this.chart.options.elements.point.borderWidth, n = this.getDataset(), o = t.custom || {};
1549                        return o.borderWidth ? i = o.borderWidth : n.pointBorderWidth ? i = a.getValueAtIndexOrDefault(n.pointBorderWidth, e, i) : n.borderWidth && (i = n.borderWidth), i
1550                    },
1551                    updateElement: function (t, e, i) {
1552                        var n, o, r = this, l = r.getMeta(), s = t.custom || {}, d = r.getDataset(), u = r.index, c = d.data[e], h = r.getScaleForId(l.yAxisID), f = r.getScaleForId(l.xAxisID), g = r.chart.options.elements.point, p = r.chart.data.labels || [], m = 1 === p.length || 1 === d.data.length || r.chart.isCombo;
1553                        void 0 !== d.radius && void 0 === d.pointRadius && (d.pointRadius = d.radius), void 0 !== d.hitRadius && void 0 === d.pointHitRadius && (d.pointHitRadius = d.hitRadius), n = f.getPixelForValue("object" == typeof c ? c : NaN, e, u, m), o = i ? h.getBasePixel() : r.calculatePointY(c, e, u), t._xScale = f, t._yScale = h, t._datasetIndex = u, t._index = e, t._model = {
1554                            x: n,
1555                            y: o,
1556                            skip: s.skip || isNaN(n) || isNaN(o),
1557                            radius: s.radius || a.getValueAtIndexOrDefault(d.pointRadius, e, g.radius),
1558                            pointStyle: s.pointStyle || a.getValueAtIndexOrDefault(d.pointStyle, e, g.pointStyle),
1559                            backgroundColor: r.getPointBackgroun
1559dColor(t, e),
1560                            borderColor: r.getPointBorderColor(t, e),
1561                            borderWidth: r.getPointBorderWidth(t, e),
1562                            tension: l.dataset._model ? l.dataset._model.tension : 0,
1563                            steppedLine: l.dataset._model ? l.dataset._model.steppedLine : !1,
1564                            hitRadius: s.hitRadius || a.getValueAtIndexOrDefault(d.pointHitRadius, e, g.hitRadius)
1565                        }
1566                    },
1567                    calculatePointY: function (t, e, a) {
1568                        var i, n, o, r = this, l = r.chart, s = r.getMeta(), d = r.getScaleForId(s.yAxisID), u = 0, c = 0;
1569                        if (d.options.stacked) {
1570                            for (i = 0; a > i; i++)if (n = l.data.datasets[i], o = l.getDatasetMeta(i), "line" === o.type && o.yAxisID === d.id && l.isDatasetVisible(i)) {
1571                                var h = Number(d.getRightValue(n.data[e]));
1572                                0 > h ? c += h || 0 : u += h || 0
1573                            }
1574                            var f = Number(d.getRightValue(t));
1575                            return 0 > f ? d.getPixelForValue(c + f) : d.getPixelForValue(u + f)
1576                        }
1577                        return d.getPixelForValue(t)
1578                    },
1579                    updateBezierControlPoints: function () {
1580                        function t(t, e, a) {
1581                            return Math.max(Math.min(t, a), e)
1582                        }
1583
1584                        var e, i, n, o, r, l = this, s = l.getMeta(), d = l.chart.chartArea, u = s.data || [];
1585                        if (s.dataset._model.spanGaps && (u = u.filter(function (t) {
1586                                return !t._model.skip
1587                            })), "monotone" === s.dataset._model.cubicInterpolationMode)a.splineCurveMonotone(u); else for (e = 0, i = u.length; i > e; ++e)n = u[e], o = n._model, r = a.splineCurve(a.previousItem(u, e)._model, o, a.nextItem(u, e)._model, s.dataset._model.tension), o.controlPointPreviousX = r.previous.x, o.controlPointPreviousY = r.previous.y, o.controlPointNextX = r.next.x, o.controlPointNextY = r.next.y;
1588                        if (l.chart.options.elements.line.capBezierPoints)for (e = 0, i = u.length; i > e; ++e)o = u[e]._model, o.controlPointPreviousX = t(o.controlPointPreviousX, d.left, d.right), o.controlPointPreviousY = t(o.controlPointPreviousY, d.top, d.bottom), o.controlPointNextX = t(o.controlPointNextX, d.left, d.right), o.controlPointNextY = t(o.controlPointNextY, d.top, d.bottom)
1589                    },
1590                    draw: function (t) {
1591                        var a, i, n = this, o = n.getMeta(), r = o.data || [], l = t || 1;
1592                        for (a = 0, i = r.length; i > a; ++a)r[a].transition(l);
1593                        for (e(n.getDataset(), n.chart.options) && o.dataset.transition(l).draw(), a = 0, i = r.length; i > a; ++a)r[a].draw()
1594                    },
1595                    setHoverStyle: function (t) {
1596                        var e = this.chart.data.datasets[t._datasetIndex], i = t._index, n = t.custom || {}, o = t._model;
1597                        o.radius = n.hoverRadius || a.getValueAtIndexOrDefault(e.pointHoverRadius, i, this.chart.options.elements.point.hoverRadius), o.backgroundColor = n.hoverBackgroundColor || a.getValueAtIndexOrDefault(e.pointHoverBackgroundColor, i, a.getHoverColor(o.backgroundColor)), o.borderColor = n.hoverBorderColor || a.getValueAtIndexOrDefault(e.pointHoverBorderColor, i, a.getHoverColor(o.borderColor)), o.borderWidth = n.hoverBorderWidth || a.getValueAtIndexOrDefault(e.pointHoverBorderWidth, i, o.borderWidth)
1598                    },
1599                    removeHoverStyle: function (t) {
1600                        var e = this, i = e.chart.data.datasets[t._datasetIndex], n = t._index, o = t.custom || {}, r = t._model;
1601                        void 0 !== i.radius && void 0 === i.pointRadius && (i.pointRadius = i.radius), r.radius = o.radius || a.getValueAtIndexOrDefault(i.pointRadius, n, e.chart.options.elements.point.radius), r.backgroundColor = e.getPointBackgroun
vendor: 9,435 bytes, lines 1601-1741
1601dColor(t, n), r.borderColor = e.getPointBorderColor(t, n), r.borderWidth = e.getPointBorderWidth(t, n)
1602                    }
1603                })
1604            }
1605        }, {}], 19: [function (t, e, a) {
1606            "use strict";
1607            e.exports = function (t) {
1608                var e = t.helpers;
1609                t.defaults.polarArea = {
1610                    scale: {type: "radialLinear", lineArc: !0, ticks: {beginAtZero: !0}},
1611                    animation: {animateRotate: !0, animateScale: !0},
1612                    startAngle: -.5 * Math.PI,
1613                    aspectRatio: 1,
1614                    legendCallback: function (t) {
1615                        var e = [];
1616                        e.push('<ul class="' + t.id + '-legend">');
1617                        var a = t.data, i = a.datasets, n = a.labels;
1618                        if (i.length)for (var o = 0; o < i[0].data.length; ++o)e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '"></span>'), n[o] && e.push(n[o]), e.push("</li>");
1619                        return e.push("</ul>"), e.join("")
1620                    },
1621                    legend: {
1622                        labels: {
1623                            generateLabels: function (t) {
1624                                var a = t.data;
1625                                return a.labels.length && a.datasets.length ? a.labels.map(function (i, n) {
1626                                    var o = t.getDatasetMeta(0), r = a.datasets[0], l = o.data[n], s = l.custom || {}, d = e.getValueAtIndexOrDefault, u = t.options.elements.arc, c = s.backgroundColor ? s.backgroundColor : d(r.backgroundColor, n, u.backgroundColor), h = s.borderColor ? s.borderColor : d(r.borderColor, n, u.borderColor), f = s.borderWidth ? s.borderWidth : d(r.borderWidth, n, u.borderWidth);
1627                                    return {
1628                                        text: i,
1629                                        fillStyle: c,
1630                                        strokeStyle: h,
1631                                        lineWidth: f,
1632                                        hidden: isNaN(r.data[n]) || o.data[n].hidden,
1633                                        index: n
1634                                    }
1635                                }) : []
1636                            }
1637                        }, onClick: function (t, e) {
1638                            var a, i, n, o = e.index, r = this.chart;
1639                            for (a = 0, i = (r.data.datasets || []).length; i > a; ++a)n = r.getDatasetMeta(a), n.data[o].hidden = !n.data[o].hidden;
1640                            r.update()
1641                        }
1642                    },
1643                    tooltips: {
1644                        callbacks: {
1645                            title: function () {
1646                                return ""
1647                            }, label: function (t, e) {
1648                                return e.labels[t.index] + ": " + t.yLabel
1649                            }
1650                        }
1651                    }
1652                }, t.controllers.polarArea = t.DatasetController.extend({
1653                    dataElementType: t.elements.Arc,
1654                    linkScales: e.noop,
1655                    update: function (t) {
1656                        var a = this, i = a.chart, n = i.chartArea, o = a.getMeta(), r = i.options, l = r.elements.arc, s = Math.min(n.right - n.left, n.bottom - n.top);
1657                        i.outerRadius = Math.max((s - l.borderWidth / 2) / 2, 0), i.innerRadius = Math.max(r.cutoutPercentage ? i.outerRadius / 100 * r.cutoutPercentage : 1, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), a.outerRadius = i.outerRadius - i.radiusLength * a.index, a.innerRadius = a.outerRadius - i.radiusLength, o.count = a.countVisibleElements(), e.each(o.data, function (e, i) {
1658                            a.updateElement(e, i, t)
1659                        })
1660                    },
1661                    updateElement: function (t, a, i) {
1662                        for (var n = this, o = n.chart, r = n.getDataset(), l = o.options, s = l.animation, d = o.scale, u = e.getValueAtIndexOrDefault, c = o.data.labels, h = n.calculateCircumference(r.data[a]), f = d.xCenter, g = d.yCenter, p = 0, m = n.getMeta(), b = 0; a > b; ++b)isNaN(r.data[b]) || m.data[b].hidden || ++p;
1663                        var v = l.startAngle, x = t.hidden ? 0 : d.getDistanceFromCenterForValue(r.data[a]), y = v + h * p, k = y + (t.hidden ? 0 : h), S = s.animateScale ? 0 : d.getDistanceFromCenterForValue(r.data[a]);
1664                        e.extend(t, {
1665                            _datasetIndex: n.index,
1666                            _index: a,
1667                            _scale: d,
1668                            _model: {
1669                                x: f,
1670                                y: g,
1671                                innerRadius: 0,
1672                                outerRadius: i ? S : x,
1673                                startAngle: i && s.animateRotate ? v : y,
1674                                endAngle: i && s.animateRotate ? v : k,
1675                                label: u(c, a, c[a])
1676                            }
1677                        }), n.removeHoverStyle(t), t.pivot()
1678                    },
1679                    removeHoverStyle: function (e) {
1680                        t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc)
1681                    },
1682                    countVisibleElements: function () {
1683                        var t = this.getDataset(), a = this.getMeta(), i = 0;
1684                        return e.each(a.data, function (e, a) {
1685                            isNaN(t.data[a]) || e.hidden || i++
1686                        }), i
1687                    },
1688                    calculateCircumference: function (t) {
1689                        var e = this.getMeta().count;
1690                        return e > 0 && !isNaN(t) ? 2 * Math.PI / e : 0
1691                    }
1692                })
1693            }
1694        }, {}], 20: [function (t, e, a) {
1695            "use strict";
1696            e.exports = function (t) {
1697                var e = t.helpers;
1698                t.defaults.radar = {
1699                    aspectRatio: 1,
1700                    scale: {type: "radialLinear"},
1701                    elements: {line: {tension: 0}}
1702                }, t.controllers.radar = t.DatasetController.extend({
1703                    datasetElementType: t.elements.Line,
1704                    dataElementType: t.elements.Point,
1705                    linkScales: e.noop,
1706                    update: function (t) {
1707                        var a = this, i = a.getMeta(), n = i.dataset, o = i.data, r = n.custom || {}, l = a.getDataset(), s = a.chart.options.elements.line, d = a.chart.scale;
1708                        void 0 !== l.tension && void 0 === l.lineTension && (l.lineTension = l.tension), e.extend(i.dataset, {
1709                            _datasetIndex: a.index,
1710                            _children: o,
1711                            _loop: !0,
1712                            _model: {
1713                                tension: r.tension ? r.tension : e.getValueOrDefault(l.lineTension, s.tension),
1714                                backgroundColor: r.backgroundColor ? r.backgroundColor : l.backgroundColor || s.backgroundColor,
1715                                borderWidth: r.borderWidth ? r.borderWidth : l.borderWidth || s.borderWidth,
1716                                borderColor: r.borderColor ? r.borderColor : l.borderColor || s.borderColor,
1717                                fill: r.fill ? r.fill : void 0 !== l.fill ? l.fill : s.fill,
1718                                borderCapStyle: r.borderCapStyle ? r.borderCapStyle : l.borderCapStyle || s.borderCapStyle,
1719                                borderDash: r.borderDash ? r.borderDash : l.borderDash || s.borderDash,
1720                                borderDashOffset: r.borderDashOffset ? r.borderDashOffset : l.borderDashOffset || s.borderDashOffset,
1721                                borderJoinStyle: r.borderJoinStyle ? r.borderJoinStyle : l.borderJoinStyle || s.borderJoinStyle,
1722                                scaleTop: d.top,
1723                                scaleBottom: d.bottom,
1724                                scaleZero: d.getBasePosition()
1725                            }
1726                        }), i.dataset.pivot(), e.each(o, function (e, i) {
1727                            a.updateElement(e, i, t)
1728                        }, a), a.updateBezierControlPoints()
1729                    },
1730                    updateElement: function (t, a, i) {
1731                        var n = this, o = t.custom || {}, r = n.getDataset(), l = n.chart.scale, s = n.chart.options.elements.point, d = l.getPointPositionForValue(a, r.data[a]);
1732                        e.extend(t, {
1733                            _datasetIndex: n.index,
1734                            _index: a,
1735                            _scale: l,
1736                            _model: {
1737                                x: i ? l.xCenter : d.x,
1738                                y: i ? l.yCenter : d.y,
1739                                tension: o.tension ? o.tension : e.getValueOrDefault(r.tension, n.chart.options.elements.line.tension),
1740                                radius: o.radius ? o.radius : e.getValueAtIndexOrDefault(r.pointRadius, a, s.radius),
1741                                backgroundColor: o.backgroundColor ? o.backgroundColor : e.getValueAtIndexOrDefault(r.pointBackgroun
1741dColor, a, s.backgroundColor),
1742                                borderColor: o.borderColor ? o.borderColor : e.getValueAtIndexOrDefault(r.pointBorderColor, a, s.borderColor),
1743                                borderWidth: o.borderWidth ? o.borderWidth : e.getValueAtIndexOrDefault(r.pointBorderWidth, a, s.borderWidth),
1744                                pointStyle: o.pointStyle ? o.pointStyle : e.getValueAtIndexOrDefault(r.pointStyle, a, s.pointStyle),
1745                                hitRadius: o.hitRadius ? o.hitRadius : e.getValueAtIndexOrDefault(r.hitRadius, a, s.hitRadius)
1746                            }
1747                        }), t._model.skip = o.skip ? o.skip : isNaN(t._model.x) || isNaN(t._model.y)
1748                    },
1749                    updateBezierControlPoints: function () {
1750                        var t = this.chart.chartArea, a = this.getMeta();
1751                        e.each(a.data, function (i, n) {
1752                            var o = i._model, r = e.splineCurve(e.previousItem(a.data, n, !0)._model, o, e.nextItem(a.data, n, !0)._model, o.tension);
1753                            o.controlPointPreviousX = Math.max(Math.min(r.previous.x, t.right), t.left), o.controlPointPreviousY = Math.max(Math.min(r.previous.y, t.bottom), t.top), o.controlPointNextX = Math.max(Math.min(r.next.x, t.right), t.left), o.controlPointNextY = Math.max(Math.min(r.next.y, t.bottom), t.top), i.pivot()
1754                        })
1755                    },
1756                    draw: function (t) {
1757                        var a = this.getMeta(), i = t || 1;
1758                        e.each(a.data, function (t) {
1759                            t.transition(i)
1760                        }), a.dataset.transition(i).draw(), e.each(a.data, function (t) {
1761                            t.draw()
1762                        })
1763                    },
1764                    setHoverStyle: function (t) {
1765                        var a = this.chart.data.datasets[t._datasetIndex], i = t.custom || {}, n = t._index, o = t._model;
1766                        o.radius = i.hoverRadius ? i.hoverRadius : e.getValueAtIndexOrDefault(a.pointHoverRadius, n, this.chart.options.elements.point.hoverRadius), o.backgroundColor = i.hoverBackgroundColor ? i.hoverBackgroundColor : e.getValueAtIndexOrDefault(a.pointHoverBackgroundColor, n, e.getHoverColor(o.backgroundColor)), o.borderColor = i.hoverBorderColor ? i.hoverBorderColor : e.getValueAtIndexOrDefault(a.pointHoverBorderColor, n, e.getHoverColor(o.borderColor)), o.borderWidth = i.hoverBorderWidth ? i.hoverBorderWidth : e.getValueAtIndexOrDefault(a.pointHoverBorderWidth, n, o.borderWidth)
1767                    },
1768                    removeHoverStyle: function (t) {
1769                        var a = this.chart.data.datasets[t._datasetIndex], i = t.custom || {}, n = t._index, o = t._model, r = this.chart.options.elements.point;
1770                        o.radius = i.radius ? i.radius : e.getValueAtIndexOrDefault(a.radius, n, r.radius), o.backgroundColor = i.backgroundColor ? i.backgroundColor : e.getValueAtIndexOrDefault(a.pointBackgroun
1770dColor, n, r.backgroundColor), o.borderColor = i.borderColor ? i.borderColor : e.getValueAtIndexOrDefault(a.pointBorderColor, n, r.borderColor), o.borderWidth = i.borderWidth ? i.borderWidth : e.getValueAtIndexOrDefault(a.pointBorderWidth, n, r.borderWidth)
1771                    }
1772                })
1773            }
1774        }, {}], 21: [function (t, e, a) {
1775            "use strict";
1776            e.exports = function (t) {
1777                var e = t.helpers;
1778                t.defaults.global.animation = {
1779                    duration: 1e3,
1780                    easing: "easeOutQuart",
1781                    onProgress: e.noop,
1782                    onComplete: e.noop
1783                }, t.Animation = t.Element.extend({
1784                    currentStep: null,
1785                    numSteps: 60,
1786                    easing: "",
1787                    render: null,
1788                    onAnimationProgress: null,
1789                    onAnimationComplete: null
1790                }), t.animationService = {
1791                    frameDuration: 17,
1792                    animations: [],
1793                    dropFrames: 0,
1794                    request: null,
1795                    addAnimation: function (t, e, a, i) {
1796                        var n = this;
1797                        i || (t.animating = !0);
1798                        for (var o = 0; o < n.animations.length; ++o)if (n.animations[o].chartInstance === t)return void(n.animations[o].animationObject = e);
1799                        n.animations.push({
1800                            chartInstance: t,
1801                            animationObject: e
1802                        }), 1 === n.animations.length && n.requestAnimationFrame()
1803                    },
1804                    cancelAnimation: function (t) {
1805                        var a = e.findIndex(this.animations, function (e) {
1806                            return e.chartInstance === t
1807                        });
1808                        -1 !== a && (this.animations.splice(a, 1), t.animating = !1)
1809                    },
1810                    requestAnimationFrame: function () {
1811                        var t = this;
1812                        null === t.request && (t.request = e.requestAnimFrame.call(window, function () {
1813                            t.request = null, t.startDigest()
1814                        }))
1815                    },
1816                    startDigest: function () {
1817                        var t = this, e = Date.now(), a = 0;
1818                        t.dropFrames > 1 && (a = Math.floor(t.dropFrames), t.dropFrames = t.dropFrames % 1);
1819                        for (var i = 0; i < t.animations.length;)null === t.animations[i].animationObject.currentStep && (t.animations[i].animationObject.currentStep = 0), t.animations[i].animationObject.currentStep += 1 + a, t.animations[i].animationObject.currentStep > t.animations[i].animationObject.numSteps && (t.animations[i].animationObject.currentStep = t.animations[i].animationObject.numSteps), t.animations[i].animationObject.render(t.animations[i].chartInstance, t.animations[i].animationObject), t.animations[i].animationObject.onAnimationProgress && t.animations[i].animationObject.onAnimationProgress.call && t.animations[i].animationObject.onAnimationProgress.call(t.animations[i].chartInstance, t.animations[i]), t.animations[i].animationObject.currentStep === t.animations[i].animationObject.numSteps ? (t.animations[i].animationObject.onAnimationComplete && t.animations[i].animationObject.onAnimationComplete.call && t.animations[i].animationObject.onAnimationComplete.call(t.animations[i].chartInstance, t.animations[i]), t.animations[i].chartInstance.animating = !1, t.animations.splice(i, 1)) : ++i;
1820                        var n = Date.now(), o = (n - e) / t.frameDuration;
1821                        t.dropFrames += o, t.animations.length > 0 && t.requestAnimationFrame()
1822                    }
1823                }
1824            }
1825        }, {}], 22: [function (t, e, a) {
1826            "use strict";
1827            e.exports = function (t) {
1828                var e = t.canvasHelpers = {};
1829                e.drawPoint = function (t, e, a, i, n) {
1830                    var o, r, l, s, d, u;
1831                    if ("object" == typeof e && (o = e.toString(), "[object HTMLImageElement]" === o || "[object HTMLCanvasElement]" === o))return void t.drawImage(e, i - e.width / 2, n - e.height / 2);
1832                    if (!(isNaN(a) || 0 >= a)) {
1833                        switch (e) {
1834                            default:
1835                                t.beginPath(), t.arc(i, n, a, 0, 2 * Math.PI), t.closePath(), t.fill();
1836                                break;
1837                            case"triangle":
1838                                t.beginPath(), r = 3 * a / Math.sqrt(3), d = r * Math.sqrt(3) / 2, t.moveTo(i - r / 2, n + d / 3), t.lineTo(i + r / 2, n + d / 3), t.lineTo(i, n - 2 * d / 3), t.closePath(), t.fill();
1839                                break;
1840                            case"rect":
1841                                u = 1 / Math.SQRT2 * a, t.beginPath(), t.fillRect(i - u, n - u, 2 * u, 2 * u), t.strokeRect(i - u, n - u, 2 * u, 2 * u);
1842                                break;
1843                            case"rectRot":
1844                                u = 1 / Math.SQRT2 * a, t.beginPath(), t.moveTo(i - u, n), t.lineTo(i, n + u), t.lineTo(i + u, n), t.lineTo(i, n - u), t.closePath(), t.fill();
1845                                break;
1846                            case"cross":
1847                                t.beginPath(), t.moveTo(i, n + a), t.lineTo(i, n - a), t.moveTo(i - a, n), t.lineTo(i + a, n), t.closePath();
1848                                break;
1849                            case"crossRot":
1850                                t.beginPath(), l = Math.cos(Math.PI / 4) * a, s = Math.sin(Math.PI / 4) * a, t.moveTo(i - l, n - s), t.lineTo(i + l, n + s), t.moveTo(i - l, n + s), t.lineTo(i + l, n - s), t.closePath();
1851                                break;
1852                            case"star":
1853                                t.beginPath(), t.moveTo(i, n + a), t.lineTo(i, n - a), t.moveTo(i - a, n), t.lineTo(i + a, n), l = Math.cos(Math.PI / 4) * a, s = Math.sin(Math.PI / 4) * a, t.moveTo(i - l, n - s), t.lineTo(i + l, n + s), t.moveTo(i - l, n + s), t.lineTo(i + l, n - s), t.closePath();
1854                                break;
1855                            case"line":
1856                                t.beginPath(), t.moveTo(i - a, n), t.lineTo(i + a, n), t.closePath();
1857                                break;
1858                            case"dash":
1859                                t.beginPath(), t.moveTo(i, n), t.lineTo(i + a, n), t.closePath()
1860                        }
1861                        t.stroke()
1862                    }
1863                }
1864            }
1865        }, {}], 23: [function (t, e, a) {
1866            "use strict";
1867            e.exports = function (t) {
1868                function e(t, e) {
1869                    var a = r.getStyle(t, e), i = a && a.match(/(\d+)px/);
1870                    return i ? Number(i[1]) : void 0
1871                }
1872
1873                function a(t, a) {
1874                    var i = t.style, n = t.getAttribute("height"), o = t.getAttribute("width");
1875                    if (t._chartjs = {
1876                            initial: {
1877                                height: n,
1878                                width: o,
1879                                style: {display: i.display, height: i.height, width: i.width}
1880                            }
1881                        }, i.display = i.display || "block", null === o || "" === o) {
1882                        var r = e(t, "width");
1883                        void 0 !== r && (t.width = r)
1884                    }
1885                    if (null === n || "" === n)if ("" === t.style.height)t.height = t.width / (a.options.aspectRatio || 2); else {
1886                        var l = e(t, "height");
1887                        void 0 !== r && (t.height = l)
1888                    }
1889                    return t
1890                }
1891
1892                function i(t) {
1893                    if (t._chartjs) {
1894                        var e = t._chartjs.initial;
1895                        ["height", "width"].forEach(function (a) {
1896                            var i = e[a];
1897                            void 0 === i || null === i ? t.removeAttribute(a) : t.setAttribute(a, i)
1898                        }), r.each(e.style || {}, function (e, a) {
1899                            t.style[a] = e
1900                        }), t.width = t.width, delete t._chartjs
1901                    }
1902                }
1903
1904                function n(t, e) {
1905                    if ("string" == typeof t ? t = document.getElementById(t) : t.length && (t = t[0]), t && t.canvas && (t = t.canvas), t instanceof HTMLCanvasElement) {
1906                        var i = t.getContext && t.getContext("2d");
1907                        if (i instanceof CanvasRenderingContext2D)return a(t, e), i
1908                    }
1909                    return null
1910                }
1911
1912                function o(e) {
1913                    e = e || {};
1914                    var a = e.data = e.data || {};
1915                    return a.datasets = a.datasets || [], a.labels = a.labels || [], e.options = r.configMerge(t.defaults.global, t.defaults[e.type], e.options || {}), e
1916                }
1917
1918                var r = t.helpers;
1919                t.types = {}, t.instances = {}, t.controllers = {}, t.Controller = function (e, a, i) {
1920                    var l = this;
1921                    a = o(a);
1922                    var s = n(e, a), d = s && s.canvas, u = d && d.height, c = d && d.width;
1923                    return i.ctx = s, i.canvas = d, i.config = a, i.width = c, i.height = u, i.aspectRatio = u ? c / u : null, l.id = r.uid(), l.chart = i, l.config = a, l.options = a.options, l._bufferedRender = !1, t.instances[l.id] = l, Object.defineProperty(l, "data", {
1924                        get: function () {
1925                            return l.config.data
1926                        }
1927                    }), s && d ? (r.retinaScale(i), l.options.responsive && (r.addResizeListener(d.parentNode, function () {
1928                        l.resize()
1929                    }), l.resize(!0)), l.initialize(), l) : (console.error("Failed to create chart: can't acquire context from the given item"), l)
1930                }, r.extend(t.Controller.prototype, {
1931                    initialize: function () {
1932                        var e = this;
1933                        return t.plugins.notify("beforeInit", [e]), e.bindEvents(), e.ensureScalesHaveIDs(), e.buildOrUpdateControllers(), e.buildScales(), e.updateLayout(), e.resetElements(), e.initToolTip(), e.update(
1933), t.plugins.notify("afterInit", [e]), e
1934                    }, clear: function () {
1935                        return r.clear(this.chart), this
1936                    }, stop: function () {
1937                        return t.animationService.cancelAnimation(this), this
1938                    }, resize: function (e) {
1939                        var a = this, i = a.chart, n = a.options, o = i.canvas, l = n.maintainAspectRatio && i.aspectRatio || null, s = Math.floor(r.getMaximumWidth(o)), d = Math.floor(l ? s / l : r.getMaximumHeight(o));
1940                        if (i.width !== s || i.height !== d) {
1941                            o.width = i.width = s, o.height = i.height = d, o.style.width = s + "px", o.style.height = d + "px", r.retinaScale(i);
1942                            var u = {width: s, height: d};
1943                            t.plugins.notify("resize", [a, u]), a.options.onResize && a.options.onResize(a, u), e || (a.stop(), a.update(a.options.responsiveAnimationDuration))
1944                        }
1945                    }, ensureScalesHaveIDs: function () {
1946                        var t = this.options, e = t.scales || {}, a = t.scale;
1947                        r.each(e.xAxes, function (t, e) {
1948                            t.id = t.id || "x-axis-" + e
1949                        }), r.each(e.yAxes, function (t, e) {
1950                            t.id = t.id || "y-axis-" + e
1951                        }), a && (a.id = a.id || "scale")
1952                    }, buildScales: function () {
1953                        var e = this, a = e.options, i = e.scales = {}, n = [];
1954                        a.scales && (n = n.concat((a.scales.xAxes || []).map(function (t) {
1955                            return {options: t, dtype: "category"}
1956                        }), (a.scales.yAxes || []).map(function (t) {
1957                            return {options: t, dtype: "linear"}
1958                        }))), a.scale && n.push({
1959                            options: a.scale,
1960                            dtype: "radialLinear",
1961                            isDefault: !0
1962                        }), r.each(n, function (a) {
1963                            var n = a.options, o = r.getValueOrDefault(n.type, a.dtype), l = t.scaleService.getScaleConstructor(o);
1964                            if (l) {
1965                                var s = new l({id: n.id, options: n, ctx: e.chart.ctx, chart: e});
1966                                i[s.id] = s, a.isDefault && (e.scale = s)
1967                            }
1968                        }), t.scaleService.addScalesToLayout(this)
1969                    }, updateLayout: function () {
1970                        t.layoutService.update(this, this.chart.width, this.chart.height)
1971                    }, buildOrUpdateControllers: function () {
1972                        var e = this, a = [], i = [];
1973                        if (r.each(e.data.datasets, function (n, o) {
1974                                var r = e.getDatasetMeta(o);
1975                                r.type || (r.type = n.type || e.config.type), a.push(r.type), r.controller ? r.controller.updateIndex(o) : (r.controller = new t.controllers[r.type](e, o), i.push(r.controller))
1976                            }, e), a.length > 1)for (var n = 1; n < a.length; n++)if (a[n] !== a[n - 1]) {
1977                            e.isCombo = !0;
1978                            break
1979                        }
1980                        return i
1981                    }, resetElements: function () {
1982                        var t = this;
1983                        r.each(t.data.datasets, function (e, a) {
1984                            t.getDatasetMeta(a).controller.reset()
1985                        }, t)
1986                    }, reset: function () {
1987                        this.resetElements(), this.tooltip.initialize()
1988                    }, update: function (e, a) {
1989                        var i = this;
1990                        t.plugins.notify("beforeUpdate", [i]), i.tooltip._data = i.data;
1991                        var n = i.buildOrUpdateControllers();
1992                        r.each(i.data.datasets, function (t, e) {
1993                            i.getDatasetMeta(e).controller.buildOrUpdateElements()
1994                        }, i), t.layoutService.update(i, i.chart.width, i.chart.height), t.plugins.notify("afterScaleUpdate", [i]), r.each(n, function (t) {
1995                            t.reset()
1996                        }), i.updateDatasets(), t.plugins.notify("afterUpdate", [i]), i._bufferedRender ? i._bufferedRequest = {
1997                            lazy: a,
1998                            duration: e
1999                        } : i.render(e, a)
2000                    }, updateDatasets: function () {
2001                        var e, a, i = this;
2002                        if (t.plugins.notify("beforeDatasetsUpdate", [i])) {
2003                            for (e = 0, a = i.data.datasets.length; a > e;
2003 ++e)i.getDatasetMeta(e).controller.update();
2004                            t.plugins.notify("afterDatasetsUpdate", [i])
2005                        }
2006                    }, render: function (e, a) {
2007                        var i = this;
2008                        t.plugins.notify("beforeRender", [i]);
2009                        var n = i.options.animation;
2010                        if (n && ("undefined" != typeof e && 0 !== e || "undefined" == typeof e && 0 !== n.duration)) {
2011                            var o = new t.Animation;
2012                            o.numSteps = (e || n.duration) / 16.66, o.easing = n.easing, o.render = function (t, e) {
2013                                var a = r.easingEffects[e.easing], i = e.currentStep / e.numSteps, n = a(i);
2014                                t.draw(n, i, e.currentStep)
2015                            }, o.onAnimationProgress = n.onProgress, o.onAnimationComplete = n.onComplete, t.animationService.addAnimation(i, o, e, a)
2016                        } else i.draw(), n && n.onComplete && n.onComplete.call && n.onComplete.call(i);
2017                        return i
2018                    }, draw: function (e) {
2019                        var a = this, i = e || 1;
2020                        a.clear(), t.plugins.notify("beforeDraw", [a, i]), r.each(a.boxes, function (t) {
2021                            t.draw(a.chartArea)
2022                        }, a), a.scale && a.scale.draw(), t.plugins.notify("beforeDatasetsDraw", [a, i]), r.each(a.data.datasets, function (t, i) {
2023                            a.isDatasetVisible(i) && a.getDatasetMeta(i).controller.draw(e)
2024                        }, a, !0), t.plugins.notify("afterDatasetsDraw", [a, i]), a.tooltip.transition(i).draw(), t.plugins.notify("afterDraw", [a, i])
2025                    }, getElementAtEvent: function (e) {
2026                        return t.Interaction.modes.single(this, e)
2027                    }, getElementsAtEvent: function (e) {
2028                        return t.Interaction.modes.label(this, e, {intersect: !0})
2029                    }, getElementsAtXAxis: function (e) {
2030                        return t.Interaction.modes["x-axis"](this, e, {intersect: !0})
2031                    }, getElementsAtEventForMode: function (e, a, i) {
2032                        var n = t.Interaction.modes[a];
2033                        return "function" == typeof n ? n(this, e, i) : []
2034                    }, getDatasetAtEvent: function (e) {
2035                        return t.Interaction.modes.dataset(this, e)
2036                    }, getDatasetMeta: function (t) {
2037                        var e = this, a = e.data.datasets[t];
2038                        a._meta || (a._meta = {});
2039                        var i = a._meta[e.id];
2040                        return i || (i = a._meta[e.id] = {
2041                            type: null,
2042                            data: [],
2043                            dataset: null,
2044                            controller: null,
2045                            hidden: null,
2046                            xAxisID: null,
2047                            yAxisID: null
2048                        }), i
2049                    }, getVisibleDatasetCount: function () {
2050                        for (var t = 0, e = 0, a = this.data.datasets.length; a > e; ++e)this.isDatasetVisible(e) && t++;
2051                        return t
2052                    }, isDatasetVisible: function (t) {
2053                        var e = this.getDatasetMeta(t);
2054                        return "boolean" == typeof e.hidden ? !e.hidden : !this.data.datasets[t].hidden
2055                    }, generateLegend: function () {
2056                        return this.options.legendCallback(this)
2057                    }, destroy: function () {
2058                        var e, a, n, o = this, l = o.chart.canvas;
2059                        for (o.stop(), a = 0, n = o.data.datasets.length; n > a; ++a)e = o.getDatasetMeta(a), e.controller && (e.controller.destroy(), e.controller = null);
2060                        l && (r.unbindEvents(o, o.events), r.removeResizeListener(l.parentNode), r.clear(o.chart), i(l), o.chart.canvas = null, o.chart.ctx = null), t.plugins.notify("destroy", [o]), delete t.instances[o.id]
2061                    }, toBase64Image: function () {
2062                        return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments)
2063                    }, initToolTip: function () {
2064                        var e = this;
2065                        e.tooltip = new t.Tooltip({
2066                            _chart: e.chart,
2067                            _chartInstance: e,
2068                            _data: e.data,
2069                            _options: e.options.tooltips
2070                        }, e), e.tooltip.initialize()
2071                    }, bindEvents: function () {
2072                        var t = this;
2073                        r.bindEvents(t, t.options.events, function (e) {
2074                            t.eventHandler(e)
2075                        })
2076                    }, updateHoverStyle: function (t, e, a) {
2077                        var i, n, o, r = a ? "setHoverStyle" : "removeHoverStyle";
2078                        for (n = 0, o = t.length; o > n; ++n)i = t[n], i && this.getDatasetMeta(i._datasetIndex).controller[r](i)
2079                    }, eventHandler: function (t) {
2080                        var e = this, a = e.legend, i = e.tooltip, n = e.options.hover;
2081                        e._bufferedRender = !0, e._bufferedRequest = null;
2082                        var o = e.handleEvent(t);
2083                        o |= a && a.handleEvent(t), o |= i && i.handleEvent(t);
2084                        var r = e._bufferedRequest;
2085                        return r ? e.render(r.duration, r.lazy) : o && !e.animating && (e.stop(), e.render(n.animationDuration, !0)), e._bufferedRender = !1, e._bufferedRequest = null, e
2086                    }, handleEvent: function (t) {
2087                        var e = this, a = e.options || {}, i = a.hover, n = !1;
2088                        return e.lastActive = e.lastActive || [], "mouseout" === t.type ? e.active = [] : e.active = e.getElementsAtEventForMode(t, i.mode, i), i.onHover && i.onHover.call(e, e.active), ("mouseup" === t.type || "click" === t.type) && a.onClick && a.onClick.call(e, t, e.active), e.lastActive.length && e.updateHoverStyle(e.lastActive, i.mode, !1), e.active.length && i.mode && e.updateHoverStyle(e.active, i.mode, !0), n = !r.arrayEquals(e.active, e.lastActive), e.lastActive = e.active, n
2089                    }
2090                })
2091            }
2092        }, {}], 24: [function (t, e, a) {
2093            "use strict";
2094            e.exports = function (t) {
2095                function e(t, e) {
2096                    return t._chartjs ? void t._chartjs.listeners.push(e) : (Object.defineProperty(t, "_chartjs", {
2097                        configurable: !0,
2098                        enumerable: !1,
2099                        value: {listeners: [e]}
2100                    }
2100), void n.forEach(function (e) {
2101                        var a = "onData" + e.charAt(0).toUpperCase() + e.slice(1), n = t[e];
2102                        Object.defineProperty(t, e, {
2103                            configurable: !0, enumerable: !1, value: function () {
2104                                var e = Array.prototype.slice.call(arguments), o = n.apply(this, e);
2105                                return i.each(t._chartjs.listeners, function (t) {
2106                                    "function" == typeof t[a] && t[a].apply(t, e)
2107                                }), o
2108                            }
2109                        })
2110                    }))
2111                }
2112
2113                function a(t, e) {
2114                    var a = t._chartjs;
2115                    if (a) {
2116                        var i = a.listeners, o = i.indexOf(e);
2117                        -1 !== o && i.splice(o, 1), i.length > 0 || (n.forEach(function (e) {
2118                            delete t[e]
2119                        }), delete t._chartjs)
2120                    }
2121                }
2122
2123                var i = t.helpers, n = ["push", "pop", "shift", "splice", "unshift"];
2124                t.DatasetController = function (t, e) {
2125                    this.initialize(t, e)
2126                }, i.extend(t.DatasetController.prototype, {
2127                    datasetElementType: null,
2128                    dataElementType: null,
2129                    initialize: function (t, e) {
2130                        var a = this;
2131                        a.chart = t, a.index = e, a.linkScales(), a.addElements()
2132                    },
2133                    updateIndex: function (t) {
2134                        this.index = t
2135                    },
2136                    linkScales: function () {
2137                        var t = this, e = t.getMeta(), a = t.getDataset();
2138                        null === e.xAxisID && (e.xAxisID = a.xAxisID || t.chart.options.scales.xAxes[0].id), null === e.yAxisID && (e.yAxisID = a.yAxisID || t.chart.options.scales.yAxes[0].id)
2139                    },
2140                    getDataset: function () {
2141                        return this.chart.data.datasets[this.index]
2142                    },
2143                    getMeta: function () {
2144                        return this.chart.getDatasetMeta(this.index)
2145                    },
2146                    getScaleForId: function (t) {
2147                        return this.chart.scales[t]
2148                    },
2149                    reset: function () {
2150                        this.update(!0)
2151                    },
2152                    destroy: function () {
2153                        this._data && a(this._data, this)
2154                    },
2155                    createMetaDataset: function () {
2156                        var t = this, e = t.datasetElementType;
2157                        return e && new e({_chart: t.chart.chart, _datasetIndex: t.index})
2158                    },
2159                    createMetaData: function (t) {
2160                        var e = this, a = e.dataElementType;
2161                        return a && new a({_chart: e.chart.chart, _datasetIndex: e.index, _index: t})
2162                    },
2163                    addElements: function () {
2164                        var t, e, a = this, i = a.getMeta(), n = a.getDataset().data || [], o = i.data;
2165                        for (t = 0, e = n.length; e > t; ++t)o[t] = o[t] || a.createMetaData(t);
2166                        i.dataset = i.dataset || a.createMetaDataset()
2167                    },
2168                    addElementAndReset: function (t) {
2169                        var e = this.createMetaData(t);
2170                        this.getMeta().data.splice(t, 0, e), this.updateElement(e, t, !0)
2171                    },
2172                    buildOrUpdateElements: function () {
2173                        var t = this, i = t.getDataset(), n = i.data || (i.data = []);
2174                        t._data !== n && (t._data && a(t._data, t), e(n, t), t._data = n), t.resyncElements()
2175                    },
2176                    update: i.noop,
2177                    draw: function (t) {
2178                        var e, a, i = t || 1, n = this.getMeta().data;
2179                        for (e = 0, a = n.length; a > e; ++e)n[e].transition(i).draw()
2180                    },
2181                    removeHoverStyle: function (t, e) {
2182                        var a = this.chart.data.datasets[t._datasetIndex], n = t._index, o = t.custom || {}, r = i.getValueAtIndexOrDefault, l = t._model;
2183                        l.backgroundColor = o.backgroundColor ? o.backgroundColor : r(a.backgroundColor, n, e.backgroundColor), l.borderColor = o.borderColor ? o.borderColor : r(a.borderColor, n, e.borderColor), l.borderWidth = o.borderWidth ? o.borderWidth : r(a.borderWidth, n, e.borderWidth)
2184                    },
2185                    setHoverStyle: function (t) {
2186                        var e = this.chart.data.datasets[t._datasetIndex], a = t._index, n = t.custom || {}, o = i.getValueAtIndexOrDefault, r = i.getHoverColor, l = t._model;
2187                        l.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : o(e.hoverBackgroundColor, a, r(l.backgroundColor)), l.borderColor = n.hoverBorderColor ? n.hoverBorderColor : o(e.hoverBorderColor, a, r(l.borderColor)), l.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : o(e.hoverBorderWidth, a, l.borderWidth)
2188                    },
2189                    resyncElements: function () {
2190                        var t = this, e = t.getMeta(), a = t.getDataset().data, i = e.data.length, n = a.length;
2191                        i > n ? e.data.splice(n, i - n) : n > i && t.insertElements(i, n - i)
2192                    },
2193                    insertElements: function (t, e) {
2194                        for (var a = 0; e > a; ++a)this.addElementAndReset(t + a)
2195                    },
2196                    onDataPush: function () {
2197                        this.insertElements(this.getDataset().data.length - 1, arguments.length)
2198                    },
2199                    onDataPop: function () {
2200                        this.getMeta().data.pop()
2201                    },
2202                    onDataShift: function () {
2203                        this.getMeta().data.shift()
2204                    },
2205                    onDataSplice: function (t, e) {
2206                        this.getMeta().data.splice(t, e), this.insertElements(t, arguments.length - 2)
2207                    },
2208                    onDataUnshift: function () {
2209                        this.insertElements(0, arguments.length)
2210                    }
2211                }), t.DatasetController.extend = i.inherits
2212            }
2213        }, {}], 25: [function (t, e, a) {
2214            "use strict";
2215            e.exports = function (t) {
2216                var e = t.helpers;
2217                t.elements = {}, t.Element = function (t) {
2218                    e.extend(this, t), this.initialize.apply(this, arguments)
2219                }, e.extend(t.Element.prototype, {
2220                    initialize: function () {
2221                        this.hidden = !1
2222                    }, pivot: function () {
2223                        var t = this;
2224                        return t._view || (t._view = e.clone(t._model)), t._start = e.clone(t._view), t
2225                    }, transition: function (t) {
2226                        var a = this;
2227                        return a._view || (a._view = e.clone(a._model)), 1 === t ? (a._view = a._model, a._start = null, a) : (a._start || a.pivot(), e.each(a._model, function (i, n) {
2228                            if ("_" === n[0]); else if (a._view.hasOwnProperty(n))if (i === a._view[n]); else if ("string" == typeof i)try {
2229                                var o = e.color(a._model[n]).mix(e.color(a._start[n]), t);
2230                                a._view[n] = o.rgbString()
2231                            } catch (r) {
2232                                a._view[n] = i
2233                            } else if ("number" == typeof i) {
2234                                var l = void 0 !== a._start[n] && isNaN(a._start[n]) === !1 ? a._start[n] : 0;
2235                                a._view[n] = (a._model[n] - l) * t + l
2236                            } else a._view[n] = i; else"number" != typeof i || isNaN(a._view[n]) ? a._view[n] = i : a._view[n] = i * t
2237                        }, a), a)
2238                    }, tooltipPosition: function () {
2239                        return {x: this._model.x, y: this._model.y}
2240                    }, hasValue: function () {
2241                        return e.isNumber(this._model.x) && e.isNumber(this._model.y)
2242                    }
2243                }), t.Element.extend = e.inherits
2244            }
2245        }, {}], 26: [function (t, e, a) {
2246            "use strict";
2247            var i = t(3);
2248            e.exports = function (t) {
2249                function e(t, e, a) {
2250                    var i;
2251                    return "string" == typeof t ? (i = parseInt(t, 10), -1 !== t.indexOf("%") && (i = i / 100 * e.parentNode[a])) : i = t, i
2252                }
2253
2254                function a(t) {
2255                    return void 0 !== t && null !== t && "none" !== t
2256                }
2257
2258                function n(t, i, n) {
2259                    var o = document.defaultView, r = t.parentNode, l = o.getComputedStyle(t)[i], s = o.getComputedStyle(r)[i], d = a(l), u = a(s), c = Number.POSITIVE_INFINITY;
2260                    return d || u ? Math.min(d ? e(l, t, n) : c, u ? e(s, r, n) : c) : "none"
2261                }
2262
2263                var o = t.helpers = {};
2264                o.each = function (t, e, a, i) {
2265                    var n, r;
2266                    if (o.isArray(t))if (r = t.length, i)for (n = r - 1; n >= 0; n--)e.call(a, t[n], n); else for (n = 0; r > n; n++)e.call(a, t[n], n); else if ("object" == typeof t) {
2267                        var l = Object.keys(t);
2268                        for (r = l.length, n = 0; r > n; n++)e.call(a, t[l[n]], l[n])
2269                    }
2270                }, o.clone = function (t) {
2271                    var e = {};
2272                    return o.each(t, function (t, a) {
2273                        o.isArray(t) ? e[a] = t.slice(0) : "object" == typeof t && null !== t ? e[a] = o.clone(t) : e[a] = t
2274                    }), e
2275                }, o.extend = function (t) {
2276                    for (var e = function (e, a) {
2277                        t[a] = e
2278                    }, a = 1, i = arguments.length; i > a; a++)o.each(arguments[a], e);
2279                    return t
2280                }, o.configMerge = function (e) {
2281                    var a = o.clone(e);
2282                    return o.each(Array.prototype.slice.call(arguments, 1), function (e) {
2283                        o.each(e, function (e, i) {
2284                            var n = a.hasOwnProperty(i), r = n ? a[i] : {};
2285                            "scales" === i ? a[i] = o.scaleMerge(r, e) : "scale" === i ? a[i] = o.configMerge(r, t.scaleService.getScaleDefaults(e.type), e) : !n || "object" != typeof r || o.isArray(r) || null === r || "object" != typeof e || o.isArray(e) ? a[i] = e : a[i] = o.configMerge(r, e)
2286                        })
2287                    }), a
2288                }, o.scaleMerge = function (e, a) {
2289                    var i = o.clone(e);
2290                    return o.each(a, function (e, a) {
2291                        "xAxes" === a || "yAxes" === a ? i.hasOwnProperty(a) ? o.each(e, function (e, n) {
2292                            var r = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear"), l = t.scaleService.getScaleDefaults(r);
2293                            n >= i[a].length || !i[a][n].type ? i[a].push(o.configMerge(l, e)) : e.type && e.type !== i[a][n].type ? i[a][n] = o.configMerge(i[a][n], l, e) : i[a][n] = o.configMerge(i[a][n], e)
2294                        }) : (i[a] = [], o.each(e, function (e) {
2295                            var n = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear");
2296                            i[a].push(o.configMerge(t.scaleService.getScaleDefaults(n), e))
2297                        })) : i.hasOwnProperty(a) && "object" == typeof i[a] && null !== i[a] && "object" == typeof e ? i[a] = o.configMerge(i[a], e) : i[a] = e
2298                    }), i
2299                }, o.getValueAtIndexOrDefault = function (t, e, a) {
2300                    return void 0 === t || null === t ? a : o.isArray(t) ? e < t.length ? t[e] : a : t
2301                }, o.getValueOrDefault = function (t, e) {
2302                    return void 0 === t ? e : t
2303                }, o.indexOf = Array.prototype.indexOf ? function (t, e) {
2304                    return t.indexOf(e)
2305                } : function (t, e) {
2306                    for (var a = 0, i = t.length; i > a; ++a)if (t[a] === e)return a;
2307                    return -1
2308                }, o.where = function (t, e) {
2309                    if (o.isArray(t) && Array.prototype.filter)return t.filter(e);
2310                    var a = [];
2311                    return o.each(t, function (t) {
2312                        e(t) && a.push(t)
2313                    }), a
2314                }, o.findIndex = Array.prototype.findIndex ? function (t, e, a) {
2315                    return t.findIndex(e, a)
2316                } : function (t, e, a) {
2317                    a = void 0 === a ? t : a;
2318                    for (var i = 0, n = t.length; n > i; ++i)if (e.call(a, t[i], i, t))return i;
2319                    return -1
2320                }, o.findNextWhere = function (t, e, a) {
2321                    (void 0 === a || null === a) && (a = -1);
2322                    for (var i = a + 1; i < t.length; i++) {
2323                        var n = t[i];
2324                        if (e(n))return n
2325                    }
2326                }, o.findPreviousWhere = function (t, e, a) {
2327                    (void 0 === a || null === a) && (a = t.length);
2328                    for (var i = a - 1; i >= 0; i--) {
2329                        var n = t[i];
2330                        if (e(n))return n
2331                    }
2332                }, o.inherits = function (t) {
2333                    var e = this, a = t && t.hasOwnProperty("constructor") ? t.constructor : function () {
2334                        return e.apply(this, arguments)
2335                    }, i = function () {
2336                        this.constructor = a
2337                    };
2338                    return i.prototype = e.prototype, a.prototype = new i, a.extend = o.inherits, t && o.extend(a.prototype, t), a.__super__ = e.prototype, a
2339                }, o.noop = function () {
2340                }, o.uid = function () {
2341                    var t = 0;
2342                    return function () {
2343                        return t++
2344                    }
2345                }(), o.isNumber = function (t) {
2346                    return !isNaN(parseFloat(t)) && isFinite(t)
2347                }, o.almostEquals = function (t, e, a) {
2348                    return Math.abs(t - e) < a
2349                }, o.max = function (t) {
2350                    return t.reduce(function (t, e) {
2351                        return isNaN(e) ? t : Math.max(t, e)
2352                    }, Number.NEGATIVE_INFINITY)
2353                }, o.min = function (t) {
2354                    return t.reduce(function (t, e) {
2355                        return isNaN(e) ? t : Math.min(t, e)
2356                    }, Number.POSITIVE_INFINITY)
2357                }, o.sign = Math.sign ? function (t) {
2358                    return Math.sign(t)
2359                } : function (t) {
2360                    return t = +t, 0 === t || isNaN(t) ? t : t > 0 ? 1 : -1
2361                }, o.log10 = Math.log10 ? function (t) {
2362                    return Math.log10(t)
2363                } : function (t) {
2364                    return Math.log(t) / Math.LN10
2365                }, o.toRadians = function (t) {
2366                    return t * (Math.PI / 180)
2367                }, o.toDegrees = function (t) {
2368                    return t * (180 / Math.PI)
2369                }, o.getAngleFromPoint = function (t, e) {
2370                    var a = e.x - t.x, i = e.y - t.y, n = Math.sqrt(a * a + i * i), o = Math.atan2(i, a);
2371                    return o < -.5 * Math.PI && (o += 2 * Math.PI), {angle: o, distance: n}
2372                }, o.distanceBetweenPoints = function (t, e) {
2373                    return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2))
2374                }, o.aliasPixel = function (t) {
2375                    return t % 2 === 0 ? 0 : .5
2376                }, o.splineCurve = function (t, e, a, i) {
2377                    var n = t.skip ? e : t, o = e, r = a.skip ? e : a, l = Math.sqrt(Math.pow(o.x - n.x, 2) + Math.pow(o.y - n.y, 2)), s = Math.sqrt(Math.pow(r.x - o.x, 2) + Math.pow(r.y - o.y, 2)), d = l / (l + s), u = s / (l + s);
2378                    d = isNaN(d) ? 0 : d, u = isNaN(u) ? 0 : u;
2379                    var c = i * d, h = i * u;
2380                    return {
2381                        previous: {x: o.x - c * (r.x - n.x), y: o.y - c * (r.y - n.y)},
2382                        next: {x: o.x + h * (r.x - n.x), y: o.y + h * (r.y - n.y)}
2383                    }
2384                }, o.EPSILON = Number.EPSILON || 1e-14, o.splineCurveMonotone = function (t) {
2385                    var e, a, i, n, r = (t || []).map(function (t) {
2386                        return {model: t._model, deltaK: 0, mK: 0}
2387                    }), l = r.length;
2388                    for (e = 0; l > e; ++e)i = r[e], i.model.skip || (a = e > 0 ? r[e - 1] : null, n = l - 1 > e ? r[e + 1] : null, n && !n.model.skip && (i.deltaK = (n.model.y - i.model.y) / (n.model.x - i.model.x)), !a || a.model.skip ? i.mK = i.deltaK : !n || n.model.skip ? i.mK = a.deltaK : this.sign(a.deltaK) !== this.sign(i.deltaK) ? i.mK = 0 : i.mK = (a.deltaK + i.deltaK) / 2);
2389                    var s, d, u, c;
2390                    for (e = 0; l - 1 > e; ++e)i = r[e], n = r[e + 1], i.model.skip || n.model.skip || (o.almostEquals(i.deltaK, 0, this.EPSILON) ? i.mK = n.mK = 0 : (s = i.mK / i.deltaK, d = n.mK / i.deltaK, c = Math.pow(s, 2) + Math.pow(d, 2), 9 >= c || (u = 3 / Math.sqrt(c), i.mK = s * u * i.deltaK, n.mK = d * u * i.deltaK)));
2391                    var h;
2392                    for (e = 0; l > e; ++e)i = r[e], i.model.skip || (a = e > 0 ? r[e - 1] : null, n = l - 1 > e ? r[e + 1] : null, a && !a.model.skip && (h = (i.model.x - a.model.x) / 3, i.model.controlPointPreviousX = i.model.x - h, i.model.controlPointPreviousY = i.model.y - h * i.mK), n && !n.model.skip && (h = (n.model.x - i.model.x) / 3, i.model.controlPointNextX = i.model.x + h, i.model.controlPointNextY = i.model.y + h * i.mK))
2393                }, o.nextItem = function (t, e, a) {
2394                    return a ? e >= t.length - 1 ? t[0] : t[e + 1] : e >= t.length - 1 ? t[t.length - 1] : t[e + 1]
2395                }, o.previousItem = function (t, e, a) {
2396                    return a ? 0 >= e ? t[t.length - 1] : t[e - 1] : 0 >= e ? t[0] : t[e - 1]
2397                }, o.niceNum = function (t, e) {
2398                    var a, i = Math.floor(o.log10(t)), n = t / Math.pow(10, i);
2399                    return a = e ? 1.5 > n ? 1 : 3 > n ? 2 : 7 > n ? 5 : 10 : 1 >= n ? 1 : 2 >= n ? 2 : 5 >= n ? 5 : 10, a * Math.pow(10, i)
2400                };
2401                var r = o.easingEffects = {
2402                    linear: function (t) {
2403                        return t
2404                    }, easeInQuad: function (t) {
2405                        return t * t
2406                    }, easeOutQuad: function (t) {
2407                        return -1 * t * (t - 2)
2408                    }, easeInOutQuad: function (t) {
2409                        return (t /= .5) < 1 ? .5 * t * t : -0.5 * (--t * (t - 2) - 1)
2410                    }, easeInCubic: function (t) {
2411                        return t * t * t
2412                    }, easeOutCubic: function (t) {
2413                        return 1 * ((t = t / 1 - 1) * t * t + 1)
2414                    }, easeInOutCubic: function (t) {
2415                        return (t /= .5) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
2416                    }, easeInQuart: function (t) {
2417                        return t * t * t * t
2418                    }, easeOutQuart: function (t) {
2419                        return -1 * ((t = t / 1 - 1) * t * t * t - 1)
2420                    }, easeInOutQuart: function (t) {
2421                        return (t /= .5) < 1 ? .5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2)
2422                    }, easeInQuint: function (t) {
2423                        return 1 * (t /= 1) * t * t * t * t
2424                    }, easeOutQuint: function (t) {
2425                        return 1 * ((t = t / 1 - 1) * t * t * t * t + 1)
2426                    }, easeInOutQuint: function (t) {
2427                        return (t /= .5) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
2428                    }, easeInSine: function (t) {
2429                        return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1
2430                    }, easeOutSine: function (t) {
2431                        return 1 * Math.sin(t / 1 * (Math.PI / 2))
2432                    }, easeInOutSine: function (t) {
2433                        return -0.5 * (Math.cos(Math.PI * t / 1) - 1)
2434                    }, easeInExpo: function (t) {
2435                        return 0 === t ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1))
2436                    }, easeOutExpo: function (t) {
2437                        return 1 === t ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1)
2438                    }, easeInOutExpo: function (t) {
2439                        return 0 === t ? 0 : 1 === t ? 1 : (t /= .5) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (-Math.pow(2, -10 * --t) + 2)
2440                    }, easeInCirc: function (t) {
2441                        return t >= 1 ? t : -1 * (Math.sqrt(1 - (t /= 1) * t) - 1)
2442                    }, easeOutCirc: function (t) {
2443                        return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t)
2444                    }, easeInOutCirc: function (t) {
2445                        return (t /= .5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
2446                    }, easeInElastic: function (t) {
2447                        var e = 1.70158, a = 0, i = 1;
2448                        return 0 === t ? 0 : 1 === (t /= 1) ? 1 : (a || (a = .3), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a)))
2449                    }, easeOutElastic: function (t) {
2450                        var e = 1.70158, a = 0, i = 1;
2451                        return 0 === t ? 0 : 1 === (t /= 1) ? 1 : (a || (a = .3), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), i * Math.pow(2, -10 * t) * Math.sin((1 * t - e) * (2 * Math.PI) / a) + 1)
2452                    }, easeInOutElastic: function (t) {
2453                        var e = 1.70158, a = 0, i = 1;
2454                        return 0 === t ? 0 : 2 === (t /= .5) ? 1 : (a || (a = 1 * (.3 * 1.5)), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), 1 > t ? -.5 * (i * Math.pow(2, 10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a)) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a) * .5 + 1)
2455                    }, easeInBack: function (t) {
2456                        var e = 1.70158;
2457                        return 1 * (t /= 1) * t * ((e + 1) * t - e)
2458                    }, easeOutBack: function (t) {
2459                        var e = 1.70158;
2460                        return 1 * ((t = t / 1 - 1) * t * ((e + 1) * t + e) + 1)
2461                    }, easeInOutBack: function (t) {
2462                        var e = 1.70158;
2463                        return (t /= .5) < 1 ? .5 * (t * t * (((e *= 1.525) + 1) * t - e)) : .5 * ((t -= 2) * t * (((e *= 1.525) + 1) * t + e) + 2)
2464                    }, easeInBounce: function (t) {
2465                        return 1 - r.easeOutBounce(1 - t)
2466                    }, easeOutBounce: function (t) {
2467                        return (t /= 1) < 1 / 2.75 ? 1 * (7.5625 * t * t) : 2 / 2.75 > t ? 1 * (7.5625 * (t -= 1.5 / 2.75) * t + .75) : 2.5 / 2.75 > t ? 1 * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) : 1 * (7.5625 * (t -= 2.625 / 2.75) * t + .984375)
2468                    }, easeInOutBounce: function (t) {
2469                        return .5 > t ? .5 * r.easeInBounce(2 * t) : .5 * r.easeOutBounce(2 * t - 1) + .5
2470                    }
2471                };
2472                o.requestAnimFrame = function () {
2473                    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (t) {
2474                            return window.setTimeout(t, 1e3 / 60)
2475                        }
2476                }(), o.cancelAnimFrame = function () {
2477                    return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function (t) {
2478                            return window.clearTimeout(t, 1e3 / 60)
2479                        }
2480                }(), o.getRelativePosition = function (t, e) {
2481                    var a, i, n = t.originalEvent || t, r = t.currentTarget || t.srcElement, l = r.getBoundingClientRect(), s = n.touches;
2482                    s && s.length > 0 ? (a = s[0].clientX, i = s[0].clientY) : (a = n.clientX, i = n.clientY);
2483                    var d = parseFloat(o.getStyle(r, "padding-left")), u = parseFloat(o.getStyle(r, "padding-top")), c = parseFloat(o.getStyle(r, "padding-right")), h = parseFloat(o.getStyle(r, "padding-bottom")), f = l.right - l.left - d - c, g = l.bottom - l.top - u - h;
2484                    return a = Math.round((a - l.left - d) / f * r.width / e.currentDevicePixelRatio), i = Math.round((i - l.top - u) / g * r.height / e.currentDevicePixelRatio), {
2485                        x: a,
2486                        y: i
2487                    }
2488                }, o.addEvent = function (t, e, a) {
2489                    t.addEventListener ? t.addEventListener(e, a) : t.attachEvent ? t.attachEvent("on" + e, a) : t["on" + e] = a
2490                }, o.removeEvent = function (t, e, a) {
2491                    t.removeEventListener ? t.removeEventListener(e, a, !1) : t.detachEvent ? t.detachEvent("on" + e, a) : t["on" + e] = o.no
2491op
2492                }, o.bindEvents = function (t, e, a) {
2493                    var i = t.events = t.events || {};
2494                    o.each(e, function (e) {
2495                        i[e] = function () {
2496                            a.apply(t, arguments)
2497                        }, o.addEvent(t.chart.canvas, e, i[e])
2498                    })
2499                }, o.unbindEvents = function (t, e) {
2500                    var a = t.chart.canvas;
2501                    o.each(e, function (t, e) {
2502                        o.removeEvent(a, e, t)
2503                    })
2504                }, o.getConstraintWidth = function (t) {
2505                    return n(t, "max-width", "clientWidth")
2506                }, o.getConstraintHeight = function (t) {
2507                    return n(t, "max-height", "clientHeight")
2508                }, o.getMaximumWidth = function (t) {
2509                    var e = t.parentNode, a = parseInt(o.getStyle(e, "padding-left"), 10), i = parseInt(o.getStyle(e, "padding-right"), 10), n = e.clientWidth - a - i, r = o.getConstraintWidth(t);
2510                    return isNaN(r) ? n : Math.min(n, r)
2511                }, o.getMaximumHeight = function (t) {
2512                    var e = t.parentNode, a = parseInt(o.getStyle(e, "padding-top"), 10), i = parseInt(o.getStyle(e, "padding-bottom"), 10), n = e.clientHeight - a - i, r = o.getConstraintHeight(t);
2513                    return isNaN(r) ? n : Math.min(n, r)
2514                }, o.getStyle = function (t, e) {
2515                    return t.currentStyle ? t.currentStyle[e] : document.defaultView.getComputedStyle(t, null).getPropertyValue(e)
2516                }, o.retinaScale = function (t) {
2517                    var e = t.currentDevicePixelRatio = window.devicePixelRatio || 1;
2518                    if (1 !== e) {
2519                        var a = t.canvas, i = t.height, n = t.width;
2520                        a.height = i * e, a.width = n * e, t.ctx.scale(e, e), a.style.height = i + "px", a.style.width = n + "px"
2521                    }
2522                }, o.clear = function (t) {
2523                    t.ctx.clearRect(0, 0, t.width, t.height)
2524                }, o.fontString = function (t, e, a) {
2525                    return e + " " + t + "px " + a
2526                }, o.longestText = function (t, e, a, i) {
2527                    i = i || {};
2528                    var n = i.data = i.data || {}, r = i.garbageCollect = i.garbageCollect || [];
2529                    i.font !== e && (n = i.data = {}, r = i.garbageCollect = [], i.font = e), t.font = e;
2530                    var l = 0;
2531                    o.each(a, function (e) {
2532                        void 0 !== e && null !== e && o.isArray(e) !== !0 ? l = o.measureText(t, n, r, l, e) : o.isArray(e) && o.each(e, function (e) {
2533                            void 0 === e || null === e || o.isArray(e) || (l = o.measureText(t, n, r, l, e))
2534                        })
2535                    });
2536                    var s = r.length / 2;
2537                    if (s > a.length) {
2538                        for (var d = 0; s > d; d++)delete n[r[d]];
2539                        r.splice(0, s)
2540                    }
2541                    return l
2542                }, o.measureText = function (t, e, a, i, n) {
2543                    var o = e[n];
2544                    return o || (o = e[n] = t.measureText(n).width, a.push(n)), o > i && (i = o), i
2545                }, o.numberOfLabelLines = function (t) {
2546                    var e = 1;
2547                    return o.each(t, function (t) {
2548                        o.isArray(t) && t.length > e && (e = t.length)
2549                    }), e
2550                }, o.drawRoundedRectangle = function (t, e, a, i, n, o) {
2551                    t.beginPath(), t.moveTo(e + o, a), t.lineTo(e + i - o, a), t.quadraticCurveTo(e + i, a, e + i, a + o), t.lineTo(e + i, a + n - o), t.quadraticCurveTo(e + i, a + n, e + i - o, a + n), t.lineTo(e + o, a + n), t.quadraticCurveTo(e, a + n, e, a + n - o), t.lineTo(e, a + o), t.quadraticCurveTo(e, a, e + o, a), t.closePath()
2552                }, o.color = function (e) {
2553                    return i ? i(e instanceof CanvasGradient ? t.defaults.global.defaultColor : e) : (console.error("Color.js not found!"), e)
2554                }, o.addResizeListener = function (t, e) {
2555                    var a = document.createElement("iframe");
2556                    a.className = "chartjs-hidden-iframe", a.style.cssText = "display:block;overflow:hidden;border:0;margin:0;top:0;left:0;bottom:0;right:0;height:100%;width:100%;position:absolute;pointer-events:none;z-index:-1;", a.tabIndex = -1;
2557                    var i = t._chartjs = {resizer: a, ticking: !1}, n = function () {
2558                        i.ticking || (i.ticking = !0, o.requestAnimFrame.call(window, function () {
2559                            return i.resizer ? (i.ticking = !1, e()) : void 0
2560                        }))
2561                    };
2562                    o.addEvent(a, "load", function () {
2563                        o.addEvent(a.contentWindow || a, "resize", n), n()
2564                    }), t.insertBefore(a, t.firstChild)
2565                }, o.removeResizeListener = function (t) {
2566                    if (t && t._chartjs) {
2567                        var e = t._chartjs.resizer;
2568                        e && (e.parentNode.removeChild(e), t._chartjs.resizer = null), delete t._chartjs
2569                    }
2570                }, o.isArray = Array.isArray ? function (t) {
2571                    return Array.isArray(t)
2572                } : function (t) {
2573                    return "[object Array]" === Object.prototype.toString.call(t)
2574                }, o.arrayEquals = function (t, e) {
2575                    var a, i, n, r;
2576                    if (!t || !e || t.length !== e.length)return !1;
2577                    for (a = 0, i = t.length; i > a; ++a)if (n = t[a], r = e[a], n instanceof Array && r instanceof Array) {
2578                        if (!o.arrayEquals(n, r))return !1
2579                    } else if (n !== r)return !1;
2580                    return !0
2581                }
2581, o.callCallback = function (t, e, a) {
2582                    t && "function" == typeof t.call && t.apply(a, e)
2583                }, o.getHoverColor = function (t) {
2584                    return t instanceof CanvasPattern ? t : o.color(t).saturate(.5).darken(.1).rgbString()
2585                }
2586            }
2587        }, {3: 3}], 27: [function (t, e, a) {
2588            "use strict";
2589            e.exports = function (t) {
2590                function e(t, e) {
2591                    var a, i, n, o, r, l = t.data.datasets;
2592                    for (i = 0, o = l.length; o > i; ++i)if (t.isDatasetVisible(i))for (a = t.getDatasetMeta(i), n = 0, r = a.data.length; r > n; ++n) {
2593                        var s = a.data[n];
2594                        s._view.skip || e(s)
2595                    }
2596                }
2597
2598                function a(t, a) {
2599                    var i = [];
2600                    return e(t, function (t) {
2601                        t.inRange(a.x, a.y) && i.push(t)
2602                    }), i
2603                }
2604
2605                function i(t, a, i, n) {
2606                    var r = Number.POSITIVE_INFINITY, l = [];
2607                    return n || (n = o.distanceBetweenPoints), e(t, function (t) {
2608                        if (!i || t.inRange(a.x, a.y)) {
2609                            var e = t.getCenterPoint(), o = n(a, e);
2610                            r > o ? (l = [t], r = o) : o === r && l.push(t)
2611                        }
2612                    }), l
2613                }
2614
2615                function n(t, e, n) {
2616                    var r = o.getRelativePosition(e, t.chart), l = function (t, e) {
2617                        return Math.abs(t.x - e.x)
2618                    }, s = n.intersect ? a(t, r) : i(t, r, !1, l), d = [];
2619                    return s.length ? (t.data.datasets.forEach(function (e, a) {
2620                        if (t.isDatasetVisible(a)) {
2621                            var i = t.getDatasetMeta(a), n = i.data[s[0]._index];
2622                            n && !n._view.skip && d.push(n)
2623                        }
2624                    }), d) : []
2625                }
2626
2627                var o = t.helpers;
2628                t.Interaction = {
2629                    modes: {
2630                        single: function (t, a) {
2631                            var i = o.getRelativePosition(a, t.chart), n = [];
2632                            return e(t, function (t) {
2633                                return t.inRange(i.x, i.y) ? (n.push(t), n) : void 0
2634                            }), n.slice(0, 1)
2635                        }, label: n, index: n, dataset: function (t, e, n) {
2636                            var r = o.getRelativePosition(e, t.chart), l = n.intersect ? a(t, r) : i(t, r, !1);
2637                            return l.length > 0 && (l = t.getDatasetMeta(l[0]._datasetIndex).data), l
2638                        }, "x-axis": function (t, e) {
2639                            return n(t, e, !0)
2640                        }, point: function (t, e) {
2641                            var i = o.getRelativePosition(e, t.chart);
2642                            return a(t, i)
2643                        }, nearest: function (t, e, a) {
2644                            var n = o.getRelativePosition(e, t.chart), r = i(t, n, a.intersect);
2645                            return r.length > 1 && r.sort(function (t, e) {
2646                                var a = t.getArea(), i = e.getArea(), n = a - i;
2647                                return 0 === n && (n = t._datasetIndex - e._datasetIndex), n
2648                            }), r.slice(0, 1)
2649                        }, x: function (t, a, i) {
2650                            var n = o.getRelativePosition(a, t.chart), r = [], l = !1;
2651                            return e(t, function (t) {
2652                                t.inXRange(n.x) && r.push(t), t.inRange(n.x, n.y) && (l = !0)
2653                            }), i.intersect && !l && (r = []), r
2654                        }, y: function (t, a, i) {
2655                            var n = o.getRelativePosition(a, t.chart), r = [], l = !1;
2656                            return e(t, function (t) {
2657                                t.inYRange(n.y) && r.push(t), t.inRange(n.x, n.y) && (l = !0)
2658                            }), i.intersect && !l && (r = []), r
2659                        }
2660                    }
2661                }
2662            }
2663        }, {}], 28: [function (t, e, a) {
2664            "use strict";
2665            e.exports = function () {
2666                var t = function (e, a) {
2667                    return this.controller = new t.Controller(e, a, this), this.controller
2668                };
2669                return t.defaults = {
2670                    global: {
2671                        responsive: !0,
2672                        responsiveAnimationDuration: 0,
2673                        maintainAspectRatio: !0,
2674                        events: ["mousemove", "mouseout", "click", "touchstart", "touchmove"],
2675                        hover: {onHover: null, mode: "nearest", intersect: !0, animationDuration: 400},
2676                        onClick: null,
2677                        defaultColor: "rgba(0,0,0,0.1)",
2678                        defaultFontColor: "#666",
2679                        defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
2680                        defaultFontSize: 12,
2681                        defaultFontStyle: "normal",
2682                        showLines: !0,
2683                        elements: {},
2684                        legendCallback: function (t) {
2685                            var e = [];
2686                            e.push('<ul class="' + t.id + '-legend">');
2687                            for (var a = 0; a < t.data.datasets.length;
2687 a++)e.push('<li><span style="background-color:' + t.data.datasets[a].backgroundColor + '"></span>'), t.data.datasets[a].label && e.push(t.data.datasets[a].label), e.push("</li>");
2688                            return e.push("</ul>"), e.join("")
2689                        }
2690                    }
2691                }, t.Chart = t, t
2692            }
2693        }, {}], 29: [function (t, e, a) {
2694            "use strict";
2695            e.exports = function (t) {
2696                var e = t.helpers;
2697                t.layoutService = {
2698                    defaults: {}, addBox: function (t, e) {
2699                        t.boxes || (t.boxes = []), t.boxes.push(e)
2700                    }, removeBox: function (t, e) {
2701                        t.boxes && t.boxes.splice(t.boxes.indexOf(e), 1)
2702                    }, update: function (t, a, i) {
2703                        function n(t) {
2704                            var e, a = t.isHorizontal();
2705                            a ? (e = t.update(t.options.fullWidth ? x : C, M), D -= e.height) : (e = t.update(w, S), C -= e.width), I.push({
2706                                horizontal: a,
2707                                minSize: e,
2708                                box: t
2709                            })
2710                        }
2711
2712                        function o(t) {
2713                            var a = e.findNextWhere(I, function (e) {
2714                                return e.box === t
2715                            });
2716                            if (a)if (t.isHorizontal()) {
2717                                var i = {left: A, right: T, top: 0, bottom: 0};
2718                                t.update(t.options.fullWidth ? x : C, y / 2, i)
2719                            } else t.update(a.minSize.width, D)
2720                        }
2721
2722                        function r(t) {
2723                            var a = e.findNextWhere(I, function (e) {
2724                                return e.box === t
2725                            }), i = {left: 0, right: 0, top: P, bottom: F};
2726                            a && t.update(a.minSize.width, D, i)
2727                        }
2728
2729                        function l(t) {
2730                            t.isHorizontal() ? (t.left = t.options.fullWidth ? u : A, t.right = t.options.fullWidth ? a - c : A + C, t.top = L, t.bottom = L + t.height, L = t.bottom) : (t.left = V, t.right = V + t.width, t.top = P, t.bottom = P + D, V = t.right)
2731                        }
2732
2733                        if (t) {
2734                            var s = t.options.layout, d = s ? s.padding : null, u = 0, c = 0, h = 0, f = 0;
2735                            isNaN(d) ? (u = d.left || 0, c = d.right || 0, h = d.top || 0, f = d.bottom || 0) : (u = d, c = d, h = d, f = d);
2736                            var g = e.where(t.boxes, function (t) {
2737                                return "left" === t.options.position
2738                            }), p = e.where(t.boxes, function (t) {
2739                                return "right" === t.options.position
2740                            }), m = e.where(t.boxes, function (t) {
2741                                return "top" === t.options.position
2742                            }), b = e.where(t.boxes, function (t) {
2743                                return "bottom" === t.options.position
2744                            }), v = e.where(t.boxes, function (t) {
2745                                return "chartArea" === t.options.position
2746                            });
2747                            m.sort(function (t, e) {
2748                                return (e.options.fullWidth ? 1 : 0) - (t.options.fullWidth ? 1 : 0)
2749                            }), b.sort(function (t, e) {
2750                                return (t.options.fullWidth ? 1 : 0) - (e.options.fullWidth ? 1 : 0)
2751                            });
2752                            var x = a - u - c, y = i - h - f, k = x / 2, S = y / 2, w = (a - k) / (g.length + p.length), M = (i - S) / (m.length + b.length), C = x, D = y, I = [];
2753                            e.each(g.concat(p, m, b), n);
2754                            var A = u, T = c, P = h, F = f;
2755                            e.each(g.concat(p), o), e.each(g, function (t) {
2756                                A += t.width
2757                            }), e.each(p, function (t) {
2758                                T += t.width
2759                            }), e.each(m.concat(b), o), e.each(m, function (t) {
2760                                P += t.height
2761                            }), e.each(b, function (t) {
2762                                F += t.height
2763                            }), e.each(g.concat(p), r), A = u, T = c, P = h, F = f, e.each(g, function (t) {
2764                                A += t.width
2765                            }), e.each(p, function (t) {
2766                                T += t.width
2767                            }), e.each(m, function (t) {
2768                                P += t.height
2769                            }), e.each(b, function (t) {
2770                                F += t.height
2771                            });
2772                            var _ = i - P - F, R = a - A - T;
2773                            (R !== C || _ !== D) && (e.each(g, function (t) {
2774                                t.height = _
2775                            }), e.each(p, function (t) {
2776                                t.height = _
2777                            }), e.each(m, function (t) {
2778                                t.options.fullWidth || (t.width = R)
2779                            }), e.each(b, function (t) {
2780                                t.options.fullWidth || (t.width = R)
2781                            }), D = _, C = R);
2782                            var V = u, L = h;
2783                            e.each(g.concat(m), l), V += C, L += D, e.each(p, l), e.each(b, l), t.chartArea = {
2784                                left: A,
2785                                top: P,
2786                                right: A + C,
2787                                bottom: P + D
2788                            }, e.each(v, function (e) {
2789                                e.left = t.chartArea.left, e.top = t.chartArea.top, e.right = t.chartArea.right, e.bottom = t.chartArea.bottom, e.update(C, D)
2790                            })
2791                        }
2792                    }
2793                }
2794            }
2795        }, {}], 30: [function (t, e, a) {
2796            "use strict";
2797            e.exports = function (t) {
2798                function e(t, e) {
2799                    return t.usePointStyle ? e * Math.SQRT2 : t.boxWidth
2800                }
2801
2802                var a = t.helpers, i = a.noop;
2803                t.defaults.global.legend = {
2804                    display: !0,
2805                    position: "top",
2806                    fullWidth: !0,
2807                    reverse: !1,
2808                    onClick: function (t, e) {
2809                        var a = e.datasetIndex, i = this.chart, n = i.getDatasetMeta(a);
2810                        n.hidden = null === n.hidden ? !i.data.datasets[a].hidden : null, i.update()
2811                    },
2812                    onHover: null,
2813                    labels: {
2814                        boxWidth: 40, padding: 10, generateLabels: function (t) {
2815                            var e = t.data;
2816                            return a.isArray(e.datasets) ? e.datasets.map(function (e, i) {
2817                                return {
2818                                    text: e.label,
2819                                    fillStyle: a.isArray(e.backgroundColor) ? e.backgroundColor[0] : e.backgroundColor,
2820                                    hidden: !t.isDatasetVisible(i),
2821                                    lineCap: e.borderCapStyle,
2822                                    lineDash: e.borderDash,
2823                                    lineDashOffset: e.borderDashOffset,
2824                                    lineJoin: e.borderJoinStyle,
2825                                    lineWidth: e.borderWidth,
2826                                    strokeStyle: e.borderColor,
2827                                    pointStyle: e.pointStyle,
2828                                    datasetIndex: i
2829                                }
2830                            }, this) : []
2831                        }
2832                    }
2833                }, t.Legend = t.Element.extend({
2834                    initialize: function (t) {
2835                        a.extend(this, t), this.legendHitBoxes = [], this.doughnutMode = !1
2836                    }, beforeUpdate: i, update: function (t, e, a) {
2837                        var i = this;
2838                        return i.beforeUpdate(), i.maxWidth = t, i.maxHeight = e, i.margins = a, i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize
2839                    }, afterUpdate: i, beforeSetDimensions: i, setDimensions: function () {
2840                        var t = this;
2841                        t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0, t.minSize = {
2842                            width: 0,
2843                            height: 0
2844                        }
2845                    }, afterSetDimensions: i, beforeBuildLabels: i, buildLabels: function () {
2846                        var t = this;
2847                        t.legendItems = t.options.labels.generateLabels.call(t, t.chart), t.options.reverse && t.legendItems.reverse()
2848                    }, afterBuildLabels: i, beforeFit: i, fit: function () {
2849                        var i = this, n = i.options, o = n.labels, r = n.display, l = i.ctx, s = t.defaults.global, d = a.getValueOrDefault, u = d(o.fontSize, s.defaultFontSize), c = d(o.fontStyle, s.defaultFontStyle), h = d(o.fontFamily, s.defaultFontFamily), f = a.fontString(u, c, h), g = i.legendHitBoxes = [], p 
2849= i.minSize, m = i.isHorizontal();
2850                        if (m ? (p.width = i.maxWidth, p.height = r ? 10 : 0) : (p.width = r ? 10 : 0, p.height = i.maxHeight), r)if (l.font = f, m) {
2851                            var b = i.lineWidths = [0], v = i.legendItems.length ? u + o.padding : 0;
2852                            l.textAlign = "left", l.textBaseline = "top", a.each(i.legendItems, function (t, a) {
2853                                var n = e(o, u), r = n + u / 2 + l.measureText(t.text).width;
2854                                b[b.length - 1] + r + o.padding >= i.width && (v += u + o.padding, b[b.length] = i.left), g[a] = {
2855                                    left: 0,
2856                                    top: 0,
2857                                    width: r,
2858                                    height: u
2859                                }, b[b.length - 1] += r + o.padding
2860                            }), p.height += v
2861                        } else {
2862                            var x = o.padding, y = i.columnWidths = [], k = o.padding, S = 0, w = 0, M = u + x;
2863                            a.each(i.legendItems, function (t, a) {
2864                                var i = e(o, u), n = i + u / 2 + l.measureText(t.text).width;
2865                                w + M > p.height && (k += S + o.padding, y.push(S), S = 0, w = 0), S = Math.max(S, n), w += M, g[a] = {
2866                                    left: 0,
2867                                    top: 0,
2868                                    width: n,
2869                                    height: u
2870                                }
2871                            }), k += S, y.push(S), p.width += k
2872                        }
2873                        i.width = p.width, i.height = p.height
2874                    }, afterFit: i, isHorizontal: function () {
2875                        return "top" === this.options.position || "bottom" === this.options.position
2876                    }, draw: function () {
2877                        var i = this, n = i.options, o = n.labels, r = t.defaults.global, l = r.elements.line, s = i.width, d = i.lineWidths;
2878                        if (n.display) {
2879                            var u, c = i.ctx, h = a.getValueOrDefault, f = h(o.fontColor, r.defaultFontColor), g = h(o.fontSize, r.defaultFontSize), p = h(o.fontStyle, r.defaultFontStyle), m = h(o.fontFamily, r.defaultFontFamily), b = a.fontString(g, p, m);
2880                            c.textAlign = "left", c.textBaseline = "top", c.lineWidth = .5, c.strokeStyle = f, c.fillStyle = f, c.font = b;
2881                            var v = e(o, g), x = i.legendHitBoxes, y = function (e, a, i) {
2882                                if (!(isNaN(v) || 0 >= v)) {
2883                                    c.save(), c.fillStyle = h(i.fillStyle, r.defaultColor), c.lineCap = h(i.lineCap, l.borderCapStyle), c.lineDashOffset = h(i.lineDashOffset, l.borderDashOffset), c.lineJoin = h(i.lineJoin, l.borderJoinStyle), c.lineWidth = h(i.lineWidth, l.borderWidth), c.strokeStyle = h(i.strokeStyle, r.defaultColor);
2884                                    var o = 0 === h(i.lineWidth, l.borderWidth);
2885                                    if (c.setLineDash && c.setLineDash(h(i.lineDash, l.borderDash)), n.labels && n.labels.usePointStyle) {
2886                                        var s = g * Math.SQRT2 / 2, d = s / Math.SQRT2, u = e + d, f = a + d;
2887                                        t.canvasHelpers.drawPoint(c, i.pointStyle, s, u, f)
2888                                    } else o || c.strokeRect(e, a, v, g), c.fillRect(e, a, v, g);
2889                                    c.restore()
2890                                }
2891                            }, k = function (t, e, a, i) {
2892                                c.fillText(a.text, v + g / 2 + t, e), a.hidden && (c.beginPath(), c.lineWidth = 2, c.moveTo(v + g / 2 + t, e + g / 2), c.lineTo(v + g / 2 + t + i, e + g / 2), c.stroke())
2893                            }, S = i.isHorizontal();
2894                            u = S ? {x: i.left + (s - d[0]) / 2, y: i.top + o.padding, line: 0} : {
2895                                x: i.left + o.padding,
2896                                y: i.top + o.padding,
2897                                line: 0
2898                            };
2899                            var w = g + o.padding;
2900                            a.each(i.legendItems, function (t, e) {
2901                                var a = c.measureText(t.text).width, n = v + g / 2 + a, r = u.x, l = u.y;
2902                                S ? r + n >= s && (l = u.y += w, u.line++, r = u.x = i.left + (s - d[u.line]) / 2) : l + w > i.bottom && (r = u.x = r + i.columnWidths[u.line] + o.padding, l = u.y = i.top, u.line++), y(r, l, t), x[e].left = r, x[e].top = l, k(r, l, t, a), S ? u.x += n + o.padding : u.y += w
2903                            })
2904                        }
2905                    }, handleEvent: function (t) {
2906                        var e = this, i = e.options, n = "mouseup" === t.type ? "click" : t.type, o = !1;
2907                        if ("mousemove" === n) {
2908                            if (!i.onHover)return
2909                        } else {
2910                            if ("click" !== n)return;
2911                            if (!i.onClick)return
2912                        }
2913                        var r = a.getRelativePosition(t, e.chart.chart), l = r.x, s = r.y;
2914                        if (l >= e.left && l <= e.right && s >= e.top && s <= e.bottom)for (var d = e.legendHitBoxes, u = 0; u < d.length; ++u) {
2915                            var c = d[u];
2916                            if (l >= c.left && l <= c.left + c.width && s >= c.top && s <= c.top + c.height) {
2917                                if ("click" === n) {
2918                                    i.onClick.call(e, t, e.legendItems[u]), o = !0;
2919                                    break
2920                                }
2921                                if ("mousemove" === n) {
2922                                    i.onHover.call(e, t, e.legendItems[u]), o = !0;
2923                                    break
2924                                }
2925                            }
2926                        }
2927                        return o
2928                    }
2929                }), t.plugins.register({
2930                    beforeInit: function (e) {
2931                        var a = e.options, i = a.legend;
2932                        i && (e.legend = new t.Legend({
2933                            ctx: e.chart.ctx,
2934                            options: i,
2935                            chart: e
2936                        }), t.layoutService.addBox(e, e.legend))
2937                    }
2938                })
2939            }
2940        }, {}], 31: [function (t, e, a) {
2941            "use strict";
2942            e.exports = function (t) {
2943                var e = t.helpers.noop;
2944                t.plugins = {
2945                    _plugins: [], register: function (t) {
2946                        var e = this._plugins;
2947                        [].concat(t).forEach(function (t) {
2948                            -1 === e.indexOf(t) && e.push(t)
2949                        })
2950                    }, unregister: function (t) {
2951                        var e = this._plugins;
2952                        [].concat(t).forEach(function (t) {
2953                            var a = e.indexOf(t);
2954                            -1 !== a && e.splice(a, 1)
2955                        })
2956                    }, clear: function () {
2957                        this._plugins = []
2958                    }, count: function () {
2959                        return this._plugins.length
2960                    }, getAll: function () {
2961                        return this._plugins
2962                    }, notify: function (t, e) {
2963                        var a, i, n = this._plugins, o = n.length;
2964                        for (a = 0; o > a; ++a)if (i = n[a], "function" == typeof i[t] && i[t].apply(i, e || []) === !1)return !1;
2965                        return !0
2966                    }
2967                }, t.PluginBase = t.Element.extend({
2968                    beforeInit: e,
2969                    afterInit: e,
2970                    beforeUpdate: e,
2971                    afterUpdate: e,
2972                    beforeDraw: e,
2973                    afterDraw: e,
2974                    destroy: e
2975                }), t.pluginService = t.plugins
2976            }
2977        }, {}], 32: [function (t, e, a) {
2978            "use strict";
2979            e.exports = function (t) {
2980                var e = t.helpers;
2981                t.defaults.scale = {
2982                    display: !0,
2983                    position: "left",
2984                    gridLines: {
2985                        display: !0,
2986                        color: "rgba(0, 0, 0, 0.1)",
2987                        lineWidth: 1,
2988                        drawBorder: !0,
2989                        drawOnChartArea: !0,
2990                        drawTicks: !0,
2991                        tickMarkLength: 10,
2992                        zeroLineWidth: 1,
2993                        zeroLineColor: "rgba(0,0,0,0.25)",
2994                        offsetGridLines: !1,
2995                        borderDash: [],
2996                        borderDashOffset: 0
2997                    },
2998                    scaleLabel: {labelString: "", display: !1},
2999                    ticks: {
3000                        beginAtZero: !1,
3001                        minRotation: 0,
3002                        maxRotation: 50,
3003                        mirror: !1,
3004                        padding: 10,
3005                        reverse: !1,
3006                        display: !0,
3007                        autoSkip: !0,
3008                        autoSkipPadding: 0,
3009                        labelOffset: 0,
3010                        callback: t.Ticks.formatters.values
3011                    }
3012                }, t.Scale = t.Element.extend({
3013                    beforeUpdate: function () {
3014                        e.callCallback(this.options.beforeUpdate, [this])
3015                    },
3016                    update: function (t, a, i) {
3017                        var n = this;
3018                        return n.beforeUpdate(), n.maxWidth = t, n.maxHeight = a, n.margins = e.extend({
3019                            left: 0,
3020                            right: 0,
3021                            top: 0,
3022                            bottom: 0
3023                        }, i), n.beforeSetDimensions(), n.setDimensions(), n.afterSetDimensions(), n.beforeDataLimits(), n.determineDataLimits(), n.afterDataLimits(), n.beforeBuildTicks(), n.buildTicks(), n.afterBuildTicks(), n.beforeTickToLabelConversion(), n.convertTicksToLabels(), n.afterTickToLabelConversion(), n.beforeCalculateTickRotation(), n.calculateTickRotation(), n.afterCalculateTickRotation(), n.beforeFit(), n.fit(), n.afterFit(), n.afterUpdate(), n.minSize
3024                    },
3025                    afterUpdate: function () {
3026                        e.callCallback(this.options.afterUpdate, [this])
3027                    },
3028                    beforeSetDimensions: function () {
3029                        e.callCallback(this.options.beforeSetDimensions, [this])
3030                    },
3031                    setDimensions: function () {
3032                        var t = this;
3033                        t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0
3034                    },
3035                    afterSetDimensions: function () {
3036                        e.callCallback(this.options.afterSetDimensions, [this])
3037                    },
3038                    beforeDataLimits: function () {
3039                        e.callCallback(this.options.beforeDataLimits, [this])
3040                    },
3041                    determineDataLimits: e.noop,
3042                    afterDataLimits: function () {
3043                        e.callCallback(this.options.afterDataLimits, [this])
3044                    },
3045                    beforeBuildTicks: function () {
3046                        e.callCallback(this.options.beforeBuildTicks, [this])
3047                    },
3048                    buildTicks: e.noop,
3049                    afterBuildTicks: function () {
3050                        e.callCallback(this.options.afterBuildTicks, [this])
3051                    },
3052                    beforeTickToLabelConversion: function () {
3053                        e.callCallback(this.options.beforeTickToLabelConversion, [this])
3054                    },
3055                    convertTicksToLabels: function () {
3056                        var t = this, e = t.options.ticks;
3057                        t.ticks = t.ticks.map(e.userCallback || e.callback)
3058                    },
3059                    afterTickToLabelConversion: function () {
3060                        e.callCallback(this.options.afterTickToLabelConversion, [this])
3061                    },
3062                    beforeCalculateTickRotation: function () {
3063                        e.callCallback(this.options.beforeCalculateTickRotation, [this])
3064                    },
3065                    calculateTickRotation: function () {
3066                        var a = this, i = a.ctx, n = t.defaults.global, o = a.options.ticks, r = e.getValueOrDefault(o.fontSize, n.defaultFontSize), l = e.getValueOrDefault(o.fontStyle, n.defaultFontStyle), s = e.getValueOrDefault(o.fontFamily, n.defaultFontFamily), d = e.fontString(r, l, s);
3067                        i.font = d;
3068                        var u, c = i.measureText(a.ticks[0]).width, h = i.measureText(a.ticks[a.ticks.length - 1]).width;
3069                        if (a.labelRotation = o.minRotation || 0, a.paddingRight = 0, a.paddingLeft = 0, a.options.display && a.isHorizontal()) {
3070                            a.paddingRight = h / 2 + 3, a.paddingLeft = c / 2 + 3, a.longestTextCache || (a.longestTextCache = {});
3071                            for (var f, g, p = e.longestText(i, d, a.ticks, a.longestTextCache), m = p, b = a.getPixelForTick(1) - a.getPixelForTick(0) - 6; m > b && a.labelRotation < o.maxRotation;) {
3072                                if (f = Math.cos(e.toRadians(a.labelRotation)), g = Math.sin(e.toRadians(a.labelRotation)), u = f * c, u + r / 2 > a.yLabelWidth && (a.paddingLeft = u + r / 2), a.paddingRight = r / 2, g * p > a.maxHeight) {
3073                                    a.labelRotation--;
3074                                    break
3075                                }
3076                                a.labelRotation++, m = f * p
3077                            }
3078                        }
3079                        a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0))
3080                    },
3081                    afterCalculateTickRotation: function () {
3082                        e.callCallback(this.options.afterCalculateTickRotation, [this])
3083                    },
3084                    beforeFit: function () {
3085                        e.callCallback(this.options.beforeFit, [this])
3086                    },
3087                    fit: function () {
3088                        var a = this, i = a.minSize = {
3089                            width: 0,
3090                            height: 0
3091                        }, n = a.options, o = t.defaults.global, r = n.ticks, l = n.scaleLabel, s = n.gridLines, d = n.display, u = a.isHorizontal(), c = e.getValueOrDefault(r.fontSize, o.defaultFontSize), h = e.getValueOrDefault(r.fontStyle, o.defaultFontStyle), f = e.getValueOrDefault(r.fontFamily, o.defaultFontFamily), g = e.fontString(c, h, f), p = e.getValueOrDefault(l.fontSize, o.defaultFontSize), m = n.gridLines.tickMarkLength;
3092                        if (u ? i.width = a.isFullWidth() ? a.maxWidth - a.margins.left - a.margins.right : a.maxWidth : i.width = d && s.drawTicks ? m : 0, u ? i.height = d && s.drawTicks ? m : 0 : i.height = a.maxHeight, l.display && d && (u ? i.height += 1.5 * p : i.width += 1.5 * p), r.display && d) {
3093                            a.longestTextCache || (a.longestTextCache = {});
3094                            var b = e.longestText(a.ctx, g, a.ticks, a.longestTextCache), v = e.numberOfLabelLines(a.ticks), x = .5 * c;
3095                            if (u) {
3096                                a.longestLabelWidth = b;
3097                                var y = Math.sin(e.toRadians(a.labelRotation)) * a.longestLabelWidth + c * v + x * v;
3098                                i.height = Math.min(a.maxHeight, i.height + y), a.ctx.font = g;
3099                                var k = a.ctx.measureText(a.ticks[0]).width, S = a.ctx.measureText(a.ticks[a.ticks.length - 1]).width, w = Math.cos(e.toRadians(a.labelRotation)), M = Math.sin(e.toRadians(a.labelRotation));
3100                                a.paddingLeft = 0 !== a.labelRotation ? w * k + 3 : k / 2 + 3, a.paddingRight = 0 !== a.labelRotation ? M * (c / 2) + 3 : S / 2 + 3
3101                            } else {
3102                                var C = a.maxWidth - i.width, D = r.mirror;
3103                                D ? b = 0 : b += a.options.ticks.padding, C > b ? i.width += b : i.width = a.maxWidth, a.paddingTop = c / 2, a.paddingBottom = c / 2
3104                            }
3105                        }
3106                        a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingTop = Math.max(a.paddingTop - a.margins.top, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0), a.paddingBottom = Math.max(a.paddingBottom - a.margins.bottom, 0)), a.width = i.width, a.height = i.height
3107                    },
3108                    afterFit: function () {
3109                        e.callCallback(this.options.afterFit, [this])
3110                    },
3111                    isHorizontal: function () {
3112                        return "top" === this.options.position || "bottom" === this.options.position
3113                    },
3114                    isFullWidth: function () {
3115                        return this.options.fullWidth
3116                    },
3117                    getRightValue: function (t) {
3118                        return null === t || "undefined" == typeof t ? NaN : "number" != typeof t || isFinite(t) ? "object" == typeof t ? t instanceof Date || t.isValid ? t : this.getRightValue(this.isHorizontal() ? t.x : t.
3118y) : t : NaN
3119                    },
3120                    getLabelForIndex: e.noop,
3121                    getPixelForValue: e.noop,
3122                    getValueForPixel: e.noop,
3123                    getPixelForTick: function (t, e) {
3124                        var a = this;
3125                        if (a.isHorizontal()) {
3126                            var i = a.width - (a.paddingLeft + a.paddingRight), n = i / Math.max(a.ticks.length - (a.options.gridLines.offsetGridLines ? 0 : 1), 1), o = n * t + a.paddingLeft;
3127                            e && (o += n / 2);
3128                            var r = a.left + Math.round(o);
3129                            return r += a.isFullWidth() ? a.margins.left : 0
3130                        }
3131                        var l = a.height - (a.paddingTop + a.paddingBottom);
3132                        return a.top + t * (l / (a.ticks.length - 1))
3133                    },
3134                    getPixelForDecimal: function (t) {
3135                        var e = this;
3136                        if (e.isHorizontal()) {
3137                            var a = e.width - (e.paddingLeft + e.paddingRight), i = a * t + e.paddingLeft, n = e.left + Math.round(i);
3138                            return n += e.isFullWidth() ? e.margins.left : 0
3139                        }
3140                        return e.top + t * e.height
3141                    },
3142                    getBasePixel: function () {
3143                        var t = this, e = t.min, a = t.max;
3144                        return t.getPixelForValue(t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0)
3145                    },
3146                    draw: function (a) {
3147                        var i = this, n = i.options;
3148                        if (n.display) {
3149                            var o, r, l = i.ctx, s = t.defaults.global, d = n.ticks, u = n.gridLines, c = n.scaleLabel, h = 0 !== i.labelRotation, f = d.autoSkip, g = i.isHorizontal();
3150                            d.maxTicksLimit && (r = d.maxTicksLimit);
3151                            var p = e.getValueOrDefault(d.fontColor, s.defaultFontColor), m = e.getValueOrDefault(d.fontSize, s.defaultFontSize), b = e.getValueOrDefault(d.fontStyle, s.defaultFontStyle), v = e.getValueOrDefault(d.fontFamily, s.defaultFontFamily), x = e.fontString(m, b, v), y = u.tickMarkLength, k = e.getValueOrDefault(u.borderDash, s.borderDash), S = e.getValueOrDefault(u.borderDashOffset, s.borderDashOffset), w = e.getValueOrDefault(c.fontColor, s.defaultFontColor), M = e.getValueOrDefault(c.fontSize, s.defaultFontSize), C = e.getValueOrDefault(c.fontStyle, s.defaultFontStyle), D = e.getValueOrDefault(c.fontFamily, s.defaultFontFamily), I = e.fontString(M, C, D), A = e.toRadians(i.labelRotation), T = Math.cos(A), P = i.longestLabelWidth * T;
3152                            l.fillStyle = p;
3153                            var F = [];
3154                            if (g) {
3155                                if (o = !1, h && (P /= 2), (P + d.autoSkipPadding) * i.ticks.length > i.width - (i.paddingLeft + i.paddingRight) && (o = 1 + Math.floor((P + d.autoSkipPadding) * i.ticks.length / (i.width - (i.paddingLeft + i.paddingRight)))), r && i.ticks.length > r)for (; !o || i.ticks.length / (o || 1) > r;)o || (o = 1), o += 1;
3156                                f || (o = !1)
3157                            }
3158                            var _ = "right" === n.position ? i.left : i.right - y, R = "right" === n.position ? i.left + y : i.right, V = "bottom" === n.position ? i.top : i.bottom - y, L = "bottom" === n.position ? i.top + y : i.bottom;
3159                            if (e.each(i.ticks, function (t, r) {
3160                                    if (void 0 !== t && null !== t) {
3161                                        var l = i.ticks.length === r + 1, s = o > 1 && r % o > 0 || r % o === 0 && r + o >= i.ticks.length;
3162                                        if ((!s || l) && void 0 !== t && null !== t) {
3163                                            var c, f;
3164                                            r === ("undefined" != typeof i.zeroLineIndex ? i.zeroLineIndex : 0) ? (c = u.zeroLineWi
3164dth, f = u.zeroLineColor) : (c = e.getValueAtIndexOrDefault(u.lineWidth, r), f = e.getValueAtIndexOrDefault(u.color, r));
3165                                            var p, m, b, v, x, w, M, C, D, I, T = "middle", P = "middle";
3166                                            if (g) {
3167                                                h || (P = "top" === n.position ? "bottom" : "top"), T = h ? "right" : "center";
3168                                                var O = i.getPixelForTick(r) + e.aliasPixel(c);
3169                                                D = i.getPixelForTick(r, u.offsetGridLines) + d.labelOffset, I = h ? i.top + 12 : "top" === n.position ? i.bottom - y : i.top + y, p = b = x = M = O, m = V, v = L, w = a.top, C = a.bottom
3170                                            } else {
3171                                                "left" === n.position ? d.mirror ? (D = i.right + d.padding, T = "left") : (D = i.right - d.padding, T = "right") : d.mirror ? (D = i.left - d.padding, T = "right") : (D = i.left + d.padding, T = "left");
3172                                                var B = i.getPixelForTick(r);
3173                                                B += e.aliasPixel(c), I = i.getPixelForTick(r, u.offsetGridLines), p = _, b = R, x = a.left, M = a.right, m = v = w = C = B
3174                                            }
3175                                            F.push({
3176                                                tx1: p,
3177                                                ty1: m,
3178                                                tx2: b,
3179                                                ty2: v,
3180                                                x1: x,
3181                                                y1: w,
3182                                                x2: M,
3183                                                y2: C,
3184                                                labelX: D,
3185                                                labelY: I,
3186                                                glWidth: c,
3187                                                glColor: f,
3188                                                glBorderDash: k,
3189                                                glBorderDashOffset: S,
3190                                                rotation: -1 * A,
3191                                                label: t,
3192                                                textBaseline: P,
3193                                                textAlign: T
3194                                            })
3195                                        }
3196                                    }
3197                                }), e.each(F, function (t) {
3198                                    if (u.display && (l.save(), l.lineWidth = t.glWidth, l.strokeStyle = t.glColor, l.setLineDash && (l.setLineDash(t.glBorderDash), l.lineDashOffset = t.glBorderDashOffset), l.beginPath(), u.drawTicks && (l.moveTo(t.tx1, t.ty1), l.lineTo(t.tx2, t.ty2)), u.drawOnChartArea && (l.moveTo(t.x1, t.y1), l.lineTo(t.x2, t.y2)), l.stroke(), l.restore()), d.display) {
3199                                        l.save(), l.translate(t.labelX, t.labelY), l.rotate(t.rotation), l.font = x, l.textBaseline = t.textBaseline, l.textAlign = t.textAlign;
3200                                        var a = t.label;
3201                                        if (e.isArray(a))for (var i = 0, n = -(a.length - 1) * m * .75; i < a.length; ++i)l.fillText("" + a[i], 0, n), n += 1.5 * m; else l.fillText(a, 0, 0);
3202                                        l.restore()
3203                                    }
3204                                }), c.display) {
3205                                var O, B, W = 0;
3206                                if (g)O = i.left + (i.right - i.left) / 2, B = "bottom" === n.position ? i.bottom - M / 2 : i.top + M / 2; else {
3207                                    var z = "left" === n.position;
3208                                    O = z ? i.left + M / 2 : i.right - M / 2, B = i.top + (i.bottom - i.top) / 2, W = z ? -.5 * Math.PI : .5 * Math.PI
3209                                }
3210                                l.save(), l.translate(O, B), l.rotate(W), l.textAlign = "center", l.textBaseline = "middle", l.fillStyle = w, l.font = I, l.fillText(c.labelString, 0, 0
3210), l.restore()
3211                            }
3212                            if (u.drawBorder) {
3213                                l.lineWidth = e.getValueAtIndexOrDefault(u.lineWidth, 0), l.strokeStyle = e.getValueAtIndexOrDefault(u.color, 0);
3214                                var N = i.left, E = i.right, H = i.top, U = i.bottom, j = e.aliasPixel(l.lineWidth);
3215                                g ? (H = U = "top" === n.position ? i.bottom : i.top, H += j, U += j) : (N = E = "left" === n.position ? i.right : i.left, N += j, E += j), l.beginPath(), l.moveTo(N, H), l.lineTo(E, U), l.stroke()
3216                            }
3217                        }
3218                    }
3219                })
3220            }
3221        }, {}], 33: [function (t, e, a) {
3222            "use strict";
3223            e.exports = function (t) {
3224                var e = t.helpers;
3225                t.scaleService = {
3226                    constructors: {}, defaults: {}, registerScaleType: function (t, a, i) {
3227                        this.constructors[t] = a, this.defaults[t] = e.clone(i)
3228                    }, getScaleConstructor: function (t) {
3229                        return this.constructors.hasOwnProperty(t) ? this.constructors[t] : void 0
3230                    }, getScaleDefaults: function (a) {
3231                        return this.defaults.hasOwnProperty(a) ? e.scaleMerge(t.defaults.scale, this.defaults[a]) : {}
3232                    }, updateScaleDefaults: function (t, a) {
3233                        var i = this.defaults;
3234                        i.hasOwnProperty(t) && (i[t] = e.extend(i[t], a))
3235                    }, addScalesToLayout: function (a) {
3236                        e.each(a.scales, function (e) {
3237                            t.layoutService.addBox(a, e)
3238                        })
3239                    }
3240                }
3241            }
3242        }, {}], 34: [function (t, e, a) {
3243            "use strict";
3244            e.exports = function (t) {
3245                var e = t.helpers;
3246                t.Ticks = {
3247                    generators: {
3248                        linear: function (t, a) {
3249                            var i, n = [];
3250                            if (t.stepSize && t.stepSize > 0)i = t.stepSize; else {
3251                                var o = e.niceNum(a.max - a.min, !1);
3252                                i = e.niceNum(o / (t.maxTicks - 1), !0)
3253                            }
3254                            var r = Math.floor(a.min / i) * i, l = Math.ceil(a.max / i) * i;
3255                            if (t.min && t.max && t.stepSize) {
3256                                var s = (t.max - t.min) % t.stepSize === 0;
3257                                s && (r = t.min, l = t.max)
3258                            }
3259                            var d = (l - r) / i;
3260                            d = e.almostEquals(d, Math.round(d), i / 1e3) ? Math.round(d) : Math.ceil(d), n.push(void 0 !== t.min ? t.min : r);
3261                            for (var u = 1; d > u; ++u)n.push(r + u * i);
3262                            return n.push(void 0 !== t.max ? t.max : l), n
3263                        }, logarithmic: function (t, a) {
3264                            for (var i = [], n = e.getValueOrDefault, o = n(t.min, Math.pow(10, Math.floor(e.log10(a.min)))); o < a.max;) {
3265                                i.push(o);
3266                                var r, l;
3267                                0 === o ? (r = Math.floor(e.log10(a.minNotZero)), l = Math.round(a.minNotZero / Math.pow(10, r))) : (r = Math.floor(e.log10(o)), l = Math.floor(o / Math.pow(10, r)) + 1), 10 === l && (l = 1, ++r), o = l * Math.pow(10, r)
3268                            }
3269                            var s = n(t.max, o);
3270                            return i.push(s), i
3271                        }
3272                    }, formatters: {
3273                        values: function (t) {
3274                            return e.isArray(t) ? t : "" + t
3275                        }, linear: function (t, a, i) {
3276                            var n = i.length > 3 ? i[2] - i[1] : i[1] - i[0];
3277                            Math.abs(n) > 1 && t !== Math.floor(t) && (n = t - Math.floor(t));
3278                            var o = e.log10(Math.abs(n)), r = "";
3279                            if (0 !== t) {
3280                                var l = -1 * Math.floor(o);
3281                                l = Math.max(Math.min(l, 20), 0), r = t.toFixed(l)
3282                            } else r = "0";
3283                            return r
3284                        }, logarithmic: function (t, a, i) {
3285                            var n = t / Math.pow(10, Math.floor(e.log10(t)));
3286                            return 0 === t ? "0" : 1 === n || 2 === n || 5 === n || 0 === a || a === i.length - 1 ? t.toExponential() : ""
3287                        }
3288                    }
3289                }
3290            }
3291        }, {}], 35: [function (t, e, a) {
3292            "use strict";
3293            e.exports = function (t) {
3294                var e = t.helpers;
3295                t.defaults.global.title = {
3296                    display: !1,
3297                    position: "top",
3298                    fullWidth: !0,
3299                    fontStyle: "bold",
3300                    padding: 10,
3301                    text: ""
3302                };
3303                var a = e.noop;
3304                t.Title = t.Element.extend({
3305                    initialize: function (a) {
3306                        var i = this;
3307                        e.extend(i, a), i.options = e.configMerge(t.defaults.global.title, a.options), i.legendHitBoxes = []
3308                    },
3309                    beforeUpdate: function () {
3310                        var a = this.chart.options;
3311                        a && a.title && (this.options = e.configMerge(t.defaults.global.title, a.title))
3312                    },
3313                    update: function (t, e, a) {
3314                        var i = this;
3315                        return i.beforeUpdate(), i.maxWidth = t, i.maxHeight = e, i.margins = a, i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize
3316                    },
3317                    afterUpdate: a,
3318                    beforeSetDimensions: a,
3319                    setDimensions: function () {
3320                        var t = this;
3321                        t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0, t.minSize = {
3322                            width: 0,
3323                            height: 0
3324                        }
3325                    },
3326                    afterSetDimensions: a,
3327                    beforeBuildLabels: a,
3328                    buildLabels: a,
3329                    afterBuildLabels: a,
3330                    beforeFit: a,
3331                    fit: function () {
3332                        var a = this, i = e.getValueOrDefault, n = a.options, o = t.defaults.global, r = n.display, l = i(n.fontSize, o.defaultFontSize), s = a.minSize;
3333                        a.isHorizontal() ? (s.width = a.maxWidth, s.height = r ? l + 2 * n.padding : 0) : (s.width = r ? l + 2 * n.padding : 0, s.height = a.maxHeight), a.width = s.width, a.height = s.height
3334                    },
3335                    afterFit: a,
3336                    isHorizontal: function () {
3337                        var t = this.options.position;
3338                        return "top" === t || "bottom" === t
3339                    },
3340                    draw: function () {
3341                        var a = this, i = a.ctx, n = e.getValueOrDefault, o = a.options, r = t.defaults.global;
3342                        if (o.display) {
3343                            var l, s, d, u = n(o.fontSize, r.defaultFontSize), c = n(o.fontStyle, r.defaultFontStyle), h = n(o.fontFamily, r.defaultFontFamily), f = e.fontString(u, c, h), g = 0, p = a.top, m = a.left, b = a.bottom, v = a.right;
3344                            i.fillStyle = n(o.fontColor, r.defaultFontColor), i.font = f, a.isHorizontal() ? (l = m + (v - m) / 2, s = p + (b - p) / 2, d = v - m) : (l = "left" === o.position ? m + u / 2 : v - u / 2, s = p + (b - p) / 2, d = b - p, g = Math.PI * ("left" === o.position ? -.5 : .5)), i.save(), i.translate(l, s), i.rotate(g), i.textAlign = "center", i.textBaseline = "middle", i.fillText(o.text, 0, 0, d), i.restore(
vendor: 7,727 bytes, lines 3344-3491
3344)
3345                        }
3346                    }
3347                }), t.plugins.register({
3348                    beforeInit: function (e) {
3349                        var a = e.options, i = a.title;
3350                        i && (e.titleBlock = new t.Title({
3351                            ctx: e.chart.ctx,
3352                            options: i,
3353                            chart: e
3354                        }), t.layoutService.addBox(e, e.titleBlock))
3355                    }
3356                })
3357            }
3358        }, {}], 36: [function (t, e, a) {
3359            "use strict";
3360            e.exports = function (t) {
3361                function e(t, e) {
3362                    var a = s.color(t);
3363                    return a.alpha(e * a.alpha()).rgbaString()
3364                }
3365
3366                function a(t, e) {
3367                    return e && (s.isArray(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t
3368                }
3369
3370                function i(t) {
3371                    var e = t._xScale, a = t._yScale || t._scale, i = t._index, n = t._datasetIndex;
3372                    return {
3373                        xLabel: e ? e.getLabelForIndex(i, n) : "",
3374                        yLabel: a ? a.getLabelForIndex(i, n) : "",
3375                        index: i,
3376                        datasetIndex: n,
3377                        x: t._model.x,
3378                        y: t._model.y
3379                    }
3380                }
3381
3382                function n(e) {
3383                    var a = t.defaults.global, i = s.getValueOrDefault;
3384                    return {
3385                        xPadding: e.xPadding,
3386                        yPadding: e.yPadding,
3387                        xAlign: e.xAlign,
3388                        yAlign: e.yAlign,
3389                        bodyFontColor: e.bodyFontColor,
3390                        _bodyFontFamily: i(e.bodyFontFamily, a.defaultFontFamily),
3391                        _bodyFontStyle: i(e.bodyFontStyle, a.defaultFontStyle),
3392                        _bodyAlign: e.bodyAlign,
3393                        bodyFontSize: i(e.bodyFontSize, a.defaultFontSize),
3394                        bodySpacing: e.bodySpacing,
3395                        titleFontColor: e.titleFontColor,
3396                        _titleFontFamily: i(e.titleFontFamily, a.defaultFontFamily),
3397                        _titleFontStyle: i(e.titleFontStyle, a.defaultFontStyle),
3398                        titleFontSize: i(e.titleFontSize, a.defaultFontSize),
3399                        _titleAlign: e.titleAlign,
3400                        titleSpacing: e.titleSpacing,
3401                        titleMarginBottom: e.titleMarginBottom,
3402                        footerFontColor: e.footerFontColor,
3403                        _footerFontFamily: i(e.footerFontFamily, a.defaultFontFamily),
3404                        _footerFontStyle: i(e.footerFontStyle, a.defaultFontStyle),
3405                        footerFontSize: i(e.footerFontSize, a.defaultFontSize),
3406                        _footerAlign: e.footerAlign,
3407                        footerSpacing: e.footerSpacing,
3408                        footerMarginTop: e.footerMarginTop,
3409                        caretSize: e.caretSize,
3410                        cornerRadius: e.cornerRadius,
3411                        backgroundColor: e.backgroundColor,
3412                        opacity: 0,
3413                        legendColorBackground: e.multiKeyBackground,
3414                        displayColors: e.displayColors
3415                    }
3416                }
3417
3418                function o(t, e) {
3419                    var a = t._chart.ctx, i = 2 * e.yPadding, n = 0, o = e.body, r = o.reduce(function (t, e) {
3420                        return t + e.before.length + e.lines.length + e.after.length
3421                    }, 0);
3422                    r += e.beforeBody.length + e.afterBody.length;
3423                    var l = e.title.length, d = e.footer.length, u = e.titleFontSize, c = e.bodyFontSize, h = e.footerFontSize;
3424                    i += l * u, i += l ? (l - 1) * e.titleSpacing : 0, i += l ? e.titleMarginBottom : 0, i += r * c, i += r ? (r - 1) * e.bodySpacing : 0, i += d ? e.footerMarginTop : 0, i += d * h, i += d ? (d - 1) * e.footerSpacing : 0;
3425                    var f = 0, g = function (t) {
3426                        n = Math.max(n, a.measureText(t).width + f)
3427                    };
3428                    return a.font = s.fontString(u, e._titleFontStyle, e._titleFontFamily), s.each(e.title, g), a.font = s.fontString(c, e._bodyFontStyle, e._bodyFontFamily), s.each(e.beforeBody.concat(e.afterBody), g), f = e.displayColors ? c + 2 : 0, s.each(o, function (t) {
3429                        s.each(t.before, g), s.each(t.lines, g), s.each(t.after, g)
3430                    }), f = 0, a.font = s.fontString(h, e._footerFontStyle, e._footerFontFamily), s.each(e.footer, g), n += 2 * e.xPadding, {
3431                        width: n,
3432                        height: i
3433                    }
3434                }
3435
3436                function r(t, e) {
3437                    var a = t._model, i = t._chart, n = t._chartInstance.chartArea, o = "center", r = "center";
3438                    a.y < e.height ? r = "top" : a.y > i.height - e.height && (r = "bottom");
3439                    var l, s, d, u, c, h = (n.left + n.right) / 2, f = (n.top + n.bottom) / 2;
3440                    "center" === r ? (l = function (t) {
3441                        return h >= t
3442                    }, s = function (t) {
3443                        return t > h
3444                    }) : (l = function (t) {
3445                        return t <= e.width / 2
3446                    }, s = function (t) {
3447                        return t >= i.width - e.width / 2
3448                    }), d = function (t) {
3449                        return t + e.width > i.width
3450                    }, u = function (t) {
3451                        return t - e.width < 0
3452                    }, c = function (t) {
3453                        return f >= t ? "top" : "bottom"
3454                    }, l(a.x) ? (o = "left", d(a.x) && (o = "center", r = c(a.y))) : s(a.x) && (o = "right", u(a.x) && (o = "center", r = c(a.y)));
3455                    var g = t._options;
3456                    return {xAlign: g.xAlign ? g.xAlign : o, yAlign: g.yAlign ? g.yAlign : r}
3457                }
3458
3459                function l(t, e, a) {
3460                    var i = t.x, n = t.y, o = t.caretSize, r = t.caretPadding, l = t.cornerRadius, s = a.xAlign, d = a.yAlign, u = o + r, c = l + r;
3461                    return "right" === s ? i -= e.width : "center" === s && (i -= e.width / 2), "top" === d ? n += u : n -= "bottom" === d ? e.height + u : e.height / 2, "center" === d ? "left" === s ? i += u : "right" === s && (i -= u) : "left" === s ? i -= c : "right" === s && (i += c), {
3462                        x: i,
3463                        y: n
3464                    }
3465                }
3466
3467                var s = t.helpers;
3468                t.defaults.global.tooltips = {
3469                    enabled: !0,
3470                    custom: null,
3471                    mode: "nearest",
3472                    position: "average",
3473                    intersect: !0,
3474                    backgroundColor: "rgba(0,0,0,0.8)",
3475                    titleFontStyle: "bold",
3476                    titleSpacing: 2,
3477                    titleMarginBottom: 6,
3478                    titleFontColor: "#fff",
3479                    titleAlign: "left",
3480                    bodySpacing: 2,
3481                    bodyFontColor: "#fff",
3482                    bodyAlign: "left",
3483                    footerFontStyle: "bold",
3484                    footerSpacing: 2,
3485                    footerMarginTop: 6,
3486                    footerFontColor: "#fff",
3487                    footerAlign: "left",
3488                    yPadding: 6,
3489                    xPadding: 6,
3490                    caretSize: 5,
3491                    cornerRadius: 6,
3492                    multiKeyBackground: "#fff",
3493                    displayColors: !0,
3494                    callbacks: {
3495                        beforeTitle: s.noop,
3496                        title: function (t, e) {
3497                            var a = "", i = e.labels, n = i ? i.length : 0;
3498                            if (t.length > 0) {
3499                                var o = t[0];
3500                                o.xLabel ? a = o.xLabel : n > 0 && o.index < n && (a = i[o.index])
3501                            }
3502                            return a
3503                        },
3504                        afterTitle: s.noop,
3505                        beforeBody: s.noop,
3506                        beforeLabel: s.noop,
3507                        label: function (t, e) {
3508                            var a = e.datasets[t.datasetIndex].label || "";
3509                            return a + ": " + t.yLabel
3510                        },
3511                        labelColor: function (t, e) {
3512                            var a = e.getDatasetMeta(t.datasetIndex), i = a.data[t.index], n = i._view;
3513                            return {borderColor: n.borderColor, backgroundColor: n.backgroundColor}
3514                        },
3515                        afterLabel: s.noop,
3516                        afterBody: s.noop,
3517                        beforeFooter: s.noop,
3518                        footer: s.noop,
3519                        afterFooter: s.noop
3520                    }
3521                }, t.Tooltip = t.Element.extend({
3522                    initialize: function () {
3523                        this._model = n(this._options)
3524                    }, getTitle: function () {
3525                        var t = this, e = t._options, i = e.callbacks, n = i.beforeTitle.apply(t, arguments), o = i.title.apply(t, arguments), r = i.afterTitle.apply(t, arguments), l = [];
3526                        return l = a(l, n), l = a(l, o), l = a(l, r)
3527                    }, getBeforeBody: function () {
3528                        var t = this._options.callbacks.beforeBody.apply(this, arguments);
3529                        return s.isArray(t) ? t : void 0 !== t ? [t] : []
3530                    }, getBody: function (t, e) {
3531                        var i = this, n = i._options.callbacks, o = [];
3532                        return s.each(t, function (t) {
3533                            var r = {before: [], lines: [], after: []};
3534                            a(r.before, n.beforeLabel.call(i, t, e)), a(r.lines, n.label.call(i, t, e)), a(r.after, n.afterLabel.call(i, t, e)), o.push(r)
3535                        }), o
3536                    }, getAfterBody: function () {
3537                        var t = this._options.callbacks.afterBody.apply(this, arguments);
3538                        return s.isArray(t) ? t : void 0 !== t ? [t] : []
3539                    }, getFooter: function () {
3540                        var t = this, e = t._options.callbacks, i = e.beforeFooter.apply(t, arguments), n = e.footer.apply(t, arguments), o = e.afterFooter.apply(t, arguments), r = [];
3541                        return r = a(r, i), r = a(r, n), r = a(r, o)
3542                    }, update: function (e) {
3543                        var a, d, u = this, c = u._options, h = u._model, f = u._model = n(c), g = u._active, p = u._data, m = u._chartInstance, b = {
3544                            xAlign: h.xAlign,
3545                            yAlign: h.yAlign
3546                        }, v = {x: h.x, y: h.y}, x = {width: h.width, height: h.height}, y = {x: h.caretX, y: h.caretY};
3547                        if (g.length) {
3548                            f.opacity = 1;
3549                            var k = [];
3550                            y = t.Tooltip.positioners[c.position](g, u._eventPosition);
3551                            var S = [];
3552                            for (a = 0, d = g.length; d > a; ++a)S.push(i(g[a]));
3553                            c.filter && (S = S.filter(function (t) {
3554                                return c.filter(t, p)
3555                            })), c.itemSort && (S = S.sort(function (t, e) {
3556                                return c.itemSort(t, e, p)
3557                            })), s.each(S, function (t) {
3558                                k.push(c.callbacks.labelColor.call(u, t, m))
3559                            }), f.title = u.getTitle(S, p), f.beforeBody = u.getBeforeBody(S, p), f.body = u.getBody(S, p), f.afterBody = u.getAfterBody(S, p), f.footer = u.getFooter(S, p), f.x = Math.round(y.x), f.y = Math.round(y.y), f.caretPadding = s.getValueOrDefault(y.padding, 2), f.labelColors = k, f.dataPoints = S, x = o(this, f), b = r(this, x), v = l(f, x, b)
3560                        } else f.opacity = 0;
3561                        return f.xAlign = b.xAlign, f.yAlign = b.yAlign, f.x = v.x, f.y = v.y, f.width = x.width, f.height = x.height, f.caretX = y.x, f.caretY = y.y, u._model = f, e && c.custom && c.custom.call(u, f), u
3562                    }, drawCaret: function (t, a, i) {
3563                        var n, o, r, l, s, d, u = this._view, c = this._chart.ctx, h = u.caretSize, f = u.cornerRadius, g = u.xAlign, p = u.yAlign, m = t.x, b = t.y, v = a.width, x = a.height;
3564                        "center" === p ? ("left" === g ? (n = m, o = n - h, r = n) : (n = m + v, o = n + h, r = n), s = b + x / 2, l = s 
3564- h, d = s + h) : ("left" === g ? (n = m + f, o = n + h, r = o + h) : "right" === g ? (n = m + v - f, o = n - h, r = o - h) : (o = m + v / 2, n = o - h, r = o + h), "top" === p ? (l = b, s = l - h, d = l) : (l = b + x, s = l + h, d = l)), c.fillStyle = e(u.backgroundColor, i), c.beginPath(), c.moveTo(n, l), c.lineTo(o, s), c.lineTo(r, d), c.closePath(), c.fill()
3565                    }, drawTitle: function (t, a, i, n) {
3566                        var o = a.title;
3567                        if (o.length) {
3568                            i.textAlign = a._titleAlign, i.textBaseline = "top";
3569                            var r = a.titleFontSize, l = a.titleSpacing;
3570                            i.fillStyle = e(a.titleFontColor, n), i.font = s.fontString(r, a._titleFontStyle, a._titleFontFamily);
3571                            var d, u;
3572                            for (d = 0, u = o.length; u > d; ++d)i.fillText(o[d], t.x, t.y), t.y += r + l, d + 1 === o.length && (t.y += a.titleMarginBottom - l)
3573                        }
3574                    }, drawBody: function (t, a, i, n) {
3575                        var o = a.bodyFontSize, r = a.bodySpacing, l = a.body;
3576                        i.textAlign = a._bodyAlign, i.textBaseline = "top";
3577                        var d = e(a.bodyFontColor, n);
3578                        i.fillStyle = d, i.font = s.fontString(o, a._bodyFontStyle, a._bodyFontFamily);
3579                        var u = 0, c = function (e) {
3580                            i.fillText(e, t.x + u, t.y), t.y += o + r
3581                        };
3582                        s.each(a.beforeBody, c);
3583                        var h = a.displayColors;
3584                        u = h ? o + 2 : 0, s.each(l, function (r, l) {
3585                            s.each(r.before, c), s.each(r.lines, function (r) {
3586                                h && (i.fillStyle = e(a.legendColorBackground, n), i.fillRect(t.x, t.y, o, o), i.strokeStyle = e(a.labelColors[l].borderColor, n), i.strokeRect(t.x, t.y, o, o), i.fillStyle = e(a.labelColors[l].backgroundColor, n), i.fillRect(t.x + 1, t.y + 1, o - 2, o - 2), i.fillStyle = d), c(r)
3587                            }), s.each(r.after, c)
3588                        }), u = 0, s.each(a.afterBody, c), t.y -= r
3589                    }, drawFooter: function (t, a, i, n) {
3590                        var o = a.footer;
3591                        o.length && (t.y += a.footerMarginTop, i.textAlign = a._footerAlign, i.textBaseline = "top", i.fillStyle = e(a.footerFontColor, n), i.font = s.fontString(a.footerFontSize, a._footerFontStyle, a._footerFontFamily), s.each(o, function (e) {
3592                            i.fillText(e, t.x, t.y), t.y += a.footerFontSize + a.footerSpacing
3593                        }))
3594                    }, drawBackground: function (t, a, i, n, o) {
3595                        i.fillStyle = e(a.backgroundColor, o), s.drawRoundedRectangle(i, t.x, t.y, n.width, n.height, a.cornerRadius), i.fill()
3596                    }, draw: function () {
3597                        var t = this._chart.ctx, e = this._view;
3598                        if (0 !== e.opacity) {
3599                            var a = {width: e.width, height: e.height}, i = {
3600                                x: e.x,
3601                                y: e.y
3602                            }, n = Math.abs(e.opacity < .001) ? 0 : e.opacity;
3603                            this._options.enabled && (this.drawBackground(i, e, t, a, n), this.drawCaret(i, a, n), i.x += e.xPadding, i.y += e.yPadding, this.drawTitle(i, e, t, n), this.drawBody(i, e, t, n), this.drawFooter(i, e, t, n))
3604                        }
3605                    }, handleEvent: function (t) {
3606                        var e = this, a = e._options, i = !1;
3607                        if (e._lastActive = e._lastActive || [], "mouseout" === t.type ? e._active = [] : e._active = e._chartInstance.getElementsAtEventForMode(t, a.mode, a), i = !s.arrayEquals(e._active, e._lastActive), e._lastActive = e._active, a.enabled || a.custom) {
3608                            e._eventPosition = s.getRelativePosition(t, e._chart);
3609                            var n = e._model;
3610                            e.update(!0), e.pivot(), i |= n.x !== e._model.x || n.y !== e._model.y
3611                        }
3612                        return i
3613                    }
3614                }), t.Tooltip.positioners = {
3615                    average: function (t) {
3616                        if (!t.length)return !1;
3617                        var e, a, i = 0, n = 0, o = 0;
3618                        for (e = 0, a = t.length; a > e; ++e) {
3619                            var r = t[e];
3620                            if (r && r.hasValue()) {
3621                                var l = r.tooltipPosition();
3622                                i += l.x, n += l.y, ++o
3623                            }
3624                        }
3625                        return {x: Math.round(i / o), y: Math.round(n / o)}
3626                    }, nearest: function (t, e) {
3627                        var a, i, n, o = e.x, r = e.y, l = Number.POSITIVE_INFINITY;
3628                        for (i = 0, n = t.length; n > i; ++i) {
3629                            var d = t[i];
3630                            if (d && d.hasValue()) {
3631                                var u = d.getCenterPoint(), c = s.distanceBetweenPoints(e, u);
3632                                l > c && (l = c, a = d)
3633                            }
3634                        }
3635                        if (a) {
3636                            var h = a.tooltipPosition();
3637                            o = h.x, r = h.y
3638                        }
3639                        return {x: o, y: r}
3640                    }
3641                }
3642            }
3643        }, {}], 37: [function (t, e, a) {
3644            "use strict";
3645            e.exports = function (t) {
3646                var e = t.helpers, a = t.defaults.global;
3647                a.elements.arc = {
3648                    backgroundColor: a.defaultColor,
3649                    borderColor: "#fff",
3650                    borderWidth: 2
3651                }, t.elements.Arc = t.Element.extend({
3652                    inLabelRange: function (t) {
3653                        var e = this._view;
3654                        return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hoverRadius, 2) : !1
3655                    }, inRange: function (t, a) {
3656                        var i = this._view;
3657                        if (i) {
3658                            for (var n = e.getAngleFromPoint(i, {
3659                                x: t,
3660                                y: a
3661                            }), o = n.angle, r = n.distance, l = i.startAngle, s = i.endAngle; l > s;)s += 2 * Math.PI;
3662                            for (; o > s;)o -= 2 * Math.PI;
3663                            for (; l > o;)o += 2 * Math.PI;
3664                            var d = o >= l && s >= o, u = r >= i.innerRadius && r <= i.outerRadius;
3665                            return d && u
3666                        }
3667                        return !1
3668                    }, getCenterPoint: function () {
3669                        var t = this._view, e = (t.startAngle + t.endAngle) / 2, a = (t.innerRadius + t.outerRadius) / 2;
3670                        return {x: t.x + Math.cos(e) * a, y: t.y + Math.sin(e) * a}
3671                    }, getArea: function () {
3672                        var t = this._view;
3673                        return Math.PI * ((t.endAngle - t.startAngle) / (2 * Math.PI)) * (Math.pow(t.outerRadius, 2) - Math.pow(t.innerRadius, 2))
3674                    }, tooltipPosition: function () {
3675                        var t = this._view, e = t.startAngle + (t.endAngle - t.startAngle) / 2, a = (t.outerRadius - t.innerRadius) / 2 + t.innerRadius;
3676                        return {x: t.x + Math.cos(e) * a, y: t.y + Math.sin(e) * a}
3677                    }, draw: function () {
3678                        var t = this._chart.ctx, e = this._view, a = e.startAngle, i = e.endAngle;
3679                        t.beginPath(), t.arc(e.x, e.y, e.outerRadius, a, i), t.arc(e.x, e.y, e.innerRadius, i, a, !0), t.closePath(), t.strokeStyle = e.borderColor, t.lineWidth = e.borderWidth, t.fillStyle = e.backgroundColor, t.fill(), t.lineJoin = "bevel", e.borderWidth && t.stroke()
3680                    }
3681                })
3682            }
3683        }, {}], 38: [function (t, e, a) {
3684            "use strict";
3685            e.exports = function (t) {
3686                var e = t.helpers, a = t.defaults.global;
3687                t.defaults.global.elements.line = {
3688                    tension: .4,
3689                    backgroundColor: a.defaultColor,
3690                    borderWidth: 3,
3691                    borderColor: a.defaultColor,
3692                    borderCapStyle: "butt",
3693                    borderDash: [],
3694                    borderDashOffset: 0,
3695                    borderJoinStyle: "miter",
3696                    capBezierPoints: !0,
3697                    fill: !0
3698                }, t.elements.Line = t.Element.extend({
3699                    draw: function () {
3700                        function t(t, e) {
3701                            var a = e._view;
3702                            e._view.steppedLine === !0 ? (s.lineTo(a.x, t._view.y), s.lineTo(a.x, a.y)) : 0 === e._view.tension ? s.lineTo(a.x, a.y) : s.bezierCurveTo(t._view.controlPointNextX, t._view.controlPointNextY, a.controlPointPreviousX, a.controlPointPreviousY, a.x, a.y)
3703                        }
3704
3705                        var i = this, n = i._view, o = n.spanGaps, r = n.scaleZero, l = i._loop;
3706                        l || ("top" === n.fill ? r = n.scaleTop : "bottom" === n.fill && (r = n.scaleBottom));
3707                        var s = i._chart.ctx;
3708                        s.save();
3709                        var d = i._children.slice(), u = -1;
3710                        l && d.length && d.push(d[0]);
3711                        var c, h, f, g;
3712                        if (d.length && n.fill) {
3713                            for (s.beginPath(), c = 0; c < d.length; ++c)h = d[c], f = e.previousItem(d, c), g = h._view, 0 === c ? (l ? s.moveTo(r.x, r.y) : s.moveTo(g.x, r), g.skip || (u = c, s.lineTo(g.x, g.y))) : (f = -1 === u ? f : d[u], g.skip ? o || u !== c - 1 || (l ? s.lineTo(r.x, r.y) : s.lineTo(f._view.x, r)) : (u !== c - 1 ? o && -1 !== u ? t(f, h) : l ? s.lineTo(g.x, g.y) : (s.lineTo(g.x, r), s.lineTo(g.x, g.y)) : t(f, h), u = c));
3714                            l || -1 === u || s.lineTo(d[u]._view.x, r), s.fillStyle = n.backgroundColor || a.defaultColor, s.closePath(), s.fill()
3715                        }
3716                        var p = a.elements.line;
3717                        for (s.lineCap = n.borderCapStyle || p.borderCapStyle, s.setLineDash && s.setLineDash(n.borderDash || p.borderDash), s.lineDashOffset = n.borderDashOffset || p.borderDashOffset, s.lineJoin = n.borderJoinStyle || p.borderJoinStyle, s.lineWidth = n.borderWidth || p.borderWidth, s.strokeStyle = n.borderColor || a.defaultColor, s.beginPath(), u = -1, c = 0; c < d.length; ++c)h = d[c], f = e.previousItem(d, c), g = h._view, 0 === c ? g.skip || (s.moveTo(g.x, g.y), u = c) : (f = -1 === u ? f : d[u], g.skip || (u !== c - 1 && !o || -1 === u ? s.moveTo(g.x, g.y) : t(f, h), u = c));
3718                        s.stroke(), s.restore()
3719                    }
3720                })
3721            }
3722        }, {}], 39: [function (t, e, a) {
3723            "use strict";
3724            e.exports = function (t) {
3725                function e(t) {
3726                    var e = this._view;
3727                    return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hitRadius, 2) : !1
3728                }
3729
3730                function a(t) {
3731                    var e = this._view;
3732                    return e ? Math.pow(t - e.y, 2) < Math.pow(e.radius + e.hitRadius, 2) : !1
3733                }
3734
3735                var i = t.helpers, n = t.defaults.global, o = n.defaultColor;
3736                n.elements.point = {
3737                    radius: 3,
3738                    pointStyle: "circle",
3739                    backgroundColor: o,
3740                    borderWidth: 1,
3741                    borderColor: o,
3742                    hitRadius: 1,
3743                    hoverRadius: 4,
3744                    hoverBorderWidth: 1
3745                }, t.elements.Point = t.Element.extend({
3746                    inRange: function (t, e) {
3747                        var a = this._view;
3748                        return a ? Math.pow(t - a.x, 2) + Math.pow(e - a.y, 2) < Math.pow(a.hitRadius + a.radius, 2) : !1
3749                    }, inLabelRange: e, inXRange: e, inYRange: a, getCenterPoint: function () {
3750                        var t = this._view;
3751                        return {x: t.x, y: t.y}
3752                    }, getArea: function () {
3753                        return Math.PI * Math.pow(this._view.radius, 2)
3754                    }, tooltipPosition: function () {
3755                        var t = this._view;
3756                        return {x: t.x, y: t.y, padding: t.radius + t.borderWidth}
3757                    }, draw: function () {
3758                        var e = this._view, a = this._chart.ctx, r = e.pointStyle, l = e.radius, s = e.x, d = e.y;
3759                        e.skip || (a.strokeStyle = e.borderColor || o, a.lineWidth = i.getValueOrDefault(e.borderWidth, n.elements.point.borderWidth), a.fillStyle = e.backgroundColor || o, t.canvasHelpers.drawPoint(a, r, l, s, d))
3760                    }
3761                })
3762            }
3763        }, {}], 40: [function (t, e, a) {
3764            "use strict";
3765            e.exports = function (t) {
3766                function e(t) {
3767                    return void 0 !== t._view.width
3768                }
3769
3770                function a(t) {
3771                    var a, i, n, o, r = t._view;
3772                    if (e(t)) {
3773                        var l = r.width / 2;
3774                        a = r.x - l, i = r.x + l, n = Math.min(r.y, r.base), o = Math.max(r.y, r.base)
3775                    } else {
3776                        var s = r.height / 2;
3777                        a = Math.min(r.x, r.base), i = Math.max(r.x, r.base), n = r.y - s, o = r.y + s
3778                    }
3779                    return {left: a, top: n, right: i, bottom: o}
3780                }
3781
3782                var i = t.defaults.global;
3783                i.elements.rectangle = {
3784                    backgroundColor: i.defaultColor,
3785                    borderWidth: 0,
3786                    borderColor: i.defaultColor,
3787                    borderSkipped: "bottom"
3788                }, t.elements.Rectangle = t.Element.extend({
3789                    draw: function () {
3790                        function t(t) {
3791                            return s[(u + t) % 4]
3792                        }
3793
3794                        var e = this._chart.ctx, a = this._view, i = a.width / 2, n = a.x - i, o = a.x + i, r = a.base - (a.base - a.y), l = a.borderWidth / 2;
3795                        a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth;
3796                        var s = [[n, a.base], [n, r], [o, r], [o, a.base]], d = ["bottom", "left", "top", "right"], u = d.indexOf(a.borderSkipped, 0);
3797                        -1 === u && (u = 0);
3798                        var c = t(0);
3799                        e.moveTo(c[0], c[1]);
3800                        for (var h = 1; 4 > h;
3800 h++)c = t(h), e.lineTo(c[0], c[1]);
3801                        e.fill(), a.borderWidth && e.stroke()
3802                    }, height: function () {
3803                        var t = this._view;
3804                        return t.base - t.y
3805                    }, inRange: function (t, e) {
3806                        var i = !1;
3807                        if (this._view) {
3808                            var n = a(this);
3809                            i = t >= n.left && t <= n.right && e >= n.top && e <= n.bottom
3810                        }
3811                        return i
3812                    }, inLabelRange: function (t, i) {
3813                        var n = this;
3814                        if (!n._view)return !1;
3815                        var o = !1, r = a(n);
3816                        return o = e(n) ? t >= r.left && t <= r.right : i >= r.top && i <= r.bottom
3817                    }, inXRange: function (t) {
3818                        var e = a(this);
3819                        return t >= e.left && t <= e.right
3820                    }, inYRange: function (t) {
3821                        var e = a(this);
3822                        return t >= e.top && t <= e.bottom
3823                    }, getCenterPoint: function () {
3824                        var t, a, i = this._view;
3825                        return e(this) ? (t = i.x, a = (i.y + i.base) / 2) : (t = (i.x + i.base) / 2, a = i.y), {
3826                            x: t,
3827                            y: a
3828                        }
3829                    }, getArea: function () {
3830                        var t = this._view;
3831                        return t.width * Math.abs(t.y - t.base)
3832                    }, tooltipPosition: function () {
3833                        var t = this._view;
3834                        return {x: t.x, y: t.y}
3835                    }
3836                })
3837            }
3838        }, {}], 41: [function (t, e, a) {
3839            "use strict";
3840            e.exports = function (t) {
3841                var e = t.helpers, a = {position: "bottom"}, i = t.Scale.extend({
3842                    getLabels: function () {
3843                        var t = this.chart.data;
3844                        return (this.isHorizontal() ? t.xLabels : t.yLabels) || t.labels
3845                    }, determineDataLimits: function () {
3846                        var t = this, a = t.getLabels();
3847                        t.minIndex = 0, t.maxIndex = a.length - 1;
3848                        var i;
3849                        void 0 !== t.options.ticks.min && (i = e.indexOf(a, t.options.ticks.min), t.minIndex = -1 !== i ? i : t.minIndex), void 0 !== t.options.ticks.max && (i = e.indexOf(a, t.options.ticks.max), t.maxIndex = -1 !== i ? i : t.maxIndex), t.min = a[t.minIndex], t.max = a[t.maxIndex]
3850                    }, buildTicks: function () {
3851                        var t = this, e = t.getLabels();
3852                        t.ticks = 0 === t.minIndex && t.maxIndex === e.length - 1 ? e : e.slice(t.minIndex, t.maxIndex + 1)
3853                    }, getLabelForIndex: function (t, e) {
3854                        var a = this, i = a.chart.data, n = a.isHorizontal();
3855                        return i.xLabels && n || i.yLabels && !n ? a.getRightValue(i.datasets[e].data[t]) : a.ticks[t]
3856                    }, getPixelForValue: function (t, e, a, i) {
3857                        var n = this, o = Math.max(n.maxIndex + 1 - n.minIndex - (n.options.gridLines.offsetGridLines ? 0 : 1), 1);
3858                        if (void 0 !== t && isNaN(e)) {
3859                            var r = n.getLabels(), l = r.indexOf(t);
3860                            e = -1 !== l ? l : e
3861                        }
3862                        if (n.isHorizontal()) {
3863                            var s = n.width - (n.paddingLeft + n.paddingRight), d = s / o, u = d * (e - n.minIndex) + n.paddingLeft;
3864                            return (n.options.gridLines.offsetGridLines && i || n.maxIndex === n.minIndex && i) && (u += d / 2),
3865                            n.left + Math.round(u)
3866                        }
3867                        var c = n.height - (n.paddingTop + n.paddingBottom), h = c / o, f = h * (e - n.minIndex) + n.paddingTop;
3868                        return n.options.gridLines.offsetGridLines && i && (f += h / 2), n.top + Math.round(f)
3869                    }, getPixelForTick: function (t, e) {
3870                        return this.getPixelForValue(this.ticks[t], t + this.minIndex, null, e)
3871                    }, getValueForPixel: function (t) {
3872                        var e, a = this, i = Math.max(a.ticks.length - (a.options.gridLines.offsetGridLines ? 0 : 1), 1), n = a.isHorizontal(), o = n ? a.width - (a.paddingLeft + a.paddingRight) : a.height - (a.paddingTop + a.paddingBottom), r = o / i;
3873                        return t -= n ? a.left : a.top, a.options.gridLines.offsetGridLines && (t -= r / 2), t -= n ? a.paddingLeft : a.paddingTop, e = 0 >= t ? 0 : Math.round(t / r)
3874                    }, getBasePixel: function () {
3875                        return this.bottom
3876                    }
3877                });
3878                t.scaleService.registerScaleType("category", i, a)
3879            }
3880        }, {}], 42: [function (t, e, a) {
3881            "use strict";
3882            e.exports = function (t) {
3883                var e = t.helpers, a = {
3884                    position: "left",
3885                    ticks: {callback: t.Ticks.formatters.linear}
3886                }, i = t.LinearScaleBase.extend({
3887                    determineDataLimits: function () {
3888                        function t(t) {
3889                            return l ? t.xAxisID === a.id : t.yAxisID === a.id
3890                        }
3891
3892                        var a = this, i = a.options, n = a.chart, o = n.data, r = o.datasets, l = a.isHorizontal();
3893                        if (a.min = null, a.max = null, i.stacked) {
3894                            var s = {};
3895                            e.each(r, function (o, r) {
3896                                var l = n.getDatasetMeta(r);
3897                                void 0 === s[l.type] && (s[l.type] = {positiveValues: [], negativeValues: []});
3898                                var d = s[l.type].positiveValues, u = s[l.type].negativeValues;
3899                                n.isDatasetVisible(r) && t(l) && e.each(o.data, function (t, e) {
3900                                    var n = +a.getRightValue(t);
3901                                    isNaN(n) || l.data[e].hidden || (d[e] = d[e] || 0, u[e] = u[e] || 0, i.relativePoints ? d[e] = 100 : 0 > n ? u[e] += n : d[e] += n)
3902                                })
3903                            }), e.each(s, function (t) {
3904                                var i = t.positiveValues.concat(t.negativeValues), n = e.min(i), o = e.max(i);
3905                                a.min = null === a.min ? n : Math.min(a.min, n), a.max = null === a.max ? o : Math.max(a.max, o)
3906                            })
3907                        } else e.each(r, function (i, o) {
3908                            var r = n.getDatasetMeta(o);
3909                            n.isDatasetVisible(o) && t(r) && e.each(i.data, function (t, e) {
3910                                var i = +a.getRightValue(t);
3911                                isNaN(i) || r.data[e].hidden || (null === a.min ? a.min = i : i < a.min && (a.min = i), null === a.max ? a.max = i : i > a.max && (a.max = i))
3912                            })
3913                        });
3914                        this.handleTickRangeOptions()
3915                    }, getTickLimit: function () {
3916                        var a, i = this, n = i.options.ticks;
3917                        if (i.isHorizontal())a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.width / 50)); else {
3918                            var o = e.getValueOrDefault(n.fontSize, t.defaults.global.defaultFontSize);
3919                            a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.height / (2 * o)))
3920                        }
3921                        return a
3922                    }, handleDirectionalChanges: function () {
3923                        this.isHorizontal() || this.ticks.reverse()
3924                    }, getLabelForIndex: function (t, e) {
3925                        return +this.getRightValue(this.chart.data.datasets[e].data[t])
3926                    }, getPixelForValue: function (t) {
3927                        var e, a, i = this, n = i.paddingLeft, o = i.paddingBottom, r = i.start, l = +i.getRightValue(t), s = i.end - r;
3928                        return i.isHorizontal() ? (a = i.width - (n + i.paddingRight), e = i.left + a / s * (l - r), Math.round(e + n)) : (a = i.height - (i.paddingTop + o), e = i.bottom - o - a / s * (l - r), Math.round(e))
3929                    }, getValueForPixel: function (t) {
3930                        var e = this, a = e.isHorizontal(), i = e.paddingLeft, n = e.paddingBottom, o = a ? e.width - (i + e.paddingRight) : e.height - (e.paddingTop + n), r = (a ? t - e.left - i : e.bottom - n - t) / o;
3931                        return e.start + (e.end - e.start) * r
3932                    }, getPixelForTick: function (t) {
3933                        return this.getPixelForValue(this.ticksAsNumbers[t])
3934                    }
3935                });
3936                t.scaleService.registerScaleType("linear", i, a)
3937            }
3938        }, {}], 43: [function (t, e, a) {
3939            "use strict";
3940            e.exports = function (t) {
3941                var e = t.helpers, a = e.noop;
3942                t.LinearScaleBase = t.Scale.extend({
3943                    handleTickRangeOptions: function () {
3944                        var t = this, a = t.options, i = a.ticks;
3945                        if (i.beginAtZero) {
3946                            var n = e.sign(t.min), o = e.sign(t.max);
3947                            0 > n && 0 > o ? t.max = 0 : n > 0 && o > 0 && (t.min = 0)
3948                        }
3949                        void 0 !== i.min ? t.min = i.min : void 0 !== i.suggestedMin && (t.min = Math.min(t.min, i.suggestedMin)), void 0 !== i.max ? t.max = i.max : void 0 !== i.suggestedMax && (t.max = Math.max(t.max, i.suggestedMax)), t.min === t.max && (t.max++, i.beginAtZero || t.min--)
3950                    }, getTickLimit: a, handleDirectionalChanges: a, buildTicks: function () {
3951                        var a = this, i = a.options, n = i.ticks, o = a.getTickLimit();
3952                        o = Math.max(2, o);
3953                        var r = {
3954                            maxTicks: o,
3955                            min: n.min,
3956                            max: n.max,
3957                            stepSize: e.getValueOrDefault(n.fixedStepSize, n.stepSize)
3958                        }, l = a.ticks = t.Ticks.generators.linear(r, a);
3959                        a.handleDirectionalChanges(), a.max = e.max(l), a.min = e.min(l), n.reverse ? (l.reverse(), a.start = a.max, a.end = a.min) : (a.start = a.min, a.end = a.max)
3960                    }, convertTicksToLabels: function () {
3961                        var e = this;
3962                        e.ticksAsNumbers = e.ticks.slice(), e.zeroLineIndex = e.ticks.indexOf(0), t.Scale.prototype.convertTicksToLabels.call(e)
3963                    }
3964                })
3965            }
3966        }, {}], 44: [function (t, e, a) {
3967            "use strict";
3968            e.exports = function (t) {
3969                var e = t.helpers, a = {
3970                    position: "left",
3971                    ticks: {callback: t.Ticks.formatters.logarithmic}
3972                }, i = t.Scale.extend({
3973                    determineDataLimits: function () {
3974                        function t(t) {
3975                            return d ? t.xAxisID === a.id : t.yAxisID === a.id
3976                        }
3977
3978                        var a = this, i = a.options, n = i.ticks, o = a.chart, r = o.data, l = r.datasets, s = e.getValueOrDefault, d = a.isHorizontal();
3979                        if (a.min = null, a.max = null, a.minNotZero = null, i.stacked) {
3980                            var u = {};
3981                            e.each(l, function (n, r) {
3982                                var l = o.getDatasetMeta(r);
3983                                o.isDatasetVisible(r) && t(l) && (void 0 === u[l.type] && (u[l.type] = []), e.each(n.data, function (t, e) {
3984                                    var n = u[l.type], o = +a.getRightValue(t);
3985                                    isNaN(o) || l.data[e].hidden || (n[e] = n[e] || 0, i.relativePoints ? n[e] = 100 : n[e] += o)
3986                                }))
3987                            }), e.each(u, function (t) {
3988                                var i = e.min(t), n = e.max(t);
3989                                a.min = null === a.min ? i : Math.min(a.min, i), a.max = null === a.max ? n : Math.max(a.max, n)
3990                            })
3991                        } else e.each(l, function (i, n) {
3992                            var r = o.getDatasetMeta(n);
3993                            o.isDatasetVisible(n) && t(r) && e.each(i.data, function (t, e) {
3994                                var i = +a.getRightValue(t);
3995                                isNaN(i) || r.data[e].hidden || (null === a.min ? a.min = i : i < a.min && (a.min = i), null === a.max ? a.max = i : i > a.max && (a.max = i), 0 !== i && (null === a.minNotZero || i < a.minNotZero) && (a.minNotZero = i))
3996                            })
3997                        });
3998                        a.min = s(n.min, a.min), a.max = s(n.max, a.max), a.min === a.max && (0 !== a.min && null !== a.min ? (a.min = Math.pow(10, Math.floor(e.log10(a.min)) - 1), a.max = Math.pow(10, Math.floor(e.log10(a.max)) + 1)) : (a.min = 1, a.max = 10))
3999                    }, buildTicks: function () {
4000                        var a = this, i = a.options, n = i.ticks, o = {
4001                            min: n.min,
4002                            max: n.max
4003                        }, r = a.ticks = t.Ticks.generators.logarithmic(o, a);
4004                        a.isHorizontal() || r.reverse(), a.max = e.max(r), a.min = e.min(r), n.reverse ? (r.reverse(), a.start = a.max, a.end = a.min) : (a.start = a.min, a.end = a.max)
4005                    }, convertTicksToLabels: function () {
4006                        this.tickValues = this.ticks.slice(), t.Scale.prototype.convertTicksToLabels.call(this)
4007                    }, getLabelForIndex: function (t, e) {
4008                        return +this.getRightValue(this.chart.data.datasets[e].data[t])
4009                    }, getPixelForTick: function (t) {
4010                        return this.getPixelForValue(this.tickValues[t])
4011                    }, getPixelForValue: function (t) {
4012                        var a, i, n, o = this, r = o.start, l = +o.getRightValue(t), s = o.paddingTop, d = o.paddingBottom, u = o.paddingLeft, c = o.options, h = c.ticks;
4013                        return o.isHorizontal() ? (n = e.log10(o.end) - e.log10(r), 0 === l ? i = o.left + u : (a = o.width - (u + o.paddingRight), i = o.left + a / 
4013n * (e.log10(l) - e.log10(r)), i += u)) : (a = o.height - (s + d), 0 !== r || h.reverse ? 0 === o.end && h.reverse ? (n = e.log10(o.start) - e.log10(o.minNotZero), i = l === o.end ? o.top + s : l === o.minNotZero ? o.top + s + .02 * a : o.top + s + .02 * a + .98 * a / n * (e.log10(l) - e.log10(o.minNotZero))) : (n = e.log10(o.end) - e.log10(r), a = o.height - (s + d), i = o.bottom - d - a / n * (e.log10(l) - e.log10(r))) : (n = e.log10(o.end) - e.log10(o.minNotZero), i = l === r ? o.bottom - d : l === o.minNotZero ? o.bottom - d - .02 * a : o.bottom - d - .02 * a - .98 * a / n * (e.log10(l) - e.log10(o.minNotZero)))), i
4014                    }, getValueForPixel: function (t) {
4015                        var a, i, n = this, o = e.log10(n.end) - e.log10(n.start);
4016                        return n.isHorizontal() ? (i = n.width - (n.paddingLeft + n.paddingRight), a = n.start * Math.pow(10, (t - n.left - n.paddingLeft) * o / i)) : (i = n.height - (n.paddingTop + n.paddingBottom), a = Math.pow(10, (n.bottom - n.paddingBottom - t) * o / i) / n.start), a
4017                    }
4018                });
4019                t.scaleService.registerScaleType("logarithmic", i, a)
4020            }
4021        }, {}], 45: [function (t, e, a) {
4022            "use strict";
4023            e.exports = function (t) {
4024                var e = t.helpers, a = t.defaults.global, i = {
4025                    display: !0,
4026                    animate: !0,
4027                    lineArc: !1,
4028                    position: "chartArea",
4029                    angleLines: {display: !0, color: "rgba(0, 0, 0, 0.1)", lineWidth: 1},
4030                    ticks: {
4031                        showLabelBackdrop: !0,
4032                        backdropColor: "rgba(255,255,255,0.75)",
4033                        backdropPaddingY: 2,
4034                        backdropPaddingX: 2,
4035                        callback: t.Ticks.formatters.linear
4036                    },
4037                    pointLabels: {
4038                        fontSize: 10, callback: function (t) {
4039                            return t
4040                        }
4041                    }
4042                }, n = t.LinearScaleBase.extend({
4043                    getValueCount: function () {
4044                        return this.chart.data.labels.length
4045                    }, setDimensions: function () {
4046                        var t = this, i = t.options, n = i.ticks;
4047                        t.width = t.maxWidth, t.height = t.maxHeight, t.xCenter = Math.round(t.width / 2), t.yCenter = Math.round(t.height / 2);
4048                        var o = e.min([t.height, t.width]), r = e.getValueOrDefault(n.fontSize, a.defaultFontSize);
4049                        t.drawingArea = i.display ? o / 2 - (r / 2 + n.backdropPaddingY) : o / 2
4050                    }, determineDataLimits: function () {
4051                        var t = this, a = t.chart;
4052                        t.min = null, t.max = null, e.each(a.data.datasets, function (i, n) {
4053                            if (a.isDatasetVisible(n)) {
4054                                var o = a.getDatasetMeta(n);
4055                                e.each(i.data, function (e, a) {
4056                                    var i = +t.getRightValue(e);
4057                                    isNaN(i) || o.data[a].hidden || (null === t.min ? t.min = i : i < t.min && (t.min = i), null === t.max ? t.max = i : i > t.max && (t.max = i))
4058                                })
4059                            }
4060                        }), t.handleTickRangeOptions()
4061                    }, getTickLimit: function () {
4062                        var t = this.options.ticks, i = e.getValueOrDefault(t.fontSize, a.defaultFontSize);
4063                        return Math.min(t.maxTicksLimit ? t.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * i)))
4064                    }, convertTicksToLabels: function () {
4065                        var e = this;
4066                        t.LinearScaleBase.prototype.convertTicksToLabels.call(e), e.pointLabels = e.chart.data.labels.map(e.options.pointLabels.callback, e)
4067                    }, getLabelForIndex: function (t, e) {
4068                        return +this.getRightValue(this.chart.data.datasets[e].data[t])
4069                    }, fit: function () {
4070                        var t, i, n, o, r, l, s, d, u, c, h, f, g = this.options.pointLabels, p = e.getValueOrDefault(g.fontSize, a.defaultFontSize), m = e.getValueOrDefault(g.fontStyle, a.defaultFontStyle), b = e.getValueOrDefault(g.fontFamily, a.defaultFontFamily), v = e.fontString(p, m, b), x = e.min([this.height / 2 - p - 5, this.width / 2]), y = this.width, k = 0;
4071                        for (this.ctx.font = v, i = 0; i < this.getValueCount(); i++) {
4072                            t = this.getPointPosition(i, x), n = this.ctx.measureText(this.pointLabels[i] ? this.pointLabels[i] : "").width + 5;
4073                            var S = this.getIndexAngle(i) + Math.PI / 2, w = 360 * S / (2 * Math.PI) % 360;
4074                            0 === w || 180 === w ? (o = n / 2, t.x + o > y && (y = t.x + o, r = i), t.x - o < k && (k = t.x - o, s = i)) : 180 > w ? t.x + n >
4074 y && (y = t.x + n, r = i) : t.x - n < k && (k = t.x - n, s = i)
4075                        }
4076                        u = k, c = Math.ceil(y - this.width), l = this.getIndexAngle(r), d = this.getIndexAngle(s), h = c / Math.sin(l + Math.PI / 2), f = u / Math.sin(d + Math.PI / 2), h = e.isNumber(h) ? h : 0, f = e.isNumber(f) ? f : 0, this.drawingArea = Math.round(x - (f + h) / 2), this.setCenterPoint(f, h)
4077                    }, setCenterPoint: function (t, e) {
4078                        var a = this, i = a.width - e - a.drawingArea, n = t + a.drawingArea;
4079                        a.xCenter = Math.round((n + i) / 2 + a.left), a.yCenter = Math.round(a.height / 2 + a.top)
4080                    }, getIndexAngle: function (t) {
4081                        var e = 2 * Math.PI / this.getValueCount(), a = this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0, i = a * Math.PI * 2 / 360;
4082                        return t * e - Math.PI / 2 + i
4083                    }, getDistanceFromCenterForValue: function (t) {
4084                        var e = this;
4085                        if (null === t)return 0;
4086                        var a = e.drawingArea / (e.max - e.min);
4087                        return e.options.reverse ? (e.max - t) * a : (t - e.min) * a
4088                    }, getPointPosition: function (t, e) {
4089                        var a = this, i = a.getIndexAngle(t);
4090                        return {x: Math.round(Math.cos(i) * e) + a.xCenter, y: Math.round(Math.sin(i) * e) + a.yCenter}
4091                    }, getPointPositionForValue: function (t, e) {
4092                        return this.getPointPosition(t, this.getDistanceFromCenterForValue(e))
4093                    }, getBasePosition: function () {
4094                        var t = this, e = t.min, a = t.max;
4095                        return t.getPointPositionForValue(0, t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0)
4096                    }, draw: function () {
4097                        var t = this, i = t.options, n = i.gridLines, o = i.ticks, r = i.angleLines, l = i.pointLabels, s = e.getValueOrDefault;
4098                        if (i.display) {
4099                            var d = t.ctx, u = s(o.fontSize, a.defaultFontSize), c = s(o.fontStyle, a.defaultFontStyle), h = s(o.fontFamily, a.defaultFontFamily), f = e.fontString(u, c, h);
4100                            if (e.each(t.ticks, function (r, l) {
4101                                    if (l > 0 || i.reverse) {
4102                                        var c = t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]), h = t.yCenter - c;
4103                                        if (n.display && 0 !== l)if (d.strokeStyle = e.getValueAtIndexOrDefault(n.color, l - 1), d.lineWidth = e.getValueAtIndexOrDefault(n.lineWidth, l - 1), i.lineArc)d.beginPath(), d.arc(t.xCenter, t.yCenter, c, 0, 2 * Math.PI), d.closePath(), d.stroke(); else {
4104                                            d.beginPath();
4105                                            for (var g = 0; g < t.getValueCount(); g++) {
4106                                                var p = t.getPointPosition(g, c);
4107                                                0 === g ? d.moveTo(p.x, p.y) : d.lineTo(p.x, p.y)
4108                                            }
4109                                            d.closePath(), d.stroke()
4110                                        }
4111                                        if (o.display) {
4112                                            var m = s(o.fontColor, a.defaultFontColor);
4113                                            if (d.font = f, o.showLabelBackdrop) {
4114                                                var b = d.measureText(r).width;
4115                                                d.fillStyle = o.backdropColor, d.fillRect(t.xCenter - b / 2 - o.backdropPaddingX, h - u / 2 - o.backdropPaddingY, b + 2 * o.backdropPaddingX, u + 2 * o.backdropPaddingY)
4116                                            }
4117                                            d.textAlign = "center", d.textBaseline = "middle", d.fillStyle = m, d.fillText(r, t.xCenter, h)
4118                                        }
4119                                    }
4120                                }), !i.lineArc) {
4121                                d.lineWidth = r.lineWidth, d.strokeStyle = r.color;
4122                                for (var g = t.getDistanceFromCenterForValue(i.reverse ? t.min : t.max), p = s(l.fontSize, a.defaultFontSize), m = s(l.fontStyle, a.defaultFontStyle), b = s(l.fontFamily, a.defaultFontFamily), v = e.fontString(p, m, b), x = t.getValueCount() - 1; x >= 0; x--) {
4123                                    if (r.display) {
4124                                        var y = t.getPointPosition(x, g);
4125                                        d.beginPath(), d.moveTo(t.xCenter, t.yCenter), d.lineTo(y.x, y.y), d.stroke(), d.closePath()
4126                                    }
4127                                    var k = t.getPointPosition(x, g + 5), S = s(l.fontColor, a.defaultFontColor);
4128                                    d.font = v, d.fillStyle = S;
4129                                    var w = t.pointLabels, M = this.getIndexAngle(x) + Math.PI / 2, C = 360 * M / (2 * Math.PI) % 360;
4130                                    0 === C || 180 === C ? d.textAlign = "center" : 180 > C ? d.textAlign = "left" : d.textAlign = "right", 90 === C || 270 === C ? d.textBaseline = "middle" : C > 270 || 90 > C ? d.textBaseline = "bottom" : d.textBaseline = "top", d.fillText(w[x] ? w[x] : "", k.x, k.y)
4131                                }
4132                            }
4133                        }
4134                    }
4135                });
4136                t.scaleService.registerScaleType("radialLinear", n, i)
4137            }
4138        }, {}], 46: [function (t, e, a) {
4139            "use strict";
4140            var i = t(1);
4141            i = "function" == typeof i ? i : window.moment, e.exports = function (t) {
4142                var e = t.helpers, a = {
4143                    units: [{
4144                        name: "millisecond",
4145                        steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]
4146                    }, {name: "second", steps: [1, 2, 5, 10, 30]}, {
4147                        name: "minute",
4148                        steps: [1, 2, 5, 10, 30]
4149                    }, {name: "hour", steps: [1, 2, 3, 6, 12]}, {name: "day", steps: [1, 2, 5]}, {
4150                        name: "week",
4151                        maxStep: 4
4152                    }, {name: "month", maxStep: 3}, {name: "quarter", maxStep: 4}, {name: "year", maxStep: !1}]
4153                }, n = {
4154                    position: "bottom",
4155                    time: {
4156                        parser: !1,
4157                        format: !1,
4158                        unit: !1,
4159                        round: !1,
4160                        displayFormat: !1,
4161                        isoWeekday: !1,
4162                        minUnit: "millisecond",
4163                        displayFormats: {
4164                            millisecond: "h:mm:ss.SSS a",
4165                            second: "h:mm:ss a",
4166                            minute: "h:mm:ss a",
4167                            hour: "MMM D, hA",
4168                            day: "ll",
4169                            week: "ll",
4170                            month: "MMM YYYY",
4171                            quarter: "[Q]Q - YYYY",
4172                            year: "YYYY"
4173                        }
4174                    },
4175                    ticks: {autoSkip: !1}
4176                }, o = t.Scale.extend({
4177                    initialize: function () {
4178                        if (!i)throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com");
4179                        t.Scale.prototype.initialize.call(this)
4180                    }, getLabelMoment: function (t, e) {
4181                        return null === t || null === e ? null : "undefined" != typeof this.labelMoments[t] ? this.labelMoments[t][e] : null
4182                    }, getLabelDiff: function (t, e) {
4183                        var a = this;
4184                        return null === t || null === e ? null : (void 0 === a.labelDiffs && a.buildLabelDiffs(), "undefined" != typeof a.labelDiffs[t] ? a.labelDiffs[t][e] 
4184: null)
4185                    }, getMomentStartOf: function (t) {
4186                        var e = this;
4187                        return "week" === e.options.time.unit && e.options.time.isoWeekday !== !1 ? t.clone().startOf("isoWeek").isoWeekday(e.options.time.isoWeekday) : t.clone().startOf(e.tickUnit)
4188                    }, determineDataLimits: function () {
4189                        var t = this;
4190                        t.labelMoments = [];
4191                        var a = [];
4192                        t.chart.data.labels && t.chart.data.labels.length > 0 ? (e.each(t.chart.data.labels, function (e) {
4193                            var i = t.parseTime(e);
4194                            i.isValid() && (t.options.time.round && i.startOf(t.options.time.round), a.push(i))
4195                        }, t), t.firstTick = i.min.call(t, a), t.lastTick = i.max.call(t, a)) : (t.firstTick = null, t.lastTick = null), e.each(t.chart.data.datasets, function (n, o) {
4196                            var r = [], l = t.chart.isDatasetVisible(o);
4197                            "object" == typeof n.data[0] && null !== n.data[0] ? e.each(n.data, function (e) {
4198                                var a = t.parseTime(t.getRightValue(e));
4199                                a.isValid() && (t.options.time.round && a.startOf(t.options.time.round), r.push(a), l && (t.firstTick = null !== t.firstTick ? i.min(t.firstTick, a) : a, t.lastTick = null !== t.lastTick ? i.max(t.lastTick, a) : a))
4200                            }, t) : r = a, t.labelMoments.push(r)
4201                        }, t), t.options.time.min && (t.firstTick = t.parseTime(t.options.time.min)), t.options.time.max && (t.lastTick = t.parseTime(t.options.time.max)), t.firstTick = (t.firstTick || i()).clone(), t.lastTick = (t.lastTick || i()).clone()
4202                    }, buildLabelDiffs: function () {
4203                        var t = this;
4204                        t.labelDiffs = [];
4205                        var a = [];
4206                        t.chart.data.labels && t.chart.data.labels.length > 0 && e.each(t.chart.data.labels, function (e) {
4207                            var i = t.parseTime(e);
4208                            i.isValid() && (t.options.time.round && i.startOf(t.options.time.round), a.push(i.diff(t.firstTick, t.tickUnit, !0)))
4209                        }, t), e.each(t.chart.data.datasets, function (i) {
4210                            var n = [];
4211                            "object" == typeof i.data[0] && null !== i.data[0] ? e.each(i.data, function (e) {
4212                                var a = t.parseTime(t.getRightValue(e));
4213                                a.isValid() && (t.options.time.round && a.startOf(t.options.time.round), n.push(a.diff(t.firstTick, t.tickUnit, !0)))
4214                            }, t) : n = a, t.labelDiffs.push(n)
4215                        }, t)
4216                    }, buildTicks: function () {
4217                        var i = this;
4218                        i.ctx.save();
4219                        var n = e.getValueOrDefault(i.options.ticks.fontSize, t.defaults.global.defaultFontSize), o = e.getValueOrDefault(i.options.ticks.fontStyle, t.defaults.global.defaultFontStyle), r = e.getValueOrDefault(i.options.ticks.fontFamily, t.defaults.global.defaultFontFamily), l = e.fontString(n, o, r);
4220                        if (i.ctx.font = l, i.ticks = [], i.unitScale = 1, i.scaleSizeInUnits = 0, i.options.time.unit)i.tickUnit = i.options.time.unit || "day", i.displayFormat = i.options.time.displayFormats[i.tickUnit], i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0), i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, 1); else {
4221                            var s = i.isHorizontal() ? i.width - (i.paddingLeft + i.paddingRight) : i.height - (i.paddingTop + i.paddingBottom), d = i.tickFormatFunction(i.firstTick, 0, []), u = i.ctx.measureText(d).width, c = Math.cos(e.toRadians(i.options.ticks.maxRotation)), h = Math.sin(e.toRadians(i.options.ticks.maxRotation));
4222                            u = u * c + n * h;
4223                            var f = s / u;
4224                            i.tickUnit = i.options.time.minUnit, i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0), i.displayFormat = i.options.time.displayFormats[i.tickUnit];
4225                            for (var g = 0, p = a.units[g]; g < a.units.length;) {
4226                                if (i.unitScale = 1, e.isArray(p.steps) && Math.ceil(i.scaleSizeInUnits / f) < e.max(p.steps)) {
4227                                    for (var m = 0; m < p.steps.length; ++m)if (p.steps[m] >= Math.ceil(i.scaleSizeInUnits / f)) {
4228                                        i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, p.steps[m]);
4229                                        break
4230                                    }
4231                                    break
4232                                }
4233                                if (p.maxStep === !1 || Math.ceil(i.scaleSizeInUnits / f) < p.maxStep) {
4234                                    i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, Math.ceil(i.scaleSizeInUnits / f));
4235                                    break
4236                                }
4237                                ++g, p = a.units[g], i.tickUnit = p.name;
4238                                var b = i.firstTick.diff(i.getMomentStartOf(i.firstTick), i.tickUnit, !0), v = i.getMomentStartOf(i.lastTick.clone().add(1, i.tickUnit)).diff(i.lastTick, i.tickUnit, !0);
4239                                i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0) + b + v, i.displayFormat = i.options.time.displayFormats[p.name]
4240                            }
4241                        }
4242                        var x;
4243                        if (i.options.time.min ? x = i.getMomentStartOf(i.firstTick) : (i.firstTick = i.getMomentStartOf(i.firstTick), x = i.firstTick), !i.options.time.max) {
4244                            var y = i.getMomentStartOf(i.lastTick), k = y.diff(i.lastTick, i.tickUnit, !0);
4245                            0 > k ? i.lastTick = i.getMomentStartOf(i.lastTick.add(1, i.tickUnit)) : k >= 0 && (i.lastTick = y), i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0)
4246                        }
4247                        i.options.time.displayFormat && (i.displayFormat = i.options.time.displayFormat), i.ticks.push(i.firstTick.clone());
4248                        for (var S = 1; S <= i.scaleSizeInUnits; ++S) {
4249                            var w = x.clone().add(S, i.tickUnit);
4250                            if (i.options.time.max && w.diff(i.lastTick, i.tickUnit, !0) >= 0)break;
4251                            S % i.unitScale === 0 && i.ticks.push(w)
4252                        }
4253                        var M = i.ticks[i.ticks.length - 1].diff(i.lastTick, i.tickUnit);
4254                        (0 !== M || 0 === i.scaleSizeInUnits) && (i.options.time.max ? (i.ticks.push(i.lastTick.clone()), i.scaleSizeInUnits = i.lastTick.diff(i.ticks[0], i.tickUnit, !0)) : (i.ticks.push(i.lastTick.clone()), i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0))), i.ctx.restore(
4254), i.labelDiffs = void 0
4255                    }, getLabelForIndex: function (t, e) {
4256                        var a = this, i = a.chart.data.labels && t < a.chart.data.labels.length ? a.chart.data.labels[t] : "";
4257                        return "object" == typeof a.chart.data.datasets[e].data[0] && (i = a.getRightValue(a.chart.data.datasets[e].data[t])), a.options.time.tooltipFormat && (i = a.parseTime(i).format(a.options.time.tooltipFormat)), i
4258                    }, tickFormatFunction: function (t, a, i) {
4259                        var n = t.format(this.displayFormat), o = this.options.ticks, r = e.getValueOrDefault(o.callback, o.userCallback);
4260                        return r ? r(n, a, i) : n
4261                    }, convertTicksToLabels: function () {
4262                        var t = this;
4263                        t.tickMoments = t.ticks, t.ticks = t.ticks.map(t.tickFormatFunction, t)
4264                    }, getPixelForValue: function (t, e, a) {
4265                        var i = this, n = null;
4266                        if (void 0 !== e && void 0 !== a && (n = i.getLabelDiff(a, e)), null === n && (t && t.isValid || (t = i.parseTime(i.getRightValue(t))), t && t.isValid && t.isValid() && (n = t.diff(i.firstTick, i.tickUnit, !0))), null !== n) {
4267                            var o = 0 !== n ? n / i.scaleSizeInUnits : n;
4268                            if (i.isHorizontal()) {
4269                                var r = i.width - (i.paddingLeft + i.paddingRight), l = r * o + i.paddingLeft;
4270                                return i.left + Math.round(l)
4271                            }
4272                            var s = i.height - (i.paddingTop + i.paddingBottom), d = s * o + i.paddingTop;
4273                            return i.top + Math.round(d)
4274                        }
4275                    }, getPixelForTick: function (t) {
4276                        return this.getPixelForValue(this.tickMoments[t], null, null)
4277                    }, getValueForPixel: function (t) {
4278                        var e = this, a = e.isHorizontal() ? e.width - (e.paddingLeft + e.paddingRight) : e.height - (e.paddingTop + e.paddingBottom), n = (t - (e.isHorizontal() ? e.left + e.paddingLeft : e.top + e.paddingTop)) / a;
4279                        return n *= e.scaleSizeInUnits, e.firstTick.clone().add(i.duration(n, e.tickUnit).asSeconds(), "seconds")
4280                    }, parseTime: function (t) {
4281                        var e = this;
4282                        return "string" == typeof e.options.time.parser ? i(t, e.options.time.parser) : "function" == typeof e.options.time.parser ? e.options.time.parser(t) : "function" == typeof t.getMonth || "number" == typeof t ? i(t) : t.isValid && t.isValid() ? t : "string" != typeof e.options.time.format && e.options.time.format.call ? (console.warn("options.time.format is deprecated and replaced by options.time.parser. See http://nnnick.github.io/Chart.js/docs-v2/#scales-time-scale"), e.options.time.format(t)) : i(t, e.options.time.format)
4283                    }
4284                });
4285                t.scaleService.registerScaleType("time", o, n)
4286            }
4287        }, {1: 1}]
4288    }, {}, [7])(7)
4289});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.