diff --git a/README.md b/README.md index 743673f..de64cec 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,9 @@ To run the example install Poetry and then execute: ```bash poetry install && poetry shell uvicorn main:app --reload -``` \ No newline at end of file +``` + +##known issues + +https://lifesaver.codes/answer/warning-unsupported-upgrade-request-2209 + diff --git a/main.py b/main.py index 6e4d273..1fb534c 100644 --- a/main.py +++ b/main.py @@ -3,10 +3,17 @@ from fastapi import FastAPI from fastapi import Request from fastapi import WebSocket + from fastapi.templating import Jinja2Templates +from fastapi.staticfiles import StaticFiles + +import random app = FastAPI() + + +app.mount("/static",StaticFiles(directory='static')) templates = Jinja2Templates(directory="templates") diff --git a/static/js/d3-array.v2.min.js b/static/js/d3-array.v2.min.js new file mode 100644 index 0000000..8487c1f --- /dev/null +++ b/static/js/d3-array.v2.min.js @@ -0,0 +1,2 @@ +// https://d3js.org/d3-array/ v2.12.1 Copyright 2021 Mike Bostock +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{})}(this,(function(t){"use strict";function n(t,n){return tn?1:t>=n?0:NaN}function r(t){let r=t,e=t;function o(t,n,r,o){for(null==r&&(r=0),null==o&&(o=t.length);r>>1;e(t[f],n)<0?r=f+1:o=f}return r}return 1===t.length&&(r=(n,r)=>t(n)-r,e=function(t){return(r,e)=>n(t(r),e)}(t)),{left:o,center:function(t,n,e,f){null==e&&(e=0),null==f&&(f=t.length);const i=o(t,n,e,f-1);return i>e&&r(t[i-1],n)>-r(t[i],n)?i-1:i},right:function(t,n,r,o){for(null==r&&(r=0),null==o&&(o=t.length);r>>1;e(t[f],n)>0?o=f:r=f+1}return r}}}function e(t){return null===t?NaN:+t}const o=r(n),f=o.right,i=o.left,u=r(e).center;function l(t,n){let r=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&++r;else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(o=+o)>=o&&++r}return r}function s(t){return 0|t.length}function c(t){return!(t>0)}function a(t){return"object"!=typeof t||"length"in t?t:Array.from(t)}function h(t,n){let r,e=0,o=0,f=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(r=n-o,o+=r/++e,f+=r*(n-o));else{let i=-1;for(let u of t)null!=(u=n(u,++i,t))&&(u=+u)>=u&&(r=u-o,o+=r/++e,f+=r*(u-o))}if(e>1)return f/(e-1)}function d(t,n){const r=h(t,n);return r?Math.sqrt(r):r}function p(t,n){let r,e;if(void 0===n)for(const n of t)null!=n&&(void 0===r?n>=n&&(r=e=n):(r>n&&(r=n),e=f&&(r=e=f):(r>f&&(r=f),e0){for(f=t[--o];o>0&&(n=f,r=t[--o],f=n+r,e=r-(f-n),!e););o>0&&(e<0&&t[o-1]<0||e>0&&t[o-1]>0)&&(r=2*e,n=f+r,r==n-f&&(f=n))}return f}}class v extends Map{constructor(t,n=b){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),null!=t)for(const[n,r]of t)this.set(n,r)}get(t){return super.get(g(this,t))}has(t){return super.has(g(this,t))}set(t,n){return super.set(M(this,t),n)}delete(t){return super.delete(w(this,t))}}class m extends Set{constructor(t,n=b){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),null!=t)for(const n of t)this.add(n)}has(t){return super.has(g(this,t))}add(t){return super.add(M(this,t))}delete(t){return super.delete(w(this,t))}}function g({_intern:t,_key:n},r){const e=n(r);return t.has(e)?t.get(e):r}function M({_intern:t,_key:n},r){const e=n(r);return t.has(e)?t.get(e):(t.set(e,r),r)}function w({_intern:t,_key:n},r){const e=n(r);return t.has(e)&&(r=t.get(r),t.delete(e)),r}function b(t){return null!==t&&"object"==typeof t?t.valueOf():t}function A(t){return t}function x(t,...n){return k(t,A,A,n)}function S(t,n,...r){return k(t,A,n,r)}function _(t){if(1!==t.length)throw new Error("duplicate key");return t[0]}function k(t,n,r,e){return function t(o,f){if(f>=e.length)return r(o);const i=new v,u=e[f++];let l=-1;for(const t of o){const n=u(t,++l,o),r=i.get(n);r?r.push(t):i.set(n,[t])}for(const[n,r]of i)i.set(n,t(r,f));return n(i)}(t,0)}function T(t,n){return Array.from(n,(n=>t[n]))}function j(t,...r){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");t=Array.from(t);let[e=n]=r;if(1===e.length||r.length>1){const o=Uint32Array.from(t,((t,n)=>n));return r.length>1?(r=r.map((n=>t.map(n))),o.sort(((t,e)=>{for(const o of r){const r=n(o[t],o[e]);if(r)return r}}))):(e=t.map(e),o.sort(((t,r)=>n(e[t],e[r])))),T(t,o)}return t.sort(e)}var E=Array.prototype.slice;function N(t){return function(){return t}}var q=Math.sqrt(50),F=Math.sqrt(10),I=Math.sqrt(2);function O(t,n,r){var e,o,f,i,u=-1;if(r=+r,(t=+t)===(n=+n)&&r>0)return[t];if((e=n0){let r=Math.round(t/i),e=Math.round(n/i);for(r*in&&--e,f=new Array(o=e-r+1);++un&&--e,f=new Array(o=e-r+1);++u=0?(f>=q?10:f>=F?5:f>=I?2:1)*Math.pow(10,o):-Math.pow(10,-o)/(f>=q?10:f>=F?5:f>=I?2:1)}function P(t,n,r){let e;for(;;){const o=L(t,n,r);if(o===e||0===o||!isFinite(o))return[t,n];o>0?(t=Math.floor(t/o)*o,n=Math.ceil(n/o)*o):o<0&&(t=Math.ceil(t*o)/o,n=Math.floor(n*o)/o),e=o}}function z(t){return Math.ceil(Math.log(l(t))/Math.LN2)+1}function C(){var t=A,n=p,r=z;function e(e){Array.isArray(e)||(e=Array.from(e));var o,i,u=e.length,l=new Array(u);for(o=0;o=a)if(t>=a&&n===p){const t=L(c,a,r);isFinite(t)&&(t>0?a=(Math.floor(a/t)+1)*t:t<0&&(a=(Math.ceil(a*-t)+1)/-t))}else h.pop()}for(var d=h.length;h[0]<=c;)h.shift(),--d;for(;h[d-1]>a;)h.pop(),--d;var y,v=new Array(d+1);for(o=0;o<=d;++o)(y=v[o]=[]).x0=o>0?h[o-1]:c,y.x1=o=n)&&(r=n);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(r=o)&&(r=o)}return r}function R(t,n){let r;if(void 0===n)for(const n of t)null!=n&&(r>n||void 0===r&&n>=n)&&(r=n);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(r>o||void 0===r&&o>=o)&&(r=o)}return r}function U(t,r,e=0,o=t.length-1,f=n){for(;o>e;){if(o-e>600){const n=o-e+1,i=r-e+1,u=Math.log(n),l=.5*Math.exp(2*u/3),s=.5*Math.sqrt(u*l*(n-l)/n)*(i-n/2<0?-1:1);U(t,r,Math.max(e,Math.floor(r-i*l/n+s)),Math.min(o,Math.floor(r+(n-i)*l/n+s)),f)}const n=t[r];let i=e,u=o;for(B(t,e,r),f(t[o],n)>0&&B(t,e,o);i0;)--u}0===f(t[e],n)?B(t,e,u):(++u,B(t,u,o)),u<=r&&(e=u+1),r<=u&&(o=u-1)}return t}function B(t,n,r){const e=t[n];t[n]=t[r],t[r]=e}function G(t,n,r){if(e=(t=Float64Array.from(function*(t,n){if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(yield n);else{let r=-1;for(let e of t)null!=(e=n(e,++r,t))&&(e=+e)>=e&&(yield e)}}(t,r))).length){if((n=+n)<=0||e<2)return R(t);if(n>=1)return D(t);var e,o=(e-1)*n,f=Math.floor(o),i=D(U(t,f).subarray(0,f+1));return i+(R(t.subarray(f+1))-i)*(o-f)}}function H(t,n){let r,e=-1,o=-1;if(void 0===n)for(const n of t)++o,null!=n&&(r=n)&&(r=n,e=o);else for(let f of t)null!=(f=n(f,++o,t))&&(r=f)&&(r=f,e=o);return e}function J(t,n){let r,e=-1,o=-1;if(void 0===n)for(const n of t)++o,null!=n&&(r>n||void 0===r&&n>=n)&&(r=n,e=o);else for(let f of t)null!=(f=n(f,++o,t))&&(r>f||void 0===r&&f>=f)&&(r=f,e=o);return e}function K(t,n){return[t,n]}function Q(t,r=n){if(1===r.length)return J(t,r);let e,o=-1,f=-1;for(const n of t)++f,(o<0?0===r(n,n):r(n,e)<0)&&(e=n,o=f);return o}var V=W(Math.random);function W(t){return function(n,r=0,e=n.length){let o=e-(r=+r);for(;o;){const e=t()*o--|0,f=n[o+r];n[o+r]=n[e+r],n[e+r]=f}return n}}function X(t){if(!(o=t.length))return[];for(var n=-1,r=R(t,Y),e=new Array(r);++nt(...n)}(t.pop()),r=(t=t.map(a)).map(s),e=t.length-1,o=new Array(e+1).fill(0),f=[];if(e<0||r.some(c))return f;for(;;){f.push(o.map(((n,r)=>t[r][n])));let i=e;for(;++o[i]===r[i];){if(0===i)return n?f.map(n):f;o[i--]=0}}},t.cumsum=function(t,n){var r=0,e=0;return Float64Array.from(t,void 0===n?t=>r+=+t||0:o=>r+=+n(o,e++,t)||0)},t.descending=function(t,n){return nt?1:n>=t?0:NaN},t.deviation=d,t.difference=function(t,...n){t=new Set(t);for(const r of n)for(const n of r)t.delete(n);return t},t.disjoint=function(t,n){const r=n[Symbol.iterator](),e=new Set;for(const n of t){if(e.has(n))return!1;let t,o;for(;({value:t,done:o}=r.next())&&!o;){if(Object.is(n,t))return!1;e.add(t)}}return!0},t.every=function(t,n){if("function"!=typeof n)throw new TypeError("test is not a function");let r=-1;for(const e of t)if(!n(e,++r,t))return!1;return!0},t.extent=p,t.fcumsum=function(t,n){const r=new y;let e=-1;return Float64Array.from(t,void 0===n?t=>r.add(+t||0):o=>r.add(+n(o,++e,t)||0))},t.filter=function(t,n){if("function"!=typeof n)throw new TypeError("test is not a function");const r=[];let e=-1;for(const o of t)n(o,++e,t)&&r.push(o);return r},t.fsum=function(t,n){const r=new y;if(void 0===n)for(let n of t)(n=+n)&&r.add(n);else{let e=-1;for(let o of t)(o=+n(o,++e,t))&&r.add(o)}return+r},t.greatest=function(t,r=n){let e,o=!1;if(1===r.length){let f;for(const i of t){const t=r(i);(o?n(t,f)>0:0===n(t,t))&&(e=i,f=t,o=!0)}}else for(const n of t)(o?r(n,e)>0:0===r(n,n))&&(e=n,o=!0);return e},t.greatestIndex=function(t,r=n){if(1===r.length)return H(t,r);let e,o=-1,f=-1;for(const n of t)++f,(o<0?0===r(n,n):r(n,e)>0)&&(e=n,o=f);return o},t.group=x,t.groupSort=function(t,r,e){return(1===r.length?j(S(t,r,e),(([t,r],[e,o])=>n(r,o)||n(t,e))):j(x(t,e),(([t,e],[o,f])=>r(e,f)||n(t,o)))).map((([t])=>t))},t.groups=function(t,...n){return k(t,Array.from,A,n)},t.histogram=C,t.index=function(t,...n){return k(t,A,_,n)},t.indexes=function(t,...n){return k(t,Array.from,_,n)},t.intersection=function(t,...n){t=new Set(t),n=n.map(Z);t:for(const r of t)for(const e of n)if(!e.has(r)){t.delete(r);continue t}return t},t.least=function(t,r=n){let e,o=!1;if(1===r.length){let f;for(const i of t){const t=r(i);(o?n(t,f)<0:0===n(t,t))&&(e=i,f=t,o=!0)}}else for(const n of t)(o?r(n,e)<0:0===r(n,n))&&(e=n,o=!0);return e},t.leastIndex=Q,t.map=function(t,n){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");if("function"!=typeof n)throw new TypeError("mapper is not a function");return Array.from(t,((r,e)=>n(r,e,t)))},t.max=D,t.maxIndex=H,t.mean=function(t,n){let r=0,e=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(++r,e+=n);else{let o=-1;for(let f of t)null!=(f=n(f,++o,t))&&(f=+f)>=f&&(++r,e+=f)}if(r)return e/r},t.median=function(t,n){return G(t,.5,n)},t.merge=function(t){return Array.from(function*(t){for(const n of t)yield*n}(t))},t.min=R,t.minIndex=J,t.nice=P,t.pairs=function(t,n=K){const r=[];let e,o=!1;for(const f of t)o&&r.push(n(e,f)),e=f,o=!0;return r},t.permute=T,t.quantile=G,t.quantileSorted=function(t,n,r=e){if(o=t.length){if((n=+n)<=0||o<2)return+r(t[0],0,t);if(n>=1)return+r(t[o-1],o-1,t);var o,f=(o-1)*n,i=Math.floor(f),u=+r(t[i],i,t);return u+(+r(t[i+1],i+1,t)-u)*(f-i)}},t.quickselect=U,t.range=function(t,n,r){t=+t,n=+n,r=(o=arguments.length)<2?(n=t,t=0,1):o<3?1:+r;for(var e=-1,o=0|Math.max(0,Math.ceil((n-t)/r)),f=new Array(o);++e=q?o*=10:f>=F?o*=5:f>=I&&(o*=2),n>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?m(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?m(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=h.exec(t))?new M(e[1],e[2],e[3],1):(e=l.exec(t))?new M(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=u.exec(t))?m(e[1],e[2],e[3],e[4]):(e=c.exec(t))?m(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=g.exec(t))?R(e[1],e[2]/100,e[3]/100,1):(e=f.exec(t))?R(e[1],e[2]/100,e[3]/100,e[4]):d.hasOwnProperty(t)?w(d[t]):"transparent"===t?new M(NaN,NaN,NaN,0):null}function w(t){return new M(t>>16&255,t>>8&255,255&t,1)}function m(t,e,n,i){return i<=0&&(t=e=n=NaN),new M(t,e,n,i)}function N(t){return t instanceof i||(t=y(t)),t?new M((t=t.rgb()).r,t.g,t.b,t.opacity):new M}function k(t,e,n,i){return 1===arguments.length?N(t):new M(t,e,n,null==i?1:i)}function M(t,e,n,i){this.r=+t,this.g=+e,this.b=+n,this.opacity=+i}function v(){return"#"+q(this.r)+q(this.g)+q(this.b)}function x(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function q(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function R(t,e,n,i){return i<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new H(t,e,n,i)}function E(t){if(t instanceof H)return new H(t.h,t.s,t.l,t.opacity);if(t instanceof i||(t=y(t)),!t)return new H;if(t instanceof H)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,a=Math.min(e,n,r),s=Math.max(e,n,r),o=NaN,h=s-a,l=(s+a)/2;return h?(o=e===s?(n-r)/h+6*(n0&&l<1?0:o,new H(o,h,l,t.opacity)}function $(t,e,n,i){return 1===arguments.length?E(t):new H(t,e,n,null==i?1:i)}function H(t,e,n,i){this.h=+t,this.s=+e,this.l=+n,this.opacity=+i}function j(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}e(i,y,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:p,formatHex:p,formatHsl:function(){return E(this).formatHsl()},formatRgb:b,toString:b}),e(M,k,n(i,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new M(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new M(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:v,formatHex:v,formatRgb:x,toString:x})),e(H,$,n(i,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new H(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new H(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,i=n+(n<.5?n:1-n)*e,r=2*n-i;return new M(j(t>=240?t-240:t+120,r,i),j(t,r,i),j(t<120?t+240:t-120,r,i),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var O=Math.PI/180,P=180/Math.PI,I=.96422,S=1,_=.82521,z=4/29,C=6/29,L=3*C*C,A=C*C*C;function B(t){if(t instanceof F)return new F(t.l,t.a,t.b,t.opacity);if(t instanceof V)return W(t);t instanceof M||(t=N(t));var e,n,i=Q(t.r),r=Q(t.g),a=Q(t.b),s=G((.2225045*i+.7168786*r+.0606169*a)/S);return i===r&&r===a?e=n=s:(e=G((.4360747*i+.3850649*r+.1430804*a)/I),n=G((.0139322*i+.0971045*r+.7141733*a)/_)),new F(116*s-16,500*(e-s),200*(s-n),t.opacity)}function D(t,e,n,i){return 1===arguments.length?B(t):new F(t,e,n,null==i?1:i)}function F(t,e,n,i){this.l=+t,this.a=+e,this.b=+n,this.opacity=+i}function G(t){return t>A?Math.pow(t,1/3):t/L+z}function J(t){return t>C?t*t*t:L*(t-z)}function K(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Q(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function T(t){if(t instanceof V)return new V(t.h,t.c,t.l,t.opacity);if(t instanceof F||(t=B(t)),0===t.a&&0===t.b)return new V(NaN,01?r[0]+r.slice(2):r,+t.slice(i+1)]}function i(t){return(t=n(Math.abs(t)))?t[1]:NaN}var r,e=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function o(t){if(!(n=e.exec(t)))throw new Error("invalid format: "+t);var n;return new a({fill:n[1],align:n[2],sign:n[3],symbol:n[4],zero:n[5],width:n[6],comma:n[7],precision:n[8]&&n[8].slice(1),trim:n[9],type:n[10]})}function a(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function s(t,i){var r=n(t,i);if(!r)return t+"";var e=r[0],o=r[1];return o<0?"0."+new Array(-o).join("0")+e:e.length>o+1?e.slice(0,o+1)+"."+e.slice(o+1):e+new Array(o-e.length+2).join("0")}o.prototype=a.prototype,a.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var u={"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return s(100*t,n)},r:s,s:function(t,i){var e=n(t,i);if(!e)return t+"";var o=e[0],a=e[1],s=a-(r=3*Math.max(-8,Math.min(8,Math.floor(a/3))))+1,u=o.length;return s===u?o:s>u?o+new Array(s-u+1).join("0"):s>0?o.slice(0,s)+"."+o.slice(s):"0."+new Array(1-s).join("0")+n(t,Math.max(0,i+s-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}};function c(t){return t}var f,l=Array.prototype.map,h=["y","z","a","f","p","n","ยต","m","","k","M","G","T","P","E","Z","Y"];function d(t){var n,e,a=void 0===t.grouping||void 0===t.thousands?c:(n=l.call(t.grouping,Number),e=t.thousands+"",function(t,i){for(var r=t.length,o=[],a=0,s=n[0],u=0;r>0&&s>0&&(u+s+1>i&&(s=Math.max(1,i-u)),o.push(t.substring(r-=s,r+s)),!((u+=s+1)>i));)s=n[a=(a+1)%n.length];return o.reverse().join(e)}),s=void 0===t.currency?"":t.currency[0]+"",f=void 0===t.currency?"":t.currency[1]+"",d=void 0===t.decimal?".":t.decimal+"",m=void 0===t.numerals?c:function(t){return function(n){return n.replace(/[0-9]/g,(function(n){return t[+n]}))}}(l.call(t.numerals,String)),p=void 0===t.percent?"%":t.percent+"",g=void 0===t.minus?"-":t.minus+"",v=void 0===t.nan?"NaN":t.nan+"";function M(t){var n=(t=o(t)).fill,i=t.align,e=t.sign,c=t.symbol,l=t.zero,M=t.width,y=t.comma,x=t.precision,b=t.trim,w=t.type;"n"===w?(y=!0,w="g"):u[w]||(void 0===x&&(x=12),b=!0,w="g"),(l||"0"===n&&"="===i)&&(l=!0,n="0",i="=");var S="$"===c?s:"#"===c&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",j="$"===c?f:/[%p]/.test(w)?p:"",k=u[w],z=/[defgprs%]/.test(w);function A(t){var o,s,u,c=S,f=j;if("c"===w)f=k(t)+f,t="";else{var p=(t=+t)<0||1/t<0;if(t=isNaN(t)?v:k(Math.abs(t),x),b&&(t=function(t){t:for(var n,i=t.length,r=1,e=-1;r0&&(e=0)}return e>0?t.slice(0,e)+t.slice(n+1):t}(t)),p&&0==+t&&"+"!==e&&(p=!1),c=(p?"("===e?e:g:"-"===e||"("===e?"":e)+c,f=("s"===w?h[8+r/3]:"")+f+(p&&"("===e?")":""),z)for(o=-1,s=t.length;++o(u=t.charCodeAt(o))||u>57){f=(46===u?d+t.slice(o+1):t.slice(o))+f,t=t.slice(0,o);break}}y&&!l&&(t=a(t,1/0));var A=c.length+t.length+f.length,N=A>1)+c+t+f+N.slice(A);break;default:t=N+c+t+f}return m(t)}return x=void 0===x?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x)),A.toString=function(){return t+""},A}return{format:M,formatPrefix:function(t,n){var r=M(((t=o(t)).type="f",t)),e=3*Math.max(-8,Math.min(8,Math.floor(i(n)/3))),a=Math.pow(10,-e),s=h[8+e/3];return function(t){return r(a*t)+s}}}}function m(n){return f=d(n),t.format=f.format,t.formatPrefix=f.formatPrefix,f}m({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"}),t.FormatSpecifier=a,t.formatDefaultLocale=m,t.formatLocale=d,t.formatSpecifier=o,t.precisionFixed=function(t){return Math.max(0,-i(Math.abs(t)))},t.precisionPrefix=function(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(i(n)/3)))-i(Math.abs(t)))},t.precisionRound=function(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,i(n)-i(t))+1},Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/static/js/d3-interpolate.v1.min.js b/static/js/d3-interpolate.v1.min.js new file mode 100644 index 0000000..155c9b7 --- /dev/null +++ b/static/js/d3-interpolate.v1.min.js @@ -0,0 +1,2 @@ +// https://d3js.org/d3-interpolate/ v1.4.0 Copyright 2019 Mike Bostock +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("d3-color")):"function"==typeof define&&define.amd?define(["exports","d3-color"],n):n((t=t||self).d3=t.d3||{},t.d3)}(this,function(t,n){"use strict";function r(t,n,r,e,a){var o=t*t,u=o*t;return((1-3*t+3*o-u)*n+(4-6*o+3*u)*r+(1+3*t+3*o-3*u)*e+u*a)/6}function e(t){var n=t.length-1;return function(e){var a=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),o=t[a],u=t[a+1],i=a>0?t[a-1]:2*o-u,l=a180||r<-180?r-360*Math.round(r/360):r):o(isNaN(t)?n:t)}function l(t){return 1==(t=+t)?c:function(n,r){return r-n?function(t,n,r){return t=Math.pow(t,r),n=Math.pow(n,r)-t,r=1/r,function(e){return Math.pow(t+e*n,r)}}(n,r,t):o(isNaN(n)?r:n)}}function c(t,n){var r=n-t;return r?u(t,r):o(isNaN(t)?n:t)}var f=function t(r){var e=l(r);function a(t,r){var a=e((t=n.rgb(t)).r,(r=n.rgb(r)).r),o=e(t.g,r.g),u=e(t.b,r.b),i=c(t.opacity,r.opacity);return function(n){return t.r=a(n),t.g=o(n),t.b=u(n),t.opacity=i(n),t+""}}return a.gamma=t,a}(1);function s(t){return function(r){var e,a,o=r.length,u=new Array(o),i=new Array(o),l=new Array(o);for(e=0;eo&&(a=n.slice(o,a),i[u]?i[u]+=a:i[++u]=a),(r=r[0])===(e=e[0])?i[u]?i[u]+=e:i[++u]=e:(i[++u]=null,l.push({i:u,x:m(r,e)})),o=x.lastIndex;return o180?n+=360:n-t>180&&(t+=360),o.push({i:r.push(a(r)+"rotate(",null,e)-2,x:m(t,n)})):n&&r.push(a(r)+"rotate("+n+e)}(o.rotate,u.rotate,i,l),function(t,n,r,o){t!==n?o.push({i:r.push(a(r)+"skewX(",null,e)-2,x:m(t,n)}):n&&r.push(a(r)+"skewX("+n+e)}(o.skewX,u.skewX,i,l),function(t,n,r,e,o,u){if(t!==r||n!==e){var i=o.push(a(o)+"scale(",null,",",null,")");u.push({i:i-4,x:m(t,r)},{i:i-2,x:m(n,e)})}else 1===r&&1===e||o.push(a(o)+"scale("+r+","+e+")")}(o.scaleX,o.scaleY,u.scaleX,u.scaleY,i,l),o=u=null,function(t){for(var n,r=-1,e=l.length;++rt&&(r=n,n=t,t=r),f=function(r){return Math.max(n,Math.min(t,r))}),u=e>2?y:d,i=o=null,m}function m(t){return null==t||isNaN(t=+t)?e:(i||(i=u(a.map(n),c,l)))(n(f(t)))}return m.invert=function(e){return f(t((o||(o=u(c,a.map(n),r.interpolateNumber)))(e)))},m.domain=function(n){return arguments.length?(a=Array.from(n,s),p()):a.slice()},m.range=function(n){return arguments.length?(c=Array.from(n),p()):c.slice()},m.rangeRound=function(n){return c=Array.from(n),l=r.interpolateRound,p()},m.clamp=function(n){return arguments.length?(f=!!n||g,p()):f!==g},m.interpolate=function(n){return arguments.length?(l=n,p()):l},m.unknown=function(n){return arguments.length?(e=n,m):e},function(r,e){return n=r,t=e,p()}}function k(){return M()(g,g)}function w(n,r,u,i){var o,a=t.tickStep(n,r,u);switch((i=e.formatSpecifier(null==i?",f":i)).type){case"s":var c=Math.max(Math.abs(n),Math.abs(r));return null!=i.precision||isNaN(o=e.precisionPrefix(a,c))||(i.precision=o),e.formatPrefix(i,c);case"":case"e":case"g":case"p":case"r":null!=i.precision||isNaN(o=e.precisionRound(a,Math.max(Math.abs(n),Math.abs(r))))||(i.precision=o-("e"===i.type));break;case"f":case"%":null!=i.precision||isNaN(o=e.precisionFixed(a))||(i.precision=o-2*("%"===i.type))}return e.format(i)}function N(n){var r=n.domain;return n.ticks=function(n){var e=r();return t.ticks(e[0],e[e.length-1],null==n?10:n)},n.tickFormat=function(n,t){var e=r();return w(e[0],e[e.length-1],null==n?10:n,t)},n.nice=function(e){null==e&&(e=10);var u,i,o=r(),a=0,c=o.length-1,l=o[a],f=o[c],p=10;for(f0;){if((i=t.tickIncrement(l,f,e))===u)return o[a]=l,o[c]=f,r(o);if(i>0)l=Math.floor(l/i)*i,f=Math.ceil(f/i)*i;else{if(!(i<0))break;l=Math.ceil(l*i)/i,f=Math.floor(f*i)/i}u=i}return n},n}function b(n,t){var r,e=0,u=(n=n.slice()).length-1,i=n[e],o=n[u];return o0){for(;h<=g;++h)for(p=1,f=u(h);pl)break;d.push(s)}}else for(;h<=g;++h)for(p=a-1,f=u(h);p>=1;--p)if(!((s=f*p)l)break;d.push(s)}2*d.length0?i[t-1]:e[0],t=i?[a[i-1],u]:[a[t-1],a[t]]},l.unknown=function(n){return arguments.length?(r=n,l):l},l.thresholds=function(){return a.slice()},l.copy=function(){return n().domain([e,u]).range(c).unknown(r)},o.apply(N(l),arguments)},n.scaleRadial=function n(){var t,r=k(),e=[0,1],u=!1;function i(n){var e=j(r(n));return isNaN(e)?t:u?Math.round(e):e}return i.invert=function(n){return r.invert(Y(n))},i.domain=function(n){return arguments.length?(r.domain(n),i):r.domain()},i.range=function(n){return arguments.length?(r.range((e=Array.from(n,s)).map(Y)),i):e.slice()},i.rangeRound=function(n){return i.range(n).round(!0)},i.round=function(n){return arguments.length?(u=!!n,i):u},i.clamp=function(n){return arguments.length?(r.clamp(n),i):r.clamp()},i.unknown=function(n){return arguments.length?(t=n,i):t},i.copy=function(){return n(r.domain(),e).round(u).clamp(r.clamp()).unknown(t)},o.apply(i,arguments),N(i)},n.scaleSequential=function n(){var t=N(W()(g));return t.copy=function(){return _(t,n())},a.apply(t,arguments)},n.scaleSequentialLog=function n(){var t=R(W()).domain([1,10]);return t.copy=function(){return _(t,n()).base(t.base())},a.apply(t,arguments)},n.scaleSequentialPow=z,n.scaleSequentialQuantile=function n(){var r=[],e=g;function u(n){if(null!=n&&!isNaN(n=+n))return e((t.bisect(r,n,1)-1)/(r.length-1))}return u.domain=function(n){if(!arguments.length)return r.slice();r=[];for(let t of n)null==t||isNaN(t=+t)||r.push(t);return r.sort(t.ascending),u},u.interpolator=function(n){return arguments.length?(e=n,u):e},u.range=function(){return r.map(((n,t)=>e(t/(r.length-1))))},u.quantiles=function(n){return Array.from({length:n+1},((e,u)=>t.quantile(r,u/n)))},u.copy=function(){return n(e).domain(r)},a.apply(u,arguments)},n.scaleSequentialSqrt=function(){return z.apply(null,arguments).exponent(.5)},n.scaleSequentialSymlog=function n(){var t=F(W());return t.copy=function(){return _(t,n()).constant(t.constant())},a.apply(t,arguments)},n.scaleSqrt=function(){return U.apply(null,arguments).exponent(.5)},n.scaleSymlog=function n(){var t=F(M());return t.copy=function(){return v(t,n()).constant(t.constant())},o.apply(t,arguments)},n.scaleThreshold=function n(){var r,e=[.5],u=[0,1],i=1;function a(n){return null!=n&&n<=n?u[t.bisect(e,n,0,i)]:r}return a.domain=function(n){return arguments.length?(e=Array.from(n),i=Math.min(e.length,u.length-1),a):e.slice()},a.range=function(n){return arguments.length?(u=Array.from(n),i=Math.min(e.length,u.length-1),a):u.slice()},a.invertExtent=function(n){var t=u.indexOf(n);return[e[t-1],e[t]]},a.unknown=function(n){return arguments.length?(r=n,a):r},a.copy=function(){return n().domain(e).range(u).unknown(r)},o.apply(a,arguments)},n.scaleTime=function(){return o.apply(H(u.timeTicks,u.timeTickInterval,u.timeYear,u.timeMonth,u.timeWeek,u.timeDay,u.timeHour,u.timeMinute,u.timeSecond,i.timeFormat).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)},n.scaleUtc=function(){return o.apply(H(u.utcTicks,u.utcTickInterval,u.utcYear,u.utcMonth,u.utcWeek,u.utcDay,u.utcHour,u.utcMinute,u.utcSecond,i.utcFormat).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)},n.tickFormat=w,Object.defineProperty(n,"__esModule",{value:!0})})); diff --git a/static/js/d3-selection.v1.min.js b/static/js/d3-selection.v1.min.js new file mode 100644 index 0000000..00d02ab --- /dev/null +++ b/static/js/d3-selection.v1.min.js @@ -0,0 +1,2 @@ +// https://d3js.org/d3-selection/ v1.4.2 Copyright 2020 Mike Bostock +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t=t||self).d3=t.d3||{})}(this,function(t){"use strict";var n="http://www.w3.org/1999/xhtml",e={svg:"http://www.w3.org/2000/svg",xhtml:n,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function r(t){var n=t+="",r=n.indexOf(":");return r>=0&&"xmlns"!==(n=t.slice(0,r))&&(t=t.slice(r+1)),e.hasOwnProperty(n)?{space:e[n],local:t}:t}function i(t){var e=r(t);return(e.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===n&&e.documentElement.namespaceURI===n?e.createElement(t):e.createElementNS(r,t)}})(e)}function o(){}function u(t){return null==t?o:function(){return this.querySelector(t)}}function c(){return[]}function s(t){return null==t?c:function(){return this.querySelectorAll(t)}}function a(t){return function(){return this.matches(t)}}function l(t){return new Array(t.length)}function f(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}f.prototype={constructor:f,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,n){return this._parent.insertBefore(t,n)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var h="$";function p(t,n,e,r,i,o){for(var u,c=0,s=n.length,a=o.length;cn?1:t>=n?0:NaN}function d(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function y(t,n){return t.style.getPropertyValue(n)||d(t).getComputedStyle(t,null).getPropertyValue(n)}function m(t){return t.trim().split(/^|\s+/)}function g(t){return t.classList||new w(t)}function w(t){this._node=t,this._names=m(t.getAttribute("class")||"")}function A(t,n){for(var e=g(t),r=-1,i=n.length;++r=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var B={};(t.event=null,"undefined"!=typeof document)&&("onmouseenter"in document.documentElement||(B={mouseenter:"mouseover",mouseleave:"mouseout"}));function q(t,n,e){return t=D(t,n,e),function(n){var e=n.relatedTarget;e&&(e===this||8&e.compareDocumentPosition(this))||t.call(this,n)}}function D(n,e,r){return function(i){var o=t.event;t.event=i;try{n.call(this,this.__data__,e,r)}finally{t.event=o}}}function M(t){return function(){var n=this.__on;if(n){for(var e,r=0,i=-1,o=n.length;r=S&&(S=x+1);!(A=g[S])&&++S=0;)(r=i[o])&&(u&&4^r.compareDocumentPosition(u)&&u.parentNode.insertBefore(r,u),u=r);return this},sort:function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=v);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o1?this.each((null==n?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof n?function(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}:function(t,n,e){return function(){this.style.setProperty(t,n,e)}})(t,n,null==e?"":e)):y(this.node(),t)},property:function(t,n){return arguments.length>1?this.each((null==n?function(t){return function(){delete this[t]}}:"function"==typeof n?function(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}:function(t,n){return function(){this[t]=n}})(t,n)):this.node()[t]},classed:function(t,n){var e=m(t+"");if(arguments.length<2){for(var r=g(this.node()),i=-1,o=e.length;++i=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}(t+""),u=o.length;if(!(arguments.length<2)){for(c=n?O:M,null==e&&(e=!1),r=0;r=12)]},q:function(e){return 1+~~(e.getMonth()/3)},Q:Ue,s:xe,S:X,u:N,U:B,V:_,w:$,W:z,x:null,X:null,y:E,Y:k,Z:ee,"%":Ce},We={a:function(e){return s[e.getUTCDay()]},A:function(e){return l[e.getUTCDay()]},b:function(e){return G[e.getUTCMonth()]},B:function(e){return g[e.getUTCMonth()]},c:null,d:te,e:te,f:ce,g:ve,G:Me,H:ne,I:re,j:ue,L:ie,m:oe,M:ae,p:function(e){return f[+(e.getUTCHours()>=12)]},q:function(e){return 1+~~(e.getUTCMonth()/3)},Q:Ue,s:xe,S:fe,u:le,U:se,V:ye,w:de,W:he,x:null,X:null,y:me,Y:Te,Z:De,"%":Ce},Ve={a:function(e,t,n){var r=Ye.exec(t.slice(n));return r?(e.w=Fe[r[0].toLowerCase()],n+r[0].length):-1},A:function(e,t,n){var r=pe.exec(t.slice(n));return r?(e.w=Se[r[0].toLowerCase()],n+r[0].length):-1},b:function(e,t,n){var r=Ae.exec(t.slice(n));return r?(e.m=Ze[r[0].toLowerCase()],n+r[0].length):-1},B:function(e,t,n){var r=Le.exec(t.slice(n));return r?(e.m=He[r[0].toLowerCase()],n+r[0].length):-1},c:function(e,t,n){return qe(e,i,t,n)},d:p,e:p,f:A,g:C,G:D,H:Y,I:Y,j:S,L:H,m:w,M:F,p:function(e,t,n){var r=ge.exec(t.slice(n));return r?(e.p=we[r[0].toLowerCase()],n+r[0].length):-1},q:x,Q:b,s:W,S:L,u:m,U:v,V:T,w:h,W:M,x:function(e,t,n){return qe(e,c,t,n)},X:function(e,t,n){return qe(e,a,t,n)},y:C,Y:D,Z:U,"%":Z};function je(e,t){return function(n){var r,u,i,c=[],a=-1,f=0,l=e.length;for(n instanceof Date||(n=new Date(+n));++a53)return null;"w"in f||(f.w=1),"Z"in f?(a=(o=r(u(f.y,0,1))).getUTCDay(),o=a>4||0===a?t.utcMonday.ceil(o):t.utcMonday(o),o=t.utcDay.offset(o,7*(f.V-1)),f.y=o.getUTCFullYear(),f.m=o.getUTCMonth(),f.d=o.getUTCDate()+(f.w+6)%7):(a=(o=n(u(f.y,0,1))).getDay(),o=a>4||0===a?t.timeMonday.ceil(o):t.timeMonday(o),o=t.timeDay.offset(o,7*(f.V-1)),f.y=o.getFullYear(),f.m=o.getMonth(),f.d=o.getDate()+(f.w+6)%7)}else("W"in f||"U"in f)&&("w"in f||(f.w="u"in f?f.u%7:"W"in f?1:0),a="Z"in f?r(u(f.y,0,1)).getUTCDay():n(u(f.y,0,1)).getDay(),f.m=0,f.d="W"in f?(f.w+6)%7+7*f.W-(a+5)%7:f.w+7*f.U-(a+6)%7);return"Z"in f?(f.H+=f.Z/100|0,f.M+=f.Z%100,r(f)):n(f)}}function qe(e,t,n,r){for(var u,i,c=0,a=t.length,f=n.length;c=f)return-1;if(37===(u=t.charCodeAt(c++))){if(u=t.charAt(c++),!(i=Ve[u in o?t.charAt(c++):u])||(r=i(e,n,r))<0)return-1}else if(u!=n.charCodeAt(r++))return-1}return r}return be.x=je(c,be),be.X=je(a,be),be.c=je(i,be),We.x=je(c,We),We.X=je(a,We),We.c=je(i,We),{format:function(e){var t=je(e+="",be);return t.toString=function(){return e},t},parse:function(e){var t=Pe(e+="",!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=je(e+="",We);return t.toString=function(){return e},t},utcParse:function(e){var t=Pe(e+="",!0);return t.toString=function(){return e},t}}}var c,o={"-":"",_:" ",0:"0"},a=/^\s*\d+/,f=/^%/,l=/[\\^$*+?|[\]().{}]/g;function s(e,t,n){var r=e<0?"-":"",u=(r?-e:e)+"",i=u.length;return r+(i68?1900:2e3),n+r[0].length):-1}function U(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function x(e,t,n){var r=a.exec(t.slice(n,n+1));return r?(e.q=3*r[0]-3,n+r[0].length):-1}function w(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function p(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function S(e,t,n){var r=a.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function Y(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function F(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function L(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function H(e,t,n){var r=a.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function A(e,t,n){var r=a.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Z(e,t,n){var r=f.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function b(e,t,n){var r=a.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function W(e,t,n){var r=a.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function V(e,t){return s(e.getDate(),t,2)}function j(e,t){return s(e.getHours(),t,2)}function P(e,t){return s(e.getHours()%12||12,t,2)}function q(e,n){return s(1+t.timeDay.count(t.timeYear(e),e),n,3)}function I(e,t){return s(e.getMilliseconds(),t,3)}function J(e,t){return I(e,t)+"000"}function O(e,t){return s(e.getMonth()+1,t,2)}function Q(e,t){return s(e.getMinutes(),t,2)}function X(e,t){return s(e.getSeconds(),t,2)}function N(e){var t=e.getDay();return 0===t?7:t}function B(e,n){return s(t.timeSunday.count(t.timeYear(e)-1,e),n,2)}function G(e){var n=e.getDay();return n>=4||0===n?t.timeThursday(e):t.timeThursday.ceil(e)}function _(e,n){return e=G(e),s(t.timeThursday.count(t.timeYear(e),e)+(4===t.timeYear(e).getDay()),n,2)}function $(e){return e.getDay()}function z(e,n){return s(t.timeMonday.count(t.timeYear(e)-1,e),n,2)}function E(e,t){return s(e.getFullYear()%100,t,2)}function R(e,t){return s((e=G(e)).getFullYear()%100,t,2)}function k(e,t){return s(e.getFullYear()%1e4,t,4)}function K(e,n){var r=e.getDay();return s((e=r>=4||0===r?t.timeThursday(e):t.timeThursday.ceil(e)).getFullYear()%1e4,n,4)}function ee(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+s(t/60|0,"0",2)+s(t%60,"0",2)}function te(e,t){return s(e.getUTCDate(),t,2)}function ne(e,t){return s(e.getUTCHours(),t,2)}function re(e,t){return s(e.getUTCHours()%12||12,t,2)}function ue(e,n){return s(1+t.utcDay.count(t.utcYear(e),e),n,3)}function ie(e,t){return s(e.getUTCMilliseconds(),t,3)}function ce(e,t){return ie(e,t)+"000"}function oe(e,t){return s(e.getUTCMonth()+1,t,2)}function ae(e,t){return s(e.getUTCMinutes(),t,2)}function fe(e,t){return s(e.getUTCSeconds(),t,2)}function le(e){var t=e.getUTCDay();return 0===t?7:t}function se(e,n){return s(t.utcSunday.count(t.utcYear(e)-1,e),n,2)}function ge(e){var n=e.getUTCDay();return n>=4||0===n?t.utcThursday(e):t.utcThursday.ceil(e)}function ye(e,n){return e=ge(e),s(t.utcThursday.count(t.utcYear(e),e)+(4===t.utcYear(e).getUTCDay()),n,2)}function de(e){return e.getUTCDay()}function he(e,n){return s(t.utcMonday.count(t.utcYear(e)-1,e),n,2)}function me(e,t){return s(e.getUTCFullYear()%100,t,2)}function ve(e,t){return s((e=ge(e)).getUTCFullYear()%100,t,2)}function Te(e,t){return s(e.getUTCFullYear()%1e4,t,4)}function Me(e,n){var r=e.getUTCDay();return s((e=r>=4||0===r?t.utcThursday(e):t.utcThursday.ceil(e)).getUTCFullYear()%1e4,n,4)}function De(){return"+0000"}function Ce(){return"%"}function Ue(e){return+e}function xe(e){return Math.floor(+e/1e3)}function we(t){return c=i(t),e.timeFormat=c.format,e.timeParse=c.parse,e.utcFormat=c.utcFormat,e.utcParse=c.utcParse,c}we({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var pe=Date.prototype.toISOString?function(e){return e.toISOString()}:e.utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");var Se=+new Date("2000-01-01T00:00:00.000Z")?function(e){var t=new Date(e);return isNaN(t)?null:t}:e.utcParse("%Y-%m-%dT%H:%M:%S.%LZ");e.isoFormat=pe,e.isoParse=Se,e.timeFormatDefaultLocale=we,e.timeFormatLocale=i,Object.defineProperty(e,"__esModule",{value:!0})}); diff --git a/static/js/d3-time.v1.min.js b/static/js/d3-time.v1.min.js new file mode 100644 index 0000000..77a48d5 --- /dev/null +++ b/static/js/d3-time.v1.min.js @@ -0,0 +1,2 @@ +// https://d3js.org/d3-time/ v1.1.0 Copyright 2019 Mike Bostock +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).d3=e.d3||{})}(this,function(e){"use strict";var t=new Date,n=new Date;function u(e,r,i,o){function a(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return a.floor=function(t){return e(t=new Date(+t)),t},a.ceil=function(t){return e(t=new Date(t-1)),r(t,1),e(t),t},a.round=function(e){var t=a(e),n=a.ceil(e);return e-t0))return o;do{o.push(i=new Date(+t)),r(t,u),e(t)}while(i=n)for(;e(n),!t(n);)n.setTime(n-1)},function(e,n){if(e>=e)if(n<0)for(;++n<=0;)for(;r(e,-1),!t(e););else for(;--n>=0;)for(;r(e,1),!t(e););})},i&&(a.count=function(u,r){return t.setTime(+u),n.setTime(+r),e(t),e(n),Math.floor(i(t,n))},a.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?a.filter(o?function(t){return o(t)%e==0}:function(t){return a.count(0,t)%e==0}):a:null}),a}var r=u(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});r.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?u(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):r:null};var i=r.range,o=6e4,a=6048e5,s=u(function(e){e.setTime(e-e.getMilliseconds())},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),c=s.range,f=u(function(e){e.setTime(e-e.getMilliseconds()-1e3*e.getSeconds())},function(e,t){e.setTime(+e+t*o)},function(e,t){return(t-e)/o},function(e){return e.getMinutes()}),l=f.range,g=u(function(e){e.setTime(e-e.getMilliseconds()-1e3*e.getSeconds()-e.getMinutes()*o)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()}),T=g.range,d=u(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*o)/864e5},function(e){return e.getDate()-1}),m=d.range;function M(e){return u(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*o)/a})}var y=M(0),C=M(1),U=M(2),h=M(3),D=M(4),F=M(5),Y=M(6),H=y.range,S=C.range,v=U.range,w=h.range,p=D.range,W=F.range,O=Y.range,k=u(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()}),z=k.range,x=u(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()});x.every=function(e){return isFinite(e=Math.floor(e))&&e>0?u(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var b=x.range,j=u(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*o)},function(e,t){return(t-e)/o},function(e){return e.getUTCMinutes()}),_=j.range,I=u(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()}),P=I.range,q=u(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1}),A=q.range;function B(e){return u(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/a})}var E=B(0),G=B(1),J=B(2),K=B(3),L=B(4),N=B(5),Q=B(6),R=E.range,V=G.range,X=J.range,Z=K.range,$=L.range,ee=N.range,te=Q.range,ne=u(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()}),ue=ne.range,re=u(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()});re.every=function(e){return isFinite(e=Math.floor(e))&&e>0?u(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var ie=re.range;e.timeDay=d,e.timeDays=m,e.timeFriday=F,e.timeFridays=W,e.timeHour=g,e.timeHours=T,e.timeInterval=u,e.timeMillisecond=r,e.timeMilliseconds=i,e.timeMinute=f,e.timeMinutes=l,e.timeMonday=C,e.timeMondays=S,e.timeMonth=k,e.timeMonths=z,e.timeSaturday=Y,e.timeSaturdays=O,e.timeSecond=s,e.timeSeconds=c,e.timeSunday=y,e.timeSundays=H,e.timeThursday=D,e.timeThursdays=p,e.timeTuesday=U,e.timeTuesdays=v,e.timeWednesday=h,e.timeWednesdays=w,e.timeWeek=y,e.timeWeeks=H,e.timeYear=x,e.timeYears=b,e.utcDay=q,e.utcDays=A,e.utcFriday=N,e.utcFridays=ee,e.utcHour=I,e.utcHours=P,e.utcMillisecond=r,e.utcMilliseconds=i,e.utcMinute=j,e.utcMinutes=_,e.utcMonday=G,e.utcMondays=V,e.utcMonth=ne,e.utcMonths=ue,e.utcSaturday=Q,e.utcSaturdays=te,e.utcSecond=s,e.utcSeconds=c,e.utcSunday=E,e.utcSundays=R,e.utcThursday=L,e.utcThursdays=$,e.utcTuesday=J,e.utcTuesdays=X,e.utcWednesday=K,e.utcWednesdays=Z,e.utcWeek=E,e.utcWeeks=R,e.utcYear=re,e.utcYears=ie,Object.defineProperty(e,"__esModule",{value:!0})}); diff --git a/static/js/timechart.min.js b/static/js/timechart.min.js new file mode 100644 index 0000000..4c6a2c0 --- /dev/null +++ b/static/js/timechart.min.js @@ -0,0 +1,2 @@ +var TimeChart=function(t,e,i,n){"use strict";function s(e){const i=t.rgb(e);return[i.r/255,i.g/255,i.b/255,i.opacity]}class o{constructor(t,e,i){this.options=e;const n=document.createElement("canvas"),o=n.style;o.position="absolute",o.width=o.height="100%",o.left=o.right=o.top=o.bottom="0",t.shadowRoot.appendChild(n),this.gl=function(t,e){if(!e){const e=t.getContext("webgl2");if(e)return e}const i=t.getContext("webgl");if(i)return i;throw new Error("Unable to initialize WebGL. Your browser or machine may not support it.")}(n,e.forceWebGL1);const a=s(e.backgroundColor);this.gl.clearColor(...a),this.canvas=n,i.updated.on((()=>{this.clear(),this.syncViewport()})),i.resized.on(((t,e)=>this.onResize(t,e))),i.disposing.on((()=>{t.shadowRoot.removeChild(n),n.width=0,n.height=0;const e=this.gl.getExtension("WEBGL_lose_context");e&&e.loseContext()}))}syncViewport(){const t=this.options,e=t.pixelRatio;this.gl.viewport(t.renderPaddingLeft*e,t.renderPaddingBottom*e,this.canvas.width-(t.renderPaddingLeft+t.renderPaddingRight)*e,this.canvas.height-(t.renderPaddingTop+t.renderPaddingBottom)*e)}onResize(t,e){const i=this.canvas,n=this.options.pixelRatio;i.width=t*n,i.height=e*n,this.syncViewport()}clear(){const t=this.gl;t.clear(t.COLOR_BUFFER_BIT)}}class a{constructor(t,e,i){this.node=document.createElement("div"),this.node.style.position="absolute",this.node.style.left=`${i.paddingLeft}px`,this.node.style.right=`${i.paddingRight}px`,this.node.style.top=`${i.paddingTop}px`,this.node.style.bottom=`${i.paddingBottom}px`,t.shadowRoot.appendChild(this.node),e.disposing.on((()=>{t.shadowRoot.removeChild(this.node)}))}}function r(t,e,i,n,s){if(e>=i)return e;if(n<=s(t[e]))return e;if(n>s(t[i-1]))return i;for(i-=1;e+1{const i=t.canvas.getBoundingClientRect();this.lastPointerPos={x:e.clientX-i.left,y:e.clientY-i.top},this.adjustPoints()})),n.node.addEventListener("mouseleave",(t=>{this.lastPointerPos=null,this.adjustPoints()})),e.updated.on((()=>this.adjustPoints()))}adjustPoints(){if(null===this.lastPointerPos)this.dataPoints.clear();else{const t=this.model.xScale.invert(this.lastPointerPos.x);for(const e of this.options.series){if(0==e.data.length||!e.visible){this.dataPoints.delete(e);continue}const i=r(e.data,0,e.data.length,t,(t=>t.x)),n=[];i>0&&n.push(e.data[i-1]),iMath.abs(e.x-t);n.sort(((t,e)=>s(t)-s(e)));const o=this.model.pxPoint(n[0]),a=this.canvas.canvas.clientWidth,h=this.canvas.canvas.clientHeight;o.x<=a&&o.x>=0&&o.y<=h&&o.y>=0?this.dataPoints.set(e,n[0]):this.dataPoints.delete(e)}}this.updated.dispatch()}}function l(t,e,i){let n=-1/0,s=1/0;for(let o=e;on&&(n=e),et.data.length>0));if(0===t.length)return;const e=this.options;{const i=Math.max(...t.map((t=>t.data[t.data.length-1].x))),n=Math.min(...t.map((t=>t.data[0].x)));if(this.xRange={max:i,min:n},this.options.realTime||"auto"===e.xRange)if(this.options.realTime){const t=this.xScale.domain(),e=t[1]-t[0];this.xScale.domain([i-e,i])}else this.xScale.domain([n,i]);else e.xRange&&this.xScale.domain([e.xRange.min,e.xRange.max])}{const i=t.flatMap((t=>[l(t.data,0,t.data.pushed_front),l(t.data,t.data.length-t.data.pushed_back,t.data.length)]));this.yRange&&i.push(this.yRange),this.yRange=function(...t){return{min:Math.min(...t.map((t=>t.min))),max:Math.max(...t.map((t=>t.max)))}}(...i),"auto"===e.yRange?this.yScale.domain([this.yRange.min,this.yRange.max]).nice():e.yRange&&this.yScale.domain([e.yRange.min,e.yRange.max])}}requestRedraw(){this.redrawRequested||(this.redrawRequested=!0,requestAnimationFrame((t=>{this.redrawRequested=!1,this.disposed||this.update()})))}pxPoint(t){return{x:this.xScale(t.x),y:this.yScale(t.y)}}}class p{constructor(t,e){this.svgNode=document.createElementNS("http://www.w3.org/2000/svg","svg");const i=this.svgNode.style;i.position="absolute",i.width=i.height="100%",i.left=i.right=i.top=i.bottom="0",t.shadowRoot.appendChild(this.svgNode),e.disposing.on((()=>{t.shadowRoot.removeChild(this.svgNode)}))}}class u extends Array{constructor(){super(...arguments),this.pushed_back=0,this.pushed_front=0,this.poped_back=0,this.poped_front=0,this.pushed_back=this.length}_synced(){this.pushed_back=this.poped_back=this.pushed_front=this.poped_front=0}static _from_array(t){if(t instanceof u)return t;const e=Object.setPrototypeOf(t,u.prototype);return e.poped_back=e.pushed_front=e.poped_front=0,e.pushed_back=e.length,e}push(...t){return this.pushed_back+=t.length,super.push(...t)}pop(){const t=this.length,e=super.pop();return void 0===e||(this.pushed_back>0?this.pushed_back--:t-this.pushed_front>0?this.poped_back++:this.pushed_front--),e}unshift(...t){return this.pushed_front+=t.length,super.unshift(...t)}shift(){const t=this.length,e=super.shift();return void 0===e||(this.pushed_front>0?this.pushed_front--:t-this.pushed_back>0?this.poped_front++:this.pushed_back--),e}updateDelete(t,e,i){if(0===e)return;const n=t=>(i-=t,0===(e-=t));if(tthis.pushed_front&&t=i-this.pushed_back))throw new RangeError("DataPoints cannot be inserted in the middle of the range that is already synced to GPU");this.pushed_back+=e}}splice(t,e,...i){t===-1/0?t=0:t<0&&(t=Math.max(this.length+t,0)),e=void 0===e?this.length-t:Math.min(Math.max(e,0),this.length-t),this.updateDelete(t,e,this.length),this.updateInsert(t,i.length,this.length-e);const n=this.length-e+i.length,s=super.splice(t,e,...i);if(this.length!==n)throw new Error(`BUG! length after splice not expected. ${this.length} vs ${n}`);return s}}const m={pixelRatio:window.devicePixelRatio,lineWidth:1,backgroundColor:t.rgb(0,0,0,0),paddingTop:10,paddingRight:10,paddingLeft:45,paddingBottom:20,renderPaddingTop:0,renderPaddingRight:0,renderPaddingLeft:0,renderPaddingBottom:0,xRange:"auto",yRange:"auto",realTime:!1,baseTime:0,xScaleType:e.scaleTime,debugWebGL:!1,forceWebGL1:!1,legend:!0,tooltip:!1,tooltipXLabel:"X"},g={name:"",color:null,visible:!0};function f(t){return t.data=t.data?u._from_array(t.data):new u,Object.setPrototypeOf(t,g),t}class v{constructor(t,e){var i,n;this.el=t,this.disposed=!1;const s=function(t,e){const i={series:[],color:getComputedStyle(t).getPropertyValue("color")},n=Object.assign({},i,e);return n.series=n.series.map((t=>f(t))),Object.setPrototypeOf(n,m),n}(t,e);this.model=new c(s);const r=null!==(i=t.shadowRoot)&&void 0!==i?i:t.attachShadow({mode:"open"}),h=document.createElement("style");h.innerText="\n:host {\n contain: size layout paint style;\n position: relative;\n}",r.appendChild(h),this.canvasLayer=new o(t,s,this.model),this.svgLayer=new p(t,this.model),this.contentBoxDetector=new a(t,this.model,s),this.nearestPoint=new d(this.canvasLayer,this.model,s,this.contentBoxDetector),this._options=s,this.plugins=Object.fromEntries(Object.entries(null!==(n=null==e?void 0:e.plugins)&&void 0!==n?n:{}).map((([t,e])=>[t,e.apply(this)]))),this.onResize();const l=()=>this.onResize();window.addEventListener("resize",l),this.model.disposing.on((()=>{window.removeEventListener("resize",l),r.removeChild(h)}))}get options(){return this._options}onResize(){this.model.resize(this.el.clientWidth,this.el.clientHeight)}update(){if(this.disposed)throw new Error("Cannot update after dispose.");for(let t=0;tvoid 0!==t.op))}function w(t){const e=t.domain(),i=t.range();return(e[1]-e[0])/(i[1]-i[0])}function b(t,e){const i=e[1]-e[0],n=t.scale.domain();if((n[1]-n[0])*i<=0)return!1;const s=Math.min(t.maxDomainExtent,t.maxDomain-t.minDomain,Math.max(t.minDomainExtent,i)),o=(s-i)/2;e[0]-=o,e[1]+=o;const a=Math.min(Math.max(t.minDomain-e[0],0),t.maxDomain-e[1]);e[0]+=a,e[1]+=a;const r=1e-6*s;return t.scale.domain(e),!!function(...t){return[...t[0]].map(((e,i)=>t.map((t=>t[i]))))}(e,n).some((([t,e])=>Math.abs(t-e)>r))}function E(t,e,i){return t>i?i:tthis.onMouseDown(t))),t.addEventListener("pointerup",(t=>this.onMouseUp(t))),t.addEventListener("pointermove",(t=>this.onMouseMove(t)))}point(t){const e=this.el.getBoundingClientRect();return{[x.X]:t.clientX-e.left,[x.Y]:t.clientY-e.top}}onMouseMove(t){if(null===this.previousPoint)return;const e=this.point(t);let i=!1;for(const{dir:t,op:n}of y(this.options)){const s=e[t]-this.previousPoint[t],o=w(n.scale),a=n.scale.domain();b(n,a.map((t=>t-o*s)))&&(i=!0)}this.previousPoint=e,i&&this.scaleUpdated.dispatch()}onMouseDown(t){"mouse"===t.pointerType&&(this.el.setPointerCapture(t.pointerId),this.previousPoint=this.point(t),this.el.style.cursor="grabbing")}onMouseUp(t){null!==this.previousPoint&&(this.previousPoint=null,this.el.releasePointerCapture(t.pointerId),this.el.style.cursor="")}}class S{constructor(t,e){this.el=t,this.options=e,this.scaleUpdated=new h,this.majorDirection=x.UNKNOWN,this.previousPoints=new Map,this.enabled={[x.X]:!1,[x.Y]:!1},t.addEventListener("touchstart",(t=>this.onTouchStart(t)),{passive:!0}),t.addEventListener("touchend",(t=>this.onTouchEnd(t)),{passive:!0}),t.addEventListener("touchcancel",(t=>this.onTouchEnd(t)),{passive:!0}),t.addEventListener("touchmove",(t=>this.onTouchMove(t)),{passive:!0}),this.update()}update(){this.syncEnabled(),this.syncTouchAction()}syncEnabled(){for(const{dir:t,op:e}of y(this.options))if(e){const i=e.scale.domain().sort();this.enabled[t]=e.minDomain=2){const t=e.scale.domain(),n=t[1]-t[0];if(function(t){const e=t.reduce(((t,e)=>t+e))/t.length;return t.map((t=>(t-e)**2)).reduce(((t,e)=>t+e))/t.length}(i.map((t=>t.domain)))>1e-4*n*n)return function(t){let e=0,i=0,n=0,s=0;const o=t.length;for(const o of t)e+=o.x,i+=o.y,n+=o.x*o.y,s+=o.x*o.x;const a=o*s-e*e,r=0===a?0:(o*n-e*i)/a;return{k:r,b:(i-r*e)/o}}(i.map((t=>({x:t.current,y:t.domain}))))}const n=w(e.scale),s=i.map((t=>t.domain-n*t.current)).reduce(((t,e)=>t+e))/i.length;return{k:n,b:s}}touchPoints(t){const e=this.el.getBoundingClientRect(),i=new Map([...t].map((t=>[t.identifier,{[x.X]:t.clientX-e.left,[x.Y]:t.clientY-e.top}])));let n=!1;for(const{dir:t,op:e}of y(this.options)){const s=e.scale,o=[...i.entries()].map((([e,i])=>({current:i[t],previousPoint:this.previousPoints.get(e)}))).filter((t=>void 0!==t.previousPoint)).map((({current:e,previousPoint:i})=>({current:e,domain:s.invert(i[t])})));if(0===o.length)continue;const{k:a,b:r}=this.calcKB(t,e,o);b(e,s.range().map((t=>r+a*t)))&&(n=!0)}return this.previousPoints=i,n&&this.scaleUpdated.dispatch(),n}dirOptions(t){return{[x.X]:this.options.x,[x.Y]:this.options.y}[t]}onTouchStart(t){if(this.majorDirection===x.UNKNOWN&&t.touches.length>=2){const e=[...t.touches];function i(t){const e=t.reduce(((t,e)=>t+e))/t.length;return t.map((t=>(t-e)**2)).reduce(((t,e)=>t+e))}const n=i(e.map((t=>t.clientX))),s=i(e.map((t=>t.clientY)));this.majorDirection=n>s?x.X:x.Y,void 0===this.dirOptions(this.majorDirection)&&(this.majorDirection=x.UNKNOWN)}this.touchPoints(t.touches)}onTouchEnd(t){t.touches.length<2&&(this.majorDirection=x.UNKNOWN),this.touchPoints(t.touches)}onTouchMove(t){this.touchPoints(t.touches)}}class R{constructor(t,e){this.el=t,this.options=e,this.scaleUpdated=new h,t.addEventListener("wheel",(t=>this.onWheel(t)))}onWheel(t){t.preventDefault();let e=t.deltaX,i=t.deltaY;switch(t.deltaMode){case 1:e*=30,i*=30;break;case 2:e*=400,i*=400}const n={[x.X]:{translate:0,zoom:0},[x.Y]:{translate:0,zoom:0}};t.ctrlKey?t.altKey?(n[x.X].zoom=e,n[x.Y].zoom=i):n[x.X].zoom=e+i:t.altKey?(n[x.X].translate=e,n[x.Y].translate=i):n[x.X].translate=e+i;const s=this.el.getBoundingClientRect(),o={[x.X]:t.clientX-s.left,[x.Y]:t.clientY-s.top};let a=!1;for(const{dir:e,op:i}of y(this.options)){const s=i.scale.domain(),r=w(i.scale),h=n[e],d=i.scale.invert(o[e]);h.translate*=r,h.zoom*=.002,t.shiftKey&&(h.translate*=5,h.zoom*=5);const l=.4*(s[1]-s[0]);h.translate=E(h.translate,-l,l);const c=.5;h.zoom=E(h.zoom,-c,c);b(i,s.map((t=>t+h.translate+(t-d)*h.zoom)))&&(a=!0)}a&&this.scaleUpdated.dispatch()}}const _={minDomain:-1/0,maxDomain:1/0,minDomainExtent:0,maxDomainExtent:1/0};function C(t,e){e||(e={});const i=e=>{e&&!t.isPrototypeOf(e)&&Object.setPrototypeOf(e,t)};return i(e.x),i(e.y),e}class L{constructor(t,e){this.scaleUpdated=new h,e=null!=e?e:{},this.options=C(_,e),this.touch=new S(t,this.options),this.mouse=new P(t,this.options),this.wheel=new R(t,this.options);const i=()=>this.scaleUpdated.dispatch();this.touch.scaleUpdated.on(i),this.mouse.scaleUpdated.on(i),this.wheel.scaleUpdated.on(i)}onScaleUpdated(t){this.scaleUpdated.on(t)}update(){this.touch.update()}}class M{constructor(t,e){this.options=e,this.registerZoom(t)}applyAutoRange(t,e){if(!t)return;if(!t.autoRange)return delete t.minDomain,void delete t.maxDomain;let[i,n]=t.scale.domain();e&&(i=Math.min(i,e.min),n=Math.max(n,e.max)),t.minDomain=i,t.maxDomain=n}registerZoom(t){const e=new L(t.contentBoxDetector.node,{x:this.options.x&&Object.assign(Object.create(this.options.x),{scale:t.model.xScale}),y:this.options.y&&Object.assign(Object.create(this.options.y),{scale:t.model.yScale})}),i=e.options;t.model.updated.on((()=>{this.applyAutoRange(i.x,t.model.xRange),this.applyAutoRange(i.y,t.model.yRange),e.update()})),e.onScaleUpdated((()=>{t.options.xRange=null,t.options.yRange=null,t.options.realTime=!1,t.update()}))}}const T=Object.assign(Object.create(_),{autoRange:!0});class A{constructor(t){this.options=C(T,t)}apply(t){return new M(t,this.options)}}const k={apply(t){const e=function(t,e){const i=document.createElementNS("http://www.w3.org/2000/svg","svg");return i.classList.add("content-box"),i.x.baseVal.value=e.paddingLeft,i.y.baseVal.value=e.paddingRight,t.resized.on(((t,n)=>{i.width.baseVal.value=t-e.paddingRight-e.paddingLeft,i.height.baseVal.value=n-e.paddingTop-e.paddingBottom})),i}(t.model,t.options),i=e.createSVGTransform();i.setTranslate(0,0);const n=document.createElementNS("http://www.w3.org/2000/svg","style");n.textContent="\n.timechart-crosshair {\n stroke: currentColor;\n stroke-width: 1;\n stroke-dasharray: 2 1;\n visibility: hidden;\n}";const s=document.createElementNS("http://www.w3.org/2000/svg","line");s.transform.baseVal.initialize(i),s.x2.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE,100);const o=document.createElementNS("http://www.w3.org/2000/svg","line");o.transform.baseVal.initialize(i),o.y2.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE,100);const a=document.createElementNS("http://www.w3.org/2000/svg","g");a.classList.add("timechart-crosshair");for(const t of[n,s,o])a.appendChild(t);const r=t.contentBoxDetector;r.node.addEventListener("mousemove",(t=>{const i=e.getBoundingClientRect();s.transform.baseVal.getItem(0).setTranslate(0,t.clientY-i.y),o.transform.baseVal.getItem(0).setTranslate(t.clientX-i.x,0)})),r.node.addEventListener("mouseenter",(t=>a.style.visibility="visible")),r.node.addEventListener("mouseleave",(t=>a.style.visibility="hidden")),e.appendChild(a),t.svgLayer.svgNode.appendChild(e)}},N={apply(t){const e=n.select(t.svgLayer.svgNode),s=e.append("g"),o=e.append("g"),a=i.axisBottom(t.model.xScale),r=i.axisLeft(t.model.yScale);function h(){const e=t.model.xScale,i=t.options.xScaleType().domain(e.domain().map((e=>e+t.options.baseTime))).range(e.range());a.scale(i),s.call(a),r.scale(t.model.yScale),o.call(r)}t.model.updated.on(h),t.model.resized.on(((e,i)=>{const n=t.options;s.attr("transform",`translate(0, ${i-n.paddingBottom})`),o.attr("transform",`translate(${n.paddingLeft}, 0)`),h()}))}};class B{constructor(t,e,i){this.el=t,this.model=e,this.options=i,this.items=new Map,this.legend=document.createElement("chart-legend");const n=this.legend.style;n.position="absolute",n.right=`${i.paddingRight}px`,n.top=`${i.paddingTop}px`;const s=this.legend.attachShadow({mode:"open"}),o=document.createElement("style");o.textContent="\n:host {\n background: var(--background-overlay, white);\n border: 1px solid hsl(0, 0%, 80%);\n border-radius: 3px;\n padding: 5px 10px;\n}\n.item {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n user-select: none;\n}\n.item:not(.visible) {\n color: gray;\n text-decoration: line-through;\n}\n.item .example {\n width: 50px;\n margin-right: 10px;\n max-height: 1em;\n}",s.appendChild(o),this.itemContainer=s,this.update();const a=t.shadowRoot;a.appendChild(this.legend),e.updated.on((()=>this.update())),e.disposing.on((()=>{a.removeChild(this.legend)}))}update(){var t,e;if(this.legend.style.display=this.options.legend?"":"none",this.options.legend)for(const i of this.options.series){if(!this.items.has(i)){const t=document.createElement("div");t.className="item";const e=document.createElement("div");e.className="example",t.appendChild(e);const n=document.createElement("label");n.textContent=i.name,t.appendChild(n),this.itemContainer.appendChild(t),t.addEventListener("click",(t=>{i.visible=!i.visible,this.model.update()})),this.items.set(i,{item:t,example:e})}const n=this.items.get(i);n.item.classList.toggle("visible",i.visible),n.example.style.height=`${null!==(t=i.lineWidth)&&void 0!==t?t:this.options.lineWidth}px`,n.example.style.backgroundColor=(null!==(e=i.color)&&void 0!==e?e:this.options.color).toString()}}}const D={apply:t=>new B(t.el,t.model,t.options)};var O="undefined"!=typeof Float32Array?Float32Array:Array;function V(){var t=new O(2);return O!=Float32Array&&(t[0]=0,t[1]=0),t}Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)}),V();function U(t,e,i,n){var s;const o=W(t.createShader(e));if(t.shaderSource(o,i),t.compileShader(o),n){if(!t.getShaderParameter(o,t.COMPILE_STATUS)){const e=null!==(s=t.getShaderInfoLog(o))&&void 0!==s?s:"Unknown Error.";throw t.deleteShader(o),new Error(e)}}return o}function W(t){if(!t)throw new Error("value must not be falsy");return t}class j extends class{constructor(t,e,i,n){this.gl=t,this.debug=n;const s=W(t.createProgram());t.attachShader(s,W(U(t,t.VERTEX_SHADER,e,n))),t.attachShader(s,W(U(t,t.FRAGMENT_SHADER,i,n))),this.program=s}link(){var t;const e=this.gl,i=this.program;if(e.linkProgram(i),this.debug){if(!e.getProgramParameter(i,e.LINK_STATUS)){const n=null!==(t=e.getProgramInfoLog(i))&&void 0!==t?t:"Unknown Error.";throw e.deleteProgram(i),new Error(n)}}}use(){this.gl.useProgram(this.program)}}{constructor(t,e){super(t,function(t){const e="\nuniform vec2 uModelScale;\nuniform vec2 uModelTranslation;\nuniform vec2 uProjectionScale;\nuniform float uLineWidth;\n\nvoid main() {\n vec2 cssPose = uModelScale * aDataPoint + uModelTranslation;\n vec2 dir = uModelScale * aDir;\n dir = normalize(dir);\n vec2 pos2d = uProjectionScale * (cssPose + vec2(-dir.y, dir.x) * uLineWidth);\n gl_Position = vec4(pos2d, 0, 1);\n}";return t instanceof WebGLRenderingContext?`\nattribute vec2 aDataPoint;\nattribute vec2 aDir;\n${e}`:`#version 300 es\nlayout (location = 0) in vec2 aDataPoint;\nlayout (location = 1) in vec2 aDir;\n${e}`}(t),function(t){return t instanceof WebGLRenderingContext?"\nprecision lowp float;\nuniform vec4 uColor;\nvoid main() {\n gl_FragColor = uColor;\n}":"#version 300 es\nprecision lowp float;\nuniform vec4 uColor;\nout vec4 outColor;\nvoid main() {\n outColor = uColor;\n}"}(t),e),t instanceof WebGLRenderingContext&&(t.bindAttribLocation(this.program,0,"aDataPoint"),t.bindAttribLocation(this.program,1,"aDir")),this.link();const i=e=>W(t.getUniformLocation(this.program,e));this.locations={uModelScale:i("uModelScale"),uModelTranslation:i("uModelTranslation"),uProjectionScale:i("uProjectionScale"),uLineWidth:i("uLineWidth"),uColor:i("uColor")}}}const z=4*Float32Array.BYTES_PER_ELEMENT,F=131072,Y=524290;class G{constructor(t){this.gl=t,this.vao=W(t.createVertexArray()),this.bind()}bind(){this.gl.bindVertexArray(this.vao)}clear(){this.gl.deleteVertexArray(this.vao)}}class I{constructor(t){this.vaoExt=t,this.vao=W(t.createVertexArrayOES()),this.bind()}bind(){this.vaoExt.bindVertexArrayOES(this.vao)}clear(){this.vaoExt.deleteVertexArrayOES(this.vao)}}class X{constructor(t){this.bindFunc=t}bind(){this.bindFunc()}clear(){}}class ${constructor(t,e){this.gl=t,this.dataPoints=e,this.validStart=0,this.validEnd=0,this.dataBuffer=W(t.createBuffer());const i=()=>{t.bindBuffer(t.ARRAY_BUFFER,this.dataBuffer),t.enableVertexAttribArray(0),t.vertexAttribPointer(0,2,t.FLOAT,!1,z,0),t.enableVertexAttribArray(1),t.vertexAttribPointer(1,2,t.FLOAT,!1,z,2*Float32Array.BYTES_PER_ELEMENT)};if(t instanceof WebGLRenderingContext){const e=t.getExtension("OES_vertex_array_object");this.vao=e?new I(e):new X(i)}else this.vao=new G(t);i(),t.bufferData(t.ARRAY_BUFFER,2097160*Float32Array.BYTES_PER_ELEMENT,t.DYNAMIC_DRAW)}clear(){this.validStart=this.validEnd=0}delete(){this.clear(),this.gl.deleteBuffer(this.dataBuffer),this.vao.clear()}popBack(t){const e=Math.floor(this.validEnd/4)-t;return this.validEnd=Math.max(4*e,this.validStart),Math.floor(this.validStart/4)-e}popFront(t){const e=Math.floor(this.validStart/4)+t;return this.validStart=Math.min(4*e,this.validEnd),e-Math.floor(this.validEnd/4)}syncPoints(t,e,i){const n=this.dataPoints,s=i-e,o=new Float32Array(4*s);let a=0;const r=V(),h=V(),d=V(),l=V();function c(t,e){var i,n,s;r[0]=t.x,r[1]=t.y,h[0]=e.x,h[1]=e.y,n=r,s=h,(i=d)[0]=n[0]-s[0],i[1]=n[1]-s[1],function(t,e){var i=e[0],n=e[1],s=i*i+n*n;s>0&&(s=1/Math.sqrt(s)),t[0]=e[0]*s,t[1]=e[1]*s}(d,d),function(t,e){t[0]=-e[0],t[1]=-e[1]}(l,d)}function p(t){o[a]=t[0],o[a+1]=t[1],a+=2}const u=Math.floor(s/4);let m=n[t-1];for(let e=0;e{t=this.newArray(),this.vertexArrays.unshift(t)};if(0===this.vertexArrays.length){if(e<2)return;i(),e--}for(t=this.vertexArrays[0];e=t.pushFront(e),!(e<=0);)i()}pushBack(){let t,e=this.series.data.pushed_back;if(0===e)return;const i=()=>{t=this.newArray(),this.vertexArrays.push(t)};if(0===this.vertexArrays.length){if(e<2)return;i(),e--}for(t=this.vertexArrays[this.vertexArrays.length-1];e=t.pushBack(e),!(e<=0);)i()}syncBuffer(){this.popFront(),this.popBack(),this.pushFront(),this.pushBack()}draw(t){const e=this.series.data;if(0===this.vertexArrays.length||e[0].x>t.max||e[e.length-1].xt.x,s=r(e,1,e.length,t.min,n)+i,o=r(e,s,e.length-1,t.max,n)+1+i,a=Math.floor(s/F),h=Math.ceil(o/F);for(let t=a;tthis.drawFrame())),t.resized.on(((t,e)=>this.onResize(t,e)))}syncBuffer(){for(const t of this.options.series){let e=this.arrays.get(t);e||(e=new K(this.gl,t),this.arrays.set(t,e)),e.syncBuffer()}}syncViewport(){this.renderWidth=this.width-this.options.renderPaddingLeft-this.options.renderPaddingRight,this.renderHeight=this.height-this.options.renderPaddingTop-this.options.renderPaddingBottom;const t=(e=this.renderWidth,i=this.renderHeight,(n=new O(2))[0]=e,n[1]=i,n);var e,i,n;!function(t,e,i){t[0]=e[0]/i[0],t[1]=e[1]/i[1]}(t,[2,2],t),this.gl.uniform2fv(this.program.locations.uProjectionScale,t)}onResize(t,e){this.height=e,this.width=t}drawFrame(){var t,e;this.syncBuffer(),this.syncDomain();const i=this.gl;for(const[n,o]of this.arrays){if(!n.visible)continue;const a=s(null!==(t=n.color)&&void 0!==t?t:this.options.color);i.uniform4fv(this.program.locations.uColor,a);const r=null!==(e=n.lineWidth)&&void 0!==e?e:this.options.lineWidth;i.uniform1f(this.program.locations.uLineWidth,r/2);const h={min:this.model.xScale.invert(this.options.renderPaddingLeft-r/2),max:this.model.xScale.invert(this.width-this.options.renderPaddingRight+r/2)};o.draw(h)}if(this.options.debugWebGL){const t=i.getError();if(t!=i.NO_ERROR)throw new Error(`WebGL error ${t}`)}}ySvgToView(t){return-t+this.renderHeight/2+this.options.renderPaddingTop}xSvgToView(t){return t-this.renderWidth/2-this.options.renderPaddingLeft}syncDomain(){this.syncViewport();const t=this.model,e=this.gl,i=[this.xSvgToView(t.xScale(0)),this.ySvgToView(t.yScale(0))],n=[this.xSvgToView(t.xScale(1)),this.ySvgToView(t.yScale(1))],s=[n[0]-i[0],n[1]-i[1]];e.uniform2fv(this.program.locations.uModelScale,s),e.uniform2fv(this.program.locations.uModelTranslation,i)}}const H={apply:t=>new q(t.model,t.canvasLayer.gl,t.options)};class Z{constructor(t,e,i,n){this.svg=t,this.options=e,this.model=i,this.pModel=n,this.intersectPoints=new Map;t.svgNode.createSVGTransform().setTranslate(0,0);const s=document.createElementNS("http://www.w3.org/2000/svg","style");s.textContent="\n.timechart-crosshair-intersect {\n fill: var(--background-overlay, white);\n visibility: hidden;\n}\n.timechart-crosshair-intersect circle {\n r: 3px;\n}";const o=document.createElementNS("http://www.w3.org/2000/svg","g");o.classList.add("timechart-crosshair-intersect"),o.appendChild(s),this.container=o,this.adjustIntersectPoints(),t.svgNode.appendChild(o),n.updated.on((()=>this.adjustIntersectPoints()))}adjustIntersectPoints(){var t,e;const i=this.svg.svgNode.createSVGTransform();i.setTranslate(0,0);for(const n of this.options.series){if(!this.intersectPoints.has(n)){const s=document.createElementNS("http://www.w3.org/2000/svg","circle");s.style.stroke=(null!==(t=n.color)&&void 0!==t?t:this.options.color).toString(),s.style.strokeWidth=`${null!==(e=n.lineWidth)&&void 0!==e?e:this.options.lineWidth}px`,s.transform.baseVal.initialize(i),this.container.appendChild(s),this.intersectPoints.set(n,s)}const s=this.intersectPoints.get(n),o=this.pModel.dataPoints.get(n);if(o){s.style.visibility="visible";const t=this.model.pxPoint(o);s.transform.baseVal.getItem(0).setTranslate(t.x,t.y)}else s.style.visibility="hidden"}}}const J={apply:t=>new Z(t.svgLayer,t.options,t.model,t.nearestPoint)};class Q{constructor(t,e,i,n){this.el=t,this.model=e,this.options=i,this.nearestPoint=n,this.items=new Map;this.tooltip=document.createElement("chart-tooltip");const s=this.tooltip.style;s.position="absolute",s.visibility="hidden";const o=this.tooltip.attachShadow({mode:"open"}),a=document.createElement("style");a.textContent="\n:host {\n background: var(--background-overlay, white);\n border: 1px solid hsl(0, 0%, 80%);\n border-radius: 3px;\n padding: 2px 2px;\n}\n.item {\n user-select: none;\n}\ntd {\n padding: 0px 5px;\n}\n.name {\n margin-right: 10px;\n max-width: 100px;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n.example {\n width: 6px;\n height: 6px;\n}\n.value {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n min-width: 100px;\n max-width: 100px;\n text-align: right;\n}\n.x-not-aligned .value {\n opacity: 0.4;\n}\n",o.appendChild(a);const r=document.createElement("table");this.xItem=this.createItemElements(this.options.tooltipXLabel),r.appendChild(this.xItem.item),o.appendChild(r),this.itemContainer=r,this.update(),t.shadowRoot.appendChild(this.tooltip),e.updated.on((()=>this.update())),e.disposing.on((()=>{t.shadowRoot.removeChild(this.tooltip)})),n.updated.on((()=>{if(!i.tooltip||0==n.dataPoints.size)return void(s.visibility="hidden");s.visibility="visible";const t=n.lastPointerPos,o=this.tooltip.getBoundingClientRect();let a=t.x-o.width-12,r=t.y-o.height-12;a<0&&(a=t.x+12),r<0&&(r=t.y+12),s.left=a+"px",s.top=r+"px";let h=Number.POSITIVE_INFINITY,d=null;for(const[i,s]of n.dataPoints){const i=e.pxPoint(s),n=i.x-t.x,o=i.y-t.y,a=Math.sqrt(n*n+o*o);anew Q(t.el,t.model,t.options,t.nearestPoint)};class et extends v{constructor(t,e){super(t,function(t){var e;const i=null!=t?t:{plugins:void 0,zoom:void 0};return Object.assign(Object.assign({},t),{plugins:Object.assign(Object.assign({},null!==(e=i.plugins)&&void 0!==e?e:{}),{lineChart:H,d3Axis:N,crosshair:k,nearestPoint:J,legend:D,zoom:new A(i.zoom),tooltip:tt})})}(e)),this.el=t}get options(){return this._options}}return et.core=v,et.plugins={lineChart:H,d3Axis:N,crosshair:k,nearestPoint:J,legend:D,TimeChartZoomPlugin:A,tooltip:tt},et}(d3,d3,d3,d3); +//# sourceMappingURL=timechart.min.js.map diff --git a/static/js/timechart.min.js.map b/static/js/timechart.min.js.map new file mode 100644 index 0000000..4774560 --- /dev/null +++ b/static/js/timechart.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"timechart.min.js","sources":["../../src/options.ts","../../src/core/canvasLayer.ts","../../src/core/contentBoxDetector.ts","../../src/utils.ts","../../src/core/nearestPoint.ts","../../src/core/renderModel.ts","../../src/core/svgLayer.ts","../../src/core/dataPointsBuffer.ts","../../src/core/index.ts","../../src/chartZoom/options.ts","../../src/chartZoom/utils.ts","../../src/chartZoom/mouse.ts","../../src/chartZoom/touch.ts","../../src/chartZoom/wheel.ts","../../src/chartZoom/index.ts","../../src/plugins/chartZoom.ts","../../src/plugins/crosshair.ts","../../src/plugins/d3Axis.ts","../../src/plugins/legend.ts","../node_modules/gl-matrix/esm/common.js","../node_modules/gl-matrix/esm/vec2.js","../../src/plugins/webGLUtils.ts","../../src/plugins/lineChart.ts","../../src/plugins/nearestPoint.ts","../../src/plugins/tooltip.ts","../../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\n * 2 Dimensional Vector\n * @module vec2\n */\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(2);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {ReadonlyVec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\n\nexport function fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the source vector\n * @returns {vec2} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\n\nexport function set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\n * Math.ceil the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to ceil\n * @returns {vec2} out\n */\n\nexport function ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\n * Math.floor the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to floor\n * @returns {vec2} out\n */\n\nexport function floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec2} out\n */\n\nexport function max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\n * Math.round the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to round\n * @returns {vec2} out\n */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\n\nexport function scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\n * Calculates the length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\n * Calculates the squared length of a vec2\n *\n * @param {ReadonlyVec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to negate\n * @returns {vec2} out\n */\n\nexport function negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to invert\n * @returns {vec2} out\n */\n\nexport function inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a vector to normalize\n * @returns {vec2} out\n */\n\nexport function normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the first operand\n * @param {ReadonlyVec2} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec2} out\n */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec2} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat2d} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat3} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {ReadonlyVec2} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec2} out\n */\n\nexport function transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\n * Rotate a 2D vector\n * @param {vec2} out The receiving vec2\n * @param {ReadonlyVec2} a The vec2 point to rotate\n * @param {ReadonlyVec2} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec2} out\n */\n\nexport function rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\n * Get the angle between two 2D vectors\n * @param {ReadonlyVec2} a The first operand\n * @param {ReadonlyVec2} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec2 to zero\n *\n * @param {vec2} out the receiving vector\n * @returns {vec2} out\n */\n\nexport function zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec2} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"vec2(\" + a[0] + \", \" + a[1] + \")\";\n}\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec2} a The first vector.\n * @param {ReadonlyVec2} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\n * Alias for {@link vec2.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();",null,null,null,null,null],"names":["resolveColorRGBA","color","rgbColor","rgb","r","g","b","opacity","CanvasLayer","constructor","el","options","model","this","canvas","document","createElement","style","position","width","height","left","right","top","bottom","shadowRoot","appendChild","gl","forceWebGL1","ctx","getContext","Error","bgColor","backgroundColor","clearColor","updated","on","clear","syncViewport","resized","w","h","onResize","disposing","removeChild","lossContext","getExtension","loseContext","o","pixelRatio","viewport","renderPaddingLeft","renderPaddingBottom","renderPaddingRight","renderPaddingTop","scale","COLOR_BUFFER_BIT","ContentBoxDetector","node","paddingLeft","paddingRight","paddingTop","paddingBottom","domainSearch","data","start","end","value","key","minDomain","maxDomain","ratio","expectedIndex","Math","ceil","EventDispatcher","callback","callbacks","push","dispatch","args","cb","NearestPointModel","detector","Map","addEventListener","ev","rect","getBoundingClientRect","lastPointerPos","x","clientX","y","clientY","adjustPoints","dataPoints","domain","xScale","invert","s","series","length","visible","delete","pos","d","near","sortKey","a","abs","sort","pxPoint","clientWidth","clientHeight","set","calcMinMaxY","arr","max","Infinity","min","i","v","RenderModel","scaleLinear","xRange","yRange","yScale","resize","op","range","requestRedraw","dispose","disposed","update","updateModel","_synced","filter","map","realTime","currentDomain","minMaxY","flatMap","pushed_front","pushed_back","items","unionMinMax","nice","redrawRequested","requestAnimationFrame","time","dataPoint","SVGLayer","svgNode","createElementNS","DataPointsBuffer","Array","super","arguments","poped_back","poped_front","static","Object","setPrototypeOf","prototype","pop","len","undefined","unshift","shift","updateDelete","deleteCount","c","RangeError","updateInsert","insertCount","splice","expectedLen","defaultOptions","window","devicePixelRatio","lineWidth","baseTime","xScaleType","scaleTime","debugWebGL","legend","tooltip","tooltipXLabel","defaultSeriesOptions","name","completeSeriesOptions","_from_array","TimeChart","coreOptions","dynamicDefaults","getComputedStyle","getPropertyValue","assign","completeOptions","attachShadow","mode","innerText","canvasLayer","svgLayer","contentBoxDetector","nearestPoint","_options","plugins","fromEntries","entries","p","apply","resizeHandler","removeEventListener","isPrototypeOf","DIRECTION","dirOptions","dir","X","Y","scaleK","applyNewDomain","inExtent","previousDomain","extent","maxDomainExtent","minDomainExtent","deltaE","deltaO","eps","rows","_","row","zip","some","pd","clamp","ChartZoomMouse","userSelect","onMouseDown","onMouseUp","onMouseMove","point","boundingRect","event","previousPoint","changed","offset","k","scaleUpdated","pointerType","setPointerCapture","pointerId","cursor","releasePointerCapture","ChartZoomTouch","UNKNOWN","e","onTouchStart","passive","onTouchEnd","onTouchMove","syncEnabled","syncTouchAction","enabled","actions","touchAction","join","calcKB","majorDirection","mean","reduce","variance","sumX","sumY","sumXY","sumXX","det","linearRegression","t","current","touchPoints","touches","boundingBox","ts","identifier","temp","id","previousPoints","get","vari","varX","varY","ChartZoomWheel","onWheel","preventDefault","deltaX","deltaY","deltaMode","transform","translate","zoom","ctrlKey","altKey","origin","trans","transOrigin","shiftKey","translateCap","zoomCap","defaultAxisOptions","resolveOptions","defaults","resolveAxis","ao","ChartZoom","touch","mouse","wheel","onScaleUpdated","TimeChartZoom","chart","registerZoom","applyAutoRange","dataRange","autoRange","z","create","TimeChartZoomPlugin","crosshair","contentBox","contentSvg","classList","add","baseVal","makeContentBox","initTrans","createSVGTransform","setTranslate","textContent","hLine","initialize","x2","newValueSpecifiedUnits","SVGLength","SVG_LENGTHTYPE_PERCENTAGE","vLine","y2","contentRect","getItem","visibility","d3Axis","d3Svg","select","xg","append","yg","xAxis","axisBottom","yAxis","axisLeft","xs","xts","call","attr","Legend","ls","legendRoot","itemContainer","display","has","item","className","example","toggle","toString","ARRAY_TYPE","Float32Array","out","glMatrix.ARRAY_TYPE","hypot","sqrt","createShader","type","source","debug","shader","throwIfFalsy","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","message","getShaderInfoLog","deleteShader","LineChartWebGLProgram","vertexSource","fragmentSource","program","createProgram","attachShader","VERTEX_SHADER","FRAGMENT_SHADER","link","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","deleteProgram","use","useProgram","body","WebGLRenderingContext","vsSource","fsSource","bindAttribLocation","getLoc","getUniformLocation","locations","uModelScale","uModelTranslation","uProjectionScale","uLineWidth","uColor","BYTES_PER_POINT","BYTES_PER_ELEMENT","BUFFER_DATA_POINT_CAPACITY","BUFFER_POINT_CAPACITY","WebGL2VAO","vao","createVertexArray","bind","bindVertexArray","deleteVertexArray","OESVAO","vaoExt","createVertexArrayOES","bindVertexArrayOES","deleteVertexArrayOES","WebGL1BufferInfo","bindFunc","SeriesSegmentVertexArray","dataBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","DYNAMIC_DRAW","validStart","validEnd","deleteBuffer","popBack","n","newVaildEndDP","floor","popFront","newVaildStartDP","syncPoints","bufferStart","bufferEnd","buffer","bi","vDP","vec2.create","vPreviousDP","dir1","dir2","calc","dp","previousDP","vec2.normalize","vec2.negate","put","numDPtoAdd","bufferSubData","pushBack","oldValidEnd","pushFront","oldVaildStart","draw","renderIndex","first","count","drawArrays","TRIANGLE_STRIP","SeriesVertexArray","numDPtoDelete","activeArray","vertexArrays","newArray","syncBuffer","renderDomain","minIndex","maxIndex","minArrayIndex","maxArrayIndex","arrOffset","LineChartRenderer","drawFrame","arrays","renderWidth","renderHeight","vec2.divide","uniform2fv","syncDomain","ds","uniform4fv","uniform1f","err","getError","NO_ERROR","ySvgToView","xSvgToView","m","zero","one","scaling","lineChart","NearestPoint","svg","pModel","container","adjustIntersectPoints","intersectPoints","intersect","stroke","strokeWidth","Tooltip","table","xItem","createItemElements","size","tooltipRect","minPointerDistance","Number","POSITIVE_INFINITY","displayingX","px","dx","dy","dis","toLocaleString","label","exampleTd","itemElements","core","addDefaultPlugins"],"mappings":"sDAiGgBA,EAAiBC,GAC7B,MAAMC,EAAuCC,MAAIF,GACjD,MAAO,CAACC,EAASE,EAAI,IAAKF,EAASG,EAAI,IAAKH,EAASI,EAAI,IAAKJ,EAASK,eClF9DC,EAITC,YAAYC,EAAyBC,EAA8BC,GAA9BC,aAAAF,EACjC,MAAMG,EAASC,SAASC,cAAc,UAChCC,EAAQH,EAAOG,MACrBA,EAAMC,SAAW,WACjBD,EAAME,MAAQF,EAAMG,OAAS,OAC7BH,EAAMI,KAAOJ,EAAMK,MAAQL,EAAMM,IAAMN,EAAMO,OAAS,IACtDd,EAAGe,WAAYC,YAAYZ,GAE3BD,KAAKc,GA1Bb,SAAoBb,EAA2Bc,GAC3C,IAAKA,EAAa,CACd,MAAMC,EAAMf,EAAOgB,WAAW,UAC9B,GAAID,EACA,OAAOA,EAGf,MAAMA,EAAMf,EAAOgB,WAAW,SAC9B,GAAID,EACA,OAAOA,EAEX,MAAM,IAAIE,MAAM,2EAeFD,CAAWhB,EAAQH,EAAQiB,aAErC,MAAMI,EAAUhC,EAAiBW,EAAQsB,iBACzCpB,KAAKc,GAAGO,cAAcF,GAEtBnB,KAAKC,OAASA,EAEdF,EAAMuB,QAAQC,IAAG,KACbvB,KAAKwB,QACLxB,KAAKyB,kBAET1B,EAAM2B,QAAQH,IAAG,CAACI,EAAGC,IAAM5B,KAAK6B,SAASF,EAAGC,KAC5C7B,EAAM+B,UAAUP,IAAG,KACf1B,EAAGe,WAAYmB,YAAY9B,GAC3BA,EAAOK,MAAQ,EACfL,EAAOM,OAAS,EAChB,MAAMyB,EAAchC,KAAKc,GAAGmB,aAAa,sBACrCD,GACAA,EAAYE,iBAKxBT,eACI,MAAMU,EAAInC,KAAKF,QACTP,EAAI4C,EAAEC,WACZpC,KAAKc,GAAGuB,SACJF,EAAEG,kBAAoB/C,EACtB4C,EAAEI,oBAAsBhD,EACvBS,KAAKC,OAAOK,OAAS6B,EAAEG,kBAAoBH,EAAEK,oBAAsBjD,EACnES,KAAKC,OAAOM,QAAU4B,EAAEM,iBAAmBN,EAAEI,qBAAuBhD,GAI7EsC,SAASvB,EAAeC,GACpB,MAAMN,EAASD,KAAKC,OACdyC,EAAQ1C,KAAKF,QAAQsC,WAC3BnC,EAAOK,MAAQA,EAAQoC,EACvBzC,EAAOM,OAASA,EAASmC,EACzB1C,KAAKyB,eAGTD,QACI,MAAMV,EAAKd,KAAKc,GAChBA,EAAGU,MAAMV,EAAG6B,yBCtEPC,EAEThD,YAAYC,EAAiBE,EAAoBD,GAC7CE,KAAK6C,KAAO3C,SAASC,cAAc,OACnCH,KAAK6C,KAAKzC,MAAMC,SAAW,WAC3BL,KAAK6C,KAAKzC,MAAMI,KAAO,GAAGV,EAAQgD,gBAClC9C,KAAK6C,KAAKzC,MAAMK,MAAQ,GAAGX,EAAQiD,iBACnC/C,KAAK6C,KAAKzC,MAAMM,IAAM,GAAGZ,EAAQkD,eACjChD,KAAK6C,KAAKzC,MAAMO,OAAS,GAAGb,EAAQmD,kBACpCpD,EAAGe,WAAYC,YAAYb,KAAK6C,MAEhC9C,EAAM+B,UAAUP,IAAG,KACf1B,EAAGe,WAAYmB,YAAY/B,KAAK6C,mBCd5BK,EAAgBC,EAAoBC,EAAeC,EAAaC,EAAeC,GAC3F,GAAIH,GAASC,EACT,OAAOD,EAGX,GAAIE,GAASC,EAAIJ,EAAKC,IAClB,OAAOA,EAEX,GAAIE,EAAQC,EAAIJ,EAAKE,EAAM,IACvB,OAAOA,EAIX,IADAA,GAAO,EACAD,EAAQ,EAAIC,GAAK,CACpB,MAAMG,EAAYD,EAAIJ,EAAKC,IACrBK,EAAYF,EAAIJ,EAAKE,IACrBK,EAAQD,GAAaD,EAAY,GAAKF,EAAQE,IAAcC,EAAYD,GAC9E,IAAIG,EAAgBC,KAAKC,KAAKT,EAAQM,GAASL,EAAMD,IACjDO,IAAkBN,EAClBM,IACKA,IAAkBP,GACvBO,IACWJ,EAAIJ,EAAKQ,IAEXL,EACTF,EAAQO,EAERN,EAAMM,EAGd,OAAON,QAKES,EAAblE,cACYI,eAAwB,GAChCuB,GAAGwC,GACC/D,KAAKgE,UAAUC,KAAKF,GAExBG,YAAYC,GACR,IAAK,MAAMC,KAAMpE,KAAKgE,UAClBI,KAAMD,UCrCLE,EAMTzE,YACYK,EACAF,EACAD,EACRwE,GAHQtE,YAAAC,EACAD,WAAAD,EACAC,aAAAF,EARZE,gBAAa,IAAIuE,IACjBvE,oBAAgD,KAEhDA,aAAU,IAAI8D,EAQVQ,EAASzB,KAAK2B,iBAAiB,aAAaC,IACxC,MAAMC,EAAOzE,EAAOA,OAAO0E,wBAC3B3E,KAAK4E,eAAiB,CAClBC,EAAGJ,EAAGK,QAAUJ,EAAKlE,KACrBuE,EAAGN,EAAGO,QAAUN,EAAKhE,KAEzBV,KAAKiF,kBAETX,EAASzB,KAAK2B,iBAAiB,cAAcC,IACzCzE,KAAK4E,eAAiB,KACtB5E,KAAKiF,kBAGTlF,EAAMuB,QAAQC,IAAG,IAAMvB,KAAKiF,iBAGhCA,eACI,GAA4B,OAAxBjF,KAAK4E,eACL5E,KAAKkF,WAAW1D,YACb,CACH,MAAM2D,EAASnF,KAAKD,MAAMqF,OAAOC,OAAOrF,KAAK4E,eAAeC,GAC5D,IAAK,MAAMS,KAAKtF,KAAKF,QAAQyF,OAAQ,CACjC,GAAqB,GAAjBD,EAAEnC,KAAKqC,SAAgBF,EAAEG,QAAS,CAClCzF,KAAKkF,WAAWQ,OAAOJ,GACvB,SAEJ,MAAMK,EAAMzC,EAAaoC,EAAEnC,KAAM,EAAGmC,EAAEnC,KAAKqC,OAAQL,GAAQS,GAAKA,EAAEf,IAC5DgB,EAAoB,GACtBF,EAAM,GACNE,EAAK5B,KAAKqB,EAAEnC,KAAKwC,EAAM,IAEvBA,EAAML,EAAEnC,KAAKqC,QACbK,EAAK5B,KAAKqB,EAAEnC,KAAKwC,IAErB,MAAMG,EAAWC,GAAsBnC,KAAKoC,IAAID,EAAElB,EAAIM,GACtDU,EAAKI,MAAK,CAACF,EAAGtG,IAAMqG,EAAQC,GAAKD,EAAQrG,KACzC,MAAMyG,EAAUlG,KAAKD,MAAMmG,QAAQL,EAAK,IAClCvF,EAAQN,KAAKC,OAAOA,OAAOkG,YAC3B5F,EAASP,KAAKC,OAAOA,OAAOmG,aAE9BF,EAAQrB,GAAKvE,GAAS4F,EAAQrB,GAAK,GACnCqB,EAAQnB,GAAKxE,GAAU2F,EAAQnB,GAAK,EACpC/E,KAAKkF,WAAWmB,IAAIf,EAAGO,EAAK,IAE5B7F,KAAKkF,WAAWQ,OAAOJ,IAInCtF,KAAKsB,QAAQ4C,YCvDrB,SAASoC,EAAYC,EAAkBnD,EAAeC,GAClD,IAAImD,GAAOC,EAAAA,EACPC,EAAMD,EAAAA,EACV,IAAK,IAAIE,EAAIvD,EAAOuD,EAAItD,EAAKsD,IAAK,CAC9B,MAAMC,EAAIL,EAAII,GAAG5B,EACb6B,EAAIJ,IAAKA,EAAMI,GACfA,EAAIF,IAAKA,EAAME,GAEvB,MAAO,CAAEJ,IAAAA,EAAKE,IAAAA,SAULG,EAMTjH,YAAoBE,GAAAE,aAAAF,EALpBE,YAAS8G,gBACT9G,YAAS8G,gBACT9G,YAAwB,KACxBA,YAAwB,KAWxBA,aAAU,IAAI8D,EAUd9D,aAAU,IAAI8D,EACd9D,eAAY,IAAI8D,EACR9D,eAAW,EA4DXA,sBAAkB,EAhFC,SAAnBF,EAAQiH,QAAqBjH,EAAQiH,QACrC/G,KAAKoF,OAAOD,OAAO,CAACrF,EAAQiH,OAAOL,IAAK5G,EAAQiH,OAAOP,MAEpC,SAAnB1G,EAAQkH,QAAqBlH,EAAQkH,QACrChH,KAAKiH,OAAO9B,OAAO,CAACrF,EAAQkH,OAAON,IAAK5G,EAAQkH,OAAOR,MAK/DU,OAAO5G,EAAeC,GAClB,MAAM4G,EAAKnH,KAAKF,QAChBE,KAAKoF,OAAOgC,MAAM,CAACD,EAAGrE,YAAaxC,EAAQ6G,EAAGpE,eAC9C/C,KAAKiH,OAAOG,MAAM,CAAC7G,EAAS4G,EAAGlE,cAAekE,EAAGnE,aAEjDhD,KAAK0B,QAAQwC,SAAS5D,EAAOC,GAC7BP,KAAKqH,gBAOTC,UACStH,KAAKuH,WACNvH,KAAK8B,UAAUoC,WACflE,KAAKuH,UAAW,GAIxBC,SACIxH,KAAKyH,cACLzH,KAAKsB,QAAQ4C,WACb,IAAK,MAAMoB,KAAKtF,KAAKF,QAAQyF,OACzBD,EAAEnC,KAAKuE,UAIfD,cACI,MAAMlC,EAASvF,KAAKF,QAAQyF,OAAOoC,QAAOrC,GAAKA,EAAEnC,KAAKqC,OAAS,IAC/D,GAAsB,IAAlBD,EAAOC,OACP,OAGJ,MAAMrD,EAAInC,KAAKF,QAEf,CACI,MAAM2D,EAAYG,KAAK4C,OAAOjB,EAAOqC,KAAItC,GAAKA,EAAEnC,KAAKmC,EAAEnC,KAAKqC,OAAS,GAAGX,KAClErB,EAAYI,KAAK8C,OAAOnB,EAAOqC,KAAItC,GAAKA,EAAEnC,KAAK,GAAG0B,KAExD,GADA7E,KAAK+G,OAAS,CAAEP,IAAK/C,EAAWiD,IAAKlD,GACjCxD,KAAKF,QAAQ+H,UAAyB,SAAb1F,EAAE4E,OAC3B,GAAI/G,KAAKF,QAAQ+H,SAAU,CACvB,MAAMC,EAAgB9H,KAAKoF,OAAOD,SAC5BiC,EAAQU,EAAc,GAAKA,EAAc,GAC/C9H,KAAKoF,OAAOD,OAAO,CAAC1B,EAAY2D,EAAO3D,SAEvCzD,KAAKoF,OAAOD,OAAO,CAAC3B,EAAWC,SAE5BtB,EAAE4E,QACT/G,KAAKoF,OAAOD,OAAO,CAAChD,EAAE4E,OAAOL,IAAKvE,EAAE4E,OAAOP,MAGnD,CACI,MAAMuB,EAAUxC,EAAOyC,SAAQ1C,GACpB,CACHgB,EAAYhB,EAAEnC,KAAM,EAAGmC,EAAEnC,KAAK8E,cAC9B3B,EAAYhB,EAAEnC,KAAMmC,EAAEnC,KAAKqC,OAASF,EAAEnC,KAAK+E,YAAa5C,EAAEnC,KAAKqC,WAGnExF,KAAKgH,QACLe,EAAQ9D,KAAKjE,KAAKgH,QAEtBhH,KAAKgH,OArFjB,YAAwBmB,GACpB,MAAO,CACHzB,IAAK9C,KAAK8C,OAAOyB,EAAMP,KAAIjB,GAAKA,EAAED,OAClCF,IAAK5C,KAAK4C,OAAO2B,EAAMP,KAAIjB,GAAKA,EAAEH,QAkFhB4B,IAAeL,GACZ,SAAb5F,EAAE6E,OACFhH,KAAKiH,OAAO9B,OAAO,CAACnF,KAAKgH,OAAON,IAAK1G,KAAKgH,OAAOR,MAAM6B,OAChDlG,EAAE6E,QACThH,KAAKiH,OAAO9B,OAAO,CAAChD,EAAE6E,OAAON,IAAKvE,EAAE6E,OAAOR,OAMvDa,gBACQrH,KAAKsI,kBAGTtI,KAAKsI,iBAAkB,EACvBC,uBAAuBC,IACnBxI,KAAKsI,iBAAkB,EAClBtI,KAAKuH,UACNvH,KAAKwH,aAKjBtB,QAAQuC,GACJ,MAAO,CACH5D,EAAG7E,KAAKoF,OAAOqD,EAAU5D,GACzBE,EAAG/E,KAAKiH,OAAOwB,EAAU1D,WClIxB2D,EAGT9I,YAAYC,EAAiBE,GACzBC,KAAK2I,QAAUzI,SAAS0I,gBAAgB,6BAA8B,OACtE,MAAMxI,EAAQJ,KAAK2I,QAAQvI,MAC3BA,EAAMC,SAAW,WACjBD,EAAME,MAAQF,EAAMG,OAAS,OAC7BH,EAAMI,KAAOJ,EAAMK,MAAQL,EAAMM,IAAMN,EAAMO,OAAS,IACtDd,EAAGe,WAAYC,YAAYb,KAAK2I,SAEhC5I,EAAM+B,UAAUP,IAAG,KACf1B,EAAGe,WAAYmB,YAAY/B,KAAK2I,mBCb/BE,UAAwCC,MAQjDlJ,cACImJ,SAASC,WARbhJ,iBAAc,EACdA,kBAAe,EACfA,gBAAa,EACbA,iBAAc,EAMVA,KAAKkI,YAAclI,KAAKwF,OAG5BkC,UACI1H,KAAKkI,YAAclI,KAAKiJ,WAAajJ,KAAKiI,aAAejI,KAAKkJ,YAAc,EAGhFC,mBAAsB5C,GAClB,GAAIA,aAAesC,EACf,OAAOtC,EACX,MAAM9G,EAAI2J,OAAOC,eAAe9C,EAAKsC,EAAiBS,WAGtD,OAFA7J,EAAEwJ,WAAaxJ,EAAEwI,aAAexI,EAAEyJ,YAAc,EAChDzJ,EAAEyI,YAAczI,EAAE+F,OACX/F,EAGFwE,QAAQkE,GAEb,OADAnI,KAAKkI,aAAeC,EAAM3C,OACnBuD,MAAM9E,QAAQkE,GAGhBoB,MACL,MAAMC,EAAMxJ,KAAKwF,OACXjG,EAAIwJ,MAAMQ,MAChB,YAAUE,IAANlK,IAGAS,KAAKkI,YAAc,EACnBlI,KAAKkI,cACAsB,EAAMxJ,KAAKiI,aAAe,EAC/BjI,KAAKiJ,aAELjJ,KAAKiI,gBAPE1I,EAWNmK,WAAWvB,GAEhB,OADAnI,KAAKiI,cAAgBE,EAAM3C,OACpBuD,MAAMW,WAAWvB,GAGnBwB,QACL,MAAMH,EAAMxJ,KAAKwF,OACXjG,EAAIwJ,MAAMY,QAChB,YAAUF,IAANlK,IAGAS,KAAKiI,aAAe,EACpBjI,KAAKiI,eACAuB,EAAMxJ,KAAKkI,YAAc,EAC9BlI,KAAKkJ,cAELlJ,KAAKkI,eAPE3I,EAWPqK,aAAaxG,EAAeyG,EAAqBL,GACrD,GAAoB,IAAhBK,EACA,OAEJ,MAAMjE,EAAKkE,IAEPN,GAAOM,EACgB,KAFvBD,GAAeC,IAKnB,GAAI1G,EAAQpD,KAAKiI,aAAc,CAC3B,MAAM6B,EAAIlG,KAAK8C,IAAImD,EAAa7J,KAAKiI,aAAe7E,GAEpD,GADApD,KAAKiI,cAAgB6B,EACjBlE,EAAEkE,GACF,OAGR,GAAI1G,IAAUpD,KAAKiI,aAAc,CAC7B,MAAM6B,EAAIlG,KAAK8C,IAAImD,EAAaL,EAAMxJ,KAAKiI,aAAejI,KAAKkI,aAE/D,GADAlI,KAAKkJ,aAAeY,EAChBlE,EAAEkE,GACF,OAGR,GAAI1G,EAAQpD,KAAKiI,cAAgB7E,EAAQoG,EAAMxJ,KAAKkI,YAAa,CAC7D,GAAI9E,EAAQyG,EAAcL,EAAMxJ,KAAKkI,YACjC,MAAM,IAAI6B,WAAW,wEACzB,MAAMD,EAAIlG,KAAK8C,IAAImD,EAAaL,EAAMpG,EAAQpD,KAAKkI,aAEnD,GADAlI,KAAKiJ,YAAca,EACflE,EAAEkE,GACF,OAGR,MAAMA,EAAIlG,KAAK8C,IAAImD,EAAaL,EAAMpG,GAEtC,GADApD,KAAKkI,aAAe4B,GAChBlE,EAAEkE,GAGN,MAAM,IAAI5I,MAAM,OAGZ8I,aAAa5G,EAAe6G,EAAqBT,GACrD,GAAIpG,GAASpD,KAAKiI,aACdjI,KAAKiI,cAAgBgC,MAClB,CAAA,KAAI7G,GAASoG,EAAMxJ,KAAKkI,aAG3B,MAAM,IAAI6B,WAAW,0FAFrB/J,KAAKkI,aAAe+B,GAMnBC,OAAO9G,EAAeyG,KAAyB1B,GAChD/E,KAAWqD,EAAAA,EACXrD,EAAQ,EACHA,EAAQ,IACbA,EAAQQ,KAAK4C,IAAIxG,KAAKwF,OAASpC,EAAO,IAGtCyG,OADgBJ,IAAhBI,EACc7J,KAAKwF,OAASpC,EAEdQ,KAAK8C,IAAI9C,KAAK4C,IAAIqD,EAAa,GAAI7J,KAAKwF,OAASpC,GAEnEpD,KAAK4J,aAAaxG,EAAOyG,EAAa7J,KAAKwF,QAC3CxF,KAAKgK,aAAa5G,EAAO+E,EAAM3C,OAAQxF,KAAKwF,OAASqE,GAErD,MAAMM,EAAcnK,KAAKwF,OAASqE,EAAc1B,EAAM3C,OAChDjG,EAAIwJ,MAAMmB,OAAO9G,EAAOyG,KAAgB1B,GAC9C,GAAInI,KAAKwF,SAAW2E,EAChB,MAAM,IAAIjJ,MAAM,0CAA0ClB,KAAKwF,aAAa2E,KAChF,OAAO5K,GC7Hf,MAAM6K,EAAiB,CACnBhI,WAAYiI,OAAOC,iBACnBC,UAAW,EACXnJ,gBAAiB9B,MAAI,EAAG,EAAG,EAAG,GAC9B0D,WAAY,GACZD,aAAc,GACdD,YAAa,GACbG,cAAe,GACfR,iBAAkB,EAClBD,mBAAoB,EACpBF,kBAAmB,EACnBC,oBAAqB,EACrBwE,OAAQ,OACRC,OAAQ,OACRa,UAAU,EACV2C,SAAU,EACVC,WAAYC,YACZC,YAAY,EACZ5J,aAAa,EACb6J,QAAQ,EACRC,SAAS,EACTC,cAAe,KAGbC,EAAuB,CACzBC,KAAM,GACN5L,MAAO,KACPqG,SAAS,GAKb,SAASwF,EAAsB3F,GAG3B,OAFAA,EAAEnC,KAAOmC,EAAEnC,KAAO0F,EAAiBqC,YAAY5F,EAAEnC,MAAQ,IAAI0F,EAC7DO,OAAOC,eAAe/D,EAAGyF,GAClBzF,QAcU6F,EAYjBvL,YAAmBC,EAAiBC,WAAjBE,QAAAH,EAFnBG,eAAW,EAGP,MAAMoL,EAxBd,SAAyBvL,EAAaC,GAClC,MAAMuL,EAAkB,CACpB9F,OAAQ,GACRnG,MAAOkM,iBAAiBzL,GAAI0L,iBAAiB,UAE3CpJ,EAAIiH,OAAOoC,OAAO,GAAIH,EAAiBvL,GAG7C,OAFAqC,EAAEoD,OAASpD,EAAEoD,OAAOqC,KAAItC,GAAK2F,EAAsB3F,KACnD8D,OAAOC,eAAelH,EAAGiI,GAClBjI,EAgBiBsJ,CAAgB5L,EAAIC,GAExCE,KAAKD,MAAQ,IAAI8G,EAAYuE,GAC7B,MAAMxK,YAAaf,EAAGe,0BAAcf,EAAG6L,aAAa,CAAEC,KAAM,SACtDvL,EAAQF,SAASC,cAAc,SACrCC,EAAMwL,UAAY,+EAKlBhL,EAAWC,YAAYT,GAEvBJ,KAAK6L,YAAc,IAAIlM,EAAYE,EAAIuL,EAAapL,KAAKD,OACzDC,KAAK8L,SAAW,IAAIpD,EAAS7I,EAAIG,KAAKD,OACtCC,KAAK+L,mBAAqB,IAAInJ,EAAmB/C,EAAIG,KAAKD,MAAOqL,GACjEpL,KAAKgM,aAAe,IAAI3H,EAAkBrE,KAAK6L,YAAa7L,KAAKD,MAAOqL,EAAapL,KAAK+L,oBAC1F/L,KAAKiM,SAAWb,EAEhBpL,KAAKkM,QAAU9C,OAAO+C,YAClB/C,OAAOgD,kBAAQtM,MAAAA,SAAAA,EAASoM,uBAAW,IAAItE,KAAI,EAAEoD,EAAMqB,KAAO,CAACrB,EAAMqB,EAAEC,MAAMtM,UAG7EA,KAAK6B,WAEL,MAAM0K,EAAgB,IAAMvM,KAAK6B,WACjCwI,OAAO7F,iBAAiB,SAAU+H,GAClCvM,KAAKD,MAAM+B,UAAUP,IAAG,KACpB8I,OAAOmC,oBAAoB,SAAUD,GACrC3L,EAAWmB,YAAY3B,MAvC3BN,cAAY,OAAOE,KAAKiM,SA2C5BpK,WACI7B,KAAKD,MAAMmH,OAAOlH,KAAKH,GAAGsG,YAAanG,KAAKH,GAAGuG,cAGnDoB,SACI,GAAIxH,KAAKuH,SACL,MAAM,IAAIrG,MAAM,gCAIpB,IAAK,IAAIyF,EAAI,EAAGA,EAAI3G,KAAKF,QAAQyF,OAAOC,OAAQmB,IAAK,CACjD,MAAMrB,EAAItF,KAAKF,QAAQyF,OAAOoB,GACzBoE,EAAqB0B,cAAcnH,KACpCtF,KAAKF,QAAQyF,OAAOoB,GAAKsE,EAAsB3F,IAIvDtF,KAAKD,MAAMsH,gBAGfC,UACItH,KAAKD,MAAMuH,UACXtH,KAAKuH,UAAW,GC9HxB,IAAYmF,WAuCIC,EAAW7M,GACvB,MAAO,CACH,CAAE8M,IAAKF,EAAUG,EAAG1F,GAAIrH,EAAQ+E,GAChC,CAAE+H,IAAKF,EAAUI,EAAG3F,GAAIrH,EAAQiF,IAClC4C,QAAOhB,QAAc8C,IAAT9C,EAAEQ,cCRJ4F,EAAOrK,GACnB,MAAMyC,EAASzC,EAAMyC,SACfiC,EAAQ1E,EAAM0E,QACpB,OAAQjC,EAAO,GAAKA,EAAO,KAAOiC,EAAM,GAAKA,EAAM,aAMvC4F,EAAe7F,EAAyBhC,GACpD,MAAM8H,EAAW9H,EAAO,GAAKA,EAAO,GAE9B+H,EAAiB/F,EAAGzE,MAAMyC,SAChC,IAAK+H,EAAe,GAAKA,EAAe,IAAMD,GAAY,EAEtD,OAAO,EAGX,MAAME,EAASvJ,KAAK8C,IAAIS,EAAGiG,gBAAiBjG,EAAG1D,UAAY0D,EAAG3D,UAAWI,KAAK4C,IAAIW,EAAGkG,gBAAiBJ,IAChGK,GAAUH,EAASF,GAAY,EACrC9H,EAAO,IAAMmI,EACbnI,EAAO,IAAMmI,EAEb,MAAMC,EAAS3J,KAAK8C,IAAI9C,KAAK4C,IAAIW,EAAG3D,UAAY2B,EAAO,GAAI,GAAIgC,EAAG1D,UAAY0B,EAAO,IACrFA,EAAO,IAAMoI,EACbpI,EAAO,IAAMoI,EAEb,MAAMC,EAAe,KAATL,EAEZ,OADAhG,EAAGzE,MAAMyC,OAAOA,iBA9DWsI,GAC3B,MAAO,IAAIA,EAAK,IAAI7F,KAAI,CAAC8F,EAAG5D,IAAM2D,EAAK7F,KAAI+F,GAAOA,EAAI7D,OA8DlD8D,CAAIzI,EAAQ+H,GAAgBW,MAAK,EAAEjI,EAAGkI,KAAQlK,KAAKoC,IAAIJ,EAAIkI,GAAMN,aAWzDO,EAAMzK,EAAeoD,EAAaF,GAC9C,OAAIlD,EAAQkD,EACDA,EACAlD,EAAQoD,EACRA,EAEJpD,GDjFX,SAAYoJ,GACRA,yBAASA,aAAGA,aADhB,CAAYA,IAAAA,aEECsB,EAITpO,YAAoBC,EAA4BC,GAA5BE,QAAAH,EAA4BG,aAAAF,EAHzCE,kBAAe,IAAI8D,EAClB9D,mBAA8B,KAGlCH,EAAGO,MAAM6N,WAAa,OACtBpO,EAAG2E,iBAAiB,eAAeC,GAAMzE,KAAKkO,YAAYzJ,KAC1D5E,EAAG2E,iBAAiB,aAAaC,GAAMzE,KAAKmO,UAAU1J,KACtD5E,EAAG2E,iBAAiB,eAAeC,GAAMzE,KAAKoO,YAAY3J,KAGtD4J,MAAM5J,GACV,MAAM6J,EAAetO,KAAKH,GAAG8E,wBAC7B,MAAO,CACH,CAAC+H,EAAUG,GAAIpI,EAAGK,QAAUwJ,EAAa9N,KACzC,CAACkM,EAAUI,GAAIrI,EAAGO,QAAUsJ,EAAa5N,KAIzC0N,YAAYG,GAChB,GAA2B,OAAvBvO,KAAKwO,cACL,OAEJ,MAAMnC,EAAIrM,KAAKqO,MAAME,GACrB,IAAIE,GAAU,EACd,IAAK,MAAM7B,IAAEA,EAAGzF,GAAEA,KAAQwF,EAAW3M,KAAKF,SAAU,CAChD,MAAM4O,EAASrC,EAAEO,GAAO5M,KAAKwO,cAAc5B,GACrC+B,EAAI5B,EAAO5F,EAAGzE,OACdyC,EAASgC,EAAGzE,MAAMyC,SAEpB6H,EAAe7F,EADDhC,EAAOyC,KAAIhC,GAAKA,EAAI+I,EAAID,OAEtCD,GAAU,GAGlBzO,KAAKwO,cAAgBnC,EACjBoC,GACAzO,KAAK4O,aAAa1K,WAIlBgK,YAAYK,GACU,UAAtBA,EAAMM,cAGV7O,KAAKH,GAAGiP,kBAAkBP,EAAMQ,WAChC/O,KAAKwO,cAAgBxO,KAAKqO,MAAME,GAChCvO,KAAKH,GAAGO,MAAM4O,OAAS,YAGnBb,UAAUI,GACa,OAAvBvO,KAAKwO,gBAGTxO,KAAKwO,cAAgB,KACrBxO,KAAKH,GAAGoP,sBAAsBV,EAAMQ,WACpC/O,KAAKH,GAAGO,MAAM4O,OAAS,WCvDlBE,EAUTtP,YAAoBC,EAA4BC,GAA5BE,QAAAH,EAA4BG,aAAAF,EATzCE,kBAAe,IAAI8D,EAElB9D,oBAAiB0M,EAAUyC,QAC3BnP,oBAAiB,IAAIuE,IACrBvE,aAAU,CACd,CAAC0M,EAAUG,IAAI,EACf,CAACH,EAAUI,IAAI,GAIfjN,EAAG2E,iBAAiB,cAAc4K,GAAKpP,KAAKqP,aAAaD,IAAI,CAAEE,SAAS,IACxEzP,EAAG2E,iBAAiB,YAAY4K,GAAKpP,KAAKuP,WAAWH,IAAI,CAAEE,SAAS,IACpEzP,EAAG2E,iBAAiB,eAAe4K,GAAKpP,KAAKuP,WAAWH,IAAI,CAAEE,SAAS,IACvEzP,EAAG2E,iBAAiB,aAAa4K,GAAKpP,KAAKwP,YAAYJ,IAAI,CAAEE,SAAS,IAEtEtP,KAAKwH,SAGTA,SACIxH,KAAKyP,cACLzP,KAAK0P,kBAGDD,cACJ,IAAK,MAAM7C,IAAEA,EAAGzF,GAAEA,KAAQwF,EAAW3M,KAAKF,SACtC,GAAKqH,EAEE,CACH,MAAMhC,EAASgC,EAAGzE,MAAMyC,SAASc,OACjCjG,KAAK2P,QAAQ/C,GAAOzF,EAAG3D,UAAY2B,EAAO,IAAMA,EAAO,GAAKgC,EAAG1D,eAH/DzD,KAAK2P,QAAQ/C,IAAO,EAQxB8C,kBACJ,MAAME,EAAU,GACX5P,KAAK2P,QAAQjD,EAAUG,IACxB+C,EAAQ3L,KAAK,SAEZjE,KAAK2P,QAAQjD,EAAUI,IACxB8C,EAAQ3L,KAAK,SAEM,IAAnB2L,EAAQpK,QACRoK,EAAQ3L,KAAK,QAEjBjE,KAAKH,GAAGO,MAAMyP,YAAcD,EAAQE,KAAK,KAGrCC,OAAOnD,EAAgBzF,EAAyBhE,GACpD,GAAIyJ,IAAQ5M,KAAKgQ,gBAAkB7M,EAAKqC,QAAU,EAAG,CACjD,MAAML,EAASgC,EAAGzE,MAAMyC,SAClBgI,EAAShI,EAAO,GAAKA,EAAO,GAClC,YFeahC,GACrB,MAAM8M,EAAO9M,EAAK+M,QAAO,CAACnK,EAAGtG,IAAMsG,EAAItG,IAAI0D,EAAKqC,OAChD,OAAOrC,EAAKyE,KAAIhC,IAAMA,EAAIqK,IAAS,IAAGC,QAAO,CAACnK,EAAGtG,IAAMsG,EAAItG,IAAK0D,EAAKqC,OEjBzD2K,CAAShN,EAAKyE,KAAIhC,GAAKA,EAAET,UAAW,KAAOgI,EAASA,EACpD,gBFxCiBhK,GAC7B,IAAIiN,EAAO,EACPC,EAAO,EACPC,EAAQ,EACRC,EAAQ,EACZ,MAAM/G,EAAMrG,EAAKqC,OAEjB,IAAK,MAAM6G,KAAKlJ,EACZiN,GAAQ/D,EAAExH,EACVwL,GAAQhE,EAAEtH,EACVuL,GAASjE,EAAExH,EAAIwH,EAAEtH,EACjBwL,GAASlE,EAAExH,EAAIwH,EAAExH,EAErB,MAAM2L,EAAOhH,EAAM+G,EAAUH,EAAOA,EAC9BzB,EAAY,IAAR6B,EAAY,GAAMhH,EAAM8G,EAAUF,EAAOC,GAASG,EAE5D,MAAO,CAAE7B,EAAAA,EAAGlP,GADD4Q,EAAO1B,EAAIyB,GAAQ5G,GEyBXiH,CAAiBtN,EAAKyE,KAAI8I,KAAQ7L,EAAG6L,EAAEC,QAAS5L,EAAG2L,EAAEvL,YAIpE,MAAMwJ,EAAI5B,EAAO5F,EAAGzE,OACdjD,EAAI0D,EAAKyE,KAAI8I,GAAKA,EAAEvL,OAASwJ,EAAI+B,EAAEC,UAAST,QAAO,CAACnK,EAAGtG,IAAMsG,EAAItG,IAAK0D,EAAKqC,OACjF,MAAO,CAAEmJ,EAAAA,EAAGlP,EAAAA,GAGRmR,YAAYC,GAChB,MAAMC,EAAc9Q,KAAKH,GAAG8E,wBACtBoM,EAAK,IAAIxM,IAAI,IAAIsM,GAASjJ,KAAI8I,GAAK,CAACA,EAAEM,WAAY,CACpD,CAACtE,EAAUG,GAAI6D,EAAE5L,QAAUgM,EAAYtQ,KACvC,CAACkM,EAAUI,GAAI4D,EAAE1L,QAAU8L,EAAYpQ,SAE3C,IAAI+N,GAAU,EACd,IAAK,MAAM7B,IAACA,EAAGzF,GAAEA,KAAOwF,EAAW3M,KAAKF,SAAU,CAC9C,MAAM4C,EAAQyE,EAAGzE,MACXuO,EAAO,IAAIF,EAAG3E,WAAWxE,KAAI,EAAEsJ,EAAI7E,OAAUsE,QAAStE,EAAEO,GAAM4B,cAAexO,KAAKmR,eAAeC,IAAIF,OACtGvJ,QAAO+I,QAAyBjH,IAApBiH,EAAElC,gBACd5G,KAAI,EAAG+I,QAAAA,EAASnC,cAAAA,OAAuBmC,QAAAA,EAASxL,OAAQzC,EAAM2C,OAAOmJ,EAAe5B,QACzF,GAAoB,IAAhBqE,EAAKzL,OACL,SAEJ,MAAMmJ,EAAEA,EAAClP,EAAEA,GAAMO,KAAK+P,OAAOnD,EAAKzF,EAAI8J,GAElCjE,EAAe7F,EADJzE,EAAM0E,QAAQQ,KAAIrI,GAAKE,EAAIkP,EAAIpP,OAE1CkP,GAAU,GAQlB,OALAzO,KAAKmR,eAAiBJ,EAElBtC,GACAzO,KAAK4O,aAAa1K,WAEfuK,EAGH9B,WAAWC,GACf,MAAO,CACH,CAACF,EAAUG,GAAI7M,KAAKF,QAAQ+E,EAC5B,CAAC6H,EAAUI,GAAI9M,KAAKF,QAAQiF,GAC9B6H,GAGEyC,aAAad,GACjB,GAAIvO,KAAKgQ,iBAAmBtD,EAAUyC,SAAWZ,EAAMsC,QAAQrL,QAAU,EAAG,CACxE,MAAMuL,EAAK,IAAIxC,EAAMsC,SACrB,SAASQ,EAAKlO,GACV,MAAM8M,EAAO9M,EAAK+M,QAAO,CAACnK,EAAGtG,IAAMsG,EAAItG,IAAK0D,EAAKqC,OACjD,OAAOrC,EAAKyE,KAAIhC,IAAMA,EAAIqK,IAAS,IAAGC,QAAO,CAACnK,EAAGtG,IAAMsG,EAAItG,IAE/D,MAAM6R,EAAOD,EAAKN,EAAGnJ,KAAI8I,GAAKA,EAAE5L,WAC1ByM,EAAOF,EAAKN,EAAGnJ,KAAI8I,GAAKA,EAAE1L,WAChChF,KAAKgQ,eAAiBsB,EAAOC,EAAO7E,EAAUG,EAAIH,EAAUI,OACfrD,IAAzCzJ,KAAK2M,WAAW3M,KAAKgQ,kBACrBhQ,KAAKgQ,eAAiBtD,EAAUyC,SAGxCnP,KAAK4Q,YAAYrC,EAAMsC,SAGnBtB,WAAWhB,GACXA,EAAMsC,QAAQrL,OAAS,IACvBxF,KAAKgQ,eAAiBtD,EAAUyC,SAEpCnP,KAAK4Q,YAAYrC,EAAMsC,SAGnBrB,YAAYjB,GAChBvO,KAAK4Q,YAAYrC,EAAMsC,gBC5HlBW,EAGT5R,YAAoBC,EAA4BC,GAA5BE,QAAAH,EAA4BG,aAAAF,EAFzCE,kBAAe,IAAI8D,EAGtBjE,EAAG2E,iBAAiB,SAASC,GAAMzE,KAAKyR,QAAQhN,KAG5CgN,QAAQlD,GACZA,EAAMmD,iBAEN,IAAIC,EAASpD,EAAMoD,OACfC,EAASrD,EAAMqD,OACnB,OAAQrD,EAAMsD,WACV,KAAK,EACDF,GAAU,GACVC,GAAU,GACV,MACJ,KAAK,EACDD,GAAU,IACVC,GAAU,IAGlB,MAAME,EAAY,CACd,CAACpF,EAAUG,GAAI,CACXkF,UAAW,EACXC,KAAM,GAEV,CAACtF,EAAUI,GAAI,CACXiF,UAAW,EACXC,KAAM,IAGVzD,EAAM0D,QACF1D,EAAM2D,QACNJ,EAAUpF,EAAUG,GAAGmF,KAAOL,EAC9BG,EAAUpF,EAAUI,GAAGkF,KAAOJ,GAE9BE,EAAUpF,EAAUG,GAAGmF,KAAQL,EAASC,EAGxCrD,EAAM2D,QACNJ,EAAUpF,EAAUG,GAAGkF,UAAYJ,EACnCG,EAAUpF,EAAUI,GAAGiF,UAAYH,GAEnCE,EAAUpF,EAAUG,GAAGkF,UAAaJ,EAASC,EAGrD,MAAMtD,EAAetO,KAAKH,GAAG8E,wBACvBwN,EAAS,CACX,CAACzF,EAAUG,GAAI0B,EAAMzJ,QAAUwJ,EAAa9N,KAC5C,CAACkM,EAAUI,GAAIyB,EAAMvJ,QAAUsJ,EAAa5N,KAGhD,IAAI+N,GAAU,EACd,IAAK,MAAM7B,IAAEA,EAAGzF,GAAEA,KAAQwF,EAAW3M,KAAKF,SAAU,CAChD,MAAMqF,EAASgC,EAAGzE,MAAMyC,SAClBwJ,EAAI5B,EAAO5F,EAAGzE,OACd0P,EAAQN,EAAUlF,GAClByF,EAAclL,EAAGzE,MAAM2C,OAAO8M,EAAOvF,IAC3CwF,EAAML,WAAapD,EACnByD,EAAMJ,MAAQ,KACVzD,EAAM+D,WACNF,EAAML,WAAa,EACnBK,EAAMJ,MAAQ,GAGlB,MACMO,EAAe,IADNpN,EAAO,GAAKA,EAAO,IAElCiN,EAAML,UAAYhE,EAAMqE,EAAML,WAAYQ,EAAcA,GAExD,MAAMC,EAAU,GAChBJ,EAAMJ,KAAOjE,EAAMqE,EAAMJ,MAAOQ,EAASA,GAGrCxF,EAAe7F,EADDhC,EAAOyC,KAAIhC,GAAKA,EAAIwM,EAAML,WAAanM,EAAIyM,GAAeD,EAAMJ,UAE9EvD,GAAU,GAIdA,GACAzO,KAAK4O,aAAa1K,YC9EvB,MAAMuO,EAAqB,CAC9BjP,WAAYiD,EAAAA,EACZhD,UAAWgD,EAAAA,EACX4G,gBAAiB,EACjBD,gBAAiB3G,EAAAA,YAKLiM,EAA2CC,EAAoBxQ,GACtEA,IACDA,EAAI,IACR,MAAMyQ,EAAeC,IACbA,IAAOF,EAASlG,cAAcoG,IAC9BzJ,OAAOC,eAAewJ,EAAIF,IAIlC,OAFAC,EAAYzQ,EAAE0C,GACd+N,EAAYzQ,EAAE4C,GACP5C,QAGE2Q,EAOTlT,YAAYC,EAAoBC,GAFxBE,kBAAe,IAAI8D,EAGvBhE,EAAUA,MAAAA,EAAAA,EAAW,GACrBE,KAAKF,QAAU4S,EAAeD,EAAoB3S,GAElDE,KAAK+S,MAAQ,IAAI7D,EAAerP,EAAIG,KAAKF,SACzCE,KAAKgT,MAAQ,IAAIhF,EAAenO,EAAIG,KAAKF,SACzCE,KAAKiT,MAAQ,IAAIzB,EAAe3R,EAAIG,KAAKF,SAEzC,MAAMsE,EAAK,IAAMpE,KAAK4O,aAAa1K,WACnClE,KAAK+S,MAAMnE,aAAarN,GAAG6C,GAC3BpE,KAAKgT,MAAMpE,aAAarN,GAAG6C,GAC3BpE,KAAKiT,MAAMrE,aAAarN,GAAG6C,GAG/B8O,eAAenP,GACX/D,KAAK4O,aAAarN,GAAGwC,GAIzByD,SACIxH,KAAK+S,MAAMvL,gBC/CN2L,EACTvT,YAAYwT,EAAsCtT,GAAAE,aAAAF,EAC9CE,KAAKqT,aAAaD,GAGdE,eAAenR,EAAiHoR,GACpI,IAAKpR,EACD,OACJ,IAAKA,EAAEqR,UAGH,cAFOrR,EAAEqB,sBACFrB,EAAEsB,UAGb,IAAKiD,EAAKF,GAAOrE,EAAEO,MAAMyC,SACrBoO,IACA7M,EAAM9C,KAAK8C,IAAIA,EAAK6M,EAAU7M,KAC9BF,EAAM5C,KAAK4C,IAAIA,EAAK+M,EAAU/M,MAElCrE,EAAEqB,UAAYkD,EACdvE,EAAEsB,UAAY+C,EAGV6M,aAAaD,GACjB,MAAMK,EAAI,IAAIX,EAAUM,EAAMrH,mBAAmBlJ,KAAM,CACnDgC,EAAG7E,KAAKF,QAAQ+E,GAAKuE,OAAOoC,OAAOpC,OAAOsK,OAAO1T,KAAKF,QAAQ+E,GAAI,CAAEnC,MAAO0Q,EAAMrT,MAAMqF,SACvFL,EAAG/E,KAAKF,QAAQiF,GAAKqE,OAAOoC,OAAOpC,OAAOsK,OAAO1T,KAAKF,QAAQiF,GAAI,CAAErC,MAAO0Q,EAAMrT,MAAMkH,WAErF9E,EAAIsR,EAAE3T,QACZsT,EAAMrT,MAAMuB,QAAQC,IAAG,KACnBvB,KAAKsT,eAAenR,EAAE0C,EAAGuO,EAAMrT,MAAMgH,QACrC/G,KAAKsT,eAAenR,EAAE4C,EAAGqO,EAAMrT,MAAMiH,QACrCyM,EAAEjM,YAENiM,EAAEP,gBAAe,KACbE,EAAMtT,QAAQiH,OAAS,KACvBqM,EAAMtT,QAAQkH,OAAS,KACvBoM,EAAMtT,QAAQ+H,UAAW,EACzBuL,EAAM5L,aAKlB,MAAMmL,EAAWvJ,OAAOoC,OAAOpC,OAAOsK,OAAOjB,GAAkD,CAC3Fe,WAAW,UAGFG,EAET/T,YAAYuC,GACRnC,KAAKF,QAAU4S,EAAeC,EAAUxQ,GAG5CmK,MAAM8G,GACF,OAAO,IAAID,EAAcC,EAAOpT,KAAKF,UCzDtC,MAAM8T,EAAmC,CAC5CtH,MAAM8G,GACF,MAAMS,WVeiB9T,EAAoBD,GAC/C,MAAMgU,EAAa5T,SAAS0I,gBAAgB,6BAA8B,OAS1E,OARAkL,EAAWC,UAAUC,IAAI,eACzBF,EAAWjP,EAAEoP,QAAQ3Q,MAAQxD,EAAQgD,YACrCgR,EAAW/O,EAAEkP,QAAQ3Q,MAAQxD,EAAQiD,aAErChD,EAAM2B,QAAQH,IAAG,CAACjB,EAAOC,KACrBuT,EAAWxT,MAAM2T,QAAQ3Q,MAAQhD,EAAQR,EAAQiD,aAAejD,EAAQgD,YACxEgR,EAAWvT,OAAO0T,QAAQ3Q,MAAQ/C,EAAST,EAAQkD,WAAalD,EAAQmD,iBAErE6Q,EUzBgBI,CAAed,EAAMrT,MAAOqT,EAAMtT,SAC/CqU,EAAYN,EAAWO,qBAC7BD,EAAUE,aAAa,EAAG,GAE1B,MAAMjU,EAAQF,SAAS0I,gBAAgB,6BAA8B,SACrExI,EAAMkU,YAAc,oIAOpB,MAAMC,EAAQrU,SAAS0I,gBAAgB,6BAA8B,QACrE2L,EAAMzC,UAAUmC,QAAQO,WAAWL,GACnCI,EAAME,GAAGR,QAAQS,uBAAuBC,UAAUC,0BAA2B,KAC7E,MAAMC,EAAQ3U,SAAS0I,gBAAgB,6BAA8B,QACrEiM,EAAM/C,UAAUmC,QAAQO,WAAWL,GACnCU,EAAMC,GAAGb,QAAQS,uBAAuBC,UAAUC,0BAA2B,KAE7E,MAAMpV,EAAIU,SAAS0I,gBAAgB,6BAA8B,KACjEpJ,EAAEuU,UAAUC,IAAI,uBAChB,IAAK,MAAM5E,IAAK,CAAChP,EAAOmU,EAAOM,GAC3BrV,EAAEqB,YAAYuO,GAGlB,MAAM9K,EAAW8O,EAAMrH,mBACvBzH,EAASzB,KAAK2B,iBAAiB,aAAaC,IACxC,MAAMsQ,EAAclB,EAAWlP,wBAC/B4P,EAAMzC,UAAUmC,QAAQe,QAAQ,GAAGX,aAAa,EAAG5P,EAAGO,QAAU+P,EAAYhQ,GAC5E8P,EAAM/C,UAAUmC,QAAQe,QAAQ,GAAGX,aAAa5P,EAAGK,QAAUiQ,EAAYlQ,EAAG,MAEhFP,EAASzB,KAAK2B,iBAAiB,cAAcC,GAAMjF,EAAEY,MAAM6U,WAAa,YACxE3Q,EAASzB,KAAK2B,iBAAiB,cAAcC,GAAMjF,EAAEY,MAAM6U,WAAa,WAExEpB,EAAWhT,YAAYrB,GACvB4T,EAAMtH,SAASnD,QAAQ9H,YAAYgT,KCpC9BqB,EAA0B,CACnC5I,MAAM8G,GACF,MAAM+B,EAAQC,SAAOhC,EAAMtH,SAASnD,SAC9B0M,EAAKF,EAAMG,OAAO,KAClBC,EAAKJ,EAAMG,OAAO,KAElBE,EAAQC,aAAWrC,EAAMrT,MAAMqF,QAC/BsQ,EAAQC,WAASvC,EAAMrT,MAAMkH,QAEnC,SAASO,IACL,MAAMoO,EAAKxC,EAAMrT,MAAMqF,OACjByQ,EAAMzC,EAAMtT,QAAQ2K,aACrBtF,OAAOyQ,EAAGzQ,SAASyC,KAAIhC,GAAKA,EAAIwN,EAAMtT,QAAQ0K,YAC9CpD,MAAMwO,EAAGxO,SACdoO,EAAM9S,MAAMmT,GACZR,EAAGS,KAAKN,GAERE,EAAMhT,MAAM0Q,EAAMrT,MAAMkH,QACxBsO,EAAGO,KAAKJ,GAGZtC,EAAMrT,MAAMuB,QAAQC,GAAGiG,GAEvB4L,EAAMrT,MAAM2B,QAAQH,IAAG,CAACI,EAAGC,KACvB,MAAMuF,EAAKiM,EAAMtT,QACjBuV,EAAGU,KAAK,YAAa,gBAAgBnU,EAAIuF,EAAGlE,kBAC5CsS,EAAGQ,KAAK,YAAa,aAAa5O,EAAGrE,mBAErC0E,eC5BCwO,EAKTpW,YAAoBC,EAAyBE,EAA4BD,GAArDE,QAAAH,EAAyBG,WAAAD,EAA4BC,aAAAF,EAHzEE,WAAQ,IAAIuE,IAIRvE,KAAK4K,OAAS1K,SAASC,cAAc,gBACrC,MAAM8V,EAAKjW,KAAK4K,OAAOxK,MACvB6V,EAAG5V,SAAW,WACd4V,EAAGxV,MAAQ,GAAGX,EAAQiD,iBACtBkT,EAAGvV,IAAM,GAAGZ,EAAQkD,eAEpB,MAAMkT,EAAalW,KAAK4K,OAAOc,aAAa,CAAEC,KAAM,SAE9CvL,EAAQF,SAASC,cAAc,SACrCC,EAAMkU,YAAc,+aAsBpB4B,EAAWrV,YAAYT,GAEvBJ,KAAKmW,cAAgBD,EACrBlW,KAAKwH,SAEL,MAAM5G,EAAaf,EAAGe,WACtBA,EAAWC,YAAYb,KAAK4K,QAC5B7K,EAAMuB,QAAQC,IAAG,IAAMvB,KAAKwH,WAE5BzH,EAAM+B,UAAUP,IAAG,KACfX,EAAWmB,YAAY/B,KAAK4K,WAIpCpD,iBAEI,GADAxH,KAAK4K,OAAOxK,MAAMgW,QAAUpW,KAAKF,QAAQ8K,OAAS,GAAK,OAClD5K,KAAKF,QAAQ8K,OAGlB,IAAK,MAAMtF,KAAKtF,KAAKF,QAAQyF,OAAQ,CACjC,IAAKvF,KAAKmI,MAAMkO,IAAI/Q,GAAI,CACpB,MAAMgR,EAAOpW,SAASC,cAAc,OACpCmW,EAAKC,UAAY,OACjB,MAAMC,EAAUtW,SAASC,cAAc,OACvCqW,EAAQD,UAAY,UACpBD,EAAKzV,YAAY2V,GACjB,MAAMxL,EAAO9K,SAASC,cAAc,SACpC6K,EAAKsJ,YAAchP,EAAE0F,KACrBsL,EAAKzV,YAAYmK,GACjBhL,KAAKmW,cAActV,YAAYyV,GAE/BA,EAAK9R,iBAAiB,SAAUC,IAC5Ba,EAAEG,SAAWH,EAAEG,QACfzF,KAAKD,MAAMyH,YAGfxH,KAAKmI,MAAM9B,IAAIf,EAAG,CAACgR,KAAAA,EAAME,QAAAA,IAE7B,MAAMF,EAAOtW,KAAKmI,MAAMiJ,IAAI9L,GAC5BgR,EAAKA,KAAKvC,UAAU0C,OAAO,UAAWnR,EAAEG,SACxC6Q,EAAKE,QAAQpW,MAAMG,OAAS,aAAG+E,EAAEiF,yBAAavK,KAAKF,QAAQyK,cAC3D+L,EAAKE,QAAQpW,MAAMgB,2BAAmBkE,EAAElG,qBAASY,KAAKF,QAAQV,OAAOsX,aAK1E,MAAM9L,EAAkC,CAC3C0B,MAAM8G,GACK,IAAI4C,EAAO5C,EAAMvT,GAAIuT,EAAMrT,MAAOqT,EAAMtT,UCnFhD,IAAI6W,EAAqC,oBAAjBC,aAA+BA,aAAe9N,MCMtE,SAAS4K,IACd,IAAImD,EAAM,IAAIC,EAAoB,GAOlC,OALIA,GAAuBF,eACzBC,EAAI,GAAK,EACTA,EAAI,GAAK,GAGJA,EDoBJjT,KAAKmT,QAAOnT,KAAKmT,MAAQ,WAI5B,IAHA,IAAIhS,EAAI,EACJ4B,EAAIqC,UAAUxD,OAEXmB,KACL5B,GAAKiE,UAAUrC,GAAKqC,UAAUrC,GAGhC,OAAO/C,KAAKoT,KAAKjS,KCmiBP2O,aCljBIuD,EAAanW,EAA2BoW,EAAcC,EAAgBC,SAClF,MAAMC,EAASC,EAAaxW,EAAGmW,aAAaC,IAG5C,GAFApW,EAAGyW,aAAaF,EAAQF,GACxBrW,EAAG0W,cAAcH,GACbD,EAAO,CAEP,IADgBtW,EAAG2W,mBAAmBJ,EAAQvW,EAAG4W,gBACnC,CACV,MAAMC,YAAU7W,EAAG8W,iBAAiBP,kBAAW,iBAE/C,MADAvW,EAAG+W,aAAaR,GACV,IAAInW,MAAMyW,IAGxB,OAAON,WAGKC,EAAgBhU,GAC5B,IAAKA,EACD,MAAM,IAAIpC,MAAM,2BAEpB,OAAOoC,ECYX,MAAMwU,gBD7DFlY,YACYkB,EACRiX,EAAsBC,EACNZ,GAFRpX,QAAAc,EAEQd,WAAAoX,EAEhB,MAAMa,EAAUX,EAAaxW,EAAGoX,iBAChCpX,EAAGqX,aAAaF,EAASX,EAAaL,EAAanW,EAAIA,EAAGsX,cAAeL,EAAcX,KACvFtW,EAAGqX,aAAaF,EAASX,EAAaL,EAAanW,EAAIA,EAAGuX,gBAAiBL,EAAgBZ,KAC3FpX,KAAKiY,QAAUA,EAGnBK,aACI,MAAMxX,EAAKd,KAAKc,GACVmX,EAAUjY,KAAKiY,QAErB,GADAnX,EAAGyX,YAAYN,GACXjY,KAAKoX,MAAO,CAEZ,IADgBtW,EAAG0X,oBAAoBP,EAASnX,EAAG2X,aACrC,CACV,MAAMd,YAAU7W,EAAG4X,kBAAkBT,kBAAY,iBAEjD,MADAnX,EAAG6X,cAAcV,GACX,IAAI/W,MAAMyW,KAKrBiB,MACH5Y,KAAKc,GAAG+X,WAAW7Y,KAAKiY,WC2C5BrY,YAAYkB,EAAoDsW,GAC5DrO,MAAMjI,EA3Dd,SAAkBA,GACd,MAAMgY,EAAO,wYAcb,OAAIhY,aAAciY,sBACP,uDAGbD,IAEa,oGAGbA,IAmCgBE,CAASlY,GA/B3B,SAAkBA,GAGd,OAAIA,aAAciY,sBACP,8FAOA,6HAoBiBE,CAASnY,GAAKsW,GAElCtW,aAAciY,wBACdjY,EAAGoY,mBAAmBlZ,KAAKiY,UAA2C,cACtEnX,EAAGoY,mBAAmBlZ,KAAKiY,UAAoC,SAGnEjY,KAAKsY,OAEL,MAAMa,EAAUnO,GAAiBsM,EAAaxW,EAAGsY,mBAAmBpZ,KAAKiY,QAASjN,IAElFhL,KAAKqZ,UAAY,CACbC,YAAaH,EAAO,eACpBI,kBAAmBJ,EAAO,qBAC1BK,iBAAkBL,EAAO,oBACzBM,WAAYN,EAAO,cACnBO,OAAQP,EAAO,YAK3B,MAGMQ,EAHkB,EAGkB/C,aAAagD,kBACjDC,EAA6B,OAC7BC,EAAwBD,OAQ9B,MAAME,EAEFna,YAAoBkB,GAAAd,QAAAc,EAChBd,KAAKga,IAAM1C,EAAaxW,EAAGmZ,qBAC3Bja,KAAKka,OAETA,OACIla,KAAKc,GAAGqZ,gBAAgBna,KAAKga,KAEjCxY,QACIxB,KAAKc,GAAGsZ,kBAAkBpa,KAAKga,MAIvC,MAAMK,EAEFza,YAAoB0a,GAAAta,YAAAsa,EAChBta,KAAKga,IAAM1C,EAAagD,EAAOC,wBAC/Bva,KAAKka,OAETA,OACIla,KAAKsa,OAAOE,mBAAmBxa,KAAKga,KAExCxY,QACIxB,KAAKsa,OAAOG,qBAAqBza,KAAKga,MAI9C,MAAMU,EACF9a,YAAoB+a,GAAA3a,cAAA2a,EAEpBT,OACIla,KAAK2a,WAETnZ,UAIJ,MAAMoZ,EAMFhb,YACYkB,EACAoE,GADAlF,QAAAc,EACAd,gBAAAkF,EALZlF,gBAAa,EACbA,cAAW,EAMPA,KAAK6a,WAAavD,EAAaxW,EAAGga,gBAClC,MAAMH,EAAW,KACb7Z,EAAGia,WAAWja,EAAGka,aAAchb,KAAK6a,YAEpC/Z,EAAGma,2BACHna,EAAGoa,sBAAsD,EAAGpa,EAAGqa,OAAO,EAAOxB,EAAiB,GAE9F7Y,EAAGma,2BACHna,EAAGoa,sBAA+C,EAAGpa,EAAGqa,OAAO,EAAOxB,EAAiB,EAAI/C,aAAagD,oBAE5G,GAAI9Y,aAAciY,sBAAuB,CACrC,MAAMuB,EAASxZ,EAAGmB,aAAa,2BAE3BjC,KAAKga,IADLM,EACW,IAAID,EAAOC,GAEX,IAAII,EAAiBC,QAGpC3a,KAAKga,IAAM,IAAID,EAAUjZ,GAE7B6Z,IAEA7Z,EAAGsa,WAAWta,EAAGka,aA7EDlB,QA6EiClD,aAAagD,kBAAmB9Y,EAAGua,cAGxF7Z,QACIxB,KAAKsb,WAAatb,KAAKub,SAAW,EAGtC7V,SACI1F,KAAKwB,QACLxB,KAAKc,GAAG0a,aAAaxb,KAAK6a,YAC1B7a,KAAKga,IAAIxY,QAObia,QAAQC,GACJ,MAAMC,EAAgB/X,KAAKgY,MAAM5b,KAAKub,SApGlB,GAoGoDG,EAExE,OADA1b,KAAKub,SAAW3X,KAAK4C,IArGD,EAqGKmV,EAAqC3b,KAAKsb,YAC5D1X,KAAKgY,MAAM5b,KAAKsb,WAtGH,GAsGuCK,EAG/DE,SAASH,GACL,MAAMI,EAAkBlY,KAAKgY,MAAM5b,KAAKsb,WA1GpB,GA0GwDI,EAE5E,OADA1b,KAAKsb,WAAa1X,KAAK8C,IA3GH,EA2GOoV,EAAuC9b,KAAKub,UAChEO,EAAkBlY,KAAKgY,MAAM5b,KAAKub,SA5GrB,GA+GhBQ,WAAW3Y,EAAe4Y,EAAqBC,GACnD,MAAM/W,EAAalF,KAAKkF,WAClBwW,EAAIO,EAAYD,EAChBE,EAAS,IAAItF,aAnHH,EAmHgB8E,GAChC,IAAIS,EAAK,EACT,MAAMC,EAAMC,IACNC,EAAcD,IACdE,EAAOF,IACPG,EAAOH,IAEb,SAASI,EAAKC,EAAeC,GFrH9B,IAAkB9F,EAAK9Q,EAAGtG,EEsHrB2c,EAAI,GAAKM,EAAG7X,EACZuX,EAAI,GAAKM,EAAG3X,EACZuX,EAAY,GAAKK,EAAW9X,EAC5ByX,EAAY,GAAKK,EAAW5X,EFzHVgB,EE0HEqW,EF1HC3c,EE0HI6c,GF1HZzF,EE0HC0F,GFzHpB,GAAKxW,EAAE,GAAKtG,EAAE,GAClBoX,EAAI,GAAK9Q,EAAE,GAAKtG,EAAE,GAmNb,SAAmBoX,EAAK9Q,GAC7B,IAAIlB,EAAIkB,EAAE,GACNhB,EAAIgB,EAAE,GACNyD,EAAM3E,EAAIA,EAAIE,EAAIA,EAElByE,EAAM,IAERA,EAAM,EAAI5F,KAAKoT,KAAKxN,IAGtBqN,EAAI,GAAK9Q,EAAE,GAAKyD,EAChBqN,EAAI,GAAK9Q,EAAE,GAAKyD,EErGNoT,CAAeL,EAAMA,GFgE1B,SAAgB1F,EAAK9Q,GAC1B8Q,EAAI,IAAM9Q,EAAE,GACZ8Q,EAAI,IAAM9Q,EAAE,GEjEF8W,CAAYL,EAAMD,GAGtB,SAASO,EAAIlW,GACTsV,EAAOC,GAAMvV,EAAE,GACfsV,EAAOC,EAAK,GAAKvV,EAAE,GACnBuV,GAAM,EAGV,MAAMY,EAAanZ,KAAKgY,MAAMF,EAzIV,GA0IpB,IAAIiB,EAAazX,EAAW9B,EAAQ,GACpC,IAAK,IAAIuD,EAAI,EAAGA,EAAIoW,EAAYpW,IAAK,CACjC,MAAM+V,EAAKxX,EAAW9B,EAAQuD,GAC9B8V,EAAKC,EAAIC,GACTA,EAAaD,EAEbI,EAAIR,GACJQ,EAAIP,GACJO,EAAIR,GACJQ,EAAIN,GAEJM,EAAIV,GACJU,EAAIP,GACJO,EAAIV,GACJU,EAAIN,GAUR,GAPIL,EAAKD,EAAO1W,SACZiX,EAAKvX,EAAW9B,EAAQ2Z,GAAaJ,GACrCG,EAAIR,GACJQ,EAAIP,GACJO,EAAIR,GACJQ,EAAIN,IAEJL,IAAOD,EAAO1W,OACd,MAAMtE,MAAM,QAEhB,MAAMJ,EAAKd,KAAKc,GAChBA,EAAGia,WAAWja,EAAGka,aAAchb,KAAK6a,YACpC/Z,EAAGkc,cAAclc,EAAGka,aAAcrB,EAAkBqC,EAAaE,GAMrEe,SAASvB,GACD1b,KAAKsb,aAAetb,KAAKub,WACzBvb,KAAKsb,WAAatb,KAAKub,SAAW,GAEtC,MAAM2B,EAAcld,KAAKub,SACzBvb,KAAKub,SAAW3X,KAAK8C,IAAIoT,EAAuB9Z,KAAKub,SAlLjC,EAkL4CG,GAChE,MAAMqB,EAAanZ,KAAKgY,OAAO5b,KAAKub,SAAW2B,GAnL3B,GAsLpB,OAFAld,KAAK+b,WAAW/b,KAAKkF,WAAWM,OAASkW,EAAGwB,EAAald,KAAKub,UAEvDG,EAAIqB,EAGfI,UAAUzB,GACF1b,KAAKsb,aAAetb,KAAKub,WACzBvb,KAAKsb,WAAatb,KAAKub,SAAWzB,GAEtC,MAAMsD,EAAgBpd,KAAKsb,WAC3Btb,KAAKsb,WAAa1X,KAAK4C,IAAI,EA9LP,GA8LY5C,KAAKgY,MAAM5b,KAAKsb,WA9L5B,GA8LgEI,IACpF,MAAMqB,EAAanZ,KAAKgY,OAAOwB,EAAgBpd,KAAKsb,YA/LhC,GAkMpB,OAFAtb,KAAK+b,WAAWL,EAAIqB,EAAa,EAAG/c,KAAKsb,WAAY8B,GAE9C1B,EAAIqB,EAGfM,KAAKC,GACD,MAAMC,EAAQ3Z,KAAK4C,IAAIxG,KAAKsb,WAtMR,EAsMoBgC,EAAY5W,KAE9C8W,EADO5Z,KAAK8C,IAAI1G,KAAKub,SAvMP,EAuMiB+B,EAAY9W,KAC5B+W,EAEfzc,EAAKd,KAAKc,GAGhB,OAFAd,KAAKga,IAAIE,OACTpZ,EAAG2c,WAAW3c,EAAG4c,eAAgBH,EAAOC,GACjC5Z,KAAKgY,MAAM4B,EA7ME,IAsN5B,MAAMG,EAEF/d,YACYkB,EACAyE,GADAvF,QAAAc,EACAd,YAAAuF,EAHJvF,kBAAe,GAOf6b,WACJ,IAAI+B,EAAgB5d,KAAKuF,OAAOpC,KAAK+F,YACrC,GAAsB,IAAlB0U,EAGJ,OAAa,CACT,MAAMC,EAAc7d,KAAK8d,aAAa,GAEtC,GADAF,EAAgBC,EAAYhC,SAAS+B,GACjCA,EAAgB,EAChB,MACJC,EAAYnY,SACZ1F,KAAK8d,aAAanU,SAGlB8R,UACJ,IAAImC,EAAgB5d,KAAKuF,OAAOpC,KAAK8F,WACrC,GAAsB,IAAlB2U,EAGJ,OAAa,CACT,MAAMC,EAAc7d,KAAK8d,aAAa9d,KAAK8d,aAAatY,OAAS,GAEjE,GADAoY,EAAgBC,EAAYpC,QAAQmC,GAChCA,EAAgB,EAChB,MACJC,EAAYnY,SACZ1F,KAAK8d,aAAavU,OAIlBwU,WACJ,OAAO,IAAInD,EAAyB5a,KAAKc,GAAId,KAAKuF,OAAOpC,MAErDga,YACJ,IAIIU,EAJAd,EAAa/c,KAAKuF,OAAOpC,KAAK8E,aAClC,GAAmB,IAAf8U,EACA,OAIJ,MAAMgB,EAAW,KACbF,EAAc7d,KAAK+d,WACnB/d,KAAK8d,aAAapU,QAAQmU,IAG9B,GAAiC,IAA7B7d,KAAK8d,aAAatY,OAAc,CAChC,GAAIuX,EAAa,EACb,OACJgB,IACAhB,IAIJ,IAFAc,EAAc7d,KAAK8d,aAAa,GAG5Bf,EAAac,EAAYV,UAAUJ,KAC/BA,GAAc,IAElBgB,IAIAd,WACJ,IAIIY,EAJAd,EAAa/c,KAAKuF,OAAOpC,KAAK+E,YAClC,GAAmB,IAAf6U,EACA,OAIJ,MAAMgB,EAAW,KACbF,EAAc7d,KAAK+d,WACnB/d,KAAK8d,aAAa7Z,KAAK4Z,IAG3B,GAAiC,IAA7B7d,KAAK8d,aAAatY,OAAc,CAChC,GAAIuX,EAAa,EACb,OAEJgB,IACAhB,IAIJ,IAFAc,EAAc7d,KAAK8d,aAAa9d,KAAK8d,aAAatY,OAAS,GAGvDuX,EAAac,EAAYZ,SAASF,KAC9BA,GAAc,IAGlBgB,IAIRC,aACIhe,KAAK6b,WACL7b,KAAKyb,UACLzb,KAAKmd,YACLnd,KAAKid,WAGTI,KAAKY,GACD,MAAM9a,EAAOnD,KAAKuF,OAAOpC,KACzB,GAAiC,IAA7BnD,KAAK8d,aAAatY,QAAgBrC,EAAK,GAAG0B,EAAIoZ,EAAazX,KAAOrD,EAAKA,EAAKqC,OAAS,GAAGX,EAAIoZ,EAAavX,IACzG,OAEJ,IAAIgI,EAAS1O,KAAK8d,aAAa,GAAGxC,WApUd,EAoUiD,EACrE,MAAM/X,EAAOqC,GAAiBA,EAAEf,EAC1BqZ,EAAWhb,EAAaC,EAAM,EAAGA,EAAKqC,OAAQyY,EAAavX,IAAKnD,GAAOmL,EACvEyP,EAAWjb,EAAaC,EAAM+a,EAAU/a,EAAKqC,OAAS,EAAGyY,EAAazX,IAAKjD,GAAO,EAAImL,EACtF0P,EAAgBxa,KAAKgY,MAAMsC,EAAWrE,GACtCwE,EAAgBza,KAAKC,KAAKsa,EAAWtE,GAE3C,IAAK,IAAIlT,EAAIyX,EAAezX,EAAI0X,EAAe1X,IAAK,CAChD,MAAM2X,EAAY3X,EAAIkT,EACtBnL,GAAU1O,KAAK8d,aAAanX,GAAG0W,KAAK,CAChC3W,IAAKwX,EAAWI,EAChB9X,IAAK2X,EAAWG,YAMnBC,EAQT3e,YACYG,EACAe,EACAhB,GAFAE,WAAAD,EACAC,QAAAc,EACAd,aAAAF,EAVJE,aAAU,IAAI8X,EAAsB9X,KAAKc,GAAId,KAAKF,QAAQ6K,YAC1D3K,YAAS,IAAIuE,IACbvE,YAAS,EACTA,WAAQ,EACRA,kBAAe,EACfA,iBAAc,EAOlBA,KAAKiY,QAAQW,MACb7Y,EAAMuB,QAAQC,IAAG,IAAMvB,KAAKwe,cAC5Bze,EAAM2B,QAAQH,IAAG,CAACI,EAAGC,IAAM5B,KAAK6B,SAASF,EAAGC,KAGhDoc,aACI,IAAK,MAAM1Y,KAAKtF,KAAKF,QAAQyF,OAAQ,CACjC,IAAIQ,EAAI/F,KAAKye,OAAOrN,IAAI9L,GACnBS,IACDA,EAAI,IAAI4X,EAAkB3d,KAAKc,GAAIwE,GACnCtF,KAAKye,OAAOpY,IAAIf,EAAGS,IAEvBA,EAAEiY,cAIVvc,eACIzB,KAAK0e,YAAc1e,KAAKM,MAAQN,KAAKF,QAAQwC,kBAAoBtC,KAAKF,QAAQ0C,mBAC9ExC,KAAK2e,aAAe3e,KAAKO,OAASP,KAAKF,QAAQ2C,iBAAmBzC,KAAKF,QAAQyC,oBAE/E,MAAMG,GF1aamC,EE0aW7E,KAAK0e,YF1ab3Z,EE0a0B/E,KAAK2e,cFzavD9H,EAAM,IAAIC,EAAoB,IAC9B,GAAKjS,EACTgS,EAAI,GAAK9R,EACF8R,GAJF,IAAoBhS,EAAGE,EACxB8R,GAmFC,SAAgBA,EAAK9Q,EAAGtG,GAC7BoX,EAAI,GAAK9Q,EAAE,GAAKtG,EAAE,GAClBoX,EAAI,GAAK9Q,EAAE,GAAKtG,EAAE,GEqVZmf,CAAYlc,EAAO,CAAC,EAAI,GAAKA,GAC7B1C,KAAKc,GAAG+d,WAAW7e,KAAKiY,QAAQoB,UAAUG,iBAAkB9W,GAGhEb,SAASvB,EAAeC,GACpBP,KAAKO,OAASA,EACdP,KAAKM,MAAQA,EAGjBke,oBACIxe,KAAKge,aACLhe,KAAK8e,aACL,MAAMhe,EAAKd,KAAKc,GAChB,IAAK,MAAOie,EAAIxY,KAAQvG,KAAKye,OAAQ,CACjC,IAAKM,EAAGtZ,QACJ,SAEJ,MAAMrG,EAAQD,YAAiB4f,EAAG3f,qBAASY,KAAKF,QAAQV,OACxD0B,EAAGke,WAAWhf,KAAKiY,QAAQoB,UAAUK,OAAQta,GAE7C,MAAMmL,YAAYwU,EAAGxU,yBAAavK,KAAKF,QAAQyK,UAC/CzJ,EAAGme,UAAUjf,KAAKiY,QAAQoB,UAAUI,WAAYlP,EAAY,GAE5D,MAAM0T,EAAe,CACjBvX,IAAK1G,KAAKD,MAAMqF,OAAOC,OAAOrF,KAAKF,QAAQwC,kBAAoBiI,EAAY,GAC3E/D,IAAKxG,KAAKD,MAAMqF,OAAOC,OAAOrF,KAAKM,MAAQN,KAAKF,QAAQ0C,mBAAqB+H,EAAY,IAE7FhE,EAAI8W,KAAKY,GAEb,GAAIje,KAAKF,QAAQ6K,WAAY,CACzB,MAAMuU,EAAMpe,EAAGqe,WACf,GAAID,GAAOpe,EAAGse,SACV,MAAM,IAAIle,MAAM,eAAege,MAKnCG,WAAWzY,GACf,OAAQA,EAAI5G,KAAK2e,aAAe,EAAI3e,KAAKF,QAAQ2C,iBAG7C6c,WAAW1Y,GACf,OAAOA,EAAI5G,KAAK0e,YAAc,EAAI1e,KAAKF,QAAQwC,kBAGnDwc,aACI9e,KAAKyB,eACL,MAAM8d,EAAIvf,KAAKD,MACTe,EAAKd,KAAKc,GAEV0e,EAAO,CAACxf,KAAKsf,WAAWC,EAAEna,OAAO,IAAKpF,KAAKqf,WAAWE,EAAEtY,OAAO,KAC/DwY,EAAM,CAACzf,KAAKsf,WAAWC,EAAEna,OAAO,IAAKpF,KAAKqf,WAAWE,EAAEtY,OAAO,KAG9DyY,EAAU,CAACD,EAAI,GAAKD,EAAK,GAAIC,EAAI,GAAKD,EAAK,IAEjD1e,EAAG+d,WAAW7e,KAAKiY,QAAQoB,UAAUC,YAAaoG,GAClD5e,EAAG+d,WAAW7e,KAAKiY,QAAQoB,UAAUE,kBAAmBiG,IAIzD,MAAMG,EAAgD,CACzDrT,MAAM8G,GACK,IAAImL,EAAkBnL,EAAMrT,MAAOqT,EAAMvH,YAAY/K,GAAIsS,EAAMtT,gBC/gBjE8f,EAIThgB,YACYigB,EACA/f,EACAC,EACA+f,GAHA9f,SAAA6f,EACA7f,aAAAF,EACAE,WAAAD,EACAC,YAAA8f,EAPJ9f,qBAAkB,IAAIuE,IASRsb,EAAIlX,QAAQyL,qBACpBC,aAAa,EAAG,GAE1B,MAAMjU,EAAQF,SAAS0I,gBAAgB,6BAA8B,SACrExI,EAAMkU,YAAc,uKAQpB,MAAM9U,EAAIU,SAAS0I,gBAAgB,6BAA8B,KACjEpJ,EAAEuU,UAAUC,IAAI,iCAChBxU,EAAEqB,YAAYT,GAEdJ,KAAK+f,UAAYvgB,EACjBQ,KAAKggB,wBAELH,EAAIlX,QAAQ9H,YAAYrB,GAExBsgB,EAAOxe,QAAQC,IAAG,IAAMvB,KAAKggB,0BAGjCA,gCACI,MAAM7L,EAAYnU,KAAK6f,IAAIlX,QAAQyL,qBACnCD,EAAUE,aAAa,EAAG,GAC1B,IAAK,MAAM/O,KAAKtF,KAAKF,QAAQyF,OAAQ,CACjC,IAAKvF,KAAKigB,gBAAgB5J,IAAI/Q,GAAI,CAC9B,MAAM4a,EAAYhgB,SAAS0I,gBAAgB,6BAA8B,UACzEsX,EAAU9f,MAAM+f,kBAAU7a,EAAElG,qBAASY,KAAKF,QAAQV,OAAOsX,WACzDwJ,EAAU9f,MAAMggB,YAAc,aAAG9a,EAAEiF,yBAAavK,KAAKF,QAAQyK,cAC7D2V,EAAUpO,UAAUmC,QAAQO,WAAWL,GACvCnU,KAAK+f,UAAUlf,YAAYqf,GAC3BlgB,KAAKigB,gBAAgB5Z,IAAIf,EAAG4a,GAEhC,MAAMA,EAAYlgB,KAAKigB,gBAAgB7O,IAAI9L,GACrC+I,EAAQrO,KAAK8f,OAAO5a,WAAWkM,IAAI9L,GACzC,GAAK+I,EAEE,CACH6R,EAAU9f,MAAM6U,WAAa,UAC7B,MAAM5I,EAAIrM,KAAKD,MAAMmG,QAAQmI,GAC7B6R,EAAUpO,UAAUmC,QAAQe,QAAQ,GAAGX,aAAahI,EAAExH,EAAGwH,EAAEtH,QAJ3Dmb,EAAU9f,MAAM6U,WAAa,WAUtC,MAAMjJ,EAA8C,CACvDM,MAAM8G,GACK,IAAIwM,EAAaxM,EAAMtH,SAAUsH,EAAMtT,QAASsT,EAAMrT,MAAOqT,EAAMpH,qBC5DrEqU,EAOTzgB,YAAoBC,EAAyBE,EAA4BD,EAC7DkM,GADQhM,QAAAH,EAAyBG,WAAAD,EAA4BC,aAAAF,EAC7DE,kBAAAgM,EAJZhM,WAAQ,IAAIuE,IAORvE,KAAK6K,QAAU3K,SAASC,cAAc,iBAEtC,MAAM8V,EAAKjW,KAAK6K,QAAQzK,MACxB6V,EAAG5V,SAAW,WACd4V,EAAGhB,WAAa,SAEhB,MAAMiB,EAAalW,KAAK6K,QAAQa,aAAa,CAAEC,KAAM,SAE/CvL,EAAQF,SAASC,cAAc,SACrCC,EAAMkU,YAAc,8mBAoCpB4B,EAAWrV,YAAYT,GAGvB,MAAMkgB,EAAQpgB,SAASC,cAAc,SAErCH,KAAKugB,MAAQvgB,KAAKwgB,mBAAmBxgB,KAAKF,QAAQgL,eAClDwV,EAAMzf,YAAYb,KAAKugB,MAAMjK,MAE7BJ,EAAWrV,YAAYyf,GAEvBtgB,KAAKmW,cAAgBmK,EACrBtgB,KAAKwH,SACL3H,EAAGe,WAAYC,YAAYb,KAAK6K,SAEhC9K,EAAMuB,QAAQC,IAAG,IAAMvB,KAAKwH,WAE5BzH,EAAM+B,UAAUP,IAAG,KACf1B,EAAGe,WAAYmB,YAAY/B,KAAK6K,YAGpCmB,EAAa1K,QAAQC,IAAG,KACpB,IAAKzB,EAAQ+K,SAA2C,GAAhCmB,EAAa9G,WAAWub,KAE5C,YADAxK,EAAGhB,WAAa,UAIpBgB,EAAGhB,WAAa,UAEhB,MAAM5I,EAAIL,EAAapH,eACjB8b,EAAc1gB,KAAK6K,QAAQlG,wBACjC,IAAInE,EAAO6L,EAAExH,EAAI6b,EAAYpgB,MA7Eb,GA8EZI,EAAM2L,EAAEtH,EAAI2b,EAAYngB,OA9EZ,GAgFZC,EAAO,IACPA,EAAO6L,EAAExH,EAjFG,IAmFZnE,EAAM,IACNA,EAAM2L,EAAEtH,EApFI,IAsFhBkR,EAAGzV,KAAOA,EAAO,KACjByV,EAAGvV,IAAMA,EAAM,KAGf,IAAIigB,EAAqBC,OAAOC,kBAC5BC,EAA6B,KACjC,IAAK,MAAOxb,EAAGM,KAAMoG,EAAa9G,WAAY,CAC1C,MAAM6b,EAAKhhB,EAAMmG,QAAQN,GACnBob,EAAKD,EAAGlc,EAAIwH,EAAExH,EACdoc,EAAKF,EAAGhc,EAAIsH,EAAEtH,EACdmc,EAAMtd,KAAKoT,KAAKgK,EAAKA,EAAKC,EAAKA,GACjCC,EAAMP,IACNA,EAAqBO,EACrBJ,EAAclb,EAAEf,GAGxB7E,KAAKugB,MAAMjd,MAAMgR,YAAcwM,EAAaK,iBAE5C,IAAK,MAAM7b,KAAKtF,KAAKF,QAAQyF,OAAQ,CACjC,IAAKD,EAAEG,QACH,SAEJ,IAAI4I,EAAQrC,EAAa9G,WAAWkM,IAAI9L,GACpCgR,EAAOtW,KAAKmI,MAAMiJ,IAAI9L,GACtBgR,GAAQjI,IACRiI,EAAKhT,MAAMgR,YAAcjG,EAAMtJ,EAAEoc,iBACjC7K,EAAKA,KAAKvC,UAAU0C,OAAO,gBAAiBpI,EAAMxJ,IAAMic,QAMhEN,mBAAmBY,GACvB,MAAM9K,EAAOpW,SAASC,cAAc,MACpCmW,EAAKC,UAAY,OACjB,MAAM8K,EAAYnhB,SAASC,cAAc,MACnCqW,EAAUtW,SAASC,cAAc,OACvCqW,EAAQD,UAAY,UACpB8K,EAAUxgB,YAAY2V,GACtBF,EAAKzV,YAAYwgB,GACjB,MAAMrW,EAAO9K,SAASC,cAAc,MACpC6K,EAAKuL,UAAY,OACjBvL,EAAKsJ,YAAc8M,EACnB9K,EAAKzV,YAAYmK,GACjB,MAAM1H,EAAQpD,SAASC,cAAc,MAIrC,OAHAmD,EAAMiT,UAAY,QAClBD,EAAKzV,YAAYyC,GAEV,CAAEgT,KAAAA,EAAME,QAAAA,EAASxL,KAAAA,EAAM1H,MAAAA,GAGlCkE,eACI,IAAK,MAAMlC,KAAKtF,KAAKF,QAAQyF,OAAQ,CACjC,IAAKvF,KAAKmI,MAAMkO,IAAI/Q,GAAI,CACpB,MAAMgc,EAAethB,KAAKwgB,mBAAmBlb,EAAE0F,MAC/ChL,KAAKmW,cAActV,YAAYygB,EAAahL,MAC5CtW,KAAKmI,MAAM9B,IAAIf,EAAGgc,GAGtB,MAAMhL,EAAOtW,KAAKmI,MAAMiJ,IAAI9L,GAC5BgR,EAAKE,QAAQpW,MAAMgB,2BAAmBkE,EAAElG,qBAASY,KAAKF,QAAQV,OAAOsX,WACrEJ,EAAKA,KAAKlW,MAAMgW,QAAU9Q,EAAEG,QAAU,GAAK,SAKhD,MAAMoF,GAAoC,CAC7CyB,MAAM8G,GACK,IAAIiN,EAAQjN,EAAMvT,GAAIuT,EAAMrT,MAAOqT,EAAMtT,QAASsT,EAAMpH,qBCrIlDb,WAA8DoW,EAe/E3hB,YAAmBC,EAAiBC,GAChCiJ,MAAMlJ,EAjCd,SAAuEC,SACnE,MAAMqC,EAAIrC,MAAAA,EAAAA,EAAW,CAACoM,aAASzC,EAAWuI,UAAMvI,GAChD,OAAOL,+BACAtJ,IACHoM,iDACQ/J,EAAE+J,uBAAW,KACjByT,UAAAA,EACAzK,OAAAA,EACAtB,UAAAA,EACA5H,aAAAA,EACApB,OAAAA,EACAoH,KAAM,IAAI2B,EAAoBxR,EAAE6P,MAChCnH,QAAAA,OAqBM2W,CAA4B1hB,IADvBE,QAAAH,EAFfC,cAA6B,OAAOE,KAAKiM,iBAXtCd,QAAOoW,EACPpW,WAAU,CACbwU,UAAAA,EACAzK,OAAAA,EACAtB,UAAAA,EACA5H,aAAAA,EACApB,OAAAA,EACA+I,oBAAAA,EACA9I,QAAAA"} \ No newline at end of file diff --git a/templates/index.htm b/templates/index.htm index 9d4089d..0242fe9 100644 --- a/templates/index.htm +++ b/templates/index.htm @@ -2,16 +2,16 @@ Real time streaming - - - - - - - - - - + + + + + + + + + + @@ -30,6 +30,7 @@ let x = 0; ws.onmessage = function(event) { const measurement = JSON.parse(event.data); + console.log("ws.onmessage:",measurement) x += 1 dataPoints.push({x, y: measurement.value}); chart.update();