From 21b1786c8652d94a9707a56ebc365a6bc7580210 Mon Sep 17 00:00:00 2001 From: Mohammad Yaaghubi Date: Mon, 15 May 2023 17:28:45 +0330 Subject: [PATCH 1/3] Updated index.php I put `Chartjs` instead of the old way to show the graph Fixed `clean.sh` for all frameworks to delete hidden files too --- cakephp-4.3/_benchmark/clean.sh | 1 + codeigniter-4.1/_benchmark/clean.sh | 1 + fastroute-1.3/_benchmark/clean.sh | 3 +- fatfree-3.8.0/_benchmark/clean.sh | 3 +- frameworkx-dev/_benchmark/clean.sh | 3 +- fuelphp-1.9/_benchmark/clean.sh | 1 + index.php | 159 +++++++++++------------ laminas-2.0.x.dev/_benchmark/clean.sh | 1 + laravel-9.1/_benchmark/clean.sh | 1 + leaf-3.0/_benchmark/clean.sh | 3 +- libs/app.js | 82 ++++++++++++ libs/chart4.3.js | 20 +++ libs/make_graph.php | 42 ------ libs/mruz/make_chart_parts.php | 56 -------- libs/mruz/make_graph.php | 42 ------ libs/php-recipe-2nd/LICENSE | 27 ---- libs/php-recipe-2nd/make_chart_parts.php | 49 ------- lumen-9.0/_benchmark/clean.sh | 1 + phroute-2.2/_benchmark/clean.sh | 3 +- siler-1.7.9/_benchmark/clean.sh | 3 +- silex-2.3/_benchmark/clean.sh | 3 +- slim-3.12/_benchmark/clean.sh | 3 +- slim-4.10/_benchmark/clean.sh | 3 +- symfony-5.4/_benchmark/clean.sh | 1 + symfony-6.0/_benchmark/clean.sh | 1 + ubiquity-2.4.x.dev/_benchmark/clean.sh | 1 + yii-2.0-basic/_benchmark/clean.sh | 1 + 27 files changed, 209 insertions(+), 305 deletions(-) create mode 100644 libs/app.js create mode 100644 libs/chart4.3.js delete mode 100644 libs/make_graph.php delete mode 100644 libs/mruz/make_chart_parts.php delete mode 100644 libs/mruz/make_graph.php delete mode 100644 libs/php-recipe-2nd/LICENSE delete mode 100644 libs/php-recipe-2nd/make_chart_parts.php diff --git a/cakephp-4.3/_benchmark/clean.sh b/cakephp-4.3/_benchmark/clean.sh index fd7e1d3..36d8cb0 100644 --- a/cakephp-4.3/_benchmark/clean.sh +++ b/cakephp-4.3/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/codeigniter-4.1/_benchmark/clean.sh b/codeigniter-4.1/_benchmark/clean.sh index fd7e1d3..36d8cb0 100755 --- a/codeigniter-4.1/_benchmark/clean.sh +++ b/codeigniter-4.1/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/fastroute-1.3/_benchmark/clean.sh b/fastroute-1.3/_benchmark/clean.sh index a53fccb..319312b 100644 --- a/fastroute-1.3/_benchmark/clean.sh +++ b/fastroute-1.3/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") +find -path './.*' -delete \ No newline at end of file diff --git a/fatfree-3.8.0/_benchmark/clean.sh b/fatfree-3.8.0/_benchmark/clean.sh index a53fccb..319312b 100644 --- a/fatfree-3.8.0/_benchmark/clean.sh +++ b/fatfree-3.8.0/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") +find -path './.*' -delete \ No newline at end of file diff --git a/frameworkx-dev/_benchmark/clean.sh b/frameworkx-dev/_benchmark/clean.sh index f3f6930..8a01073 100755 --- a/frameworkx-dev/_benchmark/clean.sh +++ b/frameworkx-dev/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"public"|"composer.json") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"public"|"composer.json") +find -path './.*' -delete \ No newline at end of file diff --git a/fuelphp-1.9/_benchmark/clean.sh b/fuelphp-1.9/_benchmark/clean.sh index fd7e1d3..36d8cb0 100644 --- a/fuelphp-1.9/_benchmark/clean.sh +++ b/fuelphp-1.9/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/index.php b/index.php index 5a45b15..d53f1f0 100644 --- a/index.php +++ b/index.php @@ -1,93 +1,92 @@ - + -if (file_exists(__DIR__ . '/output/results.hello_world.log')) { - Parse_Results: { - require __DIR__ . '/libs/parse_results.php'; - $results = parse_results(__DIR__ . '/output/results.hello_world.log'); - } + + + PHP Frameworks Bench + - + echo " + const dataLabels = ['".implode("','",$dataLabels)."']; + const dataRPS = [".implode(",",$dataRPS)."]; + const dataMemory = [".implode(",",$dataMemory)."]; + const dataTime = [".implode(",",$dataTime)."]; + const dataFile = [".implode(",",$dataFile)."]; + "; + ?> + - -

PHP Frameworks Bench

-

Hello World Benchmark

-
-'; - echo '2. Run the \'bash benchmark.sh\''; -} -?> -
+ +

PHP Frameworks Bench

- + ?> -
+ +
+
- + + + - + + \ No newline at end of file diff --git a/laminas-2.0.x.dev/_benchmark/clean.sh b/laminas-2.0.x.dev/_benchmark/clean.sh index fd7e1d3..36d8cb0 100755 --- a/laminas-2.0.x.dev/_benchmark/clean.sh +++ b/laminas-2.0.x.dev/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/laravel-9.1/_benchmark/clean.sh b/laravel-9.1/_benchmark/clean.sh index fd7e1d3..36d8cb0 100755 --- a/laravel-9.1/_benchmark/clean.sh +++ b/laravel-9.1/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/leaf-3.0/_benchmark/clean.sh b/leaf-3.0/_benchmark/clean.sh index a53fccb..319312b 100755 --- a/leaf-3.0/_benchmark/clean.sh +++ b/leaf-3.0/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") +find -path './.*' -delete \ No newline at end of file diff --git a/libs/app.js b/libs/app.js new file mode 100644 index 0000000..203b6aa --- /dev/null +++ b/libs/app.js @@ -0,0 +1,82 @@ +const COLORS = [ + "#3273a8", + "#3a78ac", + "#437cae", + "#4c80af", + "#5483b0", + "#5d86af", + "#6588ad", + "#6d8aaa", + "#758ba6", + "#7d8ca1", + "#848c9b", + "#8a8c94", + "#908b8b", + "#968a82", + "#9a8878", + "#9f866c", + "#a28360", + "#a57f52", + "#a77b43", + "#a87732", +]; + +var rpsChart = document.getElementById('rpsChart'); +var memoryChart = document.getElementById('memoryChart'); +var timeChart = document.getElementById('timeChart'); +var fileChart = document.getElementById('fileChart'); +new Chart(rpsChart, { + type: "bar", + data: { + labels: dataLabels, + datasets: [ + { + label: "Requests Per Second (RPS)", + data: dataRPS, + backgroundColor: COLORS, + }, + ], + }, +}); + +new Chart(memoryChart, { + type: "bar", + data: { + labels: dataLabels, + datasets: [ + { + label: "Memory Peak (MB)", + data: dataMemory, + backgroundColor: COLORS, + }, + ], + }, +}); + +new Chart(timeChart, { + type: "bar", + data: { + labels: dataLabels, + datasets: [ + { + label: "Execution Time (ms)", + data: dataTime, + backgroundColor: COLORS, + }, + ], + }, +}); + +new Chart(fileChart, { + type: "bar", + data: { + labels: dataLabels, + datasets: [ + { + label: "Included Files", + data: dataFile, + backgroundColor: COLORS, + }, + ], + }, +}); diff --git a/libs/chart4.3.js b/libs/chart4.3.js new file mode 100644 index 0000000..1046062 --- /dev/null +++ b/libs/chart4.3.js @@ -0,0 +1,20 @@ +/** + * Skipped minification because the original files appears to be already minified. + * Original file: /npm/chart.js@4.3.0/dist/chart.umd.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +/*! + * Chart.js v4.3.0 + * https://www.chartjs.org + * (c) 2023 Chart.js Contributors + * Released under the MIT License + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return Ko},get Decimation(){return Jo},get Filler(){return pa},get Legend(){return _a},get SubTitle(){return wa},get Title(){return va},get Tooltip(){return Va}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;at,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)t-e)).pop(),e}function W(t){return!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return nt[s][e]et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const ht="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ct(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,ht.call(window,(()=>{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=J(Math.min(it(r,a.axis,h).lo,i?s:it(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?J(Math.max(it(r,a.axis,c,!0).hi+1,i?0:it(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class bt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var xt=new bt; +/*! + * @kurkle/color v0.3.2 + * https://github.com/kurkle/color#readme + * (c) 2023 Jukka Kurkela + * Released under the MIT License + */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={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},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Zt{constructor(t){if(t instanceof Zt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Zt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Jt(t)?t:new Zt(t)}function te(t){return Jt(t)?t:new Zt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.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=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.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:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function be(t,e){return me(t).getPropertyValue(e)}const xe=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=xe[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const ye=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function ve(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(ye(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const Me=t=>Math.round(10*t)/10;function we(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=Me(Math.min(h,a,l.maxWidth)),c=Me(Math.min(c,r,l.maxHeight)),h&&!c&&(c=Me(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=Me(Math.floor(c*s))),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Pe(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Ce(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Oe(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function Re(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),s(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;ct[0])){const o=i||t;void 0===s&&(s=ti("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>je([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>qe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=ti(Ue(o,t),i),void 0!==n)return Xe(t,n)?Je(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ei(t).includes(e),ownKeys:t=>ei(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function $e(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ye(t,s),setContext:e=>$e(t,e,i,s),override:n=>$e(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>qe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let l=e(o,a||s);r.delete(t),Xe(t,l)&&(l=Je(n._scopes,n,t,l));return l}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(void 0!==a.index&&s(t))return e[a.index%e.length];if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Je(s,n,t,o);e.push($e(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Xe(e,h)&&(h=$e(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ue=(t,e)=>t?t+w(e):e,Xe=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function Ke(t,e,i){return S(t)?t(e,i):t}const Ge=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Ze(t,e,i,s,n){for(const o of e){const e=Ge(i,o);if(e){t.add(e);const o=Ke(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function Je(t,e,i,s){const a=e._rootScopes,r=Ke(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Qe(h,l,i,r||i,s);return null!==c&&((void 0===r||r===i||(c=Qe(h,l,r,c,s),null!==c))&&je(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Qe(t,e,i,s,n){for(;i;)i=Ze(t,e,i,s,n);return i}function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=ni(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)ri(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,di=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),ui=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,fi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.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/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ci(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ci(t)?t:di(t,.075,.3),easeOutElastic:t=>ci(t)?t:ui(t,.075,.3),easeInOutElastic(t){const e=.1125;return ci(t)?t:t<.5?.5*di(2*t,e,.45):.5+.5*ui(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-fi.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*fi.easeInBounce(2*t):.5*fi.easeOutBounce(2*t-1)+.5};function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function mi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=gi(t,n,i),r=gi(n,o,i),l=gi(o,e,i),h=gi(a,r,i),c=gi(r,l,i);return gi(h,c,i)}const bi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,xi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function _i(t,e){const i=(""+t).match(bi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}const yi=t=>+t||0;function vi(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=yi(a(t));return i}function Mi(t){return vi(t,{top:"y",right:"x",bottom:"y",left:"x"})}function wi(t){return vi(t,["topLeft","topRight","bottomLeft","bottomRight"])}function ki(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Si(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(xi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:_i(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=De(n),n}function Pi(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;oi&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ci(t,e){return Object.assign(Object.create(t),e)}function Oi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ai(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Ti(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Li(t){return"angle"===t?{between:Z,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ei({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Ri(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Li(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Li(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hx||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ei({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(Ei({start:_,end:d,loop:u,count:a,style:f})),g}function Ii(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Fi(t,[{start:a,end:r,loop:o}],i,e);return Fi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Xi={evaluateInteractionItems:Hi,modes:{index(t,e,i,s){const n=ve(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?ji(t,n,o,s,a):Yi(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?ji(t,n,o,s,a):Yi(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tji(t,ve(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return Yi(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>Ui(t,ve(e,t),"x",i.intersect,s),y:(t,e,i,s)=>Ui(t,ve(e,t),"y",i.intersect,s)}};const qi=["left","top","right","bottom"];function Ki(t,e){return t.filter((t=>t.pos===e))}function Gi(t,e){return t.filter((t=>-1===qi.indexOf(t.pos)&&t.box.axis===e))}function Zi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Ji(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!qi.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function ss(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Zi(Ki(e,"left"),!0),n=Zi(Ki(e,"right")),o=Zi(Ki(e,"top"),!0),a=Zi(Ki(e,"bottom")),r=Gi(e,"x"),l=Gi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ki(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);ts(f,ki(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=Ji(l.concat(h),d);ss(r.fullSize,g,d,p),ss(l,g,d,p),ss(h,g,d,p)&&ss(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),os(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,os(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class rs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class ls extends rs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const hs="$chartjs",cs={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},ds=t=>null===t||""===t;const us=!!Se&&{passive:!0};function fs(t,e,i){t.canvas.removeEventListener(e,i,us)}function gs(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function ps(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||gs(i.addedNodes,s),e=e&&!gs(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function ms(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||gs(i.removedNodes,s),e=e&&!gs(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const bs=new Map;let xs=0;function _s(){const t=window.devicePixelRatio;t!==xs&&(xs=t,bs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function ys(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){bs.size||window.addEventListener("resize",_s),bs.set(t,e)}(t,o),a}function vs(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){bs.delete(t),bs.size||window.removeEventListener("resize",_s)}(t)}function Ms(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=cs[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t.addEventListener(e,i,us)}(s,e,n),n}class ws extends rs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t[hs]={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",ds(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(ds(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[hs])return!1;const i=e[hs].initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e[hs],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:ps,detach:ms,resize:ys}[e]||Ms;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:vs,detach:vs,resize:vs}[e]||fs)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return we(t,e,i,s)}isAttached(t){const e=ge(t);return!(!e||!e.isConnected)}}function ks(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?ls:ws}var Ss=Object.freeze({__proto__:null,BasePlatform:rs,BasicPlatform:ls,DomPlatform:ws,_detectPlatform:ks});const Ps="transparent",Ds={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||Ps),n=s.valid&&Qt(e||Ps);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Cs{constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const o=Pi([t.from,n,s]);this._active=!0,this._fn=t.fn||Ds[t.type||typeof o],this._easing=fi[t.easing]||fi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Pi([t.to,e,s,t.from]),this._from=Pi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new Cs(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(xt.add(this._chart,i),!0):void 0}}function As(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Ts(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function zs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Vs(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Bs=t=>"reset"===t||"none"===t,Ns=(t,e)=>e?t:Object.assign({},t);class Ws{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Es(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Vs(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Fs(t,"x")),o=e.yAxisID=l(i.yAxisID,Fs(t,"y")),a=e.rAxisID=l(i.rAxisID,Fs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Vs(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]t&&!e.hidden&&e._stacked&&{keys:Ts(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ns(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Os(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Bs(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Bs(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Bs(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function js(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;io)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for($s(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,Us=(t,e)=>Math.min(e||t,t);function Xs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Ks(t){return t.drawTicks?t.tickLength:0}function Gs(t,e){if(!t.display)return 0;const i=Si(t.font,e),s=ki(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function Zs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class Js extends Hs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Di(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=J(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ks(t.grid)-e.padding-Gs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(J((h.highest.height+6)/o,-1,1)),Math.asin(J(a/r,-1,1))-Math.asin(J(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Gs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ks(n)+o):(t.height=this.maxHeight,t.width=Ks(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:r[t]||0,height:l[t]||0});return{first:P(0),last:P(e-1),widest:P(k),highest:P(S),widths:r,heights:l}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Ae(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Ks(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(t){return Ae(i,t,p)};let x,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)x=b(this.bottom),w=this.bottom-u,S=x-m,D=b(t.top)+m,O=t.bottom;else if("bottom"===a)x=b(this.top),D=t.top,O=b(t.bottom)-m,w=x+m,S=this.top+u;else if("left"===a)x=b(this.right),M=this.right-u,k=x-m,P=b(t.left)+m,C=t.right;else if("right"===a)x=b(this.left),P=t.left,C=b(t.right)-m,M=x+m,k=this.left+u;else if("x"===e){if("center"===a)x=b((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=x+m,S=w+u}else if("y"===e){if("center"===a)x=b((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}M=x-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class tn{constructor(){this.controllers=new Qs(Ws,"datasets",!0),this.elements=new Qs(Hs,"elements"),this.plugins=new Qs(Object,"plugins"),this.scales=new Qs(Js,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function nn(t,e){return e||!1!==t?!0===t?{}:t:null}function on(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function an(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function rn(t){if("x"===t||"y"===t||"r"===t)return t}function ln(t,...e){if(rn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&rn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function hn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function cn(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=an(t.type,e),a=Object.create(null);return Object.keys(s).forEach((e=>{const r=s[e];if(!o(r))return console.error(`Invalid scale configuration for scale: ${e}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const l=ln(e,r,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return hn(t,"x",i[0])||hn(t,"y",i[0])}return{}}(e,t),ue.scales[r.type]),h=function(t,e){return t===e?"_index_":"_value_"}(l,n),c=i.scales||{};a[e]=x(Object.create(null),[{axis:l},r,c[l],c[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||an(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),x(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];x(e,[ue.scales[e.type],ue.scale])})),a}function dn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=cn(t,e)}function un(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const fn=new Map,gn=new Set;function pn(t,e){let i=fn.get(t);return i||(i=e(),fn.set(t,i),gn.add(i)),i}const mn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class bn{constructor(t){this._config=function(t){return(t=t||{}).data=un(t.data),dn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=un(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),dn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return pn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return pn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return pn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return pn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>mn(r,t,e)))),e.forEach((t=>mn(r,s,t))),e.forEach((t=>mn(r,re[n]||{},t))),e.forEach((t=>mn(r,ue,t))),e.forEach((t=>mn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),gn.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=xn(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=Ye(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||_n(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=$e(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=xn(this._resolverCache,t,i);return o(e)?$e(n,e,void 0,s):n}}function xn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:je(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const _n=t=>o(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||S(t[i])),!1);const yn=["top","bottom","left","right","chartArea"];function vn(t,e){return"top"===t||"bottom"===t||-1===yn.indexOf(t)&&"x"===e}function Mn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function wn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function kn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function Sn(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Pn={},Dn=t=>{const e=Sn(t);return Object.values(Pn).filter((t=>t.canvas===e)).pop()};function Cn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class On{static defaults=ue;static instances=Pn;static overrides=re;static registry=en;static version="4.3.0";static getChart=Dn;static register(...t){en.add(...t),An()}static unregister(...t){en.remove(...t),An()}constructor(t,e){const s=this.config=new bn(e),n=Sn(t),o=Dn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||ks(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new sn,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],Pn[this.id]=this,r&&l?(xt.listen(this,"complete",wn),xt.listen(this,"progress",kn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return en}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Te(this.canvas,this.ctx),this}stop(){return xt.stop(this),this}resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=ln(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=ln(o,n),r=l(n.type,e.dtype);void 0!==n.position&&vn(n.position,a)===vn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(en.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{as.configure(this,t,t.options),as.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Mn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{as.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){Cn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;as.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t){const{xScale:e,yScale:i}=t;if(e&&i)return{left:e.left,right:e.right,top:i.top,bottom:i.bottom}}(t)||this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Ie(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&ze(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Re(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Xi.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ci(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function An(){return u(On.instances,(t=>t._plugins.invalidate()))}function Tn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Ln{static override(t){Object.assign(Ln.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return Tn()}parse(){return Tn()}format(){return Tn()}add(){return Tn()}diff(){return Tn()}startOf(){return Tn()}endOf(){return Tn()}}var En={_date:Ln};function Rn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function zn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;nZ(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Z(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),b=g(C,h,d),x=g(C+E,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var $n=Object.freeze({__proto__:null,BarController:class extends Ws{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return zn(t,e,i,s)}parseArrayData(t,e,i,s){return zn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;dt.controller.options.grouped)),o=i.options.stacked,a=[],r=t=>{const i=t.controller.getParsed(e),n=i&&i[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!r(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(u,e,r)*a,f===r&&(b-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);b=Math.max(Math.min(b,h),o),d=b+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(b))}if(b===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;b+=t,u-=t}return{size:u,base:b,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,l="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=b?g:{};if(i=x){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),b||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PieController:class extends Hn{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},PolarAreaController:jn,RadarController:class extends Ws{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let c=e;c0&&Math.abs(i[f]-_[f])>b,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),x||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Yn(t,e,i,s){const n=vi(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return J(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:J(n.innerStart,0,a),innerEnd:J(n.innerEnd,0,a)}}function Un(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Xn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=Yn(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,D=u+v,O=m+y/P,A=b-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=Un(w,S,a,r);t.arc(e.x,e.y,_,S,b+E)}const i=Un(D,b,a,r);if(t.lineTo(i.x,i.y),v>0){const e=Un(D,A,a,r);t.arc(e.x,e.y,v,b+E,A+Math.PI)}const s=(b-v/u+(m+y/u))/2;if(t.arc(a,r,u,b-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=Un(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=Un(M,m,a,r);if(t.lineTo(n.x,n.y),x>0){const e=Un(M,k,a,r);t.arc(e.x,e.y,x,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function qn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c,borderDash:d,borderDashOffset:u}=l,f="inner"===l.borderAlign;if(!h)return;t.setLineDash(d||[]),t.lineDashOffset=u,f?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let g=e.endAngle;if(o){Xn(t,e,i,s,g,n);for(let e=0;en?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,g),o||(Xn(t,e,i,s,g,n),t.stroke())}function Kn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function Gn(t,e,i){t.lineTo(i.x,i.y)}function Zn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=nr&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function to(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?Qn:Jn}const eo="function"==typeof Path2D;function io(t,e,i,s){eo&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Kn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=to(e);for(const r of n)Kn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class so extends Hs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;hi(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=zi(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ii(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?pi:t.tension||"monotone"===t.cubicInterpolationMode?mi:gi}(i);let l,h;for(l=0,h=o.length;l"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=X(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),u=(this.options.spacing+this.options.borderWidth)/2,f=l(d,r-a)>=O||Z(n,a,r),g=tt(o,h+u,c+u);return f&&g}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Xn(t,e,i,s,l,n);for(let e=0;e("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function go(t){const e=this.getLabels();return t>=0&&ts=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,b=!s(a),x=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!b&&!x)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),b&&x&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=b?a:M,w=x?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(b&&(u&&M!==a?(i.push({value:a}),Mr)break;i.push({value:t})}return x&&u&&w!==r?i.length&&V(i[i.length-1].value,r,po(r,y,t))?i[i.length-1].value=r:i.push({value:r}):x&&w!==r||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&j(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return ne(t,this.chart.options.locale,this.options.ticks.format)}}class bo extends mo{static id="linear";static defaults={ticks:{callback:ae.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?t:0,this.max=a(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=$(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}const xo=t=>Math.floor(z(t)),_o=(t,e)=>Math.pow(10,xo(t)+e);function yo(t){return 1===t/Math.pow(10,xo(t))}function vo(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function Mo(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=xo(e);let o=function(t,e){let i=xo(e-t);for(;vo(t,e,i)>10;)i++;for(;vo(t,e,i)<10;)i--;return Math.min(i,xo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:yo(g),significand:u}),s}class wo extends Js{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=mo.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===_o(this.min,0)?_o(this.min,-1):_o(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(_o(i,-1)),o(_o(s,1)))),i<=0&&n(_o(s,-1)),s<=0&&o(_o(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=Mo({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function ko(t){const e=t.ticks;if(e.display&&t.display){const t=ki(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function So(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function Po(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;ue.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Co(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=i,l=t.getPointPosition(e,s+n+a,o),h=Math.round(Y(G(l.angle+E))),c=function(t,e,i){90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e);return t}(l.y,r.h,h),d=function(t){if(0===t||180===t)return"center";if(t<180)return"left";return"right"}(h),u=function(t,e,i){"right"===i?t-=e:"center"===i&&(t-=e/2);return t}(l.x,r.w,d);return{visible:!0,x:l.x,y:c,textAlign:d,left:u,top:c,right:u+r.w,bottom:c+r.h}}function Oo(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;return!(Re({x:i,y:s},e)||Re({x:i,y:o},e)||Re({x:n,y:s},e)||Re({x:n,y:o},e))}function Ao(t,e,i){const{left:n,top:o,right:a,bottom:r}=i,{backdropColor:l}=e;if(!s(l)){const i=wi(e.borderRadius),s=ki(e.backdropPadding);t.fillStyle=l;const h=n-s.left,c=o-s.top,d=a-n+s.width,u=r-o+s.height;Object.values(i).some((t=>0!==t))?(t.beginPath(),He(t,{x:h,y:c,w:d,h:u,radius:i}),t.fill()):t.fillRect(h,c,d,u)}}function To(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=ki(ko(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/ko(this.options))}generateTickLabels(t){mo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?Po(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;n--){const e=t._pointLabelItems[n];if(!e.visible)continue;const o=s.setContext(t.getPointLabelContext(n));Ao(i,o,e);const a=Si(o.font),{x:r,y:l,textAlign:h}=e;We(i,t._pointLabels[n],r,l+a.lineHeight/2,a,{color:o.color,textAlign:h,textBaseline:"middle"})}}(this,o),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){r=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),a=s.setContext(i),l=n.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash),o.lineDashOffset=n.dashOffset,o.beginPath(),To(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,a,r,o,l)}})),i.display){for(t.save(),a=o-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=Si(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=ki(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}We(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}const Eo={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Ro=Object.keys(Eo);function Io(t,e){return t-e}function zo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!W(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function Fo(t,e,i,s){const n=Ro.length;for(let o=Ro.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function Bo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class No extends Js{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new En._date(t.adapters.date);s.init(e),x(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:zo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?Fo(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=Ro.length-1;o>=Ro.indexOf(i);o--){const i=Ro[o];if(Eo[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return Ro[i?Ro.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=Ro.indexOf(t)+1,i=Ro.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=J(s,0,o),n=J(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||Fo(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=W(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;dt-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var Ho=Object.freeze({__proto__:null,CategoryScale:class extends Js{static id="category";static defaults={ticks:{callback:go}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:J(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:fo(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return go.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:bo,LogarithmicScale:wo,RadialLinearScale:Lo,TimeScale:No,TimeSeriesScale:class extends No{static id="timeseries";static defaults=No.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Wo(e,this.min),this._tableRange=Wo(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;ot.replace("rgb(","rgba(").replace(")",", 0.5)")));function Yo(t){return jo[t%jo.length]}function Uo(t){return $o[t%$o.length]}function Xo(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof Hn?e=function(t,e){return t.backgroundColor=t.data.map((()=>Yo(e++))),e}(i,e):n instanceof jn?e=function(t,e){return t.backgroundColor=t.data.map((()=>Uo(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Yo(e),t.backgroundColor=Uo(e),++e}(i,e))}}function qo(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var Ko={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n;if(!i.forceOverride&&(qo(s)||(a=n)&&(a.borderColor||a.backgroundColor)||o&&qo(o)))return;var a;const r=Xo(t);s.forEach(r)}};function Go(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Zo(t){t.data.datasets.forEach((t=>{Go(t)}))}var Jo={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Zo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===Pi([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=J(it(e,o.axis,a).lo,0,i-1)),s=h?J(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void Go(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const b=[],x=e+i-1,_=t[e].x,y=t[x].x-_;for(o=e;og&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&b.push({...t[e],x:p}),s!==u&&s!==i&&b.push({...t[s],x:p})}o>0&&i!==u&&b.push(t[i]),b.push(a),h=e,m=0,f=g=l,c=d=u=o}}return b}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){Zo(t)}};function Qo(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function ta(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function ea(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function ia(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=ta(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new so({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function sa(t){return t&&!1!==t.fill}function na(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function oa(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function aa(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&ca(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;sa(i)&&ca(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;sa(s)&&"beforeDatasetDraw"===i.drawTime&&ca(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const ma=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class ba extends Hs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Si(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=ma(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=xa(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Oi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Ie(t,this),this._draw(),ze(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Oi(t.rtl,this.left,this.width),h=Si(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=ma(o,d),b=this.isHorizontal(),x=this._computeTitleHeight();f=b?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+x,line:0}:{x:this.left+c,y:ft(n,this.top+x+c,this.bottom-e[0].height),line:0},Ai(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),b?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+x+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Ee(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=wi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?He(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,b?S+k:this.right,t.rtl),function(t,e,i){We(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),b)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=xa(y,t)}else f.y+=_})),Ti(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Si(e.font),s=ki(e.padding);if(!e.display)return;const n=Oi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,We(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=Si(t.font),i=ki(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=ki(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class ya extends Hs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=ki(i.padding);const o=s*Si(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Si(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);We(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var va={id:"title",_element:ya,start(t,e,i){!function(t,e){const i=new ya({ctx:t.ctx,options:e,chart:t});as.configure(t,i,e),as.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;as.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;as.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Ma=new WeakMap;var wa={id:"subtitle",start(t,e,i){const s=new ya({ctx:t.ctx,options:i,chart:t});as.configure(t,s,i),as.addBox(t,s),Ma.set(t,s)},stop(t){as.removeBox(t,Ma.get(t)),Ma.delete(t)},beforeUpdate(t,e,i){const s=Ma.get(t);as.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const ka={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function Da(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Ca(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=Si(e.bodyFont),h=Si(e.titleFont),c=Si(e.footerFont),d=o.length,f=n.length,g=s.length,p=ki(e.padding);let m=p.height,b=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-g)*l.lineHeight+(x-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){b=Math.max(b,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),b+=p.width,{width:b,height:m}}function Oa(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Aa(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Oa(t,e,i,s),yAlign:s}}function Ta(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=wi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:J(g,0,s.width-e.width),y:J(p,0,s.height-e.height)}}function La(t,e,i){const s=ki(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Ea(t){return Sa([],Pa(t))}function Ra(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Ia={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=Ra(i,t);Sa(e.before,Pa(za(n,"beforeLabel",this,t))),Sa(e.lines,za(n,"label",this,t)),Sa(e.after,Pa(za(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return Ea(za(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=za(i,"beforeFooter",this,t),n=za(i,"footer",this,t),o=za(i,"afterFooter",this,t);let a=[];return a=Sa(a,Pa(s)),a=Sa(a,Pa(n)),a=Sa(a,Pa(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Ra(t.callbacks,e);s.push(za(i,"labelColor",this,e)),n.push(za(i,"labelPointStyle",this,e)),o.push(za(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=ka[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Ca(this,i),a=Object.assign({},t,e),r=Aa(this.chart,i,a),l=Ta(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=wi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Oi(i.rtl,this.x,this.width);for(t.x=La(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=Si(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,He(t,{x:e,y:g,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),He(t,{x:i,y:g+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,h,l),t.strokeRect(e,g,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=Si(i.bodyFont);let d=c.lineHeight,f=0;const g=Oi(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let b,x,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=La(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=ka[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Ca(this,t),a=Object.assign({},i,this._size),r=Aa(e,t,a),l=Ta(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=ki(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ai(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Ti(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=ka[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Va={id:"tooltip",_element:Fa,positioners:ka,afterInit(t,e,i){i&&(t.tooltip=new Fa({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,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:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,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:Ia},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return On.register($n,Ho,uo,t),On.helpers={...Ni},On._adapters=En,On.Animation=Cs,On.Animations=Os,On.animator=xt,On.controllers=en.controllers.items,On.DatasetController=Ws,On.Element=Hs,On.elements=uo,On.Interaction=Xi,On.layouts=as,On.platforms=Ss,On.Scale=Js,On.Ticks=ae,Object.assign(On,$n,Ho,uo,t,Ss),On.Chart=On,"undefined"!=typeof window&&(window.Chart=On),On})); +//# sourceMappingURL=chart.umd.js.map diff --git a/libs/make_graph.php b/libs/make_graph.php deleted file mode 100644 index 83b8bce..0000000 --- a/libs/make_graph.php +++ /dev/null @@ -1,42 +0,0 @@ - 'style')); // header - - $colors = $barColors; - foreach ($results as $fw => $result) { - $data[] = array($fw, $result[$id], array_shift($colors)); - } - //var_dump($data); exit; - - $options = array( - 'title' => $title, - 'titleTextStyle' => array('fontSize' => 16), - 'hAxis' => array('title' => $hAxis_title, - 'titleTextStyle' => array('bold' => true)), - 'vAxis' => array('minValue' => 0, 'maxValue' => 0.01), - 'width' => $graphWidth, - 'height' => $graphHeight, - 'bar' => array('groupWidth' => '90%'), - 'legend' => array('position' => 'none') - ); - $type = 'ColumnChart'; - return makeChartParts($data, $options, $type); -} diff --git a/libs/mruz/make_chart_parts.php b/libs/mruz/make_chart_parts.php deleted file mode 100644 index d201986..0000000 --- a/libs/mruz/make_chart_parts.php +++ /dev/null @@ -1,56 +0,0 @@ -タグを -# 生成するユーザー定義関数を定義します。 -function makeChartParts($data, $options, $type) -{ - // JavaScriptの関数名、
タブのIDが - // 重複しないようにするための連番☆レシピ037☆(静的変数とは?) - static $index = 1; - - // グラフの種類からAPIロード時の「packages」を確定し、APIロードを生成 - $package = 'corechart'; - $special_type = array('GeoChart', 'AnnotatedTimeLine','TreeMap', 'OrgChart', - 'Gauge', 'Table', 'TimeLine', 'GeoMap', 'MotionChart'); - if (in_array($type, $special_type)) { - $package = strtolower($type); - } - $load = 'google.load("visualization", "1", {packages:["' . $package . '"]});'; - - // データとオプションをJSON形式へ - $jsData = json_encode($data); - $jsonOptions = json_encode($options); - - // グラフを描画するJavaScript関数を生成 - $chart = <<タグを生成 - $div = '
'; - - $index++; // 連番を1加算しておく - return array($chart, $div); -} -/* ?>終了タグ省略 ☆レシピ001☆(サーバーのPHP情報を知りたい) */ diff --git a/libs/mruz/make_graph.php b/libs/mruz/make_graph.php deleted file mode 100644 index cd2e784..0000000 --- a/libs/mruz/make_graph.php +++ /dev/null @@ -1,42 +0,0 @@ - 'style')); // header - - $colors = $barColors; - foreach ($results as $fw => $result) { - $data[] = array($fw, $result[$id], array_shift($colors)); - } - //var_dump($data); exit; - - $options = array( - 'title' => $title, - 'titleTextStyle' => array('fontSize' => 16), - 'hAxis' => array('title' => $hAxis_title, - 'titleTextStyle' => array('bold' => true)), - 'vAxis' => array('minValue' => 0, 'maxValue' => 0.01), - 'width' => $graphWidth, - 'height' => $graphHeight, - 'bar' => array('groupWidth' => '90%'), - 'legend' => array('position' => 'none') - ); - $type = 'ColumnChart'; - return makeChartParts($data, $options, $type); -} diff --git a/libs/php-recipe-2nd/LICENSE b/libs/php-recipe-2nd/LICENSE deleted file mode 100644 index 6df72bd..0000000 --- a/libs/php-recipe-2nd/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013, Kenji Suzuki, Kenichi Ando, Naoaki Yamada, - Yoshiyuki Yamamoto, Yuta Sakurai, Hitoshi Asano -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The name of the authors - may not be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/libs/php-recipe-2nd/make_chart_parts.php b/libs/php-recipe-2nd/make_chart_parts.php deleted file mode 100644 index 2fabe76..0000000 --- a/libs/php-recipe-2nd/make_chart_parts.php +++ /dev/null @@ -1,49 +0,0 @@ -タグを -# 生成するユーザー定義関数を定義します。 -function makeChartParts($data, $options, $type) -{ - // JavaScriptの関数名、
タブのIDが - // 重複しないようにするための連番☆レシピ037☆(静的変数とは?) - static $index = 1; - - // グラフの種類からAPIロード時の「packages」を確定し、APIロードを生成 - $package = 'corechart'; - $special_type = array('GeoChart', 'AnnotatedTimeLine','TreeMap', 'OrgChart', - 'Gauge', 'Table', 'TimeLine', 'GeoMap', 'MotionChart'); - if (in_array($type, $special_type)) { - $package = strtolower($type); - } - $load = 'google.load("visualization", "1", {packages:["' . $package . '"]});'; - - // データとオプションをJSON形式へ - $jsData = json_encode($data); - $jsonOptions = json_encode($options); - - // グラフを描画するJavaScript関数を生成 - $chart = <<タグを生成 - $div = '
'; - - $index++; // 連番を1加算しておく - return array($chart, $div); -} -/* ?>終了タグ省略 ☆レシピ001☆(サーバーのPHP情報を知りたい) */ diff --git a/lumen-9.0/_benchmark/clean.sh b/lumen-9.0/_benchmark/clean.sh index fd7e1d3..36d8cb0 100755 --- a/lumen-9.0/_benchmark/clean.sh +++ b/lumen-9.0/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/phroute-2.2/_benchmark/clean.sh b/phroute-2.2/_benchmark/clean.sh index a53fccb..319312b 100755 --- a/phroute-2.2/_benchmark/clean.sh +++ b/phroute-2.2/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") +find -path './.*' -delete \ No newline at end of file diff --git a/siler-1.7.9/_benchmark/clean.sh b/siler-1.7.9/_benchmark/clean.sh index a53fccb..319312b 100644 --- a/siler-1.7.9/_benchmark/clean.sh +++ b/siler-1.7.9/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") +find -path './.*' -delete \ No newline at end of file diff --git a/silex-2.3/_benchmark/clean.sh b/silex-2.3/_benchmark/clean.sh index f518311..dfbe001 100644 --- a/silex-2.3/_benchmark/clean.sh +++ b/silex-2.3/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"composer.json"|"web") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"composer.json"|"web") +find -path './.*' -delete \ No newline at end of file diff --git a/slim-3.12/_benchmark/clean.sh b/slim-3.12/_benchmark/clean.sh index a53fccb..319312b 100644 --- a/slim-3.12/_benchmark/clean.sh +++ b/slim-3.12/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") +find -path './.*' -delete \ No newline at end of file diff --git a/slim-4.10/_benchmark/clean.sh b/slim-4.10/_benchmark/clean.sh index a53fccb..319312b 100644 --- a/slim-4.10/_benchmark/clean.sh +++ b/slim-4.10/_benchmark/clean.sh @@ -1,2 +1,3 @@ #!/bin/sh -rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") \ No newline at end of file +rm -rf !("_benchmark"|"Controllers"|"composer.json"|"index.php") +find -path './.*' -delete \ No newline at end of file diff --git a/symfony-5.4/_benchmark/clean.sh b/symfony-5.4/_benchmark/clean.sh index fd7e1d3..36d8cb0 100644 --- a/symfony-5.4/_benchmark/clean.sh +++ b/symfony-5.4/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/symfony-6.0/_benchmark/clean.sh b/symfony-6.0/_benchmark/clean.sh index fd7e1d3..36d8cb0 100644 --- a/symfony-6.0/_benchmark/clean.sh +++ b/symfony-6.0/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/ubiquity-2.4.x.dev/_benchmark/clean.sh b/ubiquity-2.4.x.dev/_benchmark/clean.sh index fd7e1d3..36d8cb0 100755 --- a/ubiquity-2.4.x.dev/_benchmark/clean.sh +++ b/ubiquity-2.4.x.dev/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file diff --git a/yii-2.0-basic/_benchmark/clean.sh b/yii-2.0-basic/_benchmark/clean.sh index fd7e1d3..36d8cb0 100644 --- a/yii-2.0-basic/_benchmark/clean.sh +++ b/yii-2.0-basic/_benchmark/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf !("_benchmark") +find -path './.*' -delete rm -rf _benchmark/temp \ No newline at end of file From 33e6e6261d04ac5994412875611fd092db19dd84 Mon Sep 17 00:00:00 2001 From: Mohammad Yaaghubi Date: Wed, 17 May 2023 18:41:46 +0330 Subject: [PATCH 2/3] Frameworks updated Frameworks updated, checkout `benchmark.config` A bit changes --- benchmark.config | 20 +++--- .../_benchmark/cakephp/config/app_local.php | 0 .../_benchmark/cakephp/config/routes.php | 0 .../src/Controller/HelloWorldController.php | 0 .../_benchmark/cakephp/webroot/index.php | 0 .../_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../_benchmark/hello_world.sh | 0 .../_benchmark/setup.sh | 2 +- .../_benchmark/update.sh | 0 .../_benchmark/codeigniter/public/index.php | 41 ----------- .../_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../codeigniter/app/Config/Routes.php | 0 .../app/Controllers/HelloWorldController.php | 0 .../_benchmark/codeigniter/public/index.php | 71 +++++++++++++++++++ .../_benchmark/hello_world.sh | 0 .../_benchmark/setup.sh | 2 +- .../_benchmark/update.sh | 0 fastroute-1.3/composer.json | 2 +- .../Controllers/HelloWorldController.php | 0 .../_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../_benchmark/hello_world.sh | 0 .../_benchmark/setup.sh | 0 .../_benchmark/update.sh | 0 .../composer.json | 2 +- {fatfree-3.8.0 => fatfree-3.8.1}/index.php | 0 fuelphp-1.9/_benchmark/setup.sh | 2 +- index.php | 9 +-- .../_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../_benchmark/hello_world.sh | 0 .../Application/config/module.config.php | 0 .../src/Controller/HelloWorldController.php | 0 .../_benchmark/laminas/public/index.php | 0 .../_benchmark/setup.sh | 2 +- .../_benchmark/update.sh | 0 .../_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../_benchmark/hello_world.sh | 0 .../Http/Controllers/HelloWorldController.php | 0 .../_benchmark/laravel/public/index.php | 0 .../_benchmark/laravel/routes/web.php | 0 .../_benchmark/setup.sh | 2 +- .../_benchmark/update.sh | 0 .../Controllers/HelloWorldController.php | 0 {leaf-3.0 => leaf-3.3}/_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../_benchmark/hello_world.sh | 0 {leaf-3.0 => leaf-3.3}/_benchmark/setup.sh | 0 {leaf-3.0 => leaf-3.3}/_benchmark/update.sh | 0 {leaf-3.0 => leaf-3.3}/composer.json | 2 +- {leaf-3.0 => leaf-3.3}/index.php | 0 {lumen-9.0 => lumen-10.0}/_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../_benchmark/hello_world.sh | 0 .../Http/Controllers/HelloWorldController.php | 0 .../_benchmark/lumen/public/index.php | 0 .../_benchmark/lumen/routes/web.php | 0 {lumen-9.0 => lumen-10.0}/_benchmark/setup.sh | 2 +- .../_benchmark/update.sh | 0 phroute-2.2/composer.json | 2 +- silex-2.3/composer.json | 2 +- slim-3.12/composer.json | 2 +- .../Controllers/HelloWorldController.php | 0 {slim-4.10 => slim-4.11}/_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../_benchmark/hello_world.sh | 0 {slim-4.10 => slim-4.11}/_benchmark/setup.sh | 0 {slim-4.10 => slim-4.11}/_benchmark/update.sh | 0 {slim-4.10 => slim-4.11}/composer.json | 2 +- {slim-4.10 => slim-4.11}/index.php | 2 +- symfony-5.4/_benchmark/setup.sh | 2 +- .../_benchmark/clean.sh | 0 .../_benchmark/clear-cache.sh | 0 .../_benchmark/hello_world.sh | 0 .../_benchmark/setup.sh | 2 +- .../_benchmark/symfony/config/routes.yaml | 0 .../_benchmark/symfony/public/index.php | 0 .../src/Controller/HelloWorldController.php | 0 .../_benchmark/update.sh | 0 .../_benchmark/ubiquity/app/config/config.php | 4 +- yii-2.0-basic/_benchmark/setup.sh | 9 +-- 84 files changed, 109 insertions(+), 77 deletions(-) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/cakephp/config/app_local.php (100%) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/cakephp/config/routes.php (100%) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/cakephp/src/Controller/HelloWorldController.php (100%) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/cakephp/webroot/index.php (100%) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/clean.sh (100%) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/clear-cache.sh (100%) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/hello_world.sh (100%) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/setup.sh (78%) rename {cakephp-4.3 => cakephp-4.4}/_benchmark/update.sh (100%) delete mode 100755 codeigniter-4.1/_benchmark/codeigniter/public/index.php rename {codeigniter-4.1 => codeigniter-4.3}/_benchmark/clean.sh (100%) rename {codeigniter-4.1 => codeigniter-4.3}/_benchmark/clear-cache.sh (100%) rename {codeigniter-4.1 => codeigniter-4.3}/_benchmark/codeigniter/app/Config/Routes.php (100%) rename {codeigniter-4.1 => codeigniter-4.3}/_benchmark/codeigniter/app/Controllers/HelloWorldController.php (100%) create mode 100755 codeigniter-4.3/_benchmark/codeigniter/public/index.php rename {codeigniter-4.1 => codeigniter-4.3}/_benchmark/hello_world.sh (100%) rename {codeigniter-4.1 => codeigniter-4.3}/_benchmark/setup.sh (75%) rename {codeigniter-4.1 => codeigniter-4.3}/_benchmark/update.sh (100%) rename {fatfree-3.8.0 => fatfree-3.8.1}/Controllers/HelloWorldController.php (100%) rename {fatfree-3.8.0 => fatfree-3.8.1}/_benchmark/clean.sh (100%) rename {fatfree-3.8.0 => fatfree-3.8.1}/_benchmark/clear-cache.sh (100%) rename {fatfree-3.8.0 => fatfree-3.8.1}/_benchmark/hello_world.sh (100%) rename {fatfree-3.8.0 => fatfree-3.8.1}/_benchmark/setup.sh (100%) rename {fatfree-3.8.0 => fatfree-3.8.1}/_benchmark/update.sh (100%) rename {fatfree-3.8.0 => fatfree-3.8.1}/composer.json (75%) rename {fatfree-3.8.0 => fatfree-3.8.1}/index.php (100%) rename {laminas-2.0.x.dev => laminas-2.0}/_benchmark/clean.sh (100%) rename {laminas-2.0.x.dev => laminas-2.0}/_benchmark/clear-cache.sh (100%) rename {laminas-2.0.x.dev => laminas-2.0}/_benchmark/hello_world.sh (100%) rename {laminas-2.0.x.dev => laminas-2.0}/_benchmark/laminas/module/Application/config/module.config.php (100%) rename {laminas-2.0.x.dev => laminas-2.0}/_benchmark/laminas/module/Application/src/Controller/HelloWorldController.php (100%) rename {laminas-2.0.x.dev => laminas-2.0}/_benchmark/laminas/public/index.php (100%) rename {laminas-2.0.x.dev => laminas-2.0}/_benchmark/setup.sh (74%) rename {laminas-2.0.x.dev => laminas-2.0}/_benchmark/update.sh (100%) rename {laravel-9.1 => laravel-10.0}/_benchmark/clean.sh (100%) rename {laravel-9.1 => laravel-10.0}/_benchmark/clear-cache.sh (100%) rename {laravel-9.1 => laravel-10.0}/_benchmark/hello_world.sh (100%) rename {laravel-9.1 => laravel-10.0}/_benchmark/laravel/app/Http/Controllers/HelloWorldController.php (100%) rename {laravel-9.1 => laravel-10.0}/_benchmark/laravel/public/index.php (100%) rename {laravel-9.1 => laravel-10.0}/_benchmark/laravel/routes/web.php (100%) rename {laravel-9.1 => laravel-10.0}/_benchmark/setup.sh (80%) rename {laravel-9.1 => laravel-10.0}/_benchmark/update.sh (100%) rename {leaf-3.0 => leaf-3.3}/Controllers/HelloWorldController.php (100%) rename {leaf-3.0 => leaf-3.3}/_benchmark/clean.sh (100%) rename {leaf-3.0 => leaf-3.3}/_benchmark/clear-cache.sh (100%) rename {leaf-3.0 => leaf-3.3}/_benchmark/hello_world.sh (100%) rename {leaf-3.0 => leaf-3.3}/_benchmark/setup.sh (100%) rename {leaf-3.0 => leaf-3.3}/_benchmark/update.sh (100%) rename {leaf-3.0 => leaf-3.3}/composer.json (81%) rename {leaf-3.0 => leaf-3.3}/index.php (100%) rename {lumen-9.0 => lumen-10.0}/_benchmark/clean.sh (100%) rename {lumen-9.0 => lumen-10.0}/_benchmark/clear-cache.sh (100%) rename {lumen-9.0 => lumen-10.0}/_benchmark/hello_world.sh (100%) rename {lumen-9.0 => lumen-10.0}/_benchmark/lumen/app/Http/Controllers/HelloWorldController.php (100%) rename {lumen-9.0 => lumen-10.0}/_benchmark/lumen/public/index.php (100%) rename {lumen-9.0 => lumen-10.0}/_benchmark/lumen/routes/web.php (100%) rename {lumen-9.0 => lumen-10.0}/_benchmark/setup.sh (77%) rename {lumen-9.0 => lumen-10.0}/_benchmark/update.sh (100%) rename {slim-4.10 => slim-4.11}/Controllers/HelloWorldController.php (100%) rename {slim-4.10 => slim-4.11}/_benchmark/clean.sh (100%) rename {slim-4.10 => slim-4.11}/_benchmark/clear-cache.sh (100%) rename {slim-4.10 => slim-4.11}/_benchmark/hello_world.sh (100%) rename {slim-4.10 => slim-4.11}/_benchmark/setup.sh (100%) rename {slim-4.10 => slim-4.11}/_benchmark/update.sh (100%) rename {slim-4.10 => slim-4.11}/composer.json (85%) rename {slim-4.10 => slim-4.11}/index.php (87%) rename {symfony-6.0 => symfony-6.2}/_benchmark/clean.sh (100%) rename {symfony-6.0 => symfony-6.2}/_benchmark/clear-cache.sh (100%) rename {symfony-6.0 => symfony-6.2}/_benchmark/hello_world.sh (100%) rename {symfony-6.0 => symfony-6.2}/_benchmark/setup.sh (81%) rename {symfony-6.0 => symfony-6.2}/_benchmark/symfony/config/routes.yaml (100%) rename {symfony-6.0 => symfony-6.2}/_benchmark/symfony/public/index.php (100%) rename {symfony-6.0 => symfony-6.2}/_benchmark/symfony/src/Controller/HelloWorldController.php (100%) rename {symfony-6.0 => symfony-6.2}/_benchmark/update.sh (100%) diff --git a/benchmark.config b/benchmark.config index 7de1e25..8e14d4f 100644 --- a/benchmark.config +++ b/benchmark.config @@ -2,7 +2,7 @@ base="http://127.0.0.1/PHP-Frameworks-Bench" # 30-3000 -# higher duration is better to get more reliable results +# a higher duration provides more reliable results duration=60 # for a high-end host you may need to put @@ -16,24 +16,24 @@ connections=500 # Frameworks list # Sorted alphabetically frameworks_list=" -cakephp-4.3 -codeigniter-4.1 +cakephp-4.4 +codeigniter-4.3 fastroute-1.3 -fatfree-3.8.0 +fatfree-3.8.1 frameworkx-dev fuelphp-1.9 -laminas-2.0.x.dev -laravel-9.1 -leaf-3.0 -lumen-9.0 +laminas-2.0 +laravel-10.0 +leaf-3.3 +lumen-10.0 phroute-2.2 pure-php siler-1.7.9 silex-2.3 slim-3.12 -slim-4.10 +slim-4.11 symfony-5.4 -symfony-6.0 +symfony-6.2 ubiquity-2.4.x.dev yii-2.0-basic " \ No newline at end of file diff --git a/cakephp-4.3/_benchmark/cakephp/config/app_local.php b/cakephp-4.4/_benchmark/cakephp/config/app_local.php similarity index 100% rename from cakephp-4.3/_benchmark/cakephp/config/app_local.php rename to cakephp-4.4/_benchmark/cakephp/config/app_local.php diff --git a/cakephp-4.3/_benchmark/cakephp/config/routes.php b/cakephp-4.4/_benchmark/cakephp/config/routes.php similarity index 100% rename from cakephp-4.3/_benchmark/cakephp/config/routes.php rename to cakephp-4.4/_benchmark/cakephp/config/routes.php diff --git a/cakephp-4.3/_benchmark/cakephp/src/Controller/HelloWorldController.php b/cakephp-4.4/_benchmark/cakephp/src/Controller/HelloWorldController.php similarity index 100% rename from cakephp-4.3/_benchmark/cakephp/src/Controller/HelloWorldController.php rename to cakephp-4.4/_benchmark/cakephp/src/Controller/HelloWorldController.php diff --git a/cakephp-4.3/_benchmark/cakephp/webroot/index.php b/cakephp-4.4/_benchmark/cakephp/webroot/index.php similarity index 100% rename from cakephp-4.3/_benchmark/cakephp/webroot/index.php rename to cakephp-4.4/_benchmark/cakephp/webroot/index.php diff --git a/cakephp-4.3/_benchmark/clean.sh b/cakephp-4.4/_benchmark/clean.sh similarity index 100% rename from cakephp-4.3/_benchmark/clean.sh rename to cakephp-4.4/_benchmark/clean.sh diff --git a/cakephp-4.3/_benchmark/clear-cache.sh b/cakephp-4.4/_benchmark/clear-cache.sh similarity index 100% rename from cakephp-4.3/_benchmark/clear-cache.sh rename to cakephp-4.4/_benchmark/clear-cache.sh diff --git a/cakephp-4.3/_benchmark/hello_world.sh b/cakephp-4.4/_benchmark/hello_world.sh similarity index 100% rename from cakephp-4.3/_benchmark/hello_world.sh rename to cakephp-4.4/_benchmark/hello_world.sh diff --git a/cakephp-4.3/_benchmark/setup.sh b/cakephp-4.4/_benchmark/setup.sh similarity index 78% rename from cakephp-4.3/_benchmark/setup.sh rename to cakephp-4.4/_benchmark/setup.sh index 8a62d87..b1f3854 100755 --- a/cakephp-4.3/_benchmark/setup.sh +++ b/cakephp-4.4/_benchmark/setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project --prefer-dist cakephp/app:4.3 ./_benchmark/temp +composer create-project --prefer-dist cakephp/app:^4.4 ./_benchmark/temp yes|mv ./_benchmark/temp/{.,}* ./ # have the route & controller diff --git a/cakephp-4.3/_benchmark/update.sh b/cakephp-4.4/_benchmark/update.sh similarity index 100% rename from cakephp-4.3/_benchmark/update.sh rename to cakephp-4.4/_benchmark/update.sh diff --git a/codeigniter-4.1/_benchmark/codeigniter/public/index.php b/codeigniter-4.1/_benchmark/codeigniter/public/index.php deleted file mode 100755 index b1277ec..0000000 --- a/codeigniter-4.1/_benchmark/codeigniter/public/index.php +++ /dev/null @@ -1,41 +0,0 @@ -systemDirectory, '\\/ ') . DIRECTORY_SEPARATOR . 'bootstrap.php'; -$app = require realpath($bootstrap) ?: $bootstrap; - -/* - *--------------------------------------------------------------- - * LAUNCH THE APPLICATION - *--------------------------------------------------------------- - * Now that everything is setup, it's time to actually fire - * up the engines and make this app do its thang. - */ -$app->run(); - - -/* *** PHP-Frameworks-Bench *** */ -require $_SERVER['DOCUMENT_ROOT'].'/PHP-Frameworks-Bench/libs/output_data.php'; \ No newline at end of file diff --git a/codeigniter-4.1/_benchmark/clean.sh b/codeigniter-4.3/_benchmark/clean.sh similarity index 100% rename from codeigniter-4.1/_benchmark/clean.sh rename to codeigniter-4.3/_benchmark/clean.sh diff --git a/codeigniter-4.1/_benchmark/clear-cache.sh b/codeigniter-4.3/_benchmark/clear-cache.sh similarity index 100% rename from codeigniter-4.1/_benchmark/clear-cache.sh rename to codeigniter-4.3/_benchmark/clear-cache.sh diff --git a/codeigniter-4.1/_benchmark/codeigniter/app/Config/Routes.php b/codeigniter-4.3/_benchmark/codeigniter/app/Config/Routes.php similarity index 100% rename from codeigniter-4.1/_benchmark/codeigniter/app/Config/Routes.php rename to codeigniter-4.3/_benchmark/codeigniter/app/Config/Routes.php diff --git a/codeigniter-4.1/_benchmark/codeigniter/app/Controllers/HelloWorldController.php b/codeigniter-4.3/_benchmark/codeigniter/app/Controllers/HelloWorldController.php similarity index 100% rename from codeigniter-4.1/_benchmark/codeigniter/app/Controllers/HelloWorldController.php rename to codeigniter-4.3/_benchmark/codeigniter/app/Controllers/HelloWorldController.php diff --git a/codeigniter-4.3/_benchmark/codeigniter/public/index.php b/codeigniter-4.3/_benchmark/codeigniter/public/index.php new file mode 100755 index 0000000..07b9869 --- /dev/null +++ b/codeigniter-4.3/_benchmark/codeigniter/public/index.php @@ -0,0 +1,71 @@ +systemDirectory, '\\/ ') . DIRECTORY_SEPARATOR . 'bootstrap.php'; + +// Load environment settings from .env files into $_SERVER and $_ENV +require_once SYSTEMPATH . 'Config/DotEnv.php'; +(new CodeIgniter\Config\DotEnv(ROOTPATH))->load(); + +/* + * --------------------------------------------------------------- + * GRAB OUR CODEIGNITER INSTANCE + * --------------------------------------------------------------- + * + * The CodeIgniter class contains the core functionality to make + * the application run, and does all of the dirty work to get + * the pieces all working together. + */ + +$app = Config\Services::codeigniter(); +$app->initialize(); +$context = is_cli() ? 'php-cli' : 'web'; +$app->setContext($context); + +/* + *--------------------------------------------------------------- + * LAUNCH THE APPLICATION + *--------------------------------------------------------------- + * Now that everything is setup, it's time to actually fire + * up the engines and make this app do its thang. + */ + +$app->run(); + + +/* *** PHP-Frameworks-Bench *** */ +require $_SERVER['DOCUMENT_ROOT'].'/PHP-Frameworks-Bench/libs/output_data.php'; \ No newline at end of file diff --git a/codeigniter-4.1/_benchmark/hello_world.sh b/codeigniter-4.3/_benchmark/hello_world.sh similarity index 100% rename from codeigniter-4.1/_benchmark/hello_world.sh rename to codeigniter-4.3/_benchmark/hello_world.sh diff --git a/codeigniter-4.1/_benchmark/setup.sh b/codeigniter-4.3/_benchmark/setup.sh similarity index 75% rename from codeigniter-4.1/_benchmark/setup.sh rename to codeigniter-4.3/_benchmark/setup.sh index ea9ea35..db2499f 100755 --- a/codeigniter-4.1/_benchmark/setup.sh +++ b/codeigniter-4.3/_benchmark/setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project codeigniter4/appstarter:4.1 --no-dev ./_benchmark/temp +composer create-project codeigniter4/appstarter:^4.3 --no-dev ./_benchmark/temp mv ./_benchmark/temp/{.,}* ./ # have the route & controller diff --git a/codeigniter-4.1/_benchmark/update.sh b/codeigniter-4.3/_benchmark/update.sh similarity index 100% rename from codeigniter-4.1/_benchmark/update.sh rename to codeigniter-4.3/_benchmark/update.sh diff --git a/fastroute-1.3/composer.json b/fastroute-1.3/composer.json index c795481..4a4220f 100644 --- a/fastroute-1.3/composer.json +++ b/fastroute-1.3/composer.json @@ -1,6 +1,6 @@ { "require": { - "nikic/fast-route": "1.3" + "nikic/fast-route": "^1.3" }, "autoload": { "psr-4": { diff --git a/fatfree-3.8.0/Controllers/HelloWorldController.php b/fatfree-3.8.1/Controllers/HelloWorldController.php similarity index 100% rename from fatfree-3.8.0/Controllers/HelloWorldController.php rename to fatfree-3.8.1/Controllers/HelloWorldController.php diff --git a/fatfree-3.8.0/_benchmark/clean.sh b/fatfree-3.8.1/_benchmark/clean.sh similarity index 100% rename from fatfree-3.8.0/_benchmark/clean.sh rename to fatfree-3.8.1/_benchmark/clean.sh diff --git a/fatfree-3.8.0/_benchmark/clear-cache.sh b/fatfree-3.8.1/_benchmark/clear-cache.sh similarity index 100% rename from fatfree-3.8.0/_benchmark/clear-cache.sh rename to fatfree-3.8.1/_benchmark/clear-cache.sh diff --git a/fatfree-3.8.0/_benchmark/hello_world.sh b/fatfree-3.8.1/_benchmark/hello_world.sh similarity index 100% rename from fatfree-3.8.0/_benchmark/hello_world.sh rename to fatfree-3.8.1/_benchmark/hello_world.sh diff --git a/fatfree-3.8.0/_benchmark/setup.sh b/fatfree-3.8.1/_benchmark/setup.sh similarity index 100% rename from fatfree-3.8.0/_benchmark/setup.sh rename to fatfree-3.8.1/_benchmark/setup.sh diff --git a/fatfree-3.8.0/_benchmark/update.sh b/fatfree-3.8.1/_benchmark/update.sh similarity index 100% rename from fatfree-3.8.0/_benchmark/update.sh rename to fatfree-3.8.1/_benchmark/update.sh diff --git a/fatfree-3.8.0/composer.json b/fatfree-3.8.1/composer.json similarity index 75% rename from fatfree-3.8.0/composer.json rename to fatfree-3.8.1/composer.json index d4f7185..b60e9a8 100755 --- a/fatfree-3.8.0/composer.json +++ b/fatfree-3.8.1/composer.json @@ -1,6 +1,6 @@ { "require": { - "bcosca/fatfree-core": "3.8.0" + "bcosca/fatfree-core": "^3.8.1" }, "autoload": { "psr-4": { diff --git a/fatfree-3.8.0/index.php b/fatfree-3.8.1/index.php similarity index 100% rename from fatfree-3.8.0/index.php rename to fatfree-3.8.1/index.php diff --git a/fuelphp-1.9/_benchmark/setup.sh b/fuelphp-1.9/_benchmark/setup.sh index f2164be..b14456c 100755 --- a/fuelphp-1.9/_benchmark/setup.sh +++ b/fuelphp-1.9/_benchmark/setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project fuel/fuel:1.9.0 --prefer-dist ./_benchmark/temp +composer create-project fuel/fuel:^1.9.0 --prefer-dist ./_benchmark/temp mv ./_benchmark/temp/{.,}* ./ # have the route & controller diff --git a/index.php b/index.php index d53f1f0..78931fd 100644 --- a/index.php +++ b/index.php @@ -57,13 +57,14 @@ echo "

" . date("Y/m/d H:i:s", filemtime($resultsFile)) . "

"; ?>
- +
-
- +
- + +
+ diff --git a/laminas-2.0.x.dev/_benchmark/clean.sh b/laminas-2.0/_benchmark/clean.sh similarity index 100% rename from laminas-2.0.x.dev/_benchmark/clean.sh rename to laminas-2.0/_benchmark/clean.sh diff --git a/laminas-2.0.x.dev/_benchmark/clear-cache.sh b/laminas-2.0/_benchmark/clear-cache.sh similarity index 100% rename from laminas-2.0.x.dev/_benchmark/clear-cache.sh rename to laminas-2.0/_benchmark/clear-cache.sh diff --git a/laminas-2.0.x.dev/_benchmark/hello_world.sh b/laminas-2.0/_benchmark/hello_world.sh similarity index 100% rename from laminas-2.0.x.dev/_benchmark/hello_world.sh rename to laminas-2.0/_benchmark/hello_world.sh diff --git a/laminas-2.0.x.dev/_benchmark/laminas/module/Application/config/module.config.php b/laminas-2.0/_benchmark/laminas/module/Application/config/module.config.php similarity index 100% rename from laminas-2.0.x.dev/_benchmark/laminas/module/Application/config/module.config.php rename to laminas-2.0/_benchmark/laminas/module/Application/config/module.config.php diff --git a/laminas-2.0.x.dev/_benchmark/laminas/module/Application/src/Controller/HelloWorldController.php b/laminas-2.0/_benchmark/laminas/module/Application/src/Controller/HelloWorldController.php similarity index 100% rename from laminas-2.0.x.dev/_benchmark/laminas/module/Application/src/Controller/HelloWorldController.php rename to laminas-2.0/_benchmark/laminas/module/Application/src/Controller/HelloWorldController.php diff --git a/laminas-2.0.x.dev/_benchmark/laminas/public/index.php b/laminas-2.0/_benchmark/laminas/public/index.php similarity index 100% rename from laminas-2.0.x.dev/_benchmark/laminas/public/index.php rename to laminas-2.0/_benchmark/laminas/public/index.php diff --git a/laminas-2.0.x.dev/_benchmark/setup.sh b/laminas-2.0/_benchmark/setup.sh similarity index 74% rename from laminas-2.0.x.dev/_benchmark/setup.sh rename to laminas-2.0/_benchmark/setup.sh index 470273a..27b40f8 100755 --- a/laminas-2.0.x.dev/_benchmark/setup.sh +++ b/laminas-2.0/_benchmark/setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project laminas/laminas-mvc-skeleton:2.0.x-dev ./_benchmark/temp +composer create-project laminas/laminas-mvc-skeleton:^2.0 ./_benchmark/temp mv ./_benchmark/temp/{.,}* ./ # have the route & controller diff --git a/laminas-2.0.x.dev/_benchmark/update.sh b/laminas-2.0/_benchmark/update.sh similarity index 100% rename from laminas-2.0.x.dev/_benchmark/update.sh rename to laminas-2.0/_benchmark/update.sh diff --git a/laravel-9.1/_benchmark/clean.sh b/laravel-10.0/_benchmark/clean.sh similarity index 100% rename from laravel-9.1/_benchmark/clean.sh rename to laravel-10.0/_benchmark/clean.sh diff --git a/laravel-9.1/_benchmark/clear-cache.sh b/laravel-10.0/_benchmark/clear-cache.sh similarity index 100% rename from laravel-9.1/_benchmark/clear-cache.sh rename to laravel-10.0/_benchmark/clear-cache.sh diff --git a/laravel-9.1/_benchmark/hello_world.sh b/laravel-10.0/_benchmark/hello_world.sh similarity index 100% rename from laravel-9.1/_benchmark/hello_world.sh rename to laravel-10.0/_benchmark/hello_world.sh diff --git a/laravel-9.1/_benchmark/laravel/app/Http/Controllers/HelloWorldController.php b/laravel-10.0/_benchmark/laravel/app/Http/Controllers/HelloWorldController.php similarity index 100% rename from laravel-9.1/_benchmark/laravel/app/Http/Controllers/HelloWorldController.php rename to laravel-10.0/_benchmark/laravel/app/Http/Controllers/HelloWorldController.php diff --git a/laravel-9.1/_benchmark/laravel/public/index.php b/laravel-10.0/_benchmark/laravel/public/index.php similarity index 100% rename from laravel-9.1/_benchmark/laravel/public/index.php rename to laravel-10.0/_benchmark/laravel/public/index.php diff --git a/laravel-9.1/_benchmark/laravel/routes/web.php b/laravel-10.0/_benchmark/laravel/routes/web.php similarity index 100% rename from laravel-9.1/_benchmark/laravel/routes/web.php rename to laravel-10.0/_benchmark/laravel/routes/web.php diff --git a/laravel-9.1/_benchmark/setup.sh b/laravel-10.0/_benchmark/setup.sh similarity index 80% rename from laravel-9.1/_benchmark/setup.sh rename to laravel-10.0/_benchmark/setup.sh index bc468de..9e4f893 100755 --- a/laravel-9.1/_benchmark/setup.sh +++ b/laravel-10.0/_benchmark/setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project --prefer-dist laravel/laravel:9.1 ./_benchmark/temp +composer create-project --prefer-dist laravel/laravel:^10.0 ./_benchmark/temp mv ./_benchmark/temp/{.,}* ./ # have the route & controller diff --git a/laravel-9.1/_benchmark/update.sh b/laravel-10.0/_benchmark/update.sh similarity index 100% rename from laravel-9.1/_benchmark/update.sh rename to laravel-10.0/_benchmark/update.sh diff --git a/leaf-3.0/Controllers/HelloWorldController.php b/leaf-3.3/Controllers/HelloWorldController.php similarity index 100% rename from leaf-3.0/Controllers/HelloWorldController.php rename to leaf-3.3/Controllers/HelloWorldController.php diff --git a/leaf-3.0/_benchmark/clean.sh b/leaf-3.3/_benchmark/clean.sh similarity index 100% rename from leaf-3.0/_benchmark/clean.sh rename to leaf-3.3/_benchmark/clean.sh diff --git a/leaf-3.0/_benchmark/clear-cache.sh b/leaf-3.3/_benchmark/clear-cache.sh similarity index 100% rename from leaf-3.0/_benchmark/clear-cache.sh rename to leaf-3.3/_benchmark/clear-cache.sh diff --git a/leaf-3.0/_benchmark/hello_world.sh b/leaf-3.3/_benchmark/hello_world.sh similarity index 100% rename from leaf-3.0/_benchmark/hello_world.sh rename to leaf-3.3/_benchmark/hello_world.sh diff --git a/leaf-3.0/_benchmark/setup.sh b/leaf-3.3/_benchmark/setup.sh similarity index 100% rename from leaf-3.0/_benchmark/setup.sh rename to leaf-3.3/_benchmark/setup.sh diff --git a/leaf-3.0/_benchmark/update.sh b/leaf-3.3/_benchmark/update.sh similarity index 100% rename from leaf-3.0/_benchmark/update.sh rename to leaf-3.3/_benchmark/update.sh diff --git a/leaf-3.0/composer.json b/leaf-3.3/composer.json similarity index 81% rename from leaf-3.0/composer.json rename to leaf-3.3/composer.json index c61215d..a8103a7 100644 --- a/leaf-3.0/composer.json +++ b/leaf-3.3/composer.json @@ -1,6 +1,6 @@ { "require": { - "leafs/leaf": "3.0" + "leafs/leaf": "^3.3" }, "autoload": { "psr-4": { diff --git a/leaf-3.0/index.php b/leaf-3.3/index.php similarity index 100% rename from leaf-3.0/index.php rename to leaf-3.3/index.php diff --git a/lumen-9.0/_benchmark/clean.sh b/lumen-10.0/_benchmark/clean.sh similarity index 100% rename from lumen-9.0/_benchmark/clean.sh rename to lumen-10.0/_benchmark/clean.sh diff --git a/lumen-9.0/_benchmark/clear-cache.sh b/lumen-10.0/_benchmark/clear-cache.sh similarity index 100% rename from lumen-9.0/_benchmark/clear-cache.sh rename to lumen-10.0/_benchmark/clear-cache.sh diff --git a/lumen-9.0/_benchmark/hello_world.sh b/lumen-10.0/_benchmark/hello_world.sh similarity index 100% rename from lumen-9.0/_benchmark/hello_world.sh rename to lumen-10.0/_benchmark/hello_world.sh diff --git a/lumen-9.0/_benchmark/lumen/app/Http/Controllers/HelloWorldController.php b/lumen-10.0/_benchmark/lumen/app/Http/Controllers/HelloWorldController.php similarity index 100% rename from lumen-9.0/_benchmark/lumen/app/Http/Controllers/HelloWorldController.php rename to lumen-10.0/_benchmark/lumen/app/Http/Controllers/HelloWorldController.php diff --git a/lumen-9.0/_benchmark/lumen/public/index.php b/lumen-10.0/_benchmark/lumen/public/index.php similarity index 100% rename from lumen-9.0/_benchmark/lumen/public/index.php rename to lumen-10.0/_benchmark/lumen/public/index.php diff --git a/lumen-9.0/_benchmark/lumen/routes/web.php b/lumen-10.0/_benchmark/lumen/routes/web.php similarity index 100% rename from lumen-9.0/_benchmark/lumen/routes/web.php rename to lumen-10.0/_benchmark/lumen/routes/web.php diff --git a/lumen-9.0/_benchmark/setup.sh b/lumen-10.0/_benchmark/setup.sh similarity index 77% rename from lumen-9.0/_benchmark/setup.sh rename to lumen-10.0/_benchmark/setup.sh index b9e7c33..88bf9cb 100755 --- a/lumen-9.0/_benchmark/setup.sh +++ b/lumen-10.0/_benchmark/setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project --prefer-dist laravel/lumen:9.0 ./_benchmark/temp +composer create-project --prefer-dist laravel/lumen:^10.0 ./_benchmark/temp mv ./_benchmark/temp/{.,}* ./ # have the route & controller diff --git a/lumen-9.0/_benchmark/update.sh b/lumen-10.0/_benchmark/update.sh similarity index 100% rename from lumen-9.0/_benchmark/update.sh rename to lumen-10.0/_benchmark/update.sh diff --git a/phroute-2.2/composer.json b/phroute-2.2/composer.json index ca08459..eed4e24 100755 --- a/phroute-2.2/composer.json +++ b/phroute-2.2/composer.json @@ -1,6 +1,6 @@ { "require": { - "phroute/phroute": "2.2" + "phroute/phroute": "^2.2" }, "autoload": { "psr-4": { diff --git a/silex-2.3/composer.json b/silex-2.3/composer.json index 50b5de8..e55667d 100644 --- a/silex-2.3/composer.json +++ b/silex-2.3/composer.json @@ -1,6 +1,6 @@ { "require": { - "silex/silex": "2.3" + "silex/silex": "^2.3" }, "autoload": { "psr-4": { diff --git a/slim-3.12/composer.json b/slim-3.12/composer.json index ce52172..3a06494 100755 --- a/slim-3.12/composer.json +++ b/slim-3.12/composer.json @@ -1,6 +1,6 @@ { "require": { - "slim/slim": "3.12.3" + "slim/slim": "^3.12" }, "config": { "optimize-autoloader": true diff --git a/slim-4.10/Controllers/HelloWorldController.php b/slim-4.11/Controllers/HelloWorldController.php similarity index 100% rename from slim-4.10/Controllers/HelloWorldController.php rename to slim-4.11/Controllers/HelloWorldController.php diff --git a/slim-4.10/_benchmark/clean.sh b/slim-4.11/_benchmark/clean.sh similarity index 100% rename from slim-4.10/_benchmark/clean.sh rename to slim-4.11/_benchmark/clean.sh diff --git a/slim-4.10/_benchmark/clear-cache.sh b/slim-4.11/_benchmark/clear-cache.sh similarity index 100% rename from slim-4.10/_benchmark/clear-cache.sh rename to slim-4.11/_benchmark/clear-cache.sh diff --git a/slim-4.10/_benchmark/hello_world.sh b/slim-4.11/_benchmark/hello_world.sh similarity index 100% rename from slim-4.10/_benchmark/hello_world.sh rename to slim-4.11/_benchmark/hello_world.sh diff --git a/slim-4.10/_benchmark/setup.sh b/slim-4.11/_benchmark/setup.sh similarity index 100% rename from slim-4.10/_benchmark/setup.sh rename to slim-4.11/_benchmark/setup.sh diff --git a/slim-4.10/_benchmark/update.sh b/slim-4.11/_benchmark/update.sh similarity index 100% rename from slim-4.10/_benchmark/update.sh rename to slim-4.11/_benchmark/update.sh diff --git a/slim-4.10/composer.json b/slim-4.11/composer.json similarity index 85% rename from slim-4.10/composer.json rename to slim-4.11/composer.json index 400614e..c4c37a7 100644 --- a/slim-4.10/composer.json +++ b/slim-4.11/composer.json @@ -1,6 +1,6 @@ { "require": { - "slim/slim": "4.10.0", + "slim/slim": "^4.11", "slim/psr7": "^1.5", "slim/http": "^1.2" }, diff --git a/slim-4.10/index.php b/slim-4.11/index.php similarity index 87% rename from slim-4.10/index.php rename to slim-4.11/index.php index 8cdd419..4770eb4 100644 --- a/slim-4.10/index.php +++ b/slim-4.11/index.php @@ -7,7 +7,7 @@ $app = AppFactory::create(); // xampp -$app->setBasePath("/PHP-Frameworks-Bench/slim-4.10/index.php"); +$app->setBasePath("/PHP-Frameworks-Bench/slim-4.11/index.php"); // Add error middleware $app->addErrorMiddleware(false, true, true); diff --git a/symfony-5.4/_benchmark/setup.sh b/symfony-5.4/_benchmark/setup.sh index 0a19c2d..916ef41 100755 --- a/symfony-5.4/_benchmark/setup.sh +++ b/symfony-5.4/_benchmark/setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project symfony/skeleton:5.4.99 ./_benchmark/temp +composer create-project symfony/skeleton:^5.4 ./_benchmark/temp mv ./_benchmark/temp/{.,}* ./ # have the route & controller diff --git a/symfony-6.0/_benchmark/clean.sh b/symfony-6.2/_benchmark/clean.sh similarity index 100% rename from symfony-6.0/_benchmark/clean.sh rename to symfony-6.2/_benchmark/clean.sh diff --git a/symfony-6.0/_benchmark/clear-cache.sh b/symfony-6.2/_benchmark/clear-cache.sh similarity index 100% rename from symfony-6.0/_benchmark/clear-cache.sh rename to symfony-6.2/_benchmark/clear-cache.sh diff --git a/symfony-6.0/_benchmark/hello_world.sh b/symfony-6.2/_benchmark/hello_world.sh similarity index 100% rename from symfony-6.0/_benchmark/hello_world.sh rename to symfony-6.2/_benchmark/hello_world.sh diff --git a/symfony-6.0/_benchmark/setup.sh b/symfony-6.2/_benchmark/setup.sh similarity index 81% rename from symfony-6.0/_benchmark/setup.sh rename to symfony-6.2/_benchmark/setup.sh index 21af94a..66a9036 100755 --- a/symfony-6.0/_benchmark/setup.sh +++ b/symfony-6.2/_benchmark/setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project symfony/skeleton:6.0.99 ./_benchmark/temp +composer create-project symfony/skeleton:^6.2 ./_benchmark/temp mv ./_benchmark/temp/{.,}* ./ # have the route & controller diff --git a/symfony-6.0/_benchmark/symfony/config/routes.yaml b/symfony-6.2/_benchmark/symfony/config/routes.yaml similarity index 100% rename from symfony-6.0/_benchmark/symfony/config/routes.yaml rename to symfony-6.2/_benchmark/symfony/config/routes.yaml diff --git a/symfony-6.0/_benchmark/symfony/public/index.php b/symfony-6.2/_benchmark/symfony/public/index.php similarity index 100% rename from symfony-6.0/_benchmark/symfony/public/index.php rename to symfony-6.2/_benchmark/symfony/public/index.php diff --git a/symfony-6.0/_benchmark/symfony/src/Controller/HelloWorldController.php b/symfony-6.2/_benchmark/symfony/src/Controller/HelloWorldController.php similarity index 100% rename from symfony-6.0/_benchmark/symfony/src/Controller/HelloWorldController.php rename to symfony-6.2/_benchmark/symfony/src/Controller/HelloWorldController.php diff --git a/symfony-6.0/_benchmark/update.sh b/symfony-6.2/_benchmark/update.sh similarity index 100% rename from symfony-6.0/_benchmark/update.sh rename to symfony-6.2/_benchmark/update.sh diff --git a/ubiquity-2.4.x.dev/_benchmark/ubiquity/app/config/config.php b/ubiquity-2.4.x.dev/_benchmark/ubiquity/app/config/config.php index 6c001e3..73c3986 100644 --- a/ubiquity-2.4.x.dev/_benchmark/ubiquity/app/config/config.php +++ b/ubiquity-2.4.x.dev/_benchmark/ubiquity/app/config/config.php @@ -13,8 +13,8 @@ ], "sessionName"=>"temp", "namespaces"=>[], - "templateEngine"=>'Ubiquity\\views\\engine\\Twig', - "templateEngineOptions"=>array("cache"=>false), + //"templateEngine"=>'Ubiquity\\views\\engine\\Twig', + "templateEngineOptions"=>array("cache"=>true), "test"=>false, "debug"=>false, "logger"=>function(){return new \Ubiquity\log\libraries\UMonolog("temp",\Monolog\Logger::INFO);}, diff --git a/yii-2.0-basic/_benchmark/setup.sh b/yii-2.0-basic/_benchmark/setup.sh index ab3d31f..fca46a5 100755 --- a/yii-2.0-basic/_benchmark/setup.sh +++ b/yii-2.0-basic/_benchmark/setup.sh @@ -1,13 +1,14 @@ #!/bin/sh # create project rm -rf _benchmark/temp -composer create-project --prefer-dist yiisoft/yii2-app-basic:"^2.0" ./_benchmark/temp +composer create-project --prefer-dist yiisoft/yii2-app-basic:^2.0 ./_benchmark/temp mv ./_benchmark/temp/{.,}* ./ # have the route & controller yes|cp -r _benchmark/yii2/* ./ # some enhancements -composer install --no-dev -o -rm ./public/.htaccess - +# composer install --no-dev -o +# I used --ignore-platform-req=php because at the moment +# yii 2 basic not support php 8.2 +composer --ignore-platform-req=php install --no-dev -o \ No newline at end of file From 2643bca02942fcd68a7b8c862b1eb4127bc72761 Mon Sep 17 00:00:00 2001 From: Mohammad Yaaghubi Date: Wed, 17 May 2023 20:03:27 +0330 Subject: [PATCH 3/3] Update README.md & screenshots --- README.md | 71 ++++++++++-------- screenshots/php-frameworks-bench-exectime.png | Bin 34657 -> 16547 bytes .../php-frameworks-bench-includedfiles.png | Bin 34814 -> 16493 bytes screenshots/php-frameworks-bench-memory.png | Bin 36515 -> 15377 bytes .../php-frameworks-bench-throughput.png | Bin 38888 -> 17620 bytes 5 files changed, 40 insertions(+), 31 deletions(-) mode change 100644 => 100755 screenshots/php-frameworks-bench-exectime.png mode change 100644 => 100755 screenshots/php-frameworks-bench-includedfiles.png mode change 100644 => 100755 screenshots/php-frameworks-bench-memory.png mode change 100644 => 100755 screenshots/php-frameworks-bench-throughput.png diff --git a/README.md b/README.md index f4d3ca8..97f39c1 100755 --- a/README.md +++ b/README.md @@ -29,15 +29,16 @@ Benchmarking on components like template engines or ORM/Database libraries is ou #### Environment -* Ubuntu 22.04 LTS 64bit - * PHP 8.1.6 - * OPCache enabled +* Ubuntu 22.04 LTS x86_64 + * PHP 8.2.5 + * OPCache Off * Apache 2.4.52 - * CPU Core i7 2600K@4Ghz + * WRK 4.2.0 + * CPU Core i7-3770K@4.4Ghz * Memory 16G -#### Results (2022/5/22) +#### Results (2023/5/15) These are my benchmarks, not yours. **I encourage you to run on your (production equivalent) environments.** @@ -46,28 +47,29 @@ These are my benchmarks, not yours. **I encourage you to run on your (production ![Benchmark Results Graph Execution Time](screenshots/php-frameworks-bench-exectime.png) ![Benchmark Results Graph Included Files](screenshots/php-frameworks-bench-includedfiles.png) -|framework |requests per second|relative|peak memory|relative| -|-------------------|------------------:|-------:|----------:|-------:| -|pure-php | 42,114.24| 52.1| 0.34| 1.0| -|phroute-2.2 | 33,424.47| 42.4| 0.34| 1.0| -|fastroute-1.3 | 33,190.14| 42.1| 0.34| 1.0| -|siler-1.7.9 | 22,152.74| 28.8| 0.36| 1.1| -|leaf-3.0 | 20,685.10| 26.3| 0.36| 1.1| -|fatfree-3.8.0 | 19,282.52| 24.5| 0.39| 1.1| -|frameworkx-dev | 18,033.22| 22.9| 0.37| 1.1| -|slim-4.10 | 14,958.27| 19.0| 0.38| 1.1| -|slim-3.12 | 14,714.84| 18.7| 0.39| 1.1| -|yii-2.0-basic | 11,831.91| 15.0| 0.70| 2.1| -|ubiquity-2.4.x.dev | 11,669.47| 14.8| 0.38| 1.1| -|silex-2.3 | 10,415.74| 13.2| 0.39| 1.1| -|symfony-5.4 | 9,761.44| 12.4| 0.46| 1.4| -|symfony-6.0 | 9,737.48| 12.4| 0.45| 1.3| -|lumen-9.0 | 6,205.79| 7.7| 0.39| 1.1| -|cakephp-4.3 | 5,562.91| 7.0| 0.43| 1.3| -|laminas-2.0.x.dev | 5,015.71| 6.4| 0.49| 1.4| -|fuelphp-1.9 | 4,894.22| 6.2| 0.45| 1.3| -|codeigniter-4.1 | 1,938.43| 2.5| 1.46| 4.3| -|laravel-9.1 | 788.76| 1.0| 0.55| 1.6| +|framework |requests per second (rps)|relative (rps)|peak memory|relative (mem)| +|-------------------|------------------------:|-------------:|----------:|-------------:| +|pure-php | 27,379.94| 27,379.9| 0.42| 0.4| +|fastroute-1.3 | 4,591.01| 4,591.0| 0.56| 0.6| +|phroute-2.2 | 4,303.07| 4,303.1| 0.58| 0.6| +|leaf-3.3 | 1,576.68| 1,576.7| 1.10| 1.1| +|fatfree-3.8.1 | 1,512.30| 1,512.3| 1.67| 1.7| +|siler-1.7.9 | 1,416.80| 1,416.8| 1.17| 1.2| +|slim-3.12 | 1,061.05| 1,061.1| 1.40| 1.4| +|frameworkx-dev | 994.55| 994.6| 1.45| 1.5| +|slim-4.11 | 805.51| 805.5| 1.57| 1.6| +|ubiquity-2.4.x.dev | 726.70| 726.7| 1.64| 1.6| +|silex-2.3 | 558.07| 558.1| 2.16| 2.2| +|yii-2.0-basic | 508.32| 508.3| 2.57| 2.6| +|fuelphp-1.9 | 450.65| 450.7| 2.51| 2.5| +|lumen-10.0 | 352.94| 352.9| 3.49| 3.5| +|codeigniter-4.3 | 324.27| 324.3| 3.50| 3.5| +|symfony-5.4 | 319.55| 319.6| 3.82| 3.8| +|symfony-6.2 | 314.21| 314.2| 3.89| 3.9| +|laminas-2.0 | 309.30| 309.3| 3.50| 3.5| +|cakephp-4.4 | 262.25| 262.3| 4.49| 4.5| +|laravel-10.0 | 96.97| 97.0| 11.99| 12.0| + ## Benchmarking Policy @@ -94,13 +96,14 @@ If you want to have benchmarks on `PHP extension frameworks` like Phalcon, you n 1- Download & Setup: ```bash -# you can put --branch vx.x +# ...--branch vx.x $ git clone https://github.com/myaaghubi/PHP-Frameworks-Bench.git $ cd PHP-Frameworks-Bench # run the setup & follow the progress # check out benchmark.config +# yes | bash setup.sh $ bash setup.sh ``` @@ -120,8 +123,14 @@ $ bash benchmark.sh ``` 4- Check the resuts: +- web: + + - +- command: + ``` + bash show-table.sh + ``` ## Commands @@ -132,7 +141,7 @@ $ bash update.sh # to clean them all # trouble? run it then -# you can use setup.sh again +# you can use `bash setup.sh` again $ bash clean.sh # clear the cache of frameworks @@ -147,7 +156,7 @@ To specify the frameworks, put them with `-t ...` after each command: ```bash # supported for `setup.sh`, `benchmark.sh`, `update.sh`, `clean.sh`, and `clear-cache.sh` # bash benchmarks.sh --help -h -$ bash benchmark.sh -t laravel-9.1/ slim-4.10/ fatfree-3.8.0/ ... +$ bash benchmark.sh -t laravel-10.0/ slim-4.11/ ... ... ``` diff --git a/screenshots/php-frameworks-bench-exectime.png b/screenshots/php-frameworks-bench-exectime.png old mode 100644 new mode 100755 index 286de631509f1d8cfdb5888978646cf3ae55b226..a4ea50673972e80b7483fbfd2ee8d11b4bf1016e GIT binary patch literal 16547 zcmd_R1yEd3w=Q^)KnU6dmyk5UAp{5z91=7T2<|lQ?k*vL1_A_k2=4CM1b26LhsGOc z`0xAY)qn5Y`(|qD)q6EHUDeff&fceMuf4wYt#6&PPS7`53G5eSF8~0*mXZ`z007i7 z06;Q*j`DQIw&0ZH=?B$BTA5M{x*|mod9r*;^yk@SSECbRB8ht1Gbaz-r{$!KKeI& zqg4f7M*u5e{B2C6-wHs_JEa~1poat~Q>-+60Yn3UrJLs`Fi?OE9GpuDJ_Ba*qZWvP znGA~j=RhbDkU%f-7FoCv&{g(RU`B3j1O5~VgWsXHmLU16*RV?<`!+uVoWs<9;|l8n zz6qb02Y}Zfk%7;zUJjzXmO=URehjvf53&7OCy4~K_QwpyNsn<5)WwXDxtt!ati4%l zvn>ClN6dg{jIjYuj!U9`DY=azGlT^IWY?pAA3h5G-rm|+-7?;`gr9e2JXjptfCb;2 zEI%~;LPiDfWQXB%kj>306x(j3GAEctz9ulI0+=peYjezF{Ly$Z;(i_C_VG^mRciXT z9)3!S7nqobH2Uey@7F^FA30WSRzkclpGF_%-H!pgMB#+u)=d9~f1OP$ysY9&V2LlYIodfUp6_X%yom*Pb_NvsH|QY-Ha zYIPY3*&k5iDqhuJwvX7`EBIP|`?kbrx+JM>BuxPrs3JYjU+TT#g@W|MX23(wi4($5 z!FrM(B7L)7??MUW!JR$!S;+aH%pga7v^ZOd|T+pT&|n zIg)5*Vumnf-F0lhSoD7-7B><%X0e05yS?jw?t+CKfbHKcsZUR8LFz%8OHxb9njn+& zY&kl?-aTNJHNc zb+H?rsC}BUS3%ilwut|#uUT<@AmjY(mfV@uLq_qlLxFLTafETomfau{PFMNLG0$xB zm!UU9*h3yHC@exOL*n+;i@8Epz&Z_J>4=`*Uz7+Z5px=9CLwD_(>XMgv!a ze8bO%d8gq$!Eu9qw_S{jz6+e)#Zie1tMkkY;yw5je3Xj&{fFmVzez3GJ{lYk{5IIJ zh&QVnJ^rzp2kJL%i0ClQ9F@wXtD`*%G+F0#B^ER;vZ2r~`mkiQV8O4aZ^k~K)sfY? z(ZVnoZINi)Fj_V4I55z|yihb#)O!%dGns6Ws@F2xG=CTRGg~aV^GgUDXo3xeXA)|%WveWNmxm|N&Pi>#Yx2-&Pi6w1ZxE03}Xxz ziq>;%2X_ZA4iXR04tXy1E@>{UE{7=xDDWw#_#F8>?H!#4oGope_On($wC8u^x9_T& zkej4Cq?~aQ=SctV$B%Q4BUZG^4bHVrbMKGYBs*#ts~*3|OlnM8D4w;NSR4@O^eVjl z`YwsQSG!#RE^>a1P+PMbSWn4K%56LQz0IoQtfQ`T+x$wdGMP4Y>b+IZe23;rbH9f! zub_a@&Co82V3#0rntNJcOHK=TS)hg5d&)b(8~rZzmhYzjKKu%{>UK(WBKu4i=`YeI zQnMeKUnPnK3KePsYBoCOv(RUaXslR*grBf5u+^#TqikAu^vJ@MA=P=BfmzdEP-Z_kfE5rtJa$+qRp&9b!wRKun)08eeG~IPiXm5 zW;C-(q2wD5kqm1dldC3)rfZ#Kv!uoZ$FlLm-ZeGmcOuW`-(}zG$|`5-T-8rjz%a2! zBI*!DVwZPp+6oPZu4cz$Uj3&16|wi<*3=Y~PtDyHPQw)Z$Fj3OGksV65R)I>+izWR zu2FA5s25|X3^$LP)Ku|dB#wa;*%sxMT$PE}ZLO)wLMA;g+^pv2mcG>X9qvo+XYE@T zA=F`|Uz*KDCPxB}v5U!1LO01FR$rDJ)7{N4!Un4b`vy@s^*9eT2WpDuPt&#?Kni{WJYUbwFNgO}j`@N7Ha|<$QTa?DFDBWr|O~HsMTuaO1D*a zxLq9=j)M`H`Vjp%9=JLtF(5HXElwR8oTWo ze(hFzSnY1+81p)07*^tze`XIa%rE8brtYR{8gdgj$+;^Yn)ia&!5fylo2e4$?}Q(| zosHfYbmxx9Aq2NQAMRKYKhADhBt8y5iOkmqk_uk|z?~KVe18DI&C@C09RP584*+|* z0Kgj$0K~S*4f6Z|fC7AzQ4)Ka@c8(+xw)C)uiMel86A@n8I=_LE4sIDsHb&LI8@*3Fe;)d6+^o+9h>XtsIket+#zkmCuTiSb#p~Y6g z1s)0YO}#VP0i`CPRYuTar})Oqrpc1O6SckbGb=ldZN1Iyy|9kn){dUP9o;g%rAq!~ z&Z%t?#b?+sr}pA-raX}dU11i-#0LL|L`y{IM~_ImibeEqO-cUxpa0AwmLVK7GPNv z?_Zt*?QU!CZimfIjl&Oi6QQmxrRlv5MJ*M16C;B=8>_Lw-wV={%JVY1+W%G+Fw@*czC$KzrVY?yS=@=xw*N%zP`G;LLd;AmzNh87w6~aXJ==p zr>7?;C&$Ofa5((v=;-k9@ZjKJe}8{(Z*O;ZcV}m3dwY9pYina;V|{&nZEbCJb#-NB zWqEmdX=!P3adBZ`VSavoZfKR+)oFE=+gCnqO6J3A{YD>E}QBO@a{J^jz0KWS-csi~@o{l+v9Yl+F)`86(NR%Rk&%%R5fQ(C{|*li4+{$m4GsPE>sLrfNN{j) zP*4yQ3JnYl3+9>|FMd=;ogwv^;^OS=?BwL+=;-L+;9zfWZ)ay`Yiny`V`FV?ZDnO;X=!O;VPS4=Zf0g?YHDg? zVq$D;{Dl1HEr(CV84}>AAglOv`2Xh*pol=HdEx^MTS;{X0Kk0tk1rCCnEbRsY(-L{ zB1*2whl_5)N}CU8$J-$}^-hKJ`m;GPEQx+GEUch*srdO zMSzoFI7SoUFsOCOG#xbIWNoKeSGP z%p|&jaR(e$rze=Dgoo^-IB&g533zZz*NCYB(pT&gDqkt;lv**nvd>X z+9>e-pGvu~8xeW`&L_Jr=$V+9Fgpfv-3RVRAH#(3v?eY`y+B=T(yZ6{bSef}yLP&m z;Nc}lGrwlGuJ2eBx9Akpq3=uVkbSf6C#Q)8h;(iSo*N1rPxHSX15(?cc1m9`knncO z0>jkpv+Kvi8cSv5Uu}Q(geLc}Y;RtzFn_zwb?Ihbxl>Oju5xF`#i2v`Gnv1)Pn`Og zGwCDPy({#L@;>zBdC0+dV}I9UM%_Ue-_ccIdL7Nms>>_k@q)*9)<{*%E$%^44)D75 z8fVUFa-kM@_jJ2?J!I?y8qw_b_)o>uU7-)l&*2x=d{kJIUX$57#<={?ls=&QR{8wR zbhw$6w)C2!gx#S6xf&`EnDT3E#Iv9+h1UEiTq2fwFme`nvL;D@u0r zgo;Of?m6fh6bW%Kf+RUyfBZX8e*{{4lE)L?km%^Bs9Z9AcaEVTb1WW&LLc050Cyk0 zDT`@hQ)~0Ns@=Gq@L(eN-< zP8Ln4wsiXsduypUkR{+n@D?c4yv#G!_DWg^Y%{%fCeUalfWD$NUT7^Uszf#57jrcP zm8?Uq+fVvB2z+2FoX&wl-*tP&92e`M_>C<2es)`8L0dV}0@C%lz8t8MbIwS%v$Tot zWj!aa$7-cEoY4gwj-;chaGVxvOhmR3p9{P^Ehf@n-5qEOWxFWZp2qb{1M!uel#4}TkUVy5)KNPm zF^qQG_mn&-8O655teHzp)RAYa^~;^5=-VMK6l-RIc`V^d_9xGyl|w99Ch}sQd?*`S z7QxG4-^`Ukp%^pS2awFN7?YH3IC7IbavJ}ZqptD}y-4k2xFbMgEmA^g+(&!%RLTSK!=l8{VQ&|WJIyuJ)6 z{z+D?@FR3W3dE&ACsr~o9&J!ip+O3?^1xQr>>J2`J(6+s(Bbf`Bfon%rdPdX2LV}Q z5C7qsC7rxFvuPe>=}^{^g$0g38`a9~9xZk)4(rT~jnv=*D;$8ozmEdk=ZPGP_5-dR zcoL4|({K9E1g6j5`$kWj!0dgf79>39zh#I3j<*{U4*x0)|Cf6@biWY^JQn5>QyZ^c z2uphsttu8e8FeBo;r}nw&z1V83|L@z%;O9t?UWdmvz{*K{;N`+^$5@n!7ihD3R;7I z=wVw)Nu}JDQl-VUE_tWX?h8LZF{RpQlzsLVmHW@d6q=Z@YNV$iqxctPq2z-NlK*N# zIOzg&%GR*u{#W{FA$y{aNOQl*B2=IW9?G6!(Ri~Ln1^JR(;#AGrd=gMtb|*{g|2BW z*K!{Z`si+Q?<6{*o2=LzJXCn(RHUK1d8pypVp3bY4J2D=*kC__ORCxhb-Fe)W83ND zf0{(JYD4KC1+;UZr&LD!iJZ};A5^9+Meogxj21s+Jp9sPR28W>hBjd;wKV=+B)^_~=Sd#o_$Xj8F+`XANMVn-ioe(2eY9vu}Oi{QeIj`s4 z{ccVi_~W0|%zt+2zbksGbGcfo0!zOCk4hq}CEO5mWs6Ogun7@j$L1#iTFj^_U>wJ5 z=3k;nf&X8uw-jF?CQw?r))ZFt?&fs^7>!8Vwxxx<%+x7!kBG2)KLgj?l|*gg_(SwY z7Fyu;e=ou)@O7w;*>>{-FHi8x(iGW8R3n`+Qm;YFZL zVimob&q%cu{QV8LS#412n#}t;wqeH~`k=vy+<&`7Pu);c7_L*Ks=kbkC-0TVR=@L4 zJv5358daWrUPSu@-}NABu(|8TaFjb5qKrBpX~* zlffm3p}>?zt4EDp^PK$ORJd`3g=&2X4#TWu3V|NA(?6KK)guS*Um>l6ssh)z;;feU z5B;$4PtiwK^l?{KbmILJ_xxY<)7vtu(#8Th(L@y+_Cuzx~+s z5?O1s++k{mwG*{I?qYB=W_WmQ;ScBlKb5`>2HPtgd&8O(&IOnF*i=$O7bfsci!;%& zKubE&9A1R?rIq#L1LxcQ1B<^IT$iQ$vg3W9_|iZad=>T%sf8(GqN-){OZe&agOS3GuWTgB>s;-Cd0sOYljzUiZ&T2R8AyZXIHK zAvM`noITxLT0)Z4-cGCysz|)G8ESQLNVCoVDY){|_AsrU>=t2j_w}o9i$zV>{4})r zmKZqRNEj*|*wcexd!F7h4M+2vn}8N7AKy{&Njqwuo>u0*s;ulmKd})L%<%qPBeYw$ zG`fVZ!mU65yKJxQ>cEp)<5f*QDxUizn-B2u_RQaAP7Qg;DrK%3-L^fH4s^fD#1+T3 z5R(M`?k}7l+Fe6^%3M2=!;i4!(YvGT@V2_*jz-jlG-+n0OT0jw z-1!hv$y5908+XeZHunYJEt0UU9hUC)Lou1vf)Y^VWdem+DKq=mSvBgJI!@H!4;?1I zXg~o{XEYwNtT^$GUHyoGgE^e&)S7b1$@*{=y7zna(NR#+?2TCz*=^QsHpM0Mq8bPsF0rKoNjvy1HR`( z4%wtQc?}#Ak}hGirjS(oQ0|%R_BZU_L$8XB@v~^`+(-BNkI)dF3Xh5q7D5$*tnf27 zR`^NKvb83a9eR#Yw_5CHoPDbTyOV`(zc=8e?FCBBEN?gfNMzz?B=^I3xaD<Wo%>!iMt&i>tEpS2Ltbcd> zFg;a#(jF?{%5=z%=&cUu#o(=70HH6w=(;#BTW#%fE4;QmUfN{{19aULOf;$I;TN5O z#i5wk#o{nQ+uv3aYEQOt!687iDqM)H5z*zn{a`kK>5Is97`W~1y5A>+nrDW39WM9^ zAm*p~Iz<-B)4HA9y8~VX;XY2}2VOJRb7!#6v6Ss*UrM!g`}4E(Lu5JT6f)-O!v(@o z+Rx@@l*C+ykHP@oZuZ|dcYTR24K0k@NO^*iwGE)^H>(>yp~&w9m@iS68l}@kCrv9d zV&0U9O|pzC5)4PFz01HxKJF0&ghwJ89SmBOZj&Pd_j}uhlg?3A!Y(05zRM0Zl(RUy z3Xamyg)4u#-9_9B_v3v5qdvkpK}Tc&4@rCc!OO4ZCeYIC?FwPXc|(-#>OPZ3Zn;a(nH8{FBp1_mmkU!`ztlEX_se9B7I<1RbR{SAO&j z4dn%(#f|zpr@l=+?BPvVia!=`V|_k*vO3s4XfaL|UoNq_S1)H_I4_ED-+tkw%_Mx(W4b~yMSh86V)TO2-8# zYjYjZfVTs_-De5Gn)|@(v)v`DIn-y!ws|uGrgL8l=o+1XwSMDf&kaZ#60qdT_}(p! zB}#VTe)aTR95@y_^|Njrta(d!EP6B5t^L&a(_7%3l%(NSwr%O1kW^YlScUW}2j@#D zJvPr{j~oZ+VE#u>FegQN|m_=~a&ld{9EQ>vYm0;hlTQMg z2Vc%|9DUXhY}naX_UXPgbXPNMkS!UhEEr$FB&^Y z6w&T4w(vH8r9-QFT<*>4bt)Jv=+V(^xTj>(MSP$csrYE&_hhVVcFLTFnQcA?s}HM&6x7kn8#2Hd$v4`0&X-G`c6nWE`#CXy>jA7E7J(P)o`IVJz>ZYVmiu`1HzVx z@jz4O@3)cz_Ue^X<9StC;>6sLc%))f&R4ZAIH+wjEgo=M)~?-H>qYYEUdV+UVj$UlPHK8^Vr?+S zb+(}!`OgL=s^iB!k7)_{H-f9_R?Exd&qy+Ej{^sjisoR-j+EAm6jnMP-1dGwXba^v zZEsO;sTLCc8f+n*=pY_~3rtnr{)pzjS=~k;9Hk0o1jftHo>%pw7YU71K19l}-lXe( zTjx+4Wg8^0FRh$DV=A)FDxm7lJbQKb5h>JDvu>MZ_HHY>GhB7UV8|@9jTC{DGQ>)C z0)Hk1Y~A0c(S$}O*I3F{xZ}%xw?Wqq)Z~tFTwHvHx!jBEsOFP(tYn!f_%l9}tGeyH zhDK2z=74Iv`{^ug8N;B_vk+5@bBLCe2=uu_IHf4{?ajJ8yF>QXZbv}-TI;G#Y&K?Q z@5cJA3}dDgC{3_YA~CK_c27*y1W)~>Fot~J$f62bM|#T|pH%br^nqnfvt*q3r<7Ky zg{97-oEca%aNpRtn1uCRV4T>On=fe$NmDu=pFtoyr{6+g(YKb@SIY902&nbW+Fyoz zi5dbdLhV)Elkyhac8s%RobYI;gmf^NouyyM+`p~!$Zy}MPa`7DIV|33MtdzdF63%g zlt6;K()pKGgb^Mn!B({6LS|CTzMzEVu@Ln0+2hlZWmY9v047tZ*m-;|g^{~StijJRHmCSEx zaz(R?Vj#G6q1yD`yb&wO>-8$$*1D#Xkghc|%z*8Og9JYD7Yo=+VEnSfy50tDhZCds zULFe#N>Yq{GnE2Ea&%nDx4-lEr`|~o{x)I~`!0Q<{5j)e`(({EN8qla*M@NPrYQ%5 zqNvwz?~B$KLbUAfEkwF#Qy`@q1E2e|ArYJMjA3dj@kFnv?zTs>h8j$YO5Mo9MGU+A z>?R@53Yys)@wUp2&xWQGmxLx;!6re7nYKY391E=r2X@f_Mz1!J$0!#m)<9-ZP{Gw= zQy({{N6uuUP?0d5yHsM$U$u`CTC!+#CU<-H4#`OaX)GC+@*#PI&tj)9l27%(4e9T0 zIs>O%874>2Q^urq{cTKf4XgP0B}_!mjs^`>e!1|}WT{YxnwCl*pdYAL4_3&s zZ>tYpI<5KWP+!EXcJyXV{qk1lLOooS3O`^6{fA@PM0fpgl;%CRgv*t}H01HmwNH@{ z#o@HQ%^lRo`O`w2h!5FUjVBoU^p6tr>ko8q=P%Y|rg<#k0}Q35?>wxA%=XE7JUv!= z2@Lje(Z!j~1L7Z@<{B7qZphK%tf;W*2fcJ0A8Lx#DOHBizg3()d|ekuCdoOCm}_~5 zsK>EXm>M+c5So9zD%~x|{Pb|K`Y2@SR&d(9mV)3vceNd_3it3? zxnv)G%lor$yT7$Vry&^Q_3{PGbBTZuJ1Xi6IzXmZtNL^JrV7`X`JK)8=i4}vmv^v> z*vDU$6_Vqb*$s~##(Ly11x1tB_e^l4$GetK33=-3^ZLkrqQ+FSEAPAdFm(fj2I#y5TuL+?X6W2f?AFt1j%t3< zQa91u)AgU!Z~P+guZ8|#gowUWzfGbDKFvRl6p;|~UNYCocmA{U-bLg$vp_)^l%0sNFQHCLr{n5AYSVMF} z&9x_iA)}uRuCvD)DZp5!KR$&8$;S7F-P7yPEp)=G;0Ma!a&%GAtlGJ1%zo3ccm|H? zo@4&zo~e~T_g}oA9dRaNzaVsDunw<&!-(B|v8J=AlIBGkBGs%Lf=kdWyR_;A#Bly& z1cO^Jr(tVGfq#>Tn@$D2Vyv;%uu|jO8J~C&E((W;i0+F@)sT)?zc~ZB4GX;~1nuH` z;s+J@J+_y2y*4C&K%u8GTptE5-7XHcwOSM?}H+_UsX6O6O)?->2E%v&2@47 zDe1YIZ`0y{s*t?kXn_b*${U4Utl}aX2)G$Nbj@zhw`g%w>?DR;{{lrxwVXcE?^goi z5QIJ)jg4kVJN&Q5buKR(VnjCo(7Ktytl6>K|pkAmAV#n z*<}@$`t1U(0c4x2mUq)#L(}ow%jKq6Di_zouDbYFKVMQLSq(7H5&n9`u=QB|uzI=Y zsMvSHePeUqQM`Axu*d@{yZouvIpSeCZ9ezz1# z@nf)bpzvUsd#rvflw^CW7sMEjru-&iSw>-*JN^Mz(&^Kk(8TGBN?eq|r#kBM*?smb zsm{>Q$gj?QJ3TidlnGtyb|*aebK z`^j!Ka(@4cplR=Y9?G z^w(m`SJ^&zPkK9NAcqKW;M=HbzIHk@J-ttryBukr^R8O|im7bQ<}c zvFs7s3ps2d`k~ro!uJ%_Rp|Zb9M~HdzSn~I332B?_)*l2G)W7)77hq3+CT^`$n)MJwtAI@d$J2eHtlr=Y`ZIh;cAm*yxb7>v)eB$2_P zJUjt;-xY1lODF)=Bx3$HYuR$!SxD0&F^IAz#z!5A(0ufKONH}Pq*A`a%nfGN&R}|h z&9_b$F}r3a7%{?)NaWl~u+bvgF6C=c^BlVA@kO5f2r*oHK}uz&O|FdHNGtvL5{=YF zhB>phd>228$mXK`X|<51amR`eVwJmPiG86Jr3AgsDVQsH1~uru@RmhZ>piEhfX zNK&Q_-PAiiy~RoNxf0@cb*!nJ9{O(4KPabZY@*o`!0EZ#{B1Gswn=55K^eqldSTYf z-0CtRqRw3^0>$K|Y^2w1A?+8_ZkjB)w@zjpbi;&FL&F-I*<;;CT1;j76{0r*Y6y)x zt8iJ-1;1eYqs77WB4YMVj33 zA7QiaLWp{htJ5n*C{7n>9E#W&mUjU& zpO!&e-t#}z$R#u)OMS#dxpL$#jNgb@UrJFjF_}n>_${Qgmo(32k5O|SO!xY^juImx z79_9lJN!CTV5C0@cSP@U2XJF()WN$3Vy9@&QrTRiuc4^E;jn4M?zKgQPfaoRSraHu@h?&?c0fn3c`oLo?>yaCo%-THje^(}g&)~!>@LpVVU$WGiGjnF?xi{mdo$e3;Yj|chL&M6cBH{MtXr7Vw839gQ7GZ^5=IHBd9HHE;XZ3T=tXU!F9NaR>?mA9r5p_!1@{bQc z8$!uL(bSVZ*njnII{iIi@<8hE6I8e($E)`67AuH-V=l8*I*H*qCeuWahnbC+9pr?; zF6#H2FV8$be_3FjCd|ZLe9OknzDm&z5VXt!#&R7v(=2BoRisR z9Ow2F`reH8%dvOW5n;u?`RQk{oupa#E#*#II@Xd%N{f!kq)*;~i$btm+{r#@){kVC zm?`q~wiCrxTf|o*G`o_9^^@T(syfGK!^lZ$5e~#*&SbWooBq7gH>_2zM`4yAhm|PhJG}0jr1NaQtZcbidsuVh z=j0ohjJ>7Q@oQdAR1CF{6?QA4P-ACYvGYHgywv2=ElYvipX%@-x=x&zuql9yi59Jn z>s4GvhupXeOvXKDo4p@@TRFnBb@h{8Trk;j=6OC~j*y;w*_VtO$ED(Z^QYRn*=-Cm zVcQ7H=-}e;%=H}0L(Rc0G*+bDn0H3uiKmD-#Y!d@`WfzC+Y^G~D;kJeO_rbbrkcaH zhGS|G!%=m{er2#R6GHF(s*sW{p_GZ%^YE%SzY)>xxhz`zjGrvZ2aL1s9&V-deFA}H zXJL(U9?WUoXg6MeaZ=a2U)BNMola=;qrEb zG-Z&ZLoxMQf1)QzujO@}h8cHKvZr_ppZkh;cPY&Nlg#EJPxUde*4IO$w4U_U3i|*O z9QdmO_lV6GH#6J>Rf8kHlm(ewLW&ZPoM_cH5NvDp{Ks=ilZm5Skf~{p8QF*tMRyqf zw4Q{Rq1osUSXoH_2@{lzTLLTBAB{;)zex!OP8rVUhGG7c=7u(>F>DPh2KOZ<^yZP;s8`l>h4QC_e5%C9r+^Z9mWe&)^X;!eF|D z`rK7)&RPTEJ6wj;5a{JZIhKgaNW!)Gz~N&=9tU!(wARL06M~r(uBDtm6u}-u9=8zi z%6(wrD#l>5qubf5v@B?KSB1fUS?UoLb9w#_>G$~6s+o=^S+Cj^vIIh?ZdSTF@DYjR z8iLi_*+}53>0}Y&gQ9kh%n$b_b#5M$q4K<{u4P_!^tXZ_{O)b`UzXW7xCLB!&%;71 zU@cZ#K6C#)wljD|emWB8&Dz_kD-6#iez;?|}g3?CP;f<9A)>O5` z7Ue^l#1d@Zg*;GT&t2$L04Qoef93ts{>c8WVmnGW@uf^yNvRtvg|Q>giK>%5jn~ng zF+RZ&v4fbyP+I|Mj%wwRY~CVbX>nTVNZs>RP**t(gB$z8Lj7ifNz5vEuss#E6T|?t zUY}5YeKm`Mx)*FUGuKvJEY~W~ubf*k9epkLc*WIiDcAIeRp%?oh@JkgHms9=X(vy< zbmi|Ua5GhfLcd8wW>VlB3H+jPcS^H+Van`IXp6#gXQNWm4dcC&xF^D66P)tLUZQ4xU`ymHxcf)&HoI`mpo1=;$%uWn3xXU_0X?ti}Q6J#d zC}?O^@t5t2RubIuw|_oiuU%dDh8Ftv7}O*?RhW)loEcy?N9R;PR6a3v4$IuBXPk{@ z)M>bS=!`2|i>7{`qcSod_HFuJeq!_neD6FQ&g68cyhV*8v6miRG&3R4DOKSXc|DXa zm1+W}n1WXg*i5s^H;8LXIL}|CKrZ?{BWVw+O0S4^jf9JCl(v{i;`QLFUj5a%6_12_ z>vNSE;=vG6du{j2bIM1zl|dnuwKzA3z~xqX^6l_&N5Y_w-AniIc}+*{D;0;u{9u#e z7I$6HgUhtbq0seB!c5H8<1)MVAY?)Q>pK(;FZ;tZ^So5|MpF(I>j=4rTk%t2<}_G( z%?s8LO*5YeQYrF7R{dO-i^bOJS%mV%bP!ZX<2HQmfyA~YXw_fp(c5sr{f~2Lr;c

&qh!!=pmX*Uy71Qkb076mEuAmz$2~wOMnl)E|4P)yF+p-cLxd zPL~RAZ;AE3xmbKQ>o1`O_!7`%EyGcUHIGW;nm!f0{Jn=djwvigQ&Yv&;tZD_rR{d# zed;-?vy$}Kim5rFAOijz=9*-{`wFY0$ogL0)Y&S|<5Hdq9-cl(bHonc5dyY0_dm8T zWKihLb_&d$H2j@In@R~vF0O8=9mA1~!Z2}it10aDXhZu#*Mc61TyYBZ;*Zywa$Od# z%)DwvCdy8p7wV}ku0>=cT`Z!?f9|G!dfx#{hvt9K%G~vcqP_AZ&8nPq_UUB~KuSzj KwB(cS_x}TOxhUcQ literal 34657 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 PGfPhDGq6I!DCqwI*U=fk diff --git a/screenshots/php-frameworks-bench-includedfiles.png b/screenshots/php-frameworks-bench-includedfiles.png old mode 100644 new mode 100755 index d638b0d340d5509d37085c4c002f023ae4f28af9..0c28ee6aaaa433c97325f14d87f9c0cda5e4ab1b GIT binary patch literal 16493 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 aOq?s=P=l#@WB+m_1&|b#6R8j~@cSQefmH(l literal 34814 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 diff --git a/screenshots/php-frameworks-bench-memory.png b/screenshots/php-frameworks-bench-memory.png old mode 100644 new mode 100755 index 103e68939fb17e5771c0530e2cb410e947cc3a6d..a200cf1a16b996b4a821c2ec50c480b9c7ecd6fc GIT binary patch literal 15377 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 b3%ZNn7u|2wjG)(Ya^Q=oj7XV~uHXLv>)iMi literal 36515 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 A1^@s6 literal 38888 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