diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml
index 2551c366b..1399d5674 100644
--- a/.github/ISSUE_TEMPLATE/bug.yaml
+++ b/.github/ISSUE_TEMPLATE/bug.yaml
@@ -37,6 +37,7 @@ body:
label: "🎲 Appwrite version"
description: "What version of Appwrite are you running?"
options:
+ - Version 0.11.x
- Version 0.10.x
- Version 0.9.x
- Version 0.8.x
diff --git a/README.md b/README.md
index 09a6eea44..e71cbf57e 100644
--- a/README.md
+++ b/README.md
@@ -102,7 +102,6 @@ Getting started with Appwrite is as easy as creating a new project, choosing you
* [Getting Started for Android](https://appwrite.io/docs/getting-started-for-android)
* [Getting Started for Server](https://appwrite.io/docs/getting-started-for-server)
* [Getting Started for CLI](https://appwrite.io/docs/command-line)
-* Getting Started for iOS (Coming soon...)
### Services
@@ -139,8 +138,9 @@ Below is a list of currently supported platforms and languages. If you wish to h
* ✅ [.NET](https://github.com/appwrite/sdk-for-dotnet) - **Experimental** (Maintained by the Appwrite Team)
#### Community
-* ✅ [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (Maintained by [Michael Gangolf](https://github.com/m1ga/))
-
+* ✅ [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (Maintained by [Michael Gangolf](https://github.com/m1ga/))
+* ✅ [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (Maintained by [fenix-hub @GodotNuts](https://github.com/fenix-hub))
+
Looking for more SDKs? - Help us by contributing a pull request to our [SDK Generator](https://github.com/appwrite/sdk-generator)!
## Contributing
diff --git a/app/config/locale/translations/fa.json b/app/config/locale/translations/fa.json
index 2ea78963a..346e3759b 100644
--- a/app/config/locale/translations/fa.json
+++ b/app/config/locale/translations/fa.json
@@ -1,24 +1,24 @@
{
- "settings.inspire": "\"هنر خردمند بودن، هنر دانستن چیزی است که باید از آن غافل شد.\"",
+ "settings.inspire": "\"هنر خردمند بودن این است که بدانید چه چیزی را نادیده بگیرید.\"",
"settings.locale": "fa",
"settings.direction": "rtl",
"emails.sender": "تیم %s",
"emails.verification.subject": "تأیید حساب",
"emails.verification.hello": "سلام {{name}}",
- "emails.verification.body": "برای تأیید حسابتان پیوند زیر را دنبال کنید.",
- "emails.verification.footer": "اگر شما درخواست تأیید حساب ندادهاید، میتوانید این ایمیل را نادیده بگیرید.",
+ "emails.verification.body": "برای تأیید ایمیلتان پیوند زیر را دنبال کنید.",
+ "emails.verification.footer": "اگر شما درخواست تأیید حساب ندادهاید، میتوانید این پیام را نادیده بگیرید.",
"emails.verification.thanks": "سپاس فراوان",
"emails.verification.signature": "تیم {{name}}",
"emails.magicSession.subject": "ورود به حساب کاربری",
"emails.magicSession.hello": "سلام،",
"emails.magicSession.body": "برای ورود به حسابتان پیوند زیر را دنبال کنید.",
- "emails.magicSession.footer": "اگر شما درخواست ورود به حساب کاربری ندادهاید، میتوانید این ایمیل را نادیده بگیرید.",
+ "emails.magicSession.footer": "اگر شما درخواست ورود به حساب کاربری با استفاده از این ایمیل را ندادهاید، میتوانید این پیام را نادیده بگیرید.",
"emails.magicSession.thanks": "سپاس فراوان",
"emails.magicSession.signature": "تیم {{name}}",
"emails.recovery.subject": "بازیابی گذرواژه",
"emails.recovery.hello": "سلام {{name}}",
"emails.recovery.body": "برای بازیابی گذرواژهتان پیوند زیر را دنبال کنید.",
- "emails.recovery.footer": "اگر شما درخواست بازیابی گذرواژه ندادهاید، میتوانید این ایمیل را نادیده بگیرید.",
+ "emails.recovery.footer": "اگر شما درخواست بازیابی گذرواژه ندادهاید، میتوانید این پیام را نادیده بگیرید.",
"emails.recovery.thanks": "سپاس فراوان",
"emails.recovery.signature": "تیم {{name}}",
"emails.invitation.subject": "دعوت به تیم %s در %s",
diff --git a/app/config/locale/translations/ga.json b/app/config/locale/translations/ga.json
index 9ff3f16bf..d572fa01a 100644
--- a/app/config/locale/translations/ga.json
+++ b/app/config/locale/translations/ga.json
@@ -28,205 +28,205 @@
"emails.invitation.thanks": "Go raibh maith agat",
"emails.invitation.signature": "{{project}} foireann",
"locale.country.unknown": "Neamhaithnid",
- "countries.af": "Afghanistan",
- "countries.ao": "Angola",
- "countries.al": "Albania",
- "countries.ad": "Andorra",
- "countries.ae": "United Arab Emirates",
- "countries.ar": "Argentina",
- "countries.am": "Armenia",
- "countries.ag": "Antigua and Barbuda",
- "countries.au": "Australia",
- "countries.at": "Austria",
- "countries.az": "Azerbaijan",
- "countries.bi": "Burundi",
- "countries.be": "Belgium",
- "countries.bj": "Benin",
- "countries.bf": "Burkina Faso",
- "countries.bd": "Bangladesh",
- "countries.bg": "Bulgaria",
- "countries.bh": "Bahrain",
- "countries.bs": "Bahamas",
- "countries.ba": "Bosnia and Herzegovina",
- "countries.by": "Belarus",
- "countries.bz": "Belize",
- "countries.bo": "Bolivia",
- "countries.br": "Brazil",
- "countries.bb": "Barbados",
- "countries.bn": "Brunei",
- "countries.bt": "Bhutan",
- "countries.bw": "Botswana",
- "countries.cf": "Central African Republic",
- "countries.ca": "Canada",
- "countries.ch": "Switzerland",
- "countries.cl": "Chile",
- "countries.cn": "China",
- "countries.ci": "Ivory Coast",
- "countries.cm": "Cameroon",
- "countries.cd": "DR Congo",
- "countries.cg": "Republic of the Congo",
- "countries.co": "Colombia",
- "countries.km": "Comoros",
+ "countries.af": "An Afganastáin",
+ "countries.ao": "Angóla",
+ "countries.al": "Albáin",
+ "countries.ad": "Andóra",
+ "countries.ae": "Aontas na nÉimíríochtaí Arabacha",
+ "countries.ar": "Airgintín",
+ "countries.am": "Airméin",
+ "countries.ag": "Antigua agus Barbúda",
+ "countries.au": "Astráil",
+ "countries.at": "Ostair",
+ "countries.az": "Asarbaiseáin",
+ "countries.bi": "An Bhurúin",
+ "countries.be": "An Bheilg",
+ "countries.bj": "Beinin",
+ "countries.bf": "Buircíne Fasó",
+ "countries.bd": "An Bhanglaidéis",
+ "countries.bg": "An Bhulgáir",
+ "countries.bh": "Bairéin",
+ "countries.bs": "Na Bahámaí",
+ "countries.ba": "An Bhoisnia agus an Heirseagaivéin",
+ "countries.by": "An Bhealarúis",
+ "countries.bz": "An Bheilís",
+ "countries.bo": "An Bholaiv",
+ "countries.br": "An Bhrasaíl",
+ "countries.bb": "Barbadós",
+ "countries.bn": "Brúiné",
+ "countries.bt": "An Bhútáin",
+ "countries.bw": "An Bhotsuáin",
+ "countries.cf": "Poblacht na hAfraice Láir",
+ "countries.ca": "Ceanada",
+ "countries.ch": "An Eilvéis",
+ "countries.cl": "An tSile",
+ "countries.cn": "An tSín",
+ "countries.ci": "Poblacht Côte d’Ivoire",
+ "countries.cm": "Camarún",
+ "countries.cd": "Poblacht Dhaonlathach an Chongó",
+ "countries.cg": "Poblacht an Chongó",
+ "countries.co": "An Cholóim",
+ "countries.km": "Oileáin Chomóra",
"countries.cv": "Cape Verde",
- "countries.cr": "Costa Rica",
- "countries.cu": "Cuba",
- "countries.cy": "Cyprus",
- "countries.cz": "Czechia",
- "countries.de": "Germany",
+ "countries.cr": "Cósta Ríce",
+ "countries.cu": "Cúba",
+ "countries.cy": "An Chipir",
+ "countries.cz": "An tSeicia",
+ "countries.de": "An Ghearmáin",
"countries.dj": "Djibouti",
- "countries.dm": "Dominica",
- "countries.dk": "Denmark",
- "countries.do": "Dominican Republic",
- "countries.dz": "Algeria",
- "countries.ec": "Ecuador",
- "countries.eg": "Egypt",
- "countries.er": "Eritrea",
- "countries.es": "Spain",
- "countries.ee": "Estonia",
- "countries.et": "Ethiopia",
- "countries.fi": "Finland",
- "countries.fj": "Fiji",
- "countries.fr": "France",
- "countries.fm": "Micronesia",
- "countries.ga": "Gabon",
- "countries.gb": "United Kingdom",
- "countries.ge": "Georgia",
- "countries.gh": "Ghana",
- "countries.gn": "Guinea",
- "countries.gm": "Gambia",
- "countries.gw": "Guinea-Bissau",
- "countries.gq": "Equatorial Guinea",
- "countries.gr": "Greece",
- "countries.gd": "Grenada",
- "countries.gt": "Guatemala",
- "countries.gy": "Guyana",
- "countries.hn": "Honduras",
- "countries.hr": "Croatia",
- "countries.ht": "Haiti",
- "countries.hu": "Hungary",
- "countries.id": "Indonesia",
+ "countries.dm": "Doiminice",
+ "countries.dk": "An Danmhairg",
+ "countries.do": "An Phoblacht Dhoiminiceach",
+ "countries.dz": "An Ailgéir",
+ "countries.ec": "Eacuadór",
+ "countries.eg": "An Éigipt",
+ "countries.er": "An Eiritré",
+ "countries.es": "An Spáinn",
+ "countries.ee": "An Eastóin",
+ "countries.et": "An Aetóip",
+ "countries.fi": "An Fhionlainn",
+ "countries.fj": "Fidsí",
+ "countries.fr": "An Fhrainc",
+ "countries.fm": "An Mhicrinéis",
+ "countries.ga": "An Ghabúin",
+ "countries.gb": "An Ríocht Aontaithe",
+ "countries.ge": "An tSeoirsia",
+ "countries.gh": "Gána",
+ "countries.gn": "An Ghuine",
+ "countries.gm": "An Ghaimbia",
+ "countries.gw": "Guine Bissau",
+ "countries.gq": "An Ghuine Mheánchiorclach",
+ "countries.gr": "An Ghréig",
+ "countries.gd": "Greanáda",
+ "countries.gt": "Guatamala",
+ "countries.gy": "An Ghuáin",
+ "countries.hn": "Hondúras",
+ "countries.hr": "An Chróit",
+ "countries.ht": "Háítí",
+ "countries.hu": "An Ungáir",
+ "countries.id": "An Indinéis",
"countries.in": "India",
- "countries.ie": "Ireland",
- "countries.ir": "Iran",
- "countries.iq": "Iraq",
- "countries.is": "Iceland",
- "countries.il": "Israel",
- "countries.it": "Italy",
- "countries.jm": "Jamaica",
- "countries.jo": "Jordan",
- "countries.jp": "Japan",
- "countries.kz": "Kazakhstan",
- "countries.ke": "Kenya",
- "countries.kg": "Kyrgyzstan",
- "countries.kh": "Cambodia",
- "countries.ki": "Kiribati",
- "countries.kn": "Saint Kitts and Nevis",
- "countries.kr": "South Korea",
- "countries.kw": "Kuwait",
+ "countries.ie": "Éire",
+ "countries.ir": "An Iaráin",
+ "countries.iq": "An Iaráic",
+ "countries.is": "An Íoslainn",
+ "countries.il": "Iosrael",
+ "countries.it": "An Iodáil",
+ "countries.jm": "Iamáice",
+ "countries.jo": "An Iordáin",
+ "countries.jp": "An tSeapáin",
+ "countries.kz": "An Chasacstáin",
+ "countries.ke": "An Chéinia",
+ "countries.kg": "An Chirgeastáin",
+ "countries.kh": "An Chambóid",
+ "countries.ki": "Ciribeas",
+ "countries.kn": "San Críostóir-Nimheas",
+ "countries.kr": "An Chóiré Theas",
+ "countries.kw": "Cuáit",
"countries.la": "Laos",
- "countries.lb": "Lebanon",
- "countries.lr": "Liberia",
- "countries.ly": "Libya",
+ "countries.lb": "An Liobáin",
+ "countries.lr": "An Libéir",
+ "countries.ly": "An Libia",
"countries.lc": "Saint Lucia",
- "countries.li": "Liechtenstein",
- "countries.lk": "Sri Lanka",
- "countries.ls": "Lesotho",
- "countries.lt": "Lithuania",
- "countries.lu": "Luxembourg",
- "countries.lv": "Latvia",
- "countries.ma": "Morocco",
- "countries.mc": "Monaco",
- "countries.md": "Moldova",
+ "countries.li": "Lichtinstéin",
+ "countries.lk": "Srí Lanca",
+ "countries.ls": "Leosóta",
+ "countries.lt": "An Liotuáin",
+ "countries.lu": "Lucsamburg",
+ "countries.lv": "An Laitvia",
+ "countries.ma": "Maracó",
+ "countries.mc": "Monacó",
+ "countries.md": "An Mholdóiv",
"countries.mg": "Madagascar",
- "countries.mv": "Maldives",
- "countries.mx": "Mexico",
- "countries.mh": "Marshall Islands",
- "countries.mk": "Macedonia",
- "countries.ml": "Mali",
- "countries.mt": "Malta",
- "countries.mm": "Myanmar",
- "countries.me": "Montenegro",
- "countries.mn": "Mongolia",
- "countries.mz": "Mozambique",
- "countries.mr": "Mauritania",
- "countries.mu": "Mauritius",
- "countries.mw": "Malawi",
- "countries.my": "Malaysia",
- "countries.na": "Namibia",
+ "countries.mv": "Oileáin Mhaildíve",
+ "countries.mx": "Meicsiceo",
+ "countries.mh": "Oileáin Marshall",
+ "countries.mk": "An Mhacadóin",
+ "countries.ml": "Mailí",
+ "countries.mt": "Málta",
+ "countries.mm": "Maenmar",
+ "countries.me": "Montainéagró",
+ "countries.mn": "An Mhongóil",
+ "countries.mz": "Mósaimbíc",
+ "countries.mr": "An Mháratáin",
+ "countries.mu": "Oileán Mhuirís",
+ "countries.mw": "Malávach",
+ "countries.my": "An Mhalaeisia",
+ "countries.na": "An Namaib",
"countries.ne": "Niger",
- "countries.ng": "Nigeria",
- "countries.ni": "Nicaragua",
- "countries.nl": "Netherlands",
- "countries.no": "Norway",
- "countries.np": "Nepal",
- "countries.nr": "Nauru",
- "countries.nz": "New Zealand",
- "countries.om": "Oman",
- "countries.pk": "Pakistan",
+ "countries.ng": "An Nigéir",
+ "countries.ni": "Nicearagua",
+ "countries.nl": "An Ísiltír",
+ "countries.no": "An Iorua",
+ "countries.np": "Neipeal",
+ "countries.nr": "Nárú",
+ "countries.nz": "An Nua-Shéalainn",
+ "countries.om": "Óman",
+ "countries.pk": "An Phacastáin",
"countries.pa": "Panama",
- "countries.pe": "Peru",
- "countries.ph": "Philippines",
- "countries.pw": "Palau",
- "countries.pg": "Papua New Guinea",
- "countries.pl": "Poland",
- "countries.kp": "North Korea",
- "countries.pt": "Portugal",
- "countries.py": "Paraguay",
- "countries.qa": "Qatar",
- "countries.ro": "Romania",
- "countries.ru": "Russia",
- "countries.rw": "Rwanda",
- "countries.sa": "Saudi Arabia",
- "countries.sd": "Sudan",
- "countries.sn": "Senegal",
- "countries.sg": "Singapore",
- "countries.sb": "Solomon Islands",
- "countries.sl": "Sierra Leone",
- "countries.sv": "El Salvador",
- "countries.sm": "San Marino",
- "countries.so": "Somalia",
- "countries.rs": "Serbia",
- "countries.ss": "South Sudan",
- "countries.st": "São Tomé and Príncipe",
- "countries.sr": "Suriname",
- "countries.sk": "Slovakia",
- "countries.si": "Slovenia",
- "countries.se": "Sweden",
- "countries.sz": "Swaziland",
- "countries.sc": "Seychelles",
- "countries.sy": "Syria",
- "countries.td": "Chad",
- "countries.tg": "Togo",
- "countries.th": "Thailand",
- "countries.tj": "Tajikistan",
- "countries.tm": "Turkmenistan",
- "countries.tl": "Timor-Leste",
+ "countries.pe": "Peiriú",
+ "countries.ph": "Na hOileáin Fhilipíneacha",
+ "countries.pw": "Oileáin Palau",
+ "countries.pg": "Nua-Ghuine Phapua",
+ "countries.pl": "An Pholainn",
+ "countries.kp": "An Chóiré Thuaidh",
+ "countries.pt": "An Phortaingéil",
+ "countries.py": "Paragua",
+ "countries.qa": "Catar",
+ "countries.ro": "An Rómáin",
+ "countries.ru": "An Rúis",
+ "countries.rw": "Ruanda",
+ "countries.sa": "An Araib Shádach",
+ "countries.sd": "An tSúdáin",
+ "countries.sn": "An tSeineagáil",
+ "countries.sg": "Singeapór",
+ "countries.sb": "Oileáin Sholaimh",
+ "countries.sl": "Siarra Leon",
+ "countries.sv": "An tSalvadóir",
+ "countries.sm": "San Mairíne",
+ "countries.so": "An tSomáil",
+ "countries.rs": "An tSeirbia",
+ "countries.ss": "An tSúdáin Theas",
+ "countries.st": "São Tomé agus Príncipe",
+ "countries.sr": "Suranam",
+ "countries.sk": "An tSlóvaic",
+ "countries.si": "An tSlóivéin",
+ "countries.se": "An tSualainn",
+ "countries.sz": "An tSuasalainn",
+ "countries.sc": "Na Séiséil",
+ "countries.sy": "An tSiria",
+ "countries.td": "Sead",
+ "countries.tg": "Tóga",
+ "countries.th": "An Téalainn",
+ "countries.tj": "An Táidsíceastáin",
+ "countries.tm": "An Tuircméanastáin",
+ "countries.tl": "Tíomór Thoir",
"countries.to": "Tonga",
- "countries.tt": "Trinidad and Tobago",
- "countries.tn": "Tunisia",
- "countries.tr": "Turkey",
- "countries.tv": "Tuvalu",
- "countries.tz": "Tanzania",
+ "countries.tt": "Oileán na Tríonóide agus Tobága",
+ "countries.tn": "An Túinéis",
+ "countries.tr": "An Tuirc",
+ "countries.tv": "Túvalú",
+ "countries.tz": "An Tansáin",
"countries.ug": "Uganda",
- "countries.ua": "Ukraine",
- "countries.uy": "Uruguay",
- "countries.us": "United States",
- "countries.uz": "Uzbekistan",
- "countries.va": "Vatican City",
- "countries.vc": "Saint Vincent and the Grenadines",
- "countries.ve": "Venezuela",
- "countries.vn": "Vietnam",
- "countries.vu": "Vanuatu",
- "countries.ws": "Samoa",
- "countries.ye": "Yemen",
- "countries.za": "South Africa",
- "countries.zm": "Zambia",
- "countries.zw": "Zimbabwe",
- "continents.af": "Africa",
- "continents.an": "Antarctica",
- "continents.as": "Asia",
- "continents.eu": "Europe",
- "continents.na": "North America",
- "continents.oc": "Oceania",
- "continents.sa": "South America"
+ "countries.ua": "An Úcráin",
+ "countries.uy": "Uragua",
+ "countries.us": "Na Stáit Aontaithe",
+ "countries.uz": "An Úisbéiceastáin",
+ "countries.va": "Cathair na Vatacáine",
+ "countries.vc": "San Uinseann agus na Greanáidíní",
+ "countries.ve": "Veiniséala",
+ "countries.vn": "Vítneam",
+ "countries.vu": "Vanuatú",
+ "countries.ws": "Samó",
+ "countries.ye": "Éimin",
+ "countries.za": "An Afraic Theas",
+ "countries.zm": "An tSaimbia",
+ "countries.zw": "An tSiombáib",
+ "continents.af": "An Afraic",
+ "continents.an": "Antartaice",
+ "continents.as": "An Áise",
+ "continents.eu": "An Eoraip",
+ "continents.na": "Meiriceá Thuaidh",
+ "continents.oc": "An Aigéine",
+ "continents.sa": "Meiriceá Theas"
}
diff --git a/app/config/locale/translations/jv.json b/app/config/locale/translations/jv.json
index a7c658c8b..06990dfa9 100644
--- a/app/config/locale/translations/jv.json
+++ b/app/config/locale/translations/jv.json
@@ -3,30 +3,30 @@
"settings.locale": "jv",
"settings.direction": "ltr",
"emails.sender": "Tim %s",
- "emails.verification.subject": "",
- "emails.verification.hello": "",
- "emails.verification.body": "",
- "emails.verification.footer": "",
- "emails.verification.thanks": "",
- "emails.verification.signature": "",
- "emails.magicSession.subject": "",
- "emails.magicSession.hello": "",
- "emails.magicSession.body": "",
- "emails.magicSession.footer": "",
- "emails.magicSession.thanks": "",
- "emails.magicSession.signature": "",
- "emails.recovery.subject": "",
- "emails.recovery.hello": "",
- "emails.recovery.body": "",
- "emails.recovery.footer": "",
- "emails.recovery.thanks": "",
- "emails.recovery.signature": "",
- "emails.invitation.subject": "",
- "emails.invitation.hello": "",
- "emails.invitation.body": "",
- "emails.invitation.footer": "",
- "emails.invitation.thanks": "",
- "emails.invitation.signature": "",
+ "emails.verification.subject": "Verifikasi Akun",
+ "emails.verification.hello": "Hai {{name}}",
+ "emails.verification.body": "Klik link iki kanggo verifikasi alamat email sampeyan.",
+ "emails.verification.footer": "Yen sampeyan ora njaluk verifikasi alamat iki, sampeyan iso nglirwakake pesen iki.",
+ "emails.verification.thanks": "Matur nuwun",
+ "emails.verification.signature": "Tim {{project}}",
+ "emails.magicSession.subject": "Masuk",
+ "emails.magicSession.hello": "Hai,",
+ "emails.magicSession.body": "Klik link iki kanggo masuk.",
+ "emails.magicSession.footer": "Yen sampeyan ora njaluk masuk nggunakake alamat email iki, sampeyan iso nglirwakake pesen iki.",
+ "emails.magicSession.thanks": "Matur nuwun",
+ "emails.magicSession.signature": "Tim {{project}}",
+ "emails.recovery.subject": "Setel ulang sandi",
+ "emails.recovery.hello": "Halo {{name}}",
+ "emails.recovery.body": "Klik link iki kanggo setel ulang sandi {{project}}.",
+ "emails.recovery.footer": "Yen sampeyan ora njaluk setel ulang sandi, sampeyan iso nglirwakake pesen iki.",
+ "emails.recovery.thanks": "Matur nuwun",
+ "emails.recovery.signature": "Tim {{project}}",
+ "emails.invitation.subject": "Undangan ke Tim %s di %s",
+ "emails.invitation.hello": "Halo",
+ "emails.invitation.body": "Email iki dikirim menyang sampeyan amarga {{owner}} pengin ngajak sampeyan dadi anggota tim {{team}} di {{project}}.",
+ "emails.invitation.footer": "Yen sampeyan ora tertarik, sampeyan iso nglirwakake pesen iki.",
+ "emails.invitation.thanks": "Matur nuwun",
+ "emails.invitation.signature": "Tim {{project}}",
"locale.country.unknown": "Ora dingerteni",
"countries.af": "Afghanistan",
"countries.ao": "Angola",
diff --git a/app/config/locale/translations/mr.json b/app/config/locale/translations/mr.json
index 45a08f5f7..1b3adfe06 100644
--- a/app/config/locale/translations/mr.json
+++ b/app/config/locale/translations/mr.json
@@ -3,30 +3,30 @@
"settings.locale": "mr",
"settings.direction": "ltr",
"emails.sender": "%s टीम",
- "emails.verification.subject": "",
- "emails.verification.hello": "",
- "emails.verification.body": "",
- "emails.verification.footer": "",
- "emails.verification.thanks": "",
- "emails.verification.signature": "",
- "emails.magicSession.subject": "",
- "emails.magicSession.hello": "",
- "emails.magicSession.body": "",
- "emails.magicSession.footer": "",
- "emails.magicSession.thanks": "",
- "emails.magicSession.signature": "",
- "emails.recovery.subject": "",
- "emails.recovery.hello": "",
- "emails.recovery.body": "",
- "emails.recovery.footer": "",
- "emails.recovery.thanks": "",
- "emails.recovery.signature": "",
- "emails.invitation.subject": "",
- "emails.invitation.hello": "",
- "emails.invitation.body": "",
- "emails.invitation.footer": "",
- "emails.invitation.thanks": "",
- "emails.invitation.signature": "",
+ "emails.verification.subject": "खाते सत्यापन",
+ "emails.verification.hello": "नमस्कार {{name}}",
+ "emails.verification.body": "आपला ईमेल पत्ता सत्यापित करण्यासाठी या दुव्याचे अनुसरण करा.",
+ "emails.verification.footer": "आपण या पत्त्याची पडताळणी करण्यास सांगितले नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.",
+ "emails.verification.thanks": "धन्यवाद",
+ "emails.verification.signature": "{{project}} संघ",
+ "emails.magicSession.subject": "लॉगिन करा",
+ "emails.magicSession.hello": "नमस्कार ,",
+ "emails.magicSession.body": "लॉगिन करण्यासाठी या लिंकचे अनुसरण करा.",
+ "emails.magicSession.footer": "आपण या ईमेलचा वापर करून लॉगिन करण्यास सांगितले नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.",
+ "emails.magicSession.thanks": "धन्यवाद",
+ "emails.magicSession.signature": "{{project}} संघ",
+ "emails.recovery.subject": "पासवर्ड रीसेट",
+ "emails.recovery.hello": "नमस्कार {{name}}",
+ "emails.recovery.body": "आपला {{project}}चे पासवर्ड रीसेट करण्यासाठी या लिंकचे अनुसरण करा",
+ "emails.recovery.footer": "आपण आपला पासवर्ड रीसेट करण्यास सांगितले नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.",
+ "emails.recovery.thanks": "धन्यवाद",
+ "emails.recovery.signature": "{{project}} संघ",
+ "emails.invitation.subject": "%s संघ %s येथे सामील होण्यासाठी आमंत्रण",
+ "emails.invitation.hello": "नमस्कार",
+ "emails.invitation.body": "हा मेल तुम्हाला पाठवला होता कारण {{owner}} तुम्हाला {{project}} येथे {{team}} टीमचे सदस्य होण्यासाठी आमंत्रित करू इच्छित होते.",
+ "emails.invitation.footer": "आपल्याला स्वारस्य नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.",
+ "emails.invitation.thanks": "धन्यवाद",
+ "emails.invitation.signature": "{{project}} संघ",
"locale.country.unknown": "अज्ञात",
"countries.af": "अफगानिस्तान",
"countries.ao": "अंगोला",
diff --git a/app/config/platforms.php b/app/config/platforms.php
index ba2c376cb..6f5e69625 100644
--- a/app/config/platforms.php
+++ b/app/config/platforms.php
@@ -15,7 +15,7 @@ return [
[
'key' => 'web',
'name' => 'Web',
- 'version' => '4.0.4',
+ 'version' => '5.0.0',
'url' => 'https://github.com/appwrite/sdk-for-web',
'package' => 'https://www.npmjs.com/package/appwrite',
'enabled' => true,
@@ -190,7 +190,7 @@ return [
[
'key' => 'nodejs',
'name' => 'Node.js',
- 'version' => '2.5.1',
+ 'version' => '3.0.0',
'url' => 'https://github.com/appwrite/sdk-for-node',
'package' => 'https://www.npmjs.com/package/node-appwrite',
'enabled' => true,
@@ -208,11 +208,11 @@ return [
[
'key' => 'deno',
'name' => 'Deno',
- 'version' => '0.4.1',
+ 'version' => '1.0.0',
'url' => 'https://github.com/appwrite/sdk-for-deno',
'package' => 'https://deno.land/x/appwrite',
'enabled' => true,
- 'beta' => true,
+ 'beta' => false,
'dev' => false,
'hidden' => false,
'family' => APP_PLATFORM_SERVER,
diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php
index ded17b58c..5af1bf7a4 100644
--- a/app/controllers/api/account.php
+++ b/app/controllers/api/account.php
@@ -23,6 +23,7 @@ use Utopia\Database\Validator\UID;
use Utopia\Exception;
use Utopia\Validator\ArrayList;
use Utopia\Validator\Assoc;
+use Utopia\Validator\Range;
use Utopia\Validator\Text;
use Utopia\Validator\WhiteList;
@@ -1182,13 +1183,15 @@ App::get('/v1/account/logs')
->label('sdk.response.code', Response::STATUS_CODE_OK)
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_LOG_LIST)
+ ->param('limit', 25, new Range(0, 100), 'Maximum number of logs to return in response. Use this value to manage pagination. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true)
+ ->param('offset', 0, new Range(0, 900000000), 'Offset value. The default value is 0. Use this param to manage pagination.', true)
->inject('response')
->inject('user')
->inject('locale')
->inject('geodb')
->inject('dbForInternal')
->inject('usage')
- ->action(function ($response, $user, $locale, $geodb, $dbForInternal, $usage) {
+ ->action(function ($limit, $offset, $response, $user, $locale, $geodb, $dbForInternal, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Document $project */
/** @var Utopia\Database\Document $user */
@@ -1198,8 +1201,7 @@ App::get('/v1/account/logs')
/** @var Appwrite\Stats\Stats $usage */
$audit = new Audit($dbForInternal);
-
- $logs = $audit->getLogsByUserAndEvents($user->getId(), [
+ $auditEvents = [
'account.create',
'account.delete',
'account.update.name',
@@ -1215,7 +1217,9 @@ App::get('/v1/account/logs')
'teams.membership.create',
'teams.membership.update',
'teams.membership.delete',
- ]);
+ ];
+
+ $logs = $audit->getLogsByUserAndEvents($user->getId(), $auditEvents, $limit, $offset);
$output = [];
@@ -1245,7 +1249,11 @@ App::get('/v1/account/logs')
$usage
->setParam('users.read', 1)
;
- $response->dynamic(new Document(['logs' => $output]), Response::MODEL_LOG_LIST);
+
+ $response->dynamic(new Document([
+ 'sum' => $audit->countLogsByUserAndEvents($user->getId(), $auditEvents),
+ 'logs' => $output,
+ ]), Response::MODEL_LOG_LIST);
});
App::get('/v1/account/sessions/:sessionId')
diff --git a/app/controllers/api/database.php b/app/controllers/api/database.php
index 29ac582d5..fce13c10a 100644
--- a/app/controllers/api/database.php
+++ b/app/controllers/api/database.php
@@ -40,13 +40,14 @@ use DeviceDetector\DeviceDetector;
* @param Utopia\Database\Document $attribute
* @param Appwrite\Utopia\Response $response
* @param Utopia\Database\Database $dbForInternal
+ * @param Utopia\Database\Database $dbForExternal
* @param Appwrite\Event\Event $database
* @param Appwrite\Event\Event $audits
* @param Appwrite\Stats\Stats $usage
*
* @return Document Newly created attribute document
*/
-function createAttribute($collectionId, $attribute, $response, $dbForInternal, $database, $audits, $usage): Document
+function createAttribute($collectionId, $attribute, $response, $dbForInternal, $dbForExternal, $database, $audits, $usage): Document
{
$attributeId = $attribute->getId();
$type = $attribute->getAttribute('type', '');
@@ -107,6 +108,7 @@ function createAttribute($collectionId, $attribute, $response, $dbForInternal, $
}
$dbForInternal->deleteCachedDocument('collections', $collectionId);
+ $dbForExternal->deleteCachedCollection($collectionId);
// Pass clone of $attribute object to workers
// so we can later modify Document to fit response model
@@ -458,12 +460,14 @@ App::get('/v1/database/collections/:collectionId/logs')
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_LOG_LIST)
->param('collectionId', '', new UID(), 'Collection unique ID.')
+ ->param('limit', 25, new Range(0, 100), 'Maximum number of logs to return in response. Use this value to manage pagination. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true)
+ ->param('offset', 0, new Range(0, 900000000), 'Offset value. The default value is 0. Use this param to manage pagination.', true)
->inject('response')
->inject('dbForInternal')
->inject('dbForExternal')
->inject('locale')
->inject('geodb')
- ->action(function ($collectionId, $response, $dbForInternal, $dbForExternal, $locale, $geodb) {
+ ->action(function ($collectionId, $limit, $offset, $response, $dbForInternal, $dbForExternal, $locale, $geodb) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Document $project */
/** @var Utopia\Database\Database $dbForInternal */
@@ -478,8 +482,8 @@ App::get('/v1/database/collections/:collectionId/logs')
}
$audit = new Audit($dbForInternal);
-
- $logs = $audit->getLogsByResource('collection/'.$collection->getId());
+ $resource = 'collection/'.$collection->getId();
+ $logs = $audit->getLogsByResource($resource, $limit, $offset);
$output = [];
@@ -539,7 +543,10 @@ App::get('/v1/database/collections/:collectionId/logs')
}
}
- $response->dynamic(new Document(['logs' => $output]), Response::MODEL_LOG_LIST);
+ $response->dynamic(new Document([
+ 'sum' => $audit->countLogsByResource($resource),
+ 'logs' => $output,
+ ]), Response::MODEL_LOG_LIST);
});
App::put('/v1/database/collections/:collectionId')
@@ -683,12 +690,14 @@ App::post('/v1/database/collections/:collectionId/attributes/string')
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $size, $required, $default, $array, $response, $dbForInternal, $database, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $size, $required, $default, $array, $response, $dbForInternal, $dbForExternal, $database, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal*/
+ /** @var Utopia\Database\Database $dbForExternal*/
/** @var Appwrite\Event\Event $database */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
@@ -706,7 +715,7 @@ App::post('/v1/database/collections/:collectionId/attributes/string')
'required' => $required,
'default' => $default,
'array' => $array,
- ]), $response, $dbForInternal, $database, $audits, $usage);
+ ]), $response, $dbForInternal, $dbForExternal, $database, $audits, $usage);
$response->dynamic($attribute, Response::MODEL_ATTRIBUTE_STRING);
});
@@ -730,12 +739,14 @@ App::post('/v1/database/collections/:collectionId/attributes/email')
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $required, $default, $array, $response, $dbForInternal, $database, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $required, $default, $array, $response, $dbForInternal, $dbForExternal, $database, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal*/
+ /** @var Utopia\Database\Database $dbForExternal*/
/** @var Appwrite\Event\Event $database */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
@@ -748,7 +759,7 @@ App::post('/v1/database/collections/:collectionId/attributes/email')
'default' => $default,
'array' => $array,
'format' => APP_DATABASE_ATTRIBUTE_EMAIL,
- ]), $response, $dbForInternal, $database, $audits, $usage);
+ ]), $response, $dbForInternal, $dbForExternal, $database, $audits, $usage);
$response->dynamic($attribute, Response::MODEL_ATTRIBUTE_EMAIL);
});
@@ -773,12 +784,14 @@ App::post('/v1/database/collections/:collectionId/attributes/enum')
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $elements, $required, $default, $array, $response, $dbForInternal, $database, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $elements, $required, $default, $array, $response, $dbForInternal, $dbForExternal, $database, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal*/
+ /** @var Utopia\Database\Database $dbForExternal*/
/** @var Appwrite\Event\Event $database */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
@@ -803,7 +816,7 @@ App::post('/v1/database/collections/:collectionId/attributes/enum')
'array' => $array,
'format' => APP_DATABASE_ATTRIBUTE_ENUM,
'formatOptions' => ['elements' => $elements],
- ]), $response, $dbForInternal, $database, $audits, $usage);
+ ]), $response, $dbForInternal, $dbForExternal, $database, $audits, $usage);
$response->dynamic($attribute, Response::MODEL_ATTRIBUTE_ENUM);
});
@@ -827,12 +840,14 @@ App::post('/v1/database/collections/:collectionId/attributes/ip')
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $required, $default, $array, $response, $dbForInternal, $database, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $required, $default, $array, $response, $dbForInternal, $dbForExternal, $database, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal*/
+ /** @var Utopia\Database\Database $dbForExternal*/
/** @var Appwrite\Event\Event $database */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
@@ -845,7 +860,7 @@ App::post('/v1/database/collections/:collectionId/attributes/ip')
'default' => $default,
'array' => $array,
'format' => APP_DATABASE_ATTRIBUTE_IP,
- ]), $response, $dbForInternal, $database, $audits, $usage);
+ ]), $response, $dbForInternal, $dbForExternal, $database, $audits, $usage);
$response->dynamic($attribute, Response::MODEL_ATTRIBUTE_IP);
});
@@ -869,10 +884,11 @@ App::post('/v1/database/collections/:collectionId/attributes/url')
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $required, $default, $array, $response, $dbForInternal, $database, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $required, $default, $array, $response, $dbForInternal, $dbForExternal, $database, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForExternal*/
/** @var Appwrite\Event\Event $database */
@@ -887,7 +903,7 @@ App::post('/v1/database/collections/:collectionId/attributes/url')
'default' => $default,
'array' => $array,
'format' => APP_DATABASE_ATTRIBUTE_URL,
- ]), $response, $dbForInternal, $database, $audits, $usage);
+ ]), $response, $dbForInternal, $dbForExternal, $database, $audits, $usage);
$response->dynamic($attribute, Response::MODEL_ATTRIBUTE_URL);
});
@@ -913,12 +929,14 @@ App::post('/v1/database/collections/:collectionId/attributes/integer')
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $required, $min, $max, $default, $array, $response, $dbForInternal, $database, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $required, $min, $max, $default, $array, $response, $dbForInternal, $dbForExternal, $database, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal*/
+ /** @var Utopia\Database\Database $dbForExternal*/
/** @var Appwrite\Event\Event $database */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
@@ -949,7 +967,7 @@ App::post('/v1/database/collections/:collectionId/attributes/integer')
'min' => $min,
'max' => $max,
],
- ]), $response, $dbForInternal, $database, $audits, $usage);
+ ]), $response, $dbForInternal, $dbForExternal, $database, $audits, $usage);
$formatOptions = $attribute->getAttribute('formatOptions', []);
@@ -982,12 +1000,14 @@ App::post('/v1/database/collections/:collectionId/attributes/float')
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $required, $min, $max, $default, $array, $response, $dbForInternal, $database, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $required, $min, $max, $default, $array, $response, $dbForInternal, $dbForExternal,$database, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal*/
+ /** @var Utopia\Database\Database $dbForExternal*/
/** @var Appwrite\Event\Event $database */
/** @var Appwrite\Event\Event $audits */
/** @var Appwrite\Stats\Stats $usage */
@@ -1018,7 +1038,7 @@ App::post('/v1/database/collections/:collectionId/attributes/float')
'min' => $min,
'max' => $max,
],
- ]), $response, $dbForInternal, $database, $audits, $usage);
+ ]), $response, $dbForInternal, $dbForExternal, $database, $audits, $usage);
$formatOptions = $attribute->getAttribute('formatOptions', []);
@@ -1049,10 +1069,11 @@ App::post('/v1/database/collections/:collectionId/attributes/boolean')
->param('array', false, new Boolean(), 'Is attribute an array?', true)
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $required, $default, $array, $response, $dbForInternal, $database, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $required, $default, $array, $response, $dbForInternal, $dbForExternal, $database, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal*/
/** @var Appwrite\Event\Event $database */
@@ -1066,7 +1087,7 @@ App::post('/v1/database/collections/:collectionId/attributes/boolean')
'required' => $required,
'default' => $default,
'array' => $array,
- ]), $response, $dbForInternal, $database, $audits, $usage);
+ ]), $response, $dbForInternal, $dbForExternal, $database, $audits, $usage);
$response->dynamic($attribute, Response::MODEL_ATTRIBUTE_BOOLEAN);
});
@@ -1184,13 +1205,15 @@ App::delete('/v1/database/collections/:collectionId/attributes/:attributeId')
->param('attributeId', '', new Key(), 'Attribute ID.')
->inject('response')
->inject('dbForInternal')
+ ->inject('dbForExternal')
->inject('database')
->inject('events')
->inject('audits')
->inject('usage')
- ->action(function ($collectionId, $attributeId, $response, $dbForInternal, $database, $events, $audits, $usage) {
+ ->action(function ($collectionId, $attributeId, $response, $dbForInternal, $dbForExternal, $database, $events, $audits, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Database $dbForInternal */
+ /** @var Utopia\Database\Database $dbForExternal */
/** @var Appwrite\Event\Event $database */
/** @var Appwrite\Event\Event $events */
/** @var Appwrite\Event\Event $audits */
@@ -1214,6 +1237,7 @@ App::delete('/v1/database/collections/:collectionId/attributes/:attributeId')
}
$dbForInternal->deleteCachedDocument('collections', $collectionId);
+ $dbForExternal->deleteCachedCollection($collection->getId());
$database
->setParam('type', DATABASE_TYPE_DELETE_ATTRIBUTE)
diff --git a/app/controllers/api/health.php b/app/controllers/api/health.php
index 20dcbfb60..60b778d83 100644
--- a/app/controllers/api/health.php
+++ b/app/controllers/api/health.php
@@ -46,9 +46,20 @@ App::get('/v1/health/db')
->action(function ($response, $utopia) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\App $utopia */
- $utopia->getResource('db');
+ try {
+ $db = $utopia->getResource('db'); /* @var $db PDO */
- $response->json(['status' => 'OK']);
+ // Run a small test to check the connection
+ $statement = $db->prepare("SELECT 1;");
+
+ $statement->closeCursor();
+
+ $statement->execute();
+ } catch (Exception $_e) {
+ throw new Exception('Database is not available', 500);
+ }
+
+ return $response->json(['status' => 'OK']);
});
App::get('/v1/health/cache')
@@ -64,9 +75,14 @@ App::get('/v1/health/cache')
->action(function ($response, $utopia) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\App $utopia */
- $utopia->getResource('cache');
+ /** @var Redis */
+ $redis = $utopia->getResource('cache');
- $response->json(['status' => 'OK']);
+ if ($redis->ping(true)) {
+ return $response->json(['status' => 'OK']);
+ } else {
+ throw new Exception('Cache is not available', 500);
+ }
});
App::get('/v1/health/time')
diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php
index d6c9f1212..a398922c9 100644
--- a/app/controllers/api/users.php
+++ b/app/controllers/api/users.php
@@ -259,12 +259,14 @@ App::get('/v1/users/:userId/logs')
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
->label('sdk.response.model', Response::MODEL_LOG_LIST)
->param('userId', '', new UID(), 'User unique ID.')
+ ->param('limit', 25, new Range(0, 100), 'Maximum number of logs to return in response. Use this value to manage pagination. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true)
+ ->param('offset', 0, new Range(0, 900000000), 'Offset value. The default value is 0. Use this param to manage pagination.', true)
->inject('response')
->inject('dbForInternal')
->inject('locale')
->inject('geodb')
->inject('usage')
- ->action(function ($userId, $response, $dbForInternal, $locale, $geodb, $usage) {
+ ->action(function ($userId, $limit, $offset, $response, $dbForInternal, $locale, $geodb, $usage) {
/** @var Appwrite\Utopia\Response $response */
/** @var Utopia\Database\Document $project */
/** @var Utopia\Database\Database $dbForInternal */
@@ -279,8 +281,7 @@ App::get('/v1/users/:userId/logs')
}
$audit = new Audit($dbForInternal);
-
- $logs = $audit->getLogsByUserAndEvents($user->getId(), [
+ $auditEvents = [
'account.create',
'account.delete',
'account.update.name',
@@ -296,7 +297,9 @@ App::get('/v1/users/:userId/logs')
'teams.membership.create',
'teams.membership.update',
'teams.membership.delete',
- ]);
+ ];
+
+ $logs = $audit->getLogsByUserAndEvents($user->getId(), $auditEvents, $limit, $offset);
$output = [];
@@ -355,7 +358,11 @@ App::get('/v1/users/:userId/logs')
$usage
->setParam('users.read', 1)
;
- $response->dynamic(new Document(['logs' => $output]), Response::MODEL_LOG_LIST);
+
+ $response->dynamic(new Document([
+ 'sum' => $audit->countLogsByUserAndEvents($user->getId(), $auditEvents),
+ 'logs' => $output,
+ ]), Response::MODEL_LOG_LIST);
});
App::patch('/v1/users/:userId/status')
diff --git a/app/controllers/mock.php b/app/controllers/mock.php
index 9c0a7ab72..5020614ba 100644
--- a/app/controllers/mock.php
+++ b/app/controllers/mock.php
@@ -234,29 +234,74 @@ App::post('/v1/mock/tests/general/upload')
->param('z', null, new ArrayList(new Text(256)), 'Sample array param')
->param('file', [], new File(), 'Sample file param', false)
->inject('request')
- ->action(function ($x, $y, $z, $file, $request) {
+ ->inject('response')
+ ->action(function ($x, $y, $z, $file, $request, $response) {
/** @var Utopia\Swoole\Request $request */
+ /** @var Utopia\Swoole\Response $response */
$file = $request->getFiles('file');
- $file['tmp_name'] = (\is_array($file['tmp_name'])) ? $file['tmp_name'] : [$file['tmp_name']];
- $file['name'] = (\is_array($file['name'])) ? $file['name'] : [$file['name']];
- $file['size'] = (\is_array($file['size'])) ? $file['size'] : [$file['size']];
+
+ $contentRange = $request->getHeader('content-range');
+ if(!empty($contentRange)) {
+ $start = $request->getContentRangeStart();
+ $end = $request->getContentRangeEnd();
+ $size = $request->getContentRangeSize();
+ $id = $request->getHeader('x-appwrite-id', '');
+ $file['size'] = (\is_array($file['size'])) ? $file['size'] : [$file['size']];
- foreach ($file['name'] as $i => $name) {
- if ($name !== 'file.png') {
- throw new Exception('Wrong file name', 400);
+ if(is_null($start) || is_null($end) || is_null($size)) {
+ throw new Exception('Invalid content-range header', 400);
}
- }
- foreach ($file['size'] as $i => $size) {
- if ($size !== 38756) {
- throw new Exception('Wrong file size', 400);
+ if($start > $end || $end > $size) {
+ throw new Exception('Invalid content-range header', 400);
}
- }
- foreach ($file['tmp_name'] as $i => $tmpName) {
- if (\md5(\file_get_contents($tmpName)) !== 'd80e7e6999a3eb2ae0d631a96fe135a4') {
- throw new Exception('Wrong file uploaded', 400);
+ if($start === 0 && !empty($id)) {
+ throw new Exception('First chunked request cannot have id header', 400);
+ }
+
+ if($start !== 0 && $id !== 'newfileid') {
+ throw new Exception('All chunked request must have id header (except first)', 400);
+ }
+
+ if($end !== $size && $end-$start+1 !== 5*1024*1024) {
+ throw new Exception('Chunk size must be 5MB (except last chunk)', 400);
+ }
+
+ foreach ($file['size'] as $i => $sz) {
+ if ($end !== $size && $sz !== 5*1024*1024) {
+ throw new Exception('Wrong chunk size', 400);
+ }
+
+ if($sz > 5*1024*1024) {
+ throw new Exception('Chunk size must be 5MB or less', 400);
+ }
+ }
+ if($end !== $size) {
+ $response->json(['$id'=> 'newfileid']);
+ }
+ } else {
+ $file['tmp_name'] = (\is_array($file['tmp_name'])) ? $file['tmp_name'] : [$file['tmp_name']];
+ $file['name'] = (\is_array($file['name'])) ? $file['name'] : [$file['name']];
+ $file['size'] = (\is_array($file['size'])) ? $file['size'] : [$file['size']];
+
+ foreach ($file['name'] as $i => $name) {
+ if ($name !== 'file.png') {
+ throw new Exception('Wrong file name', 400);
+ }
+ }
+
+ foreach ($file['size'] as $i => $size) {
+ if ($size !== 38756) {
+ throw new Exception('Wrong file size', 400);
+ }
+ }
+
+ foreach ($file['tmp_name'] as $i => $tmpName) {
+ if (\md5(\file_get_contents($tmpName)) !== 'd80e7e6999a3eb2ae0d631a96fe135a4') {
+ throw new Exception('Wrong file uploaded', 400);
+ }
}
}
});
diff --git a/app/tasks/usage.php b/app/tasks/usage.php
index 701037fcc..dac8f7fe9 100644
--- a/app/tasks/usage.php
+++ b/app/tasks/usage.php
@@ -246,17 +246,19 @@ $cli
$max = 10;
$sleep = 1;
- $database = $client->selectDB('telegraf');
do { // check if telegraf database is ready
- $attempts++;
- if(!in_array('telegraf', $client->listDatabases())) {
+ try {
+ $attempts++;
+ $database = $client->selectDB('telegraf');
+ if(in_array('telegraf', $client->listDatabases())) {
+ break; // leave the do-while if successful
+ }
+ } catch (\Throwable $th) {
Console::warning("InfluxDB not ready. Retrying connection ({$attempts})...");
if($attempts >= $max) {
throw new \Exception('InfluxDB database not ready yet');
}
sleep($sleep);
- } else {
- break; // leave the do-while if successful
}
} while ($attempts < $max);
@@ -382,7 +384,7 @@ $cli
$dbForProject->updateDocument('stats', $document->getId(),
$document->setAttribute('value', $storageTotal));
}
-
+
$time = (int) (floor(time() / 86400) * 86400); // Time rounded to nearest day
$id = \md5($time . '_1d_storage.total'); //Construct unique id for each metric using time, period and metric
$document = $dbForProject->getDocument('stats', $id);
diff --git a/app/workers/deletes.php b/app/workers/deletes.php
index fcc080ad4..9ae1d37d5 100644
--- a/app/workers/deletes.php
+++ b/app/workers/deletes.php
@@ -11,7 +11,7 @@ use Utopia\Abuse\Adapters\TimeLimit;
use Utopia\CLI\Console;
use Utopia\Audit\Audit;
-require_once __DIR__.'/../init.php';
+require_once __DIR__ . '/../init.php';
Console::title('Deletes V1 Worker');
Console::success(APP_NAME . ' deletes worker v1 has started' . "\n");
@@ -31,12 +31,11 @@ class DeletesV1 extends Worker
{
$projectId = $this->args['projectId'] ?? '';
$type = $this->args['type'] ?? '';
-
+
switch (strval($type)) {
case DELETE_TYPE_DOCUMENT:
- $document = $this->args['document'] ?? [];
- $document = new Document($document);
-
+ $document = new Document($this->args['document'] ?? []);
+
switch ($document->getCollection()) {
case DELETE_TYPE_COLLECTIONS:
$this->deleteCollection($document, $projectId);
@@ -72,8 +71,7 @@ class DeletesV1 extends Worker
break;
case DELETE_TYPE_REALTIME:
- //$this->deleteRealtimeUsage($this->args['timestamp']);
- //TODO: implement this
+ $this->deleteRealtimeUsage($this->args['timestamp']);
break;
case DELETE_TYPE_CERTIFICATES:
@@ -120,12 +118,10 @@ class DeletesV1 extends Worker
* @param int $timestamp1d
* @param int $timestamp30m
*/
- protected function deleteUsageStats(int $timestamp1d, int $timestamp30m) {
- $this->deleteForProjectIds(function($projectId) use ($timestamp1d, $timestamp30m) {
- if (!($dbForInternal = $this->getInternalDB($projectId))) {
- throw new Exception('Failed to get projectDB for project '.$projectId);
- }
-
+ protected function deleteUsageStats(int $timestamp1d, int $timestamp30m)
+ {
+ $this->deleteForProjectIds(function (string $projectId) use ($timestamp1d, $timestamp30m) {
+ $dbForInternal = $this->getInternalDB($projectId);
// Delete Usage stats
$this->deleteByGroup('stats', [
new Query('time', Query::TYPE_LESSER, [$timestamp1d]),
@@ -138,7 +134,7 @@ class DeletesV1 extends Worker
], $dbForInternal);
});
}
-
+
/**
* @param Document $document teams document
* @param string $projectId
@@ -159,13 +155,14 @@ class DeletesV1 extends Worker
protected function deleteProject(Document $document): void
{
$projectId = $document->getId();
+
// Delete all DBs
$this->getExternalDB($projectId)->delete();
$this->getInternalDB($projectId)->delete();
// Delete all storage directories
- $uploads = new Local(APP_STORAGE_UPLOADS.'/app-'.$document->getId());
- $cache = new Local(APP_STORAGE_CACHE.'/app-'.$document->getId());
+ $uploads = new Local(APP_STORAGE_UPLOADS . '/app-' . $document->getId());
+ $cache = new Local(APP_STORAGE_CACHE . '/app-' . $document->getId());
$uploads->delete($uploads->getRoot(), true);
$cache->delete($cache->getRoot(), true);
@@ -183,12 +180,12 @@ class DeletesV1 extends Worker
// Delete Memberships and decrement team membership counts
$this->deleteByGroup('memberships', [
new Query('userId', Query::TYPE_EQUAL, [$userId])
- ], $this->getInternalDB($projectId), function(Document $document) use ($projectId, $userId) {
+ ], $this->getInternalDB($projectId), function (Document $document) use ($projectId) {
if ($document->getAttribute('confirm')) { // Count only confirmed members
$teamId = $document->getAttribute('teamId');
$team = $this->getInternalDB($projectId)->getDocument('teams', $teamId);
- if(!$team->isEmpty()) {
+ if (!$team->isEmpty()) {
$team = $this->getInternalDB($projectId)->updateDocument('teams', $teamId, new Document(\array_merge($team->getArrayCopy(), [
'sum' => \max($team->getAttribute('sum', 0) - 1, 0), // Ensure that sum >= 0
])));
@@ -202,11 +199,8 @@ class DeletesV1 extends Worker
*/
protected function deleteExecutionLogs(int $timestamp): void
{
- $this->deleteForProjectIds(function(string $projectId) use ($timestamp) {
- if (!($dbForInternal = $this->getInternalDB($projectId))) {
- throw new Exception('Failed to get projectDB for project '.$projectId);
- }
-
+ $this->deleteForProjectIds(function (string $projectId) use ($timestamp) {
+ $dbForInternal = $this->getInternalDB($projectId);
// Delete Executions
$this->deleteByGroup('executions', [
new Query('dateCreated', Query::TYPE_LESSER, [$timestamp])
@@ -214,18 +208,33 @@ class DeletesV1 extends Worker
});
}
+ /**
+ * @param int $timestamp
+ */
+ protected function deleteRealtimeUsage(int $timestamp): void
+ {
+ $this->deleteForProjectIds(function (string $projectId) use ($timestamp) {
+ $dbForInternal = $this->getInternalDB($projectId);
+ // Delete Dead Realtime Logs
+ $this->deleteByGroup('realtime', [
+ new Query('timestamp', Query::TYPE_LESSER, [$timestamp])
+ ], $dbForInternal);
+ });
+ }
+
/**
* @param int $timestamp
*/
protected function deleteAbuseLogs(int $timestamp): void
{
- if($timestamp == 0) {
+ if ($timestamp == 0) {
throw new Exception('Failed to delete audit logs. No timestamp provided');
}
- $this->deleteForProjectIds(function($projectId) use ($timestamp){
- $timeLimit = new TimeLimit("", 0, 1, $this->getInternalDB($projectId));
- $abuse = new Abuse($timeLimit);
+ $this->deleteForProjectIds(function (string $projectId) use ($timestamp) {
+ $dbForInternal = $this->getInternalDB($projectId);
+ $timeLimit = new TimeLimit("", 0, 1, $dbForInternal);
+ $abuse = new Abuse($timeLimit);
$status = $abuse->cleanup($timestamp);
if (!$status) {
@@ -239,11 +248,12 @@ class DeletesV1 extends Worker
*/
protected function deleteAuditLogs(int $timestamp): void
{
- if($timestamp == 0) {
+ if ($timestamp == 0) {
throw new Exception('Failed to delete audit logs. No timestamp provided');
}
- $this->deleteForProjectIds(function($projectId) use ($timestamp){
- $audit = new Audit($this->getInternalDB($projectId));
+ $this->deleteForProjectIds(function (string $projectId) use ($timestamp) {
+ $dbForInternal = $this->getInternalDB($projectId);
+ $audit = new Audit($dbForInternal);
$status = $audit->cleanup($timestamp);
if (!$status) {
throw new Exception('Failed to delete Audit logs for project' . $projectId);
@@ -258,12 +268,12 @@ class DeletesV1 extends Worker
protected function deleteFunction(Document $document, string $projectId): void
{
$dbForInternal = $this->getInternalDB($projectId);
- $device = new Local(APP_STORAGE_FUNCTIONS.'/app-'.$projectId);
+ $device = new Local(APP_STORAGE_FUNCTIONS . '/app-' . $projectId);
// Delete Tags
$this->deleteByGroup('tags', [
new Query('functionId', Query::TYPE_EQUAL, [$document->getId()])
- ], $dbForInternal, function(Document $document) use ($device) {
+ ], $dbForInternal, function (Document $document) use ($device) {
if ($device->delete($document->getAttribute('path', ''))) {
Console::success('Delete code tag: ' . $document->getAttribute('path', ''));
@@ -290,8 +300,8 @@ class DeletesV1 extends Worker
{
Authorization::disable();
- if($database->deleteDocument($document->getCollection(), $document->getId())) {
- Console::success('Deleted document "'.$document->getId().'" successfully');
+ if ($database->deleteDocument($document->getCollection(), $document->getId())) {
+ Console::success('Deleted document "' . $document->getId() . '" successfully');
if (is_callable($callback)) {
$callback($document);
@@ -319,16 +329,15 @@ class DeletesV1 extends Worker
$executionStart = \microtime(true);
- while($sum === $limit) {
+ while ($sum === $limit) {
Authorization::disable();
$projects = $this->getConsoleDB()->find('projects', [], $limit, ($chunk * $limit));
Authorization::reset();
$chunk++;
- $projectIds = array_map (function ($project) {
- return $project->getId();
- }, $projects);
+ /** @var string[] $projectIds */
+ $projectIds = array_map(fn(Document $project) => $project->getId(), $projects);
$sum = count($projects);
@@ -359,7 +368,7 @@ class DeletesV1 extends Worker
$executionStart = \microtime(true);
- while($sum === $limit) {
+ while ($sum === $limit) {
$chunk++;
Authorization::disable();
diff --git a/composer.json b/composer.json
index d2a9c9d1d..0f5eb22d7 100644
--- a/composer.json
+++ b/composer.json
@@ -41,11 +41,11 @@
"utopia-php/framework": "0.19.*",
"utopia-php/abuse": "0.6.*",
"utopia-php/analytics": "0.2.*",
- "utopia-php/audit": "0.6.*",
+ "utopia-php/audit": "0.7.*",
"utopia-php/cache": "0.4.*",
"utopia-php/cli": "0.11.*",
"utopia-php/config": "0.2.*",
- "utopia-php/database": "dev-fix-query-validator-constructor as 0.10.9",
+ "utopia-php/database": "0.11.*",
"utopia-php/locale": "0.4.*",
"utopia-php/orchestration": "0.2.*",
"utopia-php/registry": "0.5.*",
@@ -67,7 +67,7 @@
},
"repositories": [],
"require-dev": {
- "appwrite/sdk-generator": "0.16.0",
+ "appwrite/sdk-generator": "0.16.2",
"phpunit/phpunit": "9.5.6",
"swoole/ide-helper": "4.6.7",
"textalk/websocket": "1.5.2",
diff --git a/composer.lock b/composer.lock
index 82e05789c..7f8d0cde0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "55ff735e10c409ad5bc05c8793839f06",
+ "content-hash": "8427bbf013694d9771cd09341a81562e",
"packages": [
{
"name": "adhocore/jwt",
@@ -1591,16 +1591,16 @@
},
{
"name": "symfony/deprecation-contracts",
- "version": "v2.4.0",
+ "version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
+ "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
- "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
+ "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
"shasum": ""
},
"require": {
@@ -1609,7 +1609,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.4-dev"
+ "dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -1638,7 +1638,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
},
"funding": [
{
@@ -1654,7 +1654,7 @@
"type": "tidelift"
}
],
- "time": "2021-03-23T23:28:01+00:00"
+ "time": "2021-07-12T14:48:14+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -1928,22 +1928,22 @@
},
{
"name": "utopia-php/audit",
- "version": "0.6.3",
+ "version": "0.7.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/audit.git",
- "reference": "d79b467fbc7d03e5e02f12cdeb08761507a60ca0"
+ "reference": "485cdd2354db7eb8f7aa74bbe39c39b583e99c04"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/audit/zipball/d79b467fbc7d03e5e02f12cdeb08761507a60ca0",
- "reference": "d79b467fbc7d03e5e02f12cdeb08761507a60ca0",
+ "url": "https://api.github.com/repos/utopia-php/audit/zipball/485cdd2354db7eb8f7aa74bbe39c39b583e99c04",
+ "reference": "485cdd2354db7eb8f7aa74bbe39c39b583e99c04",
"shasum": ""
},
"require": {
"ext-pdo": "*",
"php": ">=7.4",
- "utopia-php/database": ">=0.6 <1.0"
+ "utopia-php/database": ">=0.11 <1.0"
},
"require-dev": {
"phpunit/phpunit": "^9.3",
@@ -1975,9 +1975,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/audit/issues",
- "source": "https://github.com/utopia-php/audit/tree/0.6.3"
+ "source": "https://github.com/utopia-php/audit/tree/0.7.0"
},
- "time": "2021-08-16T18:49:55+00:00"
+ "time": "2021-11-17T17:23:42+00:00"
},
{
"name": "utopia-php/cache",
@@ -2138,16 +2138,16 @@
},
{
"name": "utopia-php/database",
- "version": "dev-fix-query-validator-constructor",
+ "version": "0.11.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
- "reference": "a475b232578389f5c74714bec77c880254802b1c"
+ "reference": "5fc0476d05567d1a156b00e17033f32148c93a38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/a475b232578389f5c74714bec77c880254802b1c",
- "reference": "a475b232578389f5c74714bec77c880254802b1c",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/5fc0476d05567d1a156b00e17033f32148c93a38",
+ "reference": "5fc0476d05567d1a156b00e17033f32148c93a38",
"shasum": ""
},
"require": {
@@ -2195,9 +2195,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/fix-query-validator-constructor"
+ "source": "https://github.com/utopia-php/database/tree/0.11.0"
},
- "time": "2021-11-02T22:56:56+00:00"
+ "time": "2021-11-17T09:53:02+00:00"
},
{
"name": "utopia-php/domains",
@@ -3014,16 +3014,16 @@
},
{
"name": "appwrite/sdk-generator",
- "version": "0.16.0",
+ "version": "0.16.2",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "5a57afe89ded393a3eca8d9ba96b8e2c479f2601"
+ "reference": "e3a20c96a745a9c4aa048fd344650fcfbf41cf6f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/5a57afe89ded393a3eca8d9ba96b8e2c479f2601",
- "reference": "5a57afe89ded393a3eca8d9ba96b8e2c479f2601",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/e3a20c96a745a9c4aa048fd344650fcfbf41cf6f",
+ "reference": "e3a20c96a745a9c4aa048fd344650fcfbf41cf6f",
"shasum": ""
},
"require": {
@@ -3057,9 +3057,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.16.0"
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.16.2"
},
- "time": "2021-10-21T06:49:55+00:00"
+ "time": "2021-11-12T11:09:38+00:00"
},
{
"name": "composer/semver",
@@ -3655,16 +3655,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.13.0",
+ "version": "v4.13.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "50953a2691a922aa1769461637869a0a2faa3f53"
+ "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53",
- "reference": "50953a2691a922aa1769461637869a0a2faa3f53",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/63a79e8daa781cac14e5195e63ed8ae231dd10fd",
+ "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd",
"shasum": ""
},
"require": {
@@ -3705,9 +3705,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.1"
},
- "time": "2021-09-20T12:20:58+00:00"
+ "time": "2021-11-03T20:52:16+00:00"
},
{
"name": "openlss/lib-array2xml",
@@ -4102,16 +4102,16 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.8",
+ "version": "9.2.9",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "cf04e88a2e3c56fc1a65488afd493325b4c1bc3e"
+ "reference": "f301eb1453c9e7a1bc912ee8b0ea9db22c60223b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/cf04e88a2e3c56fc1a65488afd493325b4c1bc3e",
- "reference": "cf04e88a2e3c56fc1a65488afd493325b4c1bc3e",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f301eb1453c9e7a1bc912ee8b0ea9db22c60223b",
+ "reference": "f301eb1453c9e7a1bc912ee8b0ea9db22c60223b",
"shasum": ""
},
"require": {
@@ -4167,7 +4167,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.8"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.9"
},
"funding": [
{
@@ -4175,7 +4175,7 @@
"type": "github"
}
],
- "time": "2021-10-30T08:01:38+00:00"
+ "time": "2021-11-19T15:21:02+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -4523,20 +4523,20 @@
},
{
"name": "psr/container",
- "version": "1.1.1",
+ "version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
"shasum": ""
},
"require": {
- "php": ">=7.2.0"
+ "php": ">=7.4.0"
},
"type": "library",
"autoload": {
@@ -4565,9 +4565,9 @@
],
"support": {
"issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.1"
+ "source": "https://github.com/php-fig/container/tree/1.1.2"
},
- "time": "2021-03-05T17:36:06+00:00"
+ "time": "2021-11-05T16:50:12+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -4998,16 +4998,16 @@
},
{
"name": "sebastian/exporter",
- "version": "4.0.3",
+ "version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
- "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
"shasum": ""
},
"require": {
@@ -5056,14 +5056,14 @@
}
],
"description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
"keywords": [
"export",
"exporter"
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
},
"funding": [
{
@@ -5071,7 +5071,7 @@
"type": "github"
}
],
- "time": "2020-09-28T05:24:23+00:00"
+ "time": "2021-11-11T14:18:36+00:00"
},
{
"name": "sebastian/global-state",
@@ -5587,16 +5587,16 @@
},
{
"name": "symfony/console",
- "version": "v5.3.10",
+ "version": "v5.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3"
+ "reference": "3e7ab8f5905058984899b05a4648096f558bfeba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3",
- "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3",
+ "url": "https://api.github.com/repos/symfony/console/zipball/3e7ab8f5905058984899b05a4648096f558bfeba",
+ "reference": "3e7ab8f5905058984899b05a4648096f558bfeba",
"shasum": ""
},
"require": {
@@ -5609,7 +5609,6 @@
"symfony/string": "^5.1"
},
"conflict": {
- "psr/log": ">=3",
"symfony/dependency-injection": "<4.4",
"symfony/dotenv": "<5.1",
"symfony/event-dispatcher": "<4.4",
@@ -5666,7 +5665,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v5.3.10"
+ "source": "https://github.com/symfony/console/tree/v5.3.11"
},
"funding": [
{
@@ -5682,7 +5681,7 @@
"type": "tidelift"
}
],
- "time": "2021-10-26T09:30:15+00:00"
+ "time": "2021-11-21T19:41:05+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
@@ -6010,21 +6009,25 @@
},
{
"name": "symfony/service-contracts",
- "version": "v2.4.0",
+ "version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+ "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
+ "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
- "psr/container": "^1.1"
+ "psr/container": "^1.1",
+ "symfony/deprecation-contracts": "^2.1"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
},
"suggest": {
"symfony/service-implementation": ""
@@ -6032,7 +6035,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.4-dev"
+ "dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -6069,7 +6072,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
},
"funding": [
{
@@ -6085,7 +6088,7 @@
"type": "tidelift"
}
],
- "time": "2021-04-01T10:43:52+00:00"
+ "time": "2021-11-04T16:48:04+00:00"
},
{
"name": "symfony/string",
@@ -6501,21 +6504,13 @@
"issues": "https://github.com/webmozart/path-util/issues",
"source": "https://github.com/webmozart/path-util/tree/2.3.0"
},
+ "abandoned": "symfony/filesystem",
"time": "2015-12-17T08:42:14+00:00"
}
],
- "aliases": [
- {
- "package": "utopia-php/database",
- "version": "dev-fix-query-validator-constructor",
- "alias": "0.10.9",
- "alias_normalized": "0.10.9.0"
- }
- ],
+ "aliases": [],
"minimum-stability": "stable",
- "stability-flags": {
- "utopia-php/database": 20
- },
+ "stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
diff --git a/docs/sdks/deno/GETTING_STARTED.md b/docs/sdks/deno/GETTING_STARTED.md
index 5fae9f634..65930a3e0 100644
--- a/docs/sdks/deno/GETTING_STARTED.md
+++ b/docs/sdks/deno/GETTING_STARTED.md
@@ -12,7 +12,6 @@ client
.setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key
.setSelfSigned() // Use only on dev mode with a self-signed SSL cert
;
-
```
### Make your first request
@@ -22,13 +21,8 @@ Once your SDK object is set, create any of the Appwrite service objects and choo
```typescript
let users = new sdk.Users(client);
-let promise = users.create('email@example.com', 'password');
-
-promise.then(function (response) {
- console.log(response);
-}, function (error) {
- console.log(error);
-});
+let response = await users.create('email@example.com', 'password');
+console.log(response);
```
### Full Example
@@ -45,13 +39,8 @@ client
.setSelfSigned() // Use only on dev mode with a self-signed SSL cert
;
-let promise = users.create('email@example.com', 'password');
-
-promise.then(function (response) {
- console.log(response);
-}, function (error) {
- console.log(error);
-});
+let response = await users.create('email@example.com', 'password');
+console.log(response);
```
### Error Handling
@@ -61,7 +50,7 @@ The Appwrite Deno SDK raises `AppwriteException` object with `message`, `code` a
let users = new sdk.Users(client);
try {
- let res = await users.create('email@example.com', 'password');
+ let response = await users.create('email@example.com', 'password');
} catch(e) {
console.log(e.message);
}
diff --git a/docs/sdks/flutter/GETTING_STARTED.md b/docs/sdks/flutter/GETTING_STARTED.md
index 28899ff18..8ed1e1992 100644
--- a/docs/sdks/flutter/GETTING_STARTED.md
+++ b/docs/sdks/flutter/GETTING_STARTED.md
@@ -58,14 +58,16 @@ For **Windows** add your app name and package name, Your package n
```dart
import 'package:appwrite/appwrite.dart';
-Client client = Client();
+void main() {
+ Client client = Client();
-client
- .setEndpoint('https://localhost/v1') // Your Appwrite Endpoint
- .setProject('5e8cf4f46b5e8') // Your project ID
- .setSelfSigned() // Use only on dev mode with a self-signed SSL cert
-;
+ client
+ .setEndpoint('https://localhost/v1') // Your Appwrite Endpoint
+ .setProject('5e8cf4f46b5e8') // Your project ID
+ .setSelfSigned() // Use only on dev mode with a self-signed SSL cert
+ ;
+}
```
Before starting to send any API calls to your new Appwrite instance, make sure your Android or iOS emulators has network access to the Appwrite server hostname or IP address.
@@ -91,25 +93,28 @@ Response user = await account
```dart
import 'package:appwrite/appwrite.dart';
-Client client = Client();
+
+void main() {
+ Client client = Client();
-client
- .setEndpoint('https://localhost/v1') // Your Appwrite Endpoint
- .setProject('5e8cf4f46b5e8') // Your project ID
- .setSelfSigned() // Use only on dev mode with a self-signed SSL cert
- ;
+ client
+ .setEndpoint('https://localhost/v1') // Your Appwrite Endpoint
+ .setProject('5e8cf4f46b5e8') // Your project ID
+ .setSelfSigned() // Use only on dev mode with a self-signed SSL cert
+ ;
-// Register User
-Account account = Account(client);
+ // Register User
+ Account account = Account(client);
-Response user = await account
- .create(
- email: 'me@appwrite.io',
- password: 'password',
- name: 'My Name'
- );
+ Response user = await account
+ .create(
+ email: 'me@appwrite.io',
+ password: 'password',
+ name: 'My Name'
+ );
+}
```
### Error Handling
diff --git a/public/dist/scripts/app-all.js b/public/dist/scripts/app-all.js
index 2869f7974..45c1b1d91 100644
--- a/public/dist/scripts/app-all.js
+++ b/public/dist/scripts/app-all.js
@@ -579,848 +579,1687 @@ throw new AppwriteException(e.message);}});}
flatten(data,prefix=''){let output={};for(const key in data){let value=data[key];let finalKey=prefix?`${prefix}[${key}]`:key;if(Array.isArray(value)){output=Object.assign(output,this.flatten(value,finalKey));}
else{output[finalKey]=value;}}
return output;}}
-exports.Appwrite=Appwrite;Object.defineProperty(exports,'__esModule',{value:true});}(this.window=this.window||{},null,window));(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?module.exports=factory(function(){try{return require('moment');}catch(e){}}()):typeof define==='function'&&define.amd?define(['require'],function(require){return factory(function(){try{return require('moment');}catch(e){}}());}):(global=global||self,global.Chart=factory(global.moment));}(this,(function(moment){'use strict';moment=moment&&moment.hasOwnProperty('default')?moment['default']:moment;function createCommonjsModule(fn,module){return module={exports:{}},fn(module,module.exports),module.exports;}
-function getCjsExportFromNamespace(n){return n&&n['default']||n;}
-var colorName={"aliceblue":[240,248,255],"antiquewhite":[250,235,215],"aqua":[0,255,255],"aquamarine":[127,255,212],"azure":[240,255,255],"beige":[245,245,220],"bisque":[255,228,196],"black":[0,0,0],"blanchedalmond":[255,235,205],"blue":[0,0,255],"blueviolet":[138,43,226],"brown":[165,42,42],"burlywood":[222,184,135],"cadetblue":[95,158,160],"chartreuse":[127,255,0],"chocolate":[210,105,30],"coral":[255,127,80],"cornflowerblue":[100,149,237],"cornsilk":[255,248,220],"crimson":[220,20,60],"cyan":[0,255,255],"darkblue":[0,0,139],"darkcyan":[0,139,139],"darkgoldenrod":[184,134,11],"darkgray":[169,169,169],"darkgreen":[0,100,0],"darkgrey":[169,169,169],"darkkhaki":[189,183,107],"darkmagenta":[139,0,139],"darkolivegreen":[85,107,47],"darkorange":[255,140,0],"darkorchid":[153,50,204],"darkred":[139,0,0],"darksalmon":[233,150,122],"darkseagreen":[143,188,143],"darkslateblue":[72,61,139],"darkslategray":[47,79,79],"darkslategrey":[47,79,79],"darkturquoise":[0,206,209],"darkviolet":[148,0,211],"deeppink":[255,20,147],"deepskyblue":[0,191,255],"dimgray":[105,105,105],"dimgrey":[105,105,105],"dodgerblue":[30,144,255],"firebrick":[178,34,34],"floralwhite":[255,250,240],"forestgreen":[34,139,34],"fuchsia":[255,0,255],"gainsboro":[220,220,220],"ghostwhite":[248,248,255],"gold":[255,215,0],"goldenrod":[218,165,32],"gray":[128,128,128],"green":[0,128,0],"greenyellow":[173,255,47],"grey":[128,128,128],"honeydew":[240,255,240],"hotpink":[255,105,180],"indianred":[205,92,92],"indigo":[75,0,130],"ivory":[255,255,240],"khaki":[240,230,140],"lavender":[230,230,250],"lavenderblush":[255,240,245],"lawngreen":[124,252,0],"lemonchiffon":[255,250,205],"lightblue":[173,216,230],"lightcoral":[240,128,128],"lightcyan":[224,255,255],"lightgoldenrodyellow":[250,250,210],"lightgray":[211,211,211],"lightgreen":[144,238,144],"lightgrey":[211,211,211],"lightpink":[255,182,193],"lightsalmon":[255,160,122],"lightseagreen":[32,178,170],"lightskyblue":[135,206,250],"lightslategray":[119,136,153],"lightslategrey":[119,136,153],"lightsteelblue":[176,196,222],"lightyellow":[255,255,224],"lime":[0,255,0],"limegreen":[50,205,50],"linen":[250,240,230],"magenta":[255,0,255],"maroon":[128,0,0],"mediumaquamarine":[102,205,170],"mediumblue":[0,0,205],"mediumorchid":[186,85,211],"mediumpurple":[147,112,219],"mediumseagreen":[60,179,113],"mediumslateblue":[123,104,238],"mediumspringgreen":[0,250,154],"mediumturquoise":[72,209,204],"mediumvioletred":[199,21,133],"midnightblue":[25,25,112],"mintcream":[245,255,250],"mistyrose":[255,228,225],"moccasin":[255,228,181],"navajowhite":[255,222,173],"navy":[0,0,128],"oldlace":[253,245,230],"olive":[128,128,0],"olivedrab":[107,142,35],"orange":[255,165,0],"orangered":[255,69,0],"orchid":[218,112,214],"palegoldenrod":[238,232,170],"palegreen":[152,251,152],"paleturquoise":[175,238,238],"palevioletred":[219,112,147],"papayawhip":[255,239,213],"peachpuff":[255,218,185],"peru":[205,133,63],"pink":[255,192,203],"plum":[221,160,221],"powderblue":[176,224,230],"purple":[128,0,128],"rebeccapurple":[102,51,153],"red":[255,0,0],"rosybrown":[188,143,143],"royalblue":[65,105,225],"saddlebrown":[139,69,19],"salmon":[250,128,114],"sandybrown":[244,164,96],"seagreen":[46,139,87],"seashell":[255,245,238],"sienna":[160,82,45],"silver":[192,192,192],"skyblue":[135,206,235],"slateblue":[106,90,205],"slategray":[112,128,144],"slategrey":[112,128,144],"snow":[255,250,250],"springgreen":[0,255,127],"steelblue":[70,130,180],"tan":[210,180,140],"teal":[0,128,128],"thistle":[216,191,216],"tomato":[255,99,71],"turquoise":[64,224,208],"violet":[238,130,238],"wheat":[245,222,179],"white":[255,255,255],"whitesmoke":[245,245,245],"yellow":[255,255,0],"yellowgreen":[154,205,50]};var conversions=createCommonjsModule(function(module){var reverseKeywords={};for(var key in colorName){if(colorName.hasOwnProperty(key)){reverseKeywords[colorName[key]]=key;}}
-var convert=module.exports={rgb:{channels:3,labels:'rgb'},hsl:{channels:3,labels:'hsl'},hsv:{channels:3,labels:'hsv'},hwb:{channels:3,labels:'hwb'},cmyk:{channels:4,labels:'cmyk'},xyz:{channels:3,labels:'xyz'},lab:{channels:3,labels:'lab'},lch:{channels:3,labels:'lch'},hex:{channels:1,labels:['hex']},keyword:{channels:1,labels:['keyword']},ansi16:{channels:1,labels:['ansi16']},ansi256:{channels:1,labels:['ansi256']},hcg:{channels:3,labels:['h','c','g']},apple:{channels:3,labels:['r16','g16','b16']},gray:{channels:1,labels:['gray']}};for(var model in convert){if(convert.hasOwnProperty(model)){if(!('channels'in convert[model])){throw new Error('missing channels property: '+model);}
-if(!('labels'in convert[model])){throw new Error('missing channel labels property: '+model);}
-if(convert[model].labels.length!==convert[model].channels){throw new Error('channel and label counts mismatch: '+model);}
-var channels=convert[model].channels;var labels=convert[model].labels;delete convert[model].channels;delete convert[model].labels;Object.defineProperty(convert[model],'channels',{value:channels});Object.defineProperty(convert[model],'labels',{value:labels});}}
-convert.rgb.hsl=function(rgb){var r=rgb[0]/255;var g=rgb[1]/255;var b=rgb[2]/255;var min=Math.min(r,g,b);var max=Math.max(r,g,b);var delta=max-min;var h;var s;var l;if(max===min){h=0;}else if(r===max){h=(g-b)/delta;}else if(g===max){h=2+(b-r)/delta;}else if(b===max){h=4+(r-g)/delta;}
-h=Math.min(h*60,360);if(h<0){h+=360;}
-l=(min+max)/2;if(max===min){s=0;}else if(l<=0.5){s=delta/(max+min);}else{s=delta/(2-max-min);}
-return[h,s*100,l*100];};convert.rgb.hsv=function(rgb){var rdif;var gdif;var bdif;var h;var s;var r=rgb[0]/255;var g=rgb[1]/255;var b=rgb[2]/255;var v=Math.max(r,g,b);var diff=v-Math.min(r,g,b);var diffc=function(c){return(v-c)/6/diff+1/2;};if(diff===0){h=s=0;}else{s=diff/v;rdif=diffc(r);gdif=diffc(g);bdif=diffc(b);if(r===v){h=bdif-gdif;}else if(g===v){h=(1/3)+rdif-bdif;}else if(b===v){h=(2/3)+gdif-rdif;}
-if(h<0){h+=1;}else if(h>1){h-=1;}}
-return[h*360,s*100,v*100];};convert.rgb.hwb=function(rgb){var r=rgb[0];var g=rgb[1];var b=rgb[2];var h=convert.rgb.hsl(rgb)[0];var w=1/255*Math.min(r,Math.min(g,b));b=1-1/255*Math.max(r,Math.max(g,b));return[h,w*100,b*100];};convert.rgb.cmyk=function(rgb){var r=rgb[0]/255;var g=rgb[1]/255;var b=rgb[2]/255;var c;var m;var y;var k;k=Math.min(1-r,1-g,1-b);c=(1-r-k)/(1-k)||0;m=(1-g-k)/(1-k)||0;y=(1-b-k)/(1-k)||0;return[c*100,m*100,y*100,k*100];};function comparativeDistance(x,y){return(Math.pow(x[0]-y[0],2)+
-Math.pow(x[1]-y[1],2)+
-Math.pow(x[2]-y[2],2));}
-convert.rgb.keyword=function(rgb){var reversed=reverseKeywords[rgb];if(reversed){return reversed;}
-var currentClosestDistance=Infinity;var currentClosestKeyword;for(var keyword in colorName){if(colorName.hasOwnProperty(keyword)){var value=colorName[keyword];var distance=comparativeDistance(rgb,value);if(distance0.04045?Math.pow(((r+0.055)/1.055),2.4):(r/12.92);g=g>0.04045?Math.pow(((g+0.055)/1.055),2.4):(g/12.92);b=b>0.04045?Math.pow(((b+0.055)/1.055),2.4):(b/12.92);var x=(r*0.4124)+(g*0.3576)+(b*0.1805);var y=(r*0.2126)+(g*0.7152)+(b*0.0722);var z=(r*0.0193)+(g*0.1192)+(b*0.9505);return[x*100,y*100,z*100];};convert.rgb.lab=function(rgb){var xyz=convert.rgb.xyz(rgb);var x=xyz[0];var y=xyz[1];var z=xyz[2];var l;var a;var b;x/=95.047;y/=100;z/=108.883;x=x>0.008856?Math.pow(x,1/3):(7.787*x)+(16/116);y=y>0.008856?Math.pow(y,1/3):(7.787*y)+(16/116);z=z>0.008856?Math.pow(z,1/3):(7.787*z)+(16/116);l=(116*y)-16;a=500*(x-y);b=200*(y-z);return[l,a,b];};convert.hsl.rgb=function(hsl){var h=hsl[0]/360;var s=hsl[1]/100;var l=hsl[2]/100;var t1;var t2;var t3;var rgb;var val;if(s===0){val=l*255;return[val,val,val];}
-if(l<0.5){t2=l*(1+s);}else{t2=l+s-l*s;}
-t1=2*l-t2;rgb=[0,0,0];for(var i=0;i<3;i++){t3=h+1/3*-(i-1);if(t3<0){t3++;}
-if(t3>1){t3--;}
-if(6*t3<1){val=t1+(t2-t1)*6*t3;}else if(2*t3<1){val=t2;}else if(3*t3<2){val=t1+(t2-t1)*(2/3-t3)*6;}else{val=t1;}
-rgb[i]=val*255;}
-return rgb;};convert.hsl.hsv=function(hsl){var h=hsl[0];var s=hsl[1]/100;var l=hsl[2]/100;var smin=s;var lmin=Math.max(l,0.01);var sv;var v;l*=2;s*=(l<=1)?l:2-l;smin*=lmin<=1?lmin:2-lmin;v=(l+s)/2;sv=l===0?(2*smin)/(lmin+smin):(2*s)/(l+s);return[h,sv*100,v*100];};convert.hsv.rgb=function(hsv){var h=hsv[0]/60;var s=hsv[1]/100;var v=hsv[2]/100;var hi=Math.floor(h)%6;var f=h-Math.floor(h);var p=255*v*(1-s);var q=255*v*(1-(s*f));var t=255*v*(1-(s*(1-f)));v*=255;switch(hi){case 0:return[v,t,p];case 1:return[q,v,p];case 2:return[p,v,t];case 3:return[p,q,v];case 4:return[t,p,v];case 5:return[v,p,q];}};convert.hsv.hsl=function(hsv){var h=hsv[0];var s=hsv[1]/100;var v=hsv[2]/100;var vmin=Math.max(v,0.01);var lmin;var sl;var l;l=(2-s)*v;lmin=(2-s)*vmin;sl=s*vmin;sl/=(lmin<=1)?lmin:2-lmin;sl=sl||0;l/=2;return[h,sl*100,l*100];};convert.hwb.rgb=function(hwb){var h=hwb[0]/360;var wh=hwb[1]/100;var bl=hwb[2]/100;var ratio=wh+bl;var i;var v;var f;var n;if(ratio>1){wh/=ratio;bl/=ratio;}
-i=Math.floor(6*h);v=1-bl;f=6*h-i;if((i&0x01)!==0){f=1-f;}
-n=wh+f*(v-wh);var r;var g;var b;switch(i){default:case 6:case 0:r=v;g=n;b=wh;break;case 1:r=n;g=v;b=wh;break;case 2:r=wh;g=v;b=n;break;case 3:r=wh;g=n;b=v;break;case 4:r=n;g=wh;b=v;break;case 5:r=v;g=wh;b=n;break;}
-return[r*255,g*255,b*255];};convert.cmyk.rgb=function(cmyk){var c=cmyk[0]/100;var m=cmyk[1]/100;var y=cmyk[2]/100;var k=cmyk[3]/100;var r;var g;var b;r=1-Math.min(1,c*(1-k)+k);g=1-Math.min(1,m*(1-k)+k);b=1-Math.min(1,y*(1-k)+k);return[r*255,g*255,b*255];};convert.xyz.rgb=function(xyz){var x=xyz[0]/100;var y=xyz[1]/100;var z=xyz[2]/100;var r;var g;var b;r=(x*3.2406)+(y*-1.5372)+(z*-0.4986);g=(x*-0.9689)+(y*1.8758)+(z*0.0415);b=(x*0.0557)+(y*-0.2040)+(z*1.0570);r=r>0.0031308?((1.055*Math.pow(r,1.0/2.4))-0.055):r*12.92;g=g>0.0031308?((1.055*Math.pow(g,1.0/2.4))-0.055):g*12.92;b=b>0.0031308?((1.055*Math.pow(b,1.0/2.4))-0.055):b*12.92;r=Math.min(Math.max(0,r),1);g=Math.min(Math.max(0,g),1);b=Math.min(Math.max(0,b),1);return[r*255,g*255,b*255];};convert.xyz.lab=function(xyz){var x=xyz[0];var y=xyz[1];var z=xyz[2];var l;var a;var b;x/=95.047;y/=100;z/=108.883;x=x>0.008856?Math.pow(x,1/3):(7.787*x)+(16/116);y=y>0.008856?Math.pow(y,1/3):(7.787*y)+(16/116);z=z>0.008856?Math.pow(z,1/3):(7.787*z)+(16/116);l=(116*y)-16;a=500*(x-y);b=200*(y-z);return[l,a,b];};convert.lab.xyz=function(lab){var l=lab[0];var a=lab[1];var b=lab[2];var x;var y;var z;y=(l+16)/116;x=a/500+y;z=y-b/200;var y2=Math.pow(y,3);var x2=Math.pow(x,3);var z2=Math.pow(z,3);y=y2>0.008856?y2:(y-16/116)/7.787;x=x2>0.008856?x2:(x-16/116)/7.787;z=z2>0.008856?z2:(z-16/116)/7.787;x*=95.047;y*=100;z*=108.883;return[x,y,z];};convert.lab.lch=function(lab){var l=lab[0];var a=lab[1];var b=lab[2];var hr;var h;var c;hr=Math.atan2(b,a);h=hr*360/2/Math.PI;if(h<0){h+=360;}
-c=Math.sqrt(a*a+b*b);return[l,c,h];};convert.lch.lab=function(lch){var l=lch[0];var c=lch[1];var h=lch[2];var a;var b;var hr;hr=h/360*2*Math.PI;a=c*Math.cos(hr);b=c*Math.sin(hr);return[l,a,b];};convert.rgb.ansi16=function(args){var r=args[0];var g=args[1];var b=args[2];var value=1 in arguments?arguments[1]:convert.rgb.hsv(args)[2];value=Math.round(value/50);if(value===0){return 30;}
-var ansi=30
-+((Math.round(b/255)<<2)|(Math.round(g/255)<<1)|Math.round(r/255));if(value===2){ansi+=60;}
-return ansi;};convert.hsv.ansi16=function(args){return convert.rgb.ansi16(convert.hsv.rgb(args),args[2]);};convert.rgb.ansi256=function(args){var r=args[0];var g=args[1];var b=args[2];if(r===g&&g===b){if(r<8){return 16;}
-if(r>248){return 231;}
-return Math.round(((r-8)/247)*24)+232;}
-var ansi=16
-+(36*Math.round(r/255*5))
-+(6*Math.round(g/255*5))
-+Math.round(b/255*5);return ansi;};convert.ansi16.rgb=function(args){var color=args%10;if(color===0||color===7){if(args>50){color+=3.5;}
-color=color/10.5*255;return[color,color,color];}
-var mult=(~~(args>50)+1)*0.5;var r=((color&1)*mult)*255;var g=(((color>>1)&1)*mult)*255;var b=(((color>>2)&1)*mult)*255;return[r,g,b];};convert.ansi256.rgb=function(args){if(args>=232){var c=(args-232)*10+8;return[c,c,c];}
-args-=16;var rem;var r=Math.floor(args/36)/5*255;var g=Math.floor((rem=args%36)/6)/5*255;var b=(rem%6)/5*255;return[r,g,b];};convert.rgb.hex=function(args){var integer=((Math.round(args[0])&0xFF)<<16)
-+((Math.round(args[1])&0xFF)<<8)
-+(Math.round(args[2])&0xFF);var string=integer.toString(16).toUpperCase();return'000000'.substring(string.length)+string;};convert.hex.rgb=function(args){var match=args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!match){return[0,0,0];}
-var colorString=match[0];if(match[0].length===3){colorString=colorString.split('').map(function(char){return char+char;}).join('');}
-var integer=parseInt(colorString,16);var r=(integer>>16)&0xFF;var g=(integer>>8)&0xFF;var b=integer&0xFF;return[r,g,b];};convert.rgb.hcg=function(rgb){var r=rgb[0]/255;var g=rgb[1]/255;var b=rgb[2]/255;var max=Math.max(Math.max(r,g),b);var min=Math.min(Math.min(r,g),b);var chroma=(max-min);var grayscale;var hue;if(chroma<1){grayscale=min/(1-chroma);}else{grayscale=0;}
-if(chroma<=0){hue=0;}else
-if(max===r){hue=((g-b)/chroma)%6;}else
-if(max===g){hue=2+(b-r)/chroma;}else{hue=4+(r-g)/chroma+4;}
-hue/=6;hue%=1;return[hue*360,chroma*100,grayscale*100];};convert.hsl.hcg=function(hsl){var s=hsl[1]/100;var l=hsl[2]/100;var c=1;var f=0;if(l<0.5){c=2.0*s*l;}else{c=2.0*s*(1.0-l);}
-if(c<1.0){f=(l-0.5*c)/(1.0-c);}
-return[hsl[0],c*100,f*100];};convert.hsv.hcg=function(hsv){var s=hsv[1]/100;var v=hsv[2]/100;var c=s*v;var f=0;if(c<1.0){f=(v-c)/(1-c);}
-return[hsv[0],c*100,f*100];};convert.hcg.rgb=function(hcg){var h=hcg[0]/360;var c=hcg[1]/100;var g=hcg[2]/100;if(c===0.0){return[g*255,g*255,g*255];}
-var pure=[0,0,0];var hi=(h%1)*6;var v=hi%1;var w=1-v;var mg=0;switch(Math.floor(hi)){case 0:pure[0]=1;pure[1]=v;pure[2]=0;break;case 1:pure[0]=w;pure[1]=1;pure[2]=0;break;case 2:pure[0]=0;pure[1]=1;pure[2]=v;break;case 3:pure[0]=0;pure[1]=w;pure[2]=1;break;case 4:pure[0]=v;pure[1]=0;pure[2]=1;break;default:pure[0]=1;pure[1]=0;pure[2]=w;}
-mg=(1.0-c)*g;return[(c*pure[0]+mg)*255,(c*pure[1]+mg)*255,(c*pure[2]+mg)*255];};convert.hcg.hsv=function(hcg){var c=hcg[1]/100;var g=hcg[2]/100;var v=c+g*(1.0-c);var f=0;if(v>0.0){f=c/v;}
-return[hcg[0],f*100,v*100];};convert.hcg.hsl=function(hcg){var c=hcg[1]/100;var g=hcg[2]/100;var l=g*(1.0-c)+0.5*c;var s=0;if(l>0.0&&l<0.5){s=c/(2*l);}else
-if(l>=0.5&&l<1.0){s=c/(2*(1-l));}
-return[hcg[0],s*100,l*100];};convert.hcg.hwb=function(hcg){var c=hcg[1]/100;var g=hcg[2]/100;var v=c+g*(1.0-c);return[hcg[0],(v-c)*100,(1-v)*100];};convert.hwb.hcg=function(hwb){var w=hwb[1]/100;var b=hwb[2]/100;var v=1-b;var c=v-w;var g=0;if(c<1){g=(v-c)/(1-c);}
-return[hwb[0],c*100,g*100];};convert.apple.rgb=function(apple){return[(apple[0]/65535)*255,(apple[1]/65535)*255,(apple[2]/65535)*255];};convert.rgb.apple=function(rgb){return[(rgb[0]/255)*65535,(rgb[1]/255)*65535,(rgb[2]/255)*65535];};convert.gray.rgb=function(args){return[args[0]/100*255,args[0]/100*255,args[0]/100*255];};convert.gray.hsl=convert.gray.hsv=function(args){return[0,0,args[0]];};convert.gray.hwb=function(gray){return[0,100,gray[0]];};convert.gray.cmyk=function(gray){return[0,0,0,gray[0]];};convert.gray.lab=function(gray){return[gray[0],0,0];};convert.gray.hex=function(gray){var val=Math.round(gray[0]/100*255)&0xFF;var integer=(val<<16)+(val<<8)+val;var string=integer.toString(16).toUpperCase();return'000000'.substring(string.length)+string;};convert.rgb.gray=function(rgb){var val=(rgb[0]+rgb[1]+rgb[2])/3;return[val/255*100];};});var conversions_1=conversions.rgb;var conversions_2=conversions.hsl;var conversions_3=conversions.hsv;var conversions_4=conversions.hwb;var conversions_5=conversions.cmyk;var conversions_6=conversions.xyz;var conversions_7=conversions.lab;var conversions_8=conversions.lch;var conversions_9=conversions.hex;var conversions_10=conversions.keyword;var conversions_11=conversions.ansi16;var conversions_12=conversions.ansi256;var conversions_13=conversions.hcg;var conversions_14=conversions.apple;var conversions_15=conversions.gray;function buildGraph(){var graph={};var models=Object.keys(conversions);for(var len=models.length,i=0;i1){args=Array.prototype.slice.call(arguments);}
-return fn(args);};if('conversion'in fn){wrappedFn.conversion=fn.conversion;}
-return wrappedFn;}
-function wrapRounded(fn){var wrappedFn=function(args){if(args===undefined||args===null){return args;}
-if(arguments.length>1){args=Array.prototype.slice.call(arguments);}
-var result=fn(args);if(typeof result==='object'){for(var len=result.length,i=0;i=0&&a<1)?hexDouble(Math.round(a*255)):"");}
-function rgbString(rgba,alpha){if(alpha<1||(rgba[3]&&rgba[3]<1)){return rgbaString(rgba,alpha);}
-return"rgb("+rgba[0]+", "+rgba[1]+", "+rgba[2]+")";}
-function rgbaString(rgba,alpha){if(alpha===undefined){alpha=(rgba[3]!==undefined?rgba[3]:1);}
-return"rgba("+rgba[0]+", "+rgba[1]+", "+rgba[2]
-+", "+alpha+")";}
-function percentString(rgba,alpha){if(alpha<1||(rgba[3]&&rgba[3]<1)){return percentaString(rgba,alpha);}
-var r=Math.round(rgba[0]/255*100),g=Math.round(rgba[1]/255*100),b=Math.round(rgba[2]/255*100);return"rgb("+r+"%, "+g+"%, "+b+"%)";}
-function percentaString(rgba,alpha){var r=Math.round(rgba[0]/255*100),g=Math.round(rgba[1]/255*100),b=Math.round(rgba[2]/255*100);return"rgba("+r+"%, "+g+"%, "+b+"%, "+(alpha||rgba[3]||1)+")";}
-function hslString(hsla,alpha){if(alpha<1||(hsla[3]&&hsla[3]<1)){return hslaString(hsla,alpha);}
-return"hsl("+hsla[0]+", "+hsla[1]+"%, "+hsla[2]+"%)";}
-function hslaString(hsla,alpha){if(alpha===undefined){alpha=(hsla[3]!==undefined?hsla[3]:1);}
-return"hsla("+hsla[0]+", "+hsla[1]+"%, "+hsla[2]+"%, "
-+alpha+")";}
-function hwbString(hwb,alpha){if(alpha===undefined){alpha=(hwb[3]!==undefined?hwb[3]:1);}
-return"hwb("+hwb[0]+", "+hwb[1]+"%, "+hwb[2]+"%"
-+(alpha!==undefined&&alpha!==1?", "+alpha:"")+")";}
-function keyword(rgb){return reverseNames[rgb.slice(0,3)];}
-function scale(num,min,max){return Math.min(Math.max(min,num),max);}
-function hexDouble(num){var str=num.toString(16).toUpperCase();return(str.length<2)?"0"+str:str;}
-var reverseNames={};for(var name in colorName$1){reverseNames[colorName$1[name]]=name;}
-var Color=function(obj){if(obj instanceof Color){return obj;}
-if(!(this instanceof Color)){return new Color(obj);}
-this.valid=false;this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1};var vals;if(typeof obj==='string'){vals=colorString.getRgba(obj);if(vals){this.setValues('rgb',vals);}else if(vals=colorString.getHsla(obj)){this.setValues('hsl',vals);}else if(vals=colorString.getHwb(obj)){this.setValues('hwb',vals);}}else if(typeof obj==='object'){vals=obj;if(vals.r!==undefined||vals.red!==undefined){this.setValues('rgb',vals);}else if(vals.l!==undefined||vals.lightness!==undefined){this.setValues('hsl',vals);}else if(vals.v!==undefined||vals.value!==undefined){this.setValues('hsv',vals);}else if(vals.w!==undefined||vals.whiteness!==undefined){this.setValues('hwb',vals);}else if(vals.c!==undefined||vals.cyan!==undefined){this.setValues('cmyk',vals);}}};Color.prototype={isValid:function(){return this.valid;},rgb:function(){return this.setSpace('rgb',arguments);},hsl:function(){return this.setSpace('hsl',arguments);},hsv:function(){return this.setSpace('hsv',arguments);},hwb:function(){return this.setSpace('hwb',arguments);},cmyk:function(){return this.setSpace('cmyk',arguments);},rgbArray:function(){return this.values.rgb;},hslArray:function(){return this.values.hsl;},hsvArray:function(){return this.values.hsv;},hwbArray:function(){var values=this.values;if(values.alpha!==1){return values.hwb.concat([values.alpha]);}
-return values.hwb;},cmykArray:function(){return this.values.cmyk;},rgbaArray:function(){var values=this.values;return values.rgb.concat([values.alpha]);},hslaArray:function(){var values=this.values;return values.hsl.concat([values.alpha]);},alpha:function(val){if(val===undefined){return this.values.alpha;}
-this.setValues('alpha',val);return this;},red:function(val){return this.setChannel('rgb',0,val);},green:function(val){return this.setChannel('rgb',1,val);},blue:function(val){return this.setChannel('rgb',2,val);},hue:function(val){if(val){val%=360;val=val<0?360+val:val;}
-return this.setChannel('hsl',0,val);},saturation:function(val){return this.setChannel('hsl',1,val);},lightness:function(val){return this.setChannel('hsl',2,val);},saturationv:function(val){return this.setChannel('hsv',1,val);},whiteness:function(val){return this.setChannel('hwb',1,val);},blackness:function(val){return this.setChannel('hwb',2,val);},value:function(val){return this.setChannel('hsv',2,val);},cyan:function(val){return this.setChannel('cmyk',0,val);},magenta:function(val){return this.setChannel('cmyk',1,val);},yellow:function(val){return this.setChannel('cmyk',2,val);},black:function(val){return this.setChannel('cmyk',3,val);},hexString:function(){return colorString.hexString(this.values.rgb);},rgbString:function(){return colorString.rgbString(this.values.rgb,this.values.alpha);},rgbaString:function(){return colorString.rgbaString(this.values.rgb,this.values.alpha);},percentString:function(){return colorString.percentString(this.values.rgb,this.values.alpha);},hslString:function(){return colorString.hslString(this.values.hsl,this.values.alpha);},hslaString:function(){return colorString.hslaString(this.values.hsl,this.values.alpha);},hwbString:function(){return colorString.hwbString(this.values.hwb,this.values.alpha);},keyword:function(){return colorString.keyword(this.values.rgb,this.values.alpha);},rgbNumber:function(){var rgb=this.values.rgb;return(rgb[0]<<16)|(rgb[1]<<8)|rgb[2];},luminosity:function(){var rgb=this.values.rgb;var lum=[];for(var i=0;ilum2){return(lum1+0.05)/(lum2+0.05);}
-return(lum2+0.05)/(lum1+0.05);},level:function(color2){var contrastRatio=this.contrast(color2);if(contrastRatio>=7.1){return'AAA';}
-return(contrastRatio>=4.5)?'AA':'';},dark:function(){var rgb=this.values.rgb;var yiq=(rgb[0]*299+rgb[1]*587+rgb[2]*114)/1000;return yiq<128;},light:function(){return!this.dark();},negate:function(){var rgb=[];for(var i=0;i<3;i++){rgb[i]=255-this.values.rgb[i];}
-this.setValues('rgb',rgb);return this;},lighten:function(ratio){var hsl=this.values.hsl;hsl[2]+=hsl[2]*ratio;this.setValues('hsl',hsl);return this;},darken:function(ratio){var hsl=this.values.hsl;hsl[2]-=hsl[2]*ratio;this.setValues('hsl',hsl);return this;},saturate:function(ratio){var hsl=this.values.hsl;hsl[1]+=hsl[1]*ratio;this.setValues('hsl',hsl);return this;},desaturate:function(ratio){var hsl=this.values.hsl;hsl[1]-=hsl[1]*ratio;this.setValues('hsl',hsl);return this;},whiten:function(ratio){var hwb=this.values.hwb;hwb[1]+=hwb[1]*ratio;this.setValues('hwb',hwb);return this;},blacken:function(ratio){var hwb=this.values.hwb;hwb[2]+=hwb[2]*ratio;this.setValues('hwb',hwb);return this;},greyscale:function(){var rgb=this.values.rgb;var val=rgb[0]*0.3+rgb[1]*0.59+rgb[2]*0.11;this.setValues('rgb',[val,val,val]);return this;},clearer:function(ratio){var alpha=this.values.alpha;this.setValues('alpha',alpha-(alpha*ratio));return this;},opaquer:function(ratio){var alpha=this.values.alpha;this.setValues('alpha',alpha+(alpha*ratio));return this;},rotate:function(degrees){var hsl=this.values.hsl;var hue=(hsl[0]+degrees)%360;hsl[0]=hue<0?360+hue:hue;this.setValues('hsl',hsl);return this;},mix:function(mixinColor,weight){var color1=this;var color2=mixinColor;var p=weight===undefined?0.5:weight;var w=2*p-1;var a=color1.alpha()-color2.alpha();var w1=(((w*a===-1)?w:(w+a)/(1+w*a))+1)/2.0;var w2=1-w1;return this.rgb(w1*color1.red()+w2*color2.red(),w1*color1.green()+w2*color2.green(),w1*color1.blue()+w2*color2.blue()).alpha(color1.alpha()*p+color2.alpha()*(1-p));},toJSON:function(){return this.rgb();},clone:function(){var result=new Color();var source=this.values;var target=result.values;var value,type;for(var prop in source){if(source.hasOwnProperty(prop)){value=source[prop];type=({}).toString.call(value);if(type==='[object Array]'){target[prop]=value.slice(0);}else if(type==='[object Number]'){target[prop]=value;}else{console.error('unexpected color value:',value);}}}
-return result;}};Color.prototype.spaces={rgb:['red','green','blue'],hsl:['hue','saturation','lightness'],hsv:['hue','saturation','value'],hwb:['hue','whiteness','blackness'],cmyk:['cyan','magenta','yellow','black']};Color.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]};Color.prototype.getValues=function(space){var values=this.values;var vals={};for(var i=0;i=0;i--){fn.call(thisArg,loopable[i],i);}}else{for(i=0;iArray.prototype.slice.call(args));let ticking=false;let args=[];return function(...rest){args=updateArgs(rest);if(!ticking){ticking=true;requestAnimFrame.call(window,()=>{ticking=false;fn.apply(thisArg,args);});}};}
+function debounce(fn,delay){let timeout;return function(){if(delay){clearTimeout(timeout);timeout=setTimeout(fn,delay);}else{fn();}
+return delay;};}
+const _toLeftRightCenter=(align)=>align==='start'?'left':align==='end'?'right':'center';const _alignStartEnd=(align,start,end)=>align==='start'?start:align==='end'?end:(start+end)/2;const _textX=(align,left,right,rtl)=>{const check=rtl?'left':'right';return align===check?right:align==='center'?(left+right)/2:left;};class Animator{constructor(){this._request=null;this._charts=new Map();this._running=false;this._lastDate=undefined;}
+_notify(chart,anims,date,type){const callbacks=anims.listeners[type];const numSteps=anims.duration;callbacks.forEach(fn=>fn({chart,initial:anims.initial,numSteps,currentStep:Math.min(date-anims.start,numSteps)}));}
+_refresh(){const me=this;if(me._request){return;}
+me._running=true;me._request=requestAnimFrame.call(window,()=>{me._update();me._request=null;if(me._running){me._refresh();}});}
+_update(date=Date.now()){const me=this;let remaining=0;me._charts.forEach((anims,chart)=>{if(!anims.running||!anims.items.length){return;}
+const items=anims.items;let i=items.length-1;let draw=false;let item;for(;i>=0;--i){item=items[i];if(item._active){if(item._total>anims.duration){anims.duration=item._total;}
+item.tick(date);draw=true;}else{items[i]=items[items.length-1];items.pop();}}
+if(draw){chart.draw();me._notify(chart,anims,date,'progress');}
+if(!items.length){anims.running=false;me._notify(chart,anims,date,'complete');anims.initial=false;}
+remaining+=items.length;});me._lastDate=date;if(remaining===0){me._running=false;}}
+_getAnims(chart){const charts=this._charts;let anims=charts.get(chart);if(!anims){anims={running:false,initial:true,items:[],listeners:{complete:[],progress:[]}};charts.set(chart,anims);}
+return anims;}
+listen(chart,event,cb){this._getAnims(chart).listeners[event].push(cb);}
+add(chart,items){if(!items||!items.length){return;}
+this._getAnims(chart).items.push(...items);}
+has(chart){return this._getAnims(chart).items.length>0;}
+start(chart){const anims=this._charts.get(chart);if(!anims){return;}
+anims.running=true;anims.start=Date.now();anims.duration=anims.items.reduce((acc,cur)=>Math.max(acc,cur._duration),0);this._refresh();}
+running(chart){if(!this._running){return false;}
+const anims=this._charts.get(chart);if(!anims||!anims.running||!anims.items.length){return false;}
+return true;}
+stop(chart){const anims=this._charts.get(chart);if(!anims||!anims.items.length){return;}
+const items=anims.items;let i=items.length-1;for(;i>=0;--i){items[i].cancel();}
+anims.items=[];this._notify(chart,anims,Date.now(),'complete');}
+remove(chart){return this._charts.delete(chart);}}
+var animator=new Animator();const map$1={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};const hex='0123456789ABCDEF';const h1=(b)=>hex[b&0xF];const h2=(b)=>hex[(b&0xF0)>>4]+hex[b&0xF];const eq=(b)=>(((b&0xF0)>>4)===(b&0xF));function isShort(v){return eq(v.r)&&eq(v.g)&&eq(v.b)&&eq(v.a);}
+function hexParse(str){var len=str.length;var ret;if(str[0]==='#'){if(len===4||len===5){ret={r:255&map$1[str[1]]*17,g:255&map$1[str[2]]*17,b:255&map$1[str[3]]*17,a:len===5?map$1[str[4]]*17:255};}else if(len===7||len===9){ret={r:map$1[str[1]]<<4|map$1[str[2]],g:map$1[str[3]]<<4|map$1[str[4]],b:map$1[str[5]]<<4|map$1[str[6]],a:len===9?(map$1[str[7]]<<4|map$1[str[8]]):255};}}
+return ret;}
+function hexString(v){var f=isShort(v)?h1:h2;return v?'#'+f(v.r)+f(v.g)+f(v.b)+(v.a<255?f(v.a):''):v;}
+function round(v){return v+0.5|0;}
+const lim=(v,l,h)=>Math.max(Math.min(v,h),l);function p2b(v){return lim(round(v*2.55),0,255);}
+function n2b(v){return lim(round(v*255),0,255);}
+function b2n(v){return lim(round(v/2.55)/100,0,1);}
+function n2p(v){return lim(round(v*100),0,100);}
+const RGB_RE=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function rgbParse(str){const m=RGB_RE.exec(str);let a=255;let r,g,b;if(!m){return;}
+if(m[7]!==r){const v=+m[7];a=255&(m[8]?p2b(v):v*255);}
+r=+m[1];g=+m[3];b=+m[5];r=255&(m[2]?p2b(r):r);g=255&(m[4]?p2b(g):g);b=255&(m[6]?p2b(b):b);return{r:r,g:g,b:b,a:a};}
+function rgbString(v){return v&&(v.a<255?`rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`:`rgb(${v.r}, ${v.g}, ${v.b})`);}
+const HUE_RE=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function hsl2rgbn(h,s,l){const a=s*Math.min(l,1-l);const f=(n,k=(n+h/30)%12)=>l-a*Math.max(Math.min(k-3,9-k,1),-1);return[f(0),f(8),f(4)];}
+function hsv2rgbn(h,s,v){const f=(n,k=(n+h/60)%6)=>v-v*s*Math.max(Math.min(k,4-k,1),0);return[f(5),f(3),f(1)];}
+function hwb2rgbn(h,w,b){const rgb=hsl2rgbn(h,1,0.5);let i;if(w+b>1){i=1/(w+b);w*=i;b*=i;}
+for(i=0;i<3;i++){rgb[i]*=1-w-b;rgb[i]+=w;}
+return rgb;}
+function rgb2hsl(v){const range=255;const r=v.r/range;const g=v.g/range;const b=v.b/range;const max=Math.max(r,g,b);const min=Math.min(r,g,b);const l=(max+min)/2;let h,s,d;if(max!==min){d=max-min;s=l>0.5?d/(2-max-min):d/(max+min);h=max===r?((g-b)/d)+(g>16&0xFF,k>>8&0xFF,k&0xFF];}
+return unpacked;}
+let names$1;function nameParse(str){if(!names$1){names$1=unpack();names$1.transparent=[0,0,0,0];}
+const a=names$1[str.toLowerCase()];return a&&{r:a[0],g:a[1],b:a[2],a:a.length===4?a[3]:255};}
+function modHSL(v,i,ratio){if(v){let tmp=rgb2hsl(v);tmp[i]=Math.max(0,Math.min(tmp[i]+tmp[i]*ratio,i===0?360:1));tmp=hsl2rgb(tmp);v.r=tmp[0];v.g=tmp[1];v.b=tmp[2];}}
+function clone$1(v,proto){return v?Object.assign(proto||{},v):v;}
+function fromObject(input){var v={r:0,g:0,b:0,a:255};if(Array.isArray(input)){if(input.length>=3){v={r:input[0],g:input[1],b:input[2],a:255};if(input.length>3){v.a=n2b(input[3]);}}}else{v=clone$1(input,{r:0,g:0,b:0,a:1});v.a=n2b(v.a);}
+return v;}
+function functionParse(str){if(str.charAt(0)==='r'){return rgbParse(str);}
+return hueParse(str);}
+class Color{constructor(input){if(input instanceof Color){return input;}
+const type=typeof input;let v;if(type==='object'){v=fromObject(input);}else if(type==='string'){v=hexParse(input)||nameParse(input)||functionParse(input);}
+this._rgb=v;this._valid=!!v;}
+get valid(){return this._valid;}
+get rgb(){var v=clone$1(this._rgb);if(v){v.a=b2n(v.a);}
+return v;}
+set rgb(obj){this._rgb=fromObject(obj);}
+rgbString(){return this._valid?rgbString(this._rgb):this._rgb;}
+hexString(){return this._valid?hexString(this._rgb):this._rgb;}
+hslString(){return this._valid?hslString(this._rgb):this._rgb;}
+mix(color,weight){const me=this;if(color){const c1=me.rgb;const c2=color.rgb;let w2;const p=weight===w2?0.5:weight;const w=2*p-1;const a=c1.a-c2.a;const w1=((w*a===-1?w:(w+a)/(1+w*a))+1)/2.0;w2=1-w1;c1.r=0xFF&w1*c1.r+w2*c2.r+0.5;c1.g=0xFF&w1*c1.g+w2*c2.g+0.5;c1.b=0xFF&w1*c1.b+w2*c2.b+0.5;c1.a=p*c1.a+(1-p)*c2.a;me.rgb=c1;}
+return me;}
+clone(){return new Color(this.rgb);}
+alpha(a){this._rgb.a=n2b(a);return this;}
+clearer(ratio){const rgb=this._rgb;rgb.a*=1-ratio;return this;}
+greyscale(){const rgb=this._rgb;const val=round(rgb.r*0.3+rgb.g*0.59+rgb.b*0.11);rgb.r=rgb.g=rgb.b=val;return this;}
+opaquer(ratio){const rgb=this._rgb;rgb.a*=1+ratio;return this;}
+negate(){const v=this._rgb;v.r=255-v.r;v.g=255-v.g;v.b=255-v.b;return this;}
+lighten(ratio){modHSL(this._rgb,2,ratio);return this;}
+darken(ratio){modHSL(this._rgb,2,-ratio);return this;}
+saturate(ratio){modHSL(this._rgb,1,ratio);return this;}
+desaturate(ratio){modHSL(this._rgb,1,-ratio);return this;}
+rotate(deg){rotate(this._rgb,deg);return this;}}
+function index_esm(input){return new Color(input);}
+const isPatternOrGradient=(value)=>value instanceof CanvasGradient||value instanceof CanvasPattern;function color(value){return isPatternOrGradient(value)?value:index_esm(value);}
+function getHoverColor(value){return isPatternOrGradient(value)?value:index_esm(value).saturate(0.5).darken(0.1).hexString();}
+function noop(){}
+const uid=(function(){let id=0;return function(){return id++;};}());function isNullOrUndef(value){return value===null||typeof value==='undefined';}
+function isArray(value){if(Array.isArray&&Array.isArray(value)){return true;}
+const type=Object.prototype.toString.call(value);if(type.substr(0,7)==='[object'&&type.substr(-6)==='Array]'){return true;}
+return false;}
+function isObject(value){return value!==null&&Object.prototype.toString.call(value)==='[object Object]';}
+const isNumberFinite=(value)=>(typeof value==='number'||value instanceof Number)&&isFinite(+value);function finiteOrDefault(value,defaultValue){return isNumberFinite(value)?value:defaultValue;}
+function valueOrDefault(value,defaultValue){return typeof value==='undefined'?defaultValue:value;}
+const toPercentage=(value,dimension)=>typeof value==='string'&&value.endsWith('%')?parseFloat(value)/100:value/dimension;const toDimension=(value,dimension)=>typeof value==='string'&&value.endsWith('%')?parseFloat(value)/100*dimension:+value;function callback(fn,args,thisArg){if(fn&&typeof fn.call==='function'){return fn.apply(thisArg,args);}}
+function each(loopable,fn,thisArg,reverse){let i,len,keys;if(isArray(loopable)){len=loopable.length;if(reverse){for(i=len-1;i>=0;i--){fn.call(thisArg,loopable[i],i);}}else{for(i=0;i=1){return t;}
-return-(Math.sqrt(1-t*t)-1);},easeOutCirc:function(t){return Math.sqrt(1-(t=t-1)*t);},easeInOutCirc:function(t){if((t/=0.5)<1){return-0.5*(Math.sqrt(1-t*t)-1);}
-return 0.5*(Math.sqrt(1-(t-=2)*t)+1);},easeInElastic:function(t){var s=1.70158;var p=0;var a=1;if(t===0){return 0;}
-if(t===1){return 1;}
-if(!p){p=0.3;}
-if(a<1){a=1;s=p/4;}else{s=p/(2*Math.PI)*Math.asin(1/a);}
-return-(a*Math.pow(2,10*(t-=1))*Math.sin((t-s)*(2*Math.PI)/p));},easeOutElastic:function(t){var s=1.70158;var p=0;var a=1;if(t===0){return 0;}
-if(t===1){return 1;}
-if(!p){p=0.3;}
-if(a<1){a=1;s=p/4;}else{s=p/(2*Math.PI)*Math.asin(1/a);}
-return a*Math.pow(2,-10*t)*Math.sin((t-s)*(2*Math.PI)/p)+1;},easeInOutElastic:function(t){var s=1.70158;var p=0;var a=1;if(t===0){return 0;}
-if((t/=0.5)===2){return 1;}
-if(!p){p=0.45;}
-if(a<1){a=1;s=p/4;}else{s=p/(2*Math.PI)*Math.asin(1/a);}
-if(t<1){return-0.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t-s)*(2*Math.PI)/p));}
-return a*Math.pow(2,-10*(t-=1))*Math.sin((t-s)*(2*Math.PI)/p)*0.5+1;},easeInBack:function(t){var s=1.70158;return t*t*((s+1)*t-s);},easeOutBack:function(t){var s=1.70158;return(t=t-1)*t*((s+1)*t+s)+1;},easeInOutBack:function(t){var s=1.70158;if((t/=0.5)<1){return 0.5*(t*t*(((s*=(1.525))+1)*t-s));}
-return 0.5*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2);},easeInBounce:function(t){return 1-effects.easeOutBounce(1-t);},easeOutBounce:function(t){if(t<(1/2.75)){return 7.5625*t*t;}
-if(t<(2/2.75)){return 7.5625*(t-=(1.5/2.75))*t+0.75;}
-if(t<(2.5/2.75)){return 7.5625*(t-=(2.25/2.75))*t+0.9375;}
-return 7.5625*(t-=(2.625/2.75))*t+0.984375;},easeInOutBounce:function(t){if(t<0.5){return effects.easeInBounce(t*2)*0.5;}
-return effects.easeOutBounce(t*2-1)*0.5+0.5;}};var helpers_easing={effects:effects};helpers_core.easingEffects=effects;var PI=Math.PI;var RAD_PER_DEG=PI/180;var DOUBLE_PI=PI*2;var HALF_PI=PI/2;var QUARTER_PI=PI/4;var TWO_THIRDS_PI=PI*2/3;var exports$1={clear:function(chart){chart.ctx.clearRect(0,0,chart.width,chart.height);},roundedRect:function(ctx,x,y,width,height,radius){if(radius){var r=Math.min(radius,height/2,width/2);var left=x+r;var top=y+r;var right=x+width-r;var bottom=y+height-r;ctx.moveTo(x,top);if(leftarea.left-epsilon&&point.xarea.top-epsilon&&point.ypos){obj=obj[key.substr(pos,idx-pos)];pos=idx+1;idx=indexOfDotOrLength(key,pos);}
+return obj;}
+function _capitalize(str){return str.charAt(0).toUpperCase()+str.slice(1);}
+const defined=(value)=>typeof value!=='undefined';const isFunction=(value)=>typeof value==='function';const setsEqual=(a,b)=>{if(a.size!==b.size){return false;}
+for(const item of a){if(!b.has(item)){return false;}}
+return true;};const overrides=Object.create(null);const descriptors=Object.create(null);function getScope$1(node,key){if(!key){return node;}
+const keys=key.split('.');for(let i=0,n=keys.length;icontext.chart.platform.getDevicePixelRatio();this.elements={};this.events=['mousemove','mouseout','click','touchstart','touchmove'];this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:'normal',lineHeight:1.2,weight:null};this.hover={};this.hoverBackgroundColor=(ctx,options)=>getHoverColor(options.backgroundColor);this.hoverBorderColor=(ctx,options)=>getHoverColor(options.borderColor);this.hoverColor=(ctx,options)=>getHoverColor(options.color);this.indexAxis='x';this.interaction={mode:'nearest',intersect:true};this.maintainAspectRatio=true;this.onHover=null;this.onClick=null;this.parsing=true;this.plugins={};this.responsive=true;this.scale=undefined;this.scales={};this.showLine=true;this.describe(_descriptors);}
+set(scope,values){return set(this,scope,values);}
+get(scope){return getScope$1(this,scope);}
+describe(scope,values){return set(descriptors,scope,values);}
+override(scope,values){return set(overrides,scope,values);}
+route(scope,name,targetScope,targetName){const scopeObject=getScope$1(this,scope);const targetScopeObject=getScope$1(this,targetScope);const privateName='_'+name;Object.defineProperties(scopeObject,{[privateName]:{value:scopeObject[name],writable:true},[name]:{enumerable:true,get(){const local=this[privateName];const target=targetScopeObject[targetName];if(isObject(local)){return Object.assign({},target,local);}
+return valueOrDefault(local,target);},set(value){this[privateName]=value;}}});}}
+var defaults=new Defaults({_scriptable:(name)=>!name.startsWith('on'),_indexable:(name)=>name!=='events',hover:{_fallback:'interaction'},interaction:{_scriptable:false,_indexable:false,}});const PI=Math.PI;const TAU=2*PI;const PITAU=TAU+PI;const INFINITY=Number.POSITIVE_INFINITY;const RAD_PER_DEG=PI/180;const HALF_PI=PI/2;const QUARTER_PI=PI/4;const TWO_THIRDS_PI=PI*2/3;const log10=Math.log10;const sign=Math.sign;function niceNum(range){const roundedRange=Math.round(range);range=almostEquals(range,roundedRange,range/1000)?roundedRange:range;const niceRange=Math.pow(10,Math.floor(log10(range)));const fraction=range/niceRange;const niceFraction=fraction<=1?1:fraction<=2?2:fraction<=5?5:10;return niceFraction*niceRange;}
+function _factorize(value){const result=[];const sqrt=Math.sqrt(value);let i;for(i=1;ia-b).pop();return result;}
+function isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n);}
+function almostEquals(x,y,epsilon){return Math.abs(x-y)=x);}
+function _setMinAndMaxByKey(array,target,property){let i,ilen,value;for(i=0,ilen=array.length;iangleToEnd&&startToAngle0){me.requestAnimationFrame();}},advance:function(){var animations=this.animations;var animation,chart,numSteps,nextStep;var i=0;while(i=numSteps){helpers$1.callback(animation.onAnimationComplete,[animation],chart);chart.animating=false;animations.splice(i,1);}else{++i;}}}};var resolve=helpers$1.options.resolve;var arrayEvents=['push','pop','shift','splice','unshift'];function listenArrayEvents(array,listener){if(array._chartjs){array._chartjs.listeners.push(listener);return;}
-Object.defineProperty(array,'_chartjs',{configurable:true,enumerable:false,value:{listeners:[listener]}});arrayEvents.forEach(function(key){var method='onData'+key.charAt(0).toUpperCase()+key.slice(1);var base=array[key];Object.defineProperty(array,key,{configurable:true,enumerable:false,value:function(){var args=Array.prototype.slice.call(arguments);var res=base.apply(this,args);helpers$1.each(array._chartjs.listeners,function(object){if(typeof object[method]==='function'){object[method].apply(object,args);}});return res;}});});}
-function unlistenArrayEvents(array,listener){var stub=array._chartjs;if(!stub){return;}
-var listeners=stub.listeners;var index=listeners.indexOf(listener);if(index!==-1){listeners.splice(index,1);}
-if(listeners.length>0){return;}
-arrayEvents.forEach(function(key){delete array[key];});delete array._chartjs;}
-var DatasetController=function(chart,datasetIndex){this.initialize(chart,datasetIndex);};helpers$1.extend(DatasetController.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:['backgroundColor','borderCapStyle','borderColor','borderDash','borderDashOffset','borderJoinStyle','borderWidth'],_dataElementOptions:['backgroundColor','borderColor','borderWidth','pointStyle'],initialize:function(chart,datasetIndex){var me=this;me.chart=chart;me.index=datasetIndex;me.linkScales();me.addElements();me._type=me.getMeta().type;},updateIndex:function(datasetIndex){this.index=datasetIndex;},linkScales:function(){var me=this;var meta=me.getMeta();var chart=me.chart;var scales=chart.scales;var dataset=me.getDataset();var scalesOpts=chart.options.scales;if(meta.xAxisID===null||!(meta.xAxisID in scales)||dataset.xAxisID){meta.xAxisID=dataset.xAxisID||scalesOpts.xAxes[0].id;}
-if(meta.yAxisID===null||!(meta.yAxisID in scales)||dataset.yAxisID){meta.yAxisID=dataset.yAxisID||scalesOpts.yAxes[0].id;}},getDataset:function(){return this.chart.data.datasets[this.index];},getMeta:function(){return this.chart.getDatasetMeta(this.index);},getScaleForId:function(scaleID){return this.chart.scales[scaleID];},_getValueScaleId:function(){return this.getMeta().yAxisID;},_getIndexScaleId:function(){return this.getMeta().xAxisID;},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId());},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId());},reset:function(){this._update(true);},destroy:function(){if(this._data){unlistenArrayEvents(this._data,this);}},createMetaDataset:function(){var me=this;var type=me.datasetElementType;return type&&new type({_chart:me.chart,_datasetIndex:me.index});},createMetaData:function(index){var me=this;var type=me.dataElementType;return type&&new type({_chart:me.chart,_datasetIndex:me.index,_index:index});},addElements:function(){var me=this;var meta=me.getMeta();var data=me.getDataset().data||[];var metaData=meta.data;var i,ilen;for(i=0,ilen=data.length;inumMeta){me.insertElements(numMeta,numData-numMeta);}},insertElements:function(start,count){for(var i=0;ipixelMargin){angleMargin=pixelMargin/arc.innerRadius;ctx.arc(x,y,arc.innerRadius-pixelMargin,endAngle+angleMargin,startAngle-angleMargin,true);}else{ctx.arc(x,y,pixelMargin,endAngle+Math.PI/2,startAngle-Math.PI/2);}
-ctx.closePath();ctx.clip();}
-function drawFullCircleBorders(ctx,vm,arc,inner){var endAngle=arc.endAngle;var i;if(inner){arc.endAngle=arc.startAngle+TAU;clipArc(ctx,arc);arc.endAngle=endAngle;if(arc.endAngle===arc.startAngle&&arc.fullCircles){arc.endAngle+=TAU;arc.fullCircles--;}}
-ctx.beginPath();ctx.arc(arc.x,arc.y,arc.innerRadius,arc.startAngle+TAU,arc.startAngle,true);for(i=0;iendAngle){angle-=TAU;}
-while(angle=startAngle&&angle<=endAngle);var withinRadius=(distance>=vm.innerRadius&&distance<=vm.outerRadius);return(betweenAngles&&withinRadius);}
-return false;},getCenterPoint:function(){var vm=this._view;var halfAngle=(vm.startAngle+vm.endAngle)/2;var halfRadius=(vm.innerRadius+vm.outerRadius)/2;return{x:vm.x+Math.cos(halfAngle)*halfRadius,y:vm.y+Math.sin(halfAngle)*halfRadius};},getArea:function(){var vm=this._view;return Math.PI*((vm.endAngle-vm.startAngle)/(2*Math.PI))*(Math.pow(vm.outerRadius,2)-Math.pow(vm.innerRadius,2));},tooltipPosition:function(){var vm=this._view;var centreAngle=vm.startAngle+((vm.endAngle-vm.startAngle)/2);var rangeFromCentre=(vm.outerRadius-vm.innerRadius)/2+vm.innerRadius;return{x:vm.x+(Math.cos(centreAngle)*rangeFromCentre),y:vm.y+(Math.sin(centreAngle)*rangeFromCentre)};},draw:function(){var ctx=this._chart.ctx;var vm=this._view;var pixelMargin=(vm.borderAlign==='inner')?0.33:0;var arc={x:vm.x,y:vm.y,innerRadius:vm.innerRadius,outerRadius:Math.max(vm.outerRadius-pixelMargin,0),pixelMargin:pixelMargin,startAngle:vm.startAngle,endAngle:vm.endAngle,fullCircles:Math.floor(vm.circumference/TAU)};var i;ctx.save();ctx.fillStyle=vm.backgroundColor;ctx.strokeStyle=vm.borderColor;if(arc.fullCircles){arc.endAngle=arc.startAngle+TAU;ctx.beginPath();ctx.arc(arc.x,arc.y,arc.outerRadius,arc.startAngle,arc.endAngle);ctx.arc(arc.x,arc.y,arc.innerRadius,arc.endAngle,arc.startAngle,true);ctx.closePath();for(i=0;ivm.x){edge=swap(edge,'left','right');}}else if(vm.basemaxH?maxH:t,r:skip.right||(r<0)?0:r>maxW?maxW:r,b:skip.bottom||(b<0)?0:b>maxH?maxH:b,l:skip.left||(l<0)?0:l>maxW?maxW:l};}
-function boundingRects(vm){var bounds=getBarBounds(vm);var width=bounds.right-bounds.left;var height=bounds.bottom-bounds.top;var border=parseBorderWidth(vm,width/2,height/2);return{outer:{x:bounds.left,y:bounds.top,w:width,h:height},inner:{x:bounds.left+border.l,y:bounds.top+border.t,w:width-border.l-border.r,h:height-border.t-border.b}};}
-function inRange(vm,x,y){var skipX=x===null;var skipY=y===null;var bounds=!vm||(skipX&&skipY)?false:getBarBounds(vm);return bounds&&(skipX||x>=bounds.left&&x<=bounds.right)&&(skipY||y>=bounds.top&&y<=bounds.bottom);}
-var element_rectangle=core_element.extend({_type:'rectangle',draw:function(){var ctx=this._chart.ctx;var vm=this._view;var rects=boundingRects(vm);var outer=rects.outer;var inner=rects.inner;ctx.fillStyle=vm.backgroundColor;ctx.fillRect(outer.x,outer.y,outer.w,outer.h);if(outer.w===inner.w&&outer.h===inner.h){return;}
-ctx.save();ctx.beginPath();ctx.rect(outer.x,outer.y,outer.w,outer.h);ctx.clip();ctx.fillStyle=vm.borderColor;ctx.rect(inner.x,inner.y,inner.w,inner.h);ctx.fill('evenodd');ctx.restore();},height:function(){var vm=this._view;return vm.base-vm.y;},inRange:function(mouseX,mouseY){return inRange(this._view,mouseX,mouseY);},inLabelRange:function(mouseX,mouseY){var vm=this._view;return isVertical(vm)?inRange(vm,mouseX,null):inRange(vm,null,mouseY);},inXRange:function(mouseX){return inRange(this._view,mouseX,null);},inYRange:function(mouseY){return inRange(this._view,null,mouseY);},getCenterPoint:function(){var vm=this._view;var x,y;if(isVertical(vm)){x=vm.x;y=(vm.y+vm.base)/2;}else{x=(vm.x+vm.base)/2;y=vm.y;}
-return{x:x,y:y};},getArea:function(){var vm=this._view;return isVertical(vm)?vm.width*Math.abs(vm.y-vm.base):vm.height*Math.abs(vm.x-vm.base);},tooltipPosition:function(){var vm=this._view;return{x:vm.x,y:vm.y};}});var elements={};var Arc=element_arc;var Line=element_line;var Point=element_point;var Rectangle=element_rectangle;elements.Arc=Arc;elements.Line=Line;elements.Point=Point;elements.Rectangle=Rectangle;var deprecated=helpers$1._deprecated;var valueOrDefault$3=helpers$1.valueOrDefault;core_defaults._set('bar',{hover:{mode:'label'},scales:{xAxes:[{type:'category',offset:true,gridLines:{offsetGridLines:true}}],yAxes:[{type:'linear'}]}});core_defaults._set('global',{datasets:{bar:{categoryPercentage:0.8,barPercentage:0.9}}});function computeMinSampleSize(scale,pixels){var min=scale._length;var prev,curr,i,ilen;for(i=1,ilen=pixels.length;i0?Math.min(min,Math.abs(curr-prev)):min;prev=curr;}
-return min;}
-function computeFitCategoryTraits(index,ruler,options){var thickness=options.barThickness;var count=ruler.stackCount;var curr=ruler.pixels[index];var min=helpers$1.isNullOrUndef(thickness)?computeMinSampleSize(ruler.scale,ruler.pixels):-1;var size,ratio;if(helpers$1.isNullOrUndef(thickness)){size=min*options.categoryPercentage;ratio=options.barPercentage;}else{size=thickness*count;ratio=1;}
-return{chunk:size/count,ratio:ratio,start:curr-(size/2)};}
-function computeFlexCategoryTraits(index,ruler,options){var pixels=ruler.pixels;var curr=pixels[index];var prev=index>0?pixels[index-1]:null;var next=index=0&&value.min>=0?value.min:value.max;var length=value.start===undefined?value.end:value.max>=0&&value.min>=0?value.max-value.min:value.min-value.max;var ilen=metasets.length;var i,imeta,ivalue,base,head,size,stackLength;if(stacked||(stacked===undefined&&stack!==undefined)){for(i=0;i=0&&stackLength.max>=0?stackLength.max:stackLength.min;if((value.min<0&&ivalue<0)||(value.max>=0&&ivalue>0)){start+=ivalue;}}}}
-base=scale.getPixelForValue(start);head=scale.getPixelForValue(start+length);size=head-base;if(minBarLength!==undefined&&Math.abs(size)=0&&!isHorizontal||length<0&&isHorizontal){head=base-minBarLength;}else{head=base+minBarLength;}}
-return{size:size,base:base,head:head,center:head+size/2};},calculateBarIndexPixels:function(datasetIndex,index,ruler,options){var me=this;var range=options.barThickness==='flex'?computeFlexCategoryTraits(index,ruler,options):computeFitCategoryTraits(index,ruler,options);var stackIndex=me.getStackIndex(datasetIndex,me.getMeta().stack);var center=range.start+(range.chunk*stackIndex)+(range.chunk/2);var size=Math.min(valueOrDefault$3(options.maxBarThickness,Infinity),range.chunk*range.ratio);return{base:center-size/2,head:center+size/2,center:center,size:size};},draw:function(){var me=this;var chart=me.chart;var scale=me._getValueScale();var rects=me.getMeta().data;var dataset=me.getDataset();var ilen=rects.length;var i=0;helpers$1.canvas.clipArea(chart.ctx,chart.chartArea);for(;i=PI$1?-DOUBLE_PI$1:startAngle<-PI$1?DOUBLE_PI$1:0;var endAngle=startAngle+circumference;var startX=Math.cos(startAngle);var startY=Math.sin(startAngle);var endX=Math.cos(endAngle);var endY=Math.sin(endAngle);var contains0=(startAngle<=0&&endAngle>=0)||endAngle>=DOUBLE_PI$1;var contains90=(startAngle<=HALF_PI$1&&endAngle>=HALF_PI$1)||endAngle>=DOUBLE_PI$1+HALF_PI$1;var contains180=startAngle===-PI$1||endAngle>=PI$1;var contains270=(startAngle<=-HALF_PI$1&&endAngle>=-HALF_PI$1)||endAngle>=PI$1+HALF_PI$1;var minX=contains180?-1:Math.min(startX,startX*cutout,endX,endX*cutout);var minY=contains270?-1:Math.min(startY,startY*cutout,endY,endY*cutout);var maxX=contains0?1:Math.max(startX,startX*cutout,endX,endX*cutout);var maxY=contains90?1:Math.max(startY,startY*cutout,endY,endY*cutout);ratioX=(maxX-minX)/2;ratioY=(maxY-minY)/2;offsetX=-(maxX+minX)/2;offsetY=-(maxY+minY)/2;}
-for(i=0,ilen=arcs.length;i0&&!isNaN(value)){return DOUBLE_PI$1*(Math.abs(value)/total);}
-return 0;},getMaxBorderWidth:function(arcs){var me=this;var max=0;var chart=me.chart;var i,ilen,meta,arc,controller,options,borderWidth,hoverWidth;if(!arcs){for(i=0,ilen=chart.data.datasets.length;imax?borderWidth:max;max=hoverWidth>max?hoverWidth:max;}}
-return max;},setHoverStyle:function(arc){var model=arc._model;var options=arc._options;var getHoverColor=helpers$1.getHoverColor;arc.$previousStyle={backgroundColor:model.backgroundColor,borderColor:model.borderColor,borderWidth:model.borderWidth,};model.backgroundColor=valueOrDefault$5(options.hoverBackgroundColor,getHoverColor(options.backgroundColor));model.borderColor=valueOrDefault$5(options.hoverBorderColor,getHoverColor(options.borderColor));model.borderWidth=valueOrDefault$5(options.hoverBorderWidth,options.borderWidth);},_getRingWeightOffset:function(datasetIndex){var ringWeightOffset=0;for(var i=0;i0&&isPointInArea(points[i-1]._model,area)){model.controlPointPreviousX=capControlPoint(model.controlPointPreviousX,area.left,area.right);model.controlPointPreviousY=capControlPoint(model.controlPointPreviousY,area.top,area.bottom);}
-if(i0){items=chart.getDatasetMeta(items[0]._datasetIndex).data;}
-return items;},'x-axis':function(chart,e){return indexMode(chart,e,{intersect:false});},point:function(chart,e){var position=getRelativePosition(e,chart);return getIntersectItems(chart,position);},nearest:function(chart,e,options){var position=getRelativePosition(e,chart);options.axis=options.axis||'xy';var distanceMetric=getDistanceMetricForAxis(options.axis);return getNearestItems(chart,position,options.intersect,distanceMetric);},x:function(chart,e,options){var position=getRelativePosition(e,chart);var items=[];var intersectsItem=false;parseVisibleItems(chart,function(element){if(element.inXRange(position.x)){items.push(element);}
-if(element.inRange(position.x,position.y)){intersectsItem=true;}});if(options.intersect&&!intersectsItem){items=[];}
-return items;},y:function(chart,e,options){var position=getRelativePosition(e,chart);var items=[];var intersectsItem=false;parseVisibleItems(chart,function(element){if(element.inYRange(position.y)){items.push(element);}
-if(element.inRange(position.x,position.y)){intersectsItem=true;}});if(options.intersect&&!intersectsItem){items=[];}
-return items;}}};var extend=helpers$1.extend;function filterByPosition(array,position){return helpers$1.where(array,function(v){return v.pos===position;});}
-function sortByWeight(array,reverse){return array.sort(function(a,b){var v0=reverse?b:a;var v1=reverse?a:b;return v0.weight===v1.weight?v0.index-v1.index:v0.weight-v1.weight;});}
-function wrapBoxes(boxes){var layoutBoxes=[];var i,ilen,box;for(i=0,ilen=(boxes||[]).length;i0){var item=tooltipItems[0];if(item.label){title=item.label;}else if(item.xLabel){title=item.xLabel;}else if(labelCount>0&&item.index-1){return str.split('\n');}
-return str;}
-function createTooltipItem(element){var xScale=element._xScale;var yScale=element._yScale||element._scale;var index=element._index;var datasetIndex=element._datasetIndex;var controller=element._chart.getDatasetMeta(datasetIndex).controller;var indexScale=controller._getIndexScale();var valueScale=controller._getValueScale();return{xLabel:xScale?xScale.getLabelForIndex(index,datasetIndex):'',yLabel:yScale?yScale.getLabelForIndex(index,datasetIndex):'',label:indexScale?''+indexScale.getLabelForIndex(index,datasetIndex):'',value:valueScale?''+valueScale.getLabelForIndex(index,datasetIndex):'',index:index,datasetIndex:datasetIndex,x:element._model.x,y:element._model.y};}
-function getBaseModel(tooltipOpts){var globalDefaults=core_defaults.global;return{xPadding:tooltipOpts.xPadding,yPadding:tooltipOpts.yPadding,xAlign:tooltipOpts.xAlign,yAlign:tooltipOpts.yAlign,rtl:tooltipOpts.rtl,textDirection:tooltipOpts.textDirection,bodyFontColor:tooltipOpts.bodyFontColor,_bodyFontFamily:valueOrDefault$8(tooltipOpts.bodyFontFamily,globalDefaults.defaultFontFamily),_bodyFontStyle:valueOrDefault$8(tooltipOpts.bodyFontStyle,globalDefaults.defaultFontStyle),_bodyAlign:tooltipOpts.bodyAlign,bodyFontSize:valueOrDefault$8(tooltipOpts.bodyFontSize,globalDefaults.defaultFontSize),bodySpacing:tooltipOpts.bodySpacing,titleFontColor:tooltipOpts.titleFontColor,_titleFontFamily:valueOrDefault$8(tooltipOpts.titleFontFamily,globalDefaults.defaultFontFamily),_titleFontStyle:valueOrDefault$8(tooltipOpts.titleFontStyle,globalDefaults.defaultFontStyle),titleFontSize:valueOrDefault$8(tooltipOpts.titleFontSize,globalDefaults.defaultFontSize),_titleAlign:tooltipOpts.titleAlign,titleSpacing:tooltipOpts.titleSpacing,titleMarginBottom:tooltipOpts.titleMarginBottom,footerFontColor:tooltipOpts.footerFontColor,_footerFontFamily:valueOrDefault$8(tooltipOpts.footerFontFamily,globalDefaults.defaultFontFamily),_footerFontStyle:valueOrDefault$8(tooltipOpts.footerFontStyle,globalDefaults.defaultFontStyle),footerFontSize:valueOrDefault$8(tooltipOpts.footerFontSize,globalDefaults.defaultFontSize),_footerAlign:tooltipOpts.footerAlign,footerSpacing:tooltipOpts.footerSpacing,footerMarginTop:tooltipOpts.footerMarginTop,caretSize:tooltipOpts.caretSize,cornerRadius:tooltipOpts.cornerRadius,backgroundColor:tooltipOpts.backgroundColor,opacity:0,legendColorBackground:tooltipOpts.multiKeyBackground,displayColors:tooltipOpts.displayColors,borderColor:tooltipOpts.borderColor,borderWidth:tooltipOpts.borderWidth};}
-function getTooltipSize(tooltip,model){var ctx=tooltip._chart.ctx;var height=model.yPadding*2;var width=0;var body=model.body;var combinedBodyLength=body.reduce(function(count,bodyItem){return count+bodyItem.before.length+bodyItem.lines.length+bodyItem.after.length;},0);combinedBodyLength+=model.beforeBody.length+model.afterBody.length;var titleLineCount=model.title.length;var footerLineCount=model.footer.length;var titleFontSize=model.titleFontSize;var bodyFontSize=model.bodyFontSize;var footerFontSize=model.footerFontSize;height+=titleLineCount*titleFontSize;height+=titleLineCount?(titleLineCount-1)*model.titleSpacing:0;height+=titleLineCount?model.titleMarginBottom:0;height+=combinedBodyLength*bodyFontSize;height+=combinedBodyLength?(combinedBodyLength-1)*model.bodySpacing:0;height+=footerLineCount?model.footerMarginTop:0;height+=footerLineCount*(footerFontSize);height+=footerLineCount?(footerLineCount-1)*model.footerSpacing:0;var widthPadding=0;var maxLineWidth=function(line){width=Math.max(width,ctx.measureText(line).width+widthPadding);};ctx.font=helpers$1.fontString(titleFontSize,model._titleFontStyle,model._titleFontFamily);helpers$1.each(model.title,maxLineWidth);ctx.font=helpers$1.fontString(bodyFontSize,model._bodyFontStyle,model._bodyFontFamily);helpers$1.each(model.beforeBody.concat(model.afterBody),maxLineWidth);widthPadding=model.displayColors?(bodyFontSize+2):0;helpers$1.each(body,function(bodyItem){helpers$1.each(bodyItem.before,maxLineWidth);helpers$1.each(bodyItem.lines,maxLineWidth);helpers$1.each(bodyItem.after,maxLineWidth);});widthPadding=0;ctx.font=helpers$1.fontString(footerFontSize,model._footerFontStyle,model._footerFontFamily);helpers$1.each(model.footer,maxLineWidth);width+=2*model.xPadding;return{width:width,height:height};}
-function determineAlignment(tooltip,size){var model=tooltip._model;var chart=tooltip._chart;var chartArea=tooltip._chart.chartArea;var xAlign='center';var yAlign='center';if(model.y(chart.height-size.height)){yAlign='bottom';}
-var lf,rf;var olf,orf;var yf;var midX=(chartArea.left+chartArea.right)/2;var midY=(chartArea.top+chartArea.bottom)/2;if(yAlign==='center'){lf=function(x){return x<=midX;};rf=function(x){return x>midX;};}else{lf=function(x){return x<=(size.width/2);};rf=function(x){return x>=(chart.width-(size.width/2));};}
-olf=function(x){return x+size.width+model.caretSize+model.caretPadding>chart.width;};orf=function(x){return x-size.width-model.caretSize-model.caretPadding<0;};yf=function(y){return y<=midY?'top':'bottom';};if(lf(model.x)){xAlign='left';if(olf(model.x)){xAlign='center';yAlign=yf(model.y);}}else if(rf(model.x)){xAlign='right';if(orf(model.x)){xAlign='center';yAlign=yf(model.y);}}
-var opts=tooltip._options;return{xAlign:opts.xAlign?opts.xAlign:xAlign,yAlign:opts.yAlign?opts.yAlign:yAlign};}
-function getBackgroundPoint(vm,size,alignment,chart){var x=vm.x;var y=vm.y;var caretSize=vm.caretSize;var caretPadding=vm.caretPadding;var cornerRadius=vm.cornerRadius;var xAlign=alignment.xAlign;var yAlign=alignment.yAlign;var paddingAndSize=caretSize+caretPadding;var radiusAndPadding=cornerRadius+caretPadding;if(xAlign==='right'){x-=size.width;}else if(xAlign==='center'){x-=(size.width/2);if(x+size.width>chart.width){x=chart.width-size.width;}
-if(x<0){x=0;}}
-if(yAlign==='top'){y+=paddingAndSize;}else if(yAlign==='bottom'){y-=size.height+paddingAndSize;}else{y-=(size.height/2);}
-if(yAlign==='center'){if(xAlign==='left'){x+=paddingAndSize;}else if(xAlign==='right'){x-=paddingAndSize;}}else if(xAlign==='left'){x-=radiusAndPadding;}else if(xAlign==='right'){x+=radiusAndPadding;}
-return{x:x,y:y};}
-function getAlignedX(vm,align){return align==='center'?vm.x+vm.width/2:align==='right'?vm.x+vm.width-vm.xPadding:vm.x+vm.xPadding;}
-function getBeforeAfterBodyLines(callback){return pushOrConcat([],splitNewlines(callback));}
-var exports$4=core_element.extend({initialize:function(){this._model=getBaseModel(this._options);this._lastActive=[];},getTitle:function(){var me=this;var opts=me._options;var callbacks=opts.callbacks;var beforeTitle=callbacks.beforeTitle.apply(me,arguments);var title=callbacks.title.apply(me,arguments);var afterTitle=callbacks.afterTitle.apply(me,arguments);var lines=[];lines=pushOrConcat(lines,splitNewlines(beforeTitle));lines=pushOrConcat(lines,splitNewlines(title));lines=pushOrConcat(lines,splitNewlines(afterTitle));return lines;},getBeforeBody:function(){return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this,arguments));},getBody:function(tooltipItems,data){var me=this;var callbacks=me._options.callbacks;var bodyItems=[];helpers$1.each(tooltipItems,function(tooltipItem){var bodyItem={before:[],lines:[],after:[]};pushOrConcat(bodyItem.before,splitNewlines(callbacks.beforeLabel.call(me,tooltipItem,data)));pushOrConcat(bodyItem.lines,callbacks.label.call(me,tooltipItem,data));pushOrConcat(bodyItem.after,splitNewlines(callbacks.afterLabel.call(me,tooltipItem,data)));bodyItems.push(bodyItem);});return bodyItems;},getAfterBody:function(){return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this,arguments));},getFooter:function(){var me=this;var callbacks=me._options.callbacks;var beforeFooter=callbacks.beforeFooter.apply(me,arguments);var footer=callbacks.footer.apply(me,arguments);var afterFooter=callbacks.afterFooter.apply(me,arguments);var lines=[];lines=pushOrConcat(lines,splitNewlines(beforeFooter));lines=pushOrConcat(lines,splitNewlines(footer));lines=pushOrConcat(lines,splitNewlines(afterFooter));return lines;},update:function(changed){var me=this;var opts=me._options;var existingModel=me._model;var model=me._model=getBaseModel(opts);var active=me._active;var data=me._data;var alignment={xAlign:existingModel.xAlign,yAlign:existingModel.yAlign};var backgroundPoint={x:existingModel.x,y:existingModel.y};var tooltipSize={width:existingModel.width,height:existingModel.height};var tooltipPosition={x:existingModel.caretX,y:existingModel.caretY};var i,len;if(active.length){model.opacity=1;var labelColors=[];var labelTextColors=[];tooltipPosition=positioners[opts.position].call(me,active,me._eventPosition);var tooltipItems=[];for(i=0,len=active.length;i0){ctx.stroke();}},draw:function(){var ctx=this._chart.ctx;var vm=this._view;if(vm.opacity===0){return;}
-var tooltipSize={width:vm.width,height:vm.height};var pt={x:vm.x,y:vm.y};var opacity=Math.abs(vm.opacity<1e-3)?0:vm.opacity;var hasTooltipContent=vm.title.length||vm.beforeBody.length||vm.body.length||vm.afterBody.length||vm.footer.length;if(this._options.enabled&&hasTooltipContent){ctx.save();ctx.globalAlpha=opacity;this.drawBackground(pt,vm,ctx,tooltipSize);pt.y+=vm.yPadding;helpers$1.rtl.overrideTextDirection(ctx,vm.textDirection);this.drawTitle(pt,vm,ctx);this.drawBody(pt,vm,ctx);this.drawFooter(pt,vm,ctx);helpers$1.rtl.restoreTextDirection(ctx,vm.textDirection);ctx.restore();}},handleEvent:function(e){var me=this;var options=me._options;var changed=false;me._lastActive=me._lastActive||[];if(e.type==='mouseout'){me._active=[];}else{me._active=me._chart.getElementsAtEventForMode(e,options.mode,options);if(options.reverse){me._active.reverse();}}
-changed=!helpers$1.arrayEquals(me._active,me._lastActive);if(changed){me._lastActive=me._active;if(options.enabled||options.custom){me._eventPosition={x:e.x,y:e.y};me.update(true);me.pivot();}}
-return changed;}});var positioners_1=positioners;var core_tooltip=exports$4;core_tooltip.positioners=positioners_1;var valueOrDefault$9=helpers$1.valueOrDefault;core_defaults._set('global',{elements:{},events:['mousemove','mouseout','click','touchstart','touchmove'],hover:{onHover:null,mode:'nearest',intersect:true,animationDuration:400},onClick:null,maintainAspectRatio:true,responsive:true,responsiveAnimationDuration:0});function mergeScaleConfig(){return helpers$1.merge({},[].slice.call(arguments),{merger:function(key,target,source,options){if(key==='xAxes'||key==='yAxes'){var slen=source[key].length;var i,type,scale;if(!target[key]){target[key]=[];}
-for(i=0;i=target[key].length){target[key].push({});}
-if(!target[key][i].type||(scale.type&&scale.type!==target[key][i].type)){helpers$1.merge(target[key][i],[core_scaleService.getScaleDefaults(type),scale]);}else{helpers$1.merge(target[key][i],scale);}}}else{helpers$1._merger(key,target,source,options);}}});}
-function mergeConfig(){return helpers$1.merge({},[].slice.call(arguments),{merger:function(key,target,source,options){var tval=target[key]||{};var sval=source[key];if(key==='scales'){target[key]=mergeScaleConfig(tval,sval);}else if(key==='scale'){target[key]=helpers$1.merge(tval,[core_scaleService.getScaleDefaults(sval.type),sval]);}else{helpers$1._merger(key,target,source,options);}}});}
-function initConfig(config){config=config||{};var data=config.data=config.data||{};data.datasets=data.datasets||[];data.labels=data.labels||[];config.options=mergeConfig(core_defaults.global,core_defaults[config.type],config.options||{});return config;}
-function updateConfig(chart){var newOptions=chart.options;helpers$1.each(chart.scales,function(scale){core_layouts.removeBox(chart,scale);});newOptions=mergeConfig(core_defaults.global,core_defaults[chart.config.type],newOptions);chart.options=chart.config.options=newOptions;chart.ensureScalesHaveIDs();chart.buildOrUpdateScales();chart.tooltip._options=newOptions.tooltips;chart.tooltip.initialize();}
-function nextAvailableScaleId(axesOpts,prefix,index){var id;var hasId=function(obj){return obj.id===id;};do{id=prefix+index++;}while(helpers$1.findIndex(axesOpts,hasId)>=0);return id;}
-function positionIsHorizontal(position){return position==='top'||position==='bottom';}
-function compare2Level(l1,l2){return function(a,b){return a[l1]===b[l1]?a[l2]-b[l2]:a[l1]-b[l1];};}
-var Chart=function(item,config){this.construct(item,config);return this;};helpers$1.extend(Chart.prototype,{construct:function(item,config){var me=this;config=initConfig(config);var context=platform.acquireContext(item,config);var canvas=context&&context.canvas;var height=canvas&&canvas.height;var width=canvas&&canvas.width;me.id=helpers$1.uid();me.ctx=context;me.canvas=canvas;me.config=config;me.width=width;me.height=height;me.aspectRatio=height?width/height:null;me.options=config.options;me._bufferedRender=false;me._layers=[];me.chart=me;me.controller=me;Chart.instances[me.id]=me;Object.defineProperty(me,'data',{get:function(){return me.config.data;},set:function(value){me.config.data=value;}});if(!context||!canvas){console.error("Failed to create chart: can't acquire context from the given item");return;}
-me.initialize();me.update();},initialize:function(){var me=this;core_plugins.notify(me,'beforeInit');helpers$1.retinaScale(me,me.options.devicePixelRatio);me.bindEvents();if(me.options.responsive){me.resize(true);}
-me.initToolTip();core_plugins.notify(me,'afterInit');return me;},clear:function(){helpers$1.canvas.clear(this);return this;},stop:function(){core_animations.cancelAnimation(this);return this;},resize:function(silent){var me=this;var options=me.options;var canvas=me.canvas;var aspectRatio=(options.maintainAspectRatio&&me.aspectRatio)||null;var newWidth=Math.max(0,Math.floor(helpers$1.getMaximumWidth(canvas)));var newHeight=Math.max(0,Math.floor(aspectRatio?newWidth/aspectRatio:helpers$1.getMaximumHeight(canvas)));if(me.width===newWidth&&me.height===newHeight){return;}
-canvas.width=me.width=newWidth;canvas.height=me.height=newHeight;canvas.style.width=newWidth+'px';canvas.style.height=newHeight+'px';helpers$1.retinaScale(me,options.devicePixelRatio);if(!silent){var newSize={width:newWidth,height:newHeight};core_plugins.notify(me,'resize',[newSize]);if(options.onResize){options.onResize(me,newSize);}
-me.stop();me.update({duration:options.responsiveAnimationDuration});}},ensureScalesHaveIDs:function(){var options=this.options;var scalesOptions=options.scales||{};var scaleOptions=options.scale;helpers$1.each(scalesOptions.xAxes,function(xAxisOptions,index){if(!xAxisOptions.id){xAxisOptions.id=nextAvailableScaleId(scalesOptions.xAxes,'x-axis-',index);}});helpers$1.each(scalesOptions.yAxes,function(yAxisOptions,index){if(!yAxisOptions.id){yAxisOptions.id=nextAvailableScaleId(scalesOptions.yAxes,'y-axis-',index);}});if(scaleOptions){scaleOptions.id=scaleOptions.id||'scale';}},buildOrUpdateScales:function(){var me=this;var options=me.options;var scales=me.scales||{};var items=[];var updated=Object.keys(scales).reduce(function(obj,id){obj[id]=false;return obj;},{});if(options.scales){items=items.concat((options.scales.xAxes||[]).map(function(xAxisOptions){return{options:xAxisOptions,dtype:'category',dposition:'bottom'};}),(options.scales.yAxes||[]).map(function(yAxisOptions){return{options:yAxisOptions,dtype:'linear',dposition:'left'};}));}
-if(options.scale){items.push({options:options.scale,dtype:'radialLinear',isDefault:true,dposition:'chartArea'});}
-helpers$1.each(items,function(item){var scaleOptions=item.options;var id=scaleOptions.id;var scaleType=valueOrDefault$9(scaleOptions.type,item.dtype);if(positionIsHorizontal(scaleOptions.position)!==positionIsHorizontal(item.dposition)){scaleOptions.position=item.dposition;}
-updated[id]=true;var scale=null;if(id in scales&&scales[id].type===scaleType){scale=scales[id];scale.options=scaleOptions;scale.ctx=me.ctx;scale.chart=me;}else{var scaleClass=core_scaleService.getScaleConstructor(scaleType);if(!scaleClass){return;}
-scale=new scaleClass({id:id,type:scaleType,options:scaleOptions,ctx:me.ctx,chart:me});scales[scale.id]=scale;}
-scale.mergeTicksOptions();if(item.isDefault){me.scale=scale;}});helpers$1.each(updated,function(hasUpdated,id){if(!hasUpdated){delete scales[id];}});me.scales=scales;core_scaleService.addScalesToLayout(this);},buildOrUpdateControllers:function(){var me=this;var newControllers=[];var datasets=me.data.datasets;var i,ilen;for(i=0,ilen=datasets.length;i=0;--i){me.drawDataset(metasets[i],easingValue);}
-core_plugins.notify(me,'afterDatasetsDraw',[easingValue]);},drawDataset:function(meta,easingValue){var me=this;var args={meta:meta,index:meta.index,easingValue:easingValue};if(core_plugins.notify(me,'beforeDatasetDraw',[args])===false){return;}
-meta.controller.draw(easingValue);core_plugins.notify(me,'afterDatasetDraw',[args]);},_drawTooltip:function(easingValue){var me=this;var tooltip=me.tooltip;var args={tooltip:tooltip,easingValue:easingValue};if(core_plugins.notify(me,'beforeTooltipDraw',[args])===false){return;}
-tooltip.draw();core_plugins.notify(me,'afterTooltipDraw',[args]);},getElementAtEvent:function(e){return core_interaction.modes.single(this,e);},getElementsAtEvent:function(e){return core_interaction.modes.label(this,e,{intersect:true});},getElementsAtXAxis:function(e){return core_interaction.modes['x-axis'](this,e,{intersect:true});},getElementsAtEventForMode:function(e,mode,options){var method=core_interaction.modes[mode];if(typeof method==='function'){return method(this,e,options);}
-return[];},getDatasetAtEvent:function(e){return core_interaction.modes.dataset(this,e,{intersect:true});},getDatasetMeta:function(datasetIndex){var me=this;var dataset=me.data.datasets[datasetIndex];if(!dataset._meta){dataset._meta={};}
-var meta=dataset._meta[me.id];if(!meta){meta=dataset._meta[me.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:dataset.order||0,index:datasetIndex};}
-return meta;},getVisibleDatasetCount:function(){var count=0;for(var i=0,ilen=this.data.datasets.length;i=0;i--){var currentItem=arrayToSearch[i];if(filterCallback(currentItem)){return currentItem;}}};helpers$1.isNumber=function(n){return!isNaN(parseFloat(n))&&isFinite(n);};helpers$1.almostEquals=function(x,y,epsilon){return Math.abs(x-y)=x);};helpers$1.max=function(array){return array.reduce(function(max,value){if(!isNaN(value)){return Math.max(max,value);}
-return max;},Number.NEGATIVE_INFINITY);};helpers$1.min=function(array){return array.reduce(function(min,value){if(!isNaN(value)){return Math.min(min,value);}
-return min;},Number.POSITIVE_INFINITY);};helpers$1.sign=Math.sign?function(x){return Math.sign(x);}:function(x){x=+x;if(x===0||isNaN(x)){return x;}
-return x>0?1:-1;};helpers$1.toRadians=function(degrees){return degrees*(Math.PI/180);};helpers$1.toDegrees=function(radians){return radians*(180/Math.PI);};helpers$1._decimalPlaces=function(x){if(!helpers$1.isFinite(x)){return;}
-var e=1;var p=0;while(Math.round(x*e)/e!==x){e*=10;p++;}
-return p;};helpers$1.getAngleFromPoint=function(centrePoint,anglePoint){var distanceFromXCenter=anglePoint.x-centrePoint.x;var distanceFromYCenter=anglePoint.y-centrePoint.y;var radialDistanceFromCenter=Math.sqrt(distanceFromXCenter*distanceFromXCenter+distanceFromYCenter*distanceFromYCenter);var angle=Math.atan2(distanceFromYCenter,distanceFromXCenter);if(angle<(-0.5*Math.PI)){angle+=2.0*Math.PI;}
-return{angle:angle,distance:radialDistanceFromCenter};};helpers$1.distanceBetweenPoints=function(pt1,pt2){return Math.sqrt(Math.pow(pt2.x-pt1.x,2)+Math.pow(pt2.y-pt1.y,2));};helpers$1.aliasPixel=function(pixelWidth){return(pixelWidth%2===0)?0:0.5;};helpers$1._alignPixel=function(chart,pixel,width){var devicePixelRatio=chart.currentDevicePixelRatio;var halfWidth=width/2;return Math.round((pixel-halfWidth)*devicePixelRatio)/devicePixelRatio+halfWidth;};helpers$1.splineCurve=function(firstPoint,middlePoint,afterPoint,t){var previous=firstPoint.skip?middlePoint:firstPoint;var current=middlePoint;var next=afterPoint.skip?middlePoint:afterPoint;var d01=Math.sqrt(Math.pow(current.x-previous.x,2)+Math.pow(current.y-previous.y,2));var d12=Math.sqrt(Math.pow(next.x-current.x,2)+Math.pow(next.y-current.y,2));var s01=d01/(d01+d12);var s12=d12/(d01+d12);s01=isNaN(s01)?0:s01;s12=isNaN(s12)?0:s12;var fa=t*s01;var fb=t*s12;return{previous:{x:current.x-fa*(next.x-previous.x),y:current.y-fa*(next.y-previous.y)},next:{x:current.x+fb*(next.x-previous.x),y:current.y+fb*(next.y-previous.y)}};};helpers$1.EPSILON=Number.EPSILON||1e-14;helpers$1.splineCurveMonotone=function(points){var pointsWithTangents=(points||[]).map(function(point){return{model:point._model,deltaK:0,mK:0};});var pointsLen=pointsWithTangents.length;var i,pointBefore,pointCurrent,pointAfter;for(i=0;i0?pointsWithTangents[i-1]:null;pointAfter=i0?pointsWithTangents[i-1]:null;pointAfter=i=collection.length-1?collection[0]:collection[index+1];}
-return index>=collection.length-1?collection[collection.length-1]:collection[index+1];};helpers$1.previousItem=function(collection,index,loop){if(loop){return index<=0?collection[collection.length-1]:collection[index-1];}
-return index<=0?collection[0]:collection[index-1];};helpers$1.niceNum=function(range,round){var exponent=Math.floor(helpers$1.log10(range));var fraction=range/Math.pow(10,exponent);var niceFraction;if(round){if(fraction<1.5){niceFraction=1;}else if(fraction<3){niceFraction=2;}else if(fraction<7){niceFraction=5;}else{niceFraction=10;}}else if(fraction<=1.0){niceFraction=1;}else if(fraction<=2){niceFraction=2;}else if(fraction<=5){niceFraction=5;}else{niceFraction=10;}
-return niceFraction*Math.pow(10,exponent);};helpers$1.requestAnimFrame=(function(){if(typeof window==='undefined'){return function(callback){callback();};}
-return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){return window.setTimeout(callback,1000/60);};}());helpers$1.getRelativePosition=function(evt,chart){var mouseX,mouseY;var e=evt.originalEvent||evt;var canvas=evt.target||evt.srcElement;var boundingRect=canvas.getBoundingClientRect();var touches=e.touches;if(touches&&touches.length>0){mouseX=touches[0].clientX;mouseY=touches[0].clientY;}else{mouseX=e.clientX;mouseY=e.clientY;}
-var paddingLeft=parseFloat(helpers$1.getStyle(canvas,'padding-left'));var paddingTop=parseFloat(helpers$1.getStyle(canvas,'padding-top'));var paddingRight=parseFloat(helpers$1.getStyle(canvas,'padding-right'));var paddingBottom=parseFloat(helpers$1.getStyle(canvas,'padding-bottom'));var width=boundingRect.right-boundingRect.left-paddingLeft-paddingRight;var height=boundingRect.bottom-boundingRect.top-paddingTop-paddingBottom;mouseX=Math.round((mouseX-boundingRect.left-paddingLeft)/(width)*canvas.width/chart.currentDevicePixelRatio);mouseY=Math.round((mouseY-boundingRect.top-paddingTop)/(height)*canvas.height/chart.currentDevicePixelRatio);return{x:mouseX,y:mouseY};};function parseMaxStyle(styleValue,node,parentProperty){var valueInPixels;if(typeof styleValue==='string'){valueInPixels=parseInt(styleValue,10);if(styleValue.indexOf('%')!==-1){valueInPixels=valueInPixels/100*node.parentNode[parentProperty];}}else{valueInPixels=styleValue;}
-return valueInPixels;}
-function isConstrainedValue(value){return value!==undefined&&value!==null&&value!=='none';}
-function getConstraintDimension(domNode,maxStyle,percentageProperty){var view=document.defaultView;var parentNode=helpers$1._getParentNode(domNode);var constrainedNode=view.getComputedStyle(domNode)[maxStyle];var constrainedContainer=view.getComputedStyle(parentNode)[maxStyle];var hasCNode=isConstrainedValue(constrainedNode);var hasCContainer=isConstrainedValue(constrainedContainer);var infinity=Number.POSITIVE_INFINITY;if(hasCNode||hasCContainer){return Math.min(hasCNode?parseMaxStyle(constrainedNode,domNode,percentageProperty):infinity,hasCContainer?parseMaxStyle(constrainedContainer,parentNode,percentageProperty):infinity);}
-return'none';}
-helpers$1.getConstraintWidth=function(domNode){return getConstraintDimension(domNode,'max-width','clientWidth');};helpers$1.getConstraintHeight=function(domNode){return getConstraintDimension(domNode,'max-height','clientHeight');};helpers$1._calculatePadding=function(container,padding,parentDimension){padding=helpers$1.getStyle(container,padding);return padding.indexOf('%')>-1?parentDimension*parseInt(padding,10)/100:parseInt(padding,10);};helpers$1._getParentNode=function(domNode){var parent=domNode.parentNode;if(parent&&parent.toString()==='[object ShadowRoot]'){parent=parent.host;}
-return parent;};helpers$1.getMaximumWidth=function(domNode){var container=helpers$1._getParentNode(domNode);if(!container){return domNode.clientWidth;}
-var clientWidth=container.clientWidth;var paddingLeft=helpers$1._calculatePadding(container,'padding-left',clientWidth);var paddingRight=helpers$1._calculatePadding(container,'padding-right',clientWidth);var w=clientWidth-paddingLeft-paddingRight;var cw=helpers$1.getConstraintWidth(domNode);return isNaN(cw)?w:Math.min(w,cw);};helpers$1.getMaximumHeight=function(domNode){var container=helpers$1._getParentNode(domNode);if(!container){return domNode.clientHeight;}
-var clientHeight=container.clientHeight;var paddingTop=helpers$1._calculatePadding(container,'padding-top',clientHeight);var paddingBottom=helpers$1._calculatePadding(container,'padding-bottom',clientHeight);var h=clientHeight-paddingTop-paddingBottom;var ch=helpers$1.getConstraintHeight(domNode);return isNaN(ch)?h:Math.min(h,ch);};helpers$1.getStyle=function(el,property){return el.currentStyle?el.currentStyle[property]:document.defaultView.getComputedStyle(el,null).getPropertyValue(property);};helpers$1.retinaScale=function(chart,forceRatio){var pixelRatio=chart.currentDevicePixelRatio=forceRatio||(typeof window!=='undefined'&&window.devicePixelRatio)||1;if(pixelRatio===1){return;}
-var canvas=chart.canvas;var height=chart.height;var width=chart.width;canvas.height=height*pixelRatio;canvas.width=width*pixelRatio;chart.ctx.scale(pixelRatio,pixelRatio);if(!canvas.style.height&&!canvas.style.width){canvas.style.height=height+'px';canvas.style.width=width+'px';}};helpers$1.fontString=function(pixelSize,fontStyle,fontFamily){return fontStyle+' '+pixelSize+'px '+fontFamily;};helpers$1.longestText=function(ctx,font,arrayOfThings,cache){cache=cache||{};var data=cache.data=cache.data||{};var gc=cache.garbageCollect=cache.garbageCollect||[];if(cache.font!==font){data=cache.data={};gc=cache.garbageCollect=[];cache.font=font;}
-ctx.font=font;var longest=0;var ilen=arrayOfThings.length;var i,j,jlen,thing,nestedThing;for(i=0;iarrayOfThings.length){for(i=0;ilongest){longest=textWidth;}
-return longest;};helpers$1.numberOfLabelLines=function(arrayOfThings){var numberOfLines=1;helpers$1.each(arrayOfThings,function(thing){if(helpers$1.isArray(thing)){if(thing.length>numberOfLines){numberOfLines=thing.length;}}});return numberOfLines;};helpers$1.color=!chartjsColor?function(value){console.error('Color.js not found!');return value;}:function(value){if(value instanceof CanvasGradient){value=core_defaults.global.defaultColor;}
-return chartjsColor(value);};helpers$1.getHoverColor=function(colorValue){return(colorValue instanceof CanvasPattern||colorValue instanceof CanvasGradient)?colorValue:helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();};};function abstract(){throw new Error('This method is not implemented: either no adapter can '+'be found or an incomplete integration was provided.');}
-function DateAdapter(options){this.options=options||{};}
-helpers$1.extend(DateAdapter.prototype,{formats:abstract,parse:abstract,format:abstract,add:abstract,diff:abstract,startOf:abstract,endOf:abstract,_create:function(value){return value;}});DateAdapter.override=function(members){helpers$1.extend(DateAdapter.prototype,members);};var _date=DateAdapter;var core_adapters={_date:_date};var core_ticks={formatters:{values:function(value){return helpers$1.isArray(value)?value:''+value;},linear:function(tickValue,index,ticks){var delta=ticks.length>3?ticks[2]-ticks[1]:ticks[1]-ticks[0];if(Math.abs(delta)>1){if(tickValue!==Math.floor(tickValue)){delta=tickValue-Math.floor(tickValue);}}
-var logDelta=helpers$1.log10(Math.abs(delta));var tickString='';if(tickValue!==0){var maxTick=Math.max(Math.abs(ticks[0]),Math.abs(ticks[ticks.length-1]));if(maxTick<1e-4){var logTick=helpers$1.log10(Math.abs(tickValue));var numExponential=Math.floor(logTick)-Math.floor(logDelta);numExponential=Math.max(Math.min(numExponential,20),0);tickString=tickValue.toExponential(numExponential);}else{var numDecimal=-1*Math.floor(logDelta);numDecimal=Math.max(Math.min(numDecimal,20),0);tickString=tickValue.toFixed(numDecimal);}}else{tickString='0';}
-return tickString;},logarithmic:function(tickValue,index,ticks){var remain=tickValue/(Math.pow(10,Math.floor(helpers$1.log10(tickValue))));if(tickValue===0){return'0';}else if(remain===1||remain===2||remain===5||index===0||index===ticks.length-1){return tickValue.toExponential();}
-return'';}}};var isArray=helpers$1.isArray;var isNullOrUndef=helpers$1.isNullOrUndef;var valueOrDefault$a=helpers$1.valueOrDefault;var valueAtIndexOrDefault=helpers$1.valueAtIndexOrDefault;core_defaults._set('scale',{display:true,position:'left',offset:false,gridLines:{display:true,color:'rgba(0,0,0,0.1)',lineWidth:1,drawBorder:true,drawOnChartArea:true,drawTicks:true,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:'rgba(0,0,0,0.25)',zeroLineBorderDash:[],zeroLineBorderDashOffset:0.0,offsetGridLines:false,borderDash:[],borderDashOffset:0.0},scaleLabel:{display:false,labelString:'',padding:{top:4,bottom:4}},ticks:{beginAtZero:false,minRotation:0,maxRotation:50,mirror:false,padding:0,reverse:false,display:true,autoSkip:true,autoSkipPadding:0,labelOffset:0,callback:core_ticks.formatters.values,minor:{},major:{}}});function sample(arr,numItems){var result=[];var increment=arr.length/numItems;var i=0;var len=arr.length;for(;iarrayOfThings.length){for(i=0;i0){ctx.stroke();}}
+function _isPointInArea(point,area,margin){margin=margin||0.5;return!area||(point&&point.x>area.left-margin&&point.xarea.top-margin&&point.y0&&opts.strokeColor!=='';let i,line;ctx.save();ctx.font=font.string;setRenderOpts(ctx,opts);for(i=0;itable[index]1){mid=(lo+hi)>>1;if(cmp(mid)){lo=mid;}else{hi=mid;}}
+return{lo,hi};}
+const _lookupByKey=(table,key,value)=>_lookup(table,value,index=>table[index][key]_lookup(table,value,index=>table[index][key]>=value);function _filterBetween(values,min,max){let start=0;let end=values.length;while(startstart&&values[end-1]>max){end--;}
+return start>0||end{const method='_onData'+_capitalize(key);const base=array[key];Object.defineProperty(array,key,{configurable:true,enumerable:false,value(...args){const res=base.apply(this,args);array._chartjs.listeners.forEach((object)=>{if(typeof object[method]==='function'){object[method](...args);}});return res;}});});}
+function unlistenArrayEvents(array,listener){const stub=array._chartjs;if(!stub){return;}
+const listeners=stub.listeners;const index=listeners.indexOf(listener);if(index!==-1){listeners.splice(index,1);}
+if(listeners.length>0){return;}
+arrayEvents.forEach((key)=>{delete array[key];});delete array._chartjs;}
+function _arrayUnique(items){const set=new Set();let i,ilen;for(i=0,ilen=items.length;iwindow.getComputedStyle(element,null);function getStyle(el,property){return getComputedStyle(el).getPropertyValue(property);}
+const positions=['top','right','bottom','left'];function getPositionedStyle(styles,style,suffix){const result={};suffix=suffix?'-'+suffix:'';for(let i=0;i<4;i++){const pos=positions[i];result[pos]=parseFloat(styles[style+'-'+pos+suffix])||0;}
+result.width=result.left+result.right;result.height=result.top+result.bottom;return result;}
+const useOffsetPos=(x,y,target)=>(x>0||y>0)&&(!target||!target.shadowRoot);function getCanvasPosition(evt,canvas){const e=evt.native||evt;const touches=e.touches;const source=touches&&touches.length?touches[0]:e;const{offsetX,offsetY}=source;let box=false;let x,y;if(useOffsetPos(offsetX,offsetY,e.target)){x=offsetX;y=offsetY;}else{const rect=canvas.getBoundingClientRect();x=source.clientX-rect.left;y=source.clientY-rect.top;box=true;}
+return{x,y,box};}
+function getRelativePosition$1(evt,chart){const{canvas,currentDevicePixelRatio}=chart;const style=getComputedStyle(canvas);const borderBox=style.boxSizing==='border-box';const paddings=getPositionedStyle(style,'padding');const borders=getPositionedStyle(style,'border','width');const{x,y,box}=getCanvasPosition(evt,canvas);const xOffset=paddings.left+(box&&borders.left);const yOffset=paddings.top+(box&&borders.top);let{width,height}=chart;if(borderBox){width-=paddings.width+borders.width;height-=paddings.height+borders.height;}
+return{x:Math.round((x-xOffset)/width*canvas.width/currentDevicePixelRatio),y:Math.round((y-yOffset)/height*canvas.height/currentDevicePixelRatio)};}
+function getContainerSize(canvas,width,height){let maxWidth,maxHeight;if(width===undefined||height===undefined){const container=_getParentNode(canvas);if(!container){width=canvas.clientWidth;height=canvas.clientHeight;}else{const rect=container.getBoundingClientRect();const containerStyle=getComputedStyle(container);const containerBorder=getPositionedStyle(containerStyle,'border','width');const containerPadding=getPositionedStyle(containerStyle,'padding');width=rect.width-containerPadding.width-containerBorder.width;height=rect.height-containerPadding.height-containerBorder.height;maxWidth=parseMaxStyle(containerStyle.maxWidth,container,'clientWidth');maxHeight=parseMaxStyle(containerStyle.maxHeight,container,'clientHeight');}}
+return{width,height,maxWidth:maxWidth||INFINITY,maxHeight:maxHeight||INFINITY};}
+const round1=v=>Math.round(v*10)/10;function getMaximumSize(canvas,bbWidth,bbHeight,aspectRatio){const style=getComputedStyle(canvas);const margins=getPositionedStyle(style,'margin');const maxWidth=parseMaxStyle(style.maxWidth,canvas,'clientWidth')||INFINITY;const maxHeight=parseMaxStyle(style.maxHeight,canvas,'clientHeight')||INFINITY;const containerSize=getContainerSize(canvas,bbWidth,bbHeight);let{width,height}=containerSize;if(style.boxSizing==='content-box'){const borders=getPositionedStyle(style,'border','width');const paddings=getPositionedStyle(style,'padding');width-=paddings.width+borders.width;height-=paddings.height+borders.height;}
+width=Math.max(0,width-margins.width);height=Math.max(0,aspectRatio?Math.floor(width/aspectRatio):height-margins.height);width=round1(Math.min(width,maxWidth,containerSize.maxWidth));height=round1(Math.min(height,maxHeight,containerSize.maxHeight));if(width&&!height){height=round1(width/2);}
+return{width,height};}
+function retinaScale(chart,forceRatio,forceStyle){const pixelRatio=forceRatio||1;const deviceHeight=Math.floor(chart.height*pixelRatio);const deviceWidth=Math.floor(chart.width*pixelRatio);chart.height=deviceHeight/pixelRatio;chart.width=deviceWidth/pixelRatio;const canvas=chart.canvas;if(canvas.style&&(forceStyle||(!canvas.style.height&&!canvas.style.width))){canvas.style.height=`${chart.height}px`;canvas.style.width=`${chart.width}px`;}
+if(chart.currentDevicePixelRatio!==pixelRatio||canvas.height!==deviceHeight||canvas.width!==deviceWidth){chart.currentDevicePixelRatio=pixelRatio;canvas.height=deviceHeight;canvas.width=deviceWidth;chart.ctx.setTransform(pixelRatio,0,0,pixelRatio,0,0);return true;}
+return false;}
+const supportsEventListenerOptions=(function(){let passiveSupported=false;try{const options={get passive(){passiveSupported=true;return false;}};window.addEventListener('test',null,options);window.removeEventListener('test',null,options);}catch(e){}
+return passiveSupported;}());function readUsedSize(element,property){const value=getStyle(element,property);const matches=value&&value.match(/^(\d+)(\.\d+)?px$/);return matches?+matches[1]:undefined;}
+function getRelativePosition(e,chart){if('native'in e){return{x:e.x,y:e.y};}
+return getRelativePosition$1(e,chart);}
+function evaluateAllVisibleItems(chart,handler){const metasets=chart.getSortedVisibleDatasetMetas();let index,data,element;for(let i=0,ilen=metasets.length;i{if(element[rangeMethod](position[axis],useFinalPosition)){items.push({element,datasetIndex,index});}
+if(element.inRange(position.x,position.y,useFinalPosition)){intersectsItem=true;}});if(options.intersect&&!intersectsItem){return[];}
+return items;}
+var Interaction={modes:{index(chart,e,options,useFinalPosition){const position=getRelativePosition(e,chart);const axis=options.axis||'x';const items=options.intersect?getIntersectItems(chart,position,axis,useFinalPosition):getNearestItems(chart,position,axis,false,useFinalPosition);const elements=[];if(!items.length){return[];}
+chart.getSortedVisibleDatasetMetas().forEach((meta)=>{const index=items[0].index;const element=meta.data[index];if(element&&!element.skip){elements.push({element,datasetIndex:meta.index,index});}});return elements;},dataset(chart,e,options,useFinalPosition){const position=getRelativePosition(e,chart);const axis=options.axis||'xy';let items=options.intersect?getIntersectItems(chart,position,axis,useFinalPosition):getNearestItems(chart,position,axis,false,useFinalPosition);if(items.length>0){const datasetIndex=items[0].datasetIndex;const data=chart.getDatasetMeta(datasetIndex).data;items=[];for(let i=0;i+v||0;function _readValueToProps(value,props){const ret={};const objProps=isObject(props);const keys=objProps?Object.keys(props):props;const read=isObject(value)?objProps?prop=>valueOrDefault(value[prop],value[props[prop]]):prop=>value[prop]:()=>value;for(const prop of keys){ret[prop]=numberOrZero$1(read(prop));}
+return ret;}
+function toTRBL(value){return _readValueToProps(value,{top:'y',right:'x',bottom:'y',left:'x'});}
+function toTRBLCorners(value){return _readValueToProps(value,['topLeft','topRight','bottomLeft','bottomRight']);}
+function toPadding(value){const obj=toTRBL(value);obj.width=obj.left+obj.right;obj.height=obj.top+obj.bottom;return obj;}
+function toFont(options,fallback){options=options||{};fallback=fallback||defaults.font;let size=valueOrDefault(options.size,fallback.size);if(typeof size==='string'){size=parseInt(size,10);}
+let style=valueOrDefault(options.style,fallback.style);if(style&&!(''+style).match(FONT_STYLE)){console.warn('Invalid font style specified: "'+style+'"');style='';}
+const font={family:valueOrDefault(options.family,fallback.family),lineHeight:toLineHeight(valueOrDefault(options.lineHeight,fallback.lineHeight),size),size,style,weight:valueOrDefault(options.weight,fallback.weight),string:''};font.string=toFontString(font);return font;}
+function resolve(inputs,context,index,info){let cacheable=true;let i,ilen,value;for(i=0,ilen=inputs.length;iv.pos===position);}
+function filterDynamicPositionByAxis(array,axis){return array.filter(v=>STATIC_POSITIONS.indexOf(v.pos)===-1&&v.box.axis===axis);}
+function sortByWeight(array,reverse){return array.sort((a,b)=>{const v0=reverse?b:a;const v1=reverse?a:b;return v0.weight===v1.weight?v0.index-v1.index:v0.weight-v1.weight;});}
+function wrapBoxes(boxes){const layoutBoxes=[];let i,ilen,box,pos,stack,stackWeight;for(i=0,ilen=(boxes||[]).length;iwrap.box.fullSize),true);const left=sortByWeight(filterByPosition(layoutBoxes,'left'),true);const right=sortByWeight(filterByPosition(layoutBoxes,'right'));const top=sortByWeight(filterByPosition(layoutBoxes,'top'),true);const bottom=sortByWeight(filterByPosition(layoutBoxes,'bottom'));const centerHorizontal=filterDynamicPositionByAxis(layoutBoxes,'x');const centerVertical=filterDynamicPositionByAxis(layoutBoxes,'y');return{fullSize,leftAndTop:left.concat(top),rightAndBottom:right.concat(centerVertical).concat(bottom).concat(centerHorizontal),chartArea:filterByPosition(layoutBoxes,'chartArea'),vertical:left.concat(right).concat(centerVertical),horizontal:top.concat(bottom).concat(centerHorizontal)};}
+function getCombinedMax(maxPadding,chartArea,a,b){return Math.max(maxPadding[a],chartArea[a])+Math.max(maxPadding[b],chartArea[b]);}
+function updateMaxPadding(maxPadding,boxPadding){maxPadding.top=Math.max(maxPadding.top,boxPadding.top);maxPadding.left=Math.max(maxPadding.left,boxPadding.left);maxPadding.bottom=Math.max(maxPadding.bottom,boxPadding.bottom);maxPadding.right=Math.max(maxPadding.right,boxPadding.right);}
+function updateDims(chartArea,params,layout,stacks){const{pos,box}=layout;const maxPadding=chartArea.maxPadding;if(!isObject(pos)){if(layout.size){chartArea[pos]-=layout.size;}
+const stack=stacks[layout.stack]||{size:0,count:1};stack.size=Math.max(stack.size,layout.horizontal?box.height:box.width);layout.size=stack.size/stack.count;chartArea[pos]+=layout.size;}
+if(box.getPadding){updateMaxPadding(maxPadding,box.getPadding());}
+const newWidth=Math.max(0,params.outerWidth-getCombinedMax(maxPadding,chartArea,'left','right'));const newHeight=Math.max(0,params.outerHeight-getCombinedMax(maxPadding,chartArea,'top','bottom'));const widthChanged=newWidth!==chartArea.w;const heightChanged=newHeight!==chartArea.h;chartArea.w=newWidth;chartArea.h=newHeight;return layout.horizontal?{same:widthChanged,other:heightChanged}:{same:heightChanged,other:widthChanged};}
+function handleMaxPadding(chartArea){const maxPadding=chartArea.maxPadding;function updatePos(pos){const change=Math.max(maxPadding[pos]-chartArea[pos],0);chartArea[pos]+=change;return change;}
+chartArea.y+=updatePos('top');chartArea.x+=updatePos('left');updatePos('right');updatePos('bottom');}
+function getMargins(horizontal,chartArea){const maxPadding=chartArea.maxPadding;function marginForPositions(positions){const margin={left:0,top:0,right:0,bottom:0};positions.forEach((pos)=>{margin[pos]=Math.max(chartArea[pos],maxPadding[pos]);});return margin;}
+return horizontal?marginForPositions(['left','right']):marginForPositions(['top','bottom']);}
+function fitBoxes(boxes,chartArea,params,stacks){const refitBoxes=[];let i,ilen,layout,box,refit,changed;for(i=0,ilen=boxes.length,refit=0;i{if(typeof box.beforeLayout==='function'){box.beforeLayout();}});const visibleVerticalBoxCount=verticalBoxes.reduce((total,wrap)=>wrap.box.options&&wrap.box.options.display===false?total:total+1,0)||1;const params=Object.freeze({outerWidth:width,outerHeight:height,padding,availableWidth,availableHeight,vBoxMaxWidth:availableWidth/2/visibleVerticalBoxCount,hBoxMaxHeight:availableHeight/2});const maxPadding=Object.assign({},padding);updateMaxPadding(maxPadding,toPadding(minPadding));const chartArea=Object.assign({maxPadding,w:availableWidth,h:availableHeight,x:padding.left,y:padding.top},padding);const stacks=setLayoutDims(verticalBoxes.concat(horizontalBoxes),params);fitBoxes(boxes.fullSize,chartArea,params,stacks);fitBoxes(verticalBoxes,chartArea,params,stacks);if(fitBoxes(horizontalBoxes,chartArea,params,stacks)){fitBoxes(verticalBoxes,chartArea,params,stacks);}
+handleMaxPadding(chartArea);placeBoxes(boxes.leftAndTop,chartArea,params,stacks);chartArea.x+=chartArea.w;chartArea.y+=chartArea.h;placeBoxes(boxes.rightAndBottom,chartArea,params,stacks);chart.chartArea={left:chartArea.left,top:chartArea.top,right:chartArea.left+chartArea.w,bottom:chartArea.top+chartArea.h,height:chartArea.h,width:chartArea.w,};each(boxes.chartArea,(layout)=>{const box=layout.box;Object.assign(box,chart.chartArea);box.update(chartArea.w,chartArea.h);});}};function _createResolver(scopes,prefixes=[''],rootScopes=scopes,fallback,getTarget=()=>scopes[0]){if(!defined(fallback)){fallback=_resolve('_fallback',scopes);}
+const cache={[Symbol.toStringTag]:'Object',_cacheable:true,_scopes:scopes,_rootScopes:rootScopes,_fallback:fallback,_getTarget:getTarget,override:(scope)=>_createResolver([scope,...scopes],prefixes,rootScopes,fallback),};return new Proxy(cache,{deleteProperty(target,prop){delete target[prop];delete target._keys;delete scopes[0][prop];return true;},get(target,prop){return _cached(target,prop,()=>_resolveWithPrefixes(prop,prefixes,scopes,target));},getOwnPropertyDescriptor(target,prop){return Reflect.getOwnPropertyDescriptor(target._scopes[0],prop);},getPrototypeOf(){return Reflect.getPrototypeOf(scopes[0]);},has(target,prop){return getKeysFromAllScopes(target).includes(prop);},ownKeys(target){return getKeysFromAllScopes(target);},set(target,prop,value){const storage=target._storage||(target._storage=getTarget());storage[prop]=value;delete target[prop];delete target._keys;return true;}});}
+function _attachContext(proxy,context,subProxy,descriptorDefaults){const cache={_cacheable:false,_proxy:proxy,_context:context,_subProxy:subProxy,_stack:new Set(),_descriptors:_descriptors(proxy,descriptorDefaults),setContext:(ctx)=>_attachContext(proxy,ctx,subProxy,descriptorDefaults),override:(scope)=>_attachContext(proxy.override(scope),context,subProxy,descriptorDefaults)};return new Proxy(cache,{deleteProperty(target,prop){delete target[prop];delete proxy[prop];return true;},get(target,prop,receiver){return _cached(target,prop,()=>_resolveWithContext(target,prop,receiver));},getOwnPropertyDescriptor(target,prop){return target._descriptors.allKeys?Reflect.has(proxy,prop)?{enumerable:true,configurable:true}:undefined:Reflect.getOwnPropertyDescriptor(proxy,prop);},getPrototypeOf(){return Reflect.getPrototypeOf(proxy);},has(target,prop){return Reflect.has(proxy,prop);},ownKeys(){return Reflect.ownKeys(proxy);},set(target,prop,value){proxy[prop]=value;delete target[prop];return true;}});}
+function _descriptors(proxy,defaults={scriptable:true,indexable:true}){const{_scriptable=defaults.scriptable,_indexable=defaults.indexable,_allKeys=defaults.allKeys}=proxy;return{allKeys:_allKeys,scriptable:_scriptable,indexable:_indexable,isScriptable:isFunction(_scriptable)?_scriptable:()=>_scriptable,isIndexable:isFunction(_indexable)?_indexable:()=>_indexable};}
+const readKey=(prefix,name)=>prefix?prefix+_capitalize(name):name;const needsSubResolver=(prop,value)=>isObject(value)&&prop!=='adapters';function _cached(target,prop,resolve){let value=target[prop];if(defined(value)){return value;}
+value=resolve();if(defined(value)){target[prop]=value;}
+return value;}
+function _resolveWithContext(target,prop,receiver){const{_proxy,_context,_subProxy,_descriptors:descriptors}=target;let value=_proxy[prop];if(isFunction(value)&&descriptors.isScriptable(prop)){value=_resolveScriptable(prop,value,target,receiver);}
+if(isArray(value)&&value.length){value=_resolveArray(prop,value,target,descriptors.isIndexable);}
+if(needsSubResolver(prop,value)){value=_attachContext(value,_context,_subProxy&&_subProxy[prop],descriptors);}
+return value;}
+function _resolveScriptable(prop,value,target,receiver){const{_proxy,_context,_subProxy,_stack}=target;if(_stack.has(prop)){throw new Error('Recursion detected: '+Array.from(_stack).join('->')+'->'+prop);}
+_stack.add(prop);value=value(_context,_subProxy||receiver);_stack.delete(prop);if(isObject(value)){value=createSubResolver(_proxy._scopes,_proxy,prop,value);}
+return value;}
+function _resolveArray(prop,value,target,isIndexable){const{_proxy,_context,_subProxy,_descriptors:descriptors}=target;if(defined(_context.index)&&isIndexable(prop)){value=value[_context.index%value.length];}else if(isObject(value[0])){const arr=value;const scopes=_proxy._scopes.filter(s=>s!==arr);value=[];for(const item of arr){const resolver=createSubResolver(scopes,_proxy,prop,item);value.push(_attachContext(resolver,_context,_subProxy&&_subProxy[prop],descriptors));}}
+return value;}
+function resolveFallback(fallback,prop,value){return isFunction(fallback)?fallback(prop,value):fallback;}
+const getScope=(key,parent)=>key===true?parent:typeof key==='string'?resolveObjectKey(parent,key):undefined;function addScopes(set,parentScopes,key,parentFallback){for(const parent of parentScopes){const scope=getScope(key,parent);if(scope){set.add(scope);const fallback=resolveFallback(scope._fallback,key,scope);if(defined(fallback)&&fallback!==key&&fallback!==parentFallback){return fallback;}}else if(scope===false&&defined(parentFallback)&&key!==parentFallback){return null;}}
+return false;}
+function createSubResolver(parentScopes,resolver,prop,value){const rootScopes=resolver._rootScopes;const fallback=resolveFallback(resolver._fallback,prop,value);const allScopes=[...parentScopes,...rootScopes];const set=new Set();set.add(value);let key=addScopesFromKey(set,allScopes,prop,fallback||prop);if(key===null){return false;}
+if(defined(fallback)&&fallback!==prop){key=addScopesFromKey(set,allScopes,fallback,key);if(key===null){return false;}}
+return _createResolver(Array.from(set),[''],rootScopes,fallback,()=>subGetTarget(resolver,prop,value));}
+function addScopesFromKey(set,allScopes,key,fallback){while(key){key=addScopes(set,allScopes,key,fallback);}
+return key;}
+function subGetTarget(resolver,prop,value){const parent=resolver._getTarget();if(!(prop in parent)){parent[prop]={};}
+const target=parent[prop];if(isArray(target)&&isObject(value)){return value;}
+return target;}
+function _resolveWithPrefixes(prop,prefixes,scopes,proxy){let value;for(const prefix of prefixes){value=_resolve(readKey(prefix,prop),scopes);if(defined(value)){return needsSubResolver(prop,value)?createSubResolver(scopes,proxy,prop,value):value;}}}
+function _resolve(key,scopes){for(const scope of scopes){if(!scope){continue;}
+const value=scope[key];if(defined(value)){return value;}}}
+function getKeysFromAllScopes(target){let keys=target._keys;if(!keys){keys=target._keys=resolveKeysFromAllScopes(target._scopes);}
+return keys;}
+function resolveKeysFromAllScopes(scopes){const set=new Set();for(const scope of scopes){for(const key of Object.keys(scope).filter(k=>!k.startsWith('_'))){set.add(key);}}
+return Array.from(set);}
+const EPSILON=Number.EPSILON||1e-14;const getPoint=(points,i)=>iindexAxis==='x'?'y':'x';function splineCurve(firstPoint,middlePoint,afterPoint,t){const previous=firstPoint.skip?middlePoint:firstPoint;const current=middlePoint;const next=afterPoint.skip?middlePoint:afterPoint;const d01=distanceBetweenPoints(current,previous);const d12=distanceBetweenPoints(next,current);let s01=d01/(d01+d12);let s12=d12/(d01+d12);s01=isNaN(s01)?0:s01;s12=isNaN(s12)?0:s12;const fa=t*s01;const fb=t*s12;return{previous:{x:current.x-fa*(next.x-previous.x),y:current.y-fa*(next.y-previous.y)},next:{x:current.x+fb*(next.x-previous.x),y:current.y+fb*(next.y-previous.y)}};}
+function monotoneAdjust(points,deltaK,mK){const pointsLen=points.length;let alphaK,betaK,tauK,squaredMagnitude,pointCurrent;let pointAfter=getPoint(points,0);for(let i=0;i!pt.skip);}
+if(options.cubicInterpolationMode==='monotone'){splineCurveMonotone(points,indexAxis);}else{let prev=loop?points[points.length-1]:points[0];for(i=0,ilen=points.length;it===0||t===1;const elasticIn=(t,s,p)=>-(Math.pow(2,10*(t-=1))*Math.sin((t-s)*TAU/p));const elasticOut=(t,s,p)=>Math.pow(2,-10*t)*Math.sin((t-s)*TAU/p)+1;const effects={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>((t/=0.5)<1)?0.5*t*t:-0.5*((--t)*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>((t/=0.5)<1)?0.5*t*t*t:0.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>((t/=0.5)<1)?0.5*t*t*t*t:-0.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>((t/=0.5)<1)?0.5*t*t*t*t*t:0.5*((t-=2)*t*t*t*t+2),easeInSine:t=>-Math.cos(t*HALF_PI)+1,easeOutSine:t=>Math.sin(t*HALF_PI),easeInOutSine:t=>-0.5*(Math.cos(PI*t)-1),easeInExpo:t=>(t===0)?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>(t===1)?1:-Math.pow(2,-10*t)+1,easeInOutExpo:t=>atEdge(t)?t:t<0.5?0.5*Math.pow(2,10*(t*2-1)):0.5*(-Math.pow(2,-10*(t*2-1))+2),easeInCirc:t=>(t>=1)?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>((t/=0.5)<1)?-0.5*(Math.sqrt(1-t*t)-1):0.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>atEdge(t)?t:elasticIn(t,0.075,0.3),easeOutElastic:t=>atEdge(t)?t:elasticOut(t,0.075,0.3),easeInOutElastic(t){const s=0.1125;const p=0.45;return atEdge(t)?t:t<0.5?0.5*elasticIn(t*2,s,p):0.5+0.5*elasticOut(t*2-1,s,p);},easeInBack(t){const s=1.70158;return t*t*((s+1)*t-s);},easeOutBack(t){const s=1.70158;return(t-=1)*t*((s+1)*t+s)+1;},easeInOutBack(t){let s=1.70158;if((t/=0.5)<1){return 0.5*(t*t*(((s*=(1.525))+1)*t-s));}
+return 0.5*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2);},easeInBounce:t=>1-effects.easeOutBounce(1-t),easeOutBounce(t){const m=7.5625;const d=2.75;if(t<(1/d)){return m*t*t;}
+if(t<(2/d)){return m*(t-=(1.5/d))*t+0.75;}
+if(t<(2.5/d)){return m*(t-=(2.25/d))*t+0.9375;}
+return m*(t-=(2.625/d))*t+0.984375;},easeInOutBounce:t=>(t<0.5)?effects.easeInBounce(t*2)*0.5:effects.easeOutBounce(t*2-1)*0.5+0.5,};function _pointInLine(p1,p2,t,mode){return{x:p1.x+t*(p2.x-p1.x),y:p1.y+t*(p2.y-p1.y)};}
+function _steppedInterpolation(p1,p2,t,mode){return{x:p1.x+t*(p2.x-p1.x),y:mode==='middle'?t<0.5?p1.y:p2.y:mode==='after'?t<1?p1.y:p2.y:t>0?p2.y:p1.y};}
+function _bezierInterpolation(p1,p2,t,mode){const cp1={x:p1.cp2x,y:p1.cp2y};const cp2={x:p2.cp1x,y:p2.cp1y};const a=_pointInLine(p1,cp1,t);const b=_pointInLine(cp1,cp2,t);const c=_pointInLine(cp2,p2,t);const d=_pointInLine(a,b,t);const e=_pointInLine(b,c,t);return _pointInLine(d,e,t);}
+const intlCache=new Map();function getNumberFormat(locale,options){options=options||{};const cacheKey=locale+JSON.stringify(options);let formatter=intlCache.get(cacheKey);if(!formatter){formatter=new Intl.NumberFormat(locale,options);intlCache.set(cacheKey,formatter);}
+return formatter;}
+function formatNumber(num,locale,options){return getNumberFormat(locale,options).format(num);}
+const getRightToLeftAdapter=function(rectX,width){return{x(x){return rectX+rectX+width-x;},setWidth(w){width=w;},textAlign(align){if(align==='center'){return align;}
+return align==='right'?'left':'right';},xPlus(x,value){return x-value;},leftForLtr(x,itemWidth){return x-itemWidth;},};};const getLeftToRightAdapter=function(){return{x(x){return x;},setWidth(w){},textAlign(align){return align;},xPlus(x,value){return x+value;},leftForLtr(x,_itemWidth){return x;},};};function getRtlAdapter(rtl,rectX,width){return rtl?getRightToLeftAdapter(rectX,width):getLeftToRightAdapter();}
+function overrideTextDirection(ctx,direction){let style,original;if(direction==='ltr'||direction==='rtl'){style=ctx.canvas.style;original=[style.getPropertyValue('direction'),style.getPropertyPriority('direction'),];style.setProperty('direction',direction,'important');ctx.prevTextDirection=original;}}
+function restoreTextDirection(ctx,original){if(original!==undefined){delete ctx.prevTextDirection;ctx.canvas.style.setProperty('direction',original[0],original[1]);}}
+function propertyFn(property){if(property==='angle'){return{between:_angleBetween,compare:_angleDiff,normalize:_normalizeAngle,};}
+return{between:(n,s,e)=>n>=Math.min(s,e)&&n<=Math.max(e,s),compare:(a,b)=>a-b,normalize:x=>x};}
+function normalizeSegment({start,end,count,loop,style}){return{start:start%count,end:end%count,loop:loop&&(end-start+1)%count===0,style};}
+function getSegment(segment,points,bounds){const{property,start:startBound,end:endBound}=bounds;const{between,normalize}=propertyFn(property);const count=points.length;let{start,end,loop}=segment;let i,ilen;if(loop){start+=count;end+=count;for(i=0,ilen=count;ibetween(startBound,prevValue,value)&&compare(startBound,prevValue)!==0;const endIsBefore=()=>compare(endBound,value)===0||between(endBound,prevValue,value);const shouldStart=()=>inside||startIsBefore();const shouldStop=()=>!inside||endIsBefore();for(let i=start,prev=start;i<=end;++i){point=points[i%count];if(point.skip){continue;}
+value=normalize(point[property]);if(value===prevValue){continue;}
+inside=between(value,startBound,endBound);if(subStart===null&&shouldStart()){subStart=compare(value,startBound)===0?i:prev;}
+if(subStart!==null&&shouldStop()){result.push(normalizeSegment({start:subStart,end:i,loop,count,style}));subStart=null;}
+prev=i;prevValue=value;}
+if(subStart!==null){result.push(normalizeSegment({start:subStart,end,loop,count,style}));}
return result;}
-function getPixelForGridLine(scale,index,offsetGridLines){var length=scale.getTicks().length;var validIndex=Math.min(index,length-1);var lineValue=scale.getPixelForTick(validIndex);var start=scale._startPixel;var end=scale._endPixel;var epsilon=1e-6;var offset;if(offsetGridLines){if(length===1){offset=Math.max(lineValue-start,end-lineValue);}else if(index===0){offset=(scale.getPixelForTick(1)-lineValue)/2;}else{offset=(lineValue-scale.getPixelForTick(validIndex-1))/2;}
-lineValue+=validIndexend+epsilon){return;}}
-return lineValue;}
-function garbageCollect(caches,length){helpers$1.each(caches,function(cache){var gc=cache.gc;var gcLen=gc.length/2;var i;if(gcLen>length){for(i=0;istart&&points[end%count].skip){end--;}
+end%=count;return{start,end};}
+function solidSegments(points,start,max,loop){const count=points.length;const result=[];let last=start;let prev=points[start];let end;for(end=start+1;end<=max;++end){const cur=points[end%count];if(cur.skip||cur.stop){if(!prev.skip){loop=false;result.push({start:start%count,end:(end-1)%count,loop});start=last=cur.stop?end:null;}}else{last=end;if(prev.skip){start=end;}}
+prev=cur;}
+if(last!==null){result.push({start:start%count,end:last%count,loop});}
+return result;}
+function _computeSegments(line,segmentOptions){const points=line.points;const spanGaps=line.options.spanGaps;const count=points.length;if(!count){return[];}
+const loop=!!line._loop;const{start,end}=findStartAndEnd(points,count,loop,spanGaps);if(spanGaps===true){return splitByStyles(line,[{start,end,loop}],points,segmentOptions);}
+const max=endvalue===null||value==='';function initCanvas(canvas,aspectRatio){const style=canvas.style;const renderHeight=canvas.getAttribute('height');const renderWidth=canvas.getAttribute('width');canvas[EXPANDO_KEY]={initial:{height:renderHeight,width:renderWidth,style:{display:style.display,height:style.height,width:style.width}}};style.display=style.display||'block';style.boxSizing=style.boxSizing||'border-box';if(isNullOrEmpty(renderWidth)){const displayWidth=readUsedSize(canvas,'width');if(displayWidth!==undefined){canvas.width=displayWidth;}}
+if(isNullOrEmpty(renderHeight)){if(canvas.style.height===''){canvas.height=canvas.width/(aspectRatio||2);}else{const displayHeight=readUsedSize(canvas,'height');if(displayHeight!==undefined){canvas.height=displayHeight;}}}
+return canvas;}
+const eventListenerOptions=supportsEventListenerOptions?{passive:true}:false;function addListener(node,type,listener){node.addEventListener(type,listener,eventListenerOptions);}
+function removeListener(chart,type,listener){chart.canvas.removeEventListener(type,listener,eventListenerOptions);}
+function fromNativeEvent(event,chart){const type=EVENT_TYPES[event.type]||event.type;const{x,y}=getRelativePosition$1(event,chart);return{type,chart,native:event,x:x!==undefined?x:null,y:y!==undefined?y:null,};}
+function createAttachObserver(chart,type,listener){const canvas=chart.canvas;const container=canvas&&_getParentNode(canvas);const element=container||canvas;const observer=new MutationObserver(entries=>{const parent=_getParentNode(element);entries.forEach(entry=>{for(let i=0;i{entries.forEach(entry=>{for(let i=0;i{if(chart.currentDevicePixelRatio!==dpr){resize();}});}
+function listenDevicePixelRatioChanges(chart,resize){if(!drpListeningCharts.size){window.addEventListener('resize',onWindowResize);}
+drpListeningCharts.set(chart,resize);}
+function unlistenDevicePixelRatioChanges(chart){drpListeningCharts.delete(chart);if(!drpListeningCharts.size){window.removeEventListener('resize',onWindowResize);}}
+function createResizeObserver(chart,type,listener){const canvas=chart.canvas;const container=canvas&&_getParentNode(canvas);if(!container){return;}
+const resize=throttled((width,height)=>{const w=container.clientWidth;listener(width,height);if(w{const entry=entries[0];const width=entry.contentRect.width;const height=entry.contentRect.height;if(width===0&&height===0){return;}
+resize(width,height);});observer.observe(container);listenDevicePixelRatioChanges(chart,resize);return observer;}
+function releaseObserver(chart,type,observer){if(observer){observer.disconnect();}
+if(type==='resize'){unlistenDevicePixelRatioChanges(chart);}}
+function createProxyAndListen(chart,type,listener){const canvas=chart.canvas;const proxy=throttled((event)=>{if(chart.ctx!==null){listener(fromNativeEvent(event,chart));}},chart,(args)=>{const event=args[0];return[event,event.offsetX,event.offsetY];});addListener(canvas,type,proxy);return proxy;}
+class DomPlatform extends BasePlatform{acquireContext(canvas,aspectRatio){const context=canvas&&canvas.getContext&&canvas.getContext('2d');if(context&&context.canvas===canvas){initCanvas(canvas,aspectRatio);return context;}
+return null;}
+releaseContext(context){const canvas=context.canvas;if(!canvas[EXPANDO_KEY]){return false;}
+const initial=canvas[EXPANDO_KEY].initial;['height','width'].forEach((prop)=>{const value=initial[prop];if(isNullOrUndef(value)){canvas.removeAttribute(prop);}else{canvas.setAttribute(prop,value);}});const style=initial.style||{};Object.keys(style).forEach((key)=>{canvas.style[key]=style[key];});canvas.width=canvas.width;delete canvas[EXPANDO_KEY];return true;}
+addEventListener(chart,type,listener){this.removeEventListener(chart,type);const proxies=chart.$proxies||(chart.$proxies={});const handlers={attach:createAttachObserver,detach:createDetachObserver,resize:createResizeObserver};const handler=handlers[type]||createProxyAndListen;proxies[type]=handler(chart,type,listener);}
+removeEventListener(chart,type){const proxies=chart.$proxies||(chart.$proxies={});const proxy=proxies[type];if(!proxy){return;}
+const handlers={attach:releaseObserver,detach:releaseObserver,resize:releaseObserver};const handler=handlers[type]||removeListener;handler(chart,type,proxy);proxies[type]=undefined;}
+getDevicePixelRatio(){return window.devicePixelRatio;}
+getMaximumSize(canvas,width,height,aspectRatio){return getMaximumSize(canvas,width,height,aspectRatio);}
+isAttached(canvas){const container=_getParentNode(canvas);return!!(container&&container.isConnected);}}
+function _detectPlatform(canvas){if(!_isDomSupported()||(typeof OffscreenCanvas!=='undefined'&&canvas instanceof OffscreenCanvas)){return BasicPlatform;}
+return DomPlatform;}
+var platforms=Object.freeze({__proto__:null,_detectPlatform:_detectPlatform,BasePlatform:BasePlatform,BasicPlatform:BasicPlatform,DomPlatform:DomPlatform});const transparent='transparent';const interpolators={boolean(from,to,factor){return factor>0.5?to:from;},color(from,to,factor){const c0=color(from||transparent);const c1=c0.valid&&color(to||transparent);return c1&&c1.valid?c1.mix(c0,factor).hexString():to;},number(from,to,factor){return from+(to-from)*factor;}};class Animation{constructor(cfg,target,prop,to){const currentValue=target[prop];to=resolve([cfg.to,to,currentValue,cfg.from]);const from=resolve([cfg.from,currentValue,to]);this._active=true;this._fn=cfg.fn||interpolators[cfg.type||typeof from];this._easing=effects[cfg.easing]||effects.linear;this._start=Math.floor(Date.now()+(cfg.delay||0));this._duration=this._total=Math.floor(cfg.duration);this._loop=!!cfg.loop;this._target=target;this._prop=prop;this._from=from;this._to=to;this._promises=undefined;}
+active(){return this._active;}
+update(cfg,to,date){const me=this;if(me._active){me._notify(false);const currentValue=me._target[me._prop];const elapsed=date-me._start;const remain=me._duration-elapsed;me._start=date;me._duration=Math.floor(Math.max(remain,cfg.duration));me._total+=elapsed;me._loop=!!cfg.loop;me._to=resolve([cfg.to,to,currentValue,cfg.from]);me._from=resolve([cfg.from,currentValue,to]);}}
+cancel(){const me=this;if(me._active){me.tick(Date.now());me._active=false;me._notify(false);}}
+tick(date){const me=this;const elapsed=date-me._start;const duration=me._duration;const prop=me._prop;const from=me._from;const loop=me._loop;const to=me._to;let factor;me._active=from!==to&&(loop||(elapsed1?2-factor:factor;factor=me._easing(Math.min(1,Math.max(0,factor)));me._target[prop]=me._fn(from,to,factor);}
+wait(){const promises=this._promises||(this._promises=[]);return new Promise((res,rej)=>{promises.push({res,rej});});}
+_notify(resolved){const method=resolved?'res':'rej';const promises=this._promises||[];for(let i=0;iname!=='onProgress'&&name!=='onComplete'&&name!=='fn',});defaults.set('animations',{colors:{type:'color',properties:colors},numbers:{type:'number',properties:numbers},});defaults.describe('animations',{_fallback:'animation',});defaults.set('transitions',{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:'transparent'},visible:{type:'boolean',duration:0},}},hide:{animations:{colors:{to:'transparent'},visible:{type:'boolean',easing:'linear',fn:v=>v|0},}}});class Animations{constructor(chart,config){this._chart=chart;this._properties=new Map();this.configure(config);}
+configure(config){if(!isObject(config)){return;}
+const animatedProps=this._properties;Object.getOwnPropertyNames(config).forEach(key=>{const cfg=config[key];if(!isObject(cfg)){return;}
+const resolved={};for(const option of animationOptions){resolved[option]=cfg[option];}
+(isArray(cfg.properties)&&cfg.properties||[key]).forEach((prop)=>{if(prop===key||!animatedProps.has(prop)){animatedProps.set(prop,resolved);}});});}
+_animateOptions(target,values){const newOptions=values.options;const options=resolveTargetOptions(target,newOptions);if(!options){return[];}
+const animations=this._createAnimations(options,newOptions);if(newOptions.$shared){awaitAll(target.options.$animations,newOptions).then(()=>{target.options=newOptions;},()=>{});}
+return animations;}
+_createAnimations(target,values){const animatedProps=this._properties;const animations=[];const running=target.$animations||(target.$animations={});const props=Object.keys(values);const date=Date.now();let i;for(i=props.length-1;i>=0;--i){const prop=props[i];if(prop.charAt(0)==='$'){continue;}
+if(prop==='options'){animations.push(...this._animateOptions(target,values));continue;}
+const value=values[prop];let animation=running[prop];const cfg=animatedProps.get(prop);if(animation){if(cfg&&animation.active()){animation.update(cfg,value,date);continue;}else{animation.cancel();}}
+if(!cfg||!cfg.duration){target[prop]=value;continue;}
+running[prop]=animation=new Animation(cfg,target,prop,value);animations.push(animation);}
+return animations;}
+update(target,values){if(this._properties.size===0){Object.assign(target,values);return;}
+const animations=this._createAnimations(target,values);if(animations.length){animator.add(this._chart,animations);return true;}}}
+function awaitAll(animations,properties){const running=[];const keys=Object.keys(properties);for(let i=0;i0)||(!positive&&value<0)){return meta.index;}}
+return null;}
+function updateStacks(controller,parsed){const{chart,_cachedMeta:meta}=controller;const stacks=chart._stacks||(chart._stacks={});const{iScale,vScale,index:datasetIndex}=meta;const iAxis=iScale.axis;const vAxis=vScale.axis;const key=getStackKey(iScale,vScale,meta);const ilen=parsed.length;let stack;for(let i=0;iscales[key].axis===axis).shift();}
+function createDatasetContext(parent,index){return Object.assign(Object.create(parent),{active:false,dataset:undefined,datasetIndex:index,index,mode:'default',type:'dataset'});}
+function createDataContext(parent,index,element){return Object.assign(Object.create(parent),{active:false,dataIndex:index,parsed:undefined,raw:undefined,element,index,mode:'default',type:'data'});}
+function clearStacks(meta,items){const datasetIndex=meta.controller.index;const axis=meta.vScale&&meta.vScale.axis;if(!axis){return;}
+items=items||meta._parsed;for(const parsed of items){const stacks=parsed._stacks;if(!stacks||stacks[axis]===undefined||stacks[axis][datasetIndex]===undefined){return;}
+delete stacks[axis][datasetIndex];}}
+const isDirectUpdateMode=(mode)=>mode==='reset'||mode==='none';const cloneIfNotShared=(cached,shared)=>shared?cached:Object.assign({},cached);class DatasetController{constructor(chart,datasetIndex){this.chart=chart;this._ctx=chart.ctx;this.index=datasetIndex;this._cachedDataOpts={};this._cachedMeta=this.getMeta();this._type=this._cachedMeta.type;this.options=undefined;this._parsing=false;this._data=undefined;this._objectData=undefined;this._sharedOptions=undefined;this._drawStart=undefined;this._drawCount=undefined;this.enableOptionSharing=false;this.$context=undefined;this._syncList=[];this.initialize();}
+initialize(){const me=this;const meta=me._cachedMeta;me.configure();me.linkScales();meta._stacked=isStacked(meta.vScale,meta);me.addElements();}
+updateIndex(datasetIndex){if(this.index!==datasetIndex){clearStacks(this._cachedMeta);}
+this.index=datasetIndex;}
+linkScales(){const me=this;const chart=me.chart;const meta=me._cachedMeta;const dataset=me.getDataset();const chooseId=(axis,x,y,r)=>axis==='x'?x:axis==='r'?r:y;const xid=meta.xAxisID=valueOrDefault(dataset.xAxisID,getFirstScaleId(chart,'x'));const yid=meta.yAxisID=valueOrDefault(dataset.yAxisID,getFirstScaleId(chart,'y'));const rid=meta.rAxisID=valueOrDefault(dataset.rAxisID,getFirstScaleId(chart,'r'));const indexAxis=meta.indexAxis;const iid=meta.iAxisID=chooseId(indexAxis,xid,yid,rid);const vid=meta.vAxisID=chooseId(indexAxis,yid,xid,rid);meta.xScale=me.getScaleForId(xid);meta.yScale=me.getScaleForId(yid);meta.rScale=me.getScaleForId(rid);meta.iScale=me.getScaleForId(iid);meta.vScale=me.getScaleForId(vid);}
+getDataset(){return this.chart.data.datasets[this.index];}
+getMeta(){return this.chart.getDatasetMeta(this.index);}
+getScaleForId(scaleID){return this.chart.scales[scaleID];}
+_getOtherScale(scale){const meta=this._cachedMeta;return scale===meta.iScale?meta.vScale:meta.iScale;}
+reset(){this._update('reset');}
+_destroy(){const meta=this._cachedMeta;if(this._data){unlistenArrayEvents(this._data,this);}
+if(meta._stacked){clearStacks(meta);}}
+_dataCheck(){const me=this;const dataset=me.getDataset();const data=dataset.data||(dataset.data=[]);const _data=me._data;if(isObject(data)){me._data=convertObjectDataToArray(data);}else if(_data!==data){if(_data){unlistenArrayEvents(_data,me);const meta=me._cachedMeta;clearStacks(meta);meta._parsed=[];}
+if(data&&Object.isExtensible(data)){listenArrayEvents(data,me);}
+me._syncList=[];me._data=data;}}
+addElements(){const me=this;const meta=me._cachedMeta;me._dataCheck();if(me.datasetElementType){meta.dataset=new me.datasetElementType();}}
+buildOrUpdateElements(resetNewElements){const me=this;const meta=me._cachedMeta;const dataset=me.getDataset();let stackChanged=false;me._dataCheck();const oldStacked=meta._stacked;meta._stacked=isStacked(meta.vScale,meta);if(meta.stack!==dataset.stack){stackChanged=true;clearStacks(meta);meta.stack=dataset.stack;}
+me._resyncElements(resetNewElements);if(stackChanged||oldStacked!==meta._stacked){updateStacks(me,meta._parsed);}}
+configure(){const me=this;const config=me.chart.config;const scopeKeys=config.datasetScopeKeys(me._type);const scopes=config.getOptionScopes(me.getDataset(),scopeKeys,true);me.options=config.createResolver(scopes,me.getContext());me._parsing=me.options.parsing;}
+parse(start,count){const me=this;const{_cachedMeta:meta,_data:data}=me;const{iScale,_stacked}=meta;const iAxis=iScale.axis;let sorted=start===0&&count===data.length?true:meta._sorted;let prev=start>0&&meta._parsed[start-1];let i,cur,parsed;if(me._parsing===false){meta._parsed=data;meta._sorted=true;parsed=data;}else{if(isArray(data[start])){parsed=me.parseArrayData(meta,data,start,count);}else if(isObject(data[start])){parsed=me.parseObjectData(meta,data,start,count);}else{parsed=me.parsePrimitiveData(meta,data,start,count);}
+const isNotInOrderComparedToPrev=()=>cur[iAxis]===null||(prev&&cur[iAxis]otherValue||otherMax=0;--i){if(_skip()){continue;}
+me.updateRangeFromParsed(range,scale,parsed,stack);break;}}
+return range;}
+getAllParsedValues(scale){const parsed=this._cachedMeta._parsed;const values=[];let i,ilen,value;for(i=0,ilen=parsed.length;i=0&&indexme.getContext(index,active);const values=config.resolveNamedOptions(scopes,names,context,prefixes);if(values.$shared){values.$shared=sharing;cache[cacheKey]=Object.freeze(cloneIfNotShared(values,sharing));}
+return values;}
+_resolveAnimations(index,transition,active){const me=this;const chart=me.chart;const cache=me._cachedDataOpts;const cacheKey=`animation-${transition}`;const cached=cache[cacheKey];if(cached){return cached;}
+let options;if(chart.options.animation!==false){const config=me.chart.config;const scopeKeys=config.datasetAnimationScopeKeys(me._type,transition);const scopes=config.getOptionScopes(me.getDataset(),scopeKeys);options=config.createResolver(scopes,me.getContext(index,active,transition));}
+const animations=new Animations(chart,options&&options.animations);if(options&&options._cacheable){cache[cacheKey]=Object.freeze(animations);}
+return animations;}
+getSharedOptions(options){if(!options.$shared){return;}
+return this._sharedOptions||(this._sharedOptions=Object.assign({},options));}
+includeOptions(mode,sharedOptions){return!sharedOptions||isDirectUpdateMode(mode)||this.chart._animationsDisabled;}
+updateElement(element,index,properties,mode){if(isDirectUpdateMode(mode)){Object.assign(element,properties);}else{this._resolveAnimations(index,mode).update(element,properties);}}
+updateSharedOptions(sharedOptions,mode,newOptions){if(sharedOptions&&!isDirectUpdateMode(mode)){this._resolveAnimations(undefined,mode).update(sharedOptions,newOptions);}}
+_setStyle(element,index,mode,active){element.active=active;const options=this.getStyle(index,active);this._resolveAnimations(index,mode,active).update(element,{options:(!active&&this.getSharedOptions(options))||options});}
+removeHoverStyle(element,datasetIndex,index){this._setStyle(element,index,'active',false);}
+setHoverStyle(element,datasetIndex,index){this._setStyle(element,index,'active',true);}
+_removeDatasetHoverStyle(){const element=this._cachedMeta.dataset;if(element){this._setStyle(element,undefined,'active',false);}}
+_setDatasetHoverStyle(){const element=this._cachedMeta.dataset;if(element){this._setStyle(element,undefined,'active',true);}}
+_resyncElements(resetNewElements){const me=this;const data=me._data;const elements=me._cachedMeta.data;for(const[method,arg1,arg2]of me._syncList){me[method](arg1,arg2);}
+me._syncList=[];const numMeta=elements.length;const numData=data.length;const count=Math.min(numData,numMeta);if(count){me.parse(0,count);}
+if(numData>numMeta){me._insertElements(numMeta,numData-numMeta,resetNewElements);}else if(numData{arr.length+=count;for(i=arr.length-1;i>=end;i--){arr[i]=arr[i-count];}};move(data);for(i=start;i{ret[prop]=anims[prop]&&anims[prop].active()?anims[prop]._to:me[prop];});return ret;}}
+Element.defaults={};Element.defaultRoutes=undefined;const formatters={values(value){return isArray(value)?value:''+value;},numeric(tickValue,index,ticks){if(tickValue===0){return'0';}
+const locale=this.chart.options.locale;let notation;let delta=tickValue;if(ticks.length>1){const maxTick=Math.max(Math.abs(ticks[0].value),Math.abs(ticks[ticks.length-1].value));if(maxTick<1e-4||maxTick>1e+15){notation='scientific';}
+delta=calculateDelta(tickValue,ticks);}
+const logDelta=log10(Math.abs(delta));const numDecimal=Math.max(Math.min(-1*Math.floor(logDelta),20),0);const options={notation,minimumFractionDigits:numDecimal,maximumFractionDigits:numDecimal};Object.assign(options,this.options.ticks.format);return formatNumber(tickValue,locale,options);},logarithmic(tickValue,index,ticks){if(tickValue===0){return'0';}
+const remain=tickValue/(Math.pow(10,Math.floor(log10(tickValue))));if(remain===1||remain===2||remain===5){return formatters.numeric.call(this,tickValue,index,ticks);}
+return'';}};function calculateDelta(tickValue,ticks){let delta=ticks.length>3?ticks[2].value-ticks[1].value:ticks[1].value-ticks[0].value;if(Math.abs(delta)>=1&&tickValue!==Math.floor(tickValue)){delta=tickValue-Math.floor(tickValue);}
+return delta;}
+var Ticks={formatters};defaults.set('scale',{display:true,offset:false,reverse:false,beginAtZero:false,bounds:'ticks',grace:0,grid:{display:true,lineWidth:1,drawBorder:true,drawOnChartArea:true,drawTicks:true,tickLength:8,tickWidth:(_ctx,options)=>options.lineWidth,tickColor:(_ctx,options)=>options.color,offset:false,borderDash:[],borderDashOffset:0.0,borderWidth:1},title:{display:false,text:'',padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:false,textStrokeWidth:0,textStrokeColor:'',padding:3,display:true,autoSkip:true,autoSkipPadding:3,labelOffset:0,callback:Ticks.formatters.values,minor:{},major:{},align:'center',crossAlign:'near',showLabelBackdrop:false,backdropColor:'rgba(255, 255, 255, 0.75)',backdropPadding:2,}});defaults.route('scale.ticks','color','','color');defaults.route('scale.grid','color','','borderColor');defaults.route('scale.grid','borderColor','','borderColor');defaults.route('scale.title','color','','color');defaults.describe('scale',{_fallback:false,_scriptable:(name)=>!name.startsWith('before')&&!name.startsWith('after')&&name!=='callback'&&name!=='parser',_indexable:(name)=>name!=='borderDash'&&name!=='tickBorderDash',});defaults.describe('scales',{_fallback:'scale',});defaults.describe('scale.ticks',{_scriptable:(name)=>name!=='backdropPadding'&&name!=='callback',_indexable:(name)=>name!=='backdropPadding',});function autoSkip(scale,ticks){const tickOpts=scale.options.ticks;const ticksLimit=tickOpts.maxTicksLimit||determineMaxTicks(scale);const majorIndices=tickOpts.major.enabled?getMajorIndices(ticks):[];const numMajorIndices=majorIndices.length;const first=majorIndices[0];const last=majorIndices[numMajorIndices-1];const newTicks=[];if(numMajorIndices>ticksLimit){skipMajors(ticks,newTicks,majorIndices,numMajorIndices/ticksLimit);return newTicks;}
+const spacing=calculateSpacing(majorIndices,ticks,ticksLimit);if(numMajorIndices>0){let i,ilen;const avgMajorSpacing=numMajorIndices>1?Math.round((last-first)/(numMajorIndices-1)):null;skip(ticks,newTicks,spacing,isNullOrUndef(avgMajorSpacing)?0:first-avgMajorSpacing,first);for(i=0,ilen=numMajorIndices-1;ispacing){return factor;}}
+return Math.max(spacing,1);}
+function getMajorIndices(ticks){const result=[];let i,ilen;for(i=0,ilen=ticks.length;ispacing){return factor;}}
-return Math.max(spacing,1);}
-function getMajorIndices(ticks){var result=[];var i,ilen;for(i=0,ilen=ticks.length;ialign==='left'?'right':align==='right'?'left':align;const offsetFromEdge=(scale,edge,offset)=>edge==='top'||edge==='left'?scale[edge]+offset:scale[edge]-offset;function sample(arr,numItems){const result=[];const increment=arr.length/numItems;const len=arr.length;let i=0;for(;i=maxRotation||numTicks<=1||!me.isHorizontal()){me.labelRotation=minRotation;return;}
-labelSizes=me._getLabelSizes();maxLabelWidth=labelSizes.widest.width;maxLabelHeight=labelSizes.highest.height-labelSizes.highest.offset;maxWidth=Math.min(me.maxWidth,me.chart.width-maxLabelWidth);tickWidth=options.offset?me.maxWidth/numTicks:maxWidth/(numTicks-1);if(maxLabelWidth+6>tickWidth){tickWidth=maxWidth/(numTicks-(options.offset?0.5:1));maxHeight=me.maxHeight-getTickMarkLength(options.gridLines)
--tickOpts.padding-getScaleLabelHeight(options.scaleLabel);maxLabelDiagonal=Math.sqrt(maxLabelWidth*maxLabelWidth+maxLabelHeight*maxLabelHeight);labelRotation=helpers$1.toDegrees(Math.min(Math.asin(Math.min((labelSizes.highest.height+6)/tickWidth,1)),Math.asin(Math.min(maxHeight/maxLabelDiagonal,1))-Math.asin(maxLabelHeight/maxLabelDiagonal)));labelRotation=Math.max(minRotation,Math.min(maxRotation,labelRotation));}
-me.labelRotation=labelRotation;},afterCalculateTickRotation:function(){helpers$1.callback(this.options.afterCalculateTickRotation,[this]);},beforeFit:function(){helpers$1.callback(this.options.beforeFit,[this]);},fit:function(){var me=this;var minSize=me.minSize={width:0,height:0};var chart=me.chart;var opts=me.options;var tickOpts=opts.ticks;var scaleLabelOpts=opts.scaleLabel;var gridLineOpts=opts.gridLines;var display=me._isVisible();var isBottom=opts.position==='bottom';var isHorizontal=me.isHorizontal();if(isHorizontal){minSize.width=me.maxWidth;}else if(display){minSize.width=getTickMarkLength(gridLineOpts)+getScaleLabelHeight(scaleLabelOpts);}
-if(!isHorizontal){minSize.height=me.maxHeight;}else if(display){minSize.height=getTickMarkLength(gridLineOpts)+getScaleLabelHeight(scaleLabelOpts);}
-if(tickOpts.display&&display){var tickFonts=parseTickFontOptions(tickOpts);var labelSizes=me._getLabelSizes();var firstLabelSize=labelSizes.first;var lastLabelSize=labelSizes.last;var widestLabelSize=labelSizes.widest;var highestLabelSize=labelSizes.highest;var lineSpace=tickFonts.minor.lineHeight*0.4;var tickPadding=tickOpts.padding;if(isHorizontal){var isRotated=me.labelRotation!==0;var angleRadians=helpers$1.toRadians(me.labelRotation);var cosRotation=Math.cos(angleRadians);var sinRotation=Math.sin(angleRadians);var labelHeight=sinRotation*widestLabelSize.width
-+cosRotation*(highestLabelSize.height-(isRotated?highestLabelSize.offset:0))
-+(isRotated?0:lineSpace);minSize.height=Math.min(me.maxHeight,minSize.height+labelHeight+tickPadding);var offsetLeft=me.getPixelForTick(0)-me.left;var offsetRight=me.right-me.getPixelForTick(me.getTicks().length-1);var paddingLeft,paddingRight;if(isRotated){paddingLeft=isBottom?cosRotation*firstLabelSize.width+sinRotation*firstLabelSize.offset:sinRotation*(firstLabelSize.height-firstLabelSize.offset);paddingRight=isBottom?sinRotation*(lastLabelSize.height-lastLabelSize.offset):cosRotation*lastLabelSize.width+sinRotation*lastLabelSize.offset;}else{paddingLeft=firstLabelSize.width/2;paddingRight=lastLabelSize.width/2;}
-me.paddingLeft=Math.max((paddingLeft-offsetLeft)*me.width/(me.width-offsetLeft),0)+3;me.paddingRight=Math.max((paddingRight-offsetRight)*me.width/(me.width-offsetRight),0)+3;}else{var labelWidth=tickOpts.mirror?0:widestLabelSize.width+tickPadding+lineSpace;minSize.width=Math.min(me.maxWidth,minSize.width+labelWidth);me.paddingTop=firstLabelSize.height/2;me.paddingBottom=lastLabelSize.height/2;}}
-me.handleMargins();if(isHorizontal){me.width=me._length=chart.width-me.margins.left-me.margins.right;me.height=minSize.height;}else{me.width=minSize.width;me.height=me._length=chart.height-me.margins.top-me.margins.bottom;}},handleMargins:function(){var me=this;if(me.margins){me.margins.left=Math.max(me.paddingLeft,me.margins.left);me.margins.top=Math.max(me.paddingTop,me.margins.top);me.margins.right=Math.max(me.paddingRight,me.margins.right);me.margins.bottom=Math.max(me.paddingBottom,me.margins.bottom);}},afterFit:function(){helpers$1.callback(this.options.afterFit,[this]);},isHorizontal:function(){var pos=this.options.position;return pos==='top'||pos==='bottom';},isFullWidth:function(){return this.options.fullWidth;},getRightValue:function(rawValue){if(isNullOrUndef(rawValue)){return NaN;}
-if((typeof rawValue==='number'||rawValue instanceof Number)&&!isFinite(rawValue)){return NaN;}
-if(rawValue){if(this.isHorizontal()){if(rawValue.x!==undefined){return this.getRightValue(rawValue.x);}}else if(rawValue.y!==undefined){return this.getRightValue(rawValue.y);}}
-return rawValue;},_convertTicksToLabels:function(ticks){var me=this;var labels,i,ilen;me.ticks=ticks.map(function(tick){return tick.value;});me.beforeTickToLabelConversion();labels=me.convertTicksToLabels(ticks)||me.ticks;me.afterTickToLabelConversion();for(i=0,ilen=ticks.length;inumTicks-1?null:me.getPixelForDecimal(index*tickWidth+(offset?tickWidth/2:0));},getPixelForDecimal:function(decimal){var me=this;if(me._reversePixels){decimal=1-decimal;}
-return me._startPixel+decimal*me._length;},getDecimalForPixel:function(pixel){var decimal=(pixel-this._startPixel)/this._length;return this._reversePixels?1-decimal:decimal;},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue());},getBaseValue:function(){var me=this;var min=me.min;var max=me.max;return me.beginAtZero?0:min<0&&max<0?max:min>0&&max>0?min:0;},_autoSkip:function(ticks){var me=this;var tickOpts=me.options.ticks;var axisLength=me._length;var ticksLimit=tickOpts.maxTicksLimit||axisLength/me._tickSize()+1;var majorIndices=tickOpts.major.enabled?getMajorIndices(ticks):[];var numMajorIndices=majorIndices.length;var first=majorIndices[0];var last=majorIndices[numMajorIndices-1];var i,ilen,spacing,avgMajorSpacing;if(numMajorIndices>ticksLimit){skipMajors(ticks,majorIndices,numMajorIndices/ticksLimit);return nonSkipped(ticks);}
-spacing=calculateSpacing(majorIndices,ticks,axisLength,ticksLimit);if(numMajorIndices>0){for(i=0,ilen=numMajorIndices-1;i1?(last-first)/(numMajorIndices-1):null;skip(ticks,spacing,helpers$1.isNullOrUndef(avgMajorSpacing)?0:first-avgMajorSpacing,first);skip(ticks,spacing,last,helpers$1.isNullOrUndef(avgMajorSpacing)?ticks.length:last+avgMajorSpacing);return nonSkipped(ticks);}
-skip(ticks,spacing);return nonSkipped(ticks);},_tickSize:function(){var me=this;var optionTicks=me.options.ticks;var rot=helpers$1.toRadians(me.labelRotation);var cos=Math.abs(Math.cos(rot));var sin=Math.abs(Math.sin(rot));var labelSizes=me._getLabelSizes();var padding=optionTicks.autoSkipPadding||0;var w=labelSizes?labelSizes.widest.width+padding:0;var h=labelSizes?labelSizes.highest.height+padding:0;return me.isHorizontal()?h*cos>w*sin?w/cos:h/sin:h*sin=0){minIndex=findIndex;}}
-if(max!==undefined){findIndex=labels.indexOf(max);if(findIndex>=0){maxIndex=findIndex;}}
-me.minIndex=minIndex;me.maxIndex=maxIndex;me.min=labels[minIndex];me.max=labels[maxIndex];},buildTicks:function(){var me=this;var labels=me._getLabels();var minIndex=me.minIndex;var maxIndex=me.maxIndex;me.ticks=(minIndex===0&&maxIndex===labels.length-1)?labels:labels.slice(minIndex,maxIndex+1);},getLabelForIndex:function(index,datasetIndex){var me=this;var chart=me.chart;if(chart.getDatasetMeta(datasetIndex).controller._getValueScaleId()===me.id){return me.getRightValue(chart.data.datasets[datasetIndex].data[index]);}
-return me._getLabels()[index];},_configure:function(){var me=this;var offset=me.options.offset;var ticks=me.ticks;core_scale.prototype._configure.call(me);if(!me.isHorizontal()){me._reversePixels=!me._reversePixels;}
-if(!ticks){return;}
-me._startValue=me.minIndex-(offset?0.5:0);me._valueRange=Math.max(ticks.length-(offset?0:1),1);},getPixelForValue:function(value,index,datasetIndex){var me=this;var valueCategory,labels,idx;if(!isNullOrUndef$1(index)&&!isNullOrUndef$1(datasetIndex)){value=me.chart.data.datasets[datasetIndex].data[index];}
-if(!isNullOrUndef$1(value)){valueCategory=me.isHorizontal()?value.x:value.y;}
-if(valueCategory!==undefined||(value!==undefined&&isNaN(index))){labels=me._getLabels();value=helpers$1.valueOrDefault(valueCategory,value);idx=labels.indexOf(value);index=idx!==-1?idx:index;if(isNaN(index)){index=value;}}
-return me.getPixelForDecimal((index-me._startValue)/me._valueRange);},getPixelForTick:function(index){var ticks=this.ticks;return index<0||index>ticks.length-1?null:this.getPixelForValue(ticks[index],index+this.minIndex);},getValueForPixel:function(pixel){var me=this;var value=Math.round(me._startValue+me.getDecimalForPixel(pixel)*me._valueRange);return Math.min(Math.max(value,0),me.ticks.length-1);},getBasePixel:function(){return this.bottom;}});var _defaults=defaultConfig;scale_category._defaults=_defaults;var noop=helpers$1.noop;var isNullOrUndef$2=helpers$1.isNullOrUndef;function generateTicks(generationOptions,dataRange){var ticks=[];var MIN_SPACING=1e-14;var stepSize=generationOptions.stepSize;var unit=stepSize||1;var maxNumSpaces=generationOptions.maxTicks-1;var min=generationOptions.min;var max=generationOptions.max;var precision=generationOptions.precision;var rmin=dataRange.min;var rmax=dataRange.max;var spacing=helpers$1.niceNum((rmax-rmin)/maxNumSpaces/unit)*unit;var factor,niceMin,niceMax,numSpaces;if(spacingmaxNumSpaces){spacing=helpers$1.niceNum(numSpaces*spacing/maxNumSpaces/unit)*unit;}
-if(stepSize||isNullOrUndef$2(precision)){factor=Math.pow(10,helpers$1._decimalPlaces(spacing));}else{factor=Math.pow(10,precision);spacing=Math.ceil(spacing*factor)/factor;}
-niceMin=Math.floor(rmin/spacing)*spacing;niceMax=Math.ceil(rmax/spacing)*spacing;if(stepSize){if(!isNullOrUndef$2(min)&&helpers$1.almostWhole(min/spacing,spacing/1000)){niceMin=min;}
-if(!isNullOrUndef$2(max)&&helpers$1.almostWhole(max/spacing,spacing/1000)){niceMax=max;}}
-numSpaces=(niceMax-niceMin)/spacing;if(helpers$1.almostEquals(numSpaces,Math.round(numSpaces),spacing/1000)){numSpaces=Math.round(numSpaces);}else{numSpaces=Math.ceil(numSpaces);}
-niceMin=Math.round(niceMin*factor)/factor;niceMax=Math.round(niceMax*factor)/factor;ticks.push(isNullOrUndef$2(min)?niceMin:min);for(var j=1;j0&&maxSign>0){me.min=0;}}
-var setMin=tickOpts.min!==undefined||tickOpts.suggestedMin!==undefined;var setMax=tickOpts.max!==undefined||tickOpts.suggestedMax!==undefined;if(tickOpts.min!==undefined){me.min=tickOpts.min;}else if(tickOpts.suggestedMin!==undefined){if(me.min===null){me.min=tickOpts.suggestedMin;}else{me.min=Math.min(me.min,tickOpts.suggestedMin);}}
-if(tickOpts.max!==undefined){me.max=tickOpts.max;}else if(tickOpts.suggestedMax!==undefined){if(me.max===null){me.max=tickOpts.suggestedMax;}else{me.max=Math.max(me.max,tickOpts.suggestedMax);}}
-if(setMin!==setMax){if(me.min>=me.max){if(setMin){me.max=me.min+1;}else{me.min=me.max-1;}}}
-if(me.min===me.max){me.max++;if(!tickOpts.beginAtZero){me.min--;}}},getTickLimit:function(){var me=this;var tickOpts=me.options.ticks;var stepSize=tickOpts.stepSize;var maxTicksLimit=tickOpts.maxTicksLimit;var maxTicks;if(stepSize){maxTicks=Math.ceil(me.max/stepSize)-Math.floor(me.min/stepSize)+1;}else{maxTicks=me._computeTickLimit();maxTicksLimit=maxTicksLimit||11;}
-if(maxTicksLimit){maxTicks=Math.min(maxTicksLimit,maxTicks);}
-return maxTicks;},_computeTickLimit:function(){return Number.POSITIVE_INFINITY;},handleDirectionalChanges:noop,buildTicks:function(){var me=this;var opts=me.options;var tickOpts=opts.ticks;var maxTicks=me.getTickLimit();maxTicks=Math.max(2,maxTicks);var numericGeneratorOptions={maxTicks:maxTicks,min:tickOpts.min,max:tickOpts.max,precision:tickOpts.precision,stepSize:helpers$1.valueOrDefault(tickOpts.fixedStepSize,tickOpts.stepSize)};var ticks=me.ticks=generateTicks(numericGeneratorOptions,me);me.handleDirectionalChanges();me.max=helpers$1.max(ticks);me.min=helpers$1.min(ticks);if(tickOpts.reverse){ticks.reverse();me.start=me.max;me.end=me.min;}else{me.start=me.min;me.end=me.max;}},convertTicksToLabels:function(){var me=this;me.ticksAsNumbers=me.ticks.slice();me.zeroLineIndex=me.ticks.indexOf(0);core_scale.prototype.convertTicksToLabels.call(me);},_configure:function(){var me=this;var ticks=me.getTicks();var start=me.min;var end=me.max;var offset;core_scale.prototype._configure.call(me);if(me.options.offset&&ticks.length){offset=(end-start)/Math.max(ticks.length-1,1)/2;start-=offset;end+=offset;}
-me._startValue=start;me._endValue=end;me._valueRange=end-start;}});var defaultConfig$1={position:'left',ticks:{callback:core_ticks.formatters.linear}};var DEFAULT_MIN=0;var DEFAULT_MAX=1;function getOrCreateStack(stacks,stacked,meta){var key=[meta.type,stacked===undefined&&meta.stack===undefined?meta.index:'',meta.stack].join('.');if(stacks[key]===undefined){stacks[key]={pos:[],neg:[]};}
-return stacks[key];}
-function stackData(scale,stacks,meta,data){var opts=scale.options;var stacked=opts.stacked;var stack=getOrCreateStack(stacks,stacked,meta);var pos=stack.pos;var neg=stack.neg;var ilen=data.length;var i,value;for(i=0;iticks.length-1){return null;}
-return this.getPixelForValue(ticks[index]);}});var _defaults$1=defaultConfig$1;scale_linear._defaults=_defaults$1;var valueOrDefault$b=helpers$1.valueOrDefault;var log10=helpers$1.math.log10;function generateTicks$1(generationOptions,dataRange){var ticks=[];var tickVal=valueOrDefault$b(generationOptions.min,Math.pow(10,Math.floor(log10(dataRange.min))));var endExp=Math.floor(log10(dataRange.max));var endSignificand=Math.ceil(dataRange.max/Math.pow(10,endExp));var exp,significand;if(tickVal===0){exp=Math.floor(log10(dataRange.minNotZero));significand=Math.floor(dataRange.minNotZero/Math.pow(10,exp));ticks.push(tickVal);tickVal=significand*Math.pow(10,exp);}else{exp=Math.floor(log10(tickVal));significand=Math.floor(tickVal/Math.pow(10,exp));}
-var precision=exp<0?Math.pow(10,Math.abs(exp)):1;do{ticks.push(tickVal);++significand;if(significand===10){significand=1;++exp;precision=exp>=0?1:precision;}
-tickVal=Math.round(significand*Math.pow(10,exp)*precision)/precision;}while(exp=0?value:defaultValue;}
-var scale_logarithmic=core_scale.extend({determineDataLimits:function(){var me=this;var opts=me.options;var chart=me.chart;var datasets=chart.data.datasets;var isHorizontal=me.isHorizontal();function IDMatches(meta){return isHorizontal?meta.xAxisID===me.id:meta.yAxisID===me.id;}
-var datasetIndex,meta,value,data,i,ilen;me.min=Number.POSITIVE_INFINITY;me.max=Number.NEGATIVE_INFINITY;me.minNotZero=Number.POSITIVE_INFINITY;var hasStacks=opts.stacked;if(hasStacks===undefined){for(datasetIndex=0;datasetIndex0){var minVal=helpers$1.min(valuesForType);var maxVal=helpers$1.max(valuesForType);me.min=Math.min(me.min,minVal);me.max=Math.max(me.max,maxVal);}});}else{for(datasetIndex=0;datasetIndex0){me.minNotZero=me.min;}else if(me.max<1){me.minNotZero=Math.pow(10,Math.floor(log10(me.max)));}else{me.minNotZero=DEFAULT_MIN;}}},buildTicks:function(){var me=this;var tickOpts=me.options.ticks;var reverse=!me.isHorizontal();var generationOptions={min:nonNegativeOrDefault(tickOpts.min),max:nonNegativeOrDefault(tickOpts.max)};var ticks=me.ticks=generateTicks$1(generationOptions,me);me.max=helpers$1.max(ticks);me.min=helpers$1.min(ticks);if(tickOpts.reverse){reverse=!reverse;me.start=me.max;me.end=me.min;}else{me.start=me.min;me.end=me.max;}
-if(reverse){ticks.reverse();}},convertTicksToLabels:function(){this.tickValues=this.ticks.slice();core_scale.prototype.convertTicksToLabels.call(this);},getLabelForIndex:function(index,datasetIndex){return this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);},getPixelForTick:function(index){var ticks=this.tickValues;if(index<0||index>ticks.length-1){return null;}
-return this.getPixelForValue(ticks[index]);},_getFirstTickValue:function(value){var exp=Math.floor(log10(value));var significand=Math.floor(value/Math.pow(10,exp));return significand*Math.pow(10,exp);},_configure:function(){var me=this;var start=me.min;var offset=0;core_scale.prototype._configure.call(me);if(start===0){start=me._getFirstTickValue(me.minNotZero);offset=valueOrDefault$b(me.options.ticks.fontSize,core_defaults.global.defaultFontSize)/me._length;}
-me._startValue=log10(start);me._valueOffset=offset;me._valueRange=(log10(me.max)-log10(start))/(1-offset);},getPixelForValue:function(value){var me=this;var decimal=0;value=+me.getRightValue(value);if(value>me.min&&value>0){decimal=(log10(value)-me._startValue)/me._valueRange+me._valueOffset;}
-return me.getPixelForDecimal(decimal);},getValueForPixel:function(pixel){var me=this;var decimal=me.getDecimalForPixel(pixel);return decimal===0&&me.min===0?0:Math.pow(10,me._startValue+(decimal-me._valueOffset)*me._valueRange);}});var _defaults$2=defaultConfig$2;scale_logarithmic._defaults=_defaults$2;var valueOrDefault$c=helpers$1.valueOrDefault;var valueAtIndexOrDefault$1=helpers$1.valueAtIndexOrDefault;var resolve$4=helpers$1.options.resolve;var defaultConfig$3={display:true,animate:true,position:'chartArea',angleLines:{display:true,color:'rgba(0,0,0,0.1)',lineWidth:1,borderDash:[],borderDashOffset:0.0},gridLines:{circular:false},ticks:{showLabelBackdrop:true,backdropColor:'rgba(255,255,255,0.75)',backdropPaddingY:2,backdropPaddingX:2,callback:core_ticks.formatters.linear},pointLabels:{display:true,fontSize:10,callback:function(label){return label;}}};function getTickBackdropHeight(opts){var tickOpts=opts.ticks;if(tickOpts.display&&opts.display){return valueOrDefault$c(tickOpts.fontSize,core_defaults.global.defaultFontSize)+tickOpts.backdropPaddingY*2;}
+function getPixelForGridLine(scale,index,offsetGridLines){const length=scale.ticks.length;const validIndex=Math.min(index,length-1);const start=scale._startPixel;const end=scale._endPixel;const epsilon=1e-6;let lineValue=scale.getPixelForTick(validIndex);let offset;if(offsetGridLines){if(length===1){offset=Math.max(lineValue-start,end-lineValue);}else if(index===0){offset=(scale.getPixelForTick(1)-lineValue)/2;}else{offset=(lineValue-scale.getPixelForTick(validIndex-1))/2;}
+lineValue+=validIndexend+epsilon){return;}}
+return lineValue;}
+function garbageCollect(caches,length){each(caches,(cache)=>{const gc=cache.gc;const gcLen=gc.length/2;let i;if(gcLen>length){for(i=0;i=maxRotation||numTicks<=1||!me.isHorizontal()){me.labelRotation=minRotation;return;}
+const labelSizes=me._getLabelSizes();const maxLabelWidth=labelSizes.widest.width;const maxLabelHeight=labelSizes.highest.height;const maxWidth=_limitValue(me.chart.width-maxLabelWidth,0,me.maxWidth);tickWidth=options.offset?me.maxWidth/numTicks:maxWidth/(numTicks-1);if(maxLabelWidth+6>tickWidth){tickWidth=maxWidth/(numTicks-(options.offset?0.5:1));maxHeight=me.maxHeight-getTickMarkLength(options.grid)
+-tickOpts.padding-getTitleHeight(options.title,me.chart.options.font);maxLabelDiagonal=Math.sqrt(maxLabelWidth*maxLabelWidth+maxLabelHeight*maxLabelHeight);labelRotation=toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height+6)/tickWidth,-1,1)),Math.asin(_limitValue(maxHeight/maxLabelDiagonal,-1,1))-Math.asin(_limitValue(maxLabelHeight/maxLabelDiagonal,-1,1))));labelRotation=Math.max(minRotation,Math.min(maxRotation,labelRotation));}
+me.labelRotation=labelRotation;}
+afterCalculateLabelRotation(){callback(this.options.afterCalculateLabelRotation,[this]);}
+beforeFit(){callback(this.options.beforeFit,[this]);}
+fit(){const me=this;const minSize={width:0,height:0};const{chart,options:{ticks:tickOpts,title:titleOpts,grid:gridOpts}}=me;const display=me._isVisible();const isHorizontal=me.isHorizontal();if(display){const titleHeight=getTitleHeight(titleOpts,chart.options.font);if(isHorizontal){minSize.width=me.maxWidth;minSize.height=getTickMarkLength(gridOpts)+titleHeight;}else{minSize.height=me.maxHeight;minSize.width=getTickMarkLength(gridOpts)+titleHeight;}
+if(tickOpts.display&&me.ticks.length){const{first,last,widest,highest}=me._getLabelSizes();const tickPadding=tickOpts.padding*2;const angleRadians=toRadians(me.labelRotation);const cos=Math.cos(angleRadians);const sin=Math.sin(angleRadians);if(isHorizontal){const labelHeight=tickOpts.mirror?0:sin*widest.width+cos*highest.height;minSize.height=Math.min(me.maxHeight,minSize.height+labelHeight+tickPadding);}else{const labelWidth=tickOpts.mirror?0:cos*widest.width+sin*highest.height;minSize.width=Math.min(me.maxWidth,minSize.width+labelWidth+tickPadding);}
+me._calculatePadding(first,last,sin,cos);}}
+me._handleMargins();if(isHorizontal){me.width=me._length=chart.width-me._margins.left-me._margins.right;me.height=minSize.height;}else{me.width=minSize.width;me.height=me._length=chart.height-me._margins.top-me._margins.bottom;}}
+_calculatePadding(first,last,sin,cos){const me=this;const{ticks:{align,padding},position}=me.options;const isRotated=me.labelRotation!==0;const labelsBelowTicks=position!=='top'&&me.axis==='x';if(me.isHorizontal()){const offsetLeft=me.getPixelForTick(0)-me.left;const offsetRight=me.right-me.getPixelForTick(me.ticks.length-1);let paddingLeft=0;let paddingRight=0;if(isRotated){if(labelsBelowTicks){paddingLeft=cos*first.width;paddingRight=sin*last.height;}else{paddingLeft=sin*first.height;paddingRight=cos*last.width;}}else if(align==='start'){paddingRight=last.width;}else if(align==='end'){paddingLeft=first.width;}else{paddingLeft=first.width/2;paddingRight=last.width/2;}
+me.paddingLeft=Math.max((paddingLeft-offsetLeft+padding)*me.width/(me.width-offsetLeft),0);me.paddingRight=Math.max((paddingRight-offsetRight+padding)*me.width/(me.width-offsetRight),0);}else{let paddingTop=last.height/2;let paddingBottom=first.height/2;if(align==='start'){paddingTop=0;paddingBottom=first.height;}else if(align==='end'){paddingTop=last.height;paddingBottom=0;}
+me.paddingTop=paddingTop+padding;me.paddingBottom=paddingBottom+padding;}}
+_handleMargins(){const me=this;if(me._margins){me._margins.left=Math.max(me.paddingLeft,me._margins.left);me._margins.top=Math.max(me.paddingTop,me._margins.top);me._margins.right=Math.max(me.paddingRight,me._margins.right);me._margins.bottom=Math.max(me.paddingBottom,me._margins.bottom);}}
+afterFit(){callback(this.options.afterFit,[this]);}
+isHorizontal(){const{axis,position}=this.options;return position==='top'||position==='bottom'||axis==='x';}
+isFullSize(){return this.options.fullSize;}
+_convertTicksToLabels(ticks){const me=this;me.beforeTickToLabelConversion();me.generateTickLabels(ticks);let i,ilen;for(i=0,ilen=ticks.length;i({width:widths[idx]||0,height:heights[idx]||0});return{first:valueAt(0),last:valueAt(length-1),widest:valueAt(widest),highest:valueAt(highest),widths,heights,};}
+getLabelForValue(value){return value;}
+getPixelForValue(value,index){return NaN;}
+getValueForPixel(pixel){}
+getPixelForTick(index){const ticks=this.ticks;if(index<0||index>ticks.length-1){return null;}
+return this.getPixelForValue(ticks[index].value);}
+getPixelForDecimal(decimal){const me=this;if(me._reversePixels){decimal=1-decimal;}
+const pixel=me._startPixel+decimal*me._length;return _int16Range(me._alignToPixels?_alignPixel(me.chart,pixel,0):pixel);}
+getDecimalForPixel(pixel){const decimal=(pixel-this._startPixel)/this._length;return this._reversePixels?1-decimal:decimal;}
+getBasePixel(){return this.getPixelForValue(this.getBaseValue());}
+getBaseValue(){const{min,max}=this;return min<0&&max<0?max:min>0&&max>0?min:0;}
+getContext(index){const me=this;const ticks=me.ticks||[];if(index>=0&&indexw*sin?w/cos:h/sin:h*sin0;}
+_computeGridLineItems(chartArea){const me=this;const axis=me.axis;const chart=me.chart;const options=me.options;const{grid,position}=options;const offset=grid.offset;const isHorizontal=me.isHorizontal();const ticks=me.ticks;const ticksLength=ticks.length+(offset?1:0);const tl=getTickMarkLength(grid);const items=[];const borderOpts=grid.setContext(me.getContext());const axisWidth=borderOpts.drawBorder?borderOpts.borderWidth:0;const axisHalfWidth=axisWidth/2;const alignBorderValue=function(pixel){return _alignPixel(chart,pixel,axisWidth);};let borderValue,i,lineValue,alignedLineValue;let tx1,ty1,tx2,ty2,x1,y1,x2,y2;if(position==='top'){borderValue=alignBorderValue(me.bottom);ty1=me.bottom-tl;ty2=borderValue-axisHalfWidth;y1=alignBorderValue(chartArea.top)+axisHalfWidth;y2=chartArea.bottom;}else if(position==='bottom'){borderValue=alignBorderValue(me.top);y1=chartArea.top;y2=alignBorderValue(chartArea.bottom)-axisHalfWidth;ty1=borderValue+axisHalfWidth;ty2=me.top+tl;}else if(position==='left'){borderValue=alignBorderValue(me.right);tx1=me.right-tl;tx2=borderValue-axisHalfWidth;x1=alignBorderValue(chartArea.left)+axisHalfWidth;x2=chartArea.right;}else if(position==='right'){borderValue=alignBorderValue(me.left);x1=chartArea.left;x2=alignBorderValue(chartArea.right)-axisHalfWidth;tx1=borderValue+axisHalfWidth;tx2=me.left+tl;}else if(axis==='x'){if(position==='center'){borderValue=alignBorderValue((chartArea.top+chartArea.bottom)/2+0.5);}else if(isObject(position)){const positionAxisID=Object.keys(position)[0];const value=position[positionAxisID];borderValue=alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));}
+y1=chartArea.top;y2=chartArea.bottom;ty1=borderValue+axisHalfWidth;ty2=ty1+tl;}else if(axis==='y'){if(position==='center'){borderValue=alignBorderValue((chartArea.left+chartArea.right)/2);}else if(isObject(position)){const positionAxisID=Object.keys(position)[0];const value=position[positionAxisID];borderValue=alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));}
+tx1=borderValue-axisHalfWidth;tx2=tx1-tl;x1=chartArea.left;x2=chartArea.right;}
+const limit=valueOrDefault(options.ticks.maxTicksLimit,ticksLength);const step=Math.max(1,Math.ceil(ticksLength/limit));for(i=0;it.value===value);if(index>=0){const opts=grid.setContext(me.getContext(index));return opts.lineWidth;}
return 0;}
-function measureLabelSize(ctx,lineHeight,label){if(helpers$1.isArray(label)){return{w:helpers$1.longestText(ctx,ctx.font,label),h:label.length*lineHeight};}
-return{w:ctx.measureText(label).width,h:lineHeight};}
-function determineLimits(angle,pos,size,min,max){if(angle===min||angle===max){return{start:pos-(size/2),end:pos+(size/2)};}else if(anglemax){return{start:pos-size,end:pos};}
-return{start:pos,end:pos+size};}
-function fitWithPointLabels(scale){var plFont=helpers$1.options._parseFont(scale.options.pointLabels);var furthestLimits={l:0,r:scale.width,t:0,b:scale.height-scale.paddingTop};var furthestAngles={};var i,textSize,pointPosition;scale.ctx.font=plFont.string;scale._pointLabelSizes=[];var valueCount=scale.chart.data.labels.length;for(i=0;ifurthestLimits.r){furthestLimits.r=hLimits.end;furthestAngles.r=angleRadians;}
-if(vLimits.startfurthestLimits.b){furthestLimits.b=vLimits.end;furthestAngles.b=angleRadians;}}
-scale.setReductions(scale.drawingArea,furthestLimits,furthestAngles);}
-function getTextAlignForAngle(angle){if(angle===0||angle===180){return'center';}else if(angle<180){return'left';}
-return'right';}
-function fillText(ctx,text,position,lineHeight){var y=position.y+lineHeight/2;var i,ilen;if(helpers$1.isArray(text)){for(i=0,ilen=text.length;i270||angle<90){position.y-=textSize.h;}}
-function drawPointLabels(scale){var ctx=scale.ctx;var opts=scale.options;var pointLabelOpts=opts.pointLabels;var tickBackdropHeight=getTickBackdropHeight(opts);var outerDistance=scale.getDistanceFromCenterForValue(opts.ticks.reverse?scale.min:scale.max);var plFont=helpers$1.options._parseFont(pointLabelOpts);ctx.save();ctx.font=plFont.string;ctx.textBaseline='middle';for(var i=scale.chart.data.labels.length-1;i>=0;i--){var extra=(i===0?tickBackdropHeight/2:0);var pointLabelPosition=scale.getPointPosition(i,outerDistance+extra+5);var pointLabelFontColor=valueAtIndexOrDefault$1(pointLabelOpts.fontColor,i,core_defaults.global.defaultFontColor);ctx.fillStyle=pointLabelFontColor;var angleRadians=scale.getIndexAngle(i);var angle=helpers$1.toDegrees(angleRadians);ctx.textAlign=getTextAlignForAngle(angle);adjustPointPositionForLabelHeight(angle,scale._pointLabelSizes[i],pointLabelPosition);fillText(ctx,scale.pointLabels[i],pointLabelPosition,plFont.lineHeight);}
-ctx.restore();}
-function drawRadiusLine(scale,gridLineOpts,radius,index){var ctx=scale.ctx;var circular=gridLineOpts.circular;var valueCount=scale.chart.data.labels.length;var lineColor=valueAtIndexOrDefault$1(gridLineOpts.color,index-1);var lineWidth=valueAtIndexOrDefault$1(gridLineOpts.lineWidth,index-1);var pointPosition;if((!circular&&!valueCount)||!lineColor||!lineWidth){return;}
-ctx.save();ctx.strokeStyle=lineColor;ctx.lineWidth=lineWidth;if(ctx.setLineDash){ctx.setLineDash(gridLineOpts.borderDash||[]);ctx.lineDashOffset=gridLineOpts.borderDashOffset||0.0;}
-ctx.beginPath();if(circular){ctx.arc(scale.xCenter,scale.yCenter,radius,0,Math.PI*2);}else{pointPosition=scale.getPointPosition(0,radius);ctx.moveTo(pointPosition.x,pointPosition.y);for(var i=1;i0&&max>0?min:0);},_drawGrid:function(){var me=this;var ctx=me.ctx;var opts=me.options;var gridLineOpts=opts.gridLines;var angleLineOpts=opts.angleLines;var lineWidth=valueOrDefault$c(angleLineOpts.lineWidth,gridLineOpts.lineWidth);var lineColor=valueOrDefault$c(angleLineOpts.color,gridLineOpts.color);var i,offset,position;if(opts.pointLabels.display){drawPointLabels(me);}
-if(gridLineOpts.display){helpers$1.each(me.ticks,function(label,index){if(index!==0){offset=me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);drawRadiusLine(me,gridLineOpts,offset,index);}});}
-if(angleLineOpts.display&&lineWidth&&lineColor){ctx.save();ctx.lineWidth=lineWidth;ctx.strokeStyle=lineColor;if(ctx.setLineDash){ctx.setLineDash(resolve$4([angleLineOpts.borderDash,gridLineOpts.borderDash,[]]));ctx.lineDashOffset=resolve$4([angleLineOpts.borderDashOffset,gridLineOpts.borderDashOffset,0.0]);}
-for(i=me.chart.data.labels.length-1;i>=0;i--){offset=me.getDistanceFromCenterForValue(opts.ticks.reverse?me.min:me.max);position=me.getPointPosition(i,offset);ctx.beginPath();ctx.moveTo(me.xCenter,me.yCenter);ctx.lineTo(position.x,position.y);ctx.stroke();}
-ctx.restore();}},_drawLabels:function(){var me=this;var ctx=me.ctx;var opts=me.options;var tickOpts=opts.ticks;if(!tickOpts.display){return;}
-var startAngle=me.getIndexAngle(0);var tickFont=helpers$1.options._parseFont(tickOpts);var tickFontColor=valueOrDefault$c(tickOpts.fontColor,core_defaults.global.defaultFontColor);var offset,width;ctx.save();ctx.font=tickFont.string;ctx.translate(me.xCenter,me.yCenter);ctx.rotate(startAngle);ctx.textAlign='center';ctx.textBaseline='middle';helpers$1.each(me.ticks,function(label,index){if(index===0&&!tickOpts.reverse){return;}
-offset=me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);if(tickOpts.showLabelBackdrop){width=ctx.measureText(label).width;ctx.fillStyle=tickOpts.backdropColor;ctx.fillRect(-width/2-tickOpts.backdropPaddingX,-offset-tickFont.size/2-tickOpts.backdropPaddingY,width+tickOpts.backdropPaddingX*2,tickFont.size+tickOpts.backdropPaddingY*2);}
-ctx.fillStyle=tickFontColor;ctx.fillText(label,0,-offset);});ctx.restore();},_drawTitle:helpers$1.noop});var _defaults$3=defaultConfig$3;scale_radialLinear._defaults=_defaults$3;var deprecated$1=helpers$1._deprecated;var resolve$5=helpers$1.options.resolve;var valueOrDefault$d=helpers$1.valueOrDefault;var MIN_INTEGER=Number.MIN_SAFE_INTEGER||-9007199254740991;var MAX_INTEGER=Number.MAX_SAFE_INTEGER||9007199254740991;var INTERVALS={millisecond:{common:true,size:1,steps:1000},second:{common:true,size:1000,steps:60},minute:{common:true,size:60000,steps:60},hour:{common:true,size:3600000,steps:24},day:{common:true,size:86400000,steps:30},week:{common:false,size:604800000,steps:4},month:{common:true,size:2.628e9,steps:12},quarter:{common:false,size:7.884e9,steps:4},year:{common:true,size:3.154e10}};var UNITS=Object.keys(INTERVALS);function sorter(a,b){return a-b;}
-function arrayUnique(items){var hash={};var out=[];var i,ilen,item;for(i=0,ilen=items.length;imin&&curr=0&&lo<=hi){mid=(lo+hi)>>1;i0=table[mid-1]||null;i1=table[mid];if(!i0){return{lo:null,hi:i1};}else if(i1[key]value){hi=mid-1;}else{return{lo:i0,hi:i1};}}
-return{lo:i1,hi:null};}
-function interpolate$1(table,skey,sval,tkey){var range=lookup(table,skey,sval);var prev=!range.lo?table[0]:!range.hi?table[table.length-2]:range.lo;var next=!range.lo?table[1]:!range.hi?table[table.length-1]:range.hi;var span=next[skey]-prev[skey];var ratio=span?(sval-prev[skey])/span:0;var offset=(next[tkey]-prev[tkey])*ratio;return prev[tkey]+offset;}
-function toTimestamp(scale,input){var adapter=scale._adapter;var options=scale.options.time;var parser=options.parser;var format=parser||options.format;var value=input;if(typeof parser==='function'){value=parser(value);}
-if(!helpers$1.isFinite(value)){value=typeof format==='string'?adapter.parse(value,format):adapter.parse(value);}
-if(value!==null){return+value;}
-if(!parser&&typeof format==='function'){value=format(input);if(!helpers$1.isFinite(value)){value=adapter.parse(value);}}
-return value;}
-function parse(scale,input){if(helpers$1.isNullOrUndef(input)){return null;}
-var options=scale.options.time;var value=toTimestamp(scale,scale.getRightValue(input));if(value===null){return value;}
-if(options.round){value=+scale._adapter.startOf(value,options.round);}
-return value;}
-function determineUnitForAutoTicks(minUnit,min,max,capacity){var ilen=UNITS.length;var i,interval,factor;for(i=UNITS.indexOf(minUnit);i=UNITS.indexOf(minUnit);i--){unit=UNITS[i];if(INTERVALS[unit].common&&scale._adapter.diff(max,min,unit)>=numTicks-1){return unit;}}
-return UNITS[minUnit?UNITS.indexOf(minUnit):0];}
-function determineMajorUnit(unit){for(var i=UNITS.indexOf(unit)+1,ilen=UNITS.length;i100000*stepSize){throw min+' and '+max+' are too far apart with stepSize of '+stepSize+' '+minor;}
-for(time=first;time=0){ticks[index].major=true;}}
-return ticks;}
-function ticksFromTimestamps(scale,values,majorUnit){var ticks=[];var map={};var ilen=values.length;var i,value;for(i=0;i1?arrayUnique(timestamps).sort(sorter):timestamps.sort(sorter);min=Math.min(min,timestamps[0]);max=Math.max(max,timestamps[timestamps.length-1]);}
-min=parse(me,getMin(options))||min;max=parse(me,getMax(options))||max;min=min===MAX_INTEGER?+adapter.startOf(Date.now(),unit):min;max=max===MIN_INTEGER?+adapter.endOf(Date.now(),unit)+1:max;me.min=Math.min(min,max);me.max=Math.max(min+1,max);me._table=[];me._timestamps={data:timestamps,datasets:datasets,labels:labels};},buildTicks:function(){var me=this;var min=me.min;var max=me.max;var options=me.options;var tickOpts=options.ticks;var timeOpts=options.time;var timestamps=me._timestamps;var ticks=[];var capacity=me.getLabelCapacity(min);var source=tickOpts.source;var distribution=options.distribution;var i,ilen,timestamp;if(source==='data'||(source==='auto'&&distribution==='series')){timestamps=timestamps.data;}else if(source==='labels'){timestamps=timestamps.labels;}else{timestamps=generate(me,min,max,capacity);}
-if(options.bounds==='ticks'&×tamps.length){min=timestamps[0];max=timestamps[timestamps.length-1];}
-min=parse(me,getMin(options))||min;max=parse(me,getMax(options))||max;for(i=0,ilen=timestamps.length;i=min&×tamp<=max){ticks.push(timestamp);}}
-me.min=min;me.max=max;me._unit=timeOpts.unit||(tickOpts.autoSkip?determineUnitForAutoTicks(timeOpts.minUnit,me.min,me.max,capacity):determineUnitForFormatting(me,ticks.length,timeOpts.minUnit,me.min,me.max));me._majorUnit=!tickOpts.major.enabled||me._unit==='year'?undefined:determineMajorUnit(me._unit);me._table=buildLookupTable(me._timestamps.data,min,max,distribution);me._offsets=computeOffsets(me._table,ticks,min,max,options);if(tickOpts.reverse){ticks.reverse();}
-return ticksFromTimestamps(me,ticks,me._majorUnit);},getLabelForIndex:function(index,datasetIndex){var me=this;var adapter=me._adapter;var data=me.chart.data;var timeOpts=me.options.time;var label=data.labels&&index=0&&index0?capacity:1;}});var _defaults$4=defaultConfig$4;scale_time._defaults=_defaults$4;var scales={category:scale_category,linear:scale_linear,logarithmic:scale_logarithmic,radialLinear:scale_radialLinear,time:scale_time};var FORMATS={datetime:'MMM D, YYYY, h:mm:ss a',millisecond:'h:mm:ss.SSS a',second:'h:mm:ss a',minute:'h:mm a',hour:'hA',day:'MMM D',week:'ll',month:'MMM YYYY',quarter:'[Q]Q - YYYY',year:'YYYY'};core_adapters._date.override(typeof moment==='function'?{_id:'moment',formats:function(){return FORMATS;},parse:function(value,format){if(typeof value==='string'&&typeof format==='string'){value=moment(value,format);}else if(!(value instanceof moment)){value=moment(value);}
-return value.isValid()?value.valueOf():null;},format:function(time,format){return moment(time).format(format);},add:function(time,amount,unit){return moment(time).add(amount,unit).valueOf();},diff:function(max,min,unit){return moment(max).diff(moment(min),unit);},startOf:function(time,unit,weekday){time=moment(time);if(unit==='isoWeek'){return time.isoWeekday(weekday).valueOf();}
-return time.startOf(unit).valueOf();},endOf:function(time,unit){return moment(time).endOf(unit).valueOf();},_create:function(time){return moment(time);},}:{});core_defaults._set('global',{plugins:{filler:{propagate:true}}});var mappers={dataset:function(source){var index=source.fill;var chart=source.chart;var meta=chart.getDatasetMeta(index);var visible=meta&&chart.isDatasetVisible(index);var points=(visible&&meta.dataset._children)||[];var length=points.length||0;return!length?null:function(point,i){return(i{if(!style.width||!style.color){return;}
+ctx.save();ctx.lineWidth=style.width;ctx.strokeStyle=style.color;ctx.setLineDash(style.borderDash||[]);ctx.lineDashOffset=style.borderDashOffset;ctx.beginPath();ctx.moveTo(p1.x,p1.y);ctx.lineTo(p2.x,p2.y);ctx.stroke();ctx.restore();};if(grid.display){for(i=0,ilen=items.length;i{const propertyParts=property.split('.');const sourceName=propertyParts.pop();const sourceScope=[scope].concat(propertyParts).join('.');const parts=routes[property].split('.');const targetName=parts.pop();const targetScope=parts.join('.');defaults.route(sourceScope,sourceName,targetScope,targetName);});}
+function isIChartComponent(proto){return'id'in proto&&'defaults'in proto;}
+class Registry{constructor(){this.controllers=new TypedRegistry(DatasetController,'datasets',true);this.elements=new TypedRegistry(Element,'elements');this.plugins=new TypedRegistry(Object,'plugins');this.scales=new TypedRegistry(Scale,'scales');this._typedRegistries=[this.controllers,this.scales,this.elements];}
+add(...args){this._each('register',args);}
+remove(...args){this._each('unregister',args);}
+addControllers(...args){this._each('register',args,this.controllers);}
+addElements(...args){this._each('register',args,this.elements);}
+addPlugins(...args){this._each('register',args,this.plugins);}
+addScales(...args){this._each('register',args,this.scales);}
+getController(id){return this._get(id,this.controllers,'controller');}
+getElement(id){return this._get(id,this.elements,'element');}
+getPlugin(id){return this._get(id,this.plugins,'plugin');}
+getScale(id){return this._get(id,this.scales,'scale');}
+removeControllers(...args){this._each('unregister',args,this.controllers);}
+removeElements(...args){this._each('unregister',args,this.elements);}
+removePlugins(...args){this._each('unregister',args,this.plugins);}
+removeScales(...args){this._each('unregister',args,this.scales);}
+_each(method,args,typedRegistry){const me=this;[...args].forEach(arg=>{const reg=typedRegistry||me._getRegistryForType(arg);if(typedRegistry||reg.isForType(arg)||(reg===me.plugins&&arg.id)){me._exec(method,reg,arg);}else{each(arg,item=>{const itemReg=typedRegistry||me._getRegistryForType(item);me._exec(method,itemReg,item);});}});}
+_exec(method,registry,component){const camelMethod=_capitalize(method);callback(component['before'+camelMethod],[],component);registry[method](component);callback(component['after'+camelMethod],[],component);}
+_getRegistryForType(type){for(let i=0;ia.filter(x=>!b.some(y=>x.plugin.id===y.plugin.id));this._notify(diff(previousDescriptors,descriptors),chart,'stop');this._notify(diff(descriptors,previousDescriptors),chart,'start');}}
+function allPlugins(config){const plugins=[];const keys=Object.keys(registry.plugins.items);for(let i=0;i{const scaleConf=configScales[id];const axis=determineAxis(id,scaleConf);const defaultId=getDefaultScaleIDFromAxis(axis,chartIndexAxis);const defaultScaleOptions=chartDefaults.scales||{};firstIDs[axis]=firstIDs[axis]||id;scales[id]=mergeIf(Object.create(null),[{axis},scaleConf,defaultScaleOptions[axis],defaultScaleOptions[defaultId]]);});config.data.datasets.forEach(dataset=>{const type=dataset.type||config.type;const indexAxis=dataset.indexAxis||getIndexAxis(type,options);const datasetDefaults=overrides[type]||{};const defaultScaleOptions=datasetDefaults.scales||{};Object.keys(defaultScaleOptions).forEach(defaultID=>{const axis=getAxisFromDefaultScaleID(defaultID,indexAxis);const id=dataset[axis+'AxisID']||firstIDs[axis]||axis;scales[id]=scales[id]||Object.create(null);mergeIf(scales[id],[{axis},configScales[id],defaultScaleOptions[defaultID]]);});});Object.keys(scales).forEach(key=>{const scale=scales[key];mergeIf(scale,[defaults.scales[scale.type],defaults.scale]);});return scales;}
+function initOptions(config){const options=config.options||(config.options={});options.plugins=valueOrDefault(options.plugins,{});options.scales=mergeScaleConfig(config,options);}
+function initData(data){data=data||{};data.datasets=data.datasets||[];data.labels=data.labels||[];return data;}
+function initConfig(config){config=config||{};config.data=initData(config.data);initOptions(config);return config;}
+const keyCache=new Map();const keysCached=new Set();function cachedKeys(cacheKey,generate){let keys=keyCache.get(cacheKey);if(!keys){keys=generate();keyCache.set(cacheKey,keys);keysCached.add(keys);}
+return keys;}
+const addIfFound=(set,obj,key)=>{const opts=resolveObjectKey(obj,key);if(opts!==undefined){set.add(opts);}};class Config{constructor(config){this._config=initConfig(config);this._scopeCache=new Map();this._resolverCache=new Map();}
+get platform(){return this._config.platform;}
+get type(){return this._config.type;}
+set type(type){this._config.type=type;}
+get data(){return this._config.data;}
+set data(data){this._config.data=initData(data);}
+get options(){return this._config.options;}
+set options(options){this._config.options=options;}
+get plugins(){return this._config.plugins;}
+update(){const config=this._config;this.clearCache();initOptions(config);}
+clearCache(){this._scopeCache.clear();this._resolverCache.clear();}
+datasetScopeKeys(datasetType){return cachedKeys(datasetType,()=>[[`datasets.${datasetType}`,'']]);}
+datasetAnimationScopeKeys(datasetType,transition){return cachedKeys(`${datasetType}.transition.${transition}`,()=>[[`datasets.${datasetType}.transitions.${transition}`,`transitions.${transition}`,],[`datasets.${datasetType}`,'']]);}
+datasetElementScopeKeys(datasetType,elementType){return cachedKeys(`${datasetType}-${elementType}`,()=>[[`datasets.${datasetType}.elements.${elementType}`,`datasets.${datasetType}`,`elements.${elementType}`,'']]);}
+pluginScopeKeys(plugin){const id=plugin.id;const type=this.type;return cachedKeys(`${type}-plugin-${id}`,()=>[[`plugins.${id}`,...plugin.additionalOptionScopes||[],]]);}
+_cachedScopes(mainScope,resetCache){const _scopeCache=this._scopeCache;let cache=_scopeCache.get(mainScope);if(!cache||resetCache){cache=new Map();_scopeCache.set(mainScope,cache);}
+return cache;}
+getOptionScopes(mainScope,keyLists,resetCache){const{options,type}=this;const cache=this._cachedScopes(mainScope,resetCache);const cached=cache.get(keyLists);if(cached){return cached;}
+const scopes=new Set();keyLists.forEach(keys=>{if(mainScope){scopes.add(mainScope);keys.forEach(key=>addIfFound(scopes,mainScope,key));}
+keys.forEach(key=>addIfFound(scopes,options,key));keys.forEach(key=>addIfFound(scopes,overrides[type]||{},key));keys.forEach(key=>addIfFound(scopes,defaults,key));keys.forEach(key=>addIfFound(scopes,descriptors,key));});const array=Array.from(scopes);if(array.length===0){array.push(Object.create(null));}
+if(keysCached.has(keyLists)){cache.set(keyLists,array);}
+return array;}
+chartOptionScopes(){const{options,type}=this;return[options,overrides[type]||{},defaults.datasets[type]||{},{type},defaults,descriptors];}
+resolveNamedOptions(scopes,names,context,prefixes=['']){const result={$shared:true};const{resolver,subPrefixes}=getResolver(this._resolverCache,scopes,prefixes);let options=resolver;if(needContext(resolver,names)){result.$shared=false;context=isFunction(context)?context():context;const subResolver=this.createResolver(scopes,context,subPrefixes);options=_attachContext(resolver,context,subResolver);}
+for(const prop of names){result[prop]=options[prop];}
+return result;}
+createResolver(scopes,context,prefixes=[''],descriptorDefaults){const{resolver}=getResolver(this._resolverCache,scopes,prefixes);return isObject(context)?_attachContext(resolver,context,undefined,descriptorDefaults):resolver;}}
+function getResolver(resolverCache,scopes,prefixes){let cache=resolverCache.get(scopes);if(!cache){cache=new Map();resolverCache.set(scopes,cache);}
+const cacheKey=prefixes.join();let cached=cache.get(cacheKey);if(!cached){const resolver=_createResolver(scopes,prefixes);cached={resolver,subPrefixes:prefixes.filter(p=>!p.toLowerCase().includes('hover'))};cache.set(cacheKey,cached);}
+return cached;}
+function needContext(proxy,names){const{isScriptable,isIndexable}=_descriptors(proxy);for(const prop of names){if((isScriptable(prop)&&isFunction(proxy[prop]))||(isIndexable(prop)&&isArray(proxy[prop]))){return true;}}
+return false;}
+var version="3.5.1";const KNOWN_POSITIONS=['top','bottom','left','right','chartArea'];function positionIsHorizontal(position,axis){return position==='top'||position==='bottom'||(KNOWN_POSITIONS.indexOf(position)===-1&&axis==='x');}
+function compare2Level(l1,l2){return function(a,b){return a[l1]===b[l1]?a[l2]-b[l2]:a[l1]-b[l1];};}
+function onAnimationsComplete(context){const chart=context.chart;const animationOptions=chart.options.animation;chart.notifyPlugins('afterRender');callback(animationOptions&&animationOptions.onComplete,[context],chart);}
+function onAnimationProgress(context){const chart=context.chart;const animationOptions=chart.options.animation;callback(animationOptions&&animationOptions.onProgress,[context],chart);}
+function getCanvas(item){if(_isDomSupported()&&typeof item==='string'){item=document.getElementById(item);}else if(item&&item.length){item=item[0];}
+if(item&&item.canvas){item=item.canvas;}
+return item;}
+const instances={};const getChart=(key)=>{const canvas=getCanvas(key);return Object.values(instances).filter((c)=>c.canvas===canvas).pop();};class Chart{constructor(item,userConfig){const me=this;const config=this.config=new Config(userConfig);const initialCanvas=getCanvas(item);const existingChart=getChart(initialCanvas);if(existingChart){throw new Error('Canvas is already in use. Chart with ID \''+existingChart.id+'\''+' must be destroyed before the canvas can be reused.');}
+const options=config.createResolver(config.chartOptionScopes(),me.getContext());this.platform=new(config.platform||_detectPlatform(initialCanvas))();const context=me.platform.acquireContext(initialCanvas,options.aspectRatio);const canvas=context&&context.canvas;const height=canvas&&canvas.height;const width=canvas&&canvas.width;this.id=uid();this.ctx=context;this.canvas=canvas;this.width=width;this.height=height;this._options=options;this._aspectRatio=this.aspectRatio;this._layers=[];this._metasets=[];this._stacks=undefined;this.boxes=[];this.currentDevicePixelRatio=undefined;this.chartArea=undefined;this._active=[];this._lastEvent=undefined;this._listeners={};this._responsiveListeners=undefined;this._sortedMetasets=[];this.scales={};this._plugins=new PluginService();this.$proxies={};this._hiddenIndices={};this.attached=false;this._animationsDisabled=undefined;this.$context=undefined;this._doResize=debounce(()=>this.update('resize'),options.resizeDelay||0);instances[me.id]=me;if(!context||!canvas){console.error("Failed to create chart: can't acquire context from the given item");return;}
+animator.listen(me,'complete',onAnimationsComplete);animator.listen(me,'progress',onAnimationProgress);me._initialize();if(me.attached){me.update();}}
+get aspectRatio(){const{options:{aspectRatio,maintainAspectRatio},width,height,_aspectRatio}=this;if(!isNullOrUndef(aspectRatio)){return aspectRatio;}
+if(maintainAspectRatio&&_aspectRatio){return _aspectRatio;}
+return height?width/height:null;}
+get data(){return this.config.data;}
+set data(data){this.config.data=data;}
+get options(){return this._options;}
+set options(options){this.config.options=options;}
+_initialize(){const me=this;me.notifyPlugins('beforeInit');if(me.options.responsive){me.resize();}else{retinaScale(me,me.options.devicePixelRatio);}
+me.bindEvents();me.notifyPlugins('afterInit');return me;}
+clear(){clearCanvas(this.canvas,this.ctx);return this;}
+stop(){animator.stop(this);return this;}
+resize(width,height){if(!animator.running(this)){this._resize(width,height);}else{this._resizeBeforeDraw={width,height};}}
+_resize(width,height){const me=this;const options=me.options;const canvas=me.canvas;const aspectRatio=options.maintainAspectRatio&&me.aspectRatio;const newSize=me.platform.getMaximumSize(canvas,width,height,aspectRatio);const newRatio=options.devicePixelRatio||me.platform.getDevicePixelRatio();me.width=newSize.width;me.height=newSize.height;me._aspectRatio=me.aspectRatio;if(!retinaScale(me,newRatio,true)){return;}
+me.notifyPlugins('resize',{size:newSize});callback(options.onResize,[me,newSize],me);if(me.attached){if(me._doResize()){me.render();}}}
+ensureScalesHaveIDs(){const options=this.options;const scalesOptions=options.scales||{};each(scalesOptions,(axisOptions,axisID)=>{axisOptions.id=axisID;});}
+buildOrUpdateScales(){const me=this;const options=me.options;const scaleOpts=options.scales;const scales=me.scales;const updated=Object.keys(scales).reduce((obj,id)=>{obj[id]=false;return obj;},{});let items=[];if(scaleOpts){items=items.concat(Object.keys(scaleOpts).map((id)=>{const scaleOptions=scaleOpts[id];const axis=determineAxis(id,scaleOptions);const isRadial=axis==='r';const isHorizontal=axis==='x';return{options:scaleOptions,dposition:isRadial?'chartArea':isHorizontal?'bottom':'left',dtype:isRadial?'radialLinear':isHorizontal?'category':'linear'};}));}
+each(items,(item)=>{const scaleOptions=item.options;const id=scaleOptions.id;const axis=determineAxis(id,scaleOptions);const scaleType=valueOrDefault(scaleOptions.type,item.dtype);if(scaleOptions.position===undefined||positionIsHorizontal(scaleOptions.position,axis)!==positionIsHorizontal(item.dposition)){scaleOptions.position=item.dposition;}
+updated[id]=true;let scale=null;if(id in scales&&scales[id].type===scaleType){scale=scales[id];}else{const scaleClass=registry.getScale(scaleType);scale=new scaleClass({id,type:scaleType,ctx:me.ctx,chart:me});scales[scale.id]=scale;}
+scale.init(scaleOptions,options);});each(updated,(hasUpdated,id)=>{if(!hasUpdated){delete scales[id];}});each(scales,(scale)=>{layouts.configure(me,scale,scale.options);layouts.addBox(me,scale);});}
+_updateMetasets(){const me=this;const metasets=me._metasets;const numData=me.data.datasets.length;const numMeta=metasets.length;metasets.sort((a,b)=>a.index-b.index);if(numMeta>numData){for(let i=numData;idatasets.length){delete me._stacks;}
+metasets.forEach((meta,index)=>{if(datasets.filter(x=>x===meta._dataset).length===0){me._destroyDatasetMeta(index);}});}
+buildOrUpdateControllers(){const me=this;const newControllers=[];const datasets=me.data.datasets;let i,ilen;me._removeUnreferencedMetasets();for(i=0,ilen=datasets.length;i{me.getDatasetMeta(datasetIndex).controller.reset();},me);}
+reset(){this._resetElements();this.notifyPlugins('reset');}
+update(mode){const me=this;const config=me.config;config.update();me._options=config.createResolver(config.chartOptionScopes(),me.getContext());each(me.scales,(scale)=>{layouts.removeBox(me,scale);});const animsDisabled=me._animationsDisabled=!me.options.animation;me.ensureScalesHaveIDs();me.buildOrUpdateScales();const existingEvents=new Set(Object.keys(me._listeners));const newEvents=new Set(me.options.events);if(!setsEqual(existingEvents,newEvents)||!!this._responsiveListeners!==me.options.responsive){me.unbindEvents();me.bindEvents();}
+me._plugins.invalidate();if(me.notifyPlugins('beforeUpdate',{mode,cancelable:true})===false){return;}
+const newControllers=me.buildOrUpdateControllers();me.notifyPlugins('beforeElementsUpdate');let minPadding=0;for(let i=0,ilen=me.data.datasets.length;i{controller.reset();});}
+me._updateDatasets(mode);me.notifyPlugins('afterUpdate',{mode});me._layers.sort(compare2Level('z','_idx'));if(me._lastEvent){me._eventHandler(me._lastEvent,true);}
+me.render();}
+_updateLayout(minPadding){const me=this;if(me.notifyPlugins('beforeLayout',{cancelable:true})===false){return;}
+layouts.update(me,me.width,me.height,minPadding);const area=me.chartArea;const noArea=area.width<=0||area.height<=0;me._layers=[];each(me.boxes,(box)=>{if(noArea&&box.position==='chartArea'){return;}
+if(box.configure){box.configure();}
+me._layers.push(...box._layers());},me);me._layers.forEach((item,index)=>{item._idx=index;});me.notifyPlugins('afterLayout');}
+_updateDatasets(mode){const me=this;const isFunction=typeof mode==='function';if(me.notifyPlugins('beforeDatasetsUpdate',{mode,cancelable:true})===false){return;}
+for(let i=0,ilen=me.data.datasets.length;i=0;--i){me._drawDataset(metasets[i]);}
+me.notifyPlugins('afterDatasetsDraw');}
+_drawDataset(meta){const me=this;const ctx=me.ctx;const clip=meta._clip;const useClip=!clip.disabled;const area=me.chartArea;const args={meta,index:meta.index,cancelable:true};if(me.notifyPlugins('beforeDatasetDraw',args)===false){return;}
+if(useClip){clipArea(ctx,{left:clip.left===false?0:area.left-clip.left,right:clip.right===false?me.width:area.right+clip.right,top:clip.top===false?0:area.top-clip.top,bottom:clip.bottom===false?me.height:area.bottom+clip.bottom});}
+meta.controller.draw();if(useClip){unclipArea(ctx);}
+args.cancelable=false;me.notifyPlugins('afterDatasetDraw',args);}
+getElementsAtEventForMode(e,mode,options,useFinalPosition){const method=Interaction.modes[mode];if(typeof method==='function'){return method(this,e,options,useFinalPosition);}
+return[];}
+getDatasetMeta(datasetIndex){const me=this;const dataset=me.data.datasets[datasetIndex];const metasets=me._metasets;let meta=metasets.filter(x=>x&&x._dataset===dataset).pop();if(!meta){meta={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:dataset&&dataset.order||0,index:datasetIndex,_dataset:dataset,_parsed:[],_sorted:false};metasets.push(meta);}
+return meta;}
+getContext(){return this.$context||(this.$context={chart:this,type:'chart'});}
+getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length;}
+isDatasetVisible(datasetIndex){const dataset=this.data.datasets[datasetIndex];if(!dataset){return false;}
+const meta=this.getDatasetMeta(datasetIndex);return typeof meta.hidden==='boolean'?!meta.hidden:!dataset.hidden;}
+setDatasetVisibility(datasetIndex,visible){const meta=this.getDatasetMeta(datasetIndex);meta.hidden=!visible;}
+toggleDataVisibility(index){this._hiddenIndices[index]=!this._hiddenIndices[index];}
+getDataVisibility(index){return!this._hiddenIndices[index];}
+_updateVisibility(datasetIndex,dataIndex,visible){const me=this;const mode=visible?'show':'hide';const meta=me.getDatasetMeta(datasetIndex);const anims=meta.controller._resolveAnimations(undefined,mode);if(defined(dataIndex)){meta.data[dataIndex].hidden=!visible;me.update();}else{me.setDatasetVisibility(datasetIndex,visible);anims.update(meta,{visible});me.update((ctx)=>ctx.datasetIndex===datasetIndex?mode:undefined);}}
+hide(datasetIndex,dataIndex){this._updateVisibility(datasetIndex,dataIndex,false);}
+show(datasetIndex,dataIndex){this._updateVisibility(datasetIndex,dataIndex,true);}
+_destroyDatasetMeta(datasetIndex){const me=this;const meta=me._metasets&&me._metasets[datasetIndex];if(meta&&meta.controller){meta.controller._destroy();delete me._metasets[datasetIndex];}}
+destroy(){const me=this;const{canvas,ctx}=me;let i,ilen;me.stop();animator.remove(me);for(i=0,ilen=me.data.datasets.length;i{platform.addEventListener(me,type,listener);listeners[type]=listener;};const listener=function(e,x,y){e.offsetX=x;e.offsetY=y;me._eventHandler(e);};each(me.options.events,(type)=>_add(type,listener));}
+bindResponsiveEvents(){const me=this;if(!me._responsiveListeners){me._responsiveListeners={};}
+const listeners=me._responsiveListeners;const platform=me.platform;const _add=(type,listener)=>{platform.addEventListener(me,type,listener);listeners[type]=listener;};const _remove=(type,listener)=>{if(listeners[type]){platform.removeEventListener(me,type,listener);delete listeners[type];}};const listener=(width,height)=>{if(me.canvas){me.resize(width,height);}};let detached;const attached=()=>{_remove('attach',attached);me.attached=true;me.resize();_add('resize',listener);_add('detach',detached);};detached=()=>{me.attached=false;_remove('resize',listener);_add('attach',attached);};if(platform.isAttached(me.canvas)){attached();}else{detached();}}
+unbindEvents(){const me=this;each(me._listeners,(listener,type)=>{me.platform.removeEventListener(me,type,listener);});me._listeners={};each(me._responsiveListeners,(listener,type)=>{me.platform.removeEventListener(me,type,listener);});me._responsiveListeners=undefined;}
+updateHoverStyle(items,mode,enabled){const prefix=enabled?'set':'remove';let meta,item,i,ilen;if(mode==='dataset'){meta=this.getDatasetMeta(items[0].datasetIndex);meta.controller['_'+prefix+'DatasetHoverStyle']();}
+for(i=0,ilen=items.length;i{const meta=me.getDatasetMeta(datasetIndex);if(!meta){throw new Error('No dataset found at index '+datasetIndex);}
+return{datasetIndex,element:meta.data[index],index,};});const changed=!_elementsEqual(active,lastActive);if(changed){me._active=active;me._updateHoverStyles(active,lastActive);}}
+notifyPlugins(hook,args,filter){return this._plugins.notify(this,hook,args,filter);}
+_updateHoverStyles(active,lastActive,replay){const me=this;const hoverOptions=me.options.hover;const diff=(a,b)=>a.filter(x=>!b.some(y=>x.datasetIndex===y.datasetIndex&&x.index===y.index));const deactivated=diff(lastActive,active);const activated=replay?active:diff(active,lastActive);if(deactivated.length){me.updateHoverStyle(deactivated,hoverOptions.mode,false);}
+if(activated.length&&hoverOptions.mode){me.updateHoverStyle(activated,hoverOptions.mode,true);}}
+_eventHandler(e,replay){const me=this;const args={event:e,replay,cancelable:true};const eventFilter=(plugin)=>(plugin.options.events||this.options.events).includes(e.type);if(me.notifyPlugins('beforeEvent',args,eventFilter)===false){return;}
+const changed=me._handleEvent(e,replay);args.cancelable=false;me.notifyPlugins('afterEvent',args,eventFilter);if(changed||args.changed){me.render();}
+return me;}
+_handleEvent(e,replay){const me=this;const{_active:lastActive=[],options}=me;const hoverOptions=options.hover;const useFinalPosition=replay;let active=[];let changed=false;let lastEvent=null;if(e.type!=='mouseout'){active=me.getElementsAtEventForMode(e,hoverOptions.mode,hoverOptions,useFinalPosition);lastEvent=e.type==='click'?me._lastEvent:e;}
+me._lastEvent=null;if(_isPointInArea(e,me.chartArea,me._minPadding)){callback(options.onHover,[e,active,me],me);if(e.type==='mouseup'||e.type==='click'||e.type==='contextmenu'){callback(options.onClick,[e,active,me],me);}}
+changed=!_elementsEqual(active,lastActive);if(changed||replay){me._active=active;me._updateHoverStyles(active,lastActive,replay);}
+me._lastEvent=lastEvent;return changed;}}
+const invalidatePlugins=()=>each(Chart.instances,(chart)=>chart._plugins.invalidate());const enumerable=true;Object.defineProperties(Chart,{defaults:{enumerable,value:defaults},instances:{enumerable,value:instances},overrides:{enumerable,value:overrides},registry:{enumerable,value:registry},version:{enumerable,value:version},getChart:{enumerable,value:getChart},register:{enumerable,value:(...items)=>{registry.add(...items);invalidatePlugins();}},unregister:{enumerable,value:(...items)=>{registry.remove(...items);invalidatePlugins();}}});function abstract(){throw new Error('This method is not implemented: Check that a complete date adapter is provided.');}
+class DateAdapter{constructor(options){this.options=options||{};}
+formats(){return abstract();}
+parse(value,format){return abstract();}
+format(timestamp,format){return abstract();}
+add(timestamp,amount,unit){return abstract();}
+diff(a,b,unit){return abstract();}
+startOf(timestamp,unit,weekday){return abstract();}
+endOf(timestamp,unit){return abstract();}}
+DateAdapter.override=function(members){Object.assign(DateAdapter.prototype,members);};var _adapters={_date:DateAdapter};function getAllScaleValues(scale){if(!scale._cache.$bar){const metas=scale.getMatchingVisibleMetas('bar');let values=[];for(let i=0,ilen=metas.length;ia-b));}
+return scale._cache.$bar;}
+function computeMinSampleSize(scale){const values=getAllScaleValues(scale);let min=scale._length;let i,ilen,curr,prev;const updateMinAndPrev=()=>{if(curr===32767||curr===-32768){return;}
+if(defined(prev)){min=Math.min(min,Math.abs(curr-prev)||min);}
+prev=curr;};for(i=0,ilen=values.length;i0?pixels[index-1]:null;let next=indexMath.abs(max)){barStart=max;barEnd=min;}
+item[vScale.axis]=barEnd;item._custom={barStart,barEnd,start:startValue,end:endValue,min,max};}
+function parseValue(entry,item,vScale,i){if(isArray(entry)){parseFloatBar(entry,item,vScale,i);}else{item[vScale.axis]=vScale.parse(entry,i);}
+return item;}
+function parseArrayOrPrimitive(meta,data,start,count){const iScale=meta.iScale;const vScale=meta.vScale;const labels=iScale.getLabels();const singleScale=iScale===vScale;const parsed=[];let i,ilen,item,entry;for(i=start,ilen=start+count;i=actualBase?1:-1);}
+function borderProps(properties){let reverse,start,end,top,bottom;if(properties.horizontal){reverse=properties.base>properties.x;start='left';end='right';}else{reverse=properties.base=0;--i){max=Math.max(max,data[i].size()/2,_parsed[i]._custom);}
+return max>0&&max;}
+getLabelAndValue(index){const me=this;const meta=me._cachedMeta;const{xScale,yScale}=meta;const parsed=me.getParsed(index);const x=xScale.getLabelForValue(parsed.x);const y=yScale.getLabelForValue(parsed.y);const r=parsed._custom;return{label:meta.label,value:'('+x+', '+y+(r?', '+r:'')+')'};}
+update(mode){const me=this;const points=me._cachedMeta.data;me.updateElements(points,0,points.length,mode);}
+updateElements(points,start,count,mode){const me=this;const reset=mode==='reset';const{iScale,vScale}=me._cachedMeta;const firstOpts=me.resolveDataElementOptions(start,mode);const sharedOptions=me.getSharedOptions(firstOpts);const includeOptions=me.includeOptions(mode,sharedOptions);const iAxis=iScale.axis;const vAxis=vScale.axis;for(let i=start;i_angleBetween(angle,startAngle,endAngle,true)?1:Math.max(a,a*cutout,b,b*cutout);const calcMin=(angle,a,b)=>_angleBetween(angle,startAngle,endAngle,true)?-1:Math.min(a,a*cutout,b,b*cutout);const maxX=calcMax(0,startX,endX);const maxY=calcMax(HALF_PI,startY,endY);const minX=calcMin(PI,startX,endX);const minY=calcMin(PI+HALF_PI,startY,endY);ratioX=(maxX-minX)/2;ratioY=(maxY-minY)/2;offsetX=-(maxX+minX)/2;offsetY=-(maxY+minY)/2;}
+return{ratioX,ratioY,offsetX,offsetY};}
+class DoughnutController extends DatasetController{constructor(chart,datasetIndex){super(chart,datasetIndex);this.enableOptionSharing=true;this.innerRadius=undefined;this.outerRadius=undefined;this.offsetX=undefined;this.offsetY=undefined;}
+linkScales(){}
+parse(start,count){const data=this.getDataset().data;const meta=this._cachedMeta;let i,ilen;for(i=start,ilen=start+count;i0&&!isNaN(value)){return TAU*(Math.abs(value)/total);}
+return 0;}
+getLabelAndValue(index){const me=this;const meta=me._cachedMeta;const chart=me.chart;const labels=chart.data.labels||[];const value=formatNumber(meta._parsed[index],chart.options.locale);return{label:labels[index]||'',value,};}
+getMaxBorderWidth(arcs){const me=this;let max=0;const chart=me.chart;let i,ilen,meta,controller,options;if(!arcs){for(i=0,ilen=chart.data.datasets.length;iname!=='spacing',_indexable:(name)=>name!=='spacing',};DoughnutController.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(chart){const data=chart.data;if(data.labels.length&&data.datasets.length){const{labels:{pointStyle}}=chart.legend.options;return data.labels.map((label,i)=>{const meta=chart.getDatasetMeta(0);const style=meta.controller.getStyle(i);return{text:label,fillStyle:style.backgroundColor,strokeStyle:style.borderColor,lineWidth:style.borderWidth,pointStyle:pointStyle,hidden:!chart.getDataVisibility(i),index:i};});}
+return[];}},onClick(e,legendItem,legend){legend.chart.toggleDataVisibility(legendItem.index);legend.chart.update();}},tooltip:{callbacks:{title(){return'';},label(tooltipItem){let dataLabel=tooltipItem.label;const value=': '+tooltipItem.formattedValue;if(isArray(dataLabel)){dataLabel=dataLabel.slice();dataLabel[0]+=value;}else{dataLabel+=value;}
+return dataLabel;}}}}};class LineController extends DatasetController{initialize(){this.enableOptionSharing=true;super.initialize();}
+update(mode){const me=this;const meta=me._cachedMeta;const{dataset:line,data:points=[],_dataset}=meta;const animationsDisabled=me.chart._animationsDisabled;let{start,count}=getStartAndCountOfVisiblePoints(meta,points,animationsDisabled);me._drawStart=start;me._drawCount=count;if(scaleRangesChanged(meta)){start=0;count=points.length;}
+line._datasetIndex=me.index;line._decimated=!!_dataset._decimated;line.points=points;const options=me.resolveDatasetElementOptions(mode);if(!me.options.showLine){options.borderWidth=0;}
+options.segment=me.options.segment;me.updateElement(line,undefined,{animated:!animationsDisabled,options},mode);me.updateElements(points,start,count,mode);}
+updateElements(points,start,count,mode){const me=this;const reset=mode==='reset';const{iScale,vScale,_stacked}=me._cachedMeta;const firstOpts=me.resolveDataElementOptions(start,mode);const sharedOptions=me.getSharedOptions(firstOpts);const includeOptions=me.includeOptions(mode,sharedOptions);const iAxis=iScale.axis;const vAxis=vScale.axis;const spanGaps=me.options.spanGaps;const maxGapLength=isNumber(spanGaps)?spanGaps:Number.POSITIVE_INFINITY;const directUpdate=me.chart._animationsDisabled||reset||mode==='none';let prevParsed=start>0&&me.getParsed(start-1);for(let i=start;i0&&(parsed[iAxis]-prevParsed[iAxis])>maxGapLength;properties.parsed=parsed;if(includeOptions){properties.options=sharedOptions||me.resolveDataElementOptions(i,point.active?'active':mode);}
+if(!directUpdate){me.updateElement(point,i,properties,mode);}
+prevParsed=parsed;}
+me.updateSharedOptions(sharedOptions,mode,firstOpts);}
+getMaxOverflow(){const me=this;const meta=me._cachedMeta;const dataset=meta.dataset;const border=dataset.options&&dataset.options.borderWidth||0;const data=meta.data||[];if(!data.length){return border;}
+const firstPoint=data[0].size(me.resolveDataElementOptions(0));const lastPoint=data[data.length-1].size(me.resolveDataElementOptions(data.length-1));return Math.max(border,firstPoint,lastPoint)/2;}
+draw(){const meta=this._cachedMeta;meta.dataset.updateControlPoints(this.chart.chartArea,meta.iScale.axis);super.draw();}}
+LineController.id='line';LineController.defaults={datasetElementType:'line',dataElementType:'point',showLine:true,spanGaps:false,};LineController.overrides={scales:{_index_:{type:'category',},_value_:{type:'linear',},}};function getStartAndCountOfVisiblePoints(meta,points,animationsDisabled){const pointCount=points.length;let start=0;let count=pointCount;if(meta._sorted){const{iScale,_parsed}=meta;const axis=iScale.axis;const{min,max,minDefined,maxDefined}=iScale.getUserBounds();if(minDefined){start=_limitValue(Math.min(_lookupByKey(_parsed,iScale.axis,min).lo,animationsDisabled?pointCount:_lookupByKey(points,axis,iScale.getPixelForValue(min)).lo),0,pointCount-1);}
+if(maxDefined){count=_limitValue(Math.max(_lookupByKey(_parsed,iScale.axis,max).hi+1,animationsDisabled?0:_lookupByKey(points,axis,iScale.getPixelForValue(max)).hi+1),start,pointCount)-start;}else{count=pointCount-start;}}
+return{start,count};}
+function scaleRangesChanged(meta){const{xScale,yScale,_scaleRanges}=meta;const newRanges={xmin:xScale.min,xmax:xScale.max,ymin:yScale.min,ymax:yScale.max};if(!_scaleRanges){meta._scaleRanges=newRanges;return true;}
+const changed=_scaleRanges.xmin!==xScale.min||_scaleRanges.xmax!==xScale.max||_scaleRanges.ymin!==yScale.min||_scaleRanges.ymax!==yScale.max;Object.assign(_scaleRanges,newRanges);return changed;}
+class PolarAreaController extends DatasetController{constructor(chart,datasetIndex){super(chart,datasetIndex);this.innerRadius=undefined;this.outerRadius=undefined;}
+getLabelAndValue(index){const me=this;const meta=me._cachedMeta;const chart=me.chart;const labels=chart.data.labels||[];const value=formatNumber(meta._parsed[index].r,chart.options.locale);return{label:labels[index]||'',value,};}
+update(mode){const arcs=this._cachedMeta.data;this._updateRadius();this.updateElements(arcs,0,arcs.length,mode);}
+_updateRadius(){const me=this;const chart=me.chart;const chartArea=chart.chartArea;const opts=chart.options;const minSize=Math.min(chartArea.right-chartArea.left,chartArea.bottom-chartArea.top);const outerRadius=Math.max(minSize/2,0);const innerRadius=Math.max(opts.cutoutPercentage?(outerRadius/100)*(opts.cutoutPercentage):1,0);const radiusLength=(outerRadius-innerRadius)/chart.getVisibleDatasetCount();me.outerRadius=outerRadius-(radiusLength*me.index);me.innerRadius=me.outerRadius-radiusLength;}
+updateElements(arcs,start,count,mode){const me=this;const reset=mode==='reset';const chart=me.chart;const dataset=me.getDataset();const opts=chart.options;const animationOpts=opts.animation;const scale=me._cachedMeta.rScale;const centerX=scale.xCenter;const centerY=scale.yCenter;const datasetStartAngle=scale.getIndexAngle(0)-0.5*PI;let angle=datasetStartAngle;let i;const defaultAngle=360/me.countVisibleElements();for(i=0;i{if(!isNaN(dataset.data[index])&&this.chart.getDataVisibility(index)){count++;}});return count;}
+_computeAngle(index,mode,defaultAngle){return this.chart.getDataVisibility(index)?toRadians(this.resolveDataElementOptions(index,mode).angle||defaultAngle):0;}}
+PolarAreaController.id='polarArea';PolarAreaController.defaults={dataElementType:'arc',animation:{animateRotate:true,animateScale:true},animations:{numbers:{type:'number',properties:['x','y','startAngle','endAngle','innerRadius','outerRadius']},},indexAxis:'r',startAngle:0,};PolarAreaController.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(chart){const data=chart.data;if(data.labels.length&&data.datasets.length){const{labels:{pointStyle}}=chart.legend.options;return data.labels.map((label,i)=>{const meta=chart.getDatasetMeta(0);const style=meta.controller.getStyle(i);return{text:label,fillStyle:style.backgroundColor,strokeStyle:style.borderColor,lineWidth:style.borderWidth,pointStyle:pointStyle,hidden:!chart.getDataVisibility(i),index:i};});}
+return[];}},onClick(e,legendItem,legend){legend.chart.toggleDataVisibility(legendItem.index);legend.chart.update();}},tooltip:{callbacks:{title(){return'';},label(context){return context.chart.data.labels[context.dataIndex]+': '+context.formattedValue;}}}},scales:{r:{type:'radialLinear',angleLines:{display:false},beginAtZero:true,grid:{circular:true},pointLabels:{display:false},startAngle:0}}};class PieController extends DoughnutController{}
+PieController.id='pie';PieController.defaults={cutout:0,rotation:0,circumference:360,radius:'100%'};class RadarController extends DatasetController{getLabelAndValue(index){const me=this;const vScale=me._cachedMeta.vScale;const parsed=me.getParsed(index);return{label:vScale.getLabels()[index],value:''+vScale.getLabelForValue(parsed[vScale.axis])};}
+update(mode){const me=this;const meta=me._cachedMeta;const line=meta.dataset;const points=meta.data||[];const labels=meta.iScale.getLabels();line.points=points;if(mode!=='resize'){const options=me.resolveDatasetElementOptions(mode);if(!me.options.showLine){options.borderWidth=0;}
+const properties={_loop:true,_fullLoop:labels.length===points.length,options};me.updateElement(line,undefined,properties,mode);}
+me.updateElements(points,0,points.length,mode);}
+updateElements(points,start,count,mode){const me=this;const dataset=me.getDataset();const scale=me._cachedMeta.rScale;const reset=mode==='reset';for(let i=start;ipixelMargin){angleMargin=pixelMargin/innerRadius;ctx.arc(x,y,innerRadius,endAngle+angleMargin,startAngle-angleMargin,true);}else{ctx.arc(x,y,pixelMargin,endAngle+HALF_PI,startAngle-HALF_PI);}
+ctx.closePath();ctx.clip();}
+function toRadiusCorners(value){return _readValueToProps(value,['outerStart','outerEnd','innerStart','innerEnd']);}
+function parseBorderRadius$1(arc,innerRadius,outerRadius,angleDelta){const o=toRadiusCorners(arc.options.borderRadius);const halfThickness=(outerRadius-innerRadius)/2;const innerLimit=Math.min(halfThickness,angleDelta*innerRadius/2);const computeOuterLimit=(val)=>{const outerArcLimit=(outerRadius-Math.min(halfThickness,val))*angleDelta/2;return _limitValue(val,0,Math.min(halfThickness,outerArcLimit));};return{outerStart:computeOuterLimit(o.outerStart),outerEnd:computeOuterLimit(o.outerEnd),innerStart:_limitValue(o.innerStart,0,innerLimit),innerEnd:_limitValue(o.innerEnd,0,innerLimit),};}
+function rThetaToXY(r,theta,x,y){return{x:x+r*Math.cos(theta),y:y+r*Math.sin(theta),};}
+function pathArc(ctx,element,offset,spacing,end){const{x,y,startAngle:start,pixelMargin,innerRadius:innerR}=element;const outerRadius=Math.max(element.outerRadius+spacing+offset-pixelMargin,0);const innerRadius=innerR>0?innerR+spacing+offset+pixelMargin:0;let spacingOffset=0;const alpha=end-start;if(spacing){const noSpacingInnerRadius=innerR>0?innerR-spacing:0;const noSpacingOuterRadius=outerRadius>0?outerRadius-spacing:0;const avNogSpacingRadius=(noSpacingInnerRadius+noSpacingOuterRadius)/2;const adjustedAngle=avNogSpacingRadius!==0?(alpha*avNogSpacingRadius)/(avNogSpacingRadius+spacing):alpha;spacingOffset=(alpha-adjustedAngle)/2;}
+const beta=Math.max(0.001,alpha*outerRadius-offset/PI)/outerRadius;const angleOffset=(alpha-beta)/2;const startAngle=start+angleOffset+spacingOffset;const endAngle=end-angleOffset-spacingOffset;const{outerStart,outerEnd,innerStart,innerEnd}=parseBorderRadius$1(element,innerRadius,outerRadius,endAngle-startAngle);const outerStartAdjustedRadius=outerRadius-outerStart;const outerEndAdjustedRadius=outerRadius-outerEnd;const outerStartAdjustedAngle=startAngle+outerStart/outerStartAdjustedRadius;const outerEndAdjustedAngle=endAngle-outerEnd/outerEndAdjustedRadius;const innerStartAdjustedRadius=innerRadius+innerStart;const innerEndAdjustedRadius=innerRadius+innerEnd;const innerStartAdjustedAngle=startAngle+innerStart/innerStartAdjustedRadius;const innerEndAdjustedAngle=endAngle-innerEnd/innerEndAdjustedRadius;ctx.beginPath();ctx.arc(x,y,outerRadius,outerStartAdjustedAngle,outerEndAdjustedAngle);if(outerEnd>0){const pCenter=rThetaToXY(outerEndAdjustedRadius,outerEndAdjustedAngle,x,y);ctx.arc(pCenter.x,pCenter.y,outerEnd,outerEndAdjustedAngle,endAngle+HALF_PI);}
+const p4=rThetaToXY(innerEndAdjustedRadius,endAngle,x,y);ctx.lineTo(p4.x,p4.y);if(innerEnd>0){const pCenter=rThetaToXY(innerEndAdjustedRadius,innerEndAdjustedAngle,x,y);ctx.arc(pCenter.x,pCenter.y,innerEnd,endAngle+HALF_PI,innerEndAdjustedAngle+Math.PI);}
+ctx.arc(x,y,innerRadius,endAngle-(innerEnd/innerRadius),startAngle+(innerStart/innerRadius),true);if(innerStart>0){const pCenter=rThetaToXY(innerStartAdjustedRadius,innerStartAdjustedAngle,x,y);ctx.arc(pCenter.x,pCenter.y,innerStart,innerStartAdjustedAngle+Math.PI,startAngle-HALF_PI);}
+const p8=rThetaToXY(outerStartAdjustedRadius,startAngle,x,y);ctx.lineTo(p8.x,p8.y);if(outerStart>0){const pCenter=rThetaToXY(outerStartAdjustedRadius,outerStartAdjustedAngle,x,y);ctx.arc(pCenter.x,pCenter.y,outerStart,startAngle-HALF_PI,outerStartAdjustedAngle);}
+ctx.closePath();}
+function drawArc(ctx,element,offset,spacing){const{fullCircles,startAngle,circumference}=element;let endAngle=element.endAngle;if(fullCircles){pathArc(ctx,element,offset,spacing,startAngle+TAU);for(let i=0;i=TAU||_angleBetween(angle,startAngle,endAngle);const withinRadius=(distance>=innerRadius+rAdjust&&distance<=outerRadius+rAdjust);return(betweenAngles&&withinRadius);}
+getCenterPoint(useFinalPosition){const{x,y,startAngle,endAngle,innerRadius,outerRadius}=this.getProps(['x','y','startAngle','endAngle','innerRadius','outerRadius','circumference',],useFinalPosition);const{offset,spacing}=this.options;const halfAngle=(startAngle+endAngle)/2;const halfRadius=(innerRadius+outerRadius+spacing+offset)/2;return{x:x+Math.cos(halfAngle)*halfRadius,y:y+Math.sin(halfAngle)*halfRadius};}
+tooltipPosition(useFinalPosition){return this.getCenterPoint(useFinalPosition);}
+draw(ctx){const me=this;const{options,circumference}=me;const offset=(options.offset||0)/2;const spacing=(options.spacing||0)/2;me.pixelMargin=(options.borderAlign==='inner')?0.33:0;me.fullCircles=circumference>TAU?Math.floor(circumference/TAU):0;if(circumference===0||me.innerRadius<0||me.outerRadius<0){return;}
+ctx.save();let radiusOffset=0;if(offset){radiusOffset=offset/2;const halfAngle=(me.startAngle+me.endAngle)/2;ctx.translate(Math.cos(halfAngle)*radiusOffset,Math.sin(halfAngle)*radiusOffset);if(me.circumference>=PI){radiusOffset=offset;}}
+ctx.fillStyle=options.backgroundColor;ctx.strokeStyle=options.borderColor;const endAngle=drawArc(ctx,me,radiusOffset,spacing);drawBorder(ctx,me,radiusOffset,spacing,endAngle);ctx.restore();}}
+ArcElement.id='arc';ArcElement.defaults={borderAlign:'center',borderColor:'#fff',borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:undefined,};ArcElement.defaultRoutes={backgroundColor:'backgroundColor'};function setStyle(ctx,options,style=options){ctx.lineCap=valueOrDefault(style.borderCapStyle,options.borderCapStyle);ctx.setLineDash(valueOrDefault(style.borderDash,options.borderDash));ctx.lineDashOffset=valueOrDefault(style.borderDashOffset,options.borderDashOffset);ctx.lineJoin=valueOrDefault(style.borderJoinStyle,options.borderJoinStyle);ctx.lineWidth=valueOrDefault(style.borderWidth,options.borderWidth);ctx.strokeStyle=valueOrDefault(style.borderColor,options.borderColor);}
+function lineTo(ctx,previous,target){ctx.lineTo(target.x,target.y);}
+function getLineMethod(options){if(options.stepped){return _steppedLineTo;}
+if(options.tension||options.cubicInterpolationMode==='monotone'){return _bezierCurveTo;}
+return lineTo;}
+function pathVars(points,segment,params={}){const count=points.length;const{start:paramsStart=0,end:paramsEnd=count-1}=params;const{start:segmentStart,end:segmentEnd}=segment;const start=Math.max(paramsStart,segmentStart);const end=Math.min(paramsEnd,segmentEnd);const outside=paramsStartsegmentEnd&¶msEnd>segmentEnd;return{count,start,loop:segment.loop,ilen:end(start+(reverse?ilen-index:index))%count;const drawX=()=>{if(minY!==maxY){ctx.lineTo(avgX,maxY);ctx.lineTo(avgX,minY);ctx.lineTo(avgX,lastY);}};if(move){point=points[pointIndex(0)];ctx.moveTo(point.x,point.y);}
+for(i=0;i<=ilen;++i){point=points[pointIndex(i)];if(point.skip){continue;}
+const x=point.x;const y=point.y;const truncX=x|0;if(truncX===prevX){if(ymaxY){maxY=y;}
+avgX=(countX*avgX+x)/++countX;}else{drawX();ctx.lineTo(x,y);prevX=truncX;countX=0;minY=maxY=y;}
+lastY=y;}
+drawX();}
+function _getSegmentMethod(line){const opts=line.options;const borderDash=opts.borderDash&&opts.borderDash.length;const useFastPath=!line._decimated&&!line._loop&&!opts.tension&&opts.cubicInterpolationMode!=='monotone'&&!opts.stepped&&!borderDash;return useFastPath?fastPathSegment:pathSegment;}
+function _getInterpolationMethod(options){if(options.stepped){return _steppedInterpolation;}
+if(options.tension||options.cubicInterpolationMode==='monotone'){return _bezierInterpolation;}
+return _pointInLine;}
+function strokePathWithCache(ctx,line,start,count){let path=line._path;if(!path){path=line._path=new Path2D();if(line.path(path,start,count)){path.closePath();}}
+setStyle(ctx,line.options);ctx.stroke(path);}
+function strokePathDirect(ctx,line,start,count){const{segments,options}=line;const segmentMethod=_getSegmentMethod(line);for(const segment of segments){setStyle(ctx,options,segment.style);ctx.beginPath();if(segmentMethod(ctx,line,segment,{start,end:start+count-1})){ctx.closePath();}
+ctx.stroke();}}
+const usePath2D=typeof Path2D==='function';function draw(ctx,line,start,count){if(usePath2D&&line.segments.length===1){strokePathWithCache(ctx,line,start,count);}else{strokePathDirect(ctx,line,start,count);}}
+class LineElement extends Element{constructor(cfg){super();this.animated=true;this.options=undefined;this._loop=undefined;this._fullLoop=undefined;this._path=undefined;this._points=undefined;this._segments=undefined;this._decimated=false;this._pointsUpdated=false;this._datasetIndex=undefined;if(cfg){Object.assign(this,cfg);}}
+updateControlPoints(chartArea,indexAxis){const me=this;const options=me.options;if((options.tension||options.cubicInterpolationMode==='monotone')&&!options.stepped&&!me._pointsUpdated){const loop=options.spanGaps?me._loop:me._fullLoop;_updateBezierControlPoints(me._points,options,chartArea,loop,indexAxis);me._pointsUpdated=true;}}
+set points(points){const me=this;me._points=points;delete me._segments;delete me._path;me._pointsUpdated=false;}
+get points(){return this._points;}
+get segments(){return this._segments||(this._segments=_computeSegments(this,this.options.segment));}
+first(){const segments=this.segments;const points=this.points;return segments.length&&points[segments[0].start];}
+last(){const segments=this.segments;const points=this.points;const count=segments.length;return count&&points[segments[count-1].end];}
+interpolate(point,property){const me=this;const options=me.options;const value=point[property];const points=me.points;const segments=_boundSegments(me,{property,start:value,end:value});if(!segments.length){return;}
+const result=[];const _interpolate=_getInterpolationMethod(options);let i,ilen;for(i=0,ilen=segments.length;iname!=='borderDash'&&name!=='fill',};function inRange$1(el,pos,axis,useFinalPosition){const options=el.options;const{[axis]:value}=el.getProps([axis],useFinalPosition);return(Math.abs(pos-value)=bounds.left&&x<=bounds.right)&&(skipY||y>=bounds.top&&y<=bounds.bottom);}
+function hasRadius(radius){return radius.topLeft||radius.topRight||radius.bottomLeft||radius.bottomRight;}
+function addNormalRectPath(ctx,rect){ctx.rect(rect.x,rect.y,rect.w,rect.h);}
+function inflateRect(rect,amount,refRect={}){const x=rect.x!==refRect.x?-amount:0;const y=rect.y!==refRect.y?-amount:0;const w=(rect.x+rect.w!==refRect.x+refRect.w?amount:0)-x;const h=(rect.y+rect.h!==refRect.y+refRect.h?amount:0)-y;return{x:rect.x+x,y:rect.y+y,w:rect.w+w,h:rect.h+h,radius:rect.radius};}
+class BarElement extends Element{constructor(cfg){super();this.options=undefined;this.horizontal=undefined;this.base=undefined;this.width=undefined;this.height=undefined;if(cfg){Object.assign(this,cfg);}}
+draw(ctx){const options=this.options;const{inner,outer}=boundingRects(this);const addRectPath=hasRadius(outer.radius)?addRoundedRectPath:addNormalRectPath;const inflateAmount=0.33;ctx.save();if(outer.w!==inner.w||outer.h!==inner.h){ctx.beginPath();addRectPath(ctx,inflateRect(outer,inflateAmount,inner));ctx.clip();addRectPath(ctx,inflateRect(inner,-inflateAmount,outer));ctx.fillStyle=options.borderColor;ctx.fill('evenodd');}
+ctx.beginPath();addRectPath(ctx,inflateRect(inner,inflateAmount,outer));ctx.fillStyle=options.backgroundColor;ctx.fill();ctx.restore();}
+inRange(mouseX,mouseY,useFinalPosition){return inRange(this,mouseX,mouseY,useFinalPosition);}
+inXRange(mouseX,useFinalPosition){return inRange(this,mouseX,null,useFinalPosition);}
+inYRange(mouseY,useFinalPosition){return inRange(this,null,mouseY,useFinalPosition);}
+getCenterPoint(useFinalPosition){const{x,y,base,horizontal}=this.getProps(['x','y','base','horizontal'],useFinalPosition);return{x:horizontal?(x+base)/2:x,y:horizontal?y:(y+base)/2};}
+getRange(axis){return axis==='x'?this.width/2:this.height/2;}}
+BarElement.id='bar';BarElement.defaults={borderSkipped:'start',borderWidth:0,borderRadius:0,enableBorderRadius:true,pointStyle:undefined};BarElement.defaultRoutes={backgroundColor:'backgroundColor',borderColor:'borderColor'};var elements=Object.freeze({__proto__:null,ArcElement:ArcElement,LineElement:LineElement,PointElement:PointElement,BarElement:BarElement});function lttbDecimation(data,start,count,availableWidth,options){const samples=options.samples||availableWidth;if(samples>=count){return data.slice(start,start+count);}
+const decimated=[];const bucketWidth=(count-2)/(samples-2);let sampledIndex=0;const endIndex=start+count-1;let a=start;let i,maxAreaPoint,maxArea,area,nextA;decimated[sampledIndex++]=data[a];for(i=0;imaxArea){maxArea=area;maxAreaPoint=data[j];nextA=j;}}
+decimated[sampledIndex++]=maxAreaPoint;a=nextA;}
+decimated[sampledIndex++]=data[endIndex];return decimated;}
+function minMaxDecimation(data,start,count,availableWidth){let avgX=0;let countX=0;let i,point,x,y,prevX,minIndex,maxIndex,startIndex,minY,maxY;const decimated=[];const endIndex=start+count-1;const xMin=data[start].x;const xMax=data[endIndex].x;const dx=xMax-xMin;for(i=start;imaxY){maxY=y;maxIndex=i;}
+avgX=(countX*avgX+point.x)/++countX;}else{const lastIndex=i-1;if(!isNullOrUndef(minIndex)&&!isNullOrUndef(maxIndex)){const intermediateIndex1=Math.min(minIndex,maxIndex);const intermediateIndex2=Math.max(minIndex,maxIndex);if(intermediateIndex1!==startIndex&&intermediateIndex1!==lastIndex){decimated.push({...data[intermediateIndex1],x:avgX,});}
+if(intermediateIndex2!==startIndex&&intermediateIndex2!==lastIndex){decimated.push({...data[intermediateIndex2],x:avgX});}}
+if(i>0&&lastIndex!==startIndex){decimated.push(data[lastIndex]);}
+decimated.push(point);prevX=truncX;countX=0;minY=maxY=y;minIndex=maxIndex=startIndex=i;}}
+return decimated;}
+function cleanDecimatedDataset(dataset){if(dataset._decimated){const data=dataset._data;delete dataset._decimated;delete dataset._data;Object.defineProperty(dataset,'data',{value:data});}}
+function cleanDecimatedData(chart){chart.data.datasets.forEach((dataset)=>{cleanDecimatedDataset(dataset);});}
+function getStartAndCountOfVisiblePointsSimplified(meta,points){const pointCount=points.length;let start=0;let count;const{iScale}=meta;const{min,max,minDefined,maxDefined}=iScale.getUserBounds();if(minDefined){start=_limitValue(_lookupByKey(points,iScale.axis,min).lo,0,pointCount-1);}
+if(maxDefined){count=_limitValue(_lookupByKey(points,iScale.axis,max).hi+1,start,pointCount)-start;}else{count=pointCount-start;}
+return{start,count};}
+var plugin_decimation={id:'decimation',defaults:{algorithm:'min-max',enabled:false,},beforeElementsUpdate:(chart,args,options)=>{if(!options.enabled){cleanDecimatedData(chart);return;}
+const availableWidth=chart.width;chart.data.datasets.forEach((dataset,datasetIndex)=>{const{_data,indexAxis}=dataset;const meta=chart.getDatasetMeta(datasetIndex);const data=_data||dataset.data;if(resolve([indexAxis,chart.options.indexAxis])==='y'){return;}
+if(meta.type!=='line'){return;}
+const xAxis=chart.scales[meta.xAxisID];if(xAxis.type!=='linear'&&xAxis.type!=='time'){return;}
+if(chart.options.parsing){return;}
+let{start,count}=getStartAndCountOfVisiblePointsSimplified(meta,data);const threshold=options.threshold||4*availableWidth;if(count<=threshold){cleanDecimatedDataset(dataset);return;}
+if(isNullOrUndef(_data)){dataset._data=data;delete dataset.data;Object.defineProperty(dataset,'data',{configurable:true,enumerable:true,get:function(){return this._decimated;},set:function(d){this._data=d;}});}
+let decimated;switch(options.algorithm){case'lttb':decimated=lttbDecimation(data,start,count,availableWidth,options);break;case'min-max':decimated=minMaxDecimation(data,start,count,availableWidth);break;default:throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);}
+dataset._decimated=decimated;});},destroy(chart){cleanDecimatedData(chart);}};function getLineByIndex(chart,index){const meta=chart.getDatasetMeta(index);const visible=meta&&chart.isDatasetVisible(index);return visible?meta.dataset:null;}
+function parseFillOption(line){const options=line.options;const fillOption=options.fill;let fill=valueOrDefault(fillOption&&fillOption.target,fillOption);if(fill===undefined){fill=!!options.backgroundColor;}
if(fill===false||fill===null){return false;}
if(fill===true){return'origin';}
-target=parseFloat(fill,10);if(isFinite(target)&&Math.floor(target)===target){if(fill[0]==='-'||fill[0]==='+'){target=index+target;}
+return fill;}
+function decodeFill(line,index,count){const fill=parseFillOption(line);if(isObject(fill)){return isNaN(fill.value)?false:fill;}
+let target=parseFloat(fill);if(isNumberFinite(target)&&Math.floor(target)===target){if(fill[0]==='-'||fill[0]==='+'){target=index+target;}
if(target===index||target<0||target>=count){return false;}
return target;}
-switch(fill){case'bottom':return'start';case'top':return'end';case'zero':return'origin';case'origin':case'start':case'end':return fill;default:return false;}}
-function computeLinearBoundary(source){var model=source.el._model||{};var scale=source.el._scale||{};var fill=source.fill;var target=null;var horizontal;if(isFinite(fill)){return null;}
-if(fill==='start'){target=model.scaleBottom===undefined?scale.bottom:model.scaleBottom;}else if(fill==='end'){target=model.scaleTop===undefined?scale.top:model.scaleTop;}else if(model.scaleZero!==undefined){target=model.scaleZero;}else if(scale.getBasePixel){target=scale.getBasePixel();}
-if(target!==undefined&&target!==null){if(target.x!==undefined&&target.y!==undefined){return target;}
-if(helpers$1.isFinite(target)){horizontal=scale.isHorizontal();return{x:horizontal?target:null,y:horizontal?null:target};}}
+return['origin','start','end','stack','shape'].indexOf(fill)>=0&&fill;}
+function computeLinearBoundary(source){const{scale={},fill}=source;let target=null;let horizontal;if(fill==='start'){target=scale.bottom;}else if(fill==='end'){target=scale.top;}else if(isObject(fill)){target=scale.getPixelForValue(fill.value);}else if(scale.getBasePixel){target=scale.getBasePixel();}
+if(isNumberFinite(target)){horizontal=scale.isHorizontal();return{x:horizontal?target:null,y:horizontal?null:target};}
return null;}
-function computeCircularBoundary(source){var scale=source.el._scale;var options=scale.options;var length=scale.chart.data.labels.length;var fill=source.fill;var target=[];var start,end,center,i,point;if(!length){return null;}
-start=options.ticks.reverse?scale.max:scale.min;end=options.ticks.reverse?scale.min:scale.max;center=scale.getPointPositionForValue(0,start);for(i=0;istart;end--){const point=points[end];if(!isNaN(point.x)&&!isNaN(point.y)){break;}}
+return end;}
+function pointsFromSegments(boundary,line){const{x=null,y=null}=boundary||{};const linePoints=line.points;const points=[];line.segments.forEach(({start,end})=>{end=findSegmentEnd(start,end,linePoints);const first=linePoints[start];const last=linePoints[end];if(y!==null){points.push({x:first.x,y});points.push({x:last.x,y});}else if(x!==null){points.push({x,y:first.y});points.push({x,y:last.y});}});return points;}
+function buildStackLine(source){const{chart,scale,index,line}=source;const points=[];const segments=line.segments;const sourcePoints=line.points;const linesBelow=getLinesBelow(chart,index);linesBelow.push(createBoundaryLine({x:null,y:scale.bottom},line));for(let i=0;imeta.type==='line'&&!meta.hidden;function getLinesBelow(chart,index){const below=[];const metas=chart.getSortedVisibleDatasetMetas();for(let i=0;i=firstValue&&pointValue<=lastValue){first=pointValue===firstValue;last=pointValue===lastValue;break;}}
+return{first,last,point};}
+function getTarget(source){const{chart,fill,line}=source;if(isNumberFinite(fill)){return getLineByIndex(chart,fill);}
+if(fill==='stack'){return buildStackLine(source);}
+if(fill==='shape'){return true;}
+const boundary=computeBoundary(source);if(boundary instanceof simpleArc){return boundary;}
+return createBoundaryLine(boundary,line);}
+function createBoundaryLine(boundary,line){let points=[];let _loop=false;if(isArray(boundary)){_loop=true;points=boundary;}else{points=pointsFromSegments(boundary,line);}
+return points.length?new LineElement({points,options:{tension:0},_loop,_fullLoop:_loop}):null;}
+function resolveTarget(sources,index,propagate){const source=sources[index];let fill=source.fill;const visited=[index];let target;if(!propagate){return fill;}
+while(fill!==false&&visited.indexOf(fill)===-1){if(!isNumberFinite(fill)){return fill;}
target=sources[fill];if(!target){return false;}
if(target.visible){return fill;}
visited.push(fill);fill=target.fill;}
return false;}
-function createMapper(source){var fill=source.fill;var type='dataset';if(fill===false){return null;}
-if(!isFinite(fill)){type='boundary';}
-return mappers[type](source);}
-function isDrawable(point){return point&&!point.skip;}
-function drawArea(ctx,curve0,curve1,len0,len1){var i,cx,cy,r;if(!len0||!len1){return;}
-ctx.moveTo(curve0[0].x,curve0[0].y);for(i=1;i0;--i){ctx.arc(cx,cy,r,curve1[i].angle,curve1[i-1].angle,true);}
-return;}
-ctx.lineTo(curve1[len1-1].x,curve1[len1-1].y);for(i=len1-1;i>0;--i){helpers$1.canvas.lineTo(ctx,curve1[i],curve1[i-1],true);}}
-function doFill(ctx,points,mapper,view,color,loop){var count=points.length;var span=view.spanGaps;var curve0=[];var curve1=[];var len0=0;var len1=0;var i,ilen,index,p0,p1,d0,d1,loopOffset;ctx.beginPath();for(i=0,ilen=count;i=0;--i){meta=metasets[i].$filler;if(!meta||!meta.visible){continue;}
-el=meta.el;view=el._view;points=el._children||[];mapper=meta.mapper;color=view.backgroundColor||core_defaults.global.defaultColor;if(mapper&&color&&points.length){helpers$1.canvas.clipArea(ctx,chart.chartArea);doFill(ctx,points,mapper,view,color,el._loop);helpers$1.canvas.unclipArea(ctx);}}}};var getRtlHelper$1=helpers$1.rtl.getRtlAdapter;var noop$1=helpers$1.noop;var valueOrDefault$e=helpers$1.valueOrDefault;core_defaults._set('global',{legend:{display:true,position:'top',align:'center',fullWidth:true,reverse:false,weight:1000,onClick:function(e,legendItem){var index=legendItem.datasetIndex;var ci=this.chart;var meta=ci.getDatasetMeta(index);meta.hidden=meta.hidden===null?!ci.data.datasets[index].hidden:null;ci.update();},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(chart){var datasets=chart.data.datasets;var options=chart.options.legend||{};var usePointStyle=options.labels&&options.labels.usePointStyle;return chart._getSortedDatasetMetas().map(function(meta){var style=meta.controller.getStyle(usePointStyle?0:undefined);return{text:datasets[meta.index].label,fillStyle:style.backgroundColor,hidden:!chart.isDatasetVisible(meta.index),lineCap:style.borderCapStyle,lineDash:style.borderDash,lineDashOffset:style.borderDashOffset,lineJoin:style.borderJoinStyle,lineWidth:style.borderWidth,strokeStyle:style.borderColor,pointStyle:style.pointStyle,rotation:style.rotation,datasetIndex:meta.index};},this);}}},legendCallback:function(chart){var list=document.createElement('ul');var datasets=chart.data.datasets;var i,ilen,listItem,listItemSpan;list.setAttribute('class',chart.id+'-legend');for(i=0,ilen=datasets.length;ifontSize?fontSize:labelOpts.boxWidth;}
-var Legend=core_element.extend({initialize:function(config){var me=this;helpers$1.extend(me,config);me.legendHitBoxes=[];me._hoveredItem=null;me.doughnutMode=false;},beforeUpdate:noop$1,update:function(maxWidth,maxHeight,margins){var me=this;me.beforeUpdate();me.maxWidth=maxWidth;me.maxHeight=maxHeight;me.margins=margins;me.beforeSetDimensions();me.setDimensions();me.afterSetDimensions();me.beforeBuildLabels();me.buildLabels();me.afterBuildLabels();me.beforeFit();me.fit();me.afterFit();me.afterUpdate();return me.minSize;},afterUpdate:noop$1,beforeSetDimensions:noop$1,setDimensions:function(){var me=this;if(me.isHorizontal()){me.width=me.maxWidth;me.left=0;me.right=me.width;}else{me.height=me.maxHeight;me.top=0;me.bottom=me.height;}
-me.paddingLeft=0;me.paddingTop=0;me.paddingRight=0;me.paddingBottom=0;me.minSize={width:0,height:0};},afterSetDimensions:noop$1,beforeBuildLabels:noop$1,buildLabels:function(){var me=this;var labelOpts=me.options.labels||{};var legendItems=helpers$1.callback(labelOpts.generateLabels,[me.chart],me)||[];if(labelOpts.filter){legendItems=legendItems.filter(function(item){return labelOpts.filter(item,me.chart.data);});}
+for(i=0;i=0;--i){const source=metasets[i].$filler;if(!source){continue;}
+source.line.updateControlPoints(area,source.axis);if(draw){drawfill(chart.ctx,source,area);}}},beforeDatasetsDraw(chart,_args,options){if(options.drawTime!=='beforeDatasetsDraw'){return;}
+const metasets=chart.getSortedVisibleDatasetMetas();for(let i=metasets.length-1;i>=0;--i){const source=metasets[i].$filler;if(source){drawfill(chart.ctx,source,chart.chartArea);}}},beforeDatasetDraw(chart,args,options){const source=args.meta.$filler;if(!source||source.fill===false||options.drawTime!=='beforeDatasetDraw'){return;}
+drawfill(chart.ctx,source,chart.chartArea);},defaults:{propagate:true,drawTime:'beforeDatasetDraw'}};const getBoxSize=(labelOpts,fontSize)=>{let{boxHeight=fontSize,boxWidth=fontSize}=labelOpts;if(labelOpts.usePointStyle){boxHeight=Math.min(boxHeight,fontSize);boxWidth=Math.min(boxWidth,fontSize);}
+return{boxWidth,boxHeight,itemHeight:Math.max(fontSize,boxHeight)};};const itemsEqual=(a,b)=>a!==null&&b!==null&&a.datasetIndex===b.datasetIndex&&a.index===b.index;class Legend extends Element{constructor(config){super();this._added=false;this.legendHitBoxes=[];this._hoveredItem=null;this.doughnutMode=false;this.chart=config.chart;this.options=config.options;this.ctx=config.ctx;this.legendItems=undefined;this.columnSizes=undefined;this.lineWidths=undefined;this.maxHeight=undefined;this.maxWidth=undefined;this.top=undefined;this.bottom=undefined;this.left=undefined;this.right=undefined;this.height=undefined;this.width=undefined;this._margins=undefined;this.position=undefined;this.weight=undefined;this.fullSize=undefined;}
+update(maxWidth,maxHeight,margins){const me=this;me.maxWidth=maxWidth;me.maxHeight=maxHeight;me._margins=margins;me.setDimensions();me.buildLabels();me.fit();}
+setDimensions(){const me=this;if(me.isHorizontal()){me.width=me.maxWidth;me.left=me._margins.left;me.right=me.width;}else{me.height=me.maxHeight;me.top=me._margins.top;me.bottom=me.height;}}
+buildLabels(){const me=this;const labelOpts=me.options.labels||{};let legendItems=callback(labelOpts.generateLabels,[me.chart],me)||[];if(labelOpts.filter){legendItems=legendItems.filter((item)=>labelOpts.filter(item,me.chart.data));}
+if(labelOpts.sort){legendItems=legendItems.sort((a,b)=>labelOpts.sort(a,b,me.chart.data));}
if(me.options.reverse){legendItems.reverse();}
-me.legendItems=legendItems;},afterBuildLabels:noop$1,beforeFit:noop$1,fit:function(){var me=this;var opts=me.options;var labelOpts=opts.labels;var display=opts.display;var ctx=me.ctx;var labelFont=helpers$1.options._parseFont(labelOpts);var fontSize=labelFont.size;var hitboxes=me.legendHitBoxes=[];var minSize=me.minSize;var isHorizontal=me.isHorizontal();if(isHorizontal){minSize.width=me.maxWidth;minSize.height=display?10:0;}else{minSize.width=display?10:0;minSize.height=me.maxHeight;}
-if(!display){me.width=minSize.width=me.height=minSize.height=0;return;}
-ctx.font=labelFont.string;if(isHorizontal){var lineWidths=me.lineWidths=[0];var totalHeight=0;ctx.textAlign='left';ctx.textBaseline='middle';helpers$1.each(me.legendItems,function(legendItem,i){var boxWidth=getBoxWidth(labelOpts,fontSize);var width=boxWidth+(fontSize/2)+ctx.measureText(legendItem.text).width;if(i===0||lineWidths[lineWidths.length-1]+width+2*labelOpts.padding>minSize.width){totalHeight+=fontSize+labelOpts.padding;lineWidths[lineWidths.length-(i>0?0:1)]=0;}
-hitboxes[i]={left:0,top:0,width:width,height:fontSize};lineWidths[lineWidths.length-1]+=width+labelOpts.padding;});minSize.height+=totalHeight;}else{var vPadding=labelOpts.padding;var columnWidths=me.columnWidths=[];var columnHeights=me.columnHeights=[];var totalWidth=labelOpts.padding;var currentColWidth=0;var currentColHeight=0;helpers$1.each(me.legendItems,function(legendItem,i){var boxWidth=getBoxWidth(labelOpts,fontSize);var itemWidth=boxWidth+(fontSize/2)+ctx.measureText(legendItem.text).width;if(i>0&¤tColHeight+fontSize+2*vPadding>minSize.height){totalWidth+=currentColWidth+labelOpts.padding;columnWidths.push(currentColWidth);columnHeights.push(currentColHeight);currentColWidth=0;currentColHeight=0;}
-currentColWidth=Math.max(currentColWidth,itemWidth);currentColHeight+=fontSize+vPadding;hitboxes[i]={left:0,top:0,width:itemWidth,height:fontSize};});totalWidth+=currentColWidth;columnWidths.push(currentColWidth);columnHeights.push(currentColHeight);minSize.width+=totalWidth;}
-me.width=minSize.width;me.height=minSize.height;},afterFit:noop$1,isHorizontal:function(){return this.options.position==='top'||this.options.position==='bottom';},draw:function(){var me=this;var opts=me.options;var labelOpts=opts.labels;var globalDefaults=core_defaults.global;var defaultColor=globalDefaults.defaultColor;var lineDefault=globalDefaults.elements.line;var legendHeight=me.height;var columnHeights=me.columnHeights;var legendWidth=me.width;var lineWidths=me.lineWidths;if(!opts.display){return;}
-var rtlHelper=getRtlHelper$1(opts.rtl,me.left,me.minSize.width);var ctx=me.ctx;var fontColor=valueOrDefault$e(labelOpts.fontColor,globalDefaults.defaultFontColor);var labelFont=helpers$1.options._parseFont(labelOpts);var fontSize=labelFont.size;var cursor;ctx.textAlign=rtlHelper.textAlign('left');ctx.textBaseline='middle';ctx.lineWidth=0.5;ctx.strokeStyle=fontColor;ctx.fillStyle=fontColor;ctx.font=labelFont.string;var boxWidth=getBoxWidth(labelOpts,fontSize);var hitboxes=me.legendHitBoxes;var drawLegendBox=function(x,y,legendItem){if(isNaN(boxWidth)||boxWidth<=0){return;}
-ctx.save();var lineWidth=valueOrDefault$e(legendItem.lineWidth,lineDefault.borderWidth);ctx.fillStyle=valueOrDefault$e(legendItem.fillStyle,defaultColor);ctx.lineCap=valueOrDefault$e(legendItem.lineCap,lineDefault.borderCapStyle);ctx.lineDashOffset=valueOrDefault$e(legendItem.lineDashOffset,lineDefault.borderDashOffset);ctx.lineJoin=valueOrDefault$e(legendItem.lineJoin,lineDefault.borderJoinStyle);ctx.lineWidth=lineWidth;ctx.strokeStyle=valueOrDefault$e(legendItem.strokeStyle,defaultColor);if(ctx.setLineDash){ctx.setLineDash(valueOrDefault$e(legendItem.lineDash,lineDefault.borderDash));}
-if(labelOpts&&labelOpts.usePointStyle){var radius=boxWidth*Math.SQRT2/2;var centerX=rtlHelper.xPlus(x,boxWidth/2);var centerY=y+fontSize/2;helpers$1.canvas.drawPoint(ctx,legendItem.pointStyle,radius,centerX,centerY,legendItem.rotation);}else{ctx.fillRect(rtlHelper.leftForLtr(x,boxWidth),y,boxWidth,fontSize);if(lineWidth!==0){ctx.strokeRect(rtlHelper.leftForLtr(x,boxWidth),y,boxWidth,fontSize);}}
-ctx.restore();};var fillText=function(x,y,legendItem,textWidth){var halfFontSize=fontSize/2;var xLeft=rtlHelper.xPlus(x,boxWidth+halfFontSize);var yMiddle=y+halfFontSize;ctx.fillText(legendItem.text,xLeft,yMiddle);if(legendItem.hidden){ctx.beginPath();ctx.lineWidth=2;ctx.moveTo(xLeft,yMiddle);ctx.lineTo(rtlHelper.xPlus(xLeft,textWidth),yMiddle);ctx.stroke();}};var alignmentOffset=function(dimension,blockSize){switch(opts.align){case'start':return labelOpts.padding;case'end':return dimension-blockSize;default:return(dimension-blockSize+labelOpts.padding)/2;}};var isHorizontal=me.isHorizontal();if(isHorizontal){cursor={x:me.left+alignmentOffset(legendWidth,lineWidths[0]),y:me.top+labelOpts.padding,line:0};}else{cursor={x:me.left+labelOpts.padding,y:me.top+alignmentOffset(legendHeight,columnHeights[0]),line:0};}
-helpers$1.rtl.overrideTextDirection(me.ctx,opts.textDirection);var itemHeight=fontSize+labelOpts.padding;helpers$1.each(me.legendItems,function(legendItem,i){var textWidth=ctx.measureText(legendItem.text).width;var width=boxWidth+(fontSize/2)+textWidth;var x=cursor.x;var y=cursor.y;rtlHelper.setWidth(me.minSize.width);if(isHorizontal){if(i>0&&x+width+labelOpts.padding>me.left+me.minSize.width){y=cursor.y+=itemHeight;cursor.line++;x=cursor.x=me.left+alignmentOffset(legendWidth,lineWidths[cursor.line]);}}else if(i>0&&y+itemHeight>me.top+me.minSize.height){x=cursor.x=x+me.columnWidths[cursor.line]+labelOpts.padding;cursor.line++;y=cursor.y=me.top+alignmentOffset(legendHeight,columnHeights[cursor.line]);}
-var realX=rtlHelper.x(x);drawLegendBox(realX,y,legendItem);hitboxes[i].left=rtlHelper.leftForLtr(realX,hitboxes[i].width);hitboxes[i].top=y;fillText(realX,y,legendItem,textWidth);if(isHorizontal){cursor.x+=width+labelOpts.padding;}else{cursor.y+=itemHeight;}});helpers$1.rtl.restoreTextDirection(me.ctx,opts.textDirection);},_getLegendItemAt:function(x,y){var me=this;var i,hitBox,lh;if(x>=me.left&&x<=me.right&&y>=me.top&&y<=me.bottom){lh=me.legendHitBoxes;for(i=0;i=hitBox.left&&x<=hitBox.left+hitBox.width&&y>=hitBox.top&&y<=hitBox.top+hitBox.height){return me.legendItems[i];}}}
-return null;},handleEvent:function(e){var me=this;var opts=me.options;var type=e.type==='mouseup'?'click':e.type;var hoveredItem;if(type==='mousemove'){if(!opts.onHover&&!opts.onLeave){return;}}else if(type==='click'){if(!opts.onClick){return;}}else{return;}
-hoveredItem=me._getLegendItemAt(e.x,e.y);if(type==='click'){if(hoveredItem&&opts.onClick){opts.onClick.call(me,e.native,hoveredItem);}}else{if(opts.onLeave&&hoveredItem!==me._hoveredItem){if(me._hoveredItem){opts.onLeave.call(me,e.native,me._hoveredItem);}
-me._hoveredItem=hoveredItem;}
-if(opts.onHover&&hoveredItem){opts.onHover.call(me,e.native,hoveredItem);}}}});function createNewLegendAndAttach(chart,legendOpts){var legend=new Legend({ctx:chart.ctx,options:legendOpts,chart:chart});core_layouts.configure(chart,legend,legendOpts);core_layouts.addBox(chart,legend);chart.legend=legend;}
-var plugin_legend={id:'legend',_element:Legend,beforeInit:function(chart){var legendOpts=chart.options.legend;if(legendOpts){createNewLegendAndAttach(chart,legendOpts);}},beforeUpdate:function(chart){var legendOpts=chart.options.legend;var legend=chart.legend;if(legendOpts){helpers$1.mergeIf(legendOpts,core_defaults.global.legend);if(legend){core_layouts.configure(chart,legend,legendOpts);legend.options=legendOpts;}else{createNewLegendAndAttach(chart,legendOpts);}}else if(legend){core_layouts.removeBox(chart,legend);delete chart.legend;}},afterEvent:function(chart,e){var legend=chart.legend;if(legend){legend.handleEvent(e);}}};var noop$2=helpers$1.noop;core_defaults._set('global',{title:{display:false,fontStyle:'bold',fullWidth:true,padding:10,position:'top',text:'',weight:2000}});var Title=core_element.extend({initialize:function(config){var me=this;helpers$1.extend(me,config);me.legendHitBoxes=[];},beforeUpdate:noop$2,update:function(maxWidth,maxHeight,margins){var me=this;me.beforeUpdate();me.maxWidth=maxWidth;me.maxHeight=maxHeight;me.margins=margins;me.beforeSetDimensions();me.setDimensions();me.afterSetDimensions();me.beforeBuildLabels();me.buildLabels();me.afterBuildLabels();me.beforeFit();me.fit();me.afterFit();me.afterUpdate();return me.minSize;},afterUpdate:noop$2,beforeSetDimensions:noop$2,setDimensions:function(){var me=this;if(me.isHorizontal()){me.width=me.maxWidth;me.left=0;me.right=me.width;}else{me.height=me.maxHeight;me.top=0;me.bottom=me.height;}
-me.paddingLeft=0;me.paddingTop=0;me.paddingRight=0;me.paddingBottom=0;me.minSize={width:0,height:0};},afterSetDimensions:noop$2,beforeBuildLabels:noop$2,buildLabels:noop$2,afterBuildLabels:noop$2,beforeFit:noop$2,fit:function(){var me=this;var opts=me.options;var minSize=me.minSize={};var isHorizontal=me.isHorizontal();var lineCount,textSize;if(!opts.display){me.width=minSize.width=me.height=minSize.height=0;return;}
-lineCount=helpers$1.isArray(opts.text)?opts.text.length:1;textSize=lineCount*helpers$1.options._parseFont(opts).lineHeight+opts.padding*2;me.width=minSize.width=isHorizontal?me.maxWidth:textSize;me.height=minSize.height=isHorizontal?textSize:me.maxHeight;},afterFit:noop$2,isHorizontal:function(){var pos=this.options.position;return pos==='top'||pos==='bottom';},draw:function(){var me=this;var ctx=me.ctx;var opts=me.options;if(!opts.display){return;}
-var fontOpts=helpers$1.options._parseFont(opts);var lineHeight=fontOpts.lineHeight;var offset=lineHeight/2+opts.padding;var rotation=0;var top=me.top;var left=me.left;var bottom=me.bottom;var right=me.right;var maxWidth,titleX,titleY;ctx.fillStyle=helpers$1.valueOrDefault(opts.fontColor,core_defaults.global.defaultFontColor);ctx.font=fontOpts.string;if(me.isHorizontal()){titleX=left+((right-left)/2);titleY=top+offset;maxWidth=right-left;}else{titleX=opts.position==='left'?left+offset:right-offset;titleY=top+((bottom-top)/2);maxWidth=bottom-top;rotation=Math.PI*(opts.position==='left'?-0.5:0.5);}
-ctx.save();ctx.translate(titleX,titleY);ctx.rotate(rotation);ctx.textAlign='center';ctx.textBaseline='middle';var text=opts.text;if(helpers$1.isArray(text)){var y=0;for(var i=0;i`\\x00-\\x20]+';var single_quoted="'[^']*'";var double_quoted='"[^"]*"';var attr_value='(?:'+unquoted+'|'+single_quoted+'|'+double_quoted+')';var attribute='(?:\\s+'+attr_name+'(?:\\s*=\\s*'+attr_value+')?)';var open_tag='<[A-Za-z][A-Za-z0-9\\-]*'+attribute+'*\\s*\\/?>';var close_tag='<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>';var comment='|';var processing='<[?].*?[?]>';var declaration=']*>';var cdata='';var HTML_TAG_RE=new RegExp('^(?:'+open_tag+'|'+close_tag+'|'+comment+'|'+processing+'|'+declaration+'|'+cdata+')');var HTML_OPEN_CLOSE_TAG_RE=new RegExp('^(?:'+open_tag+'|'+close_tag+')');module.exports.HTML_TAG_RE=HTML_TAG_RE;module.exports.HTML_OPEN_CLOSE_TAG_RE=HTML_OPEN_CLOSE_TAG_RE;},{}],4:[function(require,module,exports){'use strict';function _class(obj){return Object.prototype.toString.call(obj);}
+me.legendItems=legendItems;}
+fit(){const me=this;const{options,ctx}=me;if(!options.display){me.width=me.height=0;return;}
+const labelOpts=options.labels;const labelFont=toFont(labelOpts.font);const fontSize=labelFont.size;const titleHeight=me._computeTitleHeight();const{boxWidth,itemHeight}=getBoxSize(labelOpts,fontSize);let width,height;ctx.font=labelFont.string;if(me.isHorizontal()){width=me.maxWidth;height=me._fitRows(titleHeight,fontSize,boxWidth,itemHeight)+10;}else{height=me.maxHeight;width=me._fitCols(titleHeight,fontSize,boxWidth,itemHeight)+10;}
+me.width=Math.min(width,options.maxWidth||me.maxWidth);me.height=Math.min(height,options.maxHeight||me.maxHeight);}
+_fitRows(titleHeight,fontSize,boxWidth,itemHeight){const me=this;const{ctx,maxWidth,options:{labels:{padding}}}=me;const hitboxes=me.legendHitBoxes=[];const lineWidths=me.lineWidths=[0];const lineHeight=itemHeight+padding;let totalHeight=titleHeight;ctx.textAlign='left';ctx.textBaseline='middle';let row=-1;let top=-lineHeight;me.legendItems.forEach((legendItem,i)=>{const itemWidth=boxWidth+(fontSize/2)+ctx.measureText(legendItem.text).width;if(i===0||lineWidths[lineWidths.length-1]+itemWidth+2*padding>maxWidth){totalHeight+=lineHeight;lineWidths[lineWidths.length-(i>0?0:1)]=0;top+=lineHeight;row++;}
+hitboxes[i]={left:0,top,row,width:itemWidth,height:itemHeight};lineWidths[lineWidths.length-1]+=itemWidth+padding;});return totalHeight;}
+_fitCols(titleHeight,fontSize,boxWidth,itemHeight){const me=this;const{ctx,maxHeight,options:{labels:{padding}}}=me;const hitboxes=me.legendHitBoxes=[];const columnSizes=me.columnSizes=[];const heightLimit=maxHeight-titleHeight;let totalWidth=padding;let currentColWidth=0;let currentColHeight=0;let left=0;let col=0;me.legendItems.forEach((legendItem,i)=>{const itemWidth=boxWidth+(fontSize/2)+ctx.measureText(legendItem.text).width;if(i>0&¤tColHeight+itemHeight+2*padding>heightLimit){totalWidth+=currentColWidth+padding;columnSizes.push({width:currentColWidth,height:currentColHeight});left+=currentColWidth+padding;col++;currentColWidth=currentColHeight=0;}
+hitboxes[i]={left,top:currentColHeight,col,width:itemWidth,height:itemHeight};currentColWidth=Math.max(currentColWidth,itemWidth);currentColHeight+=itemHeight+padding;});totalWidth+=currentColWidth;columnSizes.push({width:currentColWidth,height:currentColHeight});return totalWidth;}
+adjustHitBoxes(){const me=this;if(!me.options.display){return;}
+const titleHeight=me._computeTitleHeight();const{legendHitBoxes:hitboxes,options:{align,labels:{padding},rtl}}=me;const rtlHelper=getRtlAdapter(rtl,me.left,me.width);if(this.isHorizontal()){let row=0;let left=_alignStartEnd(align,me.left+padding,me.right-me.lineWidths[row]);for(const hitbox of hitboxes){if(row!==hitbox.row){row=hitbox.row;left=_alignStartEnd(align,me.left+padding,me.right-me.lineWidths[row]);}
+hitbox.top+=me.top+titleHeight+padding;hitbox.left=rtlHelper.leftForLtr(rtlHelper.x(left),hitbox.width);left+=hitbox.width+padding;}}else{let col=0;let top=_alignStartEnd(align,me.top+titleHeight+padding,me.bottom-me.columnSizes[col].height);for(const hitbox of hitboxes){if(hitbox.col!==col){col=hitbox.col;top=_alignStartEnd(align,me.top+titleHeight+padding,me.bottom-me.columnSizes[col].height);}
+hitbox.top=top;hitbox.left+=me.left+padding;hitbox.left=rtlHelper.leftForLtr(rtlHelper.x(hitbox.left),hitbox.width);top+=hitbox.height+padding;}}}
+isHorizontal(){return this.options.position==='top'||this.options.position==='bottom';}
+draw(){const me=this;if(me.options.display){const ctx=me.ctx;clipArea(ctx,me);me._draw();unclipArea(ctx);}}
+_draw(){const me=this;const{options:opts,columnSizes,lineWidths,ctx}=me;const{align,labels:labelOpts}=opts;const defaultColor=defaults.color;const rtlHelper=getRtlAdapter(opts.rtl,me.left,me.width);const labelFont=toFont(labelOpts.font);const{color:fontColor,padding}=labelOpts;const fontSize=labelFont.size;const halfFontSize=fontSize/2;let cursor;me.drawTitle();ctx.textAlign=rtlHelper.textAlign('left');ctx.textBaseline='middle';ctx.lineWidth=0.5;ctx.font=labelFont.string;const{boxWidth,boxHeight,itemHeight}=getBoxSize(labelOpts,fontSize);const drawLegendBox=function(x,y,legendItem){if(isNaN(boxWidth)||boxWidth<=0||isNaN(boxHeight)||boxHeight<0){return;}
+ctx.save();const lineWidth=valueOrDefault(legendItem.lineWidth,1);ctx.fillStyle=valueOrDefault(legendItem.fillStyle,defaultColor);ctx.lineCap=valueOrDefault(legendItem.lineCap,'butt');ctx.lineDashOffset=valueOrDefault(legendItem.lineDashOffset,0);ctx.lineJoin=valueOrDefault(legendItem.lineJoin,'miter');ctx.lineWidth=lineWidth;ctx.strokeStyle=valueOrDefault(legendItem.strokeStyle,defaultColor);ctx.setLineDash(valueOrDefault(legendItem.lineDash,[]));if(labelOpts.usePointStyle){const drawOptions={radius:boxWidth*Math.SQRT2/2,pointStyle:legendItem.pointStyle,rotation:legendItem.rotation,borderWidth:lineWidth};const centerX=rtlHelper.xPlus(x,boxWidth/2);const centerY=y+halfFontSize;drawPoint(ctx,drawOptions,centerX,centerY);}else{const yBoxTop=y+Math.max((fontSize-boxHeight)/2,0);const xBoxLeft=rtlHelper.leftForLtr(x,boxWidth);const borderRadius=toTRBLCorners(legendItem.borderRadius);ctx.beginPath();if(Object.values(borderRadius).some(v=>v!==0)){addRoundedRectPath(ctx,{x:xBoxLeft,y:yBoxTop,w:boxWidth,h:boxHeight,radius:borderRadius,});}else{ctx.rect(xBoxLeft,yBoxTop,boxWidth,boxHeight);}
+ctx.fill();if(lineWidth!==0){ctx.stroke();}}
+ctx.restore();};const fillText=function(x,y,legendItem){renderText(ctx,legendItem.text,x,y+(itemHeight/2),labelFont,{strikethrough:legendItem.hidden,textAlign:rtlHelper.textAlign(legendItem.textAlign)});};const isHorizontal=me.isHorizontal();const titleHeight=this._computeTitleHeight();if(isHorizontal){cursor={x:_alignStartEnd(align,me.left+padding,me.right-lineWidths[0]),y:me.top+padding+titleHeight,line:0};}else{cursor={x:me.left+padding,y:_alignStartEnd(align,me.top+titleHeight+padding,me.bottom-columnSizes[0].height),line:0};}
+overrideTextDirection(me.ctx,opts.textDirection);const lineHeight=itemHeight+padding;me.legendItems.forEach((legendItem,i)=>{ctx.strokeStyle=legendItem.fontColor||fontColor;ctx.fillStyle=legendItem.fontColor||fontColor;const textWidth=ctx.measureText(legendItem.text).width;const textAlign=rtlHelper.textAlign(legendItem.textAlign||(legendItem.textAlign=labelOpts.textAlign));const width=boxWidth+halfFontSize+textWidth;let x=cursor.x;let y=cursor.y;rtlHelper.setWidth(me.width);if(isHorizontal){if(i>0&&x+width+padding>me.right){y=cursor.y+=lineHeight;cursor.line++;x=cursor.x=_alignStartEnd(align,me.left+padding,me.right-lineWidths[cursor.line]);}}else if(i>0&&y+lineHeight>me.bottom){x=cursor.x=x+columnSizes[cursor.line].width+padding;cursor.line++;y=cursor.y=_alignStartEnd(align,me.top+titleHeight+padding,me.bottom-columnSizes[cursor.line].height);}
+const realX=rtlHelper.x(x);drawLegendBox(realX,y,legendItem);x=_textX(textAlign,x+boxWidth+halfFontSize,isHorizontal?x+width:me.right,opts.rtl);fillText(rtlHelper.x(x),y,legendItem);if(isHorizontal){cursor.x+=width+padding;}else{cursor.y+=lineHeight;}});restoreTextDirection(me.ctx,opts.textDirection);}
+drawTitle(){const me=this;const opts=me.options;const titleOpts=opts.title;const titleFont=toFont(titleOpts.font);const titlePadding=toPadding(titleOpts.padding);if(!titleOpts.display){return;}
+const rtlHelper=getRtlAdapter(opts.rtl,me.left,me.width);const ctx=me.ctx;const position=titleOpts.position;const halfFontSize=titleFont.size/2;const topPaddingPlusHalfFontSize=titlePadding.top+halfFontSize;let y;let left=me.left;let maxWidth=me.width;if(this.isHorizontal()){maxWidth=Math.max(...me.lineWidths);y=me.top+topPaddingPlusHalfFontSize;left=_alignStartEnd(opts.align,left,me.right-maxWidth);}else{const maxHeight=me.columnSizes.reduce((acc,size)=>Math.max(acc,size.height),0);y=topPaddingPlusHalfFontSize+_alignStartEnd(opts.align,me.top,me.bottom-maxHeight-opts.labels.padding-me._computeTitleHeight());}
+const x=_alignStartEnd(position,left,left+maxWidth);ctx.textAlign=rtlHelper.textAlign(_toLeftRightCenter(position));ctx.textBaseline='middle';ctx.strokeStyle=titleOpts.color;ctx.fillStyle=titleOpts.color;ctx.font=titleFont.string;renderText(ctx,titleOpts.text,x,y,titleFont);}
+_computeTitleHeight(){const titleOpts=this.options.title;const titleFont=toFont(titleOpts.font);const titlePadding=toPadding(titleOpts.padding);return titleOpts.display?titleFont.lineHeight+titlePadding.height:0;}
+_getLegendItemAt(x,y){const me=this;let i,hitBox,lh;if(x>=me.left&&x<=me.right&&y>=me.top&&y<=me.bottom){lh=me.legendHitBoxes;for(i=0;i=hitBox.left&&x<=hitBox.left+hitBox.width&&y>=hitBox.top&&y<=hitBox.top+hitBox.height){return me.legendItems[i];}}}
+return null;}
+handleEvent(e){const me=this;const opts=me.options;if(!isListened(e.type,opts)){return;}
+const hoveredItem=me._getLegendItemAt(e.x,e.y);if(e.type==='mousemove'){const previous=me._hoveredItem;const sameItem=itemsEqual(previous,hoveredItem);if(previous&&!sameItem){callback(opts.onLeave,[e,previous,me],me);}
+me._hoveredItem=hoveredItem;if(hoveredItem&&!sameItem){callback(opts.onHover,[e,hoveredItem,me],me);}}else if(hoveredItem){callback(opts.onClick,[e,hoveredItem,me],me);}}}
+function isListened(type,opts){if(type==='mousemove'&&(opts.onHover||opts.onLeave)){return true;}
+if(opts.onClick&&(type==='click'||type==='mouseup')){return true;}
+return false;}
+var plugin_legend={id:'legend',_element:Legend,start(chart,_args,options){const legend=chart.legend=new Legend({ctx:chart.ctx,options,chart});layouts.configure(chart,legend,options);layouts.addBox(chart,legend);},stop(chart){layouts.removeBox(chart,chart.legend);delete chart.legend;},beforeUpdate(chart,_args,options){const legend=chart.legend;layouts.configure(chart,legend,options);legend.options=options;},afterUpdate(chart){const legend=chart.legend;legend.buildLabels();legend.adjustHitBoxes();},afterEvent(chart,args){if(!args.replay){chart.legend.handleEvent(args.event);}},defaults:{display:true,position:'top',align:'center',fullSize:true,reverse:false,weight:1000,onClick(e,legendItem,legend){const index=legendItem.datasetIndex;const ci=legend.chart;if(ci.isDatasetVisible(index)){ci.hide(index);legendItem.hidden=true;}else{ci.show(index);legendItem.hidden=false;}},onHover:null,onLeave:null,labels:{color:(ctx)=>ctx.chart.options.color,boxWidth:40,padding:10,generateLabels(chart){const datasets=chart.data.datasets;const{labels:{usePointStyle,pointStyle,textAlign,color}}=chart.legend.options;return chart._getSortedDatasetMetas().map((meta)=>{const style=meta.controller.getStyle(usePointStyle?0:undefined);const borderWidth=toPadding(style.borderWidth);return{text:datasets[meta.index].label,fillStyle:style.backgroundColor,fontColor:color,hidden:!meta.visible,lineCap:style.borderCapStyle,lineDash:style.borderDash,lineDashOffset:style.borderDashOffset,lineJoin:style.borderJoinStyle,lineWidth:(borderWidth.width+borderWidth.height)/4,strokeStyle:style.borderColor,pointStyle:pointStyle||style.pointStyle,rotation:style.rotation,textAlign:textAlign||style.textAlign,borderRadius:0,datasetIndex:meta.index};},this);}},title:{color:(ctx)=>ctx.chart.options.color,display:false,position:'center',text:'',}},descriptors:{_scriptable:(name)=>!name.startsWith('on'),labels:{_scriptable:(name)=>!['generateLabels','filter','sort'].includes(name),}},};class Title extends Element{constructor(config){super();this.chart=config.chart;this.options=config.options;this.ctx=config.ctx;this._padding=undefined;this.top=undefined;this.bottom=undefined;this.left=undefined;this.right=undefined;this.width=undefined;this.height=undefined;this.position=undefined;this.weight=undefined;this.fullSize=undefined;}
+update(maxWidth,maxHeight){const me=this;const opts=me.options;me.left=0;me.top=0;if(!opts.display){me.width=me.height=me.right=me.bottom=0;return;}
+me.width=me.right=maxWidth;me.height=me.bottom=maxHeight;const lineCount=isArray(opts.text)?opts.text.length:1;me._padding=toPadding(opts.padding);const textSize=lineCount*toFont(opts.font).lineHeight+me._padding.height;if(me.isHorizontal()){me.height=textSize;}else{me.width=textSize;}}
+isHorizontal(){const pos=this.options.position;return pos==='top'||pos==='bottom';}
+_drawArgs(offset){const{top,left,bottom,right,options}=this;const align=options.align;let rotation=0;let maxWidth,titleX,titleY;if(this.isHorizontal()){titleX=_alignStartEnd(align,left,right);titleY=top+offset;maxWidth=right-left;}else{if(options.position==='left'){titleX=left+offset;titleY=_alignStartEnd(align,bottom,top);rotation=PI*-0.5;}else{titleX=right-offset;titleY=_alignStartEnd(align,top,bottom);rotation=PI*0.5;}
+maxWidth=bottom-top;}
+return{titleX,titleY,maxWidth,rotation};}
+draw(){const me=this;const ctx=me.ctx;const opts=me.options;if(!opts.display){return;}
+const fontOpts=toFont(opts.font);const lineHeight=fontOpts.lineHeight;const offset=lineHeight/2+me._padding.top;const{titleX,titleY,maxWidth,rotation}=me._drawArgs(offset);renderText(ctx,opts.text,0,0,fontOpts,{color:opts.color,maxWidth,rotation,textAlign:_toLeftRightCenter(opts.align),textBaseline:'middle',translation:[titleX,titleY],});}}
+function createTitle(chart,titleOpts){const title=new Title({ctx:chart.ctx,options:titleOpts,chart});layouts.configure(chart,title,titleOpts);layouts.addBox(chart,title);chart.titleBlock=title;}
+var plugin_title={id:'title',_element:Title,start(chart,_args,options){createTitle(chart,options);},stop(chart){const titleBlock=chart.titleBlock;layouts.removeBox(chart,titleBlock);delete chart.titleBlock;},beforeUpdate(chart,_args,options){const title=chart.titleBlock;layouts.configure(chart,title,options);title.options=options;},defaults:{align:'center',display:false,font:{weight:'bold',},fullSize:true,padding:10,position:'top',text:'',weight:2000},defaultRoutes:{color:'color'},descriptors:{_scriptable:true,_indexable:false,},};const map=new WeakMap();var plugin_subtitle={id:'subtitle',start(chart,_args,options){const title=new Title({ctx:chart.ctx,options,chart});layouts.configure(chart,title,options);layouts.addBox(chart,title);map.set(chart,title);},stop(chart){layouts.removeBox(chart,map.get(chart));map.delete(chart);},beforeUpdate(chart,_args,options){const title=map.get(chart);layouts.configure(chart,title,options);title.options=options;},defaults:{align:'center',display:false,font:{weight:'normal',},fullSize:true,padding:0,position:'top',text:'',weight:1500},defaultRoutes:{color:'color'},descriptors:{_scriptable:true,_indexable:false,},};const positioners={average(items){if(!items.length){return false;}
+let i,len;let x=0;let y=0;let count=0;for(i=0,len=items.length;i-1){return str.split('\n');}
+return str;}
+function createTooltipItem(chart,item){const{element,datasetIndex,index}=item;const controller=chart.getDatasetMeta(datasetIndex).controller;const{label,value}=controller.getLabelAndValue(index);return{chart,label,parsed:controller.getParsed(index),raw:chart.data.datasets[datasetIndex].data[index],formattedValue:value,dataset:controller.getDataset(),dataIndex:index,datasetIndex,element};}
+function getTooltipSize(tooltip,options){const ctx=tooltip._chart.ctx;const{body,footer,title}=tooltip;const{boxWidth,boxHeight}=options;const bodyFont=toFont(options.bodyFont);const titleFont=toFont(options.titleFont);const footerFont=toFont(options.footerFont);const titleLineCount=title.length;const footerLineCount=footer.length;const bodyLineItemCount=body.length;const padding=toPadding(options.padding);let height=padding.height;let width=0;let combinedBodyLength=body.reduce((count,bodyItem)=>count+bodyItem.before.length+bodyItem.lines.length+bodyItem.after.length,0);combinedBodyLength+=tooltip.beforeBody.length+tooltip.afterBody.length;if(titleLineCount){height+=titleLineCount*titleFont.lineHeight
++(titleLineCount-1)*options.titleSpacing
++options.titleMarginBottom;}
+if(combinedBodyLength){const bodyLineHeight=options.displayColors?Math.max(boxHeight,bodyFont.lineHeight):bodyFont.lineHeight;height+=bodyLineItemCount*bodyLineHeight
++(combinedBodyLength-bodyLineItemCount)*bodyFont.lineHeight
++(combinedBodyLength-1)*options.bodySpacing;}
+if(footerLineCount){height+=options.footerMarginTop
++footerLineCount*footerFont.lineHeight
++(footerLineCount-1)*options.footerSpacing;}
+let widthPadding=0;const maxLineWidth=function(line){width=Math.max(width,ctx.measureText(line).width+widthPadding);};ctx.save();ctx.font=titleFont.string;each(tooltip.title,maxLineWidth);ctx.font=bodyFont.string;each(tooltip.beforeBody.concat(tooltip.afterBody),maxLineWidth);widthPadding=options.displayColors?(boxWidth+2):0;each(body,(bodyItem)=>{each(bodyItem.before,maxLineWidth);each(bodyItem.lines,maxLineWidth);each(bodyItem.after,maxLineWidth);});widthPadding=0;ctx.font=footerFont.string;each(tooltip.footer,maxLineWidth);ctx.restore();width+=padding.width;return{width,height};}
+function determineYAlign(chart,size){const{y,height}=size;if(y(chart.height-height/2)){return'bottom';}
+return'center';}
+function doesNotFitWithAlign(xAlign,chart,options,size){const{x,width}=size;const caret=options.caretSize+options.caretPadding;if(xAlign==='left'&&x+width+caret>chart.width){return true;}
+if(xAlign==='right'&&x-width-caret<0){return true;}}
+function determineXAlign(chart,options,size,yAlign){const{x,width}=size;const{width:chartWidth,chartArea:{left,right}}=chart;let xAlign='center';if(yAlign==='center'){xAlign=x<=(left+right)/2?'left':'right';}else if(x<=width/2){xAlign='left';}else if(x>=chartWidth-width/2){xAlign='right';}
+if(doesNotFitWithAlign(xAlign,chart,options,size)){xAlign='center';}
+return xAlign;}
+function determineAlignment(chart,options,size){const yAlign=options.yAlign||determineYAlign(chart,size);return{xAlign:options.xAlign||determineXAlign(chart,options,size,yAlign),yAlign};}
+function alignX(size,xAlign){let{x,width}=size;if(xAlign==='right'){x-=width;}else if(xAlign==='center'){x-=(width/2);}
+return x;}
+function alignY(size,yAlign,paddingAndSize){let{y,height}=size;if(yAlign==='top'){y+=paddingAndSize;}else if(yAlign==='bottom'){y-=height+paddingAndSize;}else{y-=(height/2);}
+return y;}
+function getBackgroundPoint(options,size,alignment,chart){const{caretSize,caretPadding,cornerRadius}=options;const{xAlign,yAlign}=alignment;const paddingAndSize=caretSize+caretPadding;const radiusAndPadding=cornerRadius+caretPadding;let x=alignX(size,xAlign);const y=alignY(size,yAlign,paddingAndSize);if(yAlign==='center'){if(xAlign==='left'){x+=paddingAndSize;}else if(xAlign==='right'){x-=paddingAndSize;}}else if(xAlign==='left'){x-=radiusAndPadding;}else if(xAlign==='right'){x+=radiusAndPadding;}
+return{x:_limitValue(x,0,chart.width-size.width),y:_limitValue(y,0,chart.height-size.height)};}
+function getAlignedX(tooltip,align,options){const padding=toPadding(options.padding);return align==='center'?tooltip.x+tooltip.width/2:align==='right'?tooltip.x+tooltip.width-padding.right:tooltip.x+padding.left;}
+function getBeforeAfterBodyLines(callback){return pushOrConcat([],splitNewlines(callback));}
+function createTooltipContext(parent,tooltip,tooltipItems){return Object.assign(Object.create(parent),{tooltip,tooltipItems,type:'tooltip'});}
+function overrideCallbacks(callbacks,context){const override=context&&context.dataset&&context.dataset.tooltip&&context.dataset.tooltip.callbacks;return override?callbacks.override(override):callbacks;}
+class Tooltip extends Element{constructor(config){super();this.opacity=0;this._active=[];this._chart=config._chart;this._eventPosition=undefined;this._size=undefined;this._cachedAnimations=undefined;this._tooltipItems=[];this.$animations=undefined;this.$context=undefined;this.options=config.options;this.dataPoints=undefined;this.title=undefined;this.beforeBody=undefined;this.body=undefined;this.afterBody=undefined;this.footer=undefined;this.xAlign=undefined;this.yAlign=undefined;this.x=undefined;this.y=undefined;this.height=undefined;this.width=undefined;this.caretX=undefined;this.caretY=undefined;this.labelColors=undefined;this.labelPointStyles=undefined;this.labelTextColors=undefined;}
+initialize(options){this.options=options;this._cachedAnimations=undefined;this.$context=undefined;}
+_resolveAnimations(){const me=this;const cached=me._cachedAnimations;if(cached){return cached;}
+const chart=me._chart;const options=me.options.setContext(me.getContext());const opts=options.enabled&&chart.options.animation&&options.animations;const animations=new Animations(me._chart,opts);if(opts._cacheable){me._cachedAnimations=Object.freeze(animations);}
+return animations;}
+getContext(){const me=this;return me.$context||(me.$context=createTooltipContext(me._chart.getContext(),me,me._tooltipItems));}
+getTitle(context,options){const me=this;const{callbacks}=options;const beforeTitle=callbacks.beforeTitle.apply(me,[context]);const title=callbacks.title.apply(me,[context]);const afterTitle=callbacks.afterTitle.apply(me,[context]);let lines=[];lines=pushOrConcat(lines,splitNewlines(beforeTitle));lines=pushOrConcat(lines,splitNewlines(title));lines=pushOrConcat(lines,splitNewlines(afterTitle));return lines;}
+getBeforeBody(tooltipItems,options){return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this,[tooltipItems]));}
+getBody(tooltipItems,options){const me=this;const{callbacks}=options;const bodyItems=[];each(tooltipItems,(context)=>{const bodyItem={before:[],lines:[],after:[]};const scoped=overrideCallbacks(callbacks,context);pushOrConcat(bodyItem.before,splitNewlines(scoped.beforeLabel.call(me,context)));pushOrConcat(bodyItem.lines,scoped.label.call(me,context));pushOrConcat(bodyItem.after,splitNewlines(scoped.afterLabel.call(me,context)));bodyItems.push(bodyItem);});return bodyItems;}
+getAfterBody(tooltipItems,options){return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this,[tooltipItems]));}
+getFooter(tooltipItems,options){const me=this;const{callbacks}=options;const beforeFooter=callbacks.beforeFooter.apply(me,[tooltipItems]);const footer=callbacks.footer.apply(me,[tooltipItems]);const afterFooter=callbacks.afterFooter.apply(me,[tooltipItems]);let lines=[];lines=pushOrConcat(lines,splitNewlines(beforeFooter));lines=pushOrConcat(lines,splitNewlines(footer));lines=pushOrConcat(lines,splitNewlines(afterFooter));return lines;}
+_createItems(options){const me=this;const active=me._active;const data=me._chart.data;const labelColors=[];const labelPointStyles=[];const labelTextColors=[];let tooltipItems=[];let i,len;for(i=0,len=active.length;ioptions.filter(element,index,array,data));}
+if(options.itemSort){tooltipItems=tooltipItems.sort((a,b)=>options.itemSort(a,b,data));}
+each(tooltipItems,(context)=>{const scoped=overrideCallbacks(options.callbacks,context);labelColors.push(scoped.labelColor.call(me,context));labelPointStyles.push(scoped.labelPointStyle.call(me,context));labelTextColors.push(scoped.labelTextColor.call(me,context));});me.labelColors=labelColors;me.labelPointStyles=labelPointStyles;me.labelTextColors=labelTextColors;me.dataPoints=tooltipItems;return tooltipItems;}
+update(changed,replay){const me=this;const options=me.options.setContext(me.getContext());const active=me._active;let properties;let tooltipItems=[];if(!active.length){if(me.opacity!==0){properties={opacity:0};}}else{const position=positioners[options.position].call(me,active,me._eventPosition);tooltipItems=me._createItems(options);me.title=me.getTitle(tooltipItems,options);me.beforeBody=me.getBeforeBody(tooltipItems,options);me.body=me.getBody(tooltipItems,options);me.afterBody=me.getAfterBody(tooltipItems,options);me.footer=me.getFooter(tooltipItems,options);const size=me._size=getTooltipSize(me,options);const positionAndSize=Object.assign({},position,size);const alignment=determineAlignment(me._chart,options,positionAndSize);const backgroundPoint=getBackgroundPoint(options,positionAndSize,alignment,me._chart);me.xAlign=alignment.xAlign;me.yAlign=alignment.yAlign;properties={opacity:1,x:backgroundPoint.x,y:backgroundPoint.y,width:size.width,height:size.height,caretX:position.x,caretY:position.y};}
+me._tooltipItems=tooltipItems;me.$context=undefined;if(properties){me._resolveAnimations().update(me,properties);}
+if(changed&&options.external){options.external.call(me,{chart:me._chart,tooltip:me,replay});}}
+drawCaret(tooltipPoint,ctx,size,options){const caretPosition=this.getCaretPosition(tooltipPoint,size,options);ctx.lineTo(caretPosition.x1,caretPosition.y1);ctx.lineTo(caretPosition.x2,caretPosition.y2);ctx.lineTo(caretPosition.x3,caretPosition.y3);}
+getCaretPosition(tooltipPoint,size,options){const{xAlign,yAlign}=this;const{cornerRadius,caretSize}=options;const{x:ptX,y:ptY}=tooltipPoint;const{width,height}=size;let x1,x2,x3,y1,y2,y3;if(yAlign==='center'){y2=ptY+(height/2);if(xAlign==='left'){x1=ptX;x2=x1-caretSize;y1=y2+caretSize;y3=y2-caretSize;}else{x1=ptX+width;x2=x1+caretSize;y1=y2-caretSize;y3=y2+caretSize;}
+x3=x1;}else{if(xAlign==='left'){x2=ptX+cornerRadius+(caretSize);}else if(xAlign==='right'){x2=ptX+width-cornerRadius-caretSize;}else{x2=this.caretX;}
+if(yAlign==='top'){y1=ptY;y2=y1-caretSize;x1=x2-caretSize;x3=x2+caretSize;}else{y1=ptY+height;y2=y1+caretSize;x1=x2+caretSize;x3=x2-caretSize;}
+y3=y1;}
+return{x1,x2,x3,y1,y2,y3};}
+drawTitle(pt,ctx,options){const me=this;const title=me.title;const length=title.length;let titleFont,titleSpacing,i;if(length){const rtlHelper=getRtlAdapter(options.rtl,me.x,me.width);pt.x=getAlignedX(me,options.titleAlign,options);ctx.textAlign=rtlHelper.textAlign(options.titleAlign);ctx.textBaseline='middle';titleFont=toFont(options.titleFont);titleSpacing=options.titleSpacing;ctx.fillStyle=options.titleColor;ctx.font=titleFont.string;for(i=0;iv!==0)){ctx.beginPath();ctx.fillStyle=options.multiKeyBackground;addRoundedRectPath(ctx,{x:outerX,y:colorY,w:boxWidth,h:boxHeight,radius:borderRadius,});ctx.fill();ctx.stroke();ctx.fillStyle=labelColors.backgroundColor;ctx.beginPath();addRoundedRectPath(ctx,{x:innerX,y:colorY+1,w:boxWidth-2,h:boxHeight-2,radius:borderRadius,});ctx.fill();}else{ctx.fillStyle=options.multiKeyBackground;ctx.fillRect(outerX,colorY,boxWidth,boxHeight);ctx.strokeRect(outerX,colorY,boxWidth,boxHeight);ctx.fillStyle=labelColors.backgroundColor;ctx.fillRect(innerX,colorY+1,boxWidth-2,boxHeight-2);}}
+ctx.fillStyle=me.labelTextColors[i];}
+drawBody(pt,ctx,options){const me=this;const{body}=me;const{bodySpacing,bodyAlign,displayColors,boxHeight,boxWidth}=options;const bodyFont=toFont(options.bodyFont);let bodyLineHeight=bodyFont.lineHeight;let xLinePadding=0;const rtlHelper=getRtlAdapter(options.rtl,me.x,me.width);const fillLineOfText=function(line){ctx.fillText(line,rtlHelper.x(pt.x+xLinePadding),pt.y+bodyLineHeight/2);pt.y+=bodyLineHeight+bodySpacing;};const bodyAlignForCalculation=rtlHelper.textAlign(bodyAlign);let bodyItem,textColor,lines,i,j,ilen,jlen;ctx.textAlign=bodyAlign;ctx.textBaseline='middle';ctx.font=bodyFont.string;pt.x=getAlignedX(me,bodyAlignForCalculation,options);ctx.fillStyle=options.bodyColor;each(me.beforeBody,fillLineOfText);xLinePadding=displayColors&&bodyAlignForCalculation!=='right'?bodyAlign==='center'?(boxWidth/2+1):(boxWidth+2):0;for(i=0,ilen=body.length;i0){ctx.stroke();}}
+_updateAnimationTarget(options){const me=this;const chart=me._chart;const anims=me.$animations;const animX=anims&&anims.x;const animY=anims&&anims.y;if(animX||animY){const position=positioners[options.position].call(me,me._active,me._eventPosition);if(!position){return;}
+const size=me._size=getTooltipSize(me,options);const positionAndSize=Object.assign({},position,me._size);const alignment=determineAlignment(chart,options,positionAndSize);const point=getBackgroundPoint(options,positionAndSize,alignment,chart);if(animX._to!==point.x||animY._to!==point.y){me.xAlign=alignment.xAlign;me.yAlign=alignment.yAlign;me.width=size.width;me.height=size.height;me.caretX=position.x;me.caretY=position.y;me._resolveAnimations().update(me,point);}}}
+draw(ctx){const me=this;const options=me.options.setContext(me.getContext());let opacity=me.opacity;if(!opacity){return;}
+me._updateAnimationTarget(options);const tooltipSize={width:me.width,height:me.height};const pt={x:me.x,y:me.y};opacity=Math.abs(opacity)<1e-3?0:opacity;const padding=toPadding(options.padding);const hasTooltipContent=me.title.length||me.beforeBody.length||me.body.length||me.afterBody.length||me.footer.length;if(options.enabled&&hasTooltipContent){ctx.save();ctx.globalAlpha=opacity;me.drawBackground(pt,ctx,tooltipSize,options);overrideTextDirection(ctx,options.textDirection);pt.y+=padding.top;me.drawTitle(pt,ctx,options);me.drawBody(pt,ctx,options);me.drawFooter(pt,ctx,options);restoreTextDirection(ctx,options.textDirection);ctx.restore();}}
+getActiveElements(){return this._active||[];}
+setActiveElements(activeElements,eventPosition){const me=this;const lastActive=me._active;const active=activeElements.map(({datasetIndex,index})=>{const meta=me._chart.getDatasetMeta(datasetIndex);if(!meta){throw new Error('Cannot find a dataset at index '+datasetIndex);}
+return{datasetIndex,element:meta.data[index],index,};});const changed=!_elementsEqual(lastActive,active);const positionChanged=me._positionChanged(active,eventPosition);if(changed||positionChanged){me._active=active;me._eventPosition=eventPosition;me.update(true);}}
+handleEvent(e,replay){const me=this;const options=me.options;const lastActive=me._active||[];let changed=false;let active=[];if(e.type!=='mouseout'){active=me._chart.getElementsAtEventForMode(e,options.mode,options,replay);if(options.reverse){active.reverse();}}
+const positionChanged=me._positionChanged(active,e);changed=replay||!_elementsEqual(active,lastActive)||positionChanged;if(changed){me._active=active;if(options.enabled||options.external){me._eventPosition={x:e.x,y:e.y};me.update(true,replay);}}
+return changed;}
+_positionChanged(active,e){const{caretX,caretY,options}=this;const position=positioners[options.position].call(this,active,e);return position!==false&&(caretX!==position.x||caretY!==position.y);}}
+Tooltip.positioners=positioners;var plugin_tooltip={id:'tooltip',_element:Tooltip,positioners,afterInit(chart,_args,options){if(options){chart.tooltip=new Tooltip({_chart:chart,options});}},beforeUpdate(chart,_args,options){if(chart.tooltip){chart.tooltip.initialize(options);}},reset(chart,_args,options){if(chart.tooltip){chart.tooltip.initialize(options);}},afterDraw(chart){const tooltip=chart.tooltip;const args={tooltip};if(chart.notifyPlugins('beforeTooltipDraw',args)===false){return;}
+if(tooltip){tooltip.draw(chart.ctx);}
+chart.notifyPlugins('afterTooltipDraw',args);},afterEvent(chart,args){if(chart.tooltip){const useFinalPosition=args.replay;if(chart.tooltip.handleEvent(args.event,useFinalPosition)){args.changed=true;}}},defaults:{enabled:true,external:null,position:'average',backgroundColor:'rgba(0,0,0,0.8)',titleColor:'#fff',titleFont:{weight:'bold',},titleSpacing:2,titleMarginBottom:6,titleAlign:'left',bodyColor:'#fff',bodySpacing:2,bodyFont:{},bodyAlign:'left',footerColor:'#fff',footerSpacing:2,footerMarginTop:6,footerFont:{weight:'bold',},footerAlign:'left',padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(ctx,opts)=>opts.bodyFont.size,boxWidth:(ctx,opts)=>opts.bodyFont.size,multiKeyBackground:'#fff',displayColors:true,borderColor:'rgba(0,0,0,0)',borderWidth:0,animation:{duration:400,easing:'easeOutQuart',},animations:{numbers:{type:'number',properties:['x','y','width','height','caretX','caretY'],},opacity:{easing:'linear',duration:200}},callbacks:{beforeTitle:noop,title(tooltipItems){if(tooltipItems.length>0){const item=tooltipItems[0];const labels=item.chart.data.labels;const labelCount=labels?labels.length:0;if(this&&this.options&&this.options.mode==='dataset'){return item.dataset.label||'';}else if(item.label){return item.label;}else if(labelCount>0&&item.dataIndexname!=='filter'&&name!=='itemSort'&&name!=='external',_indexable:false,callbacks:{_scriptable:false,_indexable:false,},animation:{_fallback:false},animations:{_fallback:'animation'}},additionalOptionScopes:['interaction']};var plugins=Object.freeze({__proto__:null,Decimation:plugin_decimation,Filler:plugin_filler,Legend:plugin_legend,SubTitle:plugin_subtitle,Title:plugin_title,Tooltip:plugin_tooltip});const addIfString=(labels,raw,index)=>typeof raw==='string'?labels.push(raw)-1:isNaN(raw)?null:index;function findOrAddLabel(labels,raw,index){const first=labels.indexOf(raw);if(first===-1){return addIfString(labels,raw,index);}
+const last=labels.lastIndexOf(raw);return first!==last?index:first;}
+const validIndex=(index,max)=>index===null?null:_limitValue(Math.round(index),0,max);class CategoryScale extends Scale{constructor(cfg){super(cfg);this._startValue=undefined;this._valueRange=0;}
+parse(raw,index){if(isNullOrUndef(raw)){return null;}
+const labels=this.getLabels();index=isFinite(index)&&labels[index]===raw?index:findOrAddLabel(labels,raw,valueOrDefault(index,raw));return validIndex(index,labels.length-1);}
+determineDataLimits(){const me=this;const{minDefined,maxDefined}=me.getUserBounds();let{min,max}=me.getMinMax(true);if(me.options.bounds==='ticks'){if(!minDefined){min=0;}
+if(!maxDefined){max=me.getLabels().length-1;}}
+me.min=min;me.max=max;}
+buildTicks(){const me=this;const min=me.min;const max=me.max;const offset=me.options.offset;const ticks=[];let labels=me.getLabels();labels=(min===0&&max===labels.length-1)?labels:labels.slice(min,max+1);me._valueRange=Math.max(labels.length-(offset?0:1),1);me._startValue=me.min-(offset?0.5:0);for(let value=min;value<=max;value++){ticks.push({value});}
+return ticks;}
+getLabelForValue(value){const me=this;const labels=me.getLabels();if(value>=0&&valueticks.length-1){return null;}
+return me.getPixelForValue(ticks[index].value);}
+getValueForPixel(pixel){const me=this;return Math.round(me._startValue+me.getDecimalForPixel(pixel)*me._valueRange);}
+getBasePixel(){return this.bottom;}}
+CategoryScale.id='category';CategoryScale.defaults={ticks:{callback:CategoryScale.prototype.getLabelForValue}};function generateTicks$1(generationOptions,dataRange){const ticks=[];const MIN_SPACING=1e-14;const{bounds,step,min,max,precision,count,maxTicks,maxDigits,includeBounds}=generationOptions;const unit=step||1;const maxSpaces=maxTicks-1;const{min:rmin,max:rmax}=dataRange;const minDefined=!isNullOrUndef(min);const maxDefined=!isNullOrUndef(max);const countDefined=!isNullOrUndef(count);const minSpacing=(rmax-rmin)/(maxDigits+1);let spacing=niceNum((rmax-rmin)/maxSpaces/unit)*unit;let factor,niceMin,niceMax,numSpaces;if(spacingmaxSpaces){spacing=niceNum(numSpaces*spacing/maxSpaces/unit)*unit;}
+if(!isNullOrUndef(precision)){factor=Math.pow(10,precision);spacing=Math.ceil(spacing*factor)/factor;}
+if(bounds==='ticks'){niceMin=Math.floor(rmin/spacing)*spacing;niceMax=Math.ceil(rmax/spacing)*spacing;}else{niceMin=rmin;niceMax=rmax;}
+if(minDefined&&maxDefined&&step&&almostWhole((max-min)/step,spacing/1000)){numSpaces=Math.round(Math.min((max-min)/spacing,maxTicks));spacing=(max-min)/numSpaces;niceMin=min;niceMax=max;}else if(countDefined){niceMin=minDefined?min:niceMin;niceMax=maxDefined?max:niceMax;numSpaces=count-1;spacing=(niceMax-niceMin)/numSpaces;}else{numSpaces=(niceMax-niceMin)/spacing;if(almostEquals(numSpaces,Math.round(numSpaces),spacing/1000)){numSpaces=Math.round(numSpaces);}else{numSpaces=Math.ceil(numSpaces);}}
+const decimalPlaces=Math.max(_decimalPlaces(spacing),_decimalPlaces(niceMin));factor=Math.pow(10,isNullOrUndef(precision)?decimalPlaces:precision);niceMin=Math.round(niceMin*factor)/factor;niceMax=Math.round(niceMax*factor)/factor;let j=0;if(minDefined){if(includeBounds&&niceMin!==min){ticks.push({value:min});if(niceMin(min=minDefined?min:v);const setMax=v=>(max=maxDefined?max:v);if(beginAtZero){const minSign=sign(min);const maxSign=sign(max);if(minSign<0&&maxSign<0){setMax(0);}else if(minSign>0&&maxSign>0){setMin(0);}}
+if(min===max){let offset=1;if(max>=Number.MAX_SAFE_INTEGER||min<=Number.MIN_SAFE_INTEGER){offset=Math.abs(max*0.05);}
+setMax(max+offset);if(!beginAtZero){setMin(min-offset);}}
+me.min=min;me.max=max;}
+getTickLimit(){const me=this;const tickOpts=me.options.ticks;let{maxTicksLimit,stepSize}=tickOpts;let maxTicks;if(stepSize){maxTicks=Math.ceil(me.max/stepSize)-Math.floor(me.min/stepSize)+1;}else{maxTicks=me.computeTickLimit();maxTicksLimit=maxTicksLimit||11;}
+if(maxTicksLimit){maxTicks=Math.min(maxTicksLimit,maxTicks);}
+return maxTicks;}
+computeTickLimit(){return Number.POSITIVE_INFINITY;}
+buildTicks(){const me=this;const opts=me.options;const tickOpts=opts.ticks;let maxTicks=me.getTickLimit();maxTicks=Math.max(2,maxTicks);const numericGeneratorOptions={maxTicks,bounds:opts.bounds,min:opts.min,max:opts.max,precision:tickOpts.precision,step:tickOpts.stepSize,count:tickOpts.count,maxDigits:me._maxDigits(),horizontal:me.isHorizontal(),minRotation:tickOpts.minRotation||0,includeBounds:tickOpts.includeBounds!==false};const dataRange=me._range||me;const ticks=generateTicks$1(numericGeneratorOptions,dataRange);if(opts.bounds==='ticks'){_setMinAndMaxByKey(ticks,me,'value');}
+if(opts.reverse){ticks.reverse();me.start=me.max;me.end=me.min;}else{me.start=me.min;me.end=me.max;}
+return ticks;}
+configure(){const me=this;const ticks=me.ticks;let start=me.min;let end=me.max;super.configure();if(me.options.offset&&ticks.length){const offset=(end-start)/Math.max(ticks.length-1,1)/2;start-=offset;end+=offset;}
+me._startValue=start;me._endValue=end;me._valueRange=end-start;}
+getLabelForValue(value){return formatNumber(value,this.chart.options.locale);}}
+class LinearScale extends LinearScaleBase{determineDataLimits(){const me=this;const{min,max}=me.getMinMax(true);me.min=isNumberFinite(min)?min:0;me.max=isNumberFinite(max)?max:1;me.handleTickRangeOptions();}
+computeTickLimit(){const me=this;const horizontal=me.isHorizontal();const length=horizontal?me.width:me.height;const minRotation=toRadians(me.options.ticks.minRotation);const ratio=(horizontal?Math.sin(minRotation):Math.cos(minRotation))||0.001;const tickFont=me._resolveTickFontOptions(0);return Math.ceil(length/Math.min(40,tickFont.lineHeight/ratio));}
+getPixelForValue(value){return value===null?NaN:this.getPixelForDecimal((value-this._startValue)/this._valueRange);}
+getValueForPixel(pixel){return this._startValue+this.getDecimalForPixel(pixel)*this._valueRange;}}
+LinearScale.id='linear';LinearScale.defaults={ticks:{callback:Ticks.formatters.numeric}};function isMajor(tickVal){const remain=tickVal/(Math.pow(10,Math.floor(log10(tickVal))));return remain===1;}
+function generateTicks(generationOptions,dataRange){const endExp=Math.floor(log10(dataRange.max));const endSignificand=Math.ceil(dataRange.max/Math.pow(10,endExp));const ticks=[];let tickVal=finiteOrDefault(generationOptions.min,Math.pow(10,Math.floor(log10(dataRange.min))));let exp=Math.floor(log10(tickVal));let significand=Math.floor(tickVal/Math.pow(10,exp));let precision=exp<0?Math.pow(10,Math.abs(exp)):1;do{ticks.push({value:tickVal,major:isMajor(tickVal)});++significand;if(significand===10){significand=1;++exp;precision=exp>=0?1:precision;}
+tickVal=Math.round(significand*Math.pow(10,exp)*precision)/precision;}while(exp0?value:null;}
+determineDataLimits(){const me=this;const{min,max}=me.getMinMax(true);me.min=isNumberFinite(min)?Math.max(0,min):null;me.max=isNumberFinite(max)?Math.max(0,max):null;if(me.options.beginAtZero){me._zero=true;}
+me.handleTickRangeOptions();}
+handleTickRangeOptions(){const me=this;const{minDefined,maxDefined}=me.getUserBounds();let min=me.min;let max=me.max;const setMin=v=>(min=minDefined?min:v);const setMax=v=>(max=maxDefined?max:v);const exp=(v,m)=>Math.pow(10,Math.floor(log10(v))+m);if(min===max){if(min<=0){setMin(1);setMax(10);}else{setMin(exp(min,-1));setMax(exp(max,+1));}}
+if(min<=0){setMin(exp(max,-1));}
+if(max<=0){setMax(exp(min,+1));}
+if(me._zero&&me.min!==me._suggestedMin&&min===exp(me.min,0)){setMin(exp(min,-1));}
+me.min=min;me.max=max;}
+buildTicks(){const me=this;const opts=me.options;const generationOptions={min:me._userMin,max:me._userMax};const ticks=generateTicks(generationOptions,me);if(opts.bounds==='ticks'){_setMinAndMaxByKey(ticks,me,'value');}
+if(opts.reverse){ticks.reverse();me.start=me.max;me.end=me.min;}else{me.start=me.min;me.end=me.max;}
+return ticks;}
+getLabelForValue(value){return value===undefined?'0':formatNumber(value,this.chart.options.locale);}
+configure(){const me=this;const start=me.min;super.configure();me._startValue=log10(start);me._valueRange=log10(me.max)-log10(start);}
+getPixelForValue(value){const me=this;if(value===undefined||value===0){value=me.min;}
+if(value===null||isNaN(value)){return NaN;}
+return me.getPixelForDecimal(value===me.min?0:(log10(value)-me._startValue)/me._valueRange);}
+getValueForPixel(pixel){const me=this;const decimal=me.getDecimalForPixel(pixel);return Math.pow(10,me._startValue+decimal*me._valueRange);}}
+LogarithmicScale.id='logarithmic';LogarithmicScale.defaults={ticks:{callback:Ticks.formatters.logarithmic,major:{enabled:true}}};function getTickBackdropHeight(opts){const tickOpts=opts.ticks;if(tickOpts.display&&opts.display){const padding=toPadding(tickOpts.backdropPadding);return valueOrDefault(tickOpts.font&&tickOpts.font.size,defaults.font.size)+padding.height;}
+return 0;}
+function measureLabelSize(ctx,font,label){label=isArray(label)?label:[label];return{w:_longestText(ctx,font.string,label),h:label.length*font.lineHeight};}
+function determineLimits(angle,pos,size,min,max){if(angle===min||angle===max){return{start:pos-(size/2),end:pos+(size/2)};}else if(anglemax){return{start:pos-size,end:pos};}
+return{start:pos,end:pos+size};}
+function fitWithPointLabels(scale){const furthestLimits={l:0,r:scale.width,t:0,b:scale.height-scale.paddingTop};const furthestAngles={};const labelSizes=[];const padding=[];const valueCount=scale.getLabels().length;for(let i=0;ifurthestLimits.r){furthestLimits.r=hLimits.end;furthestAngles.r=angleRadians;}
+if(vLimits.startfurthestLimits.b){furthestLimits.b=vLimits.end;furthestAngles.b=angleRadians;}}
+scale._setReductions(scale.drawingArea,furthestLimits,furthestAngles);scale._pointLabelItems=buildPointLabelItems(scale,labelSizes,padding);}
+function buildPointLabelItems(scale,labelSizes,padding){const items=[];const valueCount=scale.getLabels().length;const opts=scale.options;const tickBackdropHeight=getTickBackdropHeight(opts);const outerDistance=scale.getDistanceFromCenterForValue(opts.ticks.reverse?scale.min:scale.max);for(let i=0;i270||angle<90){y-=h;}
+return y;}
+function drawPointLabels(scale,labelCount){const{ctx,options:{pointLabels}}=scale;for(let i=labelCount-1;i>=0;i--){const optsAtIndex=pointLabels.setContext(scale.getPointLabelContext(i));const plFont=toFont(optsAtIndex.font);const{x,y,textAlign,left,top,right,bottom}=scale._pointLabelItems[i];const{backdropColor}=optsAtIndex;if(!isNullOrUndef(backdropColor)){const padding=toPadding(optsAtIndex.backdropPadding);ctx.fillStyle=backdropColor;ctx.fillRect(left-padding.left,top-padding.top,right-left+padding.width,bottom-top+padding.height);}
+renderText(ctx,scale._pointLabels[i],x,y+(plFont.lineHeight/2),plFont,{color:optsAtIndex.color,textAlign:textAlign,textBaseline:'middle'});}}
+function pathRadiusLine(scale,radius,circular,labelCount){const{ctx}=scale;if(circular){ctx.arc(scale.xCenter,scale.yCenter,radius,0,TAU);}else{let pointPosition=scale.getPointPosition(0,radius);ctx.moveTo(pointPosition.x,pointPosition.y);for(let i=1;i{const label=callback(me.options.pointLabels.callback,[value,index],me);return label||label===0?label:'';});}
+fit(){const me=this;const opts=me.options;if(opts.display&&opts.pointLabels.display){fitWithPointLabels(me);}else{me.setCenterPoint(0,0,0,0);}}
+_setReductions(largestPossibleRadius,furthestLimits,furthestAngles){const me=this;let radiusReductionLeft=furthestLimits.l/Math.sin(furthestAngles.l);let radiusReductionRight=Math.max(furthestLimits.r-me.width,0)/Math.sin(furthestAngles.r);let radiusReductionTop=-furthestLimits.t/Math.cos(furthestAngles.t);let radiusReductionBottom=-Math.max(furthestLimits.b-(me.height-me.paddingTop),0)/Math.cos(furthestAngles.b);radiusReductionLeft=numberOrZero(radiusReductionLeft);radiusReductionRight=numberOrZero(radiusReductionRight);radiusReductionTop=numberOrZero(radiusReductionTop);radiusReductionBottom=numberOrZero(radiusReductionBottom);me.drawingArea=Math.max(largestPossibleRadius/2,Math.min(Math.floor(largestPossibleRadius-(radiusReductionLeft+radiusReductionRight)/2),Math.floor(largestPossibleRadius-(radiusReductionTop+radiusReductionBottom)/2)));me.setCenterPoint(radiusReductionLeft,radiusReductionRight,radiusReductionTop,radiusReductionBottom);}
+setCenterPoint(leftMovement,rightMovement,topMovement,bottomMovement){const me=this;const maxRight=me.width-rightMovement-me.drawingArea;const maxLeft=leftMovement+me.drawingArea;const maxTop=topMovement+me.drawingArea;const maxBottom=(me.height-me.paddingTop)-bottomMovement-me.drawingArea;me.xCenter=Math.floor(((maxLeft+maxRight)/2)+me.left);me.yCenter=Math.floor(((maxTop+maxBottom)/2)+me.top+me.paddingTop);}
+getIndexAngle(index){const angleMultiplier=TAU/this.getLabels().length;const startAngle=this.options.startAngle||0;return _normalizeAngle(index*angleMultiplier+toRadians(startAngle));}
+getDistanceFromCenterForValue(value){const me=this;if(isNullOrUndef(value)){return NaN;}
+const scalingFactor=me.drawingArea/(me.max-me.min);if(me.options.reverse){return(me.max-value)*scalingFactor;}
+return(value-me.min)*scalingFactor;}
+getValueForDistanceFromCenter(distance){if(isNullOrUndef(distance)){return NaN;}
+const me=this;const scaledDistance=distance/(me.drawingArea/(me.max-me.min));return me.options.reverse?me.max-scaledDistance:me.min+scaledDistance;}
+getPointLabelContext(index){const me=this;const pointLabels=me._pointLabels||[];if(index>=0&&index{if(index!==0){offset=me.getDistanceFromCenterForValue(tick.value);const optsAtIndex=grid.setContext(me.getContext(index-1));drawRadiusLine(me,optsAtIndex,offset,labelCount);}});}
+if(angleLines.display){ctx.save();for(i=me.getLabels().length-1;i>=0;i--){const optsAtIndex=angleLines.setContext(me.getPointLabelContext(i));const{color,lineWidth}=optsAtIndex;if(!lineWidth||!color){continue;}
+ctx.lineWidth=lineWidth;ctx.strokeStyle=color;ctx.setLineDash(optsAtIndex.borderDash);ctx.lineDashOffset=optsAtIndex.borderDashOffset;offset=me.getDistanceFromCenterForValue(opts.ticks.reverse?me.min:me.max);position=me.getPointPosition(i,offset);ctx.beginPath();ctx.moveTo(me.xCenter,me.yCenter);ctx.lineTo(position.x,position.y);ctx.stroke();}
+ctx.restore();}}
+drawBorder(){}
+drawLabels(){const me=this;const ctx=me.ctx;const opts=me.options;const tickOpts=opts.ticks;if(!tickOpts.display){return;}
+const startAngle=me.getIndexAngle(0);let offset,width;ctx.save();ctx.translate(me.xCenter,me.yCenter);ctx.rotate(startAngle);ctx.textAlign='center';ctx.textBaseline='middle';me.ticks.forEach((tick,index)=>{if(index===0&&!opts.reverse){return;}
+const optsAtIndex=tickOpts.setContext(me.getContext(index));const tickFont=toFont(optsAtIndex.font);offset=me.getDistanceFromCenterForValue(me.ticks[index].value);if(optsAtIndex.showLabelBackdrop){ctx.font=tickFont.string;width=ctx.measureText(tick.label).width;ctx.fillStyle=optsAtIndex.backdropColor;const padding=toPadding(optsAtIndex.backdropPadding);ctx.fillRect(-width/2-padding.left,-offset-tickFont.size/2-padding.top,width+padding.width,tickFont.size+padding.height);}
+renderText(ctx,tick.label,0,-offset,tickFont,{color:optsAtIndex.color,});});ctx.restore();}
+drawTitle(){}}
+RadialLinearScale.id='radialLinear';RadialLinearScale.defaults={display:true,animate:true,position:'chartArea',angleLines:{display:true,lineWidth:1,borderDash:[],borderDashOffset:0.0},grid:{circular:false},startAngle:0,ticks:{showLabelBackdrop:true,callback:Ticks.formatters.numeric},pointLabels:{backdropColor:undefined,backdropPadding:2,display:true,font:{size:10},callback(label){return label;},padding:5}};RadialLinearScale.defaultRoutes={'angleLines.color':'borderColor','pointLabels.color':'color','ticks.color':'color'};RadialLinearScale.descriptors={angleLines:{_fallback:'grid'}};const INTERVALS={millisecond:{common:true,size:1,steps:1000},second:{common:true,size:1000,steps:60},minute:{common:true,size:60000,steps:60},hour:{common:true,size:3600000,steps:24},day:{common:true,size:86400000,steps:30},week:{common:false,size:604800000,steps:4},month:{common:true,size:2.628e9,steps:12},quarter:{common:false,size:7.884e9,steps:4},year:{common:true,size:3.154e10}};const UNITS=(Object.keys(INTERVALS));function sorter(a,b){return a-b;}
+function parse(scale,input){if(isNullOrUndef(input)){return null;}
+const adapter=scale._adapter;const{parser,round,isoWeekday}=scale._parseOpts;let value=input;if(typeof parser==='function'){value=parser(value);}
+if(!isNumberFinite(value)){value=typeof parser==='string'?adapter.parse(value,parser):adapter.parse(value);}
+if(value===null){return null;}
+if(round){value=round==='week'&&(isNumber(isoWeekday)||isoWeekday===true)?adapter.startOf(value,'isoWeek',isoWeekday):adapter.startOf(value,round);}
+return+value;}
+function determineUnitForAutoTicks(minUnit,min,max,capacity){const ilen=UNITS.length;for(let i=UNITS.indexOf(minUnit);i=UNITS.indexOf(minUnit);i--){const unit=UNITS[i];if(INTERVALS[unit].common&&scale._adapter.diff(max,min,unit)>=numTicks-1){return unit;}}
+return UNITS[minUnit?UNITS.indexOf(minUnit):0];}
+function determineMajorUnit(unit){for(let i=UNITS.indexOf(unit)+1,ilen=UNITS.length;i=time?timestamps[lo]:timestamps[hi];ticks[timestamp]=true;}}
+function setMajorTicks(scale,ticks,map,majorUnit){const adapter=scale._adapter;const first=+adapter.startOf(ticks[0].value,majorUnit);const last=ticks[ticks.length-1].value;let major,index;for(major=first;major<=last;major=+adapter.add(major,1,majorUnit)){index=map[major];if(index>=0){ticks[index].major=true;}}
+return ticks;}
+function ticksFromTimestamps(scale,values,majorUnit){const ticks=[];const map={};const ilen=values.length;let i,value;for(i=0;i100000*stepSize){throw new Error(min+' and '+max+' are too far apart with stepSize of '+stepSize+' '+minor);}
+const timestamps=options.ticks.source==='data'&&me.getDataTimestamps();for(time=first,count=0;timea-b).map(x=>+x);}
+getLabelForValue(value){const me=this;const adapter=me._adapter;const timeOpts=me.options.time;if(timeOpts.tooltipFormat){return adapter.format(value,timeOpts.tooltipFormat);}
+return adapter.format(value,timeOpts.displayFormats.datetime);}
+_tickFormatFunction(time,index,ticks,format){const me=this;const options=me.options;const formats=options.time.displayFormats;const unit=me._unit;const majorUnit=me._majorUnit;const minorFormat=unit&&formats[unit];const majorFormat=majorUnit&&formats[majorUnit];const tick=ticks[index];const major=majorUnit&&majorFormat&&tick&&tick.major;const label=me._adapter.format(time,format||(major?majorFormat:minorFormat));const formatter=options.ticks.callback;return formatter?callback(formatter,[label,index,ticks],me):label;}
+generateTickLabels(ticks){let i,ilen,tick;for(i=0,ilen=ticks.length;i0?capacity:1;}
+getDataTimestamps(){const me=this;let timestamps=me._cache.data||[];let i,ilen;if(timestamps.length){return timestamps;}
+const metas=me.getMatchingVisibleMetas();if(me._normalized&&metas.length){return(me._cache.data=metas[0].controller.getAllParsedValues(me));}
+for(i=0,ilen=metas.length;i=table[lo].pos&&val<=table[hi].pos){({lo,hi}=_lookupByKey(table,'pos',val));}
+({pos:prevSource,time:prevTarget}=table[lo]);({pos:nextSource,time:nextTarget}=table[hi]);}else{if(val>=table[lo].time&&val<=table[hi].time){({lo,hi}=_lookupByKey(table,'time',val));}
+({time:prevSource,pos:prevTarget}=table[lo]);({time:nextSource,pos:nextTarget}=table[hi]);}
+const span=nextSource-prevSource;return span?prevTarget+(nextTarget-prevTarget)*(val-prevSource)/span:prevTarget;}
+class TimeSeriesScale extends TimeScale{constructor(props){super(props);this._table=[];this._minPos=undefined;this._tableRange=undefined;}
+initOffsets(){const me=this;const timestamps=me._getTimestampsForTable();const table=me._table=me.buildLookupTable(timestamps);me._minPos=interpolate(table,me.min);me._tableRange=interpolate(table,me.max)-me._minPos;super.initOffsets(timestamps);}
+buildLookupTable(timestamps){const{min,max}=this;const items=[];const table=[];let i,ilen,prev,curr,next;for(i=0,ilen=timestamps.length;i=min&&curr<=max){items.push(curr);}}
+if(items.length<2){return[{time:min,pos:0},{time:max,pos:1}];}
+for(i=0,ilen=items.length;i`\\x00-\\x20]+';var single_quoted="'[^']*'";var double_quoted='"[^"]*"';var attr_value='(?:'+unquoted+'|'+single_quoted+'|'+double_quoted+')';var attribute='(?:\\s+'+attr_name+'(?:\\s*=\\s*'+attr_value+')?)';var open_tag='<[A-Za-z][A-Za-z0-9\\-]*'+attribute+'*\\s*\\/?>';var close_tag='<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>';var comment='|';var processing='<[?].*?[?]>';var declaration=']*>';var cdata='';var HTML_TAG_RE=new RegExp('^(?:'+open_tag+'|'+close_tag+'|'+comment+'|'+processing+'|'+declaration+'|'+cdata+')');var HTML_OPEN_CLOSE_TAG_RE=new RegExp('^(?:'+open_tag+'|'+close_tag+')');module.exports.HTML_TAG_RE=HTML_TAG_RE;module.exports.HTML_OPEN_CLOSE_TAG_RE=HTML_OPEN_CLOSE_TAG_RE;},{}],4:[function(require,module,exports){'use strict';function _class(obj){return Object.prototype.toString.call(obj);}
function isString(obj){return _class(obj)==='[object String]';}
var _hasOwnProperty=Object.prototype.hasOwnProperty;function has(object,key){return _hasOwnProperty.call(object,key);}
function assign(obj){var sources=Array.prototype.slice.call(arguments,1);sources.forEach(function(source){if(!source){return;}
@@ -2458,7 +3297,7 @@ button.addEventListener("click",function(){var clone=document.createElement(elem
clone.innerHTML=template;clone.className=element.className;var input=clone.querySelector("input, select, textarea");view.render(clone);if(target){target.appendChild(clone);}else{button.parentNode.insertBefore(clone,button);}
if(input){input.focus();}
Array.prototype.slice.call(clone.querySelectorAll("[data-remove]")).map(function(obj){obj.addEventListener("click",function(){clone.parentNode.removeChild(clone);obj.scrollIntoView({behavior:"smooth"});});});Array.prototype.slice.call(clone.querySelectorAll("[data-up]")).map(function(obj){obj.addEventListener("click",function(){if(clone.previousElementSibling){clone.parentNode.insertBefore(clone,clone.previousElementSibling);obj.scrollIntoView({behavior:"smooth"});}});});Array.prototype.slice.call(clone.querySelectorAll("[data-down]")).map(function(obj){obj.addEventListener("click",function(){if(clone.nextElementSibling){clone.parentNode.insertBefore(clone.nextElementSibling,clone);obj.scrollIntoView({behavior:"smooth"});}});});});element.parentNode.insertBefore(button,element.nextSibling);element.parentNode.removeChild(element);button.form.addEventListener('reset',function(event){target.innerHTML='';if(first){button.click();}});if(first){button.click();}}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-add",repeat:false,controller:function(element,view,container,document){for(var i=0;i1){h-=1;}}
-return[h*360,s*100,v*100];};convert.rgb.hwb=function(rgb){var r=rgb[0];var g=rgb[1];var b=rgb[2];var h=convert.rgb.hsl(rgb)[0];var w=1/255*Math.min(r,Math.min(g,b));b=1-1/255*Math.max(r,Math.max(g,b));return[h,w*100,b*100];};convert.rgb.cmyk=function(rgb){var r=rgb[0]/255;var g=rgb[1]/255;var b=rgb[2]/255;var c;var m;var y;var k;k=Math.min(1-r,1-g,1-b);c=(1-r-k)/(1-k)||0;m=(1-g-k)/(1-k)||0;y=(1-b-k)/(1-k)||0;return[c*100,m*100,y*100,k*100];};function comparativeDistance(x,y){return(Math.pow(x[0]-y[0],2)+
-Math.pow(x[1]-y[1],2)+
-Math.pow(x[2]-y[2],2));}
-convert.rgb.keyword=function(rgb){var reversed=reverseKeywords[rgb];if(reversed){return reversed;}
-var currentClosestDistance=Infinity;var currentClosestKeyword;for(var keyword in colorName){if(colorName.hasOwnProperty(keyword)){var value=colorName[keyword];var distance=comparativeDistance(rgb,value);if(distance0.04045?Math.pow(((r+0.055)/1.055),2.4):(r/12.92);g=g>0.04045?Math.pow(((g+0.055)/1.055),2.4):(g/12.92);b=b>0.04045?Math.pow(((b+0.055)/1.055),2.4):(b/12.92);var x=(r*0.4124)+(g*0.3576)+(b*0.1805);var y=(r*0.2126)+(g*0.7152)+(b*0.0722);var z=(r*0.0193)+(g*0.1192)+(b*0.9505);return[x*100,y*100,z*100];};convert.rgb.lab=function(rgb){var xyz=convert.rgb.xyz(rgb);var x=xyz[0];var y=xyz[1];var z=xyz[2];var l;var a;var b;x/=95.047;y/=100;z/=108.883;x=x>0.008856?Math.pow(x,1/3):(7.787*x)+(16/116);y=y>0.008856?Math.pow(y,1/3):(7.787*y)+(16/116);z=z>0.008856?Math.pow(z,1/3):(7.787*z)+(16/116);l=(116*y)-16;a=500*(x-y);b=200*(y-z);return[l,a,b];};convert.hsl.rgb=function(hsl){var h=hsl[0]/360;var s=hsl[1]/100;var l=hsl[2]/100;var t1;var t2;var t3;var rgb;var val;if(s===0){val=l*255;return[val,val,val];}
-if(l<0.5){t2=l*(1+s);}else{t2=l+s-l*s;}
-t1=2*l-t2;rgb=[0,0,0];for(var i=0;i<3;i++){t3=h+1/3*-(i-1);if(t3<0){t3++;}
-if(t3>1){t3--;}
-if(6*t3<1){val=t1+(t2-t1)*6*t3;}else if(2*t3<1){val=t2;}else if(3*t3<2){val=t1+(t2-t1)*(2/3-t3)*6;}else{val=t1;}
-rgb[i]=val*255;}
-return rgb;};convert.hsl.hsv=function(hsl){var h=hsl[0];var s=hsl[1]/100;var l=hsl[2]/100;var smin=s;var lmin=Math.max(l,0.01);var sv;var v;l*=2;s*=(l<=1)?l:2-l;smin*=lmin<=1?lmin:2-lmin;v=(l+s)/2;sv=l===0?(2*smin)/(lmin+smin):(2*s)/(l+s);return[h,sv*100,v*100];};convert.hsv.rgb=function(hsv){var h=hsv[0]/60;var s=hsv[1]/100;var v=hsv[2]/100;var hi=Math.floor(h)%6;var f=h-Math.floor(h);var p=255*v*(1-s);var q=255*v*(1-(s*f));var t=255*v*(1-(s*(1-f)));v*=255;switch(hi){case 0:return[v,t,p];case 1:return[q,v,p];case 2:return[p,v,t];case 3:return[p,q,v];case 4:return[t,p,v];case 5:return[v,p,q];}};convert.hsv.hsl=function(hsv){var h=hsv[0];var s=hsv[1]/100;var v=hsv[2]/100;var vmin=Math.max(v,0.01);var lmin;var sl;var l;l=(2-s)*v;lmin=(2-s)*vmin;sl=s*vmin;sl/=(lmin<=1)?lmin:2-lmin;sl=sl||0;l/=2;return[h,sl*100,l*100];};convert.hwb.rgb=function(hwb){var h=hwb[0]/360;var wh=hwb[1]/100;var bl=hwb[2]/100;var ratio=wh+bl;var i;var v;var f;var n;if(ratio>1){wh/=ratio;bl/=ratio;}
-i=Math.floor(6*h);v=1-bl;f=6*h-i;if((i&0x01)!==0){f=1-f;}
-n=wh+f*(v-wh);var r;var g;var b;switch(i){default:case 6:case 0:r=v;g=n;b=wh;break;case 1:r=n;g=v;b=wh;break;case 2:r=wh;g=v;b=n;break;case 3:r=wh;g=n;b=v;break;case 4:r=n;g=wh;b=v;break;case 5:r=v;g=wh;b=n;break;}
-return[r*255,g*255,b*255];};convert.cmyk.rgb=function(cmyk){var c=cmyk[0]/100;var m=cmyk[1]/100;var y=cmyk[2]/100;var k=cmyk[3]/100;var r;var g;var b;r=1-Math.min(1,c*(1-k)+k);g=1-Math.min(1,m*(1-k)+k);b=1-Math.min(1,y*(1-k)+k);return[r*255,g*255,b*255];};convert.xyz.rgb=function(xyz){var x=xyz[0]/100;var y=xyz[1]/100;var z=xyz[2]/100;var r;var g;var b;r=(x*3.2406)+(y*-1.5372)+(z*-0.4986);g=(x*-0.9689)+(y*1.8758)+(z*0.0415);b=(x*0.0557)+(y*-0.2040)+(z*1.0570);r=r>0.0031308?((1.055*Math.pow(r,1.0/2.4))-0.055):r*12.92;g=g>0.0031308?((1.055*Math.pow(g,1.0/2.4))-0.055):g*12.92;b=b>0.0031308?((1.055*Math.pow(b,1.0/2.4))-0.055):b*12.92;r=Math.min(Math.max(0,r),1);g=Math.min(Math.max(0,g),1);b=Math.min(Math.max(0,b),1);return[r*255,g*255,b*255];};convert.xyz.lab=function(xyz){var x=xyz[0];var y=xyz[1];var z=xyz[2];var l;var a;var b;x/=95.047;y/=100;z/=108.883;x=x>0.008856?Math.pow(x,1/3):(7.787*x)+(16/116);y=y>0.008856?Math.pow(y,1/3):(7.787*y)+(16/116);z=z>0.008856?Math.pow(z,1/3):(7.787*z)+(16/116);l=(116*y)-16;a=500*(x-y);b=200*(y-z);return[l,a,b];};convert.lab.xyz=function(lab){var l=lab[0];var a=lab[1];var b=lab[2];var x;var y;var z;y=(l+16)/116;x=a/500+y;z=y-b/200;var y2=Math.pow(y,3);var x2=Math.pow(x,3);var z2=Math.pow(z,3);y=y2>0.008856?y2:(y-16/116)/7.787;x=x2>0.008856?x2:(x-16/116)/7.787;z=z2>0.008856?z2:(z-16/116)/7.787;x*=95.047;y*=100;z*=108.883;return[x,y,z];};convert.lab.lch=function(lab){var l=lab[0];var a=lab[1];var b=lab[2];var hr;var h;var c;hr=Math.atan2(b,a);h=hr*360/2/Math.PI;if(h<0){h+=360;}
-c=Math.sqrt(a*a+b*b);return[l,c,h];};convert.lch.lab=function(lch){var l=lch[0];var c=lch[1];var h=lch[2];var a;var b;var hr;hr=h/360*2*Math.PI;a=c*Math.cos(hr);b=c*Math.sin(hr);return[l,a,b];};convert.rgb.ansi16=function(args){var r=args[0];var g=args[1];var b=args[2];var value=1 in arguments?arguments[1]:convert.rgb.hsv(args)[2];value=Math.round(value/50);if(value===0){return 30;}
-var ansi=30
-+((Math.round(b/255)<<2)|(Math.round(g/255)<<1)|Math.round(r/255));if(value===2){ansi+=60;}
-return ansi;};convert.hsv.ansi16=function(args){return convert.rgb.ansi16(convert.hsv.rgb(args),args[2]);};convert.rgb.ansi256=function(args){var r=args[0];var g=args[1];var b=args[2];if(r===g&&g===b){if(r<8){return 16;}
-if(r>248){return 231;}
-return Math.round(((r-8)/247)*24)+232;}
-var ansi=16
-+(36*Math.round(r/255*5))
-+(6*Math.round(g/255*5))
-+Math.round(b/255*5);return ansi;};convert.ansi16.rgb=function(args){var color=args%10;if(color===0||color===7){if(args>50){color+=3.5;}
-color=color/10.5*255;return[color,color,color];}
-var mult=(~~(args>50)+1)*0.5;var r=((color&1)*mult)*255;var g=(((color>>1)&1)*mult)*255;var b=(((color>>2)&1)*mult)*255;return[r,g,b];};convert.ansi256.rgb=function(args){if(args>=232){var c=(args-232)*10+8;return[c,c,c];}
-args-=16;var rem;var r=Math.floor(args/36)/5*255;var g=Math.floor((rem=args%36)/6)/5*255;var b=(rem%6)/5*255;return[r,g,b];};convert.rgb.hex=function(args){var integer=((Math.round(args[0])&0xFF)<<16)
-+((Math.round(args[1])&0xFF)<<8)
-+(Math.round(args[2])&0xFF);var string=integer.toString(16).toUpperCase();return'000000'.substring(string.length)+string;};convert.hex.rgb=function(args){var match=args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!match){return[0,0,0];}
-var colorString=match[0];if(match[0].length===3){colorString=colorString.split('').map(function(char){return char+char;}).join('');}
-var integer=parseInt(colorString,16);var r=(integer>>16)&0xFF;var g=(integer>>8)&0xFF;var b=integer&0xFF;return[r,g,b];};convert.rgb.hcg=function(rgb){var r=rgb[0]/255;var g=rgb[1]/255;var b=rgb[2]/255;var max=Math.max(Math.max(r,g),b);var min=Math.min(Math.min(r,g),b);var chroma=(max-min);var grayscale;var hue;if(chroma<1){grayscale=min/(1-chroma);}else{grayscale=0;}
-if(chroma<=0){hue=0;}else
-if(max===r){hue=((g-b)/chroma)%6;}else
-if(max===g){hue=2+(b-r)/chroma;}else{hue=4+(r-g)/chroma+4;}
-hue/=6;hue%=1;return[hue*360,chroma*100,grayscale*100];};convert.hsl.hcg=function(hsl){var s=hsl[1]/100;var l=hsl[2]/100;var c=1;var f=0;if(l<0.5){c=2.0*s*l;}else{c=2.0*s*(1.0-l);}
-if(c<1.0){f=(l-0.5*c)/(1.0-c);}
-return[hsl[0],c*100,f*100];};convert.hsv.hcg=function(hsv){var s=hsv[1]/100;var v=hsv[2]/100;var c=s*v;var f=0;if(c<1.0){f=(v-c)/(1-c);}
-return[hsv[0],c*100,f*100];};convert.hcg.rgb=function(hcg){var h=hcg[0]/360;var c=hcg[1]/100;var g=hcg[2]/100;if(c===0.0){return[g*255,g*255,g*255];}
-var pure=[0,0,0];var hi=(h%1)*6;var v=hi%1;var w=1-v;var mg=0;switch(Math.floor(hi)){case 0:pure[0]=1;pure[1]=v;pure[2]=0;break;case 1:pure[0]=w;pure[1]=1;pure[2]=0;break;case 2:pure[0]=0;pure[1]=1;pure[2]=v;break;case 3:pure[0]=0;pure[1]=w;pure[2]=1;break;case 4:pure[0]=v;pure[1]=0;pure[2]=1;break;default:pure[0]=1;pure[1]=0;pure[2]=w;}
-mg=(1.0-c)*g;return[(c*pure[0]+mg)*255,(c*pure[1]+mg)*255,(c*pure[2]+mg)*255];};convert.hcg.hsv=function(hcg){var c=hcg[1]/100;var g=hcg[2]/100;var v=c+g*(1.0-c);var f=0;if(v>0.0){f=c/v;}
-return[hcg[0],f*100,v*100];};convert.hcg.hsl=function(hcg){var c=hcg[1]/100;var g=hcg[2]/100;var l=g*(1.0-c)+0.5*c;var s=0;if(l>0.0&&l<0.5){s=c/(2*l);}else
-if(l>=0.5&&l<1.0){s=c/(2*(1-l));}
-return[hcg[0],s*100,l*100];};convert.hcg.hwb=function(hcg){var c=hcg[1]/100;var g=hcg[2]/100;var v=c+g*(1.0-c);return[hcg[0],(v-c)*100,(1-v)*100];};convert.hwb.hcg=function(hwb){var w=hwb[1]/100;var b=hwb[2]/100;var v=1-b;var c=v-w;var g=0;if(c<1){g=(v-c)/(1-c);}
-return[hwb[0],c*100,g*100];};convert.apple.rgb=function(apple){return[(apple[0]/65535)*255,(apple[1]/65535)*255,(apple[2]/65535)*255];};convert.rgb.apple=function(rgb){return[(rgb[0]/255)*65535,(rgb[1]/255)*65535,(rgb[2]/255)*65535];};convert.gray.rgb=function(args){return[args[0]/100*255,args[0]/100*255,args[0]/100*255];};convert.gray.hsl=convert.gray.hsv=function(args){return[0,0,args[0]];};convert.gray.hwb=function(gray){return[0,100,gray[0]];};convert.gray.cmyk=function(gray){return[0,0,0,gray[0]];};convert.gray.lab=function(gray){return[gray[0],0,0];};convert.gray.hex=function(gray){var val=Math.round(gray[0]/100*255)&0xFF;var integer=(val<<16)+(val<<8)+val;var string=integer.toString(16).toUpperCase();return'000000'.substring(string.length)+string;};convert.rgb.gray=function(rgb){var val=(rgb[0]+rgb[1]+rgb[2])/3;return[val/255*100];};});var conversions_1=conversions.rgb;var conversions_2=conversions.hsl;var conversions_3=conversions.hsv;var conversions_4=conversions.hwb;var conversions_5=conversions.cmyk;var conversions_6=conversions.xyz;var conversions_7=conversions.lab;var conversions_8=conversions.lch;var conversions_9=conversions.hex;var conversions_10=conversions.keyword;var conversions_11=conversions.ansi16;var conversions_12=conversions.ansi256;var conversions_13=conversions.hcg;var conversions_14=conversions.apple;var conversions_15=conversions.gray;function buildGraph(){var graph={};var models=Object.keys(conversions);for(var len=models.length,i=0;i1){args=Array.prototype.slice.call(arguments);}
-return fn(args);};if('conversion'in fn){wrappedFn.conversion=fn.conversion;}
-return wrappedFn;}
-function wrapRounded(fn){var wrappedFn=function(args){if(args===undefined||args===null){return args;}
-if(arguments.length>1){args=Array.prototype.slice.call(arguments);}
-var result=fn(args);if(typeof result==='object'){for(var len=result.length,i=0;i=0&&a<1)?hexDouble(Math.round(a*255)):"");}
-function rgbString(rgba,alpha){if(alpha<1||(rgba[3]&&rgba[3]<1)){return rgbaString(rgba,alpha);}
-return"rgb("+rgba[0]+", "+rgba[1]+", "+rgba[2]+")";}
-function rgbaString(rgba,alpha){if(alpha===undefined){alpha=(rgba[3]!==undefined?rgba[3]:1);}
-return"rgba("+rgba[0]+", "+rgba[1]+", "+rgba[2]
-+", "+alpha+")";}
-function percentString(rgba,alpha){if(alpha<1||(rgba[3]&&rgba[3]<1)){return percentaString(rgba,alpha);}
-var r=Math.round(rgba[0]/255*100),g=Math.round(rgba[1]/255*100),b=Math.round(rgba[2]/255*100);return"rgb("+r+"%, "+g+"%, "+b+"%)";}
-function percentaString(rgba,alpha){var r=Math.round(rgba[0]/255*100),g=Math.round(rgba[1]/255*100),b=Math.round(rgba[2]/255*100);return"rgba("+r+"%, "+g+"%, "+b+"%, "+(alpha||rgba[3]||1)+")";}
-function hslString(hsla,alpha){if(alpha<1||(hsla[3]&&hsla[3]<1)){return hslaString(hsla,alpha);}
-return"hsl("+hsla[0]+", "+hsla[1]+"%, "+hsla[2]+"%)";}
-function hslaString(hsla,alpha){if(alpha===undefined){alpha=(hsla[3]!==undefined?hsla[3]:1);}
-return"hsla("+hsla[0]+", "+hsla[1]+"%, "+hsla[2]+"%, "
-+alpha+")";}
-function hwbString(hwb,alpha){if(alpha===undefined){alpha=(hwb[3]!==undefined?hwb[3]:1);}
-return"hwb("+hwb[0]+", "+hwb[1]+"%, "+hwb[2]+"%"
-+(alpha!==undefined&&alpha!==1?", "+alpha:"")+")";}
-function keyword(rgb){return reverseNames[rgb.slice(0,3)];}
-function scale(num,min,max){return Math.min(Math.max(min,num),max);}
-function hexDouble(num){var str=num.toString(16).toUpperCase();return(str.length<2)?"0"+str:str;}
-var reverseNames={};for(var name in colorName$1){reverseNames[colorName$1[name]]=name;}
-var Color=function(obj){if(obj instanceof Color){return obj;}
-if(!(this instanceof Color)){return new Color(obj);}
-this.valid=false;this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1};var vals;if(typeof obj==='string'){vals=colorString.getRgba(obj);if(vals){this.setValues('rgb',vals);}else if(vals=colorString.getHsla(obj)){this.setValues('hsl',vals);}else if(vals=colorString.getHwb(obj)){this.setValues('hwb',vals);}}else if(typeof obj==='object'){vals=obj;if(vals.r!==undefined||vals.red!==undefined){this.setValues('rgb',vals);}else if(vals.l!==undefined||vals.lightness!==undefined){this.setValues('hsl',vals);}else if(vals.v!==undefined||vals.value!==undefined){this.setValues('hsv',vals);}else if(vals.w!==undefined||vals.whiteness!==undefined){this.setValues('hwb',vals);}else if(vals.c!==undefined||vals.cyan!==undefined){this.setValues('cmyk',vals);}}};Color.prototype={isValid:function(){return this.valid;},rgb:function(){return this.setSpace('rgb',arguments);},hsl:function(){return this.setSpace('hsl',arguments);},hsv:function(){return this.setSpace('hsv',arguments);},hwb:function(){return this.setSpace('hwb',arguments);},cmyk:function(){return this.setSpace('cmyk',arguments);},rgbArray:function(){return this.values.rgb;},hslArray:function(){return this.values.hsl;},hsvArray:function(){return this.values.hsv;},hwbArray:function(){var values=this.values;if(values.alpha!==1){return values.hwb.concat([values.alpha]);}
-return values.hwb;},cmykArray:function(){return this.values.cmyk;},rgbaArray:function(){var values=this.values;return values.rgb.concat([values.alpha]);},hslaArray:function(){var values=this.values;return values.hsl.concat([values.alpha]);},alpha:function(val){if(val===undefined){return this.values.alpha;}
-this.setValues('alpha',val);return this;},red:function(val){return this.setChannel('rgb',0,val);},green:function(val){return this.setChannel('rgb',1,val);},blue:function(val){return this.setChannel('rgb',2,val);},hue:function(val){if(val){val%=360;val=val<0?360+val:val;}
-return this.setChannel('hsl',0,val);},saturation:function(val){return this.setChannel('hsl',1,val);},lightness:function(val){return this.setChannel('hsl',2,val);},saturationv:function(val){return this.setChannel('hsv',1,val);},whiteness:function(val){return this.setChannel('hwb',1,val);},blackness:function(val){return this.setChannel('hwb',2,val);},value:function(val){return this.setChannel('hsv',2,val);},cyan:function(val){return this.setChannel('cmyk',0,val);},magenta:function(val){return this.setChannel('cmyk',1,val);},yellow:function(val){return this.setChannel('cmyk',2,val);},black:function(val){return this.setChannel('cmyk',3,val);},hexString:function(){return colorString.hexString(this.values.rgb);},rgbString:function(){return colorString.rgbString(this.values.rgb,this.values.alpha);},rgbaString:function(){return colorString.rgbaString(this.values.rgb,this.values.alpha);},percentString:function(){return colorString.percentString(this.values.rgb,this.values.alpha);},hslString:function(){return colorString.hslString(this.values.hsl,this.values.alpha);},hslaString:function(){return colorString.hslaString(this.values.hsl,this.values.alpha);},hwbString:function(){return colorString.hwbString(this.values.hwb,this.values.alpha);},keyword:function(){return colorString.keyword(this.values.rgb,this.values.alpha);},rgbNumber:function(){var rgb=this.values.rgb;return(rgb[0]<<16)|(rgb[1]<<8)|rgb[2];},luminosity:function(){var rgb=this.values.rgb;var lum=[];for(var i=0;ilum2){return(lum1+0.05)/(lum2+0.05);}
-return(lum2+0.05)/(lum1+0.05);},level:function(color2){var contrastRatio=this.contrast(color2);if(contrastRatio>=7.1){return'AAA';}
-return(contrastRatio>=4.5)?'AA':'';},dark:function(){var rgb=this.values.rgb;var yiq=(rgb[0]*299+rgb[1]*587+rgb[2]*114)/1000;return yiq<128;},light:function(){return!this.dark();},negate:function(){var rgb=[];for(var i=0;i<3;i++){rgb[i]=255-this.values.rgb[i];}
-this.setValues('rgb',rgb);return this;},lighten:function(ratio){var hsl=this.values.hsl;hsl[2]+=hsl[2]*ratio;this.setValues('hsl',hsl);return this;},darken:function(ratio){var hsl=this.values.hsl;hsl[2]-=hsl[2]*ratio;this.setValues('hsl',hsl);return this;},saturate:function(ratio){var hsl=this.values.hsl;hsl[1]+=hsl[1]*ratio;this.setValues('hsl',hsl);return this;},desaturate:function(ratio){var hsl=this.values.hsl;hsl[1]-=hsl[1]*ratio;this.setValues('hsl',hsl);return this;},whiten:function(ratio){var hwb=this.values.hwb;hwb[1]+=hwb[1]*ratio;this.setValues('hwb',hwb);return this;},blacken:function(ratio){var hwb=this.values.hwb;hwb[2]+=hwb[2]*ratio;this.setValues('hwb',hwb);return this;},greyscale:function(){var rgb=this.values.rgb;var val=rgb[0]*0.3+rgb[1]*0.59+rgb[2]*0.11;this.setValues('rgb',[val,val,val]);return this;},clearer:function(ratio){var alpha=this.values.alpha;this.setValues('alpha',alpha-(alpha*ratio));return this;},opaquer:function(ratio){var alpha=this.values.alpha;this.setValues('alpha',alpha+(alpha*ratio));return this;},rotate:function(degrees){var hsl=this.values.hsl;var hue=(hsl[0]+degrees)%360;hsl[0]=hue<0?360+hue:hue;this.setValues('hsl',hsl);return this;},mix:function(mixinColor,weight){var color1=this;var color2=mixinColor;var p=weight===undefined?0.5:weight;var w=2*p-1;var a=color1.alpha()-color2.alpha();var w1=(((w*a===-1)?w:(w+a)/(1+w*a))+1)/2.0;var w2=1-w1;return this.rgb(w1*color1.red()+w2*color2.red(),w1*color1.green()+w2*color2.green(),w1*color1.blue()+w2*color2.blue()).alpha(color1.alpha()*p+color2.alpha()*(1-p));},toJSON:function(){return this.rgb();},clone:function(){var result=new Color();var source=this.values;var target=result.values;var value,type;for(var prop in source){if(source.hasOwnProperty(prop)){value=source[prop];type=({}).toString.call(value);if(type==='[object Array]'){target[prop]=value.slice(0);}else if(type==='[object Number]'){target[prop]=value;}else{console.error('unexpected color value:',value);}}}
-return result;}};Color.prototype.spaces={rgb:['red','green','blue'],hsl:['hue','saturation','lightness'],hsv:['hue','saturation','value'],hwb:['hue','whiteness','blackness'],cmyk:['cyan','magenta','yellow','black']};Color.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]};Color.prototype.getValues=function(space){var values=this.values;var vals={};for(var i=0;i=0;i--){fn.call(thisArg,loopable[i],i);}}else{for(i=0;iArray.prototype.slice.call(args));let ticking=false;let args=[];return function(...rest){args=updateArgs(rest);if(!ticking){ticking=true;requestAnimFrame.call(window,()=>{ticking=false;fn.apply(thisArg,args);});}};}
+function debounce(fn,delay){let timeout;return function(){if(delay){clearTimeout(timeout);timeout=setTimeout(fn,delay);}else{fn();}
+return delay;};}
+const _toLeftRightCenter=(align)=>align==='start'?'left':align==='end'?'right':'center';const _alignStartEnd=(align,start,end)=>align==='start'?start:align==='end'?end:(start+end)/2;const _textX=(align,left,right,rtl)=>{const check=rtl?'left':'right';return align===check?right:align==='center'?(left+right)/2:left;};class Animator{constructor(){this._request=null;this._charts=new Map();this._running=false;this._lastDate=undefined;}
+_notify(chart,anims,date,type){const callbacks=anims.listeners[type];const numSteps=anims.duration;callbacks.forEach(fn=>fn({chart,initial:anims.initial,numSteps,currentStep:Math.min(date-anims.start,numSteps)}));}
+_refresh(){const me=this;if(me._request){return;}
+me._running=true;me._request=requestAnimFrame.call(window,()=>{me._update();me._request=null;if(me._running){me._refresh();}});}
+_update(date=Date.now()){const me=this;let remaining=0;me._charts.forEach((anims,chart)=>{if(!anims.running||!anims.items.length){return;}
+const items=anims.items;let i=items.length-1;let draw=false;let item;for(;i>=0;--i){item=items[i];if(item._active){if(item._total>anims.duration){anims.duration=item._total;}
+item.tick(date);draw=true;}else{items[i]=items[items.length-1];items.pop();}}
+if(draw){chart.draw();me._notify(chart,anims,date,'progress');}
+if(!items.length){anims.running=false;me._notify(chart,anims,date,'complete');anims.initial=false;}
+remaining+=items.length;});me._lastDate=date;if(remaining===0){me._running=false;}}
+_getAnims(chart){const charts=this._charts;let anims=charts.get(chart);if(!anims){anims={running:false,initial:true,items:[],listeners:{complete:[],progress:[]}};charts.set(chart,anims);}
+return anims;}
+listen(chart,event,cb){this._getAnims(chart).listeners[event].push(cb);}
+add(chart,items){if(!items||!items.length){return;}
+this._getAnims(chart).items.push(...items);}
+has(chart){return this._getAnims(chart).items.length>0;}
+start(chart){const anims=this._charts.get(chart);if(!anims){return;}
+anims.running=true;anims.start=Date.now();anims.duration=anims.items.reduce((acc,cur)=>Math.max(acc,cur._duration),0);this._refresh();}
+running(chart){if(!this._running){return false;}
+const anims=this._charts.get(chart);if(!anims||!anims.running||!anims.items.length){return false;}
+return true;}
+stop(chart){const anims=this._charts.get(chart);if(!anims||!anims.items.length){return;}
+const items=anims.items;let i=items.length-1;for(;i>=0;--i){items[i].cancel();}
+anims.items=[];this._notify(chart,anims,Date.now(),'complete');}
+remove(chart){return this._charts.delete(chart);}}
+var animator=new Animator();const map$1={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};const hex='0123456789ABCDEF';const h1=(b)=>hex[b&0xF];const h2=(b)=>hex[(b&0xF0)>>4]+hex[b&0xF];const eq=(b)=>(((b&0xF0)>>4)===(b&0xF));function isShort(v){return eq(v.r)&&eq(v.g)&&eq(v.b)&&eq(v.a);}
+function hexParse(str){var len=str.length;var ret;if(str[0]==='#'){if(len===4||len===5){ret={r:255&map$1[str[1]]*17,g:255&map$1[str[2]]*17,b:255&map$1[str[3]]*17,a:len===5?map$1[str[4]]*17:255};}else if(len===7||len===9){ret={r:map$1[str[1]]<<4|map$1[str[2]],g:map$1[str[3]]<<4|map$1[str[4]],b:map$1[str[5]]<<4|map$1[str[6]],a:len===9?(map$1[str[7]]<<4|map$1[str[8]]):255};}}
+return ret;}
+function hexString(v){var f=isShort(v)?h1:h2;return v?'#'+f(v.r)+f(v.g)+f(v.b)+(v.a<255?f(v.a):''):v;}
+function round(v){return v+0.5|0;}
+const lim=(v,l,h)=>Math.max(Math.min(v,h),l);function p2b(v){return lim(round(v*2.55),0,255);}
+function n2b(v){return lim(round(v*255),0,255);}
+function b2n(v){return lim(round(v/2.55)/100,0,1);}
+function n2p(v){return lim(round(v*100),0,100);}
+const RGB_RE=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function rgbParse(str){const m=RGB_RE.exec(str);let a=255;let r,g,b;if(!m){return;}
+if(m[7]!==r){const v=+m[7];a=255&(m[8]?p2b(v):v*255);}
+r=+m[1];g=+m[3];b=+m[5];r=255&(m[2]?p2b(r):r);g=255&(m[4]?p2b(g):g);b=255&(m[6]?p2b(b):b);return{r:r,g:g,b:b,a:a};}
+function rgbString(v){return v&&(v.a<255?`rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`:`rgb(${v.r}, ${v.g}, ${v.b})`);}
+const HUE_RE=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function hsl2rgbn(h,s,l){const a=s*Math.min(l,1-l);const f=(n,k=(n+h/30)%12)=>l-a*Math.max(Math.min(k-3,9-k,1),-1);return[f(0),f(8),f(4)];}
+function hsv2rgbn(h,s,v){const f=(n,k=(n+h/60)%6)=>v-v*s*Math.max(Math.min(k,4-k,1),0);return[f(5),f(3),f(1)];}
+function hwb2rgbn(h,w,b){const rgb=hsl2rgbn(h,1,0.5);let i;if(w+b>1){i=1/(w+b);w*=i;b*=i;}
+for(i=0;i<3;i++){rgb[i]*=1-w-b;rgb[i]+=w;}
+return rgb;}
+function rgb2hsl(v){const range=255;const r=v.r/range;const g=v.g/range;const b=v.b/range;const max=Math.max(r,g,b);const min=Math.min(r,g,b);const l=(max+min)/2;let h,s,d;if(max!==min){d=max-min;s=l>0.5?d/(2-max-min):d/(max+min);h=max===r?((g-b)/d)+(g>16&0xFF,k>>8&0xFF,k&0xFF];}
+return unpacked;}
+let names$1;function nameParse(str){if(!names$1){names$1=unpack();names$1.transparent=[0,0,0,0];}
+const a=names$1[str.toLowerCase()];return a&&{r:a[0],g:a[1],b:a[2],a:a.length===4?a[3]:255};}
+function modHSL(v,i,ratio){if(v){let tmp=rgb2hsl(v);tmp[i]=Math.max(0,Math.min(tmp[i]+tmp[i]*ratio,i===0?360:1));tmp=hsl2rgb(tmp);v.r=tmp[0];v.g=tmp[1];v.b=tmp[2];}}
+function clone$1(v,proto){return v?Object.assign(proto||{},v):v;}
+function fromObject(input){var v={r:0,g:0,b:0,a:255};if(Array.isArray(input)){if(input.length>=3){v={r:input[0],g:input[1],b:input[2],a:255};if(input.length>3){v.a=n2b(input[3]);}}}else{v=clone$1(input,{r:0,g:0,b:0,a:1});v.a=n2b(v.a);}
+return v;}
+function functionParse(str){if(str.charAt(0)==='r'){return rgbParse(str);}
+return hueParse(str);}
+class Color{constructor(input){if(input instanceof Color){return input;}
+const type=typeof input;let v;if(type==='object'){v=fromObject(input);}else if(type==='string'){v=hexParse(input)||nameParse(input)||functionParse(input);}
+this._rgb=v;this._valid=!!v;}
+get valid(){return this._valid;}
+get rgb(){var v=clone$1(this._rgb);if(v){v.a=b2n(v.a);}
+return v;}
+set rgb(obj){this._rgb=fromObject(obj);}
+rgbString(){return this._valid?rgbString(this._rgb):this._rgb;}
+hexString(){return this._valid?hexString(this._rgb):this._rgb;}
+hslString(){return this._valid?hslString(this._rgb):this._rgb;}
+mix(color,weight){const me=this;if(color){const c1=me.rgb;const c2=color.rgb;let w2;const p=weight===w2?0.5:weight;const w=2*p-1;const a=c1.a-c2.a;const w1=((w*a===-1?w:(w+a)/(1+w*a))+1)/2.0;w2=1-w1;c1.r=0xFF&w1*c1.r+w2*c2.r+0.5;c1.g=0xFF&w1*c1.g+w2*c2.g+0.5;c1.b=0xFF&w1*c1.b+w2*c2.b+0.5;c1.a=p*c1.a+(1-p)*c2.a;me.rgb=c1;}
+return me;}
+clone(){return new Color(this.rgb);}
+alpha(a){this._rgb.a=n2b(a);return this;}
+clearer(ratio){const rgb=this._rgb;rgb.a*=1-ratio;return this;}
+greyscale(){const rgb=this._rgb;const val=round(rgb.r*0.3+rgb.g*0.59+rgb.b*0.11);rgb.r=rgb.g=rgb.b=val;return this;}
+opaquer(ratio){const rgb=this._rgb;rgb.a*=1+ratio;return this;}
+negate(){const v=this._rgb;v.r=255-v.r;v.g=255-v.g;v.b=255-v.b;return this;}
+lighten(ratio){modHSL(this._rgb,2,ratio);return this;}
+darken(ratio){modHSL(this._rgb,2,-ratio);return this;}
+saturate(ratio){modHSL(this._rgb,1,ratio);return this;}
+desaturate(ratio){modHSL(this._rgb,1,-ratio);return this;}
+rotate(deg){rotate(this._rgb,deg);return this;}}
+function index_esm(input){return new Color(input);}
+const isPatternOrGradient=(value)=>value instanceof CanvasGradient||value instanceof CanvasPattern;function color(value){return isPatternOrGradient(value)?value:index_esm(value);}
+function getHoverColor(value){return isPatternOrGradient(value)?value:index_esm(value).saturate(0.5).darken(0.1).hexString();}
+function noop(){}
+const uid=(function(){let id=0;return function(){return id++;};}());function isNullOrUndef(value){return value===null||typeof value==='undefined';}
+function isArray(value){if(Array.isArray&&Array.isArray(value)){return true;}
+const type=Object.prototype.toString.call(value);if(type.substr(0,7)==='[object'&&type.substr(-6)==='Array]'){return true;}
+return false;}
+function isObject(value){return value!==null&&Object.prototype.toString.call(value)==='[object Object]';}
+const isNumberFinite=(value)=>(typeof value==='number'||value instanceof Number)&&isFinite(+value);function finiteOrDefault(value,defaultValue){return isNumberFinite(value)?value:defaultValue;}
+function valueOrDefault(value,defaultValue){return typeof value==='undefined'?defaultValue:value;}
+const toPercentage=(value,dimension)=>typeof value==='string'&&value.endsWith('%')?parseFloat(value)/100:value/dimension;const toDimension=(value,dimension)=>typeof value==='string'&&value.endsWith('%')?parseFloat(value)/100*dimension:+value;function callback(fn,args,thisArg){if(fn&&typeof fn.call==='function'){return fn.apply(thisArg,args);}}
+function each(loopable,fn,thisArg,reverse){let i,len,keys;if(isArray(loopable)){len=loopable.length;if(reverse){for(i=len-1;i>=0;i--){fn.call(thisArg,loopable[i],i);}}else{for(i=0;i=1){return t;}
-return-(Math.sqrt(1-t*t)-1);},easeOutCirc:function(t){return Math.sqrt(1-(t=t-1)*t);},easeInOutCirc:function(t){if((t/=0.5)<1){return-0.5*(Math.sqrt(1-t*t)-1);}
-return 0.5*(Math.sqrt(1-(t-=2)*t)+1);},easeInElastic:function(t){var s=1.70158;var p=0;var a=1;if(t===0){return 0;}
-if(t===1){return 1;}
-if(!p){p=0.3;}
-if(a<1){a=1;s=p/4;}else{s=p/(2*Math.PI)*Math.asin(1/a);}
-return-(a*Math.pow(2,10*(t-=1))*Math.sin((t-s)*(2*Math.PI)/p));},easeOutElastic:function(t){var s=1.70158;var p=0;var a=1;if(t===0){return 0;}
-if(t===1){return 1;}
-if(!p){p=0.3;}
-if(a<1){a=1;s=p/4;}else{s=p/(2*Math.PI)*Math.asin(1/a);}
-return a*Math.pow(2,-10*t)*Math.sin((t-s)*(2*Math.PI)/p)+1;},easeInOutElastic:function(t){var s=1.70158;var p=0;var a=1;if(t===0){return 0;}
-if((t/=0.5)===2){return 1;}
-if(!p){p=0.45;}
-if(a<1){a=1;s=p/4;}else{s=p/(2*Math.PI)*Math.asin(1/a);}
-if(t<1){return-0.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t-s)*(2*Math.PI)/p));}
-return a*Math.pow(2,-10*(t-=1))*Math.sin((t-s)*(2*Math.PI)/p)*0.5+1;},easeInBack:function(t){var s=1.70158;return t*t*((s+1)*t-s);},easeOutBack:function(t){var s=1.70158;return(t=t-1)*t*((s+1)*t+s)+1;},easeInOutBack:function(t){var s=1.70158;if((t/=0.5)<1){return 0.5*(t*t*(((s*=(1.525))+1)*t-s));}
-return 0.5*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2);},easeInBounce:function(t){return 1-effects.easeOutBounce(1-t);},easeOutBounce:function(t){if(t<(1/2.75)){return 7.5625*t*t;}
-if(t<(2/2.75)){return 7.5625*(t-=(1.5/2.75))*t+0.75;}
-if(t<(2.5/2.75)){return 7.5625*(t-=(2.25/2.75))*t+0.9375;}
-return 7.5625*(t-=(2.625/2.75))*t+0.984375;},easeInOutBounce:function(t){if(t<0.5){return effects.easeInBounce(t*2)*0.5;}
-return effects.easeOutBounce(t*2-1)*0.5+0.5;}};var helpers_easing={effects:effects};helpers_core.easingEffects=effects;var PI=Math.PI;var RAD_PER_DEG=PI/180;var DOUBLE_PI=PI*2;var HALF_PI=PI/2;var QUARTER_PI=PI/4;var TWO_THIRDS_PI=PI*2/3;var exports$1={clear:function(chart){chart.ctx.clearRect(0,0,chart.width,chart.height);},roundedRect:function(ctx,x,y,width,height,radius){if(radius){var r=Math.min(radius,height/2,width/2);var left=x+r;var top=y+r;var right=x+width-r;var bottom=y+height-r;ctx.moveTo(x,top);if(leftarea.left-epsilon&&point.xarea.top-epsilon&&point.ypos){obj=obj[key.substr(pos,idx-pos)];pos=idx+1;idx=indexOfDotOrLength(key,pos);}
+return obj;}
+function _capitalize(str){return str.charAt(0).toUpperCase()+str.slice(1);}
+const defined=(value)=>typeof value!=='undefined';const isFunction=(value)=>typeof value==='function';const setsEqual=(a,b)=>{if(a.size!==b.size){return false;}
+for(const item of a){if(!b.has(item)){return false;}}
+return true;};const overrides=Object.create(null);const descriptors=Object.create(null);function getScope$1(node,key){if(!key){return node;}
+const keys=key.split('.');for(let i=0,n=keys.length;icontext.chart.platform.getDevicePixelRatio();this.elements={};this.events=['mousemove','mouseout','click','touchstart','touchmove'];this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:'normal',lineHeight:1.2,weight:null};this.hover={};this.hoverBackgroundColor=(ctx,options)=>getHoverColor(options.backgroundColor);this.hoverBorderColor=(ctx,options)=>getHoverColor(options.borderColor);this.hoverColor=(ctx,options)=>getHoverColor(options.color);this.indexAxis='x';this.interaction={mode:'nearest',intersect:true};this.maintainAspectRatio=true;this.onHover=null;this.onClick=null;this.parsing=true;this.plugins={};this.responsive=true;this.scale=undefined;this.scales={};this.showLine=true;this.describe(_descriptors);}
+set(scope,values){return set(this,scope,values);}
+get(scope){return getScope$1(this,scope);}
+describe(scope,values){return set(descriptors,scope,values);}
+override(scope,values){return set(overrides,scope,values);}
+route(scope,name,targetScope,targetName){const scopeObject=getScope$1(this,scope);const targetScopeObject=getScope$1(this,targetScope);const privateName='_'+name;Object.defineProperties(scopeObject,{[privateName]:{value:scopeObject[name],writable:true},[name]:{enumerable:true,get(){const local=this[privateName];const target=targetScopeObject[targetName];if(isObject(local)){return Object.assign({},target,local);}
+return valueOrDefault(local,target);},set(value){this[privateName]=value;}}});}}
+var defaults=new Defaults({_scriptable:(name)=>!name.startsWith('on'),_indexable:(name)=>name!=='events',hover:{_fallback:'interaction'},interaction:{_scriptable:false,_indexable:false,}});const PI=Math.PI;const TAU=2*PI;const PITAU=TAU+PI;const INFINITY=Number.POSITIVE_INFINITY;const RAD_PER_DEG=PI/180;const HALF_PI=PI/2;const QUARTER_PI=PI/4;const TWO_THIRDS_PI=PI*2/3;const log10=Math.log10;const sign=Math.sign;function niceNum(range){const roundedRange=Math.round(range);range=almostEquals(range,roundedRange,range/1000)?roundedRange:range;const niceRange=Math.pow(10,Math.floor(log10(range)));const fraction=range/niceRange;const niceFraction=fraction<=1?1:fraction<=2?2:fraction<=5?5:10;return niceFraction*niceRange;}
+function _factorize(value){const result=[];const sqrt=Math.sqrt(value);let i;for(i=1;ia-b).pop();return result;}
+function isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n);}
+function almostEquals(x,y,epsilon){return Math.abs(x-y)=x);}
+function _setMinAndMaxByKey(array,target,property){let i,ilen,value;for(i=0,ilen=array.length;iangleToEnd&&startToAngle0){me.requestAnimationFrame();}},advance:function(){var animations=this.animations;var animation,chart,numSteps,nextStep;var i=0;while(i=numSteps){helpers$1.callback(animation.onAnimationComplete,[animation],chart);chart.animating=false;animations.splice(i,1);}else{++i;}}}};var resolve=helpers$1.options.resolve;var arrayEvents=['push','pop','shift','splice','unshift'];function listenArrayEvents(array,listener){if(array._chartjs){array._chartjs.listeners.push(listener);return;}
-Object.defineProperty(array,'_chartjs',{configurable:true,enumerable:false,value:{listeners:[listener]}});arrayEvents.forEach(function(key){var method='onData'+key.charAt(0).toUpperCase()+key.slice(1);var base=array[key];Object.defineProperty(array,key,{configurable:true,enumerable:false,value:function(){var args=Array.prototype.slice.call(arguments);var res=base.apply(this,args);helpers$1.each(array._chartjs.listeners,function(object){if(typeof object[method]==='function'){object[method].apply(object,args);}});return res;}});});}
-function unlistenArrayEvents(array,listener){var stub=array._chartjs;if(!stub){return;}
-var listeners=stub.listeners;var index=listeners.indexOf(listener);if(index!==-1){listeners.splice(index,1);}
-if(listeners.length>0){return;}
-arrayEvents.forEach(function(key){delete array[key];});delete array._chartjs;}
-var DatasetController=function(chart,datasetIndex){this.initialize(chart,datasetIndex);};helpers$1.extend(DatasetController.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:['backgroundColor','borderCapStyle','borderColor','borderDash','borderDashOffset','borderJoinStyle','borderWidth'],_dataElementOptions:['backgroundColor','borderColor','borderWidth','pointStyle'],initialize:function(chart,datasetIndex){var me=this;me.chart=chart;me.index=datasetIndex;me.linkScales();me.addElements();me._type=me.getMeta().type;},updateIndex:function(datasetIndex){this.index=datasetIndex;},linkScales:function(){var me=this;var meta=me.getMeta();var chart=me.chart;var scales=chart.scales;var dataset=me.getDataset();var scalesOpts=chart.options.scales;if(meta.xAxisID===null||!(meta.xAxisID in scales)||dataset.xAxisID){meta.xAxisID=dataset.xAxisID||scalesOpts.xAxes[0].id;}
-if(meta.yAxisID===null||!(meta.yAxisID in scales)||dataset.yAxisID){meta.yAxisID=dataset.yAxisID||scalesOpts.yAxes[0].id;}},getDataset:function(){return this.chart.data.datasets[this.index];},getMeta:function(){return this.chart.getDatasetMeta(this.index);},getScaleForId:function(scaleID){return this.chart.scales[scaleID];},_getValueScaleId:function(){return this.getMeta().yAxisID;},_getIndexScaleId:function(){return this.getMeta().xAxisID;},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId());},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId());},reset:function(){this._update(true);},destroy:function(){if(this._data){unlistenArrayEvents(this._data,this);}},createMetaDataset:function(){var me=this;var type=me.datasetElementType;return type&&new type({_chart:me.chart,_datasetIndex:me.index});},createMetaData:function(index){var me=this;var type=me.dataElementType;return type&&new type({_chart:me.chart,_datasetIndex:me.index,_index:index});},addElements:function(){var me=this;var meta=me.getMeta();var data=me.getDataset().data||[];var metaData=meta.data;var i,ilen;for(i=0,ilen=data.length;inumMeta){me.insertElements(numMeta,numData-numMeta);}},insertElements:function(start,count){for(var i=0;ipixelMargin){angleMargin=pixelMargin/arc.innerRadius;ctx.arc(x,y,arc.innerRadius-pixelMargin,endAngle+angleMargin,startAngle-angleMargin,true);}else{ctx.arc(x,y,pixelMargin,endAngle+Math.PI/2,startAngle-Math.PI/2);}
-ctx.closePath();ctx.clip();}
-function drawFullCircleBorders(ctx,vm,arc,inner){var endAngle=arc.endAngle;var i;if(inner){arc.endAngle=arc.startAngle+TAU;clipArc(ctx,arc);arc.endAngle=endAngle;if(arc.endAngle===arc.startAngle&&arc.fullCircles){arc.endAngle+=TAU;arc.fullCircles--;}}
-ctx.beginPath();ctx.arc(arc.x,arc.y,arc.innerRadius,arc.startAngle+TAU,arc.startAngle,true);for(i=0;iendAngle){angle-=TAU;}
-while(angle=startAngle&&angle<=endAngle);var withinRadius=(distance>=vm.innerRadius&&distance<=vm.outerRadius);return(betweenAngles&&withinRadius);}
-return false;},getCenterPoint:function(){var vm=this._view;var halfAngle=(vm.startAngle+vm.endAngle)/2;var halfRadius=(vm.innerRadius+vm.outerRadius)/2;return{x:vm.x+Math.cos(halfAngle)*halfRadius,y:vm.y+Math.sin(halfAngle)*halfRadius};},getArea:function(){var vm=this._view;return Math.PI*((vm.endAngle-vm.startAngle)/(2*Math.PI))*(Math.pow(vm.outerRadius,2)-Math.pow(vm.innerRadius,2));},tooltipPosition:function(){var vm=this._view;var centreAngle=vm.startAngle+((vm.endAngle-vm.startAngle)/2);var rangeFromCentre=(vm.outerRadius-vm.innerRadius)/2+vm.innerRadius;return{x:vm.x+(Math.cos(centreAngle)*rangeFromCentre),y:vm.y+(Math.sin(centreAngle)*rangeFromCentre)};},draw:function(){var ctx=this._chart.ctx;var vm=this._view;var pixelMargin=(vm.borderAlign==='inner')?0.33:0;var arc={x:vm.x,y:vm.y,innerRadius:vm.innerRadius,outerRadius:Math.max(vm.outerRadius-pixelMargin,0),pixelMargin:pixelMargin,startAngle:vm.startAngle,endAngle:vm.endAngle,fullCircles:Math.floor(vm.circumference/TAU)};var i;ctx.save();ctx.fillStyle=vm.backgroundColor;ctx.strokeStyle=vm.borderColor;if(arc.fullCircles){arc.endAngle=arc.startAngle+TAU;ctx.beginPath();ctx.arc(arc.x,arc.y,arc.outerRadius,arc.startAngle,arc.endAngle);ctx.arc(arc.x,arc.y,arc.innerRadius,arc.endAngle,arc.startAngle,true);ctx.closePath();for(i=0;ivm.x){edge=swap(edge,'left','right');}}else if(vm.basemaxH?maxH:t,r:skip.right||(r<0)?0:r>maxW?maxW:r,b:skip.bottom||(b<0)?0:b>maxH?maxH:b,l:skip.left||(l<0)?0:l>maxW?maxW:l};}
-function boundingRects(vm){var bounds=getBarBounds(vm);var width=bounds.right-bounds.left;var height=bounds.bottom-bounds.top;var border=parseBorderWidth(vm,width/2,height/2);return{outer:{x:bounds.left,y:bounds.top,w:width,h:height},inner:{x:bounds.left+border.l,y:bounds.top+border.t,w:width-border.l-border.r,h:height-border.t-border.b}};}
-function inRange(vm,x,y){var skipX=x===null;var skipY=y===null;var bounds=!vm||(skipX&&skipY)?false:getBarBounds(vm);return bounds&&(skipX||x>=bounds.left&&x<=bounds.right)&&(skipY||y>=bounds.top&&y<=bounds.bottom);}
-var element_rectangle=core_element.extend({_type:'rectangle',draw:function(){var ctx=this._chart.ctx;var vm=this._view;var rects=boundingRects(vm);var outer=rects.outer;var inner=rects.inner;ctx.fillStyle=vm.backgroundColor;ctx.fillRect(outer.x,outer.y,outer.w,outer.h);if(outer.w===inner.w&&outer.h===inner.h){return;}
-ctx.save();ctx.beginPath();ctx.rect(outer.x,outer.y,outer.w,outer.h);ctx.clip();ctx.fillStyle=vm.borderColor;ctx.rect(inner.x,inner.y,inner.w,inner.h);ctx.fill('evenodd');ctx.restore();},height:function(){var vm=this._view;return vm.base-vm.y;},inRange:function(mouseX,mouseY){return inRange(this._view,mouseX,mouseY);},inLabelRange:function(mouseX,mouseY){var vm=this._view;return isVertical(vm)?inRange(vm,mouseX,null):inRange(vm,null,mouseY);},inXRange:function(mouseX){return inRange(this._view,mouseX,null);},inYRange:function(mouseY){return inRange(this._view,null,mouseY);},getCenterPoint:function(){var vm=this._view;var x,y;if(isVertical(vm)){x=vm.x;y=(vm.y+vm.base)/2;}else{x=(vm.x+vm.base)/2;y=vm.y;}
-return{x:x,y:y};},getArea:function(){var vm=this._view;return isVertical(vm)?vm.width*Math.abs(vm.y-vm.base):vm.height*Math.abs(vm.x-vm.base);},tooltipPosition:function(){var vm=this._view;return{x:vm.x,y:vm.y};}});var elements={};var Arc=element_arc;var Line=element_line;var Point=element_point;var Rectangle=element_rectangle;elements.Arc=Arc;elements.Line=Line;elements.Point=Point;elements.Rectangle=Rectangle;var deprecated=helpers$1._deprecated;var valueOrDefault$3=helpers$1.valueOrDefault;core_defaults._set('bar',{hover:{mode:'label'},scales:{xAxes:[{type:'category',offset:true,gridLines:{offsetGridLines:true}}],yAxes:[{type:'linear'}]}});core_defaults._set('global',{datasets:{bar:{categoryPercentage:0.8,barPercentage:0.9}}});function computeMinSampleSize(scale,pixels){var min=scale._length;var prev,curr,i,ilen;for(i=1,ilen=pixels.length;i0?Math.min(min,Math.abs(curr-prev)):min;prev=curr;}
-return min;}
-function computeFitCategoryTraits(index,ruler,options){var thickness=options.barThickness;var count=ruler.stackCount;var curr=ruler.pixels[index];var min=helpers$1.isNullOrUndef(thickness)?computeMinSampleSize(ruler.scale,ruler.pixels):-1;var size,ratio;if(helpers$1.isNullOrUndef(thickness)){size=min*options.categoryPercentage;ratio=options.barPercentage;}else{size=thickness*count;ratio=1;}
-return{chunk:size/count,ratio:ratio,start:curr-(size/2)};}
-function computeFlexCategoryTraits(index,ruler,options){var pixels=ruler.pixels;var curr=pixels[index];var prev=index>0?pixels[index-1]:null;var next=index=0&&value.min>=0?value.min:value.max;var length=value.start===undefined?value.end:value.max>=0&&value.min>=0?value.max-value.min:value.min-value.max;var ilen=metasets.length;var i,imeta,ivalue,base,head,size,stackLength;if(stacked||(stacked===undefined&&stack!==undefined)){for(i=0;i=0&&stackLength.max>=0?stackLength.max:stackLength.min;if((value.min<0&&ivalue<0)||(value.max>=0&&ivalue>0)){start+=ivalue;}}}}
-base=scale.getPixelForValue(start);head=scale.getPixelForValue(start+length);size=head-base;if(minBarLength!==undefined&&Math.abs(size)=0&&!isHorizontal||length<0&&isHorizontal){head=base-minBarLength;}else{head=base+minBarLength;}}
-return{size:size,base:base,head:head,center:head+size/2};},calculateBarIndexPixels:function(datasetIndex,index,ruler,options){var me=this;var range=options.barThickness==='flex'?computeFlexCategoryTraits(index,ruler,options):computeFitCategoryTraits(index,ruler,options);var stackIndex=me.getStackIndex(datasetIndex,me.getMeta().stack);var center=range.start+(range.chunk*stackIndex)+(range.chunk/2);var size=Math.min(valueOrDefault$3(options.maxBarThickness,Infinity),range.chunk*range.ratio);return{base:center-size/2,head:center+size/2,center:center,size:size};},draw:function(){var me=this;var chart=me.chart;var scale=me._getValueScale();var rects=me.getMeta().data;var dataset=me.getDataset();var ilen=rects.length;var i=0;helpers$1.canvas.clipArea(chart.ctx,chart.chartArea);for(;i=PI$1?-DOUBLE_PI$1:startAngle<-PI$1?DOUBLE_PI$1:0;var endAngle=startAngle+circumference;var startX=Math.cos(startAngle);var startY=Math.sin(startAngle);var endX=Math.cos(endAngle);var endY=Math.sin(endAngle);var contains0=(startAngle<=0&&endAngle>=0)||endAngle>=DOUBLE_PI$1;var contains90=(startAngle<=HALF_PI$1&&endAngle>=HALF_PI$1)||endAngle>=DOUBLE_PI$1+HALF_PI$1;var contains180=startAngle===-PI$1||endAngle>=PI$1;var contains270=(startAngle<=-HALF_PI$1&&endAngle>=-HALF_PI$1)||endAngle>=PI$1+HALF_PI$1;var minX=contains180?-1:Math.min(startX,startX*cutout,endX,endX*cutout);var minY=contains270?-1:Math.min(startY,startY*cutout,endY,endY*cutout);var maxX=contains0?1:Math.max(startX,startX*cutout,endX,endX*cutout);var maxY=contains90?1:Math.max(startY,startY*cutout,endY,endY*cutout);ratioX=(maxX-minX)/2;ratioY=(maxY-minY)/2;offsetX=-(maxX+minX)/2;offsetY=-(maxY+minY)/2;}
-for(i=0,ilen=arcs.length;i0&&!isNaN(value)){return DOUBLE_PI$1*(Math.abs(value)/total);}
-return 0;},getMaxBorderWidth:function(arcs){var me=this;var max=0;var chart=me.chart;var i,ilen,meta,arc,controller,options,borderWidth,hoverWidth;if(!arcs){for(i=0,ilen=chart.data.datasets.length;imax?borderWidth:max;max=hoverWidth>max?hoverWidth:max;}}
-return max;},setHoverStyle:function(arc){var model=arc._model;var options=arc._options;var getHoverColor=helpers$1.getHoverColor;arc.$previousStyle={backgroundColor:model.backgroundColor,borderColor:model.borderColor,borderWidth:model.borderWidth,};model.backgroundColor=valueOrDefault$5(options.hoverBackgroundColor,getHoverColor(options.backgroundColor));model.borderColor=valueOrDefault$5(options.hoverBorderColor,getHoverColor(options.borderColor));model.borderWidth=valueOrDefault$5(options.hoverBorderWidth,options.borderWidth);},_getRingWeightOffset:function(datasetIndex){var ringWeightOffset=0;for(var i=0;i0&&isPointInArea(points[i-1]._model,area)){model.controlPointPreviousX=capControlPoint(model.controlPointPreviousX,area.left,area.right);model.controlPointPreviousY=capControlPoint(model.controlPointPreviousY,area.top,area.bottom);}
-if(i0){items=chart.getDatasetMeta(items[0]._datasetIndex).data;}
-return items;},'x-axis':function(chart,e){return indexMode(chart,e,{intersect:false});},point:function(chart,e){var position=getRelativePosition(e,chart);return getIntersectItems(chart,position);},nearest:function(chart,e,options){var position=getRelativePosition(e,chart);options.axis=options.axis||'xy';var distanceMetric=getDistanceMetricForAxis(options.axis);return getNearestItems(chart,position,options.intersect,distanceMetric);},x:function(chart,e,options){var position=getRelativePosition(e,chart);var items=[];var intersectsItem=false;parseVisibleItems(chart,function(element){if(element.inXRange(position.x)){items.push(element);}
-if(element.inRange(position.x,position.y)){intersectsItem=true;}});if(options.intersect&&!intersectsItem){items=[];}
-return items;},y:function(chart,e,options){var position=getRelativePosition(e,chart);var items=[];var intersectsItem=false;parseVisibleItems(chart,function(element){if(element.inYRange(position.y)){items.push(element);}
-if(element.inRange(position.x,position.y)){intersectsItem=true;}});if(options.intersect&&!intersectsItem){items=[];}
-return items;}}};var extend=helpers$1.extend;function filterByPosition(array,position){return helpers$1.where(array,function(v){return v.pos===position;});}
-function sortByWeight(array,reverse){return array.sort(function(a,b){var v0=reverse?b:a;var v1=reverse?a:b;return v0.weight===v1.weight?v0.index-v1.index:v0.weight-v1.weight;});}
-function wrapBoxes(boxes){var layoutBoxes=[];var i,ilen,box;for(i=0,ilen=(boxes||[]).length;i0){var item=tooltipItems[0];if(item.label){title=item.label;}else if(item.xLabel){title=item.xLabel;}else if(labelCount>0&&item.index-1){return str.split('\n');}
-return str;}
-function createTooltipItem(element){var xScale=element._xScale;var yScale=element._yScale||element._scale;var index=element._index;var datasetIndex=element._datasetIndex;var controller=element._chart.getDatasetMeta(datasetIndex).controller;var indexScale=controller._getIndexScale();var valueScale=controller._getValueScale();return{xLabel:xScale?xScale.getLabelForIndex(index,datasetIndex):'',yLabel:yScale?yScale.getLabelForIndex(index,datasetIndex):'',label:indexScale?''+indexScale.getLabelForIndex(index,datasetIndex):'',value:valueScale?''+valueScale.getLabelForIndex(index,datasetIndex):'',index:index,datasetIndex:datasetIndex,x:element._model.x,y:element._model.y};}
-function getBaseModel(tooltipOpts){var globalDefaults=core_defaults.global;return{xPadding:tooltipOpts.xPadding,yPadding:tooltipOpts.yPadding,xAlign:tooltipOpts.xAlign,yAlign:tooltipOpts.yAlign,rtl:tooltipOpts.rtl,textDirection:tooltipOpts.textDirection,bodyFontColor:tooltipOpts.bodyFontColor,_bodyFontFamily:valueOrDefault$8(tooltipOpts.bodyFontFamily,globalDefaults.defaultFontFamily),_bodyFontStyle:valueOrDefault$8(tooltipOpts.bodyFontStyle,globalDefaults.defaultFontStyle),_bodyAlign:tooltipOpts.bodyAlign,bodyFontSize:valueOrDefault$8(tooltipOpts.bodyFontSize,globalDefaults.defaultFontSize),bodySpacing:tooltipOpts.bodySpacing,titleFontColor:tooltipOpts.titleFontColor,_titleFontFamily:valueOrDefault$8(tooltipOpts.titleFontFamily,globalDefaults.defaultFontFamily),_titleFontStyle:valueOrDefault$8(tooltipOpts.titleFontStyle,globalDefaults.defaultFontStyle),titleFontSize:valueOrDefault$8(tooltipOpts.titleFontSize,globalDefaults.defaultFontSize),_titleAlign:tooltipOpts.titleAlign,titleSpacing:tooltipOpts.titleSpacing,titleMarginBottom:tooltipOpts.titleMarginBottom,footerFontColor:tooltipOpts.footerFontColor,_footerFontFamily:valueOrDefault$8(tooltipOpts.footerFontFamily,globalDefaults.defaultFontFamily),_footerFontStyle:valueOrDefault$8(tooltipOpts.footerFontStyle,globalDefaults.defaultFontStyle),footerFontSize:valueOrDefault$8(tooltipOpts.footerFontSize,globalDefaults.defaultFontSize),_footerAlign:tooltipOpts.footerAlign,footerSpacing:tooltipOpts.footerSpacing,footerMarginTop:tooltipOpts.footerMarginTop,caretSize:tooltipOpts.caretSize,cornerRadius:tooltipOpts.cornerRadius,backgroundColor:tooltipOpts.backgroundColor,opacity:0,legendColorBackground:tooltipOpts.multiKeyBackground,displayColors:tooltipOpts.displayColors,borderColor:tooltipOpts.borderColor,borderWidth:tooltipOpts.borderWidth};}
-function getTooltipSize(tooltip,model){var ctx=tooltip._chart.ctx;var height=model.yPadding*2;var width=0;var body=model.body;var combinedBodyLength=body.reduce(function(count,bodyItem){return count+bodyItem.before.length+bodyItem.lines.length+bodyItem.after.length;},0);combinedBodyLength+=model.beforeBody.length+model.afterBody.length;var titleLineCount=model.title.length;var footerLineCount=model.footer.length;var titleFontSize=model.titleFontSize;var bodyFontSize=model.bodyFontSize;var footerFontSize=model.footerFontSize;height+=titleLineCount*titleFontSize;height+=titleLineCount?(titleLineCount-1)*model.titleSpacing:0;height+=titleLineCount?model.titleMarginBottom:0;height+=combinedBodyLength*bodyFontSize;height+=combinedBodyLength?(combinedBodyLength-1)*model.bodySpacing:0;height+=footerLineCount?model.footerMarginTop:0;height+=footerLineCount*(footerFontSize);height+=footerLineCount?(footerLineCount-1)*model.footerSpacing:0;var widthPadding=0;var maxLineWidth=function(line){width=Math.max(width,ctx.measureText(line).width+widthPadding);};ctx.font=helpers$1.fontString(titleFontSize,model._titleFontStyle,model._titleFontFamily);helpers$1.each(model.title,maxLineWidth);ctx.font=helpers$1.fontString(bodyFontSize,model._bodyFontStyle,model._bodyFontFamily);helpers$1.each(model.beforeBody.concat(model.afterBody),maxLineWidth);widthPadding=model.displayColors?(bodyFontSize+2):0;helpers$1.each(body,function(bodyItem){helpers$1.each(bodyItem.before,maxLineWidth);helpers$1.each(bodyItem.lines,maxLineWidth);helpers$1.each(bodyItem.after,maxLineWidth);});widthPadding=0;ctx.font=helpers$1.fontString(footerFontSize,model._footerFontStyle,model._footerFontFamily);helpers$1.each(model.footer,maxLineWidth);width+=2*model.xPadding;return{width:width,height:height};}
-function determineAlignment(tooltip,size){var model=tooltip._model;var chart=tooltip._chart;var chartArea=tooltip._chart.chartArea;var xAlign='center';var yAlign='center';if(model.y(chart.height-size.height)){yAlign='bottom';}
-var lf,rf;var olf,orf;var yf;var midX=(chartArea.left+chartArea.right)/2;var midY=(chartArea.top+chartArea.bottom)/2;if(yAlign==='center'){lf=function(x){return x<=midX;};rf=function(x){return x>midX;};}else{lf=function(x){return x<=(size.width/2);};rf=function(x){return x>=(chart.width-(size.width/2));};}
-olf=function(x){return x+size.width+model.caretSize+model.caretPadding>chart.width;};orf=function(x){return x-size.width-model.caretSize-model.caretPadding<0;};yf=function(y){return y<=midY?'top':'bottom';};if(lf(model.x)){xAlign='left';if(olf(model.x)){xAlign='center';yAlign=yf(model.y);}}else if(rf(model.x)){xAlign='right';if(orf(model.x)){xAlign='center';yAlign=yf(model.y);}}
-var opts=tooltip._options;return{xAlign:opts.xAlign?opts.xAlign:xAlign,yAlign:opts.yAlign?opts.yAlign:yAlign};}
-function getBackgroundPoint(vm,size,alignment,chart){var x=vm.x;var y=vm.y;var caretSize=vm.caretSize;var caretPadding=vm.caretPadding;var cornerRadius=vm.cornerRadius;var xAlign=alignment.xAlign;var yAlign=alignment.yAlign;var paddingAndSize=caretSize+caretPadding;var radiusAndPadding=cornerRadius+caretPadding;if(xAlign==='right'){x-=size.width;}else if(xAlign==='center'){x-=(size.width/2);if(x+size.width>chart.width){x=chart.width-size.width;}
-if(x<0){x=0;}}
-if(yAlign==='top'){y+=paddingAndSize;}else if(yAlign==='bottom'){y-=size.height+paddingAndSize;}else{y-=(size.height/2);}
-if(yAlign==='center'){if(xAlign==='left'){x+=paddingAndSize;}else if(xAlign==='right'){x-=paddingAndSize;}}else if(xAlign==='left'){x-=radiusAndPadding;}else if(xAlign==='right'){x+=radiusAndPadding;}
-return{x:x,y:y};}
-function getAlignedX(vm,align){return align==='center'?vm.x+vm.width/2:align==='right'?vm.x+vm.width-vm.xPadding:vm.x+vm.xPadding;}
-function getBeforeAfterBodyLines(callback){return pushOrConcat([],splitNewlines(callback));}
-var exports$4=core_element.extend({initialize:function(){this._model=getBaseModel(this._options);this._lastActive=[];},getTitle:function(){var me=this;var opts=me._options;var callbacks=opts.callbacks;var beforeTitle=callbacks.beforeTitle.apply(me,arguments);var title=callbacks.title.apply(me,arguments);var afterTitle=callbacks.afterTitle.apply(me,arguments);var lines=[];lines=pushOrConcat(lines,splitNewlines(beforeTitle));lines=pushOrConcat(lines,splitNewlines(title));lines=pushOrConcat(lines,splitNewlines(afterTitle));return lines;},getBeforeBody:function(){return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this,arguments));},getBody:function(tooltipItems,data){var me=this;var callbacks=me._options.callbacks;var bodyItems=[];helpers$1.each(tooltipItems,function(tooltipItem){var bodyItem={before:[],lines:[],after:[]};pushOrConcat(bodyItem.before,splitNewlines(callbacks.beforeLabel.call(me,tooltipItem,data)));pushOrConcat(bodyItem.lines,callbacks.label.call(me,tooltipItem,data));pushOrConcat(bodyItem.after,splitNewlines(callbacks.afterLabel.call(me,tooltipItem,data)));bodyItems.push(bodyItem);});return bodyItems;},getAfterBody:function(){return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this,arguments));},getFooter:function(){var me=this;var callbacks=me._options.callbacks;var beforeFooter=callbacks.beforeFooter.apply(me,arguments);var footer=callbacks.footer.apply(me,arguments);var afterFooter=callbacks.afterFooter.apply(me,arguments);var lines=[];lines=pushOrConcat(lines,splitNewlines(beforeFooter));lines=pushOrConcat(lines,splitNewlines(footer));lines=pushOrConcat(lines,splitNewlines(afterFooter));return lines;},update:function(changed){var me=this;var opts=me._options;var existingModel=me._model;var model=me._model=getBaseModel(opts);var active=me._active;var data=me._data;var alignment={xAlign:existingModel.xAlign,yAlign:existingModel.yAlign};var backgroundPoint={x:existingModel.x,y:existingModel.y};var tooltipSize={width:existingModel.width,height:existingModel.height};var tooltipPosition={x:existingModel.caretX,y:existingModel.caretY};var i,len;if(active.length){model.opacity=1;var labelColors=[];var labelTextColors=[];tooltipPosition=positioners[opts.position].call(me,active,me._eventPosition);var tooltipItems=[];for(i=0,len=active.length;i0){ctx.stroke();}},draw:function(){var ctx=this._chart.ctx;var vm=this._view;if(vm.opacity===0){return;}
-var tooltipSize={width:vm.width,height:vm.height};var pt={x:vm.x,y:vm.y};var opacity=Math.abs(vm.opacity<1e-3)?0:vm.opacity;var hasTooltipContent=vm.title.length||vm.beforeBody.length||vm.body.length||vm.afterBody.length||vm.footer.length;if(this._options.enabled&&hasTooltipContent){ctx.save();ctx.globalAlpha=opacity;this.drawBackground(pt,vm,ctx,tooltipSize);pt.y+=vm.yPadding;helpers$1.rtl.overrideTextDirection(ctx,vm.textDirection);this.drawTitle(pt,vm,ctx);this.drawBody(pt,vm,ctx);this.drawFooter(pt,vm,ctx);helpers$1.rtl.restoreTextDirection(ctx,vm.textDirection);ctx.restore();}},handleEvent:function(e){var me=this;var options=me._options;var changed=false;me._lastActive=me._lastActive||[];if(e.type==='mouseout'){me._active=[];}else{me._active=me._chart.getElementsAtEventForMode(e,options.mode,options);if(options.reverse){me._active.reverse();}}
-changed=!helpers$1.arrayEquals(me._active,me._lastActive);if(changed){me._lastActive=me._active;if(options.enabled||options.custom){me._eventPosition={x:e.x,y:e.y};me.update(true);me.pivot();}}
-return changed;}});var positioners_1=positioners;var core_tooltip=exports$4;core_tooltip.positioners=positioners_1;var valueOrDefault$9=helpers$1.valueOrDefault;core_defaults._set('global',{elements:{},events:['mousemove','mouseout','click','touchstart','touchmove'],hover:{onHover:null,mode:'nearest',intersect:true,animationDuration:400},onClick:null,maintainAspectRatio:true,responsive:true,responsiveAnimationDuration:0});function mergeScaleConfig(){return helpers$1.merge({},[].slice.call(arguments),{merger:function(key,target,source,options){if(key==='xAxes'||key==='yAxes'){var slen=source[key].length;var i,type,scale;if(!target[key]){target[key]=[];}
-for(i=0;i=target[key].length){target[key].push({});}
-if(!target[key][i].type||(scale.type&&scale.type!==target[key][i].type)){helpers$1.merge(target[key][i],[core_scaleService.getScaleDefaults(type),scale]);}else{helpers$1.merge(target[key][i],scale);}}}else{helpers$1._merger(key,target,source,options);}}});}
-function mergeConfig(){return helpers$1.merge({},[].slice.call(arguments),{merger:function(key,target,source,options){var tval=target[key]||{};var sval=source[key];if(key==='scales'){target[key]=mergeScaleConfig(tval,sval);}else if(key==='scale'){target[key]=helpers$1.merge(tval,[core_scaleService.getScaleDefaults(sval.type),sval]);}else{helpers$1._merger(key,target,source,options);}}});}
-function initConfig(config){config=config||{};var data=config.data=config.data||{};data.datasets=data.datasets||[];data.labels=data.labels||[];config.options=mergeConfig(core_defaults.global,core_defaults[config.type],config.options||{});return config;}
-function updateConfig(chart){var newOptions=chart.options;helpers$1.each(chart.scales,function(scale){core_layouts.removeBox(chart,scale);});newOptions=mergeConfig(core_defaults.global,core_defaults[chart.config.type],newOptions);chart.options=chart.config.options=newOptions;chart.ensureScalesHaveIDs();chart.buildOrUpdateScales();chart.tooltip._options=newOptions.tooltips;chart.tooltip.initialize();}
-function nextAvailableScaleId(axesOpts,prefix,index){var id;var hasId=function(obj){return obj.id===id;};do{id=prefix+index++;}while(helpers$1.findIndex(axesOpts,hasId)>=0);return id;}
-function positionIsHorizontal(position){return position==='top'||position==='bottom';}
-function compare2Level(l1,l2){return function(a,b){return a[l1]===b[l1]?a[l2]-b[l2]:a[l1]-b[l1];};}
-var Chart=function(item,config){this.construct(item,config);return this;};helpers$1.extend(Chart.prototype,{construct:function(item,config){var me=this;config=initConfig(config);var context=platform.acquireContext(item,config);var canvas=context&&context.canvas;var height=canvas&&canvas.height;var width=canvas&&canvas.width;me.id=helpers$1.uid();me.ctx=context;me.canvas=canvas;me.config=config;me.width=width;me.height=height;me.aspectRatio=height?width/height:null;me.options=config.options;me._bufferedRender=false;me._layers=[];me.chart=me;me.controller=me;Chart.instances[me.id]=me;Object.defineProperty(me,'data',{get:function(){return me.config.data;},set:function(value){me.config.data=value;}});if(!context||!canvas){console.error("Failed to create chart: can't acquire context from the given item");return;}
-me.initialize();me.update();},initialize:function(){var me=this;core_plugins.notify(me,'beforeInit');helpers$1.retinaScale(me,me.options.devicePixelRatio);me.bindEvents();if(me.options.responsive){me.resize(true);}
-me.initToolTip();core_plugins.notify(me,'afterInit');return me;},clear:function(){helpers$1.canvas.clear(this);return this;},stop:function(){core_animations.cancelAnimation(this);return this;},resize:function(silent){var me=this;var options=me.options;var canvas=me.canvas;var aspectRatio=(options.maintainAspectRatio&&me.aspectRatio)||null;var newWidth=Math.max(0,Math.floor(helpers$1.getMaximumWidth(canvas)));var newHeight=Math.max(0,Math.floor(aspectRatio?newWidth/aspectRatio:helpers$1.getMaximumHeight(canvas)));if(me.width===newWidth&&me.height===newHeight){return;}
-canvas.width=me.width=newWidth;canvas.height=me.height=newHeight;canvas.style.width=newWidth+'px';canvas.style.height=newHeight+'px';helpers$1.retinaScale(me,options.devicePixelRatio);if(!silent){var newSize={width:newWidth,height:newHeight};core_plugins.notify(me,'resize',[newSize]);if(options.onResize){options.onResize(me,newSize);}
-me.stop();me.update({duration:options.responsiveAnimationDuration});}},ensureScalesHaveIDs:function(){var options=this.options;var scalesOptions=options.scales||{};var scaleOptions=options.scale;helpers$1.each(scalesOptions.xAxes,function(xAxisOptions,index){if(!xAxisOptions.id){xAxisOptions.id=nextAvailableScaleId(scalesOptions.xAxes,'x-axis-',index);}});helpers$1.each(scalesOptions.yAxes,function(yAxisOptions,index){if(!yAxisOptions.id){yAxisOptions.id=nextAvailableScaleId(scalesOptions.yAxes,'y-axis-',index);}});if(scaleOptions){scaleOptions.id=scaleOptions.id||'scale';}},buildOrUpdateScales:function(){var me=this;var options=me.options;var scales=me.scales||{};var items=[];var updated=Object.keys(scales).reduce(function(obj,id){obj[id]=false;return obj;},{});if(options.scales){items=items.concat((options.scales.xAxes||[]).map(function(xAxisOptions){return{options:xAxisOptions,dtype:'category',dposition:'bottom'};}),(options.scales.yAxes||[]).map(function(yAxisOptions){return{options:yAxisOptions,dtype:'linear',dposition:'left'};}));}
-if(options.scale){items.push({options:options.scale,dtype:'radialLinear',isDefault:true,dposition:'chartArea'});}
-helpers$1.each(items,function(item){var scaleOptions=item.options;var id=scaleOptions.id;var scaleType=valueOrDefault$9(scaleOptions.type,item.dtype);if(positionIsHorizontal(scaleOptions.position)!==positionIsHorizontal(item.dposition)){scaleOptions.position=item.dposition;}
-updated[id]=true;var scale=null;if(id in scales&&scales[id].type===scaleType){scale=scales[id];scale.options=scaleOptions;scale.ctx=me.ctx;scale.chart=me;}else{var scaleClass=core_scaleService.getScaleConstructor(scaleType);if(!scaleClass){return;}
-scale=new scaleClass({id:id,type:scaleType,options:scaleOptions,ctx:me.ctx,chart:me});scales[scale.id]=scale;}
-scale.mergeTicksOptions();if(item.isDefault){me.scale=scale;}});helpers$1.each(updated,function(hasUpdated,id){if(!hasUpdated){delete scales[id];}});me.scales=scales;core_scaleService.addScalesToLayout(this);},buildOrUpdateControllers:function(){var me=this;var newControllers=[];var datasets=me.data.datasets;var i,ilen;for(i=0,ilen=datasets.length;i=0;--i){me.drawDataset(metasets[i],easingValue);}
-core_plugins.notify(me,'afterDatasetsDraw',[easingValue]);},drawDataset:function(meta,easingValue){var me=this;var args={meta:meta,index:meta.index,easingValue:easingValue};if(core_plugins.notify(me,'beforeDatasetDraw',[args])===false){return;}
-meta.controller.draw(easingValue);core_plugins.notify(me,'afterDatasetDraw',[args]);},_drawTooltip:function(easingValue){var me=this;var tooltip=me.tooltip;var args={tooltip:tooltip,easingValue:easingValue};if(core_plugins.notify(me,'beforeTooltipDraw',[args])===false){return;}
-tooltip.draw();core_plugins.notify(me,'afterTooltipDraw',[args]);},getElementAtEvent:function(e){return core_interaction.modes.single(this,e);},getElementsAtEvent:function(e){return core_interaction.modes.label(this,e,{intersect:true});},getElementsAtXAxis:function(e){return core_interaction.modes['x-axis'](this,e,{intersect:true});},getElementsAtEventForMode:function(e,mode,options){var method=core_interaction.modes[mode];if(typeof method==='function'){return method(this,e,options);}
-return[];},getDatasetAtEvent:function(e){return core_interaction.modes.dataset(this,e,{intersect:true});},getDatasetMeta:function(datasetIndex){var me=this;var dataset=me.data.datasets[datasetIndex];if(!dataset._meta){dataset._meta={};}
-var meta=dataset._meta[me.id];if(!meta){meta=dataset._meta[me.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:dataset.order||0,index:datasetIndex};}
-return meta;},getVisibleDatasetCount:function(){var count=0;for(var i=0,ilen=this.data.datasets.length;i=0;i--){var currentItem=arrayToSearch[i];if(filterCallback(currentItem)){return currentItem;}}};helpers$1.isNumber=function(n){return!isNaN(parseFloat(n))&&isFinite(n);};helpers$1.almostEquals=function(x,y,epsilon){return Math.abs(x-y)=x);};helpers$1.max=function(array){return array.reduce(function(max,value){if(!isNaN(value)){return Math.max(max,value);}
-return max;},Number.NEGATIVE_INFINITY);};helpers$1.min=function(array){return array.reduce(function(min,value){if(!isNaN(value)){return Math.min(min,value);}
-return min;},Number.POSITIVE_INFINITY);};helpers$1.sign=Math.sign?function(x){return Math.sign(x);}:function(x){x=+x;if(x===0||isNaN(x)){return x;}
-return x>0?1:-1;};helpers$1.toRadians=function(degrees){return degrees*(Math.PI/180);};helpers$1.toDegrees=function(radians){return radians*(180/Math.PI);};helpers$1._decimalPlaces=function(x){if(!helpers$1.isFinite(x)){return;}
-var e=1;var p=0;while(Math.round(x*e)/e!==x){e*=10;p++;}
-return p;};helpers$1.getAngleFromPoint=function(centrePoint,anglePoint){var distanceFromXCenter=anglePoint.x-centrePoint.x;var distanceFromYCenter=anglePoint.y-centrePoint.y;var radialDistanceFromCenter=Math.sqrt(distanceFromXCenter*distanceFromXCenter+distanceFromYCenter*distanceFromYCenter);var angle=Math.atan2(distanceFromYCenter,distanceFromXCenter);if(angle<(-0.5*Math.PI)){angle+=2.0*Math.PI;}
-return{angle:angle,distance:radialDistanceFromCenter};};helpers$1.distanceBetweenPoints=function(pt1,pt2){return Math.sqrt(Math.pow(pt2.x-pt1.x,2)+Math.pow(pt2.y-pt1.y,2));};helpers$1.aliasPixel=function(pixelWidth){return(pixelWidth%2===0)?0:0.5;};helpers$1._alignPixel=function(chart,pixel,width){var devicePixelRatio=chart.currentDevicePixelRatio;var halfWidth=width/2;return Math.round((pixel-halfWidth)*devicePixelRatio)/devicePixelRatio+halfWidth;};helpers$1.splineCurve=function(firstPoint,middlePoint,afterPoint,t){var previous=firstPoint.skip?middlePoint:firstPoint;var current=middlePoint;var next=afterPoint.skip?middlePoint:afterPoint;var d01=Math.sqrt(Math.pow(current.x-previous.x,2)+Math.pow(current.y-previous.y,2));var d12=Math.sqrt(Math.pow(next.x-current.x,2)+Math.pow(next.y-current.y,2));var s01=d01/(d01+d12);var s12=d12/(d01+d12);s01=isNaN(s01)?0:s01;s12=isNaN(s12)?0:s12;var fa=t*s01;var fb=t*s12;return{previous:{x:current.x-fa*(next.x-previous.x),y:current.y-fa*(next.y-previous.y)},next:{x:current.x+fb*(next.x-previous.x),y:current.y+fb*(next.y-previous.y)}};};helpers$1.EPSILON=Number.EPSILON||1e-14;helpers$1.splineCurveMonotone=function(points){var pointsWithTangents=(points||[]).map(function(point){return{model:point._model,deltaK:0,mK:0};});var pointsLen=pointsWithTangents.length;var i,pointBefore,pointCurrent,pointAfter;for(i=0;i0?pointsWithTangents[i-1]:null;pointAfter=i0?pointsWithTangents[i-1]:null;pointAfter=i=collection.length-1?collection[0]:collection[index+1];}
-return index>=collection.length-1?collection[collection.length-1]:collection[index+1];};helpers$1.previousItem=function(collection,index,loop){if(loop){return index<=0?collection[collection.length-1]:collection[index-1];}
-return index<=0?collection[0]:collection[index-1];};helpers$1.niceNum=function(range,round){var exponent=Math.floor(helpers$1.log10(range));var fraction=range/Math.pow(10,exponent);var niceFraction;if(round){if(fraction<1.5){niceFraction=1;}else if(fraction<3){niceFraction=2;}else if(fraction<7){niceFraction=5;}else{niceFraction=10;}}else if(fraction<=1.0){niceFraction=1;}else if(fraction<=2){niceFraction=2;}else if(fraction<=5){niceFraction=5;}else{niceFraction=10;}
-return niceFraction*Math.pow(10,exponent);};helpers$1.requestAnimFrame=(function(){if(typeof window==='undefined'){return function(callback){callback();};}
-return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){return window.setTimeout(callback,1000/60);};}());helpers$1.getRelativePosition=function(evt,chart){var mouseX,mouseY;var e=evt.originalEvent||evt;var canvas=evt.target||evt.srcElement;var boundingRect=canvas.getBoundingClientRect();var touches=e.touches;if(touches&&touches.length>0){mouseX=touches[0].clientX;mouseY=touches[0].clientY;}else{mouseX=e.clientX;mouseY=e.clientY;}
-var paddingLeft=parseFloat(helpers$1.getStyle(canvas,'padding-left'));var paddingTop=parseFloat(helpers$1.getStyle(canvas,'padding-top'));var paddingRight=parseFloat(helpers$1.getStyle(canvas,'padding-right'));var paddingBottom=parseFloat(helpers$1.getStyle(canvas,'padding-bottom'));var width=boundingRect.right-boundingRect.left-paddingLeft-paddingRight;var height=boundingRect.bottom-boundingRect.top-paddingTop-paddingBottom;mouseX=Math.round((mouseX-boundingRect.left-paddingLeft)/(width)*canvas.width/chart.currentDevicePixelRatio);mouseY=Math.round((mouseY-boundingRect.top-paddingTop)/(height)*canvas.height/chart.currentDevicePixelRatio);return{x:mouseX,y:mouseY};};function parseMaxStyle(styleValue,node,parentProperty){var valueInPixels;if(typeof styleValue==='string'){valueInPixels=parseInt(styleValue,10);if(styleValue.indexOf('%')!==-1){valueInPixels=valueInPixels/100*node.parentNode[parentProperty];}}else{valueInPixels=styleValue;}
-return valueInPixels;}
-function isConstrainedValue(value){return value!==undefined&&value!==null&&value!=='none';}
-function getConstraintDimension(domNode,maxStyle,percentageProperty){var view=document.defaultView;var parentNode=helpers$1._getParentNode(domNode);var constrainedNode=view.getComputedStyle(domNode)[maxStyle];var constrainedContainer=view.getComputedStyle(parentNode)[maxStyle];var hasCNode=isConstrainedValue(constrainedNode);var hasCContainer=isConstrainedValue(constrainedContainer);var infinity=Number.POSITIVE_INFINITY;if(hasCNode||hasCContainer){return Math.min(hasCNode?parseMaxStyle(constrainedNode,domNode,percentageProperty):infinity,hasCContainer?parseMaxStyle(constrainedContainer,parentNode,percentageProperty):infinity);}
-return'none';}
-helpers$1.getConstraintWidth=function(domNode){return getConstraintDimension(domNode,'max-width','clientWidth');};helpers$1.getConstraintHeight=function(domNode){return getConstraintDimension(domNode,'max-height','clientHeight');};helpers$1._calculatePadding=function(container,padding,parentDimension){padding=helpers$1.getStyle(container,padding);return padding.indexOf('%')>-1?parentDimension*parseInt(padding,10)/100:parseInt(padding,10);};helpers$1._getParentNode=function(domNode){var parent=domNode.parentNode;if(parent&&parent.toString()==='[object ShadowRoot]'){parent=parent.host;}
-return parent;};helpers$1.getMaximumWidth=function(domNode){var container=helpers$1._getParentNode(domNode);if(!container){return domNode.clientWidth;}
-var clientWidth=container.clientWidth;var paddingLeft=helpers$1._calculatePadding(container,'padding-left',clientWidth);var paddingRight=helpers$1._calculatePadding(container,'padding-right',clientWidth);var w=clientWidth-paddingLeft-paddingRight;var cw=helpers$1.getConstraintWidth(domNode);return isNaN(cw)?w:Math.min(w,cw);};helpers$1.getMaximumHeight=function(domNode){var container=helpers$1._getParentNode(domNode);if(!container){return domNode.clientHeight;}
-var clientHeight=container.clientHeight;var paddingTop=helpers$1._calculatePadding(container,'padding-top',clientHeight);var paddingBottom=helpers$1._calculatePadding(container,'padding-bottom',clientHeight);var h=clientHeight-paddingTop-paddingBottom;var ch=helpers$1.getConstraintHeight(domNode);return isNaN(ch)?h:Math.min(h,ch);};helpers$1.getStyle=function(el,property){return el.currentStyle?el.currentStyle[property]:document.defaultView.getComputedStyle(el,null).getPropertyValue(property);};helpers$1.retinaScale=function(chart,forceRatio){var pixelRatio=chart.currentDevicePixelRatio=forceRatio||(typeof window!=='undefined'&&window.devicePixelRatio)||1;if(pixelRatio===1){return;}
-var canvas=chart.canvas;var height=chart.height;var width=chart.width;canvas.height=height*pixelRatio;canvas.width=width*pixelRatio;chart.ctx.scale(pixelRatio,pixelRatio);if(!canvas.style.height&&!canvas.style.width){canvas.style.height=height+'px';canvas.style.width=width+'px';}};helpers$1.fontString=function(pixelSize,fontStyle,fontFamily){return fontStyle+' '+pixelSize+'px '+fontFamily;};helpers$1.longestText=function(ctx,font,arrayOfThings,cache){cache=cache||{};var data=cache.data=cache.data||{};var gc=cache.garbageCollect=cache.garbageCollect||[];if(cache.font!==font){data=cache.data={};gc=cache.garbageCollect=[];cache.font=font;}
-ctx.font=font;var longest=0;var ilen=arrayOfThings.length;var i,j,jlen,thing,nestedThing;for(i=0;iarrayOfThings.length){for(i=0;ilongest){longest=textWidth;}
-return longest;};helpers$1.numberOfLabelLines=function(arrayOfThings){var numberOfLines=1;helpers$1.each(arrayOfThings,function(thing){if(helpers$1.isArray(thing)){if(thing.length>numberOfLines){numberOfLines=thing.length;}}});return numberOfLines;};helpers$1.color=!chartjsColor?function(value){console.error('Color.js not found!');return value;}:function(value){if(value instanceof CanvasGradient){value=core_defaults.global.defaultColor;}
-return chartjsColor(value);};helpers$1.getHoverColor=function(colorValue){return(colorValue instanceof CanvasPattern||colorValue instanceof CanvasGradient)?colorValue:helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();};};function abstract(){throw new Error('This method is not implemented: either no adapter can '+'be found or an incomplete integration was provided.');}
-function DateAdapter(options){this.options=options||{};}
-helpers$1.extend(DateAdapter.prototype,{formats:abstract,parse:abstract,format:abstract,add:abstract,diff:abstract,startOf:abstract,endOf:abstract,_create:function(value){return value;}});DateAdapter.override=function(members){helpers$1.extend(DateAdapter.prototype,members);};var _date=DateAdapter;var core_adapters={_date:_date};var core_ticks={formatters:{values:function(value){return helpers$1.isArray(value)?value:''+value;},linear:function(tickValue,index,ticks){var delta=ticks.length>3?ticks[2]-ticks[1]:ticks[1]-ticks[0];if(Math.abs(delta)>1){if(tickValue!==Math.floor(tickValue)){delta=tickValue-Math.floor(tickValue);}}
-var logDelta=helpers$1.log10(Math.abs(delta));var tickString='';if(tickValue!==0){var maxTick=Math.max(Math.abs(ticks[0]),Math.abs(ticks[ticks.length-1]));if(maxTick<1e-4){var logTick=helpers$1.log10(Math.abs(tickValue));var numExponential=Math.floor(logTick)-Math.floor(logDelta);numExponential=Math.max(Math.min(numExponential,20),0);tickString=tickValue.toExponential(numExponential);}else{var numDecimal=-1*Math.floor(logDelta);numDecimal=Math.max(Math.min(numDecimal,20),0);tickString=tickValue.toFixed(numDecimal);}}else{tickString='0';}
-return tickString;},logarithmic:function(tickValue,index,ticks){var remain=tickValue/(Math.pow(10,Math.floor(helpers$1.log10(tickValue))));if(tickValue===0){return'0';}else if(remain===1||remain===2||remain===5||index===0||index===ticks.length-1){return tickValue.toExponential();}
-return'';}}};var isArray=helpers$1.isArray;var isNullOrUndef=helpers$1.isNullOrUndef;var valueOrDefault$a=helpers$1.valueOrDefault;var valueAtIndexOrDefault=helpers$1.valueAtIndexOrDefault;core_defaults._set('scale',{display:true,position:'left',offset:false,gridLines:{display:true,color:'rgba(0,0,0,0.1)',lineWidth:1,drawBorder:true,drawOnChartArea:true,drawTicks:true,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:'rgba(0,0,0,0.25)',zeroLineBorderDash:[],zeroLineBorderDashOffset:0.0,offsetGridLines:false,borderDash:[],borderDashOffset:0.0},scaleLabel:{display:false,labelString:'',padding:{top:4,bottom:4}},ticks:{beginAtZero:false,minRotation:0,maxRotation:50,mirror:false,padding:0,reverse:false,display:true,autoSkip:true,autoSkipPadding:0,labelOffset:0,callback:core_ticks.formatters.values,minor:{},major:{}}});function sample(arr,numItems){var result=[];var increment=arr.length/numItems;var i=0;var len=arr.length;for(;iarrayOfThings.length){for(i=0;i0){ctx.stroke();}}
+function _isPointInArea(point,area,margin){margin=margin||0.5;return!area||(point&&point.x>area.left-margin&&point.xarea.top-margin&&point.y0&&opts.strokeColor!=='';let i,line;ctx.save();ctx.font=font.string;setRenderOpts(ctx,opts);for(i=0;itable[index]1){mid=(lo+hi)>>1;if(cmp(mid)){lo=mid;}else{hi=mid;}}
+return{lo,hi};}
+const _lookupByKey=(table,key,value)=>_lookup(table,value,index=>table[index][key]_lookup(table,value,index=>table[index][key]>=value);function _filterBetween(values,min,max){let start=0;let end=values.length;while(startstart&&values[end-1]>max){end--;}
+return start>0||end{const method='_onData'+_capitalize(key);const base=array[key];Object.defineProperty(array,key,{configurable:true,enumerable:false,value(...args){const res=base.apply(this,args);array._chartjs.listeners.forEach((object)=>{if(typeof object[method]==='function'){object[method](...args);}});return res;}});});}
+function unlistenArrayEvents(array,listener){const stub=array._chartjs;if(!stub){return;}
+const listeners=stub.listeners;const index=listeners.indexOf(listener);if(index!==-1){listeners.splice(index,1);}
+if(listeners.length>0){return;}
+arrayEvents.forEach((key)=>{delete array[key];});delete array._chartjs;}
+function _arrayUnique(items){const set=new Set();let i,ilen;for(i=0,ilen=items.length;iwindow.getComputedStyle(element,null);function getStyle(el,property){return getComputedStyle(el).getPropertyValue(property);}
+const positions=['top','right','bottom','left'];function getPositionedStyle(styles,style,suffix){const result={};suffix=suffix?'-'+suffix:'';for(let i=0;i<4;i++){const pos=positions[i];result[pos]=parseFloat(styles[style+'-'+pos+suffix])||0;}
+result.width=result.left+result.right;result.height=result.top+result.bottom;return result;}
+const useOffsetPos=(x,y,target)=>(x>0||y>0)&&(!target||!target.shadowRoot);function getCanvasPosition(evt,canvas){const e=evt.native||evt;const touches=e.touches;const source=touches&&touches.length?touches[0]:e;const{offsetX,offsetY}=source;let box=false;let x,y;if(useOffsetPos(offsetX,offsetY,e.target)){x=offsetX;y=offsetY;}else{const rect=canvas.getBoundingClientRect();x=source.clientX-rect.left;y=source.clientY-rect.top;box=true;}
+return{x,y,box};}
+function getRelativePosition$1(evt,chart){const{canvas,currentDevicePixelRatio}=chart;const style=getComputedStyle(canvas);const borderBox=style.boxSizing==='border-box';const paddings=getPositionedStyle(style,'padding');const borders=getPositionedStyle(style,'border','width');const{x,y,box}=getCanvasPosition(evt,canvas);const xOffset=paddings.left+(box&&borders.left);const yOffset=paddings.top+(box&&borders.top);let{width,height}=chart;if(borderBox){width-=paddings.width+borders.width;height-=paddings.height+borders.height;}
+return{x:Math.round((x-xOffset)/width*canvas.width/currentDevicePixelRatio),y:Math.round((y-yOffset)/height*canvas.height/currentDevicePixelRatio)};}
+function getContainerSize(canvas,width,height){let maxWidth,maxHeight;if(width===undefined||height===undefined){const container=_getParentNode(canvas);if(!container){width=canvas.clientWidth;height=canvas.clientHeight;}else{const rect=container.getBoundingClientRect();const containerStyle=getComputedStyle(container);const containerBorder=getPositionedStyle(containerStyle,'border','width');const containerPadding=getPositionedStyle(containerStyle,'padding');width=rect.width-containerPadding.width-containerBorder.width;height=rect.height-containerPadding.height-containerBorder.height;maxWidth=parseMaxStyle(containerStyle.maxWidth,container,'clientWidth');maxHeight=parseMaxStyle(containerStyle.maxHeight,container,'clientHeight');}}
+return{width,height,maxWidth:maxWidth||INFINITY,maxHeight:maxHeight||INFINITY};}
+const round1=v=>Math.round(v*10)/10;function getMaximumSize(canvas,bbWidth,bbHeight,aspectRatio){const style=getComputedStyle(canvas);const margins=getPositionedStyle(style,'margin');const maxWidth=parseMaxStyle(style.maxWidth,canvas,'clientWidth')||INFINITY;const maxHeight=parseMaxStyle(style.maxHeight,canvas,'clientHeight')||INFINITY;const containerSize=getContainerSize(canvas,bbWidth,bbHeight);let{width,height}=containerSize;if(style.boxSizing==='content-box'){const borders=getPositionedStyle(style,'border','width');const paddings=getPositionedStyle(style,'padding');width-=paddings.width+borders.width;height-=paddings.height+borders.height;}
+width=Math.max(0,width-margins.width);height=Math.max(0,aspectRatio?Math.floor(width/aspectRatio):height-margins.height);width=round1(Math.min(width,maxWidth,containerSize.maxWidth));height=round1(Math.min(height,maxHeight,containerSize.maxHeight));if(width&&!height){height=round1(width/2);}
+return{width,height};}
+function retinaScale(chart,forceRatio,forceStyle){const pixelRatio=forceRatio||1;const deviceHeight=Math.floor(chart.height*pixelRatio);const deviceWidth=Math.floor(chart.width*pixelRatio);chart.height=deviceHeight/pixelRatio;chart.width=deviceWidth/pixelRatio;const canvas=chart.canvas;if(canvas.style&&(forceStyle||(!canvas.style.height&&!canvas.style.width))){canvas.style.height=`${chart.height}px`;canvas.style.width=`${chart.width}px`;}
+if(chart.currentDevicePixelRatio!==pixelRatio||canvas.height!==deviceHeight||canvas.width!==deviceWidth){chart.currentDevicePixelRatio=pixelRatio;canvas.height=deviceHeight;canvas.width=deviceWidth;chart.ctx.setTransform(pixelRatio,0,0,pixelRatio,0,0);return true;}
+return false;}
+const supportsEventListenerOptions=(function(){let passiveSupported=false;try{const options={get passive(){passiveSupported=true;return false;}};window.addEventListener('test',null,options);window.removeEventListener('test',null,options);}catch(e){}
+return passiveSupported;}());function readUsedSize(element,property){const value=getStyle(element,property);const matches=value&&value.match(/^(\d+)(\.\d+)?px$/);return matches?+matches[1]:undefined;}
+function getRelativePosition(e,chart){if('native'in e){return{x:e.x,y:e.y};}
+return getRelativePosition$1(e,chart);}
+function evaluateAllVisibleItems(chart,handler){const metasets=chart.getSortedVisibleDatasetMetas();let index,data,element;for(let i=0,ilen=metasets.length;i{if(element[rangeMethod](position[axis],useFinalPosition)){items.push({element,datasetIndex,index});}
+if(element.inRange(position.x,position.y,useFinalPosition)){intersectsItem=true;}});if(options.intersect&&!intersectsItem){return[];}
+return items;}
+var Interaction={modes:{index(chart,e,options,useFinalPosition){const position=getRelativePosition(e,chart);const axis=options.axis||'x';const items=options.intersect?getIntersectItems(chart,position,axis,useFinalPosition):getNearestItems(chart,position,axis,false,useFinalPosition);const elements=[];if(!items.length){return[];}
+chart.getSortedVisibleDatasetMetas().forEach((meta)=>{const index=items[0].index;const element=meta.data[index];if(element&&!element.skip){elements.push({element,datasetIndex:meta.index,index});}});return elements;},dataset(chart,e,options,useFinalPosition){const position=getRelativePosition(e,chart);const axis=options.axis||'xy';let items=options.intersect?getIntersectItems(chart,position,axis,useFinalPosition):getNearestItems(chart,position,axis,false,useFinalPosition);if(items.length>0){const datasetIndex=items[0].datasetIndex;const data=chart.getDatasetMeta(datasetIndex).data;items=[];for(let i=0;i+v||0;function _readValueToProps(value,props){const ret={};const objProps=isObject(props);const keys=objProps?Object.keys(props):props;const read=isObject(value)?objProps?prop=>valueOrDefault(value[prop],value[props[prop]]):prop=>value[prop]:()=>value;for(const prop of keys){ret[prop]=numberOrZero$1(read(prop));}
+return ret;}
+function toTRBL(value){return _readValueToProps(value,{top:'y',right:'x',bottom:'y',left:'x'});}
+function toTRBLCorners(value){return _readValueToProps(value,['topLeft','topRight','bottomLeft','bottomRight']);}
+function toPadding(value){const obj=toTRBL(value);obj.width=obj.left+obj.right;obj.height=obj.top+obj.bottom;return obj;}
+function toFont(options,fallback){options=options||{};fallback=fallback||defaults.font;let size=valueOrDefault(options.size,fallback.size);if(typeof size==='string'){size=parseInt(size,10);}
+let style=valueOrDefault(options.style,fallback.style);if(style&&!(''+style).match(FONT_STYLE)){console.warn('Invalid font style specified: "'+style+'"');style='';}
+const font={family:valueOrDefault(options.family,fallback.family),lineHeight:toLineHeight(valueOrDefault(options.lineHeight,fallback.lineHeight),size),size,style,weight:valueOrDefault(options.weight,fallback.weight),string:''};font.string=toFontString(font);return font;}
+function resolve(inputs,context,index,info){let cacheable=true;let i,ilen,value;for(i=0,ilen=inputs.length;iv.pos===position);}
+function filterDynamicPositionByAxis(array,axis){return array.filter(v=>STATIC_POSITIONS.indexOf(v.pos)===-1&&v.box.axis===axis);}
+function sortByWeight(array,reverse){return array.sort((a,b)=>{const v0=reverse?b:a;const v1=reverse?a:b;return v0.weight===v1.weight?v0.index-v1.index:v0.weight-v1.weight;});}
+function wrapBoxes(boxes){const layoutBoxes=[];let i,ilen,box,pos,stack,stackWeight;for(i=0,ilen=(boxes||[]).length;iwrap.box.fullSize),true);const left=sortByWeight(filterByPosition(layoutBoxes,'left'),true);const right=sortByWeight(filterByPosition(layoutBoxes,'right'));const top=sortByWeight(filterByPosition(layoutBoxes,'top'),true);const bottom=sortByWeight(filterByPosition(layoutBoxes,'bottom'));const centerHorizontal=filterDynamicPositionByAxis(layoutBoxes,'x');const centerVertical=filterDynamicPositionByAxis(layoutBoxes,'y');return{fullSize,leftAndTop:left.concat(top),rightAndBottom:right.concat(centerVertical).concat(bottom).concat(centerHorizontal),chartArea:filterByPosition(layoutBoxes,'chartArea'),vertical:left.concat(right).concat(centerVertical),horizontal:top.concat(bottom).concat(centerHorizontal)};}
+function getCombinedMax(maxPadding,chartArea,a,b){return Math.max(maxPadding[a],chartArea[a])+Math.max(maxPadding[b],chartArea[b]);}
+function updateMaxPadding(maxPadding,boxPadding){maxPadding.top=Math.max(maxPadding.top,boxPadding.top);maxPadding.left=Math.max(maxPadding.left,boxPadding.left);maxPadding.bottom=Math.max(maxPadding.bottom,boxPadding.bottom);maxPadding.right=Math.max(maxPadding.right,boxPadding.right);}
+function updateDims(chartArea,params,layout,stacks){const{pos,box}=layout;const maxPadding=chartArea.maxPadding;if(!isObject(pos)){if(layout.size){chartArea[pos]-=layout.size;}
+const stack=stacks[layout.stack]||{size:0,count:1};stack.size=Math.max(stack.size,layout.horizontal?box.height:box.width);layout.size=stack.size/stack.count;chartArea[pos]+=layout.size;}
+if(box.getPadding){updateMaxPadding(maxPadding,box.getPadding());}
+const newWidth=Math.max(0,params.outerWidth-getCombinedMax(maxPadding,chartArea,'left','right'));const newHeight=Math.max(0,params.outerHeight-getCombinedMax(maxPadding,chartArea,'top','bottom'));const widthChanged=newWidth!==chartArea.w;const heightChanged=newHeight!==chartArea.h;chartArea.w=newWidth;chartArea.h=newHeight;return layout.horizontal?{same:widthChanged,other:heightChanged}:{same:heightChanged,other:widthChanged};}
+function handleMaxPadding(chartArea){const maxPadding=chartArea.maxPadding;function updatePos(pos){const change=Math.max(maxPadding[pos]-chartArea[pos],0);chartArea[pos]+=change;return change;}
+chartArea.y+=updatePos('top');chartArea.x+=updatePos('left');updatePos('right');updatePos('bottom');}
+function getMargins(horizontal,chartArea){const maxPadding=chartArea.maxPadding;function marginForPositions(positions){const margin={left:0,top:0,right:0,bottom:0};positions.forEach((pos)=>{margin[pos]=Math.max(chartArea[pos],maxPadding[pos]);});return margin;}
+return horizontal?marginForPositions(['left','right']):marginForPositions(['top','bottom']);}
+function fitBoxes(boxes,chartArea,params,stacks){const refitBoxes=[];let i,ilen,layout,box,refit,changed;for(i=0,ilen=boxes.length,refit=0;i{if(typeof box.beforeLayout==='function'){box.beforeLayout();}});const visibleVerticalBoxCount=verticalBoxes.reduce((total,wrap)=>wrap.box.options&&wrap.box.options.display===false?total:total+1,0)||1;const params=Object.freeze({outerWidth:width,outerHeight:height,padding,availableWidth,availableHeight,vBoxMaxWidth:availableWidth/2/visibleVerticalBoxCount,hBoxMaxHeight:availableHeight/2});const maxPadding=Object.assign({},padding);updateMaxPadding(maxPadding,toPadding(minPadding));const chartArea=Object.assign({maxPadding,w:availableWidth,h:availableHeight,x:padding.left,y:padding.top},padding);const stacks=setLayoutDims(verticalBoxes.concat(horizontalBoxes),params);fitBoxes(boxes.fullSize,chartArea,params,stacks);fitBoxes(verticalBoxes,chartArea,params,stacks);if(fitBoxes(horizontalBoxes,chartArea,params,stacks)){fitBoxes(verticalBoxes,chartArea,params,stacks);}
+handleMaxPadding(chartArea);placeBoxes(boxes.leftAndTop,chartArea,params,stacks);chartArea.x+=chartArea.w;chartArea.y+=chartArea.h;placeBoxes(boxes.rightAndBottom,chartArea,params,stacks);chart.chartArea={left:chartArea.left,top:chartArea.top,right:chartArea.left+chartArea.w,bottom:chartArea.top+chartArea.h,height:chartArea.h,width:chartArea.w,};each(boxes.chartArea,(layout)=>{const box=layout.box;Object.assign(box,chart.chartArea);box.update(chartArea.w,chartArea.h);});}};function _createResolver(scopes,prefixes=[''],rootScopes=scopes,fallback,getTarget=()=>scopes[0]){if(!defined(fallback)){fallback=_resolve('_fallback',scopes);}
+const cache={[Symbol.toStringTag]:'Object',_cacheable:true,_scopes:scopes,_rootScopes:rootScopes,_fallback:fallback,_getTarget:getTarget,override:(scope)=>_createResolver([scope,...scopes],prefixes,rootScopes,fallback),};return new Proxy(cache,{deleteProperty(target,prop){delete target[prop];delete target._keys;delete scopes[0][prop];return true;},get(target,prop){return _cached(target,prop,()=>_resolveWithPrefixes(prop,prefixes,scopes,target));},getOwnPropertyDescriptor(target,prop){return Reflect.getOwnPropertyDescriptor(target._scopes[0],prop);},getPrototypeOf(){return Reflect.getPrototypeOf(scopes[0]);},has(target,prop){return getKeysFromAllScopes(target).includes(prop);},ownKeys(target){return getKeysFromAllScopes(target);},set(target,prop,value){const storage=target._storage||(target._storage=getTarget());storage[prop]=value;delete target[prop];delete target._keys;return true;}});}
+function _attachContext(proxy,context,subProxy,descriptorDefaults){const cache={_cacheable:false,_proxy:proxy,_context:context,_subProxy:subProxy,_stack:new Set(),_descriptors:_descriptors(proxy,descriptorDefaults),setContext:(ctx)=>_attachContext(proxy,ctx,subProxy,descriptorDefaults),override:(scope)=>_attachContext(proxy.override(scope),context,subProxy,descriptorDefaults)};return new Proxy(cache,{deleteProperty(target,prop){delete target[prop];delete proxy[prop];return true;},get(target,prop,receiver){return _cached(target,prop,()=>_resolveWithContext(target,prop,receiver));},getOwnPropertyDescriptor(target,prop){return target._descriptors.allKeys?Reflect.has(proxy,prop)?{enumerable:true,configurable:true}:undefined:Reflect.getOwnPropertyDescriptor(proxy,prop);},getPrototypeOf(){return Reflect.getPrototypeOf(proxy);},has(target,prop){return Reflect.has(proxy,prop);},ownKeys(){return Reflect.ownKeys(proxy);},set(target,prop,value){proxy[prop]=value;delete target[prop];return true;}});}
+function _descriptors(proxy,defaults={scriptable:true,indexable:true}){const{_scriptable=defaults.scriptable,_indexable=defaults.indexable,_allKeys=defaults.allKeys}=proxy;return{allKeys:_allKeys,scriptable:_scriptable,indexable:_indexable,isScriptable:isFunction(_scriptable)?_scriptable:()=>_scriptable,isIndexable:isFunction(_indexable)?_indexable:()=>_indexable};}
+const readKey=(prefix,name)=>prefix?prefix+_capitalize(name):name;const needsSubResolver=(prop,value)=>isObject(value)&&prop!=='adapters';function _cached(target,prop,resolve){let value=target[prop];if(defined(value)){return value;}
+value=resolve();if(defined(value)){target[prop]=value;}
+return value;}
+function _resolveWithContext(target,prop,receiver){const{_proxy,_context,_subProxy,_descriptors:descriptors}=target;let value=_proxy[prop];if(isFunction(value)&&descriptors.isScriptable(prop)){value=_resolveScriptable(prop,value,target,receiver);}
+if(isArray(value)&&value.length){value=_resolveArray(prop,value,target,descriptors.isIndexable);}
+if(needsSubResolver(prop,value)){value=_attachContext(value,_context,_subProxy&&_subProxy[prop],descriptors);}
+return value;}
+function _resolveScriptable(prop,value,target,receiver){const{_proxy,_context,_subProxy,_stack}=target;if(_stack.has(prop)){throw new Error('Recursion detected: '+Array.from(_stack).join('->')+'->'+prop);}
+_stack.add(prop);value=value(_context,_subProxy||receiver);_stack.delete(prop);if(isObject(value)){value=createSubResolver(_proxy._scopes,_proxy,prop,value);}
+return value;}
+function _resolveArray(prop,value,target,isIndexable){const{_proxy,_context,_subProxy,_descriptors:descriptors}=target;if(defined(_context.index)&&isIndexable(prop)){value=value[_context.index%value.length];}else if(isObject(value[0])){const arr=value;const scopes=_proxy._scopes.filter(s=>s!==arr);value=[];for(const item of arr){const resolver=createSubResolver(scopes,_proxy,prop,item);value.push(_attachContext(resolver,_context,_subProxy&&_subProxy[prop],descriptors));}}
+return value;}
+function resolveFallback(fallback,prop,value){return isFunction(fallback)?fallback(prop,value):fallback;}
+const getScope=(key,parent)=>key===true?parent:typeof key==='string'?resolveObjectKey(parent,key):undefined;function addScopes(set,parentScopes,key,parentFallback){for(const parent of parentScopes){const scope=getScope(key,parent);if(scope){set.add(scope);const fallback=resolveFallback(scope._fallback,key,scope);if(defined(fallback)&&fallback!==key&&fallback!==parentFallback){return fallback;}}else if(scope===false&&defined(parentFallback)&&key!==parentFallback){return null;}}
+return false;}
+function createSubResolver(parentScopes,resolver,prop,value){const rootScopes=resolver._rootScopes;const fallback=resolveFallback(resolver._fallback,prop,value);const allScopes=[...parentScopes,...rootScopes];const set=new Set();set.add(value);let key=addScopesFromKey(set,allScopes,prop,fallback||prop);if(key===null){return false;}
+if(defined(fallback)&&fallback!==prop){key=addScopesFromKey(set,allScopes,fallback,key);if(key===null){return false;}}
+return _createResolver(Array.from(set),[''],rootScopes,fallback,()=>subGetTarget(resolver,prop,value));}
+function addScopesFromKey(set,allScopes,key,fallback){while(key){key=addScopes(set,allScopes,key,fallback);}
+return key;}
+function subGetTarget(resolver,prop,value){const parent=resolver._getTarget();if(!(prop in parent)){parent[prop]={};}
+const target=parent[prop];if(isArray(target)&&isObject(value)){return value;}
+return target;}
+function _resolveWithPrefixes(prop,prefixes,scopes,proxy){let value;for(const prefix of prefixes){value=_resolve(readKey(prefix,prop),scopes);if(defined(value)){return needsSubResolver(prop,value)?createSubResolver(scopes,proxy,prop,value):value;}}}
+function _resolve(key,scopes){for(const scope of scopes){if(!scope){continue;}
+const value=scope[key];if(defined(value)){return value;}}}
+function getKeysFromAllScopes(target){let keys=target._keys;if(!keys){keys=target._keys=resolveKeysFromAllScopes(target._scopes);}
+return keys;}
+function resolveKeysFromAllScopes(scopes){const set=new Set();for(const scope of scopes){for(const key of Object.keys(scope).filter(k=>!k.startsWith('_'))){set.add(key);}}
+return Array.from(set);}
+const EPSILON=Number.EPSILON||1e-14;const getPoint=(points,i)=>iindexAxis==='x'?'y':'x';function splineCurve(firstPoint,middlePoint,afterPoint,t){const previous=firstPoint.skip?middlePoint:firstPoint;const current=middlePoint;const next=afterPoint.skip?middlePoint:afterPoint;const d01=distanceBetweenPoints(current,previous);const d12=distanceBetweenPoints(next,current);let s01=d01/(d01+d12);let s12=d12/(d01+d12);s01=isNaN(s01)?0:s01;s12=isNaN(s12)?0:s12;const fa=t*s01;const fb=t*s12;return{previous:{x:current.x-fa*(next.x-previous.x),y:current.y-fa*(next.y-previous.y)},next:{x:current.x+fb*(next.x-previous.x),y:current.y+fb*(next.y-previous.y)}};}
+function monotoneAdjust(points,deltaK,mK){const pointsLen=points.length;let alphaK,betaK,tauK,squaredMagnitude,pointCurrent;let pointAfter=getPoint(points,0);for(let i=0;i!pt.skip);}
+if(options.cubicInterpolationMode==='monotone'){splineCurveMonotone(points,indexAxis);}else{let prev=loop?points[points.length-1]:points[0];for(i=0,ilen=points.length;it===0||t===1;const elasticIn=(t,s,p)=>-(Math.pow(2,10*(t-=1))*Math.sin((t-s)*TAU/p));const elasticOut=(t,s,p)=>Math.pow(2,-10*t)*Math.sin((t-s)*TAU/p)+1;const effects={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>((t/=0.5)<1)?0.5*t*t:-0.5*((--t)*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>((t/=0.5)<1)?0.5*t*t*t:0.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>((t/=0.5)<1)?0.5*t*t*t*t:-0.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>((t/=0.5)<1)?0.5*t*t*t*t*t:0.5*((t-=2)*t*t*t*t+2),easeInSine:t=>-Math.cos(t*HALF_PI)+1,easeOutSine:t=>Math.sin(t*HALF_PI),easeInOutSine:t=>-0.5*(Math.cos(PI*t)-1),easeInExpo:t=>(t===0)?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>(t===1)?1:-Math.pow(2,-10*t)+1,easeInOutExpo:t=>atEdge(t)?t:t<0.5?0.5*Math.pow(2,10*(t*2-1)):0.5*(-Math.pow(2,-10*(t*2-1))+2),easeInCirc:t=>(t>=1)?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>((t/=0.5)<1)?-0.5*(Math.sqrt(1-t*t)-1):0.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>atEdge(t)?t:elasticIn(t,0.075,0.3),easeOutElastic:t=>atEdge(t)?t:elasticOut(t,0.075,0.3),easeInOutElastic(t){const s=0.1125;const p=0.45;return atEdge(t)?t:t<0.5?0.5*elasticIn(t*2,s,p):0.5+0.5*elasticOut(t*2-1,s,p);},easeInBack(t){const s=1.70158;return t*t*((s+1)*t-s);},easeOutBack(t){const s=1.70158;return(t-=1)*t*((s+1)*t+s)+1;},easeInOutBack(t){let s=1.70158;if((t/=0.5)<1){return 0.5*(t*t*(((s*=(1.525))+1)*t-s));}
+return 0.5*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2);},easeInBounce:t=>1-effects.easeOutBounce(1-t),easeOutBounce(t){const m=7.5625;const d=2.75;if(t<(1/d)){return m*t*t;}
+if(t<(2/d)){return m*(t-=(1.5/d))*t+0.75;}
+if(t<(2.5/d)){return m*(t-=(2.25/d))*t+0.9375;}
+return m*(t-=(2.625/d))*t+0.984375;},easeInOutBounce:t=>(t<0.5)?effects.easeInBounce(t*2)*0.5:effects.easeOutBounce(t*2-1)*0.5+0.5,};function _pointInLine(p1,p2,t,mode){return{x:p1.x+t*(p2.x-p1.x),y:p1.y+t*(p2.y-p1.y)};}
+function _steppedInterpolation(p1,p2,t,mode){return{x:p1.x+t*(p2.x-p1.x),y:mode==='middle'?t<0.5?p1.y:p2.y:mode==='after'?t<1?p1.y:p2.y:t>0?p2.y:p1.y};}
+function _bezierInterpolation(p1,p2,t,mode){const cp1={x:p1.cp2x,y:p1.cp2y};const cp2={x:p2.cp1x,y:p2.cp1y};const a=_pointInLine(p1,cp1,t);const b=_pointInLine(cp1,cp2,t);const c=_pointInLine(cp2,p2,t);const d=_pointInLine(a,b,t);const e=_pointInLine(b,c,t);return _pointInLine(d,e,t);}
+const intlCache=new Map();function getNumberFormat(locale,options){options=options||{};const cacheKey=locale+JSON.stringify(options);let formatter=intlCache.get(cacheKey);if(!formatter){formatter=new Intl.NumberFormat(locale,options);intlCache.set(cacheKey,formatter);}
+return formatter;}
+function formatNumber(num,locale,options){return getNumberFormat(locale,options).format(num);}
+const getRightToLeftAdapter=function(rectX,width){return{x(x){return rectX+rectX+width-x;},setWidth(w){width=w;},textAlign(align){if(align==='center'){return align;}
+return align==='right'?'left':'right';},xPlus(x,value){return x-value;},leftForLtr(x,itemWidth){return x-itemWidth;},};};const getLeftToRightAdapter=function(){return{x(x){return x;},setWidth(w){},textAlign(align){return align;},xPlus(x,value){return x+value;},leftForLtr(x,_itemWidth){return x;},};};function getRtlAdapter(rtl,rectX,width){return rtl?getRightToLeftAdapter(rectX,width):getLeftToRightAdapter();}
+function overrideTextDirection(ctx,direction){let style,original;if(direction==='ltr'||direction==='rtl'){style=ctx.canvas.style;original=[style.getPropertyValue('direction'),style.getPropertyPriority('direction'),];style.setProperty('direction',direction,'important');ctx.prevTextDirection=original;}}
+function restoreTextDirection(ctx,original){if(original!==undefined){delete ctx.prevTextDirection;ctx.canvas.style.setProperty('direction',original[0],original[1]);}}
+function propertyFn(property){if(property==='angle'){return{between:_angleBetween,compare:_angleDiff,normalize:_normalizeAngle,};}
+return{between:(n,s,e)=>n>=Math.min(s,e)&&n<=Math.max(e,s),compare:(a,b)=>a-b,normalize:x=>x};}
+function normalizeSegment({start,end,count,loop,style}){return{start:start%count,end:end%count,loop:loop&&(end-start+1)%count===0,style};}
+function getSegment(segment,points,bounds){const{property,start:startBound,end:endBound}=bounds;const{between,normalize}=propertyFn(property);const count=points.length;let{start,end,loop}=segment;let i,ilen;if(loop){start+=count;end+=count;for(i=0,ilen=count;ibetween(startBound,prevValue,value)&&compare(startBound,prevValue)!==0;const endIsBefore=()=>compare(endBound,value)===0||between(endBound,prevValue,value);const shouldStart=()=>inside||startIsBefore();const shouldStop=()=>!inside||endIsBefore();for(let i=start,prev=start;i<=end;++i){point=points[i%count];if(point.skip){continue;}
+value=normalize(point[property]);if(value===prevValue){continue;}
+inside=between(value,startBound,endBound);if(subStart===null&&shouldStart()){subStart=compare(value,startBound)===0?i:prev;}
+if(subStart!==null&&shouldStop()){result.push(normalizeSegment({start:subStart,end:i,loop,count,style}));subStart=null;}
+prev=i;prevValue=value;}
+if(subStart!==null){result.push(normalizeSegment({start:subStart,end,loop,count,style}));}
return result;}
-function getPixelForGridLine(scale,index,offsetGridLines){var length=scale.getTicks().length;var validIndex=Math.min(index,length-1);var lineValue=scale.getPixelForTick(validIndex);var start=scale._startPixel;var end=scale._endPixel;var epsilon=1e-6;var offset;if(offsetGridLines){if(length===1){offset=Math.max(lineValue-start,end-lineValue);}else if(index===0){offset=(scale.getPixelForTick(1)-lineValue)/2;}else{offset=(lineValue-scale.getPixelForTick(validIndex-1))/2;}
-lineValue+=validIndexend+epsilon){return;}}
-return lineValue;}
-function garbageCollect(caches,length){helpers$1.each(caches,function(cache){var gc=cache.gc;var gcLen=gc.length/2;var i;if(gcLen>length){for(i=0;istart&&points[end%count].skip){end--;}
+end%=count;return{start,end};}
+function solidSegments(points,start,max,loop){const count=points.length;const result=[];let last=start;let prev=points[start];let end;for(end=start+1;end<=max;++end){const cur=points[end%count];if(cur.skip||cur.stop){if(!prev.skip){loop=false;result.push({start:start%count,end:(end-1)%count,loop});start=last=cur.stop?end:null;}}else{last=end;if(prev.skip){start=end;}}
+prev=cur;}
+if(last!==null){result.push({start:start%count,end:last%count,loop});}
+return result;}
+function _computeSegments(line,segmentOptions){const points=line.points;const spanGaps=line.options.spanGaps;const count=points.length;if(!count){return[];}
+const loop=!!line._loop;const{start,end}=findStartAndEnd(points,count,loop,spanGaps);if(spanGaps===true){return splitByStyles(line,[{start,end,loop}],points,segmentOptions);}
+const max=endvalue===null||value==='';function initCanvas(canvas,aspectRatio){const style=canvas.style;const renderHeight=canvas.getAttribute('height');const renderWidth=canvas.getAttribute('width');canvas[EXPANDO_KEY]={initial:{height:renderHeight,width:renderWidth,style:{display:style.display,height:style.height,width:style.width}}};style.display=style.display||'block';style.boxSizing=style.boxSizing||'border-box';if(isNullOrEmpty(renderWidth)){const displayWidth=readUsedSize(canvas,'width');if(displayWidth!==undefined){canvas.width=displayWidth;}}
+if(isNullOrEmpty(renderHeight)){if(canvas.style.height===''){canvas.height=canvas.width/(aspectRatio||2);}else{const displayHeight=readUsedSize(canvas,'height');if(displayHeight!==undefined){canvas.height=displayHeight;}}}
+return canvas;}
+const eventListenerOptions=supportsEventListenerOptions?{passive:true}:false;function addListener(node,type,listener){node.addEventListener(type,listener,eventListenerOptions);}
+function removeListener(chart,type,listener){chart.canvas.removeEventListener(type,listener,eventListenerOptions);}
+function fromNativeEvent(event,chart){const type=EVENT_TYPES[event.type]||event.type;const{x,y}=getRelativePosition$1(event,chart);return{type,chart,native:event,x:x!==undefined?x:null,y:y!==undefined?y:null,};}
+function createAttachObserver(chart,type,listener){const canvas=chart.canvas;const container=canvas&&_getParentNode(canvas);const element=container||canvas;const observer=new MutationObserver(entries=>{const parent=_getParentNode(element);entries.forEach(entry=>{for(let i=0;i{entries.forEach(entry=>{for(let i=0;i{if(chart.currentDevicePixelRatio!==dpr){resize();}});}
+function listenDevicePixelRatioChanges(chart,resize){if(!drpListeningCharts.size){window.addEventListener('resize',onWindowResize);}
+drpListeningCharts.set(chart,resize);}
+function unlistenDevicePixelRatioChanges(chart){drpListeningCharts.delete(chart);if(!drpListeningCharts.size){window.removeEventListener('resize',onWindowResize);}}
+function createResizeObserver(chart,type,listener){const canvas=chart.canvas;const container=canvas&&_getParentNode(canvas);if(!container){return;}
+const resize=throttled((width,height)=>{const w=container.clientWidth;listener(width,height);if(w{const entry=entries[0];const width=entry.contentRect.width;const height=entry.contentRect.height;if(width===0&&height===0){return;}
+resize(width,height);});observer.observe(container);listenDevicePixelRatioChanges(chart,resize);return observer;}
+function releaseObserver(chart,type,observer){if(observer){observer.disconnect();}
+if(type==='resize'){unlistenDevicePixelRatioChanges(chart);}}
+function createProxyAndListen(chart,type,listener){const canvas=chart.canvas;const proxy=throttled((event)=>{if(chart.ctx!==null){listener(fromNativeEvent(event,chart));}},chart,(args)=>{const event=args[0];return[event,event.offsetX,event.offsetY];});addListener(canvas,type,proxy);return proxy;}
+class DomPlatform extends BasePlatform{acquireContext(canvas,aspectRatio){const context=canvas&&canvas.getContext&&canvas.getContext('2d');if(context&&context.canvas===canvas){initCanvas(canvas,aspectRatio);return context;}
+return null;}
+releaseContext(context){const canvas=context.canvas;if(!canvas[EXPANDO_KEY]){return false;}
+const initial=canvas[EXPANDO_KEY].initial;['height','width'].forEach((prop)=>{const value=initial[prop];if(isNullOrUndef(value)){canvas.removeAttribute(prop);}else{canvas.setAttribute(prop,value);}});const style=initial.style||{};Object.keys(style).forEach((key)=>{canvas.style[key]=style[key];});canvas.width=canvas.width;delete canvas[EXPANDO_KEY];return true;}
+addEventListener(chart,type,listener){this.removeEventListener(chart,type);const proxies=chart.$proxies||(chart.$proxies={});const handlers={attach:createAttachObserver,detach:createDetachObserver,resize:createResizeObserver};const handler=handlers[type]||createProxyAndListen;proxies[type]=handler(chart,type,listener);}
+removeEventListener(chart,type){const proxies=chart.$proxies||(chart.$proxies={});const proxy=proxies[type];if(!proxy){return;}
+const handlers={attach:releaseObserver,detach:releaseObserver,resize:releaseObserver};const handler=handlers[type]||removeListener;handler(chart,type,proxy);proxies[type]=undefined;}
+getDevicePixelRatio(){return window.devicePixelRatio;}
+getMaximumSize(canvas,width,height,aspectRatio){return getMaximumSize(canvas,width,height,aspectRatio);}
+isAttached(canvas){const container=_getParentNode(canvas);return!!(container&&container.isConnected);}}
+function _detectPlatform(canvas){if(!_isDomSupported()||(typeof OffscreenCanvas!=='undefined'&&canvas instanceof OffscreenCanvas)){return BasicPlatform;}
+return DomPlatform;}
+var platforms=Object.freeze({__proto__:null,_detectPlatform:_detectPlatform,BasePlatform:BasePlatform,BasicPlatform:BasicPlatform,DomPlatform:DomPlatform});const transparent='transparent';const interpolators={boolean(from,to,factor){return factor>0.5?to:from;},color(from,to,factor){const c0=color(from||transparent);const c1=c0.valid&&color(to||transparent);return c1&&c1.valid?c1.mix(c0,factor).hexString():to;},number(from,to,factor){return from+(to-from)*factor;}};class Animation{constructor(cfg,target,prop,to){const currentValue=target[prop];to=resolve([cfg.to,to,currentValue,cfg.from]);const from=resolve([cfg.from,currentValue,to]);this._active=true;this._fn=cfg.fn||interpolators[cfg.type||typeof from];this._easing=effects[cfg.easing]||effects.linear;this._start=Math.floor(Date.now()+(cfg.delay||0));this._duration=this._total=Math.floor(cfg.duration);this._loop=!!cfg.loop;this._target=target;this._prop=prop;this._from=from;this._to=to;this._promises=undefined;}
+active(){return this._active;}
+update(cfg,to,date){const me=this;if(me._active){me._notify(false);const currentValue=me._target[me._prop];const elapsed=date-me._start;const remain=me._duration-elapsed;me._start=date;me._duration=Math.floor(Math.max(remain,cfg.duration));me._total+=elapsed;me._loop=!!cfg.loop;me._to=resolve([cfg.to,to,currentValue,cfg.from]);me._from=resolve([cfg.from,currentValue,to]);}}
+cancel(){const me=this;if(me._active){me.tick(Date.now());me._active=false;me._notify(false);}}
+tick(date){const me=this;const elapsed=date-me._start;const duration=me._duration;const prop=me._prop;const from=me._from;const loop=me._loop;const to=me._to;let factor;me._active=from!==to&&(loop||(elapsed1?2-factor:factor;factor=me._easing(Math.min(1,Math.max(0,factor)));me._target[prop]=me._fn(from,to,factor);}
+wait(){const promises=this._promises||(this._promises=[]);return new Promise((res,rej)=>{promises.push({res,rej});});}
+_notify(resolved){const method=resolved?'res':'rej';const promises=this._promises||[];for(let i=0;iname!=='onProgress'&&name!=='onComplete'&&name!=='fn',});defaults.set('animations',{colors:{type:'color',properties:colors},numbers:{type:'number',properties:numbers},});defaults.describe('animations',{_fallback:'animation',});defaults.set('transitions',{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:'transparent'},visible:{type:'boolean',duration:0},}},hide:{animations:{colors:{to:'transparent'},visible:{type:'boolean',easing:'linear',fn:v=>v|0},}}});class Animations{constructor(chart,config){this._chart=chart;this._properties=new Map();this.configure(config);}
+configure(config){if(!isObject(config)){return;}
+const animatedProps=this._properties;Object.getOwnPropertyNames(config).forEach(key=>{const cfg=config[key];if(!isObject(cfg)){return;}
+const resolved={};for(const option of animationOptions){resolved[option]=cfg[option];}
+(isArray(cfg.properties)&&cfg.properties||[key]).forEach((prop)=>{if(prop===key||!animatedProps.has(prop)){animatedProps.set(prop,resolved);}});});}
+_animateOptions(target,values){const newOptions=values.options;const options=resolveTargetOptions(target,newOptions);if(!options){return[];}
+const animations=this._createAnimations(options,newOptions);if(newOptions.$shared){awaitAll(target.options.$animations,newOptions).then(()=>{target.options=newOptions;},()=>{});}
+return animations;}
+_createAnimations(target,values){const animatedProps=this._properties;const animations=[];const running=target.$animations||(target.$animations={});const props=Object.keys(values);const date=Date.now();let i;for(i=props.length-1;i>=0;--i){const prop=props[i];if(prop.charAt(0)==='$'){continue;}
+if(prop==='options'){animations.push(...this._animateOptions(target,values));continue;}
+const value=values[prop];let animation=running[prop];const cfg=animatedProps.get(prop);if(animation){if(cfg&&animation.active()){animation.update(cfg,value,date);continue;}else{animation.cancel();}}
+if(!cfg||!cfg.duration){target[prop]=value;continue;}
+running[prop]=animation=new Animation(cfg,target,prop,value);animations.push(animation);}
+return animations;}
+update(target,values){if(this._properties.size===0){Object.assign(target,values);return;}
+const animations=this._createAnimations(target,values);if(animations.length){animator.add(this._chart,animations);return true;}}}
+function awaitAll(animations,properties){const running=[];const keys=Object.keys(properties);for(let i=0;i0)||(!positive&&value<0)){return meta.index;}}
+return null;}
+function updateStacks(controller,parsed){const{chart,_cachedMeta:meta}=controller;const stacks=chart._stacks||(chart._stacks={});const{iScale,vScale,index:datasetIndex}=meta;const iAxis=iScale.axis;const vAxis=vScale.axis;const key=getStackKey(iScale,vScale,meta);const ilen=parsed.length;let stack;for(let i=0;iscales[key].axis===axis).shift();}
+function createDatasetContext(parent,index){return Object.assign(Object.create(parent),{active:false,dataset:undefined,datasetIndex:index,index,mode:'default',type:'dataset'});}
+function createDataContext(parent,index,element){return Object.assign(Object.create(parent),{active:false,dataIndex:index,parsed:undefined,raw:undefined,element,index,mode:'default',type:'data'});}
+function clearStacks(meta,items){const datasetIndex=meta.controller.index;const axis=meta.vScale&&meta.vScale.axis;if(!axis){return;}
+items=items||meta._parsed;for(const parsed of items){const stacks=parsed._stacks;if(!stacks||stacks[axis]===undefined||stacks[axis][datasetIndex]===undefined){return;}
+delete stacks[axis][datasetIndex];}}
+const isDirectUpdateMode=(mode)=>mode==='reset'||mode==='none';const cloneIfNotShared=(cached,shared)=>shared?cached:Object.assign({},cached);class DatasetController{constructor(chart,datasetIndex){this.chart=chart;this._ctx=chart.ctx;this.index=datasetIndex;this._cachedDataOpts={};this._cachedMeta=this.getMeta();this._type=this._cachedMeta.type;this.options=undefined;this._parsing=false;this._data=undefined;this._objectData=undefined;this._sharedOptions=undefined;this._drawStart=undefined;this._drawCount=undefined;this.enableOptionSharing=false;this.$context=undefined;this._syncList=[];this.initialize();}
+initialize(){const me=this;const meta=me._cachedMeta;me.configure();me.linkScales();meta._stacked=isStacked(meta.vScale,meta);me.addElements();}
+updateIndex(datasetIndex){if(this.index!==datasetIndex){clearStacks(this._cachedMeta);}
+this.index=datasetIndex;}
+linkScales(){const me=this;const chart=me.chart;const meta=me._cachedMeta;const dataset=me.getDataset();const chooseId=(axis,x,y,r)=>axis==='x'?x:axis==='r'?r:y;const xid=meta.xAxisID=valueOrDefault(dataset.xAxisID,getFirstScaleId(chart,'x'));const yid=meta.yAxisID=valueOrDefault(dataset.yAxisID,getFirstScaleId(chart,'y'));const rid=meta.rAxisID=valueOrDefault(dataset.rAxisID,getFirstScaleId(chart,'r'));const indexAxis=meta.indexAxis;const iid=meta.iAxisID=chooseId(indexAxis,xid,yid,rid);const vid=meta.vAxisID=chooseId(indexAxis,yid,xid,rid);meta.xScale=me.getScaleForId(xid);meta.yScale=me.getScaleForId(yid);meta.rScale=me.getScaleForId(rid);meta.iScale=me.getScaleForId(iid);meta.vScale=me.getScaleForId(vid);}
+getDataset(){return this.chart.data.datasets[this.index];}
+getMeta(){return this.chart.getDatasetMeta(this.index);}
+getScaleForId(scaleID){return this.chart.scales[scaleID];}
+_getOtherScale(scale){const meta=this._cachedMeta;return scale===meta.iScale?meta.vScale:meta.iScale;}
+reset(){this._update('reset');}
+_destroy(){const meta=this._cachedMeta;if(this._data){unlistenArrayEvents(this._data,this);}
+if(meta._stacked){clearStacks(meta);}}
+_dataCheck(){const me=this;const dataset=me.getDataset();const data=dataset.data||(dataset.data=[]);const _data=me._data;if(isObject(data)){me._data=convertObjectDataToArray(data);}else if(_data!==data){if(_data){unlistenArrayEvents(_data,me);const meta=me._cachedMeta;clearStacks(meta);meta._parsed=[];}
+if(data&&Object.isExtensible(data)){listenArrayEvents(data,me);}
+me._syncList=[];me._data=data;}}
+addElements(){const me=this;const meta=me._cachedMeta;me._dataCheck();if(me.datasetElementType){meta.dataset=new me.datasetElementType();}}
+buildOrUpdateElements(resetNewElements){const me=this;const meta=me._cachedMeta;const dataset=me.getDataset();let stackChanged=false;me._dataCheck();const oldStacked=meta._stacked;meta._stacked=isStacked(meta.vScale,meta);if(meta.stack!==dataset.stack){stackChanged=true;clearStacks(meta);meta.stack=dataset.stack;}
+me._resyncElements(resetNewElements);if(stackChanged||oldStacked!==meta._stacked){updateStacks(me,meta._parsed);}}
+configure(){const me=this;const config=me.chart.config;const scopeKeys=config.datasetScopeKeys(me._type);const scopes=config.getOptionScopes(me.getDataset(),scopeKeys,true);me.options=config.createResolver(scopes,me.getContext());me._parsing=me.options.parsing;}
+parse(start,count){const me=this;const{_cachedMeta:meta,_data:data}=me;const{iScale,_stacked}=meta;const iAxis=iScale.axis;let sorted=start===0&&count===data.length?true:meta._sorted;let prev=start>0&&meta._parsed[start-1];let i,cur,parsed;if(me._parsing===false){meta._parsed=data;meta._sorted=true;parsed=data;}else{if(isArray(data[start])){parsed=me.parseArrayData(meta,data,start,count);}else if(isObject(data[start])){parsed=me.parseObjectData(meta,data,start,count);}else{parsed=me.parsePrimitiveData(meta,data,start,count);}
+const isNotInOrderComparedToPrev=()=>cur[iAxis]===null||(prev&&cur[iAxis]otherValue||otherMax=0;--i){if(_skip()){continue;}
+me.updateRangeFromParsed(range,scale,parsed,stack);break;}}
+return range;}
+getAllParsedValues(scale){const parsed=this._cachedMeta._parsed;const values=[];let i,ilen,value;for(i=0,ilen=parsed.length;i