@genome-spy/core 0.18.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +44 -117
- package/dist/schema.json +0 -4
- package/package.json +3 -2
- package/src/data/collector.js +9 -4
- package/src/data/collector.test.js +2 -0
- package/src/data/dataFlow.test.js +2 -0
- package/src/data/flow.test.js +1 -0
- package/src/data/flowNode.test.js +1 -0
- package/src/data/flowOptimizer.js +6 -0
- package/src/data/flowOptimizer.test.js +1 -0
- package/src/data/formats/fasta.test.js +1 -0
- package/src/data/sources/inlineSource.test.js +1 -0
- package/src/data/sources/sequenceSource.test.js +1 -0
- package/src/data/transforms/clone.test.js +1 -0
- package/src/data/transforms/coverage.test.js +1 -0
- package/src/data/transforms/filter.test.js +1 -0
- package/src/data/transforms/flattenDelimited.test.js +1 -0
- package/src/data/transforms/flattenSequence.test.js +1 -0
- package/src/data/transforms/formula.test.js +1 -0
- package/src/data/transforms/identifier.test.js +1 -0
- package/src/data/transforms/pileup.test.js +1 -0
- package/src/data/transforms/project.test.js +1 -0
- package/src/data/transforms/regexExtract.test.js +1 -0
- package/src/data/transforms/regexFold.test.js +1 -0
- package/src/data/transforms/sample.test.js +1 -0
- package/src/data/transforms/stack.test.js +1 -0
- package/src/encoder/accessor.test.js +1 -0
- package/src/encoder/encoder.test.js +1 -0
- package/src/genome/genome.js +14 -2
- package/src/genome/genome.test.js +36 -0
- package/src/genome/scaleIndex.js +3 -2
- package/src/genome/scaleIndex.test.js +23 -6
- package/src/genome/scaleLocus.test.js +1 -0
- package/src/gl/dataToVertices.js +9 -6
- package/src/gl/includes/common.glsl +3 -3
- package/src/gl/includes/scales.glsl +33 -2
- package/src/gl/point.vertex.glsl +0 -2
- package/src/gl/rule.vertex.glsl +1 -1
- package/src/gl/webGLHelper.js +0 -3
- package/src/marks/mark.js +10 -13
- package/src/scale/glslScaleGenerator.js +56 -17
- package/src/scale/scale.test.js +1 -0
- package/src/scale/ticks.test.js +1 -0
- package/src/spec/scale.d.ts +0 -9
- package/src/utils/addBaseUrl.test.js +1 -0
- package/src/utils/cloner.test.js +1 -0
- package/src/utils/coalesce.test.js +1 -0
- package/src/utils/concatIterables.test.js +1 -0
- package/src/utils/domainArray.test.js +1 -0
- package/src/utils/indexer.test.js +1 -0
- package/src/utils/iterateNestedMaps.test.js +1 -0
- package/src/utils/kWayMerge.test.js +1 -0
- package/src/utils/layout/flexLayout.test.js +1 -0
- package/src/utils/layout/rectangle.test.js +1 -0
- package/src/utils/mergeObjects.test.js +1 -0
- package/src/utils/numberExtractor.test.js +1 -0
- package/src/utils/propertyCacher.test.js +1 -0
- package/src/utils/propertyCoalescer.test.js +1 -0
- package/src/utils/reservationMap.test.js +1 -0
- package/src/utils/topK.test.js +1 -0
- package/src/utils/variableTools.test.js +1 -0
- package/src/view/axisResolution.test.js +1 -0
- package/src/view/flowBuilder.test.js +1 -0
- package/src/view/scaleResolution.js +5 -11
- package/src/view/scaleResolution.test.js +1 -0
- package/src/view/unitView.js +8 -4
- package/src/view/view.test.js +1 -0
- package/src/view/viewFactory.test.js +1 -0
- package/src/gl/includes/fp64-arithmetic.glsl +0 -187
- package/src/gl/includes/fp64-utils.js +0 -142
- package/src/gl/includes/scales_fp64.glsl +0 -30
package/dist/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
var
|
|
2
|
-
\r]`),n=t.charCodeAt(0);function r(
|
|
3
|
-
`)}function a(
|
|
4
|
-
`)}function u(
|
|
5
|
-
`)}function c(f){return f.map(l).join(t)}function l(f){return f==null?"":f instanceof Date?md(f):e.test(f+="")?'"'+f.replace(/"/g,'""')+'"':f}return{parse:r,parseRows:i,format:o,formatBody:a,formatRows:u,formatRow:c,formatValue:l}}var Ad=du(" "),xd=Ad.parseRows;function yd(t){return t}function bd(t){if(t==null)return yd;var e,n,r=t.scale[0],i=t.scale[1],s=t.translate[0],o=t.translate[1];return function(a,u){u||(e=n=0);var c=2,l=a.length,f=new Array(l);for(f[0]=(e+=a[0])*r+s,f[1]=(n+=a[1])*i+o;c<l;)f[c]=a[c],++c;return f}}function wd(t,e){for(var n,r=t.length,i=r-e;i<--r;)n=t[i],t[i++]=t[r],t[r]=n}function vd(t,e){return typeof e=="string"&&(e=t.objects[e]),e.type==="GeometryCollection"?{type:"FeatureCollection",features:e.geometries.map(function(n){return pu(t,n)})}:pu(t,e)}function pu(t,e){var n=e.id,r=e.bbox,i=e.properties==null?{}:e.properties,s=gu(t,e);return n==null&&r==null?{type:"Feature",properties:i,geometry:s}:r==null?{type:"Feature",id:n,properties:i,geometry:s}:{type:"Feature",id:n,bbox:r,properties:i,geometry:s}}function gu(t,e){var n=bd(t.transform),r=t.arcs;function i(l,f){f.length&&f.pop();for(var h=r[l<0?~l:l],p=0,d=h.length;p<d;++p)f.push(n(h[p],p));l<0&&wd(f,d)}function s(l){return n(l)}function o(l){for(var f=[],h=0,p=l.length;h<p;++h)i(l[h],f);return f.length<2&&f.push(f[0]),f}function a(l){for(var f=o(l);f.length<4;)f.push(f[0]);return f}function u(l){return l.map(a)}function c(l){var f=l.type,h;switch(f){case"GeometryCollection":return{type:f,geometries:l.geometries.map(c)};case"Point":h=s(l.coordinates);break;case"MultiPoint":h=l.coordinates.map(s);break;case"LineString":h=o(l.arcs);break;case"MultiLineString":h=l.arcs.map(o);break;case"Polygon":h=u(l.arcs);break;case"MultiPolygon":h=l.arcs.map(u);break;default:return null}return{type:f,coordinates:h}}return c(e)}function Ed(t,e){var n={},r={},i={},s=[],o=-1;e.forEach(function(c,l){var f=t.arcs[c<0?~c:c],h;f.length<3&&!f[1][0]&&!f[1][1]&&(h=e[++o],e[o]=c,e[l]=h)}),e.forEach(function(c){var l=a(c),f=l[0],h=l[1],p,d;if(p=i[f])if(delete i[p.end],p.push(c),p.end=h,d=r[h]){delete r[d.start];var g=d===p?p:p.concat(d);r[g.start=p.start]=i[g.end=d.end]=g}else r[p.start]=i[p.end]=p;else if(p=r[h])if(delete r[p.start],p.unshift(c),p.start=f,d=i[f]){delete i[d.end];var m=d===p?p:d.concat(p);r[m.start=d.start]=i[m.end=p.end]=m}else r[p.start]=i[p.end]=p;else p=[c],r[p.start=f]=i[p.end=h]=p});function a(c){var l=t.arcs[c<0?~c:c],f=l[0],h;return t.transform?(h=[0,0],l.forEach(function(p){h[0]+=p[0],h[1]+=p[1]})):h=l[l.length-1],c<0?[h,f]:[f,h]}function u(c,l){for(var f in c){var h=c[f];delete l[h.start],delete h.start,delete h.end,h.forEach(function(p){n[p<0?~p:p]=1}),s.push(h)}}return u(i,r),u(r,i),e.forEach(function(c){n[c<0?~c:c]||s.push([c])}),s}function Cd(t){return gu(t,Dd.apply(this,arguments))}function Dd(t,e,n){var r,i,s;if(arguments.length>1)r=Sd(t,e,n);else for(i=0,r=new Array(s=t.arcs.length);i<s;++i)r[i]=i;return{type:"MultiLineString",arcs:Ed(t,r)}}function Sd(t,e,n){var r=[],i=[],s;function o(f){var h=f<0?~f:f;(i[h]||(i[h]=[])).push({i:f,g:s})}function a(f){f.forEach(o)}function u(f){f.forEach(a)}function c(f){f.forEach(u)}function l(f){switch(s=f,f.type){case"GeometryCollection":f.geometries.forEach(l);break;case"LineString":a(f.arcs);break;case"MultiLineString":case"Polygon":u(f.arcs);break;case"MultiPolygon":c(f.arcs);break}}return l(e),i.forEach(n==null?function(f){r.push(f[0].i)}:function(f){n(f[0].g,f[f.length-1].g)&&r.push(f[0].i)}),r}function ys(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function bs(t){let e=t,n=t;t.length===1&&(e=(o,a)=>t(o)-a,n=Md(t));function r(o,a,u,c){for(u==null&&(u=0),c==null&&(c=o.length);u<c;){const l=u+c>>>1;n(o[l],a)<0?u=l+1:c=l}return u}function i(o,a,u,c){for(u==null&&(u=0),c==null&&(c=o.length);u<c;){const l=u+c>>>1;n(o[l],a)>0?c=l:u=l+1}return u}function s(o,a,u,c){u==null&&(u=0),c==null&&(c=o.length);const l=r(o,a,u,c-1);return l>u&&e(o[l-1],a)>-e(o[l],a)?l-1:l}return{left:r,center:s,right:i}}function Md(t){return(e,n)=>ys(t(e),n)}function mu(t){return t===null?NaN:+t}const ws=bs(ys).right;bs(mu).center;var Tn=ws,vs=Math.sqrt(50),Es=Math.sqrt(10),Cs=Math.sqrt(2);function Ds(t,e,n){var r,i=-1,s,o,a;if(e=+e,t=+t,n=+n,t===e&&n>0)return[t];if((r=e<t)&&(s=t,t=e,e=s),(a=Au(t,e,n))===0||!isFinite(a))return[];if(a>0){let u=Math.round(t/a),c=Math.round(e/a);for(u*a<t&&++u,c*a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)*a}else{a=-a;let u=Math.round(t*a),c=Math.round(e*a);for(u/a<t&&++u,c/a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)/a}return r&&o.reverse(),o}function Au(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),s=r/Math.pow(10,i);return i>=0?(s>=vs?10:s>=Es?5:s>=Cs?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(s>=vs?10:s>=Es?5:s>=Cs?2:1)}function Xr(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),s=r/i;return s>=vs?i*=10:s>=Es?i*=5:s>=Cs&&(i*=2),e<t?-i:i}function Bd(t,e,n=mu){if(!!(r=t.length)){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,s=Math.floor(i),o=+n(t[s],s,t),a=+n(t[s+1],s+1,t);return o+(a-o)*(i-s)}}function Fd(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,s=new Array(i);++r<i;)s[r]=t+r*n;return s}function Id(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Zr(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function $t(t){return t=Zr(Math.abs(t)),t?t[1]:NaN}function Td(t,e){return function(n,r){for(var i=n.length,s=[],o=0,a=t[0],u=0;i>0&&a>0&&(u+a+1>r&&(a=Math.max(1,r-u)),s.push(n.substring(i-=a,i+a)),!((u+=a+1)>r));)a=t[o=(o+1)%t.length];return s.reverse().join(e)}}function Pd(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var Ld=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function en(t){if(!(e=Ld.exec(t)))throw new Error("invalid format: "+t);var e;return new Ss({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}en.prototype=Ss.prototype;function Ss(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}Ss.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Rd(t){e:for(var e=t.length,n=1,r=-1,i;n<e;++n)switch(t[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+t[n])break e;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var xu;function Nd(t,e){var n=Zr(t,e);if(!n)return t+"";var r=n[0],i=n[1],s=i-(xu=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return s===o?r:s>o?r+new Array(s-o+1).join("0"):s>0?r.slice(0,s)+"."+r.slice(s):"0."+new Array(1-s).join("0")+Zr(t,Math.max(0,e+s-1))[0]}function yu(t,e){var n=Zr(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}var bu={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:Id,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>yu(t*100,e),r:yu,s:Nd,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function wu(t){return t}var vu=Array.prototype.map,Eu=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function kd(t){var e=t.grouping===void 0||t.thousands===void 0?wu:Td(vu.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",s=t.numerals===void 0?wu:Pd(vu.call(t.numerals,String)),o=t.percent===void 0?"%":t.percent+"",a=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function c(f){f=en(f);var h=f.fill,p=f.align,d=f.sign,g=f.symbol,m=f.zero,A=f.width,b=f.comma,y=f.precision,v=f.trim,D=f.type;D==="n"?(b=!0,D="g"):bu[D]||(y===void 0&&(y=12),v=!0,D="g"),(m||h==="0"&&p==="=")&&(m=!0,h="0",p="=");var C=g==="$"?n:g==="#"&&/[boxX]/.test(D)?"0"+D.toLowerCase():"",F=g==="$"?r:/[%p]/.test(D)?o:"",S=bu[D],le=/[defgprs%]/.test(D);y=y===void 0?6:/[gprs]/.test(D)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y));function se(E){var oe=C,z=F,pe,Jt,He;if(D==="c")z=S(E)+z,E="";else{E=+E;var Ve=E<0||1/E<0;if(E=isNaN(E)?u:S(Math.abs(E),y),v&&(E=Rd(E)),Ve&&+E==0&&d!=="+"&&(Ve=!1),oe=(Ve?d==="("?d:a:d==="-"||d==="("?"":d)+oe,z=(D==="s"?Eu[8+xu/3]:"")+z+(Ve&&d==="("?")":""),le){for(pe=-1,Jt=E.length;++pe<Jt;)if(He=E.charCodeAt(pe),48>He||He>57){z=(He===46?i+E.slice(pe+1):E.slice(pe))+z,E=E.slice(0,pe);break}}}b&&!m&&(E=e(E,1/0));var Qe=oe.length+E.length+z.length,Z=Qe<A?new Array(A-Qe+1).join(h):"";switch(b&&m&&(E=e(Z+E,Z.length?A-z.length:1/0),Z=""),p){case"<":E=oe+E+z+Z;break;case"=":E=oe+Z+E+z;break;case"^":E=Z.slice(0,Qe=Z.length>>1)+oe+E+z+Z.slice(Qe);break;default:E=Z+oe+E+z;break}return s(E)}return se.toString=function(){return f+""},se}function l(f,h){var p=c((f=en(f),f.type="f",f)),d=Math.max(-8,Math.min(8,Math.floor($t(h)/3)))*3,g=Math.pow(10,-d),m=Eu[8+d/3];return function(A){return p(g*A)+m}}return{format:c,formatPrefix:l}}var Kr,qr,Ms;Od({thousands:",",grouping:[3],currency:["$",""]});function Od(t){return Kr=kd(t),qr=Kr.format,Ms=Kr.formatPrefix,Kr}function Cu(t){return Math.max(0,-$t(Math.abs(t)))}function Du(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor($t(e)/3)))*3-$t(Math.abs(t)))}function Su(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,$t(e)-$t(t))+1}var Bs=new Date,Fs=new Date;function _(t,e,n,r){function i(s){return t(s=arguments.length===0?new Date:new Date(+s)),s}return i.floor=function(s){return t(s=new Date(+s)),s},i.ceil=function(s){return t(s=new Date(s-1)),e(s,1),t(s),s},i.round=function(s){var o=i(s),a=i.ceil(s);return s-o<a-s?o:a},i.offset=function(s,o){return e(s=new Date(+s),o==null?1:Math.floor(o)),s},i.range=function(s,o,a){var u=[],c;if(s=i.ceil(s),a=a==null?1:Math.floor(a),!(s<o)||!(a>0))return u;do u.push(c=new Date(+s)),e(s,a),t(s);while(c<s&&s<o);return u},i.filter=function(s){return _(function(o){if(o>=o)for(;t(o),!s(o);)o.setTime(o-1)},function(o,a){if(o>=o)if(a<0)for(;++a<=0;)for(;e(o,-1),!s(o););else for(;--a>=0;)for(;e(o,1),!s(o););})},n&&(i.count=function(s,o){return Bs.setTime(+s),Fs.setTime(+o),t(Bs),t(Fs),Math.floor(n(Bs,Fs))},i.every=function(s){return s=Math.floor(s),!isFinite(s)||!(s>0)?null:s>1?i.filter(r?function(o){return r(o)%s===0}:function(o){return i.count(0,o)%s===0}):i}),i}var Is=_(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});Is.every=function(t){return t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?_(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):Is};var Ts=Is;const it=1e3,Fe=it*60,st=Fe*60,Lt=st*24,Ps=Lt*7,Mu=Lt*30,Ls=Lt*365;var zd=_(function(t){t.setTime(t-t.getMilliseconds())},function(t,e){t.setTime(+t+e*it)},function(t,e){return(e-t)/it},function(t){return t.getUTCSeconds()}),pt=zd,Ud=_(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*it)},function(t,e){t.setTime(+t+e*Fe)},function(t,e){return(e-t)/Fe},function(t){return t.getMinutes()}),Rs=Ud,Gd=_(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*it-t.getMinutes()*Fe)},function(t,e){t.setTime(+t+e*st)},function(t,e){return(e-t)/st},function(t){return t.getHours()}),Ns=Gd,Hd=_(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Fe)/Lt,t=>t.getDate()-1),Rt=Hd;function Nt(t){return _(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(e,n){e.setDate(e.getDate()+n*7)},function(e,n){return(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*Fe)/Ps})}var Jr=Nt(0),ks=Nt(1);Nt(2),Nt(3);var Pn=Nt(4);Nt(5),Nt(6);var Vd=_(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12},function(t){return t.getMonth()}),_r=Vd,Bu=_(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});Bu.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:_(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,n){e.setFullYear(e.getFullYear()+n*t)})};var gt=Bu,Qd=_(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*Fe)},function(t,e){return(e-t)/Fe},function(t){return t.getUTCMinutes()}),Os=Qd,jd=_(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+e*st)},function(t,e){return(e-t)/st},function(t){return t.getUTCHours()}),zs=jd,Yd=_(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/Lt},function(t){return t.getUTCDate()-1}),kt=Yd;function Ot(t){return _(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCDate(e.getUTCDate()+n*7)},function(e,n){return(n-e)/Ps})}var $r=Ot(0),Us=Ot(1);Ot(2),Ot(3);var Ln=Ot(4);Ot(5),Ot(6);var Wd=_(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12},function(t){return t.getUTCMonth()}),ei=Wd,Fu=_(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});Fu.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:_(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})};var mt=Fu;function Iu(t,e,n,r,i,s){const o=[[pt,1,it],[pt,5,5*it],[pt,15,15*it],[pt,30,30*it],[s,1,Fe],[s,5,5*Fe],[s,15,15*Fe],[s,30,30*Fe],[i,1,st],[i,3,3*st],[i,6,6*st],[i,12,12*st],[r,1,Lt],[r,2,2*Lt],[n,1,Ps],[e,1,Mu],[e,3,3*Mu],[t,1,Ls]];function a(c,l,f){const h=l<c;h&&([c,l]=[l,c]);const p=f&&typeof f.range=="function"?f:u(c,l,f),d=p?p.range(c,+l+1):[];return h?d.reverse():d}function u(c,l,f){const h=Math.abs(l-c)/f,p=bs(([,,m])=>m).right(o,h);if(p===o.length)return t.every(Xr(c/Ls,l/Ls,f));if(p===0)return Ts.every(Math.max(Xr(c,l,f),1));const[d,g]=o[h/o[p-1][2]<o[p][2]/h?p-1:p];return d.every(g)}return[a,u]}const[Xd,Zd]=Iu(mt,ei,$r,kt,zs,Os),[Kd,qd]=Iu(gt,_r,Jr,Rt,Ns,Rs),Rn="year",Nn="quarter",kn="month",On="week",zn="date",ti="day",Gs="dayofyear",Un="hours",Gn="minutes",Hn="seconds",ni="milliseconds";[Rn,Nn,kn,On,zn,ti,Gs,Un,Gn,Hn,ni].reduce((t,e,n)=>(t[e]=1+n,t),{});const Jd={[Rn]:gt,[Nn]:_r.every(3),[kn]:_r,[On]:Jr,[zn]:Rt,[ti]:Rt,[Gs]:Rt,[Un]:Ns,[Gn]:Rs,[Hn]:pt,[ni]:Ts},_d={[Rn]:mt,[Nn]:ei.every(3),[kn]:ei,[On]:$r,[zn]:kt,[ti]:kt,[Gs]:kt,[Un]:zs,[Gn]:Os,[Hn]:pt,[ni]:Ts};function $d(t){return Jd[t]}function ep(t){return _d[t]}function Hs(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Vs(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Vn(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function Tu(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,s=t.days,o=t.shortDays,a=t.months,u=t.shortMonths,c=Qn(i),l=jn(i),f=Qn(s),h=jn(s),p=Qn(o),d=jn(o),g=Qn(a),m=jn(a),A=Qn(u),b=jn(u),y={a:Ve,A:Qe,b:Z,B:MC,c:null,d:Ou,e:Ou,f:Ep,g:Lp,G:Np,H:bp,I:wp,j:vp,L:zu,m:Cp,M:Dp,p:BC,q:FC,Q:ju,s:Yu,S:Sp,u:Mp,U:Bp,V:Fp,w:Ip,W:Tp,x:null,X:null,y:Pp,Y:Rp,Z:kp,"%":Qu},v={a:IC,A:TC,b:PC,B:LC,c:null,d:Gu,e:Gu,f:Gp,g:qp,G:_p,H:Op,I:zp,j:Up,L:Hu,m:Hp,M:Vp,p:RC,q:NC,Q:ju,s:Yu,S:Qp,u:jp,U:Yp,V:Wp,w:Xp,W:Zp,x:null,X:null,y:Kp,Y:Jp,Z:$p,"%":Qu},D={a:se,A:E,b:oe,B:z,c:pe,d:Nu,e:Nu,f:mp,g:Ru,G:Lu,H:ku,I:ku,j:hp,L:gp,m:lp,M:dp,p:le,q:fp,Q:xp,s:yp,S:pp,u:sp,U:op,V:ap,w:ip,W:up,x:Jt,X:He,y:Ru,Y:Lu,Z:cp,"%":Ap};y.x=C(n,y),y.X=C(r,y),y.c=C(e,y),v.x=C(n,v),v.X=C(r,v),v.c=C(e,v);function C(B,P){return function(N){var w=[],ve=-1,G=0,Ce=B.length,De,_t,Hh;for(N instanceof Date||(N=new Date(+N));++ve<Ce;)B.charCodeAt(ve)===37&&(w.push(B.slice(G,ve)),(_t=Pu[De=B.charAt(++ve)])!=null?De=B.charAt(++ve):_t=De==="e"?" ":"0",(Hh=P[De])&&(De=Hh(N,_t)),w.push(De),G=ve+1);return w.push(B.slice(G,ve)),w.join("")}}function F(B,P){return function(N){var w=Vn(1900,void 0,1),ve=S(w,B,N+="",0),G,Ce;if(ve!=N.length)return null;if("Q"in w)return new Date(w.Q);if("s"in w)return new Date(w.s*1e3+("L"in w?w.L:0));if(P&&!("Z"in w)&&(w.Z=0),"p"in w&&(w.H=w.H%12+w.p*12),w.m===void 0&&(w.m="q"in w?w.q:0),"V"in w){if(w.V<1||w.V>53)return null;"w"in w||(w.w=1),"Z"in w?(G=Vs(Vn(w.y,0,1)),Ce=G.getUTCDay(),G=Ce>4||Ce===0?Us.ceil(G):Us(G),G=kt.offset(G,(w.V-1)*7),w.y=G.getUTCFullYear(),w.m=G.getUTCMonth(),w.d=G.getUTCDate()+(w.w+6)%7):(G=Hs(Vn(w.y,0,1)),Ce=G.getDay(),G=Ce>4||Ce===0?ks.ceil(G):ks(G),G=Rt.offset(G,(w.V-1)*7),w.y=G.getFullYear(),w.m=G.getMonth(),w.d=G.getDate()+(w.w+6)%7)}else("W"in w||"U"in w)&&("w"in w||(w.w="u"in w?w.u%7:"W"in w?1:0),Ce="Z"in w?Vs(Vn(w.y,0,1)).getUTCDay():Hs(Vn(w.y,0,1)).getDay(),w.m=0,w.d="W"in w?(w.w+6)%7+w.W*7-(Ce+5)%7:w.w+w.U*7-(Ce+6)%7);return"Z"in w?(w.H+=w.Z/100|0,w.M+=w.Z%100,Vs(w)):Hs(w)}}function S(B,P,N,w){for(var ve=0,G=P.length,Ce=N.length,De,_t;ve<G;){if(w>=Ce)return-1;if(De=P.charCodeAt(ve++),De===37){if(De=P.charAt(ve++),_t=D[De in Pu?P.charAt(ve++):De],!_t||(w=_t(B,N,w))<0)return-1}else if(De!=N.charCodeAt(w++))return-1}return w}function le(B,P,N){var w=c.exec(P.slice(N));return w?(B.p=l.get(w[0].toLowerCase()),N+w[0].length):-1}function se(B,P,N){var w=p.exec(P.slice(N));return w?(B.w=d.get(w[0].toLowerCase()),N+w[0].length):-1}function E(B,P,N){var w=f.exec(P.slice(N));return w?(B.w=h.get(w[0].toLowerCase()),N+w[0].length):-1}function oe(B,P,N){var w=A.exec(P.slice(N));return w?(B.m=b.get(w[0].toLowerCase()),N+w[0].length):-1}function z(B,P,N){var w=g.exec(P.slice(N));return w?(B.m=m.get(w[0].toLowerCase()),N+w[0].length):-1}function pe(B,P,N){return S(B,e,P,N)}function Jt(B,P,N){return S(B,n,P,N)}function He(B,P,N){return S(B,r,P,N)}function Ve(B){return o[B.getDay()]}function Qe(B){return s[B.getDay()]}function Z(B){return u[B.getMonth()]}function MC(B){return a[B.getMonth()]}function BC(B){return i[+(B.getHours()>=12)]}function FC(B){return 1+~~(B.getMonth()/3)}function IC(B){return o[B.getUTCDay()]}function TC(B){return s[B.getUTCDay()]}function PC(B){return u[B.getUTCMonth()]}function LC(B){return a[B.getUTCMonth()]}function RC(B){return i[+(B.getUTCHours()>=12)]}function NC(B){return 1+~~(B.getUTCMonth()/3)}return{format:function(B){var P=C(B+="",y);return P.toString=function(){return B},P},parse:function(B){var P=F(B+="",!1);return P.toString=function(){return B},P},utcFormat:function(B){var P=C(B+="",v);return P.toString=function(){return B},P},utcParse:function(B){var P=F(B+="",!0);return P.toString=function(){return B},P}}}var Pu={"-":"",_:" ","0":"0"},$=/^\s*\d+/,tp=/^%/,np=/[\\^$*+?|[\]().{}]/g;function L(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",s=i.length;return r+(s<n?new Array(n-s+1).join(e)+i:i)}function rp(t){return t.replace(np,"\\$&")}function Qn(t){return new RegExp("^(?:"+t.map(rp).join("|")+")","i")}function jn(t){return new Map(t.map((e,n)=>[e.toLowerCase(),n]))}function ip(t,e,n){var r=$.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function sp(t,e,n){var r=$.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function op(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function ap(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function up(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Lu(t,e,n){var r=$.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ru(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function cp(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function fp(t,e,n){var r=$.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function lp(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Nu(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function hp(t,e,n){var r=$.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function ku(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function dp(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function pp(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function gp(t,e,n){var r=$.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function mp(t,e,n){var r=$.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ap(t,e,n){var r=tp.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function xp(t,e,n){var r=$.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function yp(t,e,n){var r=$.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Ou(t,e){return L(t.getDate(),e,2)}function bp(t,e){return L(t.getHours(),e,2)}function wp(t,e){return L(t.getHours()%12||12,e,2)}function vp(t,e){return L(1+Rt.count(gt(t),t),e,3)}function zu(t,e){return L(t.getMilliseconds(),e,3)}function Ep(t,e){return zu(t,e)+"000"}function Cp(t,e){return L(t.getMonth()+1,e,2)}function Dp(t,e){return L(t.getMinutes(),e,2)}function Sp(t,e){return L(t.getSeconds(),e,2)}function Mp(t){var e=t.getDay();return e===0?7:e}function Bp(t,e){return L(Jr.count(gt(t)-1,t),e,2)}function Uu(t){var e=t.getDay();return e>=4||e===0?Pn(t):Pn.ceil(t)}function Fp(t,e){return t=Uu(t),L(Pn.count(gt(t),t)+(gt(t).getDay()===4),e,2)}function Ip(t){return t.getDay()}function Tp(t,e){return L(ks.count(gt(t)-1,t),e,2)}function Pp(t,e){return L(t.getFullYear()%100,e,2)}function Lp(t,e){return t=Uu(t),L(t.getFullYear()%100,e,2)}function Rp(t,e){return L(t.getFullYear()%1e4,e,4)}function Np(t,e){var n=t.getDay();return t=n>=4||n===0?Pn(t):Pn.ceil(t),L(t.getFullYear()%1e4,e,4)}function kp(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+L(e/60|0,"0",2)+L(e%60,"0",2)}function Gu(t,e){return L(t.getUTCDate(),e,2)}function Op(t,e){return L(t.getUTCHours(),e,2)}function zp(t,e){return L(t.getUTCHours()%12||12,e,2)}function Up(t,e){return L(1+kt.count(mt(t),t),e,3)}function Hu(t,e){return L(t.getUTCMilliseconds(),e,3)}function Gp(t,e){return Hu(t,e)+"000"}function Hp(t,e){return L(t.getUTCMonth()+1,e,2)}function Vp(t,e){return L(t.getUTCMinutes(),e,2)}function Qp(t,e){return L(t.getUTCSeconds(),e,2)}function jp(t){var e=t.getUTCDay();return e===0?7:e}function Yp(t,e){return L($r.count(mt(t)-1,t),e,2)}function Vu(t){var e=t.getUTCDay();return e>=4||e===0?Ln(t):Ln.ceil(t)}function Wp(t,e){return t=Vu(t),L(Ln.count(mt(t),t)+(mt(t).getUTCDay()===4),e,2)}function Xp(t){return t.getUTCDay()}function Zp(t,e){return L(Us.count(mt(t)-1,t),e,2)}function Kp(t,e){return L(t.getUTCFullYear()%100,e,2)}function qp(t,e){return t=Vu(t),L(t.getUTCFullYear()%100,e,2)}function Jp(t,e){return L(t.getUTCFullYear()%1e4,e,4)}function _p(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Ln(t):Ln.ceil(t),L(t.getUTCFullYear()%1e4,e,4)}function $p(){return"+0000"}function Qu(){return"%"}function ju(t){return+t}function Yu(t){return Math.floor(+t/1e3)}var tn,Qs,Wu,js,Xu;eg({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"]});function eg(t){return tn=Tu(t),Qs=tn.format,Wu=tn.parse,js=tn.utcFormat,Xu=tn.utcParse,tn}function Yn(t){const e={};return n=>e[n]||(e[n]=t(n))}function tg(t,e){return n=>{const r=t(n),i=r.indexOf(e);if(i<0)return r;let s=ng(r,i);const o=s<r.length?r.slice(s):"";for(;--s>i;)if(r[s]!=="0"){++s;break}return r.slice(0,s)+o}}function ng(t,e){let n=t.lastIndexOf("e"),r;if(n>0)return n;for(n=t.length;--n>e;)if(r=t.charCodeAt(n),r>=48&&r<=57)return n+1}function rg(t){const e=Yn(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(r){const i=en(r||",");if(i.precision==null){switch(i.precision=12,i.type){case"%":i.precision-=2;break;case"e":i.precision-=1;break}return tg(e(i),e(".1f")(1)[1])}else return e(i)},formatSpan(r,i,s,o){o=en(o==null?",f":o);const a=Xr(r,i,s),u=Math.max(Math.abs(r),Math.abs(i));let c;if(o.precision==null)switch(o.type){case"s":return isNaN(c=Du(a,u))||(o.precision=c),n(o,u);case"":case"e":case"g":case"p":case"r":{isNaN(c=Su(a,u))||(o.precision=c-(o.type==="e"));break}case"f":case"%":{isNaN(c=Cu(a))||(o.precision=c-(o.type==="%")*2);break}}return e(o)}}}ig();function ig(){return rg({format:qr,formatPrefix:Ms})}function Zu(t,e,n){n=n||{},Le(n)||Y("Invalid time multi-format specifier: ".concat(n));const r=e(Hn),i=e(Gn),s=e(Un),o=e(zn),a=e(On),u=e(kn),c=e(Nn),l=e(Rn),f=t(n[ni]||".%L"),h=t(n[Hn]||":%S"),p=t(n[Gn]||"%I:%M"),d=t(n[Un]||"%I %p"),g=t(n[zn]||n[ti]||"%a %d"),m=t(n[On]||"%b %d"),A=t(n[kn]||"%B"),b=t(n[Nn]||"%B"),y=t(n[Rn]||"%Y");return v=>(r(v)<v?f:i(v)<v?h:s(v)<v?p:o(v)<v?d:u(v)<v?a(v)<v?g:m:l(v)<v?c(v)<v?A:b:y)(v)}function Ku(t){const e=Yn(t.format),n=Yn(t.utcFormat);return{timeFormat:r=>X(r)?e(r):Zu(e,$d,r),utcFormat:r=>X(r)?n(r):Zu(n,ep,r),timeParse:Yn(t.parse),utcParse:Yn(t.utcParse)}}let Ys;sg();function sg(){return Ys=Ku({format:Qs,parse:Wu,utcFormat:js,utcParse:Xu})}function og(t){return Ku(Tu(t))}function ag(t){return arguments.length?Ys=og(t):Ys}const ug=/^(data:|([A-Za-z]+:)?\/\/)/,cg=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,fg=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,qu="file://";function lg(t,e){return n=>({options:n||{},sanitize:dg,load:hg,fileAccess:!!e,file:pg(e),http:mg(t)})}async function hg(t,e){const n=await this.sanitize(t,e),r=n.href;return n.localFile?this.file(r):this.http(r,e)}async function dg(t,e){e=gs({},this.options,e);const n=this.fileAccess,r={href:null};let i,s,o;const a=cg.test(t.replace(fg,""));(t==null||typeof t!="string"||!a)&&Y("Sanitize failure, invalid URI: "+Yr(t));const u=ug.test(t);return(o=e.baseURL)&&!u&&(!t.startsWith("/")&&!o.endsWith("/")&&(t="/"+t),t=o+t),s=(i=t.startsWith(qu))||e.mode==="file"||e.mode!=="http"&&!u&&n,i?t=t.slice(qu.length):t.startsWith("//")&&(e.defaultProtocol==="file"?(t=t.slice(2),s=!0):t=(e.defaultProtocol||"http")+":"+t),Object.defineProperty(r,"localFile",{value:!!s}),r.href=t,e.target&&(r.target=e.target+""),e.rel&&(r.rel=e.rel+""),e.context==="image"&&e.crossOrigin&&(r.crossOrigin=e.crossOrigin+""),r}function pg(t){return t?e=>new Promise((n,r)=>{t.readFile(e,(i,s)=>{i?r(i):n(s)})}):gg}async function gg(){Y("No file system access.")}function mg(t){return t?async function(e,n){const r=gs({},this.options.http,n),i=n&&n.response,s=await t(e,r);return s.ok?ge(s[i])?s[i]():s.text():Y(s.status+""+s.statusText)}:Ag}async function Ag(){Y("No HTTP fetch method available.")}const xg=t=>t!=null&&t===t,yg=t=>t==="true"||t==="false"||t===!0||t===!1,bg=t=>!Number.isNaN(Date.parse(t)),Ju=t=>!Number.isNaN(+t)&&!(t instanceof Date),wg=t=>Ju(t)&&Number.isInteger(+t),_u={boolean:fd,integer:Fn,number:Fn,date:hd,string:dd,unknown:Gr},ri=[yg,wg,Ju,bg],vg=["boolean","integer","number","date"];function Eg(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=ri.length,i=ri.map((s,o)=>o+1);for(let s=0,o=0,a,u;s<n;++s)for(u=e?t[s][e]:t[s],a=0;a<r;++a)if(i[a]&&xg(u)&&!ri[a](u)&&(i[a]=0,++o,o===ri.length))return"string";return vg[i.reduce((s,o)=>s===0?o:s,0)-1]}function Cg(t,e){return e.reduce((n,r)=>(n[r]=Eg(t,r),n),{})}function $u(t){const e=function(n,r){const i={delimiter:t};return Ws(n,r?gs(r,i):i)};return e.responseType="text",e}function Ws(t,e){return e.header&&(t=e.header.map(Yr).join(e.delimiter)+`
|
|
6
|
-
`+t),
|
|
1
|
+
var vE=Object.defineProperty,EE=Object.defineProperties;var CE=Object.getOwnPropertyDescriptors;var uh=Object.getOwnPropertySymbols;var DE=Object.prototype.hasOwnProperty,SE=Object.prototype.propertyIsEnumerable;var ch=(X,H,Ee)=>H in X?vE(X,H,{enumerable:!0,configurable:!0,writable:!0,value:Ee}):X[H]=Ee,M=(X,H)=>{for(var Ee in H||(H={}))DE.call(H,Ee)&&ch(X,Ee,H[Ee]);if(uh)for(var Ee of uh(H))SE.call(H,Ee)&&ch(X,Ee,H[Ee]);return X},ve=(X,H)=>EE(X,CE(H));(function(X,H){typeof exports=="object"&&typeof module!="undefined"?H(exports):typeof define=="function"&&define.amd?define(["exports"],H):(X=typeof globalThis!="undefined"?globalThis:X||self,H(X.genomeSpyEmbed={}))})(this,function(X){"use strict";function H(t,e,n){return t.fields=e||[],t.fname=n,t}function Ee(t){return t==null?null:t.fname}function Oa(t){return t==null?null:t.fields}function lh(t){return t.length===1?fh(t[0]):hh(t)}const fh=t=>function(e){return e[t]},hh=t=>{const e=t.length;return function(n){for(let r=0;r<e;++r)n=n[t[r]];return n}};function Y(t){throw Error(t)}function dh(t){const e=[],n=t.length;let r=null,i=0,s="",o,a,u;t=t+"";function c(){e.push(s+t.substring(o,a)),s="",o=a+1}for(o=a=0;a<n;++a)if(u=t[a],u==="\\")s+=t.substring(o,a),s+=t.substring(++a,++a),o=a;else if(u===r)c(),r=null,i=-1;else{if(r)continue;o===i&&u==='"'||o===i&&u==="'"?(o=a+1,r=u):u==="."&&!i?a>o?c():o=a+1:u==="["?(a>o&&c(),i=o=a+1):u==="]"&&(i||Y("Access path missing open bracket: "+t),i>0&&c(),i=0,o=a+1)}return i&&Y("Access path missing closing bracket: "+t),r&&Y("Access path missing closing quote: "+t),a>o&&(a++,c()),e}function Nr(t,e,n){const r=dh(t);return t=r.length===1?r[0]:t,H((n&&n.get||lh)(r),[t],e||t)}Nr("id");const zr=H(t=>t,[],"identity");H(()=>0,[],"zero"),H(()=>1,[],"one"),H(()=>!0,[],"true"),H(()=>!1,[],"false");var Ce=Array.isArray;function Ie(t){return t===Object(t)}function Te(t){return t[t.length-1]}function Tn(t){return t==null||t===""?null:+t}const Ga=t=>e=>t*Math.exp(e),Ua=t=>e=>Math.log(t*e),ph=t=>e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),gh=t=>e=>Math.sign(e)*Math.expm1(Math.abs(e))*t,Or=t=>e=>e<0?-Math.pow(-e,t):Math.pow(e,t);function ss(t,e,n,r){const i=n(t[0]),s=n(Te(t)),o=(s-i)*e;return[r(i-o),r(s-o)]}function mh(t,e){return ss(t,e,Tn,zr)}function Ah(t,e){var n=Math.sign(t[0]);return ss(t,e,Ua(n),Ga(n))}function xh(t,e,n){return ss(t,e,Or(n),Or(1/n))}function Gr(t,e,n,r,i){const s=r(t[0]),o=r(Te(t)),a=e!=null?r(e):(s+o)/2;return[i(a+(s-a)*n),i(a+(o-a)*n)]}function os(t,e,n){return Gr(t,e,n,Tn,zr)}function Ha(t,e,n){const r=Math.sign(t[0]);return Gr(t,e,n,Ua(r),Ga(r))}function as(t,e,n,r){return Gr(t,e,n,Or(r),Or(1/r))}function yh(t,e,n,r){return Gr(t,e,n,ph(r),gh(r))}function us(t){return t!=null?Ce(t)?t:[t]:[]}function bh(t,e,n){let r=t[0],i=t[1],s;return i<r&&(s=i,i=r,r=s),s=i-r,s>=n-e?[e,n]:[r=Math.min(Math.max(r,e),n-s),r+s]}function he(t){return typeof t=="function"}const wh="descending";function Qa(t,e,n){n=n||{},e=us(e)||[];const r=[],i=[],s={},o=n.comparator||vh;return us(t).forEach((a,u)=>{a!=null&&(r.push(e[u]===wh?-1:1),i.push(a=he(a)?a:Nr(a,null,n)),(Oa(a)||[]).forEach(c=>s[c]=1))}),i.length===0?null:H(o(i,r),Object.keys(s))}const Va=(t,e)=>(t<e||t==null)&&e!=null?-1:(t>e||e==null)&&t!=null?1:(e=e instanceof Date?+e:e,(t=t instanceof Date?+t:t)!==t&&e===e?-1:e!==e&&t===t?1:0),vh=(t,e)=>t.length===1?Eh(t[0],e[0]):Ch(t,e,t.length),Eh=(t,e)=>function(n,r){return Va(t(n),t(r))*e},Ch=(t,e,n)=>(e.push(0),function(r,i){let s,o=0,a=-1;for(;o===0&&++a<n;)s=t[a],o=Va(s(r),s(i));return o*e[a]});function Dh(t){return he(t)?t:()=>t}function cs(t){for(let e,n,r=1,i=arguments.length;r<i;++r){e=arguments[r];for(n in e)t[n]=e[n]}return t}const Sh=Object.prototype.hasOwnProperty;function Bt(t,e){return Sh.call(t,e)}function Ur(t){return typeof t=="boolean"}function Bh(t){return Object.prototype.toString.call(t)==="[object Date]"}function Fh(t){return t&&he(t[Symbol.iterator])}function de(t){return typeof t=="number"}function W(t){return typeof t=="string"}function Mh(t,e){const n=t[0],r=Te(t),i=+e;return i?i===1?r:n+i*(r-n):n}function Hr(t){return t&&Te(t)-t[0]||0}function Qr(t){return Ce(t)?"["+t.map(Qr)+"]":Ie(t)||W(t)?JSON.stringify(t).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):t}function Ih(t){return t==null||t===""?null:!t||t==="false"||t==="0"?!1:!!t}const Th=t=>de(t)||Bh(t)?t:Date.parse(t);function Ph(t,e){return e=e||Th,t==null||t===""?null:e(t)}function Lh(t){return t==null||t===""?null:t+""}function Vr(t){const e={},n=t.length;for(let r=0;r<n;++r)e[t[r]]=!0;return e}var ja={},ls={},fs=34,Pn=10,hs=13;function Ya(t){return new Function("d","return {"+t.map(function(e,n){return JSON.stringify(e)+": d["+n+'] || ""'}).join(",")+"}")}function Rh(t,e){var n=Ya(t);return function(r,i){return e(n(r),i,t)}}function Wa(t){var e=Object.create(null),n=[];return t.forEach(function(r){for(var i in r)i in e||n.push(e[i]=i)}),n}function pe(t,e){var n=t+"",r=n.length;return r<e?new Array(e-r+1).join(0)+n:n}function kh(t){return t<0?"-"+pe(-t,6):t>9999?"+"+pe(t,6):pe(t,4)}function Nh(t){var e=t.getUTCHours(),n=t.getUTCMinutes(),r=t.getUTCSeconds(),i=t.getUTCMilliseconds();return isNaN(t)?"Invalid Date":kh(t.getUTCFullYear())+"-"+pe(t.getUTCMonth()+1,2)+"-"+pe(t.getUTCDate(),2)+(i?"T"+pe(e,2)+":"+pe(n,2)+":"+pe(r,2)+"."+pe(i,3)+"Z":r?"T"+pe(e,2)+":"+pe(n,2)+":"+pe(r,2)+"Z":n||e?"T"+pe(e,2)+":"+pe(n,2)+"Z":"")}function Xa(t){var e=new RegExp('["'+t+`
|
|
2
|
+
\r]`),n=t.charCodeAt(0);function r(l,h){var p,d,g=i(l,function(m,A){if(p)return p(m,A-1);d=m,p=h?Rh(m,h):Ya(m)});return g.columns=d||[],g}function i(l,h){var p=[],d=l.length,g=0,m=0,A,w=d<=0,y=!1;l.charCodeAt(d-1)===Pn&&--d,l.charCodeAt(d-1)===hs&&--d;function v(){if(w)return ls;if(y)return y=!1,ja;var E,B=g,T;if(l.charCodeAt(B)===fs){for(;g++<d&&l.charCodeAt(g)!==fs||l.charCodeAt(++g)===fs;);return(E=g)>=d?w=!0:(T=l.charCodeAt(g++))===Pn?y=!0:T===hs&&(y=!0,l.charCodeAt(g)===Pn&&++g),l.slice(B+1,E-1).replace(/""/g,'"')}for(;g<d;){if((T=l.charCodeAt(E=g++))===Pn)y=!0;else if(T===hs)y=!0,l.charCodeAt(g)===Pn&&++g;else if(T!==n)continue;return l.slice(B,E)}return w=!0,l.slice(B,d)}for(;(A=v())!==ls;){for(var S=[];A!==ja&&A!==ls;)S.push(A),A=v();h&&(S=h(S,m++))==null||p.push(S)}return p}function s(l,h){return l.map(function(p){return h.map(function(d){return f(p[d])}).join(t)})}function o(l,h){return h==null&&(h=Wa(l)),[h.map(f).join(t)].concat(s(l,h)).join(`
|
|
3
|
+
`)}function a(l,h){return h==null&&(h=Wa(l)),s(l,h).join(`
|
|
4
|
+
`)}function u(l){return l.map(c).join(`
|
|
5
|
+
`)}function c(l){return l.map(f).join(t)}function f(l){return l==null?"":l instanceof Date?Nh(l):e.test(l+="")?'"'+l.replace(/"/g,'""')+'"':l}return{parse:r,parseRows:i,format:o,formatBody:a,formatRows:u,formatRow:c,formatValue:f}}var zh=Xa(" "),Oh=zh.parseRows;function Gh(t){return t}function Uh(t){if(t==null)return Gh;var e,n,r=t.scale[0],i=t.scale[1],s=t.translate[0],o=t.translate[1];return function(a,u){u||(e=n=0);var c=2,f=a.length,l=new Array(f);for(l[0]=(e+=a[0])*r+s,l[1]=(n+=a[1])*i+o;c<f;)l[c]=a[c],++c;return l}}function Hh(t,e){for(var n,r=t.length,i=r-e;i<--r;)n=t[i],t[i++]=t[r],t[r]=n}function Qh(t,e){return typeof e=="string"&&(e=t.objects[e]),e.type==="GeometryCollection"?{type:"FeatureCollection",features:e.geometries.map(function(n){return Za(t,n)})}:Za(t,e)}function Za(t,e){var n=e.id,r=e.bbox,i=e.properties==null?{}:e.properties,s=Ka(t,e);return n==null&&r==null?{type:"Feature",properties:i,geometry:s}:r==null?{type:"Feature",id:n,properties:i,geometry:s}:{type:"Feature",id:n,bbox:r,properties:i,geometry:s}}function Ka(t,e){var n=Uh(t.transform),r=t.arcs;function i(f,l){l.length&&l.pop();for(var h=r[f<0?~f:f],p=0,d=h.length;p<d;++p)l.push(n(h[p],p));f<0&&Hh(l,d)}function s(f){return n(f)}function o(f){for(var l=[],h=0,p=f.length;h<p;++h)i(f[h],l);return l.length<2&&l.push(l[0]),l}function a(f){for(var l=o(f);l.length<4;)l.push(l[0]);return l}function u(f){return f.map(a)}function c(f){var l=f.type,h;switch(l){case"GeometryCollection":return{type:l,geometries:f.geometries.map(c)};case"Point":h=s(f.coordinates);break;case"MultiPoint":h=f.coordinates.map(s);break;case"LineString":h=o(f.arcs);break;case"MultiLineString":h=f.arcs.map(o);break;case"Polygon":h=u(f.arcs);break;case"MultiPolygon":h=f.arcs.map(u);break;default:return null}return{type:l,coordinates:h}}return c(e)}function Vh(t,e){var n={},r={},i={},s=[],o=-1;e.forEach(function(c,f){var l=t.arcs[c<0?~c:c],h;l.length<3&&!l[1][0]&&!l[1][1]&&(h=e[++o],e[o]=c,e[f]=h)}),e.forEach(function(c){var f=a(c),l=f[0],h=f[1],p,d;if(p=i[l])if(delete i[p.end],p.push(c),p.end=h,d=r[h]){delete r[d.start];var g=d===p?p:p.concat(d);r[g.start=p.start]=i[g.end=d.end]=g}else r[p.start]=i[p.end]=p;else if(p=r[h])if(delete r[p.start],p.unshift(c),p.start=l,d=i[l]){delete i[d.end];var m=d===p?p:d.concat(p);r[m.start=d.start]=i[m.end=p.end]=m}else r[p.start]=i[p.end]=p;else p=[c],r[p.start=l]=i[p.end=h]=p});function a(c){var f=t.arcs[c<0?~c:c],l=f[0],h;return t.transform?(h=[0,0],f.forEach(function(p){h[0]+=p[0],h[1]+=p[1]})):h=f[f.length-1],c<0?[h,l]:[l,h]}function u(c,f){for(var l in c){var h=c[l];delete f[h.start],delete h.start,delete h.end,h.forEach(function(p){n[p<0?~p:p]=1}),s.push(h)}}return u(i,r),u(r,i),e.forEach(function(c){n[c<0?~c:c]||s.push([c])}),s}function jh(t){return Ka(t,Yh.apply(this,arguments))}function Yh(t,e,n){var r,i,s;if(arguments.length>1)r=Wh(t,e,n);else for(i=0,r=new Array(s=t.arcs.length);i<s;++i)r[i]=i;return{type:"MultiLineString",arcs:Vh(t,r)}}function Wh(t,e,n){var r=[],i=[],s;function o(l){var h=l<0?~l:l;(i[h]||(i[h]=[])).push({i:l,g:s})}function a(l){l.forEach(o)}function u(l){l.forEach(a)}function c(l){l.forEach(u)}function f(l){switch(s=l,l.type){case"GeometryCollection":l.geometries.forEach(f);break;case"LineString":a(l.arcs);break;case"MultiLineString":case"Polygon":u(l.arcs);break;case"MultiPolygon":c(l.arcs);break}}return f(e),i.forEach(n==null?function(l){r.push(l[0].i)}:function(l){n(l[0].g,l[l.length-1].g)&&r.push(l[0].i)}),r}function jr(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Ln(t){let e=t,n=t,r=t;t.length!==2&&(e=(a,u)=>t(a)-u,n=jr,r=(a,u)=>jr(t(a),u));function i(a,u,c=0,f=a.length){if(c<f){if(n(u,u)!==0)return f;do{const l=c+f>>>1;r(a[l],u)<0?c=l+1:f=l}while(c<f)}return c}function s(a,u,c=0,f=a.length){if(c<f){if(n(u,u)!==0)return f;do{const l=c+f>>>1;r(a[l],u)<=0?c=l+1:f=l}while(c<f)}return c}function o(a,u,c=0,f=a.length){const l=i(a,u,c,f-1);return l>c&&e(a[l-1],u)>-e(a[l],u)?l-1:l}return{left:i,center:o,right:s}}function qa(t){return t===null?NaN:+t}const Ja=Ln(jr),ds=Ja.right;Ja.left,Ln(qa).center;var _t=ds;function Xh(t,e){let n,r;if(e===void 0)for(const i of t)i!=null&&(n===void 0?i>=i&&(n=r=i):(n>i&&(n=i),r<i&&(r=i)));else{let i=-1;for(let s of t)(s=e(s,++i,t))!=null&&(n===void 0?s>=s&&(n=r=s):(n>s&&(n=s),r<s&&(r=s)))}return[n,r]}class $t extends Map{constructor(e,n=qh){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),e!=null)for(const[r,i]of e)this.set(r,i)}get(e){return super.get(_a(this,e))}has(e){return super.has(_a(this,e))}set(e,n){return super.set(Zh(this,e),n)}delete(e){return super.delete(Kh(this,e))}}function _a({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function Zh({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function Kh({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function qh(t){return t!==null&&typeof t=="object"?t.valueOf():t}function ps(t){return t}function Yr(t,...e){return $a(t,ps,ps,e)}function Jh(t,...e){return $a(t,Array.from,ps,e)}function $a(t,e,n,r){return function i(s,o){if(o>=r.length)return n(s);const a=new $t,u=r[o++];let c=-1;for(const f of s){const l=u(f,++c,s),h=a.get(l);h?h.push(f):a.set(l,[f])}for(const[f,l]of a)a.set(f,i(l,o));return e(a)}(t,0)}var gs=Math.sqrt(50),ms=Math.sqrt(10),As=Math.sqrt(2);function Wr(t,e,n){var r,i=-1,s,o,a;if(e=+e,t=+t,n=+n,t===e&&n>0)return[t];if((r=e<t)&&(s=t,t=e,e=s),(a=eu(t,e,n))===0||!isFinite(a))return[];if(a>0){let u=Math.round(t/a),c=Math.round(e/a);for(u*a<t&&++u,c*a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)*a}else{a=-a;let u=Math.round(t*a),c=Math.round(e*a);for(u/a<t&&++u,c/a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)/a}return r&&o.reverse(),o}function eu(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),s=r/Math.pow(10,i);return i>=0?(s>=gs?10:s>=ms?5:s>=As?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(s>=gs?10:s>=ms?5:s>=As?2:1)}function Ft(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),s=r/i;return s>=gs?i*=10:s>=ms?i*=5:s>=As&&(i*=2),e<t?-i:i}function tu(t,e,n=qa){if(!!(r=t.length)){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,s=Math.floor(i),o=+n(t[s],s,t),a=+n(t[s+1],s+1,t);return o+(a-o)*(i-s)}}function Rn(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,s=new Array(i);++r<i;)s[r]=t+r*n;return s}function Xr(t,e){let n=0;if(e===void 0)for(let r of t)(r=+r)&&(n+=r);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function _h(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Zr(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function en(t){return t=Zr(Math.abs(t)),t?t[1]:NaN}function $h(t,e){return function(n,r){for(var i=n.length,s=[],o=0,a=t[0],u=0;i>0&&a>0&&(u+a+1>r&&(a=Math.max(1,r-u)),s.push(n.substring(i-=a,i+a)),!((u+=a+1)>r));)a=t[o=(o+1)%t.length];return s.reverse().join(e)}}function ed(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var td=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function at(t){if(!(e=td.exec(t)))throw new Error("invalid format: "+t);var e;return new xs({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}at.prototype=xs.prototype;function xs(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}xs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function nd(t){e:for(var e=t.length,n=1,r=-1,i;n<e;++n)switch(t[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+t[n])break e;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var nu;function rd(t,e){var n=Zr(t,e);if(!n)return t+"";var r=n[0],i=n[1],s=i-(nu=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return s===o?r:s>o?r+new Array(s-o+1).join("0"):s>0?r.slice(0,s)+"."+r.slice(s):"0."+new Array(1-s).join("0")+Zr(t,Math.max(0,e+s-1))[0]}function ru(t,e){var n=Zr(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}var iu={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:_h,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>ru(t*100,e),r:ru,s:rd,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function su(t){return t}var ou=Array.prototype.map,au=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function id(t){var e=t.grouping===void 0||t.thousands===void 0?su:$h(ou.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",s=t.numerals===void 0?su:ed(ou.call(t.numerals,String)),o=t.percent===void 0?"%":t.percent+"",a=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function c(l){l=at(l);var h=l.fill,p=l.align,d=l.sign,g=l.symbol,m=l.zero,A=l.width,w=l.comma,y=l.precision,v=l.trim,S=l.type;S==="n"?(w=!0,S="g"):iu[S]||(y===void 0&&(y=12),v=!0,S="g"),(m||h==="0"&&p==="=")&&(m=!0,h="0",p="=");var E=g==="$"?n:g==="#"&&/[boxX]/.test(S)?"0"+S.toLowerCase():"",B=g==="$"?r:/[%p]/.test(S)?o:"",T=iu[S],L=/[defgprs%]/.test(S);y=y===void 0?6:/[gprs]/.test(S)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y));function ce(I){var ot=E,xe=B,St,is,Fn;if(S==="c")xe=T(I)+xe,I="";else{I=+I;var Mn=I<0||1/I<0;if(I=isNaN(I)?u:T(Math.abs(I),y),v&&(I=nd(I)),Mn&&+I==0&&d!=="+"&&(Mn=!1),ot=(Mn?d==="("?d:a:d==="-"||d==="("?"":d)+ot,xe=(S==="s"?au[8+nu/3]:"")+xe+(Mn&&d==="("?")":""),L){for(St=-1,is=I.length;++St<is;)if(Fn=I.charCodeAt(St),48>Fn||Fn>57){xe=(Fn===46?i+I.slice(St+1):I.slice(St))+xe,I=I.slice(0,St);break}}}w&&!m&&(I=e(I,1/0));var In=ot.length+I.length+xe.length,Oe=In<A?new Array(A-In+1).join(h):"";switch(w&&m&&(I=e(Oe+I,Oe.length?A-xe.length:1/0),Oe=""),p){case"<":I=ot+I+xe+Oe;break;case"=":I=ot+Oe+I+xe;break;case"^":I=Oe.slice(0,In=Oe.length>>1)+ot+I+xe+Oe.slice(In);break;default:I=Oe+ot+I+xe;break}return s(I)}return ce.toString=function(){return l+""},ce}function f(l,h){var p=c((l=at(l),l.type="f",l)),d=Math.max(-8,Math.min(8,Math.floor(en(h)/3)))*3,g=Math.pow(10,-d),m=au[8+d/3];return function(A){return p(g*A)+m}}return{format:c,formatPrefix:f}}var Kr,re,ys;sd({thousands:",",grouping:[3],currency:["$",""]});function sd(t){return Kr=id(t),re=Kr.format,ys=Kr.formatPrefix,Kr}function uu(t){return Math.max(0,-en(Math.abs(t)))}function cu(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(en(e)/3)))*3-en(Math.abs(t)))}function lu(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,en(e)-en(t))+1}var bs=new Date,ws=new Date;function J(t,e,n,r){function i(s){return t(s=arguments.length===0?new Date:new Date(+s)),s}return i.floor=function(s){return t(s=new Date(+s)),s},i.ceil=function(s){return t(s=new Date(s-1)),e(s,1),t(s),s},i.round=function(s){var o=i(s),a=i.ceil(s);return s-o<a-s?o:a},i.offset=function(s,o){return e(s=new Date(+s),o==null?1:Math.floor(o)),s},i.range=function(s,o,a){var u=[],c;if(s=i.ceil(s),a=a==null?1:Math.floor(a),!(s<o)||!(a>0))return u;do u.push(c=new Date(+s)),e(s,a),t(s);while(c<s&&s<o);return u},i.filter=function(s){return J(function(o){if(o>=o)for(;t(o),!s(o);)o.setTime(o-1)},function(o,a){if(o>=o)if(a<0)for(;++a<=0;)for(;e(o,-1),!s(o););else for(;--a>=0;)for(;e(o,1),!s(o););})},n&&(i.count=function(s,o){return bs.setTime(+s),ws.setTime(+o),t(bs),t(ws),Math.floor(n(bs,ws))},i.every=function(s){return s=Math.floor(s),!isFinite(s)||!(s>0)?null:s>1?i.filter(r?function(o){return r(o)%s===0}:function(o){return i.count(0,o)%s===0}):i}),i}var vs=J(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});vs.every=function(t){return t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?J(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):vs};var Es=vs;const qe=1e3,De=qe*60,Je=De*60,Mt=Je*24,Cs=Mt*7,fu=Mt*30,Ds=Mt*365;var od=J(function(t){t.setTime(t-t.getMilliseconds())},function(t,e){t.setTime(+t+e*qe)},function(t,e){return(e-t)/qe},function(t){return t.getUTCSeconds()}),ut=od,ad=J(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*qe)},function(t,e){t.setTime(+t+e*De)},function(t,e){return(e-t)/De},function(t){return t.getMinutes()}),Ss=ad,ud=J(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*qe-t.getMinutes()*De)},function(t,e){t.setTime(+t+e*Je)},function(t,e){return(e-t)/Je},function(t){return t.getHours()}),Bs=ud,cd=J(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*De)/Mt,t=>t.getDate()-1),It=cd;function Tt(t){return J(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(e,n){e.setDate(e.getDate()+n*7)},function(e,n){return(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*De)/Cs})}var qr=Tt(0),Fs=Tt(1);Tt(2),Tt(3);var kn=Tt(4);Tt(5),Tt(6);var ld=J(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12},function(t){return t.getMonth()}),Jr=ld,hu=J(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});hu.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:J(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,n){e.setFullYear(e.getFullYear()+n*t)})};var ct=hu,fd=J(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*De)},function(t,e){return(e-t)/De},function(t){return t.getUTCMinutes()}),Ms=fd,hd=J(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+e*Je)},function(t,e){return(e-t)/Je},function(t){return t.getUTCHours()}),Is=hd,dd=J(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/Mt},function(t){return t.getUTCDate()-1}),Pt=dd;function Lt(t){return J(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCDate(e.getUTCDate()+n*7)},function(e,n){return(n-e)/Cs})}var _r=Lt(0),Ts=Lt(1);Lt(2),Lt(3);var Nn=Lt(4);Lt(5),Lt(6);var pd=J(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12},function(t){return t.getUTCMonth()}),$r=pd,du=J(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});du.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:J(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})};var lt=du;function pu(t,e,n,r,i,s){const o=[[ut,1,qe],[ut,5,5*qe],[ut,15,15*qe],[ut,30,30*qe],[s,1,De],[s,5,5*De],[s,15,15*De],[s,30,30*De],[i,1,Je],[i,3,3*Je],[i,6,6*Je],[i,12,12*Je],[r,1,Mt],[r,2,2*Mt],[n,1,Cs],[e,1,fu],[e,3,3*fu],[t,1,Ds]];function a(c,f,l){const h=f<c;h&&([c,f]=[f,c]);const p=l&&typeof l.range=="function"?l:u(c,f,l),d=p?p.range(c,+f+1):[];return h?d.reverse():d}function u(c,f,l){const h=Math.abs(f-c)/l,p=Ln(([,,m])=>m).right(o,h);if(p===o.length)return t.every(Ft(c/Ds,f/Ds,l));if(p===0)return Es.every(Math.max(Ft(c,f,l),1));const[d,g]=o[h/o[p-1][2]<o[p][2]/h?p-1:p];return d.every(g)}return[a,u]}const[gd,md]=pu(lt,$r,_r,Pt,Is,Ms),[Ad,xd]=pu(ct,Jr,qr,It,Bs,Ss),zn="year",On="quarter",Gn="month",Un="week",Hn="date",ei="day",Ps="dayofyear",Qn="hours",Vn="minutes",jn="seconds",ti="milliseconds";[zn,On,Gn,Un,Hn,ei,Ps,Qn,Vn,jn,ti].reduce((t,e,n)=>(t[e]=1+n,t),{});const yd={[zn]:ct,[On]:Jr.every(3),[Gn]:Jr,[Un]:qr,[Hn]:It,[ei]:It,[Ps]:It,[Qn]:Bs,[Vn]:Ss,[jn]:ut,[ti]:Es},bd={[zn]:lt,[On]:$r.every(3),[Gn]:$r,[Un]:_r,[Hn]:Pt,[ei]:Pt,[Ps]:Pt,[Qn]:Is,[Vn]:Ms,[jn]:ut,[ti]:Es};function wd(t){return yd[t]}function vd(t){return bd[t]}function Ls(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Rs(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Yn(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function gu(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,s=t.days,o=t.shortDays,a=t.months,u=t.shortMonths,c=Wn(i),f=Xn(i),l=Wn(s),h=Xn(s),p=Wn(o),d=Xn(o),g=Wn(a),m=Xn(a),A=Wn(u),w=Xn(u),y={a:Mn,A:In,b:Oe,B:dE,c:null,d:wu,e:wu,f:Yd,g:tp,G:rp,H:Qd,I:Vd,j:jd,L:vu,m:Wd,M:Xd,p:pE,q:gE,Q:Fu,s:Mu,S:Zd,u:Kd,U:qd,V:Jd,w:_d,W:$d,x:null,X:null,y:ep,Y:np,Z:ip,"%":Bu},v={a:mE,A:AE,b:xE,B:yE,c:null,d:Cu,e:Cu,f:up,g:xp,G:bp,H:sp,I:op,j:ap,L:Du,m:cp,M:lp,p:bE,q:wE,Q:Fu,s:Mu,S:fp,u:hp,U:dp,V:pp,w:gp,W:mp,x:null,X:null,y:Ap,Y:yp,Z:wp,"%":Bu},S={a:ce,A:I,b:ot,B:xe,c:St,d:yu,e:yu,f:Od,g:xu,G:Au,H:bu,I:bu,j:Rd,L:zd,m:Ld,M:kd,p:L,q:Pd,Q:Ud,s:Hd,S:Nd,u:Bd,U:Fd,V:Md,w:Sd,W:Id,x:is,X:Fn,y:xu,Y:Au,Z:Td,"%":Gd};y.x=E(n,y),y.X=E(r,y),y.c=E(e,y),v.x=E(n,v),v.X=E(r,v),v.c=E(e,v);function E(D,P){return function(N){var b=[],ye=-1,U=0,be=D.length,we,Jt,ah;for(N instanceof Date||(N=new Date(+N));++ye<be;)D.charCodeAt(ye)===37&&(b.push(D.slice(U,ye)),(Jt=mu[we=D.charAt(++ye)])!=null?we=D.charAt(++ye):Jt=we==="e"?" ":"0",(ah=P[we])&&(we=ah(N,Jt)),b.push(we),U=ye+1);return b.push(D.slice(U,ye)),b.join("")}}function B(D,P){return function(N){var b=Yn(1900,void 0,1),ye=T(b,D,N+="",0),U,be;if(ye!=N.length)return null;if("Q"in b)return new Date(b.Q);if("s"in b)return new Date(b.s*1e3+("L"in b?b.L:0));if(P&&!("Z"in b)&&(b.Z=0),"p"in b&&(b.H=b.H%12+b.p*12),b.m===void 0&&(b.m="q"in b?b.q:0),"V"in b){if(b.V<1||b.V>53)return null;"w"in b||(b.w=1),"Z"in b?(U=Rs(Yn(b.y,0,1)),be=U.getUTCDay(),U=be>4||be===0?Ts.ceil(U):Ts(U),U=Pt.offset(U,(b.V-1)*7),b.y=U.getUTCFullYear(),b.m=U.getUTCMonth(),b.d=U.getUTCDate()+(b.w+6)%7):(U=Ls(Yn(b.y,0,1)),be=U.getDay(),U=be>4||be===0?Fs.ceil(U):Fs(U),U=It.offset(U,(b.V-1)*7),b.y=U.getFullYear(),b.m=U.getMonth(),b.d=U.getDate()+(b.w+6)%7)}else("W"in b||"U"in b)&&("w"in b||(b.w="u"in b?b.u%7:"W"in b?1:0),be="Z"in b?Rs(Yn(b.y,0,1)).getUTCDay():Ls(Yn(b.y,0,1)).getDay(),b.m=0,b.d="W"in b?(b.w+6)%7+b.W*7-(be+5)%7:b.w+b.U*7-(be+6)%7);return"Z"in b?(b.H+=b.Z/100|0,b.M+=b.Z%100,Rs(b)):Ls(b)}}function T(D,P,N,b){for(var ye=0,U=P.length,be=N.length,we,Jt;ye<U;){if(b>=be)return-1;if(we=P.charCodeAt(ye++),we===37){if(we=P.charAt(ye++),Jt=S[we in mu?P.charAt(ye++):we],!Jt||(b=Jt(D,N,b))<0)return-1}else if(we!=N.charCodeAt(b++))return-1}return b}function L(D,P,N){var b=c.exec(P.slice(N));return b?(D.p=f.get(b[0].toLowerCase()),N+b[0].length):-1}function ce(D,P,N){var b=p.exec(P.slice(N));return b?(D.w=d.get(b[0].toLowerCase()),N+b[0].length):-1}function I(D,P,N){var b=l.exec(P.slice(N));return b?(D.w=h.get(b[0].toLowerCase()),N+b[0].length):-1}function ot(D,P,N){var b=A.exec(P.slice(N));return b?(D.m=w.get(b[0].toLowerCase()),N+b[0].length):-1}function xe(D,P,N){var b=g.exec(P.slice(N));return b?(D.m=m.get(b[0].toLowerCase()),N+b[0].length):-1}function St(D,P,N){return T(D,e,P,N)}function is(D,P,N){return T(D,n,P,N)}function Fn(D,P,N){return T(D,r,P,N)}function Mn(D){return o[D.getDay()]}function In(D){return s[D.getDay()]}function Oe(D){return u[D.getMonth()]}function dE(D){return a[D.getMonth()]}function pE(D){return i[+(D.getHours()>=12)]}function gE(D){return 1+~~(D.getMonth()/3)}function mE(D){return o[D.getUTCDay()]}function AE(D){return s[D.getUTCDay()]}function xE(D){return u[D.getUTCMonth()]}function yE(D){return a[D.getUTCMonth()]}function bE(D){return i[+(D.getUTCHours()>=12)]}function wE(D){return 1+~~(D.getUTCMonth()/3)}return{format:function(D){var P=E(D+="",y);return P.toString=function(){return D},P},parse:function(D){var P=B(D+="",!1);return P.toString=function(){return D},P},utcFormat:function(D){var P=E(D+="",v);return P.toString=function(){return D},P},utcParse:function(D){var P=B(D+="",!0);return P.toString=function(){return D},P}}}var mu={"-":"",_:" ","0":"0"},_=/^\s*\d+/,Ed=/^%/,Cd=/[\\^$*+?|[\]().{}]/g;function R(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",s=i.length;return r+(s<n?new Array(n-s+1).join(e)+i:i)}function Dd(t){return t.replace(Cd,"\\$&")}function Wn(t){return new RegExp("^(?:"+t.map(Dd).join("|")+")","i")}function Xn(t){return new Map(t.map((e,n)=>[e.toLowerCase(),n]))}function Sd(t,e,n){var r=_.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Bd(t,e,n){var r=_.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Fd(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Md(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Id(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Au(t,e,n){var r=_.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function xu(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Td(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Pd(t,e,n){var r=_.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Ld(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function yu(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Rd(t,e,n){var r=_.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function bu(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function kd(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Nd(t,e,n){var r=_.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function zd(t,e,n){var r=_.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Od(t,e,n){var r=_.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Gd(t,e,n){var r=Ed.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Ud(t,e,n){var r=_.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Hd(t,e,n){var r=_.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function wu(t,e){return R(t.getDate(),e,2)}function Qd(t,e){return R(t.getHours(),e,2)}function Vd(t,e){return R(t.getHours()%12||12,e,2)}function jd(t,e){return R(1+It.count(ct(t),t),e,3)}function vu(t,e){return R(t.getMilliseconds(),e,3)}function Yd(t,e){return vu(t,e)+"000"}function Wd(t,e){return R(t.getMonth()+1,e,2)}function Xd(t,e){return R(t.getMinutes(),e,2)}function Zd(t,e){return R(t.getSeconds(),e,2)}function Kd(t){var e=t.getDay();return e===0?7:e}function qd(t,e){return R(qr.count(ct(t)-1,t),e,2)}function Eu(t){var e=t.getDay();return e>=4||e===0?kn(t):kn.ceil(t)}function Jd(t,e){return t=Eu(t),R(kn.count(ct(t),t)+(ct(t).getDay()===4),e,2)}function _d(t){return t.getDay()}function $d(t,e){return R(Fs.count(ct(t)-1,t),e,2)}function ep(t,e){return R(t.getFullYear()%100,e,2)}function tp(t,e){return t=Eu(t),R(t.getFullYear()%100,e,2)}function np(t,e){return R(t.getFullYear()%1e4,e,4)}function rp(t,e){var n=t.getDay();return t=n>=4||n===0?kn(t):kn.ceil(t),R(t.getFullYear()%1e4,e,4)}function ip(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+R(e/60|0,"0",2)+R(e%60,"0",2)}function Cu(t,e){return R(t.getUTCDate(),e,2)}function sp(t,e){return R(t.getUTCHours(),e,2)}function op(t,e){return R(t.getUTCHours()%12||12,e,2)}function ap(t,e){return R(1+Pt.count(lt(t),t),e,3)}function Du(t,e){return R(t.getUTCMilliseconds(),e,3)}function up(t,e){return Du(t,e)+"000"}function cp(t,e){return R(t.getUTCMonth()+1,e,2)}function lp(t,e){return R(t.getUTCMinutes(),e,2)}function fp(t,e){return R(t.getUTCSeconds(),e,2)}function hp(t){var e=t.getUTCDay();return e===0?7:e}function dp(t,e){return R(_r.count(lt(t)-1,t),e,2)}function Su(t){var e=t.getUTCDay();return e>=4||e===0?Nn(t):Nn.ceil(t)}function pp(t,e){return t=Su(t),R(Nn.count(lt(t),t)+(lt(t).getUTCDay()===4),e,2)}function gp(t){return t.getUTCDay()}function mp(t,e){return R(Ts.count(lt(t)-1,t),e,2)}function Ap(t,e){return R(t.getUTCFullYear()%100,e,2)}function xp(t,e){return t=Su(t),R(t.getUTCFullYear()%100,e,2)}function yp(t,e){return R(t.getUTCFullYear()%1e4,e,4)}function bp(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Nn(t):Nn.ceil(t),R(t.getUTCFullYear()%1e4,e,4)}function wp(){return"+0000"}function Bu(){return"%"}function Fu(t){return+t}function Mu(t){return Math.floor(+t/1e3)}var tn,ks,Iu,Ns,Tu;vp({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"]});function vp(t){return tn=gu(t),ks=tn.format,Iu=tn.parse,Ns=tn.utcFormat,Tu=tn.utcParse,tn}function Zn(t){const e={};return n=>e[n]||(e[n]=t(n))}function Ep(t,e){return n=>{const r=t(n),i=r.indexOf(e);if(i<0)return r;let s=Cp(r,i);const o=s<r.length?r.slice(s):"";for(;--s>i;)if(r[s]!=="0"){++s;break}return r.slice(0,s)+o}}function Cp(t,e){let n=t.lastIndexOf("e"),r;if(n>0)return n;for(n=t.length;--n>e;)if(r=t.charCodeAt(n),r>=48&&r<=57)return n+1}function Dp(t){const e=Zn(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(r){const i=at(r||",");if(i.precision==null){switch(i.precision=12,i.type){case"%":i.precision-=2;break;case"e":i.precision-=1;break}return Ep(e(i),e(".1f")(1)[1])}else return e(i)},formatSpan(r,i,s,o){o=at(o==null?",f":o);const a=Ft(r,i,s),u=Math.max(Math.abs(r),Math.abs(i));let c;if(o.precision==null)switch(o.type){case"s":return isNaN(c=cu(a,u))||(o.precision=c),n(o,u);case"":case"e":case"g":case"p":case"r":{isNaN(c=lu(a,u))||(o.precision=c-(o.type==="e"));break}case"f":case"%":{isNaN(c=uu(a))||(o.precision=c-(o.type==="%")*2);break}}return e(o)}}}Sp();function Sp(){return Dp({format:re,formatPrefix:ys})}function Pu(t,e,n){n=n||{},Ie(n)||Y("Invalid time multi-format specifier: ".concat(n));const r=e(jn),i=e(Vn),s=e(Qn),o=e(Hn),a=e(Un),u=e(Gn),c=e(On),f=e(zn),l=t(n[ti]||".%L"),h=t(n[jn]||":%S"),p=t(n[Vn]||"%I:%M"),d=t(n[Qn]||"%I %p"),g=t(n[Hn]||n[ei]||"%a %d"),m=t(n[Un]||"%b %d"),A=t(n[Gn]||"%B"),w=t(n[On]||"%B"),y=t(n[zn]||"%Y");return v=>(r(v)<v?l:i(v)<v?h:s(v)<v?p:o(v)<v?d:u(v)<v?a(v)<v?g:m:f(v)<v?c(v)<v?A:w:y)(v)}function Lu(t){const e=Zn(t.format),n=Zn(t.utcFormat);return{timeFormat:r=>W(r)?e(r):Pu(e,wd,r),utcFormat:r=>W(r)?n(r):Pu(n,vd,r),timeParse:Zn(t.parse),utcParse:Zn(t.utcParse)}}let zs;Bp();function Bp(){return zs=Lu({format:ks,parse:Iu,utcFormat:Ns,utcParse:Tu})}function Fp(t){return Lu(gu(t))}function Mp(t){return arguments.length?zs=Fp(t):zs}const Ip=/^(data:|([A-Za-z]+:)?\/\/)/,Tp=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,Pp=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Ru="file://";function Lp(t,e){return n=>({options:n||{},sanitize:kp,load:Rp,fileAccess:!!e,file:Np(e),http:Op(t)})}async function Rp(t,e){const n=await this.sanitize(t,e),r=n.href;return n.localFile?this.file(r):this.http(r,e)}async function kp(t,e){e=cs({},this.options,e);const n=this.fileAccess,r={href:null};let i,s,o;const a=Tp.test(t.replace(Pp,""));(t==null||typeof t!="string"||!a)&&Y("Sanitize failure, invalid URI: "+Qr(t));const u=Ip.test(t);return(o=e.baseURL)&&!u&&(!t.startsWith("/")&&!o.endsWith("/")&&(t="/"+t),t=o+t),s=(i=t.startsWith(Ru))||e.mode==="file"||e.mode!=="http"&&!u&&n,i?t=t.slice(Ru.length):t.startsWith("//")&&(e.defaultProtocol==="file"?(t=t.slice(2),s=!0):t=(e.defaultProtocol||"http")+":"+t),Object.defineProperty(r,"localFile",{value:!!s}),r.href=t,e.target&&(r.target=e.target+""),e.rel&&(r.rel=e.rel+""),e.context==="image"&&e.crossOrigin&&(r.crossOrigin=e.crossOrigin+""),r}function Np(t){return t?e=>new Promise((n,r)=>{t.readFile(e,(i,s)=>{i?r(i):n(s)})}):zp}async function zp(){Y("No file system access.")}function Op(t){return t?async function(e,n){const r=cs({},this.options.http,n),i=n&&n.response,s=await t(e,r);return s.ok?he(s[i])?s[i]():s.text():Y(s.status+""+s.statusText)}:Gp}async function Gp(){Y("No HTTP fetch method available.")}const Up=t=>t!=null&&t===t,Hp=t=>t==="true"||t==="false"||t===!0||t===!1,Qp=t=>!Number.isNaN(Date.parse(t)),ku=t=>!Number.isNaN(+t)&&!(t instanceof Date),Vp=t=>ku(t)&&Number.isInteger(+t),Nu={boolean:Ih,integer:Tn,number:Tn,date:Ph,string:Lh,unknown:zr},ni=[Hp,Vp,ku,Qp],jp=["boolean","integer","number","date"];function Yp(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=ni.length,i=ni.map((s,o)=>o+1);for(let s=0,o=0,a,u;s<n;++s)for(u=e?t[s][e]:t[s],a=0;a<r;++a)if(i[a]&&Up(u)&&!ni[a](u)&&(i[a]=0,++o,o===ni.length))return"string";return jp[i.reduce((s,o)=>s===0?o:s,0)-1]}function Wp(t,e){return e.reduce((n,r)=>(n[r]=Yp(t,r),n),{})}function zu(t){const e=function(n,r){const i={delimiter:t};return Os(n,r?cs(r,i):i)};return e.responseType="text",e}function Os(t,e){return e.header&&(t=e.header.map(Qr).join(e.delimiter)+`
|
|
6
|
+
`+t),Xa(e.delimiter).parse(t+"")}Os.responseType="text";function Xp(t){return typeof Buffer=="function"&&he(Buffer.isBuffer)?Buffer.isBuffer(t):!1}function Gs(t,e){const n=e&&e.property?Nr(e.property):zr;return Ie(t)&&!Xp(t)?Zp(n(t),e):n(JSON.parse(t))}Gs.responseType="json";function Zp(t,e){return!Ce(t)&&Fh(t)&&(t=[...t]),e&&e.copy?JSON.parse(JSON.stringify(t)):t}const Kp={interior:(t,e)=>t!==e,exterior:(t,e)=>t===e};function Ou(t,e){let n,r,i,s;return t=Gs(t,e),e&&e.feature?(n=Qh,i=e.feature):e&&e.mesh?(n=jh,i=e.mesh,s=Kp[e.filter]):Y("Missing TopoJSON feature or mesh parameter."),r=(r=t.objects[i])?n(t,r,s):Y("Invalid TopoJSON object: "+i),r&&r.features||[r]}Ou.responseType="json";const Us={dsv:Os,csv:zu(","),tsv:zu(" "),json:Gs,topojson:Ou};function Gu(t,e){return arguments.length>1?(Us[t]=e,this):Bt(Us,t)?Us[t]:null}function Uu(t,e,n,r){e=e||{};const i=Gu(e.type||"json");return i||Y("Unknown data format type: "+e.type),t=i(t,e),e.parse&&qp(t,e.parse,n,r),Bt(t,"columns")&&delete t.columns,t}function qp(t,e,n,r){if(!t.length)return;const i=Mp();n=n||i.timeParse,r=r||i.utcParse;let s=t.columns||Object.keys(t[0]),o,a,u,c,f,l;e==="auto"&&(e=Wp(t,s)),s=Object.keys(e);const h=s.map(p=>{const d=e[p];let g,m;if(d&&(d.startsWith("date:")||d.startsWith("utc:")))return g=d.split(/:(.+)?/,2),m=g[1],(m[0]==="'"&&m[m.length-1]==="'"||m[0]==='"'&&m[m.length-1]==='"')&&(m=m.slice(1,-1)),(g[0]==="utc"?r:n)(m);if(!Nu[d])throw Error("Illegal format pattern: "+p+":"+d);return Nu[d]});for(u=0,f=t.length,l=s.length;u<f;++u)for(o=t[u],c=0;c<l;++c)a=s[c],o[a]=h[c](o[a])}const ri=Lp(typeof fetch!="undefined"&&fetch,null);/**
|
|
7
7
|
* @license
|
|
8
8
|
* Copyright 2017 Google LLC
|
|
9
9
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
10
|
-
*/var Ks;const nn=globalThis.trustedTypes,rc=nn?nn.createPolicy("lit-html",{createHTML:t=>t}):void 0,At=`lit$${(Math.random()+"").slice(9)}$`,ic="?"+At,Fg=`<${ic}>`,rn=document,Wn=(t="")=>rn.createComment(t),Xn=t=>t===null||typeof t!="object"&&typeof t!="function",sc=Array.isArray,Ig=t=>{var e;return sc(t)||typeof((e=t)===null||e===void 0?void 0:e[Symbol.iterator])=="function"},Zn=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,oc=/-->/g,ac=/>/g,zt=/>|[ \n\r](?:([^\s"'>=/]+)([ \n\r]*=[ \n\r]*(?:[^ \n\r"'`<>=]|("|')|))|$)/g,uc=/'/g,cc=/"/g,fc=/^(?:script|style|textarea)$/i,Tg=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),ot=Tg(1),Kn=Symbol.for("lit-noChange"),ee=Symbol.for("lit-nothing"),lc=new WeakMap,hc=(t,e,n)=>{var r,i;const s=(r=n==null?void 0:n.renderBefore)!==null&&r!==void 0?r:e;let o=s._$litPart$;if(o===void 0){const a=(i=n==null?void 0:n.renderBefore)!==null&&i!==void 0?i:null;s._$litPart$=o=new Jn(e.insertBefore(Wn(),a),a,void 0,n!=null?n:{})}return o._$AI(t),o},sn=rn.createTreeWalker(rn,129,null,!1),Pg=(t,e)=>{const n=t.length-1,r=[];let i,s=e===2?"<svg>":"",o=Zn;for(let u=0;u<n;u++){const c=t[u];let l,f,h=-1,p=0;for(;p<c.length&&(o.lastIndex=p,f=o.exec(c),f!==null);)p=o.lastIndex,o===Zn?f[1]==="!--"?o=oc:f[1]!==void 0?o=ac:f[2]!==void 0?(fc.test(f[2])&&(i=RegExp("</"+f[2],"g")),o=zt):f[3]!==void 0&&(o=zt):o===zt?f[0]===">"?(o=i!=null?i:Zn,h=-1):f[1]===void 0?h=-2:(h=o.lastIndex-f[2].length,l=f[1],o=f[3]===void 0?zt:f[3]==='"'?cc:uc):o===cc||o===uc?o=zt:o===oc||o===ac?o=Zn:(o=zt,i=void 0);const d=o===zt&&t[u+1].startsWith("/>")?" ":"";s+=o===Zn?c+Fg:h>=0?(r.push(l),c.slice(0,h)+"$lit$"+c.slice(h)+At+d):c+At+(h===-2?(r.push(void 0),u):d)}const a=s+(t[n]||"<?>")+(e===2?"</svg>":"");return[rc!==void 0?rc.createHTML(a):a,r]};class qn{constructor({strings:e,_$litType$:n},r){let i;this.parts=[];let s=0,o=0;const a=e.length-1,u=this.parts,[c,l]=Pg(e,n);if(this.el=qn.createElement(c,r),sn.currentNode=this.el.content,n===2){const f=this.el.content,h=f.firstChild;h.remove(),f.append(...h.childNodes)}for(;(i=sn.nextNode())!==null&&u.length<a;){if(i.nodeType===1){if(i.hasAttributes()){const f=[];for(const h of i.getAttributeNames())if(h.endsWith("$lit$")||h.startsWith(At)){const p=l[o++];if(f.push(h),p!==void 0){const d=i.getAttribute(p.toLowerCase()+"$lit$").split(At),g=/([.?@])?(.*)/.exec(p);u.push({type:1,index:s,name:g[2],strings:d,ctor:g[1]==="."?Rg:g[1]==="?"?kg:g[1]==="@"?Og:si})}else u.push({type:6,index:s})}for(const h of f)i.removeAttribute(h)}if(fc.test(i.tagName)){const f=i.textContent.split(At),h=f.length-1;if(h>0){i.textContent=nn?nn.emptyScript:"";for(let p=0;p<h;p++)i.append(f[p],Wn()),sn.nextNode(),u.push({type:2,index:++s});i.append(f[h],Wn())}}}else if(i.nodeType===8)if(i.data===ic)u.push({type:2,index:s});else{let f=-1;for(;(f=i.data.indexOf(At,f+1))!==-1;)u.push({type:7,index:s}),f+=At.length-1}s++}}static createElement(e,n){const r=rn.createElement("template");return r.innerHTML=e,r}}function on(t,e,n=t,r){var i,s,o,a;if(e===Kn)return e;let u=r!==void 0?(i=n._$Cl)===null||i===void 0?void 0:i[r]:n._$Cu;const c=Xn(e)?void 0:e._$litDirective$;return(u==null?void 0:u.constructor)!==c&&((s=u==null?void 0:u._$AO)===null||s===void 0||s.call(u,!1),c===void 0?u=void 0:(u=new c(t),u._$AT(t,n,r)),r!==void 0?((o=(a=n)._$Cl)!==null&&o!==void 0?o:a._$Cl=[])[r]=u:n._$Cu=u),u!==void 0&&(e=on(t,u._$AS(t,e.values),u,r)),e}class Lg{constructor(e,n){this.v=[],this._$AN=void 0,this._$AD=e,this._$AM=n}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(e){var n;const{el:{content:r},parts:i}=this._$AD,s=((n=e==null?void 0:e.creationScope)!==null&&n!==void 0?n:rn).importNode(r,!0);sn.currentNode=s;let o=sn.nextNode(),a=0,u=0,c=i[0];for(;c!==void 0;){if(a===c.index){let l;c.type===2?l=new Jn(o,o.nextSibling,this,e):c.type===1?l=new c.ctor(o,c.name,c.strings,this,e):c.type===6&&(l=new zg(o,this,e)),this.v.push(l),c=i[++u]}a!==(c==null?void 0:c.index)&&(o=sn.nextNode(),a++)}return s}m(e){let n=0;for(const r of this.v)r!==void 0&&(r.strings!==void 0?(r._$AI(e,r,n),n+=r.strings.length-2):r._$AI(e[n])),n++}}class Jn{constructor(e,n,r,i){var s;this.type=2,this._$AH=ee,this._$AN=void 0,this._$AA=e,this._$AB=n,this._$AM=r,this.options=i,this._$Cg=(s=i==null?void 0:i.isConnected)===null||s===void 0||s}get _$AU(){var e,n;return(n=(e=this._$AM)===null||e===void 0?void 0:e._$AU)!==null&&n!==void 0?n:this._$Cg}get parentNode(){let e=this._$AA.parentNode;const n=this._$AM;return n!==void 0&&e.nodeType===11&&(e=n.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,n=this){e=on(this,e,n),Xn(e)?e===ee||e==null||e===""?(this._$AH!==ee&&this._$AR(),this._$AH=ee):e!==this._$AH&&e!==Kn&&this.$(e):e._$litType$!==void 0?this.T(e):e.nodeType!==void 0?this.S(e):Ig(e)?this.M(e):this.$(e)}A(e,n=this._$AB){return this._$AA.parentNode.insertBefore(e,n)}S(e){this._$AH!==e&&(this._$AR(),this._$AH=this.A(e))}$(e){this._$AH!==ee&&Xn(this._$AH)?this._$AA.nextSibling.data=e:this.S(rn.createTextNode(e)),this._$AH=e}T(e){var n;const{values:r,_$litType$:i}=e,s=typeof i=="number"?this._$AC(e):(i.el===void 0&&(i.el=qn.createElement(i.h,this.options)),i);if(((n=this._$AH)===null||n===void 0?void 0:n._$AD)===s)this._$AH.m(r);else{const o=new Lg(s,this),a=o.p(this.options);o.m(r),this.S(a),this._$AH=o}}_$AC(e){let n=lc.get(e.strings);return n===void 0&&lc.set(e.strings,n=new qn(e)),n}M(e){sc(this._$AH)||(this._$AH=[],this._$AR());const n=this._$AH;let r,i=0;for(const s of e)i===n.length?n.push(r=new Jn(this.A(Wn()),this.A(Wn()),this,this.options)):r=n[i],r._$AI(s),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,n){var r;for((r=this._$AP)===null||r===void 0||r.call(this,!1,!0,n);e&&e!==this._$AB;){const i=e.nextSibling;e.remove(),e=i}}setConnected(e){var n;this._$AM===void 0&&(this._$Cg=e,(n=this._$AP)===null||n===void 0||n.call(this,e))}}class si{constructor(e,n,r,i,s){this.type=1,this._$AH=ee,this._$AN=void 0,this.element=e,this.name=n,this._$AM=i,this.options=s,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=ee}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,n=this,r,i){const s=this.strings;let o=!1;if(s===void 0)e=on(this,e,n,0),o=!Xn(e)||e!==this._$AH&&e!==Kn,o&&(this._$AH=e);else{const a=e;let u,c;for(e=s[0],u=0;u<s.length-1;u++)c=on(this,a[r+u],n,u),c===Kn&&(c=this._$AH[u]),o||(o=!Xn(c)||c!==this._$AH[u]),c===ee?e=ee:e!==ee&&(e+=(c!=null?c:"")+s[u+1]),this._$AH[u]=c}o&&!i&&this.k(e)}k(e){e===ee?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e!=null?e:"")}}class Rg extends si{constructor(){super(...arguments),this.type=3}k(e){this.element[this.name]=e===ee?void 0:e}}const Ng=nn?nn.emptyScript:"";class kg extends si{constructor(){super(...arguments),this.type=4}k(e){e&&e!==ee?this.element.setAttribute(this.name,Ng):this.element.removeAttribute(this.name)}}class Og extends si{constructor(e,n,r,i,s){super(e,n,r,i,s),this.type=5}_$AI(e,n=this){var r;if((e=(r=on(this,e,n,0))!==null&&r!==void 0?r:ee)===Kn)return;const i=this._$AH,s=e===ee&&i!==ee||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,o=e!==ee&&(i===ee||s);s&&this.element.removeEventListener(this.name,this,i),o&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var n,r;typeof this._$AH=="function"?this._$AH.call((r=(n=this.options)===null||n===void 0?void 0:n.host)!==null&&r!==void 0?r:this.element,e):this._$AH.handleEvent(e)}}class zg{constructor(e,n,r){this.element=e,this.type=6,this._$AN=void 0,this._$AM=n,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(e){on(this,e)}}const dc=window.litHtmlPolyfillSupport;dc==null||dc(qn,Jn),((Ks=globalThis.litHtmlVersions)!==null&&Ks!==void 0?Ks:globalThis.litHtmlVersions=[]).push("2.0.2");function qs(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function oi(t){let e=t,n=t,r=t;t.length!==2&&(e=(a,u)=>t(a)-u,n=qs,r=(a,u)=>qs(t(a),u));function i(a,u,c=0,l=a.length){if(c<l){if(n(u,u)!==0)return l;do{const f=c+l>>>1;r(a[f],u)<0?c=f+1:l=f}while(c<l)}return c}function s(a,u,c=0,l=a.length){if(c<l){if(n(u,u)!==0)return l;do{const f=c+l>>>1;r(a[f],u)<=0?c=f+1:l=f}while(c<l)}return c}function o(a,u,c=0,l=a.length){const f=i(a,u,c,l-1);return f>c&&e(a[f-1],u)>-e(a[f],u)?f-1:f}return{left:i,center:o,right:s}}function pc(t){return t===null?NaN:+t}const gc=oi(qs),Ug=gc.right;gc.left,oi(pc).center;var Gg=Ug;function Hg(t,e){let n,r;if(e===void 0)for(const i of t)i!=null&&(n===void 0?i>=i&&(n=r=i):(n>i&&(n=i),r<i&&(r=i)));else{let i=-1;for(let s of t)(s=e(s,++i,t))!=null&&(n===void 0?s>=s&&(n=r=s):(n>s&&(n=s),r<s&&(r=s)))}return[n,r]}class ai extends Map{constructor(e,n=jg){super();if(Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),e!=null)for(const[r,i]of e)this.set(r,i)}get(e){return super.get(mc(this,e))}has(e){return super.has(mc(this,e))}set(e,n){return super.set(Vg(this,e),n)}delete(e){return super.delete(Qg(this,e))}}function mc({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function Vg({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function Qg({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function jg(t){return t!==null&&typeof t=="object"?t.valueOf():t}function Js(t){return t}function ui(t,...e){return Ac(t,Js,Js,e)}function Yg(t,...e){return Ac(t,Array.from,Js,e)}function Ac(t,e,n,r){return function i(s,o){if(o>=r.length)return n(s);const a=new ai,u=r[o++];let c=-1;for(const l of s){const f=u(l,++c,s),h=a.get(f);h?h.push(l):a.set(f,[l])}for(const[l,f]of a)a.set(l,i(f,o));return e(a)}(t,0)}var _s=Math.sqrt(50),$s=Math.sqrt(10),eo=Math.sqrt(2);function Wg(t,e,n){var r,i=-1,s,o,a;if(e=+e,t=+t,n=+n,t===e&&n>0)return[t];if((r=e<t)&&(s=t,t=e,e=s),(a=Xg(t,e,n))===0||!isFinite(a))return[];if(a>0){let u=Math.round(t/a),c=Math.round(e/a);for(u*a<t&&++u,c*a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)*a}else{a=-a;let u=Math.round(t*a),c=Math.round(e*a);for(u/a<t&&++u,c/a>e&&--c,o=new Array(s=c-u+1);++i<s;)o[i]=(u+i)/a}return r&&o.reverse(),o}function Xg(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),s=r/Math.pow(10,i);return i>=0?(s>=_s?10:s>=$s?5:s>=eo?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(s>=_s?10:s>=$s?5:s>=eo?2:1)}function to(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),s=r/i;return s>=_s?i*=10:s>=$s?i*=5:s>=eo&&(i*=2),e<t?-i:i}function Zg(t,e,n=pc){if(!!(r=t.length)){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,s=Math.floor(i),o=+n(t[s],s,t),a=+n(t[s+1],s+1,t);return o+(a-o)*(i-s)}}function ci(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,s=new Array(i);++r<i;)s[r]=t+r*n;return s}function fi(t,e){let n=0;if(e===void 0)for(let r of t)(r=+r)&&(n+=r);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function Kg(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function li(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function qg(t){return t=li(Math.abs(t)),t?t[1]:NaN}function Jg(t,e){return function(n,r){for(var i=n.length,s=[],o=0,a=t[0],u=0;i>0&&a>0&&(u+a+1>r&&(a=Math.max(1,r-u)),s.push(n.substring(i-=a,i+a)),!((u+=a+1)>r));)a=t[o=(o+1)%t.length];return s.reverse().join(e)}}function _g(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var $g=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function hi(t){if(!(e=$g.exec(t)))throw new Error("invalid format: "+t);var e;return new no({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}hi.prototype=no.prototype;function no(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}no.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function em(t){e:for(var e=t.length,n=1,r=-1,i;n<e;++n)switch(t[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+t[n])break e;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var xc;function tm(t,e){var n=li(t,e);if(!n)return t+"";var r=n[0],i=n[1],s=i-(xc=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return s===o?r:s>o?r+new Array(s-o+1).join("0"):s>0?r.slice(0,s)+"."+r.slice(s):"0."+new Array(1-s).join("0")+li(t,Math.max(0,e+s-1))[0]}function yc(t,e){var n=li(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}var bc={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:Kg,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>yc(t*100,e),r:yc,s:tm,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function wc(t){return t}var vc=Array.prototype.map,Ec=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function nm(t){var e=t.grouping===void 0||t.thousands===void 0?wc:Jg(vc.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",s=t.numerals===void 0?wc:_g(vc.call(t.numerals,String)),o=t.percent===void 0?"%":t.percent+"",a=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function c(f){f=hi(f);var h=f.fill,p=f.align,d=f.sign,g=f.symbol,m=f.zero,A=f.width,b=f.comma,y=f.precision,v=f.trim,D=f.type;D==="n"?(b=!0,D="g"):bc[D]||(y===void 0&&(y=12),v=!0,D="g"),(m||h==="0"&&p==="=")&&(m=!0,h="0",p="=");var C=g==="$"?n:g==="#"&&/[boxX]/.test(D)?"0"+D.toLowerCase():"",F=g==="$"?r:/[%p]/.test(D)?o:"",S=bc[D],le=/[defgprs%]/.test(D);y=y===void 0?6:/[gprs]/.test(D)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y));function se(E){var oe=C,z=F,pe,Jt,He;if(D==="c")z=S(E)+z,E="";else{E=+E;var Ve=E<0||1/E<0;if(E=isNaN(E)?u:S(Math.abs(E),y),v&&(E=em(E)),Ve&&+E==0&&d!=="+"&&(Ve=!1),oe=(Ve?d==="("?d:a:d==="-"||d==="("?"":d)+oe,z=(D==="s"?Ec[8+xc/3]:"")+z+(Ve&&d==="("?")":""),le){for(pe=-1,Jt=E.length;++pe<Jt;)if(He=E.charCodeAt(pe),48>He||He>57){z=(He===46?i+E.slice(pe+1):E.slice(pe))+z,E=E.slice(0,pe);break}}}b&&!m&&(E=e(E,1/0));var Qe=oe.length+E.length+z.length,Z=Qe<A?new Array(A-Qe+1).join(h):"";switch(b&&m&&(E=e(Z+E,Z.length?A-z.length:1/0),Z=""),p){case"<":E=oe+E+z+Z;break;case"=":E=oe+Z+E+z;break;case"^":E=Z.slice(0,Qe=Z.length>>1)+oe+E+z+Z.slice(Qe);break;default:E=Z+oe+E+z;break}return s(E)}return se.toString=function(){return f+""},se}function l(f,h){var p=c((f=hi(f),f.type="f",f)),d=Math.max(-8,Math.min(8,Math.floor(qg(h)/3)))*3,g=Math.pow(10,-d),m=Ec[8+d/3];return function(A){return p(g*A)+m}}return{format:c,formatPrefix:l}}var ro,xe;rm({thousands:",",grouping:[3],currency:["$",""]});function rm(t){return ro=nm(t),xe=ro.format,ro}const Cc=1;function io(){let t=[0,1],e=[0,1],n=1,r=1,i=0,s=0,o=.5,a=0;const c=l=>(l-t[0])/n*r+e[0];return c.invert=l=>(l-e[0])/r*n+t[0],c.domain=function(l){if(arguments.length){if(t=Hg(l),n=t[1]-t[0],n<Cc){n=Cc;const f=(t[0]+t[1])/2;t[0]=f-n/2,t[1]=f+n/2}return c}else return t},c.range=function(l){return arguments.length?(e=[...l],r=e[1]-e[0],c):e},c.numberingOffset=function(l){return arguments.length?(a=l,c):a},c.padding=function(l){return arguments.length?(s=l,i=Math.min(1,l),c):i},c.paddingInner=function(l){return arguments.length?(i=Math.min(1,l),c):i},c.paddingOuter=function(l){return arguments.length?(s=l,c):s},c.align=function(l){return arguments.length?(o=Math.max(0,Math.min(1,l)),c):o},c.step=()=>r/n,c.bandwidth=()=>c.step(),c.ticks=l=>{const f=c.align(),h=c.numberingOffset();return Wg(t[0]-f+h,t[1]-f+h,Math.min(l,Math.ceil(n))).filter(Number.isInteger).map(p=>p-a)},c.tickFormat=(l,f)=>{if(f)throw new Error("Index scale's tickFormat does not support a specifier!");const p=to(t[0],t[1],Math.min(l,Math.ceil(n)))<1e5?xe(","):xe(".3s");return d=>p(d+a)},c.copy=()=>io().domain(t).range(e).paddingInner(i).paddingOuter(s).numberingOffset(a),c}function im(){const t=io().numberingOffset(1);let e;t.genome=function(r){return arguments.length?(e=r,t):e},t.ticks=r=>{if(!e)return[];const i=t.domain(),s=t.numberingOffset(),[o,a]=[Math.max(i[0],0),Math.min(i[1],e.totalSize-1)].map(l=>e.toChromosome(l)),u=Math.max(1,to(i[0],i[1],r)),c=[];for(let l=o.index;l<=a.index;l++){const f=e.chromosomes[l],h=Math.max(f.continuousStart+u,i[0]-(i[0]-f.continuousStart)%u),p=Math.min(f.continuousEnd-u/4,i[1]+1);for(let d=h;d<=p;d+=u){const g=d-s;g>=i[0]&&g<i[1]&&c.push(g)}}return c},t.tickFormat=(r,i)=>{if(!e)return;if(i)throw new Error("Locus scale's tickFormat does not support a specifier!");const s=t.domain(),o=s[1]-s[0],a=t.numberingOffset(),c=to(s[0],s[1],Math.min(r,Math.ceil(o)))<1e6?xe(","):xe(".3s"),l=f=>f-e.toChromosome(f).continuousStart;return f=>c(l(f)+a)};const n=t.copy;return t.copy=()=>n().genome(e),t}function sm(t){return t.type=="locus"}function je(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}function xt(t,e){switch(arguments.length){case 0:break;case 1:{typeof t=="function"?this.interpolator(t):this.range(t);break}default:{this.domain(t),typeof e=="function"?this.interpolator(e):this.range(e);break}}return this}const so=Symbol("implicit");function oo(){var t=new Map,e=[],n=[],r=so;function i(s){var o=s+"",a=t.get(o);if(!a){if(r!==so)return r;t.set(o,a=e.push(s))}return n[(a-1)%n.length]}return i.domain=function(s){if(!arguments.length)return e.slice();e=[],t=new Map;for(const o of s){const a=o+"";t.has(a)||t.set(a,e.push(o))}return i},i.range=function(s){return arguments.length?(n=Array.from(s),i):n.slice()},i.unknown=function(s){return arguments.length?(r=s,i):r},i.copy=function(){return oo(e,n).unknown(r)},je.apply(i,arguments),i}function an(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function _n(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function yt(){}var Ut=.7,un=1/Ut,cn="\\s*([+-]?\\d+)\\s*",$n="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ye="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",om=/^#([0-9a-f]{3,8})$/,am=new RegExp("^rgb\\("+[cn,cn,cn]+"\\)$"),um=new RegExp("^rgb\\("+[Ye,Ye,Ye]+"\\)$"),cm=new RegExp("^rgba\\("+[cn,cn,cn,$n]+"\\)$"),fm=new RegExp("^rgba\\("+[Ye,Ye,Ye,$n]+"\\)$"),lm=new RegExp("^hsl\\("+[$n,Ye,Ye]+"\\)$"),hm=new RegExp("^hsla\\("+[$n,Ye,Ye,$n]+"\\)$"),Dc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};an(yt,er,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Sc,formatHex:Sc,formatHsl:dm,formatRgb:Mc,toString:Mc});function Sc(){return this.rgb().formatHex()}function dm(){return Pc(this).formatHsl()}function Mc(){return this.rgb().formatRgb()}function er(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=om.exec(t))?(n=e[1].length,e=parseInt(e[1],16),n===6?Bc(e):n===3?new re(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?di(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?di(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=am.exec(t))?new re(e[1],e[2],e[3],1):(e=um.exec(t))?new re(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=cm.exec(t))?di(e[1],e[2],e[3],e[4]):(e=fm.exec(t))?di(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=lm.exec(t))?Tc(e[1],e[2]/100,e[3]/100,1):(e=hm.exec(t))?Tc(e[1],e[2]/100,e[3]/100,e[4]):Dc.hasOwnProperty(t)?Bc(Dc[t]):t==="transparent"?new re(NaN,NaN,NaN,0):null}function Bc(t){return new re(t>>16&255,t>>8&255,t&255,1)}function di(t,e,n,r){return r<=0&&(t=e=n=NaN),new re(t,e,n,r)}function ao(t){return t instanceof yt||(t=er(t)),t?(t=t.rgb(),new re(t.r,t.g,t.b,t.opacity)):new re}function pi(t,e,n,r){return arguments.length===1?ao(t):new re(t,e,n,r==null?1:r)}function re(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}an(re,pi,_n(yt,{brighter:function(t){return t=t==null?un:Math.pow(un,t),new re(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=t==null?Ut:Math.pow(Ut,t),new re(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:Fc,formatHex:Fc,formatRgb:Ic,toString:Ic}));function Fc(){return"#"+uo(this.r)+uo(this.g)+uo(this.b)}function Ic(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"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))+(t===1?")":", "+t+")")}function uo(t){return t=Math.max(0,Math.min(255,Math.round(t)||0)),(t<16?"0":"")+t.toString(16)}function Tc(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new We(t,e,n,r)}function Pc(t){if(t instanceof We)return new We(t.h,t.s,t.l,t.opacity);if(t instanceof yt||(t=er(t)),!t)return new We;if(t instanceof We)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),s=Math.max(e,n,r),o=NaN,a=s-i,u=(s+i)/2;return a?(e===s?o=(n-r)/a+(n<r)*6:n===s?o=(r-e)/a+2:o=(e-n)/a+4,a/=u<.5?s+i:2-s-i,o*=60):a=u>0&&u<1?0:o,new We(o,a,u,t.opacity)}function co(t,e,n,r){return arguments.length===1?Pc(t):new We(t,e,n,r==null?1:r)}function We(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}an(We,co,_n(yt,{brighter:function(t){return t=t==null?un:Math.pow(un,t),new We(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?Ut:Math.pow(Ut,t),new We(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new re(fo(t>=240?t-240:t+120,i,r),fo(t,i,r),fo(t<120?t+240:t-120,i,r),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 t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(t===1?")":", "+t+")")}}));function fo(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const Lc=Math.PI/180,Rc=180/Math.PI,gi=18,Nc=.96422,kc=1,Oc=.82521,zc=4/29,fn=6/29,Uc=3*fn*fn,pm=fn*fn*fn;function Gc(t){if(t instanceof Xe)return new Xe(t.l,t.a,t.b,t.opacity);if(t instanceof at)return Hc(t);t instanceof re||(t=ao(t));var e=mo(t.r),n=mo(t.g),r=mo(t.b),i=ho((.2225045*e+.7168786*n+.0606169*r)/kc),s,o;return e===n&&n===r?s=o=i:(s=ho((.4360747*e+.3850649*n+.1430804*r)/Nc),o=ho((.0139322*e+.0971045*n+.7141733*r)/Oc)),new Xe(116*i-16,500*(s-i),200*(i-o),t.opacity)}function lo(t,e,n,r){return arguments.length===1?Gc(t):new Xe(t,e,n,r==null?1:r)}function Xe(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}an(Xe,lo,_n(yt,{brighter:function(t){return new Xe(this.l+gi*(t==null?1:t),this.a,this.b,this.opacity)},darker:function(t){return new Xe(this.l-gi*(t==null?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=Nc*po(e),t=kc*po(t),n=Oc*po(n),new re(go(3.1338561*e-1.6168667*t-.4906146*n),go(-.9787684*e+1.9161415*t+.033454*n),go(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function ho(t){return t>pm?Math.pow(t,1/3):t/Uc+zc}function po(t){return t>fn?t*t*t:Uc*(t-zc)}function go(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function mo(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function gm(t){if(t instanceof at)return new at(t.h,t.c,t.l,t.opacity);if(t instanceof Xe||(t=Gc(t)),t.a===0&&t.b===0)return new at(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Rc;return new at(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Ao(t,e,n,r){return arguments.length===1?gm(t):new at(t,e,n,r==null?1:r)}function at(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function Hc(t){if(isNaN(t.h))return new Xe(t.l,0,0,t.opacity);var e=t.h*Lc;return new Xe(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}an(at,Ao,_n(yt,{brighter:function(t){return new at(this.h,this.c,this.l+gi*(t==null?1:t),this.opacity)},darker:function(t){return new at(this.h,this.c,this.l-gi*(t==null?1:t),this.opacity)},rgb:function(){return Hc(this).rgb()}}));var Vc=-.14861,xo=1.78277,yo=-.29227,mi=-.90649,tr=1.97294,Qc=tr*mi,jc=tr*xo,Yc=xo*yo-mi*Vc;function mm(t){if(t instanceof Gt)return new Gt(t.h,t.s,t.l,t.opacity);t instanceof re||(t=ao(t));var e=t.r/255,n=t.g/255,r=t.b/255,i=(Yc*r+Qc*e-jc*n)/(Yc+Qc-jc),s=r-i,o=(tr*(n-i)-yo*s)/mi,a=Math.sqrt(o*o+s*s)/(tr*i*(1-i)),u=a?Math.atan2(o,s)*Rc-120:NaN;return new Gt(u<0?u+360:u,a,i,t.opacity)}function bo(t,e,n,r){return arguments.length===1?mm(t):new Gt(t,e,n,r==null?1:r)}function Gt(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}an(Gt,bo,_n(yt,{brighter:function(t){return t=t==null?un:Math.pow(un,t),new Gt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?Ut:Math.pow(Ut,t),new Gt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Lc,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new re(255*(e+n*(Vc*r+xo*i)),255*(e+n*(yo*r+mi*i)),255*(e+n*(tr*r)),this.opacity)}}));function Wc(t,e,n,r,i){var s=t*t,o=s*t;return((1-3*t+3*s-o)*e+(4-6*s+3*o)*n+(1+3*t+3*s-3*o)*r+o*i)/6}function Xc(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],s=t[r+1],o=r>0?t[r-1]:2*i-s,a=r<e-1?t[r+2]:2*s-i;return Wc((n-r/e)*e,o,i,s,a)}}function Zc(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],s=t[r%e],o=t[(r+1)%e],a=t[(r+2)%e];return Wc((n-r/e)*e,i,s,o,a)}}var Ai=t=>()=>t;function Kc(t,e){return function(n){return t+n*e}}function Am(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}function xi(t,e){var n=e-t;return n?Kc(t,n>180||n<-180?n-360*Math.round(n/360):n):Ai(isNaN(t)?e:t)}function xm(t){return(t=+t)==1?te:function(e,n){return n-e?Am(e,n,t):Ai(isNaN(e)?n:e)}}function te(t,e){var n=e-t;return n?Kc(t,n):Ai(isNaN(t)?e:t)}var wo=function t(e){var n=xm(e);function r(i,s){var o=n((i=pi(i)).r,(s=pi(s)).r),a=n(i.g,s.g),u=n(i.b,s.b),c=te(i.opacity,s.opacity);return function(l){return i.r=o(l),i.g=a(l),i.b=u(l),i.opacity=c(l),i+""}}return r.gamma=t,r}(1);function qc(t){return function(e){var n=e.length,r=new Array(n),i=new Array(n),s=new Array(n),o,a;for(o=0;o<n;++o)a=pi(e[o]),r[o]=a.r||0,i[o]=a.g||0,s[o]=a.b||0;return r=t(r),i=t(i),s=t(s),a.opacity=1,function(u){return a.r=r(u),a.g=i(u),a.b=s(u),a+""}}}var ym=qc(Xc),bm=qc(Zc);function vo(t,e){e||(e=[]);var n=t?Math.min(e.length,t.length):0,r=e.slice(),i;return function(s){for(i=0;i<n;++i)r[i]=t[i]*(1-s)+e[i]*s;return r}}function Jc(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function wm(t,e){return(Jc(e)?vo:_c)(t,e)}function _c(t,e){var n=e?e.length:0,r=t?Math.min(n,t.length):0,i=new Array(r),s=new Array(n),o;for(o=0;o<r;++o)i[o]=bt(t[o],e[o]);for(;o<n;++o)s[o]=e[o];return function(a){for(o=0;o<r;++o)s[o]=i[o](a);return s}}function $c(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Ne(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function ef(t,e){var n={},r={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?n[i]=bt(t[i],e[i]):r[i]=e[i];return function(s){for(i in n)r[i]=n[i](s);return r}}var Eo=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Co=new RegExp(Eo.source,"g");function vm(t){return function(){return t}}function Em(t){return function(e){return t(e)+""}}function tf(t,e){var n=Eo.lastIndex=Co.lastIndex=0,r,i,s,o=-1,a=[],u=[];for(t=t+"",e=e+"";(r=Eo.exec(t))&&(i=Co.exec(e));)(s=i.index)>n&&(s=e.slice(n,s),a[o]?a[o]+=s:a[++o]=s),(r=r[0])===(i=i[0])?a[o]?a[o]+=i:a[++o]=i:(a[++o]=null,u.push({i:o,x:Ne(r,i)})),n=Co.lastIndex;return n<e.length&&(s=e.slice(n),a[o]?a[o]+=s:a[++o]=s),a.length<2?u[0]?Em(u[0].x):vm(e):(e=u.length,function(c){for(var l=0,f;l<e;++l)a[(f=u[l]).i]=f.x(c);return a.join("")})}function bt(t,e){var n=typeof e,r;return e==null||n==="boolean"?Ai(e):(n==="number"?Ne:n==="string"?(r=er(e))?(e=r,wo):tf:e instanceof er?wo:e instanceof Date?$c:Jc(e)?vo:Array.isArray(e)?_c:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?ef:Ne)(t,e)}function Cm(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}function Dm(t,e){var n=xi(+t,+e);return function(r){var i=n(r);return i-360*Math.floor(i/360)}}function nr(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var nf=180/Math.PI,Do={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function rf(t,e,n,r,i,s){var o,a,u;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(a=Math.sqrt(n*n+r*r))&&(n/=a,r/=a,u/=a),t*r<e*n&&(t=-t,e=-e,u=-u,o=-o),{translateX:i,translateY:s,rotate:Math.atan2(e,t)*nf,skewX:Math.atan(u)*nf,scaleX:o,scaleY:a}}var yi;function Sm(t){const e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Do:rf(e.a,e.b,e.c,e.d,e.e,e.f)}function Mm(t){return t==null||(yi||(yi=document.createElementNS("http://www.w3.org/2000/svg","g")),yi.setAttribute("transform",t),!(t=yi.transform.baseVal.consolidate()))?Do:(t=t.matrix,rf(t.a,t.b,t.c,t.d,t.e,t.f))}function sf(t,e,n,r){function i(c){return c.length?c.pop()+" ":""}function s(c,l,f,h,p,d){if(c!==f||l!==h){var g=p.push("translate(",null,e,null,n);d.push({i:g-4,x:Ne(c,f)},{i:g-2,x:Ne(l,h)})}else(f||h)&&p.push("translate("+f+e+h+n)}function o(c,l,f,h){c!==l?(c-l>180?l+=360:l-c>180&&(c+=360),h.push({i:f.push(i(f)+"rotate(",null,r)-2,x:Ne(c,l)})):l&&f.push(i(f)+"rotate("+l+r)}function a(c,l,f,h){c!==l?h.push({i:f.push(i(f)+"skewX(",null,r)-2,x:Ne(c,l)}):l&&f.push(i(f)+"skewX("+l+r)}function u(c,l,f,h,p,d){if(c!==f||l!==h){var g=p.push(i(p)+"scale(",null,",",null,")");d.push({i:g-4,x:Ne(c,f)},{i:g-2,x:Ne(l,h)})}else(f!==1||h!==1)&&p.push(i(p)+"scale("+f+","+h+")")}return function(c,l){var f=[],h=[];return c=t(c),l=t(l),s(c.translateX,c.translateY,l.translateX,l.translateY,f,h),o(c.rotate,l.rotate,f,h),a(c.skewX,l.skewX,f,h),u(c.scaleX,c.scaleY,l.scaleX,l.scaleY,f,h),c=l=null,function(p){for(var d=-1,g=h.length,m;++d<g;)f[(m=h[d]).i]=m.x(p);return f.join("")}}}var Bm=sf(Sm,"px, ","px)","deg)"),Fm=sf(Mm,", ",")",")"),Im=1e-12;function of(t){return((t=Math.exp(t))+1/t)/2}function Tm(t){return((t=Math.exp(t))-1/t)/2}function Pm(t){return((t=Math.exp(2*t))-1)/(t+1)}var af=function t(e,n,r){function i(s,o){var a=s[0],u=s[1],c=s[2],l=o[0],f=o[1],h=o[2],p=l-a,d=f-u,g=p*p+d*d,m,A;if(g<Im)A=Math.log(h/c)/e,m=function(F){return[a+F*p,u+F*d,c*Math.exp(e*F*A)]};else{var b=Math.sqrt(g),y=(h*h-c*c+r*g)/(2*c*n*b),v=(h*h-c*c-r*g)/(2*h*n*b),D=Math.log(Math.sqrt(y*y+1)-y),C=Math.log(Math.sqrt(v*v+1)-v);A=(C-D)/e,m=function(F){var S=F*A,le=of(D),se=c/(n*b)*(le*Pm(e*S+D)-Tm(D));return[a+se*p,u+se*d,c*le/of(e*S+D)]}}return m.duration=A*1e3*e/Math.SQRT2,m}return i.rho=function(s){var o=Math.max(.001,+s),a=o*o,u=a*a;return t(o,a,u)},i}(Math.SQRT2,2,4);function uf(t){return function(e,n){var r=t((e=co(e)).h,(n=co(n)).h),i=te(e.s,n.s),s=te(e.l,n.l),o=te(e.opacity,n.opacity);return function(a){return e.h=r(a),e.s=i(a),e.l=s(a),e.opacity=o(a),e+""}}}var Lm=uf(xi),Rm=uf(te);function Nm(t,e){var n=te((t=lo(t)).l,(e=lo(e)).l),r=te(t.a,e.a),i=te(t.b,e.b),s=te(t.opacity,e.opacity);return function(o){return t.l=n(o),t.a=r(o),t.b=i(o),t.opacity=s(o),t+""}}function cf(t){return function(e,n){var r=t((e=Ao(e)).h,(n=Ao(n)).h),i=te(e.c,n.c),s=te(e.l,n.l),o=te(e.opacity,n.opacity);return function(a){return e.h=r(a),e.c=i(a),e.l=s(a),e.opacity=o(a),e+""}}}var km=cf(xi),Om=cf(te);function ff(t){return function e(n){n=+n;function r(i,s){var o=t((i=bo(i)).h,(s=bo(s)).h),a=te(i.s,s.s),u=te(i.l,s.l),c=te(i.opacity,s.opacity);return function(l){return i.h=o(l),i.s=a(l),i.l=u(Math.pow(l,n)),i.opacity=c(l),i+""}}return r.gamma=e,r}(1)}var zm=ff(xi),Um=ff(te);function So(t,e){e===void 0&&(e=t,t=bt);for(var n=0,r=e.length-1,i=e[0],s=new Array(r<0?0:r);n<r;)s[n]=t(i,i=e[++n]);return function(o){var a=Math.max(0,Math.min(r-1,Math.floor(o*=r)));return s[a](o-a)}}function Gm(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n}var Hm=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",interpolate:bt,interpolateArray:wm,interpolateBasis:Xc,interpolateBasisClosed:Zc,interpolateDate:$c,interpolateDiscrete:Cm,interpolateHue:Dm,interpolateNumber:Ne,interpolateNumberArray:vo,interpolateObject:ef,interpolateRound:nr,interpolateString:tf,interpolateTransformCss:Bm,interpolateTransformSvg:Fm,interpolateZoom:af,interpolateRgb:wo,interpolateRgbBasis:ym,interpolateRgbBasisClosed:bm,interpolateHsl:Lm,interpolateHslLong:Rm,interpolateLab:Nm,interpolateHcl:km,interpolateHclLong:Om,interpolateCubehelix:zm,interpolateCubehelixLong:Um,piecewise:So,quantize:Gm});function Vm(t){return function(){return t}}function Mo(t){return+t}var lf=[0,1];function ye(t){return t}function Bo(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:Vm(isNaN(e)?NaN:.5)}function Qm(t,e){var n;return t>e&&(n=t,t=e,e=n),function(r){return Math.max(t,Math.min(e,r))}}function jm(t,e,n){var r=t[0],i=t[1],s=e[0],o=e[1];return i<r?(r=Bo(i,r),s=n(o,s)):(r=Bo(r,i),s=n(s,o)),function(a){return s(r(a))}}function Ym(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),s=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<r;)i[o]=Bo(t[o],t[o+1]),s[o]=n(e[o],e[o+1]);return function(a){var u=Tn(t,a,1,r)-1;return s[u](i[u](a))}}function rr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function bi(){var t=lf,e=lf,n=bt,r,i,s,o=ye,a,u,c;function l(){var h=Math.min(t.length,e.length);return o!==ye&&(o=Qm(t[0],t[h-1])),a=h>2?Ym:jm,u=c=null,f}function f(h){return h==null||isNaN(h=+h)?s:(u||(u=a(t.map(r),e,n)))(r(o(h)))}return f.invert=function(h){return o(i((c||(c=a(e,t.map(r),Ne)))(h)))},f.domain=function(h){return arguments.length?(t=Array.from(h,Mo),l()):t.slice()},f.range=function(h){return arguments.length?(e=Array.from(h),l()):e.slice()},f.rangeRound=function(h){return e=Array.from(h),n=nr,l()},f.clamp=function(h){return arguments.length?(o=h?!0:ye,l()):o!==ye},f.interpolate=function(h){return arguments.length?(n=h,l()):n},f.unknown=function(h){return arguments.length?(s=h,f):s},function(h,p){return r=h,i=p,l()}}function hf(){return bi()(ye,ye)}function df(t,e,n,r){var i=Xr(t,e,n),s;switch(r=en(r==null?",f":r),r.type){case"s":{var o=Math.max(Math.abs(t),Math.abs(e));return r.precision==null&&!isNaN(s=Du(i,o))&&(r.precision=s),Ms(r,o)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(s=Su(i,Math.max(Math.abs(t),Math.abs(e))))&&(r.precision=s-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(s=Cu(i))&&(r.precision=s-(r.type==="%")*2);break}}return qr(r)}function Ht(t){var e=t.domain;return t.ticks=function(n){var r=e();return Ds(r[0],r[r.length-1],n==null?10:n)},t.tickFormat=function(n,r){var i=e();return df(i[0],i[i.length-1],n==null?10:n,r)},t.nice=function(n){n==null&&(n=10);var r=e(),i=0,s=r.length-1,o=r[i],a=r[s],u,c,l=10;for(a<o&&(c=o,o=a,a=c,c=i,i=s,s=c);l-- >0;){if(c=Au(o,a,n),c===u)return r[i]=o,r[s]=a,e(r);if(c>0)o=Math.floor(o/c)*c,a=Math.ceil(a/c)*c;else if(c<0)o=Math.ceil(o*c)/c,a=Math.floor(a*c)/c;else break;u=c}return t},t}function pf(){var t=hf();return t.copy=function(){return rr(t,pf())},je.apply(t,arguments),Ht(t)}function gf(t){var e;function n(r){return r==null||isNaN(r=+r)?e:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(t=Array.from(r,Mo),n):t.slice()},n.unknown=function(r){return arguments.length?(e=r,n):e},n.copy=function(){return gf(t).unknown(e)},t=arguments.length?Array.from(t,Mo):[0,1],Ht(n)}function mf(t,e){t=t.slice();var n=0,r=t.length-1,i=t[n],s=t[r],o;return s<i&&(o=n,n=r,r=o,o=i,i=s,s=o),t[n]=e.floor(i),t[r]=e.ceil(s),t}function Af(t){return Math.log(t)}function xf(t){return Math.exp(t)}function Wm(t){return-Math.log(-t)}function Xm(t){return-Math.exp(-t)}function Zm(t){return isFinite(t)?+("1e"+t):t<0?0:t}function Km(t){return t===10?Zm:t===Math.E?Math.exp:function(e){return Math.pow(t,e)}}function qm(t){return t===Math.E?Math.log:t===10&&Math.log10||t===2&&Math.log2||(t=Math.log(t),function(e){return Math.log(e)/t})}function yf(t){return function(e){return-t(-e)}}function Fo(t){var e=t(Af,xf),n=e.domain,r=10,i,s;function o(){return i=qm(r),s=Km(r),n()[0]<0?(i=yf(i),s=yf(s),t(Wm,Xm)):t(Af,xf),e}return e.base=function(a){return arguments.length?(r=+a,o()):r},e.domain=function(a){return arguments.length?(n(a),o()):n()},e.ticks=function(a){var u=n(),c=u[0],l=u[u.length-1],f;(f=l<c)&&(h=c,c=l,l=h);var h=i(c),p=i(l),d,g,m,A=a==null?10:+a,b=[];if(!(r%1)&&p-h<A){if(h=Math.floor(h),p=Math.ceil(p),c>0){for(;h<=p;++h)for(g=1,d=s(h);g<r;++g)if(m=d*g,!(m<c)){if(m>l)break;b.push(m)}}else for(;h<=p;++h)for(g=r-1,d=s(h);g>=1;--g)if(m=d*g,!(m<c)){if(m>l)break;b.push(m)}b.length*2<A&&(b=Ds(c,l,A))}else b=Ds(h,p,Math.min(p-h,A)).map(s);return f?b.reverse():b},e.tickFormat=function(a,u){if(u==null&&(u=r===10?".0e":","),typeof u!="function"&&(u=qr(u)),a===1/0)return u;a==null&&(a=10);var c=Math.max(1,r*a/e.ticks().length);return function(l){var f=l/s(Math.round(i(l)));return f*r<r-.5&&(f*=r),f<=c?u(l):""}},e.nice=function(){return n(mf(n(),{floor:function(a){return s(Math.floor(i(a)))},ceil:function(a){return s(Math.ceil(i(a)))}}))},e}function Io(){var t=Fo(bi()).domain([1,10]);return t.copy=function(){return rr(t,Io()).base(t.base())},je.apply(t,arguments),t}function bf(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function wf(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function To(t){var e=1,n=t(bf(e),wf(e));return n.constant=function(r){return arguments.length?t(bf(e=+r),wf(e)):e},Ht(n)}function vf(){var t=To(bi());return t.copy=function(){return rr(t,vf()).constant(t.constant())},je.apply(t,arguments)}function Ef(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function Jm(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function _m(t){return t<0?-t*t:t*t}function Po(t){var e=t(ye,ye),n=1;function r(){return n===1?t(ye,ye):n===.5?t(Jm,_m):t(Ef(n),Ef(1/n))}return e.exponent=function(i){return arguments.length?(n=+i,r()):n},Ht(e)}function Lo(){var t=Po(bi());return t.copy=function(){return rr(t,Lo()).exponent(t.exponent())},je.apply(t,arguments),t}function $m(){return Lo.apply(null,arguments).exponent(.5)}function Cf(){var t=[],e=[],n=[],r;function i(){var o=0,a=Math.max(1,e.length);for(n=new Array(a-1);++o<a;)n[o-1]=Bd(t,o/a);return s}function s(o){return o==null||isNaN(o=+o)?r:e[Tn(n,o)]}return s.invertExtent=function(o){var a=e.indexOf(o);return a<0?[NaN,NaN]:[a>0?n[a-1]:t[0],a<n.length?n[a]:t[t.length-1]]},s.domain=function(o){if(!arguments.length)return t.slice();t=[];for(let a of o)a!=null&&!isNaN(a=+a)&&t.push(a);return t.sort(ys),i()},s.range=function(o){return arguments.length?(e=Array.from(o),i()):e.slice()},s.unknown=function(o){return arguments.length?(r=o,s):r},s.quantiles=function(){return n.slice()},s.copy=function(){return Cf().domain(t).range(e).unknown(r)},je.apply(s,arguments)}function Df(){var t=0,e=1,n=1,r=[.5],i=[0,1],s;function o(u){return u!=null&&u<=u?i[Tn(r,u,0,n)]:s}function a(){var u=-1;for(r=new Array(n);++u<n;)r[u]=((u+1)*e-(u-n)*t)/(n+1);return o}return o.domain=function(u){return arguments.length?([t,e]=u,t=+t,e=+e,a()):[t,e]},o.range=function(u){return arguments.length?(n=(i=Array.from(u)).length-1,a()):i.slice()},o.invertExtent=function(u){var c=i.indexOf(u);return c<0?[NaN,NaN]:c<1?[t,r[0]]:c>=n?[r[n-1],e]:[r[c-1],r[c]]},o.unknown=function(u){return arguments.length&&(s=u),o},o.thresholds=function(){return r.slice()},o.copy=function(){return Df().domain([t,e]).range(i).unknown(s)},je.apply(Ht(o),arguments)}function Sf(){var t=[.5],e=[0,1],n,r=1;function i(s){return s!=null&&s<=s?e[Tn(t,s,0,r)]:n}return i.domain=function(s){return arguments.length?(t=Array.from(s),r=Math.min(t.length,e.length-1),i):t.slice()},i.range=function(s){return arguments.length?(e=Array.from(s),r=Math.min(t.length,e.length-1),i):e.slice()},i.invertExtent=function(s){var o=e.indexOf(s);return[t[o-1],t[o]]},i.unknown=function(s){return arguments.length?(n=s,i):n},i.copy=function(){return Sf().domain(t).range(e).unknown(n)},je.apply(i,arguments)}function eA(t){return new Date(t)}function tA(t){return t instanceof Date?+t:+new Date(+t)}function Ro(t,e,n,r,i,s,o,a,u,c){var l=hf(),f=l.invert,h=l.domain,p=c(".%L"),d=c(":%S"),g=c("%I:%M"),m=c("%I %p"),A=c("%a %d"),b=c("%b %d"),y=c("%B"),v=c("%Y");function D(C){return(u(C)<C?p:a(C)<C?d:o(C)<C?g:s(C)<C?m:r(C)<C?i(C)<C?A:b:n(C)<C?y:v)(C)}return l.invert=function(C){return new Date(f(C))},l.domain=function(C){return arguments.length?h(Array.from(C,tA)):h().map(eA)},l.ticks=function(C){var F=h();return t(F[0],F[F.length-1],C==null?10:C)},l.tickFormat=function(C,F){return F==null?D:c(F)},l.nice=function(C){var F=h();return(!C||typeof C.range!="function")&&(C=e(F[0],F[F.length-1],C==null?10:C)),C?h(mf(F,C)):l},l.copy=function(){return rr(l,Ro(t,e,n,r,i,s,o,a,u,c))},l}function nA(){return je.apply(Ro(Kd,qd,gt,_r,Jr,Rt,Ns,Rs,pt,Qs).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function rA(){return je.apply(Ro(Xd,Zd,mt,ei,$r,kt,zs,Os,pt,js).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function wi(){var t=0,e=1,n,r,i,s,o=ye,a=!1,u;function c(f){return f==null||isNaN(f=+f)?u:o(i===0?.5:(f=(s(f)-n)*i,a?Math.max(0,Math.min(1,f)):f))}c.domain=function(f){return arguments.length?([t,e]=f,n=s(t=+t),r=s(e=+e),i=n===r?0:1/(r-n),c):[t,e]},c.clamp=function(f){return arguments.length?(a=!!f,c):a},c.interpolator=function(f){return arguments.length?(o=f,c):o};function l(f){return function(h){var p,d;return arguments.length?([p,d]=h,o=f(p,d),c):[o(0),o(1)]}}return c.range=l(bt),c.rangeRound=l(nr),c.unknown=function(f){return arguments.length?(u=f,c):u},function(f){return s=f,n=f(t),r=f(e),i=n===r?0:1/(r-n),c}}function wt(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function No(){var t=Ht(wi()(ye));return t.copy=function(){return wt(t,No())},xt.apply(t,arguments)}function Mf(){var t=Fo(wi()).domain([1,10]);return t.copy=function(){return wt(t,Mf()).base(t.base())},xt.apply(t,arguments)}function Bf(){var t=To(wi());return t.copy=function(){return wt(t,Bf()).constant(t.constant())},xt.apply(t,arguments)}function ko(){var t=Po(wi());return t.copy=function(){return wt(t,ko()).exponent(t.exponent())},xt.apply(t,arguments)}function iA(){return ko.apply(null,arguments).exponent(.5)}function vi(){var t=0,e=.5,n=1,r=1,i,s,o,a,u,c=ye,l,f=!1,h;function p(g){return isNaN(g=+g)?h:(g=.5+((g=+l(g))-s)*(r*g<r*s?a:u),c(f?Math.max(0,Math.min(1,g)):g))}p.domain=function(g){return arguments.length?([t,e,n]=g,i=l(t=+t),s=l(e=+e),o=l(n=+n),a=i===s?0:.5/(s-i),u=s===o?0:.5/(o-s),r=s<i?-1:1,p):[t,e,n]},p.clamp=function(g){return arguments.length?(f=!!g,p):f},p.interpolator=function(g){return arguments.length?(c=g,p):c};function d(g){return function(m){var A,b,y;return arguments.length?([A,b,y]=m,c=So(g,[A,b,y]),p):[c(0),c(.5),c(1)]}}return p.range=d(bt),p.rangeRound=d(nr),p.unknown=function(g){return arguments.length?(h=g,p):h},function(g){return l=g,i=g(t),s=g(e),o=g(n),a=i===s?0:.5/(s-i),u=s===o?0:.5/(o-s),r=s<i?-1:1,p}}function Ff(){var t=Ht(vi()(ye));return t.copy=function(){return wt(t,Ff())},xt.apply(t,arguments)}function If(){var t=Fo(vi()).domain([.1,1,10]);return t.copy=function(){return wt(t,If()).base(t.base())},xt.apply(t,arguments)}function Tf(){var t=To(vi());return t.copy=function(){return wt(t,Tf()).constant(t.constant())},xt.apply(t,arguments)}function Oo(){var t=Po(vi());return t.copy=function(){return wt(t,Oo()).exponent(t.exponent())},xt.apply(t,arguments)}function sA(){return Oo.apply(null,arguments).exponent(.5)}function zo(t,e,n){const r=t-e+n*2;return t?r>0?r:1:0}const oA="identity",ln="linear",vt="log",ir="pow",sr="sqrt",Ei="symlog",Pf="time",Lf="utc",Ze="sequential",hn="diverging",Uo="quantile",Rf="quantize",Nf="threshold",Go="ordinal",Ho="point",kf="band",Vo="bin-ordinal",J="continuous",or="discrete",ar="discretizing",Ie="interpolating",Of="temporal";function aA(t){return function(e){let n=e[0],r=e[1],i;return r<n&&(i=n,n=r,r=i),[t.invert(n),t.invert(r)]}}function uA(t){return function(e){const n=t.range();let r=e[0],i=e[1],s=-1,o,a,u,c;for(i<r&&(a=r,r=i,i=a),u=0,c=n.length;u<c;++u)n[u]>=r&&n[u]<=i&&(s<0&&(s=u),o=u);if(!(s<0))return r=t.invertExtent(n[s]),i=t.invertExtent(n[o]),[r[0]===void 0?r[1]:r[0],i[1]===void 0?i[0]:i[1]]}}function Qo(){const t=oo().unknown(void 0),e=t.domain,n=t.range;let r=[0,1],i,s,o=!1,a=0,u=0,c=.5;delete t.unknown;function l(){const f=e().length,h=r[1]<r[0],p=r[1-h],d=zo(f,a,u);let g=r[h-0];i=(p-g)/(d||1),o&&(i=Math.floor(i)),g+=(p-g-i*(f-a))*c,s=i*(1-a),o&&(g=Math.round(g),s=Math.round(s));const m=Fd(f).map(A=>g+i*A);return n(h?m.reverse():m)}return t.domain=function(f){return arguments.length?(e(f),l()):e()},t.range=function(f){return arguments.length?(r=[+f[0],+f[1]],l()):r.slice()},t.rangeRound=function(f){return r=[+f[0],+f[1]],o=!0,l()},t.bandwidth=function(){return s},t.step=function(){return i},t.round=function(f){return arguments.length?(o=!!f,l()):o},t.padding=function(f){return arguments.length?(u=Math.max(0,Math.min(1,f)),a=u,l()):a},t.paddingInner=function(f){return arguments.length?(a=Math.max(0,Math.min(1,f)),l()):a},t.paddingOuter=function(f){return arguments.length?(u=Math.max(0,Math.min(1,f)),l()):u},t.align=function(f){return arguments.length?(c=Math.max(0,Math.min(1,f)),l()):c},t.invertRange=function(f){if(f[0]==null||f[1]==null)return;const h=r[1]<r[0],p=h?n().reverse():n(),d=p.length-1;let g=+f[0],m=+f[1],A,b,y;if(!(g!==g||m!==m)&&(m<g&&(y=g,g=m,m=y),!(m<p[0]||g>r[1-h])))return A=Math.max(0,ws(p,g)-1),b=g===m?A:ws(p,m)-1,g-p[A]>s+1e-10&&++A,h&&(y=A,A=d-b,b=d-y),A>b?void 0:e().slice(A,b+1)},t.invert=function(f){const h=t.invertRange([f,f]);return h&&h[0]},t.copy=function(){return Qo().domain(e()).range(r).round(o).paddingInner(a).paddingOuter(u).align(c)},l()}function zf(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return zf(e())},t}function cA(){return zf(Qo().paddingInner(1))}var fA=Array.prototype.map;function lA(t){return fA.call(t,Fn)}const hA=Array.prototype.slice;function Uf(){let t=[],e=[];function n(r){return r==null||r!==r?void 0:e[(Tn(t,r)-1)%e.length]}return n.domain=function(r){return arguments.length?(t=lA(r),n):t.slice()},n.range=function(r){return arguments.length?(e=hA.call(r),n):e.slice()},n.tickFormat=function(r,i){return df(t[0],Re(t),r==null?10:r,i)},n.copy=function(){return Uf().domain(n.domain()).range(n.range())},n}const Ci={};function dA(t,e,n){const r=function(){const s=e();return s.invertRange||(s.invertRange=s.invert?aA(s):s.invertExtent?uA(s):void 0),s.type=t,s};return r.metadata=Wr(ps(n)),r}function k(t,e,n){return arguments.length>1?(Ci[t]=dA(t,e,n),this):pA(t)?Ci[t]:void 0}k(oA,gf),k(ln,pf,J),k(vt,Io,[J,vt]),k(ir,Lo,J),k(sr,$m,J),k(Ei,vf,J),k(Pf,nA,[J,Of]),k(Lf,rA,[J,Of]),k(Ze,No,[J,Ie]),k("".concat(Ze,"-").concat(ln),No,[J,Ie]),k("".concat(Ze,"-").concat(vt),Mf,[J,Ie,vt]),k("".concat(Ze,"-").concat(ir),ko,[J,Ie]),k("".concat(Ze,"-").concat(sr),iA,[J,Ie]),k("".concat(Ze,"-").concat(Ei),Bf,[J,Ie]),k("".concat(hn,"-").concat(ln),Ff,[J,Ie]),k("".concat(hn,"-").concat(vt),If,[J,Ie,vt]),k("".concat(hn,"-").concat(ir),Oo,[J,Ie]),k("".concat(hn,"-").concat(sr),sA,[J,Ie]),k("".concat(hn,"-").concat(Ei),Tf,[J,Ie]),k(Uo,Cf,[ar,Uo]),k(Rf,Df,ar),k(Nf,Sf,ar),k(Vo,Uf,[or,ar]),k(Go,oo,or),k(kf,Qo,or),k(Ho,cA,or);function pA(t){return Pt(Ci,t)}function ur(t,e){const n=Ci[t];return n&&n.metadata[e]}function Ke(t){return ur(t,J)}function Vt(t){return ur(t,or)}function dn(t){return ur(t,ar)}function Gf(t){return ur(t,vt)}function Di(t){return ur(t,Ie)}function gA(t,e){const n=e[0],r=Re(e)-n;return function(i){return t(n+i*r)}}function Si(t,e,n){return So(Hf(e||"rgb",n),t)}function mA(t,e){const n=new Array(e),r=e+1;for(let i=0;i<e;)n[i]=t(++i/r);return n}function Hf(t,e){const n=Hm[AA(t)];return e!=null&&n&&n.gamma?n.gamma(e):n}function AA(t){return"interpolate"+t.toLowerCase().split("-").map(e=>e[0].toUpperCase()+e.slice(1)).join("")}const xA={blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},yA={category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"};function Vf(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r<e;)n[r]="#"+t.slice(r*6,++r*6);return n}function Qf(t,e){for(const n in t)jo(n,e(t[n]))}const jf={};Qf(yA,Vf),Qf(xA,t=>Si(Vf(t)));function jo(t,e){return t=t&&t.toLowerCase(),arguments.length>1?(jf[t]=e,this):jf[t]}var QC="";function bA(t,e){var n=t.getBoundingClientRect();return[e.clientX-n.left-t.clientLeft,e.clientY-n.top-t.clientTop]}function Yf(t,e){return t.length==e.length&&t.every((n,r)=>t[r]===e[r])}function wA(t,e,n,r){return t.length==e.length&&t.every((i,s)=>n(t[s])===r(e[s]))}function qe(t){return Array.isArray(t)?t:typeof t!="undefined"?[t]:[]}function ke(t){return t[t.length-1]}class vA{constructor(e){this.container=e,this.element=document.createElement("div"),this.element.className="tooltip",this._visible=!0,this.container.appendChild(this.element),this._previousTooltipDatum=void 0,this.enabledStack=[!0],this._penaltyUntil=0,this._lastCoords=void 0,this._previousMove=0,this.clear()}set visible(e){e!=this._visible&&(this.element.style.display=e?null:"none",this._visible=e)}get visible(){return this._visible}get enabled(){var e;return(e=ke(this.enabledStack))!=null?e:!0}pushEnabledState(e){this.enabledStack.push(e),e||(this.visible=!1)}popEnabledState(){this.enabledStack.pop()}handleMouseMove(e){this.mouseCoords=bA(this.container,e);const n=performance.now();!this.visible&&!this._isPenalty()&&n-this._previousMove>500&&(this._penaltyUntil=n+70),this._lastCoords&&EA(this.mouseCoords,this._lastCoords)>20&&(this._penaltyUntil=n+400),this._lastCoords=this.mouseCoords,this.visible&&this.updatePlacement(),this._previousMove=n}updatePlacement(){const[n,r]=this.mouseCoords;let i=n+20;i>this.container.clientWidth-this.element.offsetWidth&&(i=n-20-this.element.offsetWidth),this.element.style.left=i+"px",this.element.style.top=Math.min(r+20,this.container.clientHeight-this.element.offsetHeight)+"px"}setContent(e){if(!e||!this.enabled||this._isPenalty()){this.visible&&(hc("",this.element),this.visible=!1),this._previousTooltipDatum=void 0;return}hc(e,this.element),this.visible=!0,this.updatePlacement()}clear(){this._previousTooltipDatum=void 0,this.setContent(void 0)}updateWithDatum(e,n){e!==this._previousTooltipDatum&&(this._previousTooltipDatum=e,n||(n=r=>Promise.resolve(ot`${JSON.stringify(r)}`)),n(e).then(r=>this.setContent(r)).catch(r=>{if(r!=="debounced")throw r}))}_isPenalty(){return this._penaltyUntil&&this._penaltyUntil>performance.now()}}function EA(t,e){let n=0;for(let r=0;r<t.length;r++)n+=(t[r]-e[r])**2;return Math.sqrt(n)}const CA="RawCode",DA="Literal",SA="Property",MA="Identifier",BA="ArrayExpression",FA="BinaryExpression",IA="CallExpression",TA="ConditionalExpression",PA="LogicalExpression",LA="MemberExpression",RA="ObjectExpression",NA="UnaryExpression";function Oe(t){this.type=t}Oe.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=kA(this),n=0,r=e.length;n<r;++n)if(e[n].visit(t))return 1};function kA(t){switch(t.type){case BA:return t.elements;case FA:case PA:return[t.left,t.right];case IA:return[t.callee].concat(t.arguments);case TA:return[t.test,t.consequent,t.alternate];case LA:return[t.object,t.property];case RA:return t.properties;case SA:return[t.key,t.value];case NA:return[t.argument];case MA:case DA:case CA:default:return[]}}var Je,M,x,ae,O,Mi=1,cr=2,Qt=3,Et=4,Bi=5,jt=6,be=7,fr=8,OA=9;Je={},Je[Mi]="Boolean",Je[cr]="<end>",Je[Qt]="Identifier",Je[Et]="Keyword",Je[Bi]="Null",Je[jt]="Numeric",Je[be]="Punctuator",Je[fr]="String",Je[OA]="RegularExpression";var zA="ArrayExpression",UA="BinaryExpression",GA="CallExpression",HA="ConditionalExpression",Wf="Identifier",VA="Literal",QA="LogicalExpression",jA="MemberExpression",YA="ObjectExpression",WA="Property",XA="UnaryExpression",ne="Unexpected token %0",ZA="Unexpected number",KA="Unexpected string",qA="Unexpected identifier",JA="Unexpected reserved word",_A="Unexpected end of input",Yo="Invalid regular expression",Wo="Invalid regular expression: missing /",Xf="Octal literals are not allowed in strict mode.",$A="Duplicate data property in object literal not allowed in strict mode",ie="ILLEGAL",lr="Disabled.",e1=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),t1=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function Fi(t,e){if(!t)throw new Error("ASSERT: "+e)}function ut(t){return t>=48&&t<=57}function Xo(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function hr(t){return"01234567".indexOf(t)>=0}function n1(t){return t===32||t===9||t===11||t===12||t===160||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function dr(t){return t===10||t===13||t===8232||t===8233}function pr(t){return t===36||t===95||t>=65&&t<=90||t>=97&&t<=122||t===92||t>=128&&e1.test(String.fromCharCode(t))}function Ii(t){return t===36||t===95||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t===92||t>=128&&t1.test(String.fromCharCode(t))}const r1={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function Zf(){for(;x<ae;){const t=M.charCodeAt(x);if(n1(t)||dr(t))++x;else break}}function Zo(t){var e,n,r,i=0;for(n=t==="u"?4:2,e=0;e<n;++e)x<ae&&Xo(M[x])?(r=M[x++],i=i*16+"0123456789abcdef".indexOf(r.toLowerCase())):R({},ne,ie);return String.fromCharCode(i)}function i1(){var t,e,n,r;for(t=M[x],e=0,t==="}"&&R({},ne,ie);x<ae&&(t=M[x++],!!Xo(t));)e=e*16+"0123456789abcdef".indexOf(t.toLowerCase());return(e>1114111||t!=="}")&&R({},ne,ie),e<=65535?String.fromCharCode(e):(n=(e-65536>>10)+55296,r=(e-65536&1023)+56320,String.fromCharCode(n,r))}function Kf(){var t,e;for(t=M.charCodeAt(x++),e=String.fromCharCode(t),t===92&&(M.charCodeAt(x)!==117&&R({},ne,ie),++x,t=Zo("u"),(!t||t==="\\"||!pr(t.charCodeAt(0)))&&R({},ne,ie),e=t);x<ae&&(t=M.charCodeAt(x),!!Ii(t));)++x,e+=String.fromCharCode(t),t===92&&(e=e.substr(0,e.length-1),M.charCodeAt(x)!==117&&R({},ne,ie),++x,t=Zo("u"),(!t||t==="\\"||!Ii(t.charCodeAt(0)))&&R({},ne,ie),e+=t);return e}function s1(){var t,e;for(t=x++;x<ae;){if(e=M.charCodeAt(x),e===92)return x=t,Kf();if(Ii(e))++x;else break}return M.slice(t,x)}function o1(){var t,e,n;return t=x,e=M.charCodeAt(x)===92?Kf():s1(),e.length===1?n=Qt:r1.hasOwnProperty(e)?n=Et:e==="null"?n=Bi:e==="true"||e==="false"?n=Mi:n=Qt,{type:n,value:e,start:t,end:x}}function Ko(){var t=x,e=M.charCodeAt(x),n,r=M[x],i,s,o;switch(e){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++x,{type:be,value:String.fromCharCode(e),start:t,end:x};default:if(n=M.charCodeAt(x+1),n===61)switch(e){case 43:case 45:case 47:case 60:case 62:case 94:case 124:case 37:case 38:case 42:return x+=2,{type:be,value:String.fromCharCode(e)+String.fromCharCode(n),start:t,end:x};case 33:case 61:return x+=2,M.charCodeAt(x)===61&&++x,{type:be,value:M.slice(t,x),start:t,end:x}}}if(o=M.substr(x,4),o===">>>=")return x+=4,{type:be,value:o,start:t,end:x};if(s=o.substr(0,3),s===">>>"||s==="<<="||s===">>=")return x+=3,{type:be,value:s,start:t,end:x};if(i=s.substr(0,2),r===i[1]&&"+-<>&|".indexOf(r)>=0||i==="=>")return x+=2,{type:be,value:i,start:t,end:x};if(i==="//"&&R({},ne,ie),"<>=!+-*%&|^/".indexOf(r)>=0)return++x,{type:be,value:r,start:t,end:x};R({},ne,ie)}function a1(t){let e="";for(;x<ae&&Xo(M[x]);)e+=M[x++];return e.length===0&&R({},ne,ie),pr(M.charCodeAt(x))&&R({},ne,ie),{type:jt,value:parseInt("0x"+e,16),start:t,end:x}}function u1(t){let e="0"+M[x++];for(;x<ae&&hr(M[x]);)e+=M[x++];return(pr(M.charCodeAt(x))||ut(M.charCodeAt(x)))&&R({},ne,ie),{type:jt,value:parseInt(e,8),octal:!0,start:t,end:x}}function qf(){var t,e,n;if(n=M[x],Fi(ut(n.charCodeAt(0))||n===".","Numeric literal must start with a decimal digit or a decimal point"),e=x,t="",n!=="."){if(t=M[x++],n=M[x],t==="0"){if(n==="x"||n==="X")return++x,a1(e);if(hr(n))return u1(e);n&&ut(n.charCodeAt(0))&&R({},ne,ie)}for(;ut(M.charCodeAt(x));)t+=M[x++];n=M[x]}if(n==="."){for(t+=M[x++];ut(M.charCodeAt(x));)t+=M[x++];n=M[x]}if(n==="e"||n==="E")if(t+=M[x++],n=M[x],(n==="+"||n==="-")&&(t+=M[x++]),ut(M.charCodeAt(x)))for(;ut(M.charCodeAt(x));)t+=M[x++];else R({},ne,ie);return pr(M.charCodeAt(x))&&R({},ne,ie),{type:jt,value:parseFloat(t),start:e,end:x}}function c1(){var t="",e,n,r,i,s=!1;for(e=M[x],Fi(e==="'"||e==='"',"String literal must starts with a quote"),n=x,++x;x<ae;)if(r=M[x++],r===e){e="";break}else if(r==="\\")if(r=M[x++],!r||!dr(r.charCodeAt(0)))switch(r){case"u":case"x":M[x]==="{"?(++x,t+=i1()):t+=Zo(r);break;case"n":t+=`
|
|
11
|
-
`;break;case"r":t+="\r";break;case"t":t+=" ";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:
|
|
12
|
-
`&&++x;else{if(dr(r.charCodeAt(0)))break;t+=r}return e!==""&&R({},ne,ie),{type:fr,value:t,octal:s,start:n,end:x}}function f1(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,(r,i)=>{if(parseInt(i,16)<=1114111)return"x";R({},Yo)}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch{R({},Yo)}try{return new RegExp(t,e)}catch{return null}}function l1(){var t,e,n,r,i;for(t=M[x],Fi(t==="/","Regular expression literal must start with a slash"),e=M[x++],n=!1,r=!1;x<ae;)if(t=M[x++],e+=t,t==="\\")t=M[x++],dr(t.charCodeAt(0))&&R({},Wo),e+=t;else if(dr(t.charCodeAt(0)))R({},Wo);else if(n)t==="]"&&(n=!1);else if(t==="/"){r=!0;break}else t==="["&&(n=!0);return r||R({},Wo),i=e.substr(1,e.length-2),{value:i,literal:e}}function h1(){var t,e,n;for(e="",n="";x<ae&&(t=M[x],!!Ii(t.charCodeAt(0)));)++x,t==="\\"&&x<ae?R({},ne,ie):(n+=t,e+=t);return n.search(/[^gimuy]/g)>=0&&R({},Yo,n),{value:n,literal:e}}function d1(){var t,e,n,r;return O=null,Zf(),t=x,e=l1(),n=h1(),r=f1(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:x}}function p1(t){return t.type===Qt||t.type===Et||t.type===Mi||t.type===Bi}function Jf(){if(Zf(),x>=ae)return{type:cr,start:x,end:x};const t=M.charCodeAt(x);return pr(t)?o1():t===40||t===41||t===59?Ko():t===39||t===34?c1():t===46?ut(M.charCodeAt(x+1))?qf():Ko():ut(t)?qf():Ko()}function we(){const t=O;return x=t.end,O=Jf(),x=t.end,t}function _f(){const t=x;O=Jf(),x=t}function g1(t){const e=new Oe(zA);return e.elements=t,e}function $f(t,e,n){const r=new Oe(t==="||"||t==="&&"?QA:UA);return r.operator=t,r.left=e,r.right=n,r}function m1(t,e){const n=new Oe(GA);return n.callee=t,n.arguments=e,n}function A1(t,e,n){const r=new Oe(HA);return r.test=t,r.consequent=e,r.alternate=n,r}function qo(t){const e=new Oe(Wf);return e.name=t,e}function gr(t){const e=new Oe(VA);return e.value=t.value,e.raw=M.slice(t.start,t.end),t.regex&&(e.raw==="//"&&(e.raw="/(?:)/"),e.regex=t.regex),e}function el(t,e,n){const r=new Oe(jA);return r.computed=t==="[",r.object=e,r.property=n,r.computed||(n.member=!0),r}function x1(t){const e=new Oe(YA);return e.properties=t,e}function tl(t,e,n){const r=new Oe(WA);return r.key=e,r.value=n,r.kind=t,r}function y1(t,e){const n=new Oe(XA);return n.operator=t,n.argument=e,n.prefix=!0,n}function R(t,e){var n,r=Array.prototype.slice.call(arguments,2),i=e.replace(/%(\d)/g,(s,o)=>(Fi(o<r.length,"Message reference must be in range"),r[o]));throw n=new Error(i),n.index=x,n.description=i,n}function Ti(t){t.type===cr&&R(t,_A),t.type===jt&&R(t,ZA),t.type===fr&&R(t,KA),t.type===Qt&&R(t,qA),t.type===Et&&R(t,JA),R(t,ne,t.value)}function ue(t){const e=we();(e.type!==be||e.value!==t)&&Ti(e)}function V(t){return O.type===be&&O.value===t}function Jo(t){return O.type===Et&&O.value===t}function b1(){const t=[];for(x=O.start,ue("[");!V("]");)V(",")?(we(),t.push(null)):(t.push(Yt()),V("]")||ue(","));return we(),g1(t)}function nl(){x=O.start;const t=we();return t.type===fr||t.type===jt?(t.octal&&R(t,Xf),gr(t)):qo(t.value)}function w1(){var t,e,n,r;if(x=O.start,t=O,t.type===Qt)return n=nl(),ue(":"),r=Yt(),tl("init",n,r);if(t.type===cr||t.type===be)Ti(t);else return e=nl(),ue(":"),r=Yt(),tl("init",e,r)}function v1(){var t=[],e,n,r,i={},s=String;for(x=O.start,ue("{");!V("}");)e=w1(),e.key.type===Wf?n=e.key.name:n=s(e.key.value),r="$"+n,Object.prototype.hasOwnProperty.call(i,r)?R({},$A):i[r]=!0,t.push(e),V("}")||ue(",");return ue("}"),x1(t)}function E1(){ue("(");const t=_o();return ue(")"),t}const C1={if:1};function D1(){var t,e,n;if(V("("))return E1();if(V("["))return b1();if(V("{"))return v1();if(t=O.type,x=O.start,t===Qt||C1[O.value])n=qo(we().value);else if(t===fr||t===jt)O.octal&&R(O,Xf),n=gr(we());else{if(t===Et)throw new Error(lr);t===Mi?(e=we(),e.value=e.value==="true",n=gr(e)):t===Bi?(e=we(),e.value=null,n=gr(e)):V("/")||V("/=")?(n=gr(d1()),_f()):Ti(we())}return n}function S1(){const t=[];if(ue("("),!V(")"))for(;x<ae&&(t.push(Yt()),!V(")"));)ue(",");return ue(")"),t}function M1(){x=O.start;const t=we();return p1(t)||Ti(t),qo(t.value)}function B1(){return ue("."),M1()}function F1(){ue("[");const t=_o();return ue("]"),t}function I1(){var t,e,n;for(t=D1();;)if(V("."))n=B1(),t=el(".",t,n);else if(V("("))e=S1(),t=m1(t,e);else if(V("["))n=F1(),t=el("[",t,n);else break;return t}function rl(){const t=I1();if(O.type===be&&(V("++")||V("--")))throw new Error(lr);return t}function Pi(){var t,e;if(O.type!==be&&O.type!==Et)e=rl();else{if(V("++")||V("--"))throw new Error(lr);if(V("+")||V("-")||V("~")||V("!"))t=we(),e=Pi(),e=y1(t.value,e);else{if(Jo("delete")||Jo("void")||Jo("typeof"))throw new Error(lr);e=rl()}}return e}function il(t){let e=0;if(t.type!==be&&t.type!==Et)return 0;switch(t.value){case"||":e=1;break;case"&&":e=2;break;case"|":e=3;break;case"^":e=4;break;case"&":e=5;break;case"==":case"!=":case"===":case"!==":e=6;break;case"<":case">":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11;break}return e}function T1(){var t,e,n,r,i,s,o,a,u,c;if(t=O,u=Pi(),r=O,i=il(r),i===0)return u;for(r.prec=i,we(),e=[t,O],o=Pi(),s=[u,r,o];(i=il(O))>0;){for(;s.length>2&&i<=s[s.length-2].prec;)o=s.pop(),a=s.pop().value,u=s.pop(),e.pop(),n=$f(a,u,o),s.push(n);r=we(),r.prec=i,s.push(r),e.push(O),n=Pi(),s.push(n)}for(c=s.length-1,n=s[c],e.pop();c>1;)e.pop(),n=$f(s[c-1].value,s[c-2],n),c-=2;return n}function Yt(){var t,e,n;return t=T1(),V("?")&&(we(),e=Yt(),ue(":"),n=Yt(),t=A1(t,e,n)),t}function _o(){const t=Yt();if(V(","))throw new Error(lr);return t}function P1(t){M=t,x=0,ae=M.length,O=null,_f();const e=_o();if(O.type!==cr)throw new Error("Unexpect token after expression.");return e}var L1={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function R1(t){function e(o,a,u,c){let l=t(a[0]);return u&&(l=u+"("+l+")",u.lastIndexOf("new ",0)===0&&(l="("+l+")")),l+"."+o+(c<0?"":c===0?"()":"("+a.slice(1).map(t).join(",")+")")}function n(o,a,u){return c=>e(o,c,a,u)}const r="new Date",i="String",s="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(o){o.length<3&&Y("Missing arguments to clamp function."),o.length>3&&Y("Too many arguments to clamp function.");const a=o.map(t);return"Math.max("+a[1]+", Math.min("+a[2]+","+a[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:r,date:n("getDate",r,0),day:n("getDay",r,0),year:n("getFullYear",r,0),month:n("getMonth",r,0),hours:n("getHours",r,0),minutes:n("getMinutes",r,0),seconds:n("getSeconds",r,0),milliseconds:n("getMilliseconds",r,0),time:n("getTime",r,0),timezoneoffset:n("getTimezoneOffset",r,0),utcdate:n("getUTCDate",r,0),utcday:n("getUTCDay",r,0),utcyear:n("getUTCFullYear",r,0),utcmonth:n("getUTCMonth",r,0),utchours:n("getUTCHours",r,0),utcminutes:n("getUTCMinutes",r,0),utcseconds:n("getUTCSeconds",r,0),utcmilliseconds:n("getUTCMilliseconds",r,0),length:n("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:n("toUpperCase",i,0),lower:n("toLowerCase",i,0),substring:n("substring",i),split:n("split",i),trim:n("trim",i,0),regexp:s,test:n("test",s),if:function(o){o.length<3&&Y("Missing arguments to if function."),o.length>3&&Y("Too many arguments to if function.");const a=o.map(t);return"("+a[0]+"?"+a[1]+":"+a[2]+")"}}}function N1(t){const e=t&&t.length-1;return e&&(t[0]==='"'&&t[e]==='"'||t[0]==="'"&&t[e]==="'")?t.slice(1,-1):t}function k1(t){t=t||{};const e=t.allowed?Wr(t.allowed):{},n=t.forbidden?Wr(t.forbidden):{},r=t.constants||L1,i=(t.functions||R1)(f),s=t.globalvar,o=t.fieldvar,a=ge(s)?s:d=>`${s}["${d}"]`;let u={},c={},l=0;function f(d){if(X(d))return d;const g=h[d.type];return g==null&&Y("Unsupported type: "+d.type),g(d)}const h={Literal:d=>d.raw,Identifier:d=>{const g=d.name;return l>0?g:Pt(n,g)?Y("Illegal identifier: "+g):Pt(r,g)?r[g]:Pt(e,g)?g:(u[g]=1,a(g))},MemberExpression:d=>{const g=!d.computed,m=f(d.object);g&&(l+=1);const A=f(d.property);return m===o&&(c[N1(A)]=1),g&&(l-=1),m+(g?"."+A:"["+A+"]")},CallExpression:d=>{d.callee.type!=="Identifier"&&Y("Illegal callee type: "+d.callee.type);const g=d.callee.name,m=d.arguments,A=Pt(i,g)&&i[g];return A||Y("Unrecognized function: "+g),ge(A)?A(m):A+"("+m.map(f).join(",")+")"},ArrayExpression:d=>"["+d.elements.map(f).join(",")+"]",BinaryExpression:d=>"("+f(d.left)+" "+d.operator+" "+f(d.right)+")",UnaryExpression:d=>"("+d.operator+f(d.argument)+")",ConditionalExpression:d=>"("+f(d.test)+"?"+f(d.consequent)+":"+f(d.alternate)+")",LogicalExpression:d=>"("+f(d.left)+d.operator+f(d.right)+")",ObjectExpression:d=>"{"+d.properties.map(f).join(",")+"}",Property:d=>{l+=1;const g=f(d.key);return l-=1,g+":"+f(d.value)}};function p(d){const g={code:f(d),globals:Object.keys(u),fields:Object.keys(c)};return u={},c={},g}return p.functions=i,p.constants=r,p}function $o(t,e={}){const n=k1({forbidden:[],allowed:["datum"],globalvar:"global",fieldvar:"datum"});try{const r=P1(t),i=n(r),s=Function("datum","global",`"use strict"; return (${i.code});`),o=a=>s(a,e);return o.fields=i.fields,o}catch(r){throw new Error(`Invalid expression: ${t}, ${r.message}`)}}function O1(){let t=0;const e=new Map,n=r=>{let i=e.get(r);return i===void 0&&(i=t++,e.set(r,i)),i};return n.addAll=r=>{for(const i of r)n(i)},n.invert=r=>{for(const i of e.entries())if(i[1]==r)return i[0]},n.domain=()=>[...e.keys()],n}function z1(t,e){const n={};e||(e=t.encoding);for(const[r,i]of Object.entries(e)){if(!i)continue;const s=t.unitView.getScaleResolution(Pe(i)&&i.resolutionChannel||r);n[r]=U1(e[r],s==null?void 0:s.getScale(),t.unitView.getAccessor(r),r)}return n}function U1(t,e,n,r){let i;if(Te(t)){const s=t.value;i=o=>s,i.constant=!0,i.constantValue=!0,i.accessor=void 0}else if(n)if(r=="text")i=s=>{},i.accessor=n,i.constant=n.constant;else{if(!e)throw new Error(`Missing scale! "${r}": ${JSON.stringify(t)}`);if(i=s=>e(n(s)),Vt(e.type)){const s=O1();s.addAll(e.domain()),i.indexer=s}i.constant=n.constant,i.accessor=n,i.scale=e}else throw new Error(`Missing value or accessor (field, expr, datum) on channel "${r}": ${JSON.stringify(t)}`);return i.invert=e?s=>e.invert(s):s=>{throw new Error("No scale available, cannot invert: "+JSON.stringify(t))},i.channelDef=t,i.applyMetadata=s=>{for(const o in i)o in i&&(s[o]=i[o]);return s},i}function Te(t){return t&&"value"in t}function mr(t){return t&&"field"in t}function Ar(t){return t&&"datum"in t}function Pe(t){return mr(t)||Ar(t)||ta(t)||sl(t)}function ea(t,e){const n=t.mark.encoding[e];if(Pe(n))return n;throw new Error("Not a channel def with scale!")}function sl(t){return t&&"chrom"in t}function ta(t){return t&&"expr"in t}const xr=["x","y"],G1=["x2","y2"],H1=[...xr,...G1];function ol(t){return xr.includes(t)}function yr(t){return H1.includes(t)}const na={x:"x2",y:"y2"},al=Object.fromEntries(Object.entries(na).map(t=>[t[1],t[0]]));function br(t){return t in al}function V1(t){const e=na[t];if(e)return e;throw new Error(`${t} has no secondary channel!`)}function pn(t){var e;return(e=al[t])!=null?e:t}function Wt(t){return["color","fill","stroke"].includes(pn(t))}function Li(t){return["shape","squeeze"].includes(t)}function ul(t){switch(t){case"shape":return["circle","square","triangle-up","cross","diamond","triangle-down","triangle-right","triangle-left"]}}function cl(t){if(!Li(t))throw new Error("Not a discrete channel: "+t);const e=new Map(ul(t).map((n,r)=>[n,r]));return n=>{const r=e.get(n);if(r!==void 0)return r;throw new Error(`Invalid value for "${t}" channel: ${n}`)}}function U(t,e=t){if(/^[A-Za-z0-9_]+$/.test(t)){const n=new Function("datum",`return datum[${JSON.stringify(t)}]`);return H(n,[t],e)}else return Ur(t)}class Q1{constructor(){this.accessorCreators=[],this.register(e=>{if(mr(e))try{const n=U(e.field);return n.constant=!1,n.fields=iu(n),n}catch(n){throw new Error(`Invalid field definition: ${n.message}`)}}),this.register(e=>ta(e)?j1(e.expr):void 0),this.register(e=>{if(Ar(e)){const r=sd(e.datum);return r.constant=!0,r.fields=[],r}})}register(e){this.accessorCreators.push(e)}createAccessor(e){for(const n of this.accessorCreators){const r=n(e);if(r)return r}}}function j1(t){const e=$o(t);return e.constant=e.fields.length==0,e}/* @license twgl.js 4.21.2 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
10
|
+
*/var Hs;const nn=globalThis.trustedTypes,Hu=nn?nn.createPolicy("lit-html",{createHTML:t=>t}):void 0,ft=`lit$${(Math.random()+"").slice(9)}$`,Qu="?"+ft,Jp=`<${Qu}>`,rn=document,Kn=(t="")=>rn.createComment(t),qn=t=>t===null||typeof t!="object"&&typeof t!="function",Vu=Array.isArray,_p=t=>{var e;return Vu(t)||typeof((e=t)===null||e===void 0?void 0:e[Symbol.iterator])=="function"},Jn=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,ju=/-->/g,Yu=/>/g,Rt=/>|[ \n\r](?:([^\s"'>=/]+)([ \n\r]*=[ \n\r]*(?:[^ \n\r"'`<>=]|("|')|))|$)/g,Wu=/'/g,Xu=/"/g,Zu=/^(?:script|style|textarea|title)$/i,$p=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),_e=$p(1),_n=Symbol.for("lit-noChange"),$=Symbol.for("lit-nothing"),Ku=new WeakMap,qu=(t,e,n)=>{var r,i;const s=(r=n==null?void 0:n.renderBefore)!==null&&r!==void 0?r:e;let o=s._$litPart$;if(o===void 0){const a=(i=n==null?void 0:n.renderBefore)!==null&&i!==void 0?i:null;s._$litPart$=o=new er(e.insertBefore(Kn(),a),a,void 0,n!=null?n:{})}return o._$AI(t),o},sn=rn.createTreeWalker(rn,129,null,!1),eg=(t,e)=>{const n=t.length-1,r=[];let i,s=e===2?"<svg>":"",o=Jn;for(let u=0;u<n;u++){const c=t[u];let f,l,h=-1,p=0;for(;p<c.length&&(o.lastIndex=p,l=o.exec(c),l!==null);)p=o.lastIndex,o===Jn?l[1]==="!--"?o=ju:l[1]!==void 0?o=Yu:l[2]!==void 0?(Zu.test(l[2])&&(i=RegExp("</"+l[2],"g")),o=Rt):l[3]!==void 0&&(o=Rt):o===Rt?l[0]===">"?(o=i!=null?i:Jn,h=-1):l[1]===void 0?h=-2:(h=o.lastIndex-l[2].length,f=l[1],o=l[3]===void 0?Rt:l[3]==='"'?Xu:Wu):o===Xu||o===Wu?o=Rt:o===ju||o===Yu?o=Jn:(o=Rt,i=void 0);const d=o===Rt&&t[u+1].startsWith("/>")?" ":"";s+=o===Jn?c+Jp:h>=0?(r.push(f),c.slice(0,h)+"$lit$"+c.slice(h)+ft+d):c+ft+(h===-2?(r.push(void 0),u):d)}const a=s+(t[n]||"<?>")+(e===2?"</svg>":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return[Hu!==void 0?Hu.createHTML(a):a,r]};class $n{constructor({strings:e,_$litType$:n},r){let i;this.parts=[];let s=0,o=0;const a=e.length-1,u=this.parts,[c,f]=eg(e,n);if(this.el=$n.createElement(c,r),sn.currentNode=this.el.content,n===2){const l=this.el.content,h=l.firstChild;h.remove(),l.append(...h.childNodes)}for(;(i=sn.nextNode())!==null&&u.length<a;){if(i.nodeType===1){if(i.hasAttributes()){const l=[];for(const h of i.getAttributeNames())if(h.endsWith("$lit$")||h.startsWith(ft)){const p=f[o++];if(l.push(h),p!==void 0){const d=i.getAttribute(p.toLowerCase()+"$lit$").split(ft),g=/([.?@])?(.*)/.exec(p);u.push({type:1,index:s,name:g[2],strings:d,ctor:g[1]==="."?ng:g[1]==="?"?ig:g[1]==="@"?sg:ii})}else u.push({type:6,index:s})}for(const h of l)i.removeAttribute(h)}if(Zu.test(i.tagName)){const l=i.textContent.split(ft),h=l.length-1;if(h>0){i.textContent=nn?nn.emptyScript:"";for(let p=0;p<h;p++)i.append(l[p],Kn()),sn.nextNode(),u.push({type:2,index:++s});i.append(l[h],Kn())}}}else if(i.nodeType===8)if(i.data===Qu)u.push({type:2,index:s});else{let l=-1;for(;(l=i.data.indexOf(ft,l+1))!==-1;)u.push({type:7,index:s}),l+=ft.length-1}s++}}static createElement(e,n){const r=rn.createElement("template");return r.innerHTML=e,r}}function on(t,e,n=t,r){var i,s,o,a;if(e===_n)return e;let u=r!==void 0?(i=n._$Cl)===null||i===void 0?void 0:i[r]:n._$Cu;const c=qn(e)?void 0:e._$litDirective$;return(u==null?void 0:u.constructor)!==c&&((s=u==null?void 0:u._$AO)===null||s===void 0||s.call(u,!1),c===void 0?u=void 0:(u=new c(t),u._$AT(t,n,r)),r!==void 0?((o=(a=n)._$Cl)!==null&&o!==void 0?o:a._$Cl=[])[r]=u:n._$Cu=u),u!==void 0&&(e=on(t,u._$AS(t,e.values),u,r)),e}class tg{constructor(e,n){this.v=[],this._$AN=void 0,this._$AD=e,this._$AM=n}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(e){var n;const{el:{content:r},parts:i}=this._$AD,s=((n=e==null?void 0:e.creationScope)!==null&&n!==void 0?n:rn).importNode(r,!0);sn.currentNode=s;let o=sn.nextNode(),a=0,u=0,c=i[0];for(;c!==void 0;){if(a===c.index){let f;c.type===2?f=new er(o,o.nextSibling,this,e):c.type===1?f=new c.ctor(o,c.name,c.strings,this,e):c.type===6&&(f=new og(o,this,e)),this.v.push(f),c=i[++u]}a!==(c==null?void 0:c.index)&&(o=sn.nextNode(),a++)}return s}m(e){let n=0;for(const r of this.v)r!==void 0&&(r.strings!==void 0?(r._$AI(e,r,n),n+=r.strings.length-2):r._$AI(e[n])),n++}}class er{constructor(e,n,r,i){var s;this.type=2,this._$AH=$,this._$AN=void 0,this._$AA=e,this._$AB=n,this._$AM=r,this.options=i,this._$Cg=(s=i==null?void 0:i.isConnected)===null||s===void 0||s}get _$AU(){var e,n;return(n=(e=this._$AM)===null||e===void 0?void 0:e._$AU)!==null&&n!==void 0?n:this._$Cg}get parentNode(){let e=this._$AA.parentNode;const n=this._$AM;return n!==void 0&&e.nodeType===11&&(e=n.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,n=this){e=on(this,e,n),qn(e)?e===$||e==null||e===""?(this._$AH!==$&&this._$AR(),this._$AH=$):e!==this._$AH&&e!==_n&&this.$(e):e._$litType$!==void 0?this.T(e):e.nodeType!==void 0?this.k(e):_p(e)?this.S(e):this.$(e)}A(e,n=this._$AB){return this._$AA.parentNode.insertBefore(e,n)}k(e){this._$AH!==e&&(this._$AR(),this._$AH=this.A(e))}$(e){this._$AH!==$&&qn(this._$AH)?this._$AA.nextSibling.data=e:this.k(rn.createTextNode(e)),this._$AH=e}T(e){var n;const{values:r,_$litType$:i}=e,s=typeof i=="number"?this._$AC(e):(i.el===void 0&&(i.el=$n.createElement(i.h,this.options)),i);if(((n=this._$AH)===null||n===void 0?void 0:n._$AD)===s)this._$AH.m(r);else{const o=new tg(s,this),a=o.p(this.options);o.m(r),this.k(a),this._$AH=o}}_$AC(e){let n=Ku.get(e.strings);return n===void 0&&Ku.set(e.strings,n=new $n(e)),n}S(e){Vu(this._$AH)||(this._$AH=[],this._$AR());const n=this._$AH;let r,i=0;for(const s of e)i===n.length?n.push(r=new er(this.A(Kn()),this.A(Kn()),this,this.options)):r=n[i],r._$AI(s),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,n){var r;for((r=this._$AP)===null||r===void 0||r.call(this,!1,!0,n);e&&e!==this._$AB;){const i=e.nextSibling;e.remove(),e=i}}setConnected(e){var n;this._$AM===void 0&&(this._$Cg=e,(n=this._$AP)===null||n===void 0||n.call(this,e))}}class ii{constructor(e,n,r,i,s){this.type=1,this._$AH=$,this._$AN=void 0,this.element=e,this.name=n,this._$AM=i,this.options=s,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=$}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,n=this,r,i){const s=this.strings;let o=!1;if(s===void 0)e=on(this,e,n,0),o=!qn(e)||e!==this._$AH&&e!==_n,o&&(this._$AH=e);else{const a=e;let u,c;for(e=s[0],u=0;u<s.length-1;u++)c=on(this,a[r+u],n,u),c===_n&&(c=this._$AH[u]),o||(o=!qn(c)||c!==this._$AH[u]),c===$?e=$:e!==$&&(e+=(c!=null?c:"")+s[u+1]),this._$AH[u]=c}o&&!i&&this.C(e)}C(e){e===$?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e!=null?e:"")}}class ng extends ii{constructor(){super(...arguments),this.type=3}C(e){this.element[this.name]=e===$?void 0:e}}const rg=nn?nn.emptyScript:"";class ig extends ii{constructor(){super(...arguments),this.type=4}C(e){e&&e!==$?this.element.setAttribute(this.name,rg):this.element.removeAttribute(this.name)}}class sg extends ii{constructor(e,n,r,i,s){super(e,n,r,i,s),this.type=5}_$AI(e,n=this){var r;if((e=(r=on(this,e,n,0))!==null&&r!==void 0?r:$)===_n)return;const i=this._$AH,s=e===$&&i!==$||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,o=e!==$&&(i===$||s);s&&this.element.removeEventListener(this.name,this,i),o&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var n,r;typeof this._$AH=="function"?this._$AH.call((r=(n=this.options)===null||n===void 0?void 0:n.host)!==null&&r!==void 0?r:this.element,e):this._$AH.handleEvent(e)}}class og{constructor(e,n,r){this.element=e,this.type=6,this._$AN=void 0,this._$AM=n,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(e){on(this,e)}}const Ju=window.litHtmlPolyfillSupport;Ju==null||Ju($n,er),((Hs=globalThis.litHtmlVersions)!==null&&Hs!==void 0?Hs:globalThis.litHtmlVersions=[]).push("2.2.1");const _u=1;function Qs(){let t=[0,1],e=[0,1],n=1,r=1,i=0,s=0,o=.5,a=0;const c=f=>(f+o-t[0])/n*r+e[0];return c.invert=f=>(f-e[0])/r*n+t[0]-o,c.domain=function(f){if(arguments.length){if(t=Xh(f),n=t[1]-t[0],n<_u){n=_u;const l=(t[0]+t[1])/2;t[0]=l-n/2,t[1]=l+n/2}return c}else return t},c.range=function(f){return arguments.length?(e=[...f],r=e[1]-e[0],c):e},c.numberingOffset=function(f){return arguments.length?(a=f,c):a},c.padding=function(f){return arguments.length?(s=f,i=Math.min(1,f),c):i},c.paddingInner=function(f){return arguments.length?(i=Math.min(1,f),c):i},c.paddingOuter=function(f){return arguments.length?(s=f,c):s},c.align=function(f){return arguments.length?(o=Math.max(0,Math.min(1,f)),c):o},c.step=()=>r/n,c.bandwidth=()=>c.step(),c.ticks=f=>{const l=c.align(),h=c.numberingOffset();return Wr(t[0]-l+h,t[1]-l+h,Math.min(f,Math.ceil(n))).filter(Number.isInteger).map(p=>p-a)},c.tickFormat=(f,l)=>{if(l)throw new Error("Index scale's tickFormat does not support a specifier!");const p=Ft(t[0],t[1],Math.min(f,Math.ceil(n)))<1e5?re(","):re(".3s");return d=>p(d+a)},c.copy=()=>Qs().domain(t).range(e).paddingInner(i).paddingOuter(s).numberingOffset(a),c}function ag(){const t=Qs().numberingOffset(1);let e;t.genome=function(r){return arguments.length?(e=r,t):e},t.ticks=r=>{if(!e)return[];const i=t.domain(),s=t.numberingOffset(),[o,a]=[Math.max(i[0],0),Math.min(i[1],e.totalSize-1)].map(f=>e.toChromosome(f)),u=Math.max(1,Ft(i[0],i[1],r)),c=[];for(let f=o.index;f<=a.index;f++){const l=e.chromosomes[f],h=Math.max(l.continuousStart+u,i[0]-(i[0]-l.continuousStart)%u),p=Math.min(l.continuousEnd-u/4,i[1]+1);for(let d=h;d<=p;d+=u){const g=d-s;g>=i[0]&&g<i[1]&&c.push(g)}}return c},t.tickFormat=(r,i)=>{if(!e)return;if(i)throw new Error("Locus scale's tickFormat does not support a specifier!");const s=t.domain(),o=s[1]-s[0],a=t.numberingOffset(),c=Ft(s[0],s[1],Math.min(r,Math.ceil(o)))<1e6?re(","):re(".3s"),f=l=>l-e.toChromosome(l).continuousStart;return l=>c(f(l)+a)};const n=t.copy;return t.copy=()=>n().genome(e),t}function ug(t){return t.type=="locus"}function Ge(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}function ht(t,e){switch(arguments.length){case 0:break;case 1:{typeof t=="function"?this.interpolator(t):this.range(t);break}default:{this.domain(t),typeof e=="function"?this.interpolator(e):this.range(e);break}}return this}const Vs=Symbol("implicit");function js(){var t=new $t,e=[],n=[],r=Vs;function i(s){let o=t.get(s);if(o===void 0){if(r!==Vs)return r;t.set(s,o=e.push(s)-1)}return n[o%n.length]}return i.domain=function(s){if(!arguments.length)return e.slice();e=[],t=new $t;for(const o of s)t.has(o)||t.set(o,e.push(o)-1);return i},i.range=function(s){return arguments.length?(n=Array.from(s),i):n.slice()},i.unknown=function(s){return arguments.length?(r=s,i):r},i.copy=function(){return js(e,n).unknown(r)},Ge.apply(i,arguments),i}function an(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function tr(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function dt(){}var kt=.7,un=1/kt,cn="\\s*([+-]?\\d+)\\s*",nr="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ue="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",cg=/^#([0-9a-f]{3,8})$/,lg=new RegExp(`^rgb\\(${cn},${cn},${cn}\\)$`),fg=new RegExp(`^rgb\\(${Ue},${Ue},${Ue}\\)$`),hg=new RegExp(`^rgba\\(${cn},${cn},${cn},${nr}\\)$`),dg=new RegExp(`^rgba\\(${Ue},${Ue},${Ue},${nr}\\)$`),pg=new RegExp(`^hsl\\(${nr},${Ue},${Ue}\\)$`),gg=new RegExp(`^hsla\\(${nr},${Ue},${Ue},${nr}\\)$`),$u={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};an(dt,Nt,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:ec,formatHex:ec,formatHex8:mg,formatHsl:Ag,formatRgb:tc,toString:tc});function ec(){return this.rgb().formatHex()}function mg(){return this.rgb().formatHex8()}function Ag(){return oc(this).formatHsl()}function tc(){return this.rgb().formatRgb()}function Nt(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=cg.exec(t))?(n=e[1].length,e=parseInt(e[1],16),n===6?nc(e):n===3?new ee(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?si(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?si(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=lg.exec(t))?new ee(e[1],e[2],e[3],1):(e=fg.exec(t))?new ee(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=hg.exec(t))?si(e[1],e[2],e[3],e[4]):(e=dg.exec(t))?si(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=pg.exec(t))?sc(e[1],e[2]/100,e[3]/100,1):(e=gg.exec(t))?sc(e[1],e[2]/100,e[3]/100,e[4]):$u.hasOwnProperty(t)?nc($u[t]):t==="transparent"?new ee(NaN,NaN,NaN,0):null}function nc(t){return new ee(t>>16&255,t>>8&255,t&255,1)}function si(t,e,n,r){return r<=0&&(t=e=n=NaN),new ee(t,e,n,r)}function Ys(t){return t instanceof dt||(t=Nt(t)),t?(t=t.rgb(),new ee(t.r,t.g,t.b,t.opacity)):new ee}function oi(t,e,n,r){return arguments.length===1?Ys(t):new ee(t,e,n,r==null?1:r)}function ee(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}an(ee,oi,tr(dt,{brighter(t){return t=t==null?un:Math.pow(un,t),new ee(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?kt:Math.pow(kt,t),new ee(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ee(zt(this.r),zt(this.g),zt(this.b),ai(this.opacity))},displayable(){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:rc,formatHex:rc,formatHex8:xg,formatRgb:ic,toString:ic}));function rc(){return`#${Ot(this.r)}${Ot(this.g)}${Ot(this.b)}`}function xg(){return`#${Ot(this.r)}${Ot(this.g)}${Ot(this.b)}${Ot((isNaN(this.opacity)?1:this.opacity)*255)}`}function ic(){const t=ai(this.opacity);return`${t===1?"rgb(":"rgba("}${zt(this.r)}, ${zt(this.g)}, ${zt(this.b)}${t===1?")":`, ${t})`}`}function ai(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function zt(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Ot(t){return t=zt(t),(t<16?"0":"")+t.toString(16)}function sc(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Pe(t,e,n,r)}function oc(t){if(t instanceof Pe)return new Pe(t.h,t.s,t.l,t.opacity);if(t instanceof dt||(t=Nt(t)),!t)return new Pe;if(t instanceof Pe)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),s=Math.max(e,n,r),o=NaN,a=s-i,u=(s+i)/2;return a?(e===s?o=(n-r)/a+(n<r)*6:n===s?o=(r-e)/a+2:o=(e-n)/a+4,a/=u<.5?s+i:2-s-i,o*=60):a=u>0&&u<1?0:o,new Pe(o,a,u,t.opacity)}function Ws(t,e,n,r){return arguments.length===1?oc(t):new Pe(t,e,n,r==null?1:r)}function Pe(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}an(Pe,Ws,tr(dt,{brighter(t){return t=t==null?un:Math.pow(un,t),new Pe(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?kt:Math.pow(kt,t),new Pe(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new ee(Xs(t>=240?t-240:t+120,i,r),Xs(t,i,r),Xs(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new Pe(ac(this.h),ui(this.s),ui(this.l),ai(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=ai(this.opacity);return`${t===1?"hsl(":"hsla("}${ac(this.h)}, ${ui(this.s)*100}%, ${ui(this.l)*100}%${t===1?")":`, ${t})`}`}}));function ac(t){return t=(t||0)%360,t<0?t+360:t}function ui(t){return Math.max(0,Math.min(1,t||0))}function Xs(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const uc=Math.PI/180,cc=180/Math.PI,ci=18,lc=.96422,fc=1,hc=.82521,dc=4/29,ln=6/29,pc=3*ln*ln,yg=ln*ln*ln;function gc(t){if(t instanceof He)return new He(t.l,t.a,t.b,t.opacity);if(t instanceof $e)return mc(t);t instanceof ee||(t=Ys(t));var e=_s(t.r),n=_s(t.g),r=_s(t.b),i=Ks((.2225045*e+.7168786*n+.0606169*r)/fc),s,o;return e===n&&n===r?s=o=i:(s=Ks((.4360747*e+.3850649*n+.1430804*r)/lc),o=Ks((.0139322*e+.0971045*n+.7141733*r)/hc)),new He(116*i-16,500*(s-i),200*(i-o),t.opacity)}function Zs(t,e,n,r){return arguments.length===1?gc(t):new He(t,e,n,r==null?1:r)}function He(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}an(He,Zs,tr(dt,{brighter(t){return new He(this.l+ci*(t==null?1:t),this.a,this.b,this.opacity)},darker(t){return new He(this.l-ci*(t==null?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=lc*qs(e),t=fc*qs(t),n=hc*qs(n),new ee(Js(3.1338561*e-1.6168667*t-.4906146*n),Js(-.9787684*e+1.9161415*t+.033454*n),Js(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function Ks(t){return t>yg?Math.pow(t,1/3):t/pc+dc}function qs(t){return t>ln?t*t*t:pc*(t-dc)}function Js(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function _s(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function bg(t){if(t instanceof $e)return new $e(t.h,t.c,t.l,t.opacity);if(t instanceof He||(t=gc(t)),t.a===0&&t.b===0)return new $e(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*cc;return new $e(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function $s(t,e,n,r){return arguments.length===1?bg(t):new $e(t,e,n,r==null?1:r)}function $e(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function mc(t){if(isNaN(t.h))return new He(t.l,0,0,t.opacity);var e=t.h*uc;return new He(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}an($e,$s,tr(dt,{brighter(t){return new $e(this.h,this.c,this.l+ci*(t==null?1:t),this.opacity)},darker(t){return new $e(this.h,this.c,this.l-ci*(t==null?1:t),this.opacity)},rgb(){return mc(this).rgb()}}));var Ac=-.14861,eo=1.78277,to=-.29227,li=-.90649,rr=1.97294,xc=rr*li,yc=rr*eo,bc=eo*to-li*Ac;function wg(t){if(t instanceof Gt)return new Gt(t.h,t.s,t.l,t.opacity);t instanceof ee||(t=Ys(t));var e=t.r/255,n=t.g/255,r=t.b/255,i=(bc*r+xc*e-yc*n)/(bc+xc-yc),s=r-i,o=(rr*(n-i)-to*s)/li,a=Math.sqrt(o*o+s*s)/(rr*i*(1-i)),u=a?Math.atan2(o,s)*cc-120:NaN;return new Gt(u<0?u+360:u,a,i,t.opacity)}function no(t,e,n,r){return arguments.length===1?wg(t):new Gt(t,e,n,r==null?1:r)}function Gt(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}an(Gt,no,tr(dt,{brighter(t){return t=t==null?un:Math.pow(un,t),new Gt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?kt:Math.pow(kt,t),new Gt(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=isNaN(this.h)?0:(this.h+120)*uc,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new ee(255*(e+n*(Ac*r+eo*i)),255*(e+n*(to*r+li*i)),255*(e+n*(rr*r)),this.opacity)}}));function wc(t,e,n,r,i){var s=t*t,o=s*t;return((1-3*t+3*s-o)*e+(4-6*s+3*o)*n+(1+3*t+3*s-3*o)*r+o*i)/6}function vc(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],s=t[r+1],o=r>0?t[r-1]:2*i-s,a=r<e-1?t[r+2]:2*s-i;return wc((n-r/e)*e,o,i,s,a)}}function Ec(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],s=t[r%e],o=t[(r+1)%e],a=t[(r+2)%e];return wc((n-r/e)*e,i,s,o,a)}}var fi=t=>()=>t;function Cc(t,e){return function(n){return t+n*e}}function vg(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}function hi(t,e){var n=e-t;return n?Cc(t,n>180||n<-180?n-360*Math.round(n/360):n):fi(isNaN(t)?e:t)}function Eg(t){return(t=+t)==1?te:function(e,n){return n-e?vg(e,n,t):fi(isNaN(e)?n:e)}}function te(t,e){var n=e-t;return n?Cc(t,n):fi(isNaN(t)?e:t)}var ro=function t(e){var n=Eg(e);function r(i,s){var o=n((i=oi(i)).r,(s=oi(s)).r),a=n(i.g,s.g),u=n(i.b,s.b),c=te(i.opacity,s.opacity);return function(f){return i.r=o(f),i.g=a(f),i.b=u(f),i.opacity=c(f),i+""}}return r.gamma=t,r}(1);function Dc(t){return function(e){var n=e.length,r=new Array(n),i=new Array(n),s=new Array(n),o,a;for(o=0;o<n;++o)a=oi(e[o]),r[o]=a.r||0,i[o]=a.g||0,s[o]=a.b||0;return r=t(r),i=t(i),s=t(s),a.opacity=1,function(u){return a.r=r(u),a.g=i(u),a.b=s(u),a+""}}}var Cg=Dc(vc),Dg=Dc(Ec);function io(t,e){e||(e=[]);var n=t?Math.min(e.length,t.length):0,r=e.slice(),i;return function(s){for(i=0;i<n;++i)r[i]=t[i]*(1-s)+e[i]*s;return r}}function Sc(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function Sg(t,e){return(Sc(e)?io:Bc)(t,e)}function Bc(t,e){var n=e?e.length:0,r=t?Math.min(n,t.length):0,i=new Array(r),s=new Array(n),o;for(o=0;o<r;++o)i[o]=pt(t[o],e[o]);for(;o<n;++o)s[o]=e[o];return function(a){for(o=0;o<r;++o)s[o]=i[o](a);return s}}function Fc(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Le(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function Mc(t,e){var n={},r={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?n[i]=pt(t[i],e[i]):r[i]=e[i];return function(s){for(i in n)r[i]=n[i](s);return r}}var so=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,oo=new RegExp(so.source,"g");function Bg(t){return function(){return t}}function Fg(t){return function(e){return t(e)+""}}function Ic(t,e){var n=so.lastIndex=oo.lastIndex=0,r,i,s,o=-1,a=[],u=[];for(t=t+"",e=e+"";(r=so.exec(t))&&(i=oo.exec(e));)(s=i.index)>n&&(s=e.slice(n,s),a[o]?a[o]+=s:a[++o]=s),(r=r[0])===(i=i[0])?a[o]?a[o]+=i:a[++o]=i:(a[++o]=null,u.push({i:o,x:Le(r,i)})),n=oo.lastIndex;return n<e.length&&(s=e.slice(n),a[o]?a[o]+=s:a[++o]=s),a.length<2?u[0]?Fg(u[0].x):Bg(e):(e=u.length,function(c){for(var f=0,l;f<e;++f)a[(l=u[f]).i]=l.x(c);return a.join("")})}function pt(t,e){var n=typeof e,r;return e==null||n==="boolean"?fi(e):(n==="number"?Le:n==="string"?(r=Nt(e))?(e=r,ro):Ic:e instanceof Nt?ro:e instanceof Date?Fc:Sc(e)?io:Array.isArray(e)?Bc:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?Mc:Le)(t,e)}function Mg(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}function Ig(t,e){var n=hi(+t,+e);return function(r){var i=n(r);return i-360*Math.floor(i/360)}}function ir(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var Tc=180/Math.PI,ao={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Pc(t,e,n,r,i,s){var o,a,u;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(a=Math.sqrt(n*n+r*r))&&(n/=a,r/=a,u/=a),t*r<e*n&&(t=-t,e=-e,u=-u,o=-o),{translateX:i,translateY:s,rotate:Math.atan2(e,t)*Tc,skewX:Math.atan(u)*Tc,scaleX:o,scaleY:a}}var di;function Tg(t){const e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?ao:Pc(e.a,e.b,e.c,e.d,e.e,e.f)}function Pg(t){return t==null||(di||(di=document.createElementNS("http://www.w3.org/2000/svg","g")),di.setAttribute("transform",t),!(t=di.transform.baseVal.consolidate()))?ao:(t=t.matrix,Pc(t.a,t.b,t.c,t.d,t.e,t.f))}function Lc(t,e,n,r){function i(c){return c.length?c.pop()+" ":""}function s(c,f,l,h,p,d){if(c!==l||f!==h){var g=p.push("translate(",null,e,null,n);d.push({i:g-4,x:Le(c,l)},{i:g-2,x:Le(f,h)})}else(l||h)&&p.push("translate("+l+e+h+n)}function o(c,f,l,h){c!==f?(c-f>180?f+=360:f-c>180&&(c+=360),h.push({i:l.push(i(l)+"rotate(",null,r)-2,x:Le(c,f)})):f&&l.push(i(l)+"rotate("+f+r)}function a(c,f,l,h){c!==f?h.push({i:l.push(i(l)+"skewX(",null,r)-2,x:Le(c,f)}):f&&l.push(i(l)+"skewX("+f+r)}function u(c,f,l,h,p,d){if(c!==l||f!==h){var g=p.push(i(p)+"scale(",null,",",null,")");d.push({i:g-4,x:Le(c,l)},{i:g-2,x:Le(f,h)})}else(l!==1||h!==1)&&p.push(i(p)+"scale("+l+","+h+")")}return function(c,f){var l=[],h=[];return c=t(c),f=t(f),s(c.translateX,c.translateY,f.translateX,f.translateY,l,h),o(c.rotate,f.rotate,l,h),a(c.skewX,f.skewX,l,h),u(c.scaleX,c.scaleY,f.scaleX,f.scaleY,l,h),c=f=null,function(p){for(var d=-1,g=h.length,m;++d<g;)l[(m=h[d]).i]=m.x(p);return l.join("")}}}var Lg=Lc(Tg,"px, ","px)","deg)"),Rg=Lc(Pg,", ",")",")"),kg=1e-12;function Rc(t){return((t=Math.exp(t))+1/t)/2}function Ng(t){return((t=Math.exp(t))-1/t)/2}function zg(t){return((t=Math.exp(2*t))-1)/(t+1)}var kc=function t(e,n,r){function i(s,o){var a=s[0],u=s[1],c=s[2],f=o[0],l=o[1],h=o[2],p=f-a,d=l-u,g=p*p+d*d,m,A;if(g<kg)A=Math.log(h/c)/e,m=function(B){return[a+B*p,u+B*d,c*Math.exp(e*B*A)]};else{var w=Math.sqrt(g),y=(h*h-c*c+r*g)/(2*c*n*w),v=(h*h-c*c-r*g)/(2*h*n*w),S=Math.log(Math.sqrt(y*y+1)-y),E=Math.log(Math.sqrt(v*v+1)-v);A=(E-S)/e,m=function(B){var T=B*A,L=Rc(S),ce=c/(n*w)*(L*zg(e*T+S)-Ng(S));return[a+ce*p,u+ce*d,c*L/Rc(e*T+S)]}}return m.duration=A*1e3*e/Math.SQRT2,m}return i.rho=function(s){var o=Math.max(.001,+s),a=o*o,u=a*a;return t(o,a,u)},i}(Math.SQRT2,2,4);function Nc(t){return function(e,n){var r=t((e=Ws(e)).h,(n=Ws(n)).h),i=te(e.s,n.s),s=te(e.l,n.l),o=te(e.opacity,n.opacity);return function(a){return e.h=r(a),e.s=i(a),e.l=s(a),e.opacity=o(a),e+""}}}var Og=Nc(hi),Gg=Nc(te);function Ug(t,e){var n=te((t=Zs(t)).l,(e=Zs(e)).l),r=te(t.a,e.a),i=te(t.b,e.b),s=te(t.opacity,e.opacity);return function(o){return t.l=n(o),t.a=r(o),t.b=i(o),t.opacity=s(o),t+""}}function zc(t){return function(e,n){var r=t((e=$s(e)).h,(n=$s(n)).h),i=te(e.c,n.c),s=te(e.l,n.l),o=te(e.opacity,n.opacity);return function(a){return e.h=r(a),e.c=i(a),e.l=s(a),e.opacity=o(a),e+""}}}var Hg=zc(hi),Qg=zc(te);function Oc(t){return function e(n){n=+n;function r(i,s){var o=t((i=no(i)).h,(s=no(s)).h),a=te(i.s,s.s),u=te(i.l,s.l),c=te(i.opacity,s.opacity);return function(f){return i.h=o(f),i.s=a(f),i.l=u(Math.pow(f,n)),i.opacity=c(f),i+""}}return r.gamma=e,r}(1)}var Vg=Oc(hi),jg=Oc(te);function uo(t,e){e===void 0&&(e=t,t=pt);for(var n=0,r=e.length-1,i=e[0],s=new Array(r<0?0:r);n<r;)s[n]=t(i,i=e[++n]);return function(o){var a=Math.max(0,Math.min(r-1,Math.floor(o*=r)));return s[a](o-a)}}function Yg(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n}var Wg=Object.freeze(Object.defineProperty({__proto__:null,interpolate:pt,interpolateArray:Sg,interpolateBasis:vc,interpolateBasisClosed:Ec,interpolateDate:Fc,interpolateDiscrete:Mg,interpolateHue:Ig,interpolateNumber:Le,interpolateNumberArray:io,interpolateObject:Mc,interpolateRound:ir,interpolateString:Ic,interpolateTransformCss:Lg,interpolateTransformSvg:Rg,interpolateZoom:kc,interpolateRgb:ro,interpolateRgbBasis:Cg,interpolateRgbBasisClosed:Dg,interpolateHsl:Og,interpolateHslLong:Gg,interpolateLab:Ug,interpolateHcl:Hg,interpolateHclLong:Qg,interpolateCubehelix:Vg,interpolateCubehelixLong:jg,piecewise:uo,quantize:Yg},Symbol.toStringTag,{value:"Module"}));function Xg(t){return function(){return t}}function co(t){return+t}var Gc=[0,1];function ge(t){return t}function lo(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:Xg(isNaN(e)?NaN:.5)}function Zg(t,e){var n;return t>e&&(n=t,t=e,e=n),function(r){return Math.max(t,Math.min(e,r))}}function Kg(t,e,n){var r=t[0],i=t[1],s=e[0],o=e[1];return i<r?(r=lo(i,r),s=n(o,s)):(r=lo(r,i),s=n(s,o)),function(a){return s(r(a))}}function qg(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),s=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<r;)i[o]=lo(t[o],t[o+1]),s[o]=n(e[o],e[o+1]);return function(a){var u=_t(t,a,1,r)-1;return s[u](i[u](a))}}function sr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function pi(){var t=Gc,e=Gc,n=pt,r,i,s,o=ge,a,u,c;function f(){var h=Math.min(t.length,e.length);return o!==ge&&(o=Zg(t[0],t[h-1])),a=h>2?qg:Kg,u=c=null,l}function l(h){return h==null||isNaN(h=+h)?s:(u||(u=a(t.map(r),e,n)))(r(o(h)))}return l.invert=function(h){return o(i((c||(c=a(e,t.map(r),Le)))(h)))},l.domain=function(h){return arguments.length?(t=Array.from(h,co),f()):t.slice()},l.range=function(h){return arguments.length?(e=Array.from(h),f()):e.slice()},l.rangeRound=function(h){return e=Array.from(h),n=ir,f()},l.clamp=function(h){return arguments.length?(o=h?!0:ge,f()):o!==ge},l.interpolate=function(h){return arguments.length?(n=h,f()):n},l.unknown=function(h){return arguments.length?(s=h,l):s},function(h,p){return r=h,i=p,f()}}function Uc(){return pi()(ge,ge)}function Hc(t,e,n,r){var i=Ft(t,e,n),s;switch(r=at(r==null?",f":r),r.type){case"s":{var o=Math.max(Math.abs(t),Math.abs(e));return r.precision==null&&!isNaN(s=cu(i,o))&&(r.precision=s),ys(r,o)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(s=lu(i,Math.max(Math.abs(t),Math.abs(e))))&&(r.precision=s-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(s=uu(i))&&(r.precision=s-(r.type==="%")*2);break}}return re(r)}function Ut(t){var e=t.domain;return t.ticks=function(n){var r=e();return Wr(r[0],r[r.length-1],n==null?10:n)},t.tickFormat=function(n,r){var i=e();return Hc(i[0],i[i.length-1],n==null?10:n,r)},t.nice=function(n){n==null&&(n=10);var r=e(),i=0,s=r.length-1,o=r[i],a=r[s],u,c,f=10;for(a<o&&(c=o,o=a,a=c,c=i,i=s,s=c);f-- >0;){if(c=eu(o,a,n),c===u)return r[i]=o,r[s]=a,e(r);if(c>0)o=Math.floor(o/c)*c,a=Math.ceil(a/c)*c;else if(c<0)o=Math.ceil(o*c)/c,a=Math.floor(a*c)/c;else break;u=c}return t},t}function Qc(){var t=Uc();return t.copy=function(){return sr(t,Qc())},Ge.apply(t,arguments),Ut(t)}function Vc(t){var e;function n(r){return r==null||isNaN(r=+r)?e:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(t=Array.from(r,co),n):t.slice()},n.unknown=function(r){return arguments.length?(e=r,n):e},n.copy=function(){return Vc(t).unknown(e)},t=arguments.length?Array.from(t,co):[0,1],Ut(n)}function jc(t,e){t=t.slice();var n=0,r=t.length-1,i=t[n],s=t[r],o;return s<i&&(o=n,n=r,r=o,o=i,i=s,s=o),t[n]=e.floor(i),t[r]=e.ceil(s),t}function Yc(t){return Math.log(t)}function Wc(t){return Math.exp(t)}function Jg(t){return-Math.log(-t)}function _g(t){return-Math.exp(-t)}function $g(t){return isFinite(t)?+("1e"+t):t<0?0:t}function em(t){return t===10?$g:t===Math.E?Math.exp:e=>Math.pow(t,e)}function tm(t){return t===Math.E?Math.log:t===10&&Math.log10||t===2&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}function Xc(t){return(e,n)=>-t(-e,n)}function fo(t){const e=t(Yc,Wc),n=e.domain;let r=10,i,s;function o(){return i=tm(r),s=em(r),n()[0]<0?(i=Xc(i),s=Xc(s),t(Jg,_g)):t(Yc,Wc),e}return e.base=function(a){return arguments.length?(r=+a,o()):r},e.domain=function(a){return arguments.length?(n(a),o()):n()},e.ticks=a=>{const u=n();let c=u[0],f=u[u.length-1];const l=f<c;l&&([c,f]=[f,c]);let h=i(c),p=i(f),d,g;const m=a==null?10:+a;let A=[];if(!(r%1)&&p-h<m){if(h=Math.floor(h),p=Math.ceil(p),c>0){for(;h<=p;++h)for(d=1;d<r;++d)if(g=h<0?d/s(-h):d*s(h),!(g<c)){if(g>f)break;A.push(g)}}else for(;h<=p;++h)for(d=r-1;d>=1;--d)if(g=h>0?d/s(-h):d*s(h),!(g<c)){if(g>f)break;A.push(g)}A.length*2<m&&(A=Wr(c,f,m))}else A=Wr(h,p,Math.min(p-h,m)).map(s);return l?A.reverse():A},e.tickFormat=(a,u)=>{if(a==null&&(a=10),u==null&&(u=r===10?"s":","),typeof u!="function"&&(!(r%1)&&(u=at(u)).precision==null&&(u.trim=!0),u=re(u)),a===1/0)return u;const c=Math.max(1,r*a/e.ticks().length);return f=>{let l=f/s(Math.round(i(f)));return l*r<r-.5&&(l*=r),l<=c?u(f):""}},e.nice=()=>n(jc(n(),{floor:a=>s(Math.floor(i(a))),ceil:a=>s(Math.ceil(i(a)))})),e}function ho(){const t=fo(pi()).domain([1,10]);return t.copy=()=>sr(t,ho()).base(t.base()),Ge.apply(t,arguments),t}function Zc(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function Kc(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function po(t){var e=1,n=t(Zc(e),Kc(e));return n.constant=function(r){return arguments.length?t(Zc(e=+r),Kc(e)):e},Ut(n)}function qc(){var t=po(pi());return t.copy=function(){return sr(t,qc()).constant(t.constant())},Ge.apply(t,arguments)}function Jc(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function nm(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function rm(t){return t<0?-t*t:t*t}function go(t){var e=t(ge,ge),n=1;function r(){return n===1?t(ge,ge):n===.5?t(nm,rm):t(Jc(n),Jc(1/n))}return e.exponent=function(i){return arguments.length?(n=+i,r()):n},Ut(e)}function mo(){var t=go(pi());return t.copy=function(){return sr(t,mo()).exponent(t.exponent())},Ge.apply(t,arguments),t}function im(){return mo.apply(null,arguments).exponent(.5)}function _c(){var t=[],e=[],n=[],r;function i(){var o=0,a=Math.max(1,e.length);for(n=new Array(a-1);++o<a;)n[o-1]=tu(t,o/a);return s}function s(o){return o==null||isNaN(o=+o)?r:e[_t(n,o)]}return s.invertExtent=function(o){var a=e.indexOf(o);return a<0?[NaN,NaN]:[a>0?n[a-1]:t[0],a<n.length?n[a]:t[t.length-1]]},s.domain=function(o){if(!arguments.length)return t.slice();t=[];for(let a of o)a!=null&&!isNaN(a=+a)&&t.push(a);return t.sort(jr),i()},s.range=function(o){return arguments.length?(e=Array.from(o),i()):e.slice()},s.unknown=function(o){return arguments.length?(r=o,s):r},s.quantiles=function(){return n.slice()},s.copy=function(){return _c().domain(t).range(e).unknown(r)},Ge.apply(s,arguments)}function $c(){var t=0,e=1,n=1,r=[.5],i=[0,1],s;function o(u){return u!=null&&u<=u?i[_t(r,u,0,n)]:s}function a(){var u=-1;for(r=new Array(n);++u<n;)r[u]=((u+1)*e-(u-n)*t)/(n+1);return o}return o.domain=function(u){return arguments.length?([t,e]=u,t=+t,e=+e,a()):[t,e]},o.range=function(u){return arguments.length?(n=(i=Array.from(u)).length-1,a()):i.slice()},o.invertExtent=function(u){var c=i.indexOf(u);return c<0?[NaN,NaN]:c<1?[t,r[0]]:c>=n?[r[n-1],e]:[r[c-1],r[c]]},o.unknown=function(u){return arguments.length&&(s=u),o},o.thresholds=function(){return r.slice()},o.copy=function(){return $c().domain([t,e]).range(i).unknown(s)},Ge.apply(Ut(o),arguments)}function el(){var t=[.5],e=[0,1],n,r=1;function i(s){return s!=null&&s<=s?e[_t(t,s,0,r)]:n}return i.domain=function(s){return arguments.length?(t=Array.from(s),r=Math.min(t.length,e.length-1),i):t.slice()},i.range=function(s){return arguments.length?(e=Array.from(s),r=Math.min(t.length,e.length-1),i):e.slice()},i.invertExtent=function(s){var o=e.indexOf(s);return[t[o-1],t[o]]},i.unknown=function(s){return arguments.length?(n=s,i):n},i.copy=function(){return el().domain(t).range(e).unknown(n)},Ge.apply(i,arguments)}function sm(t){return new Date(t)}function om(t){return t instanceof Date?+t:+new Date(+t)}function Ao(t,e,n,r,i,s,o,a,u,c){var f=Uc(),l=f.invert,h=f.domain,p=c(".%L"),d=c(":%S"),g=c("%I:%M"),m=c("%I %p"),A=c("%a %d"),w=c("%b %d"),y=c("%B"),v=c("%Y");function S(E){return(u(E)<E?p:a(E)<E?d:o(E)<E?g:s(E)<E?m:r(E)<E?i(E)<E?A:w:n(E)<E?y:v)(E)}return f.invert=function(E){return new Date(l(E))},f.domain=function(E){return arguments.length?h(Array.from(E,om)):h().map(sm)},f.ticks=function(E){var B=h();return t(B[0],B[B.length-1],E==null?10:E)},f.tickFormat=function(E,B){return B==null?S:c(B)},f.nice=function(E){var B=h();return(!E||typeof E.range!="function")&&(E=e(B[0],B[B.length-1],E==null?10:E)),E?h(jc(B,E)):f},f.copy=function(){return sr(f,Ao(t,e,n,r,i,s,o,a,u,c))},f}function am(){return Ge.apply(Ao(Ad,xd,ct,Jr,qr,It,Bs,Ss,ut,ks).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function um(){return Ge.apply(Ao(gd,md,lt,$r,_r,Pt,Is,Ms,ut,Ns).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function gi(){var t=0,e=1,n,r,i,s,o=ge,a=!1,u;function c(l){return l==null||isNaN(l=+l)?u:o(i===0?.5:(l=(s(l)-n)*i,a?Math.max(0,Math.min(1,l)):l))}c.domain=function(l){return arguments.length?([t,e]=l,n=s(t=+t),r=s(e=+e),i=n===r?0:1/(r-n),c):[t,e]},c.clamp=function(l){return arguments.length?(a=!!l,c):a},c.interpolator=function(l){return arguments.length?(o=l,c):o};function f(l){return function(h){var p,d;return arguments.length?([p,d]=h,o=l(p,d),c):[o(0),o(1)]}}return c.range=f(pt),c.rangeRound=f(ir),c.unknown=function(l){return arguments.length?(u=l,c):u},function(l){return s=l,n=l(t),r=l(e),i=n===r?0:1/(r-n),c}}function gt(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function xo(){var t=Ut(gi()(ge));return t.copy=function(){return gt(t,xo())},ht.apply(t,arguments)}function tl(){var t=fo(gi()).domain([1,10]);return t.copy=function(){return gt(t,tl()).base(t.base())},ht.apply(t,arguments)}function nl(){var t=po(gi());return t.copy=function(){return gt(t,nl()).constant(t.constant())},ht.apply(t,arguments)}function yo(){var t=go(gi());return t.copy=function(){return gt(t,yo()).exponent(t.exponent())},ht.apply(t,arguments)}function cm(){return yo.apply(null,arguments).exponent(.5)}function mi(){var t=0,e=.5,n=1,r=1,i,s,o,a,u,c=ge,f,l=!1,h;function p(g){return isNaN(g=+g)?h:(g=.5+((g=+f(g))-s)*(r*g<r*s?a:u),c(l?Math.max(0,Math.min(1,g)):g))}p.domain=function(g){return arguments.length?([t,e,n]=g,i=f(t=+t),s=f(e=+e),o=f(n=+n),a=i===s?0:.5/(s-i),u=s===o?0:.5/(o-s),r=s<i?-1:1,p):[t,e,n]},p.clamp=function(g){return arguments.length?(l=!!g,p):l},p.interpolator=function(g){return arguments.length?(c=g,p):c};function d(g){return function(m){var A,w,y;return arguments.length?([A,w,y]=m,c=uo(g,[A,w,y]),p):[c(0),c(.5),c(1)]}}return p.range=d(pt),p.rangeRound=d(ir),p.unknown=function(g){return arguments.length?(h=g,p):h},function(g){return f=g,i=g(t),s=g(e),o=g(n),a=i===s?0:.5/(s-i),u=s===o?0:.5/(o-s),r=s<i?-1:1,p}}function rl(){var t=Ut(mi()(ge));return t.copy=function(){return gt(t,rl())},ht.apply(t,arguments)}function il(){var t=fo(mi()).domain([.1,1,10]);return t.copy=function(){return gt(t,il()).base(t.base())},ht.apply(t,arguments)}function sl(){var t=po(mi());return t.copy=function(){return gt(t,sl()).constant(t.constant())},ht.apply(t,arguments)}function bo(){var t=go(mi());return t.copy=function(){return gt(t,bo()).exponent(t.exponent())},ht.apply(t,arguments)}function lm(){return bo.apply(null,arguments).exponent(.5)}function wo(t,e,n){const r=t-e+n*2;return t?r>0?r:1:0}const fm="identity",fn="linear",mt="log",or="pow",ar="sqrt",Ai="symlog",ol="time",al="utc",Qe="sequential",hn="diverging",vo="quantile",ul="quantize",cl="threshold",Eo="ordinal",Co="point",ll="band",Do="bin-ordinal",q="continuous",ur="discrete",cr="discretizing",Se="interpolating",fl="temporal";function hm(t){return function(e){let n=e[0],r=e[1],i;return r<n&&(i=n,n=r,r=i),[t.invert(n),t.invert(r)]}}function dm(t){return function(e){const n=t.range();let r=e[0],i=e[1],s=-1,o,a,u,c;for(i<r&&(a=r,r=i,i=a),u=0,c=n.length;u<c;++u)n[u]>=r&&n[u]<=i&&(s<0&&(s=u),o=u);if(!(s<0))return r=t.invertExtent(n[s]),i=t.invertExtent(n[o]),[r[0]===void 0?r[1]:r[0],i[1]===void 0?i[0]:i[1]]}}function So(){const t=js().unknown(void 0),e=t.domain,n=t.range;let r=[0,1],i,s,o=!1,a=0,u=0,c=.5;delete t.unknown;function f(){const l=e().length,h=r[1]<r[0],p=r[1-h],d=wo(l,a,u);let g=r[h-0];i=(p-g)/(d||1),o&&(i=Math.floor(i)),g+=(p-g-i*(l-a))*c,s=i*(1-a),o&&(g=Math.round(g),s=Math.round(s));const m=Rn(l).map(A=>g+i*A);return n(h?m.reverse():m)}return t.domain=function(l){return arguments.length?(e(l),f()):e()},t.range=function(l){return arguments.length?(r=[+l[0],+l[1]],f()):r.slice()},t.rangeRound=function(l){return r=[+l[0],+l[1]],o=!0,f()},t.bandwidth=function(){return s},t.step=function(){return i},t.round=function(l){return arguments.length?(o=!!l,f()):o},t.padding=function(l){return arguments.length?(u=Math.max(0,Math.min(1,l)),a=u,f()):a},t.paddingInner=function(l){return arguments.length?(a=Math.max(0,Math.min(1,l)),f()):a},t.paddingOuter=function(l){return arguments.length?(u=Math.max(0,Math.min(1,l)),f()):u},t.align=function(l){return arguments.length?(c=Math.max(0,Math.min(1,l)),f()):c},t.invertRange=function(l){if(l[0]==null||l[1]==null)return;const h=r[1]<r[0],p=h?n().reverse():n(),d=p.length-1;let g=+l[0],m=+l[1],A,w,y;if(!(g!==g||m!==m)&&(m<g&&(y=g,g=m,m=y),!(m<p[0]||g>r[1-h])))return A=Math.max(0,ds(p,g)-1),w=g===m?A:ds(p,m)-1,g-p[A]>s+1e-10&&++A,h&&(y=A,A=d-w,w=d-y),A>w?void 0:e().slice(A,w+1)},t.invert=function(l){const h=t.invertRange([l,l]);return h&&h[0]},t.copy=function(){return So().domain(e()).range(r).round(o).paddingInner(a).paddingOuter(u).align(c)},f()}function hl(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return hl(e())},t}function pm(){return hl(So().paddingInner(1))}var gm=Array.prototype.map;function mm(t){return gm.call(t,Tn)}const Am=Array.prototype.slice;function dl(){let t=[],e=[];function n(r){return r==null||r!==r?void 0:e[(_t(t,r)-1)%e.length]}return n.domain=function(r){return arguments.length?(t=mm(r),n):t.slice()},n.range=function(r){return arguments.length?(e=Am.call(r),n):e.slice()},n.tickFormat=function(r,i){return Hc(t[0],Te(t),r==null?10:r,i)},n.copy=function(){return dl().domain(n.domain()).range(n.range())},n}const xi={};function xm(t,e,n){const r=function(){const s=e();return s.invertRange||(s.invertRange=s.invert?hm(s):s.invertExtent?dm(s):void 0),s.type=t,s};return r.metadata=Vr(us(n)),r}function z(t,e,n){return arguments.length>1?(xi[t]=xm(t,e,n),this):ym(t)?xi[t]:void 0}z(fm,Vc),z(fn,Qc,q),z(mt,ho,[q,mt]),z(or,mo,q),z(ar,im,q),z(Ai,qc,q),z(ol,am,[q,fl]),z(al,um,[q,fl]),z(Qe,xo,[q,Se]),z("".concat(Qe,"-").concat(fn),xo,[q,Se]),z("".concat(Qe,"-").concat(mt),tl,[q,Se,mt]),z("".concat(Qe,"-").concat(or),yo,[q,Se]),z("".concat(Qe,"-").concat(ar),cm,[q,Se]),z("".concat(Qe,"-").concat(Ai),nl,[q,Se]),z("".concat(hn,"-").concat(fn),rl,[q,Se]),z("".concat(hn,"-").concat(mt),il,[q,Se,mt]),z("".concat(hn,"-").concat(or),bo,[q,Se]),z("".concat(hn,"-").concat(ar),lm,[q,Se]),z("".concat(hn,"-").concat(Ai),sl,[q,Se]),z(vo,_c,[cr,vo]),z(ul,$c,cr),z(cl,el,cr),z(Do,dl,[ur,cr]),z(Eo,js,ur),z(ll,So,ur),z(Co,pm,ur);function ym(t){return Bt(xi,t)}function lr(t,e){const n=xi[t];return n&&n.metadata[e]}function Ve(t){return lr(t,q)}function Ht(t){return lr(t,ur)}function dn(t){return lr(t,cr)}function pl(t){return lr(t,mt)}function yi(t){return lr(t,Se)}function bm(t,e){const n=e[0],r=Te(e)-n;return function(i){return t(n+i*r)}}function bi(t,e,n){return uo(gl(e||"rgb",n),t)}function wm(t,e){const n=new Array(e),r=e+1;for(let i=0;i<e;)n[i]=t(++i/r);return n}function gl(t,e){const n=Wg[vm(t)];return e!=null&&n&&n.gamma?n.gamma(e):n}function vm(t){return"interpolate"+t.toLowerCase().split("-").map(e=>e[0].toUpperCase()+e.slice(1)).join("")}const Em={blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},Cm={category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"};function ml(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r<e;)n[r]="#"+t.slice(r*6,++r*6);return n}function Al(t,e){for(const n in t)Bo(n,e(t[n]))}const xl={};Al(Cm,ml),Al(Em,t=>bi(ml(t)));function Bo(t,e){return t=t&&t.toLowerCase(),arguments.length>1?(xl[t]=e,this):xl[t]}var FE="";function Dm(t,e){var n=t.getBoundingClientRect();return[e.clientX-n.left-t.clientLeft,e.clientY-n.top-t.clientTop]}function yl(t,e){return t.length==e.length&&t.every((n,r)=>t[r]===e[r])}function Sm(t,e,n,r){return t.length==e.length&&t.every((i,s)=>n(t[s])===r(e[s]))}function je(t){return Array.isArray(t)?t:typeof t!="undefined"?[t]:[]}function Be(t){return t[t.length-1]}class Bm{constructor(e){this.container=e,this.element=document.createElement("div"),this.element.className="tooltip",this._visible=!0,this.container.appendChild(this.element),this._previousTooltipDatum=void 0,this.enabledStack=[!0],this._penaltyUntil=0,this._lastCoords=void 0,this._previousMove=0,this.clear()}set visible(e){e!=this._visible&&(this.element.style.display=e?null:"none",this._visible=e)}get visible(){return this._visible}get enabled(){var e;return(e=Be(this.enabledStack))!=null?e:!0}pushEnabledState(e){this.enabledStack.push(e),e||(this.visible=!1)}popEnabledState(){this.enabledStack.pop()}handleMouseMove(e){this.mouseCoords=Dm(this.container,e);const n=performance.now();!this.visible&&!this._isPenalty()&&n-this._previousMove>500&&(this._penaltyUntil=n+70),this._lastCoords&&Fm(this.mouseCoords,this._lastCoords)>20&&(this._penaltyUntil=n+400),this._lastCoords=this.mouseCoords,this.visible&&this.updatePlacement(),this._previousMove=n}updatePlacement(){const[n,r]=this.mouseCoords;let i=n+20;i>this.container.clientWidth-this.element.offsetWidth&&(i=n-20-this.element.offsetWidth),this.element.style.left=i+"px",this.element.style.top=Math.min(r+20,this.container.clientHeight-this.element.offsetHeight)+"px"}setContent(e){if(!e||!this.enabled||this._isPenalty()){this.visible&&(qu("",this.element),this.visible=!1),this._previousTooltipDatum=void 0;return}qu(e,this.element),this.visible=!0,this.updatePlacement()}clear(){this._previousTooltipDatum=void 0,this.setContent(void 0)}updateWithDatum(e,n){e!==this._previousTooltipDatum&&(this._previousTooltipDatum=e,n||(n=r=>Promise.resolve(_e`${JSON.stringify(r)}`)),n(e).then(r=>this.setContent(r)).catch(r=>{if(r!=="debounced")throw r}))}_isPenalty(){return this._penaltyUntil&&this._penaltyUntil>performance.now()}}function Fm(t,e){let n=0;for(let r=0;r<t.length;r++)n+=(t[r]-e[r])**2;return Math.sqrt(n)}const Mm="RawCode",Im="Literal",Tm="Property",Pm="Identifier",Lm="ArrayExpression",Rm="BinaryExpression",km="CallExpression",Nm="ConditionalExpression",zm="LogicalExpression",Om="MemberExpression",Gm="ObjectExpression",Um="UnaryExpression";function Re(t){this.type=t}Re.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=Hm(this),n=0,r=e.length;n<r;++n)if(e[n].visit(t))return 1};function Hm(t){switch(t.type){case Lm:return t.elements;case Rm:case zm:return[t.left,t.right];case km:return[t.callee].concat(t.arguments);case Nm:return[t.test,t.consequent,t.alternate];case Om:return[t.object,t.property];case Gm:return t.properties;case Tm:return[t.key,t.value];case Um:return[t.argument];case Pm:case Im:case Mm:default:return[]}}var Ye,C,x,se,O,wi=1,fr=2,Qt=3,At=4,vi=5,Vt=6,me=7,hr=8,Qm=9;Ye={},Ye[wi]="Boolean",Ye[fr]="<end>",Ye[Qt]="Identifier",Ye[At]="Keyword",Ye[vi]="Null",Ye[Vt]="Numeric",Ye[me]="Punctuator",Ye[hr]="String",Ye[Qm]="RegularExpression";var Vm="ArrayExpression",jm="BinaryExpression",Ym="CallExpression",Wm="ConditionalExpression",bl="Identifier",Xm="Literal",Zm="LogicalExpression",Km="MemberExpression",qm="ObjectExpression",Jm="Property",_m="UnaryExpression",ne="Unexpected token %0",$m="Unexpected number",eA="Unexpected string",tA="Unexpected identifier",nA="Unexpected reserved word",rA="Unexpected end of input",Fo="Invalid regular expression",Mo="Invalid regular expression: missing /",wl="Octal literals are not allowed in strict mode.",iA="Duplicate data property in object literal not allowed in strict mode",ie="ILLEGAL",dr="Disabled.",sA=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),oA=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function Ei(t,e){if(!t)throw new Error("ASSERT: "+e)}function et(t){return t>=48&&t<=57}function Io(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function pr(t){return"01234567".indexOf(t)>=0}function aA(t){return t===32||t===9||t===11||t===12||t===160||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function gr(t){return t===10||t===13||t===8232||t===8233}function mr(t){return t===36||t===95||t>=65&&t<=90||t>=97&&t<=122||t===92||t>=128&&sA.test(String.fromCharCode(t))}function Ci(t){return t===36||t===95||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t===92||t>=128&&oA.test(String.fromCharCode(t))}const uA={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function vl(){for(;x<se;){const t=C.charCodeAt(x);if(aA(t)||gr(t))++x;else break}}function To(t){var e,n,r,i=0;for(n=t==="u"?4:2,e=0;e<n;++e)x<se&&Io(C[x])?(r=C[x++],i=i*16+"0123456789abcdef".indexOf(r.toLowerCase())):k({},ne,ie);return String.fromCharCode(i)}function cA(){var t,e,n,r;for(t=C[x],e=0,t==="}"&&k({},ne,ie);x<se&&(t=C[x++],!!Io(t));)e=e*16+"0123456789abcdef".indexOf(t.toLowerCase());return(e>1114111||t!=="}")&&k({},ne,ie),e<=65535?String.fromCharCode(e):(n=(e-65536>>10)+55296,r=(e-65536&1023)+56320,String.fromCharCode(n,r))}function El(){var t,e;for(t=C.charCodeAt(x++),e=String.fromCharCode(t),t===92&&(C.charCodeAt(x)!==117&&k({},ne,ie),++x,t=To("u"),(!t||t==="\\"||!mr(t.charCodeAt(0)))&&k({},ne,ie),e=t);x<se&&(t=C.charCodeAt(x),!!Ci(t));)++x,e+=String.fromCharCode(t),t===92&&(e=e.substr(0,e.length-1),C.charCodeAt(x)!==117&&k({},ne,ie),++x,t=To("u"),(!t||t==="\\"||!Ci(t.charCodeAt(0)))&&k({},ne,ie),e+=t);return e}function lA(){var t,e;for(t=x++;x<se;){if(e=C.charCodeAt(x),e===92)return x=t,El();if(Ci(e))++x;else break}return C.slice(t,x)}function fA(){var t,e,n;return t=x,e=C.charCodeAt(x)===92?El():lA(),e.length===1?n=Qt:uA.hasOwnProperty(e)?n=At:e==="null"?n=vi:e==="true"||e==="false"?n=wi:n=Qt,{type:n,value:e,start:t,end:x}}function Po(){var t=x,e=C.charCodeAt(x),n,r=C[x],i,s,o;switch(e){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++x,{type:me,value:String.fromCharCode(e),start:t,end:x};default:if(n=C.charCodeAt(x+1),n===61)switch(e){case 43:case 45:case 47:case 60:case 62:case 94:case 124:case 37:case 38:case 42:return x+=2,{type:me,value:String.fromCharCode(e)+String.fromCharCode(n),start:t,end:x};case 33:case 61:return x+=2,C.charCodeAt(x)===61&&++x,{type:me,value:C.slice(t,x),start:t,end:x}}}if(o=C.substr(x,4),o===">>>=")return x+=4,{type:me,value:o,start:t,end:x};if(s=o.substr(0,3),s===">>>"||s==="<<="||s===">>=")return x+=3,{type:me,value:s,start:t,end:x};if(i=s.substr(0,2),r===i[1]&&"+-<>&|".indexOf(r)>=0||i==="=>")return x+=2,{type:me,value:i,start:t,end:x};if(i==="//"&&k({},ne,ie),"<>=!+-*%&|^/".indexOf(r)>=0)return++x,{type:me,value:r,start:t,end:x};k({},ne,ie)}function hA(t){let e="";for(;x<se&&Io(C[x]);)e+=C[x++];return e.length===0&&k({},ne,ie),mr(C.charCodeAt(x))&&k({},ne,ie),{type:Vt,value:parseInt("0x"+e,16),start:t,end:x}}function dA(t){let e="0"+C[x++];for(;x<se&&pr(C[x]);)e+=C[x++];return(mr(C.charCodeAt(x))||et(C.charCodeAt(x)))&&k({},ne,ie),{type:Vt,value:parseInt(e,8),octal:!0,start:t,end:x}}function Cl(){var t,e,n;if(n=C[x],Ei(et(n.charCodeAt(0))||n===".","Numeric literal must start with a decimal digit or a decimal point"),e=x,t="",n!=="."){if(t=C[x++],n=C[x],t==="0"){if(n==="x"||n==="X")return++x,hA(e);if(pr(n))return dA(e);n&&et(n.charCodeAt(0))&&k({},ne,ie)}for(;et(C.charCodeAt(x));)t+=C[x++];n=C[x]}if(n==="."){for(t+=C[x++];et(C.charCodeAt(x));)t+=C[x++];n=C[x]}if(n==="e"||n==="E")if(t+=C[x++],n=C[x],(n==="+"||n==="-")&&(t+=C[x++]),et(C.charCodeAt(x)))for(;et(C.charCodeAt(x));)t+=C[x++];else k({},ne,ie);return mr(C.charCodeAt(x))&&k({},ne,ie),{type:Vt,value:parseFloat(t),start:e,end:x}}function pA(){var t="",e,n,r,i,s=!1;for(e=C[x],Ei(e==="'"||e==='"',"String literal must starts with a quote"),n=x,++x;x<se;)if(r=C[x++],r===e){e="";break}else if(r==="\\")if(r=C[x++],!r||!gr(r.charCodeAt(0)))switch(r){case"u":case"x":C[x]==="{"?(++x,t+=cA()):t+=To(r);break;case"n":t+=`
|
|
11
|
+
`;break;case"r":t+="\r";break;case"t":t+=" ";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:pr(r)?(i="01234567".indexOf(r),i!==0&&(s=!0),x<se&&pr(C[x])&&(s=!0,i=i*8+"01234567".indexOf(C[x++]),"0123".indexOf(r)>=0&&x<se&&pr(C[x])&&(i=i*8+"01234567".indexOf(C[x++]))),t+=String.fromCharCode(i)):t+=r;break}else r==="\r"&&C[x]===`
|
|
12
|
+
`&&++x;else{if(gr(r.charCodeAt(0)))break;t+=r}return e!==""&&k({},ne,ie),{type:hr,value:t,octal:s,start:n,end:x}}function gA(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,(r,i)=>{if(parseInt(i,16)<=1114111)return"x";k({},Fo)}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch{k({},Fo)}try{return new RegExp(t,e)}catch{return null}}function mA(){var t,e,n,r,i;for(t=C[x],Ei(t==="/","Regular expression literal must start with a slash"),e=C[x++],n=!1,r=!1;x<se;)if(t=C[x++],e+=t,t==="\\")t=C[x++],gr(t.charCodeAt(0))&&k({},Mo),e+=t;else if(gr(t.charCodeAt(0)))k({},Mo);else if(n)t==="]"&&(n=!1);else if(t==="/"){r=!0;break}else t==="["&&(n=!0);return r||k({},Mo),i=e.substr(1,e.length-2),{value:i,literal:e}}function AA(){var t,e,n;for(e="",n="";x<se&&(t=C[x],!!Ci(t.charCodeAt(0)));)++x,t==="\\"&&x<se?k({},ne,ie):(n+=t,e+=t);return n.search(/[^gimuy]/g)>=0&&k({},Fo,n),{value:n,literal:e}}function xA(){var t,e,n,r;return O=null,vl(),t=x,e=mA(),n=AA(),r=gA(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:x}}function yA(t){return t.type===Qt||t.type===At||t.type===wi||t.type===vi}function Dl(){if(vl(),x>=se)return{type:fr,start:x,end:x};const t=C.charCodeAt(x);return mr(t)?fA():t===40||t===41||t===59?Po():t===39||t===34?pA():t===46?et(C.charCodeAt(x+1))?Cl():Po():et(t)?Cl():Po()}function Ae(){const t=O;return x=t.end,O=Dl(),x=t.end,t}function Sl(){const t=x;O=Dl(),x=t}function bA(t){const e=new Re(Vm);return e.elements=t,e}function Bl(t,e,n){const r=new Re(t==="||"||t==="&&"?Zm:jm);return r.operator=t,r.left=e,r.right=n,r}function wA(t,e){const n=new Re(Ym);return n.callee=t,n.arguments=e,n}function vA(t,e,n){const r=new Re(Wm);return r.test=t,r.consequent=e,r.alternate=n,r}function Lo(t){const e=new Re(bl);return e.name=t,e}function Ar(t){const e=new Re(Xm);return e.value=t.value,e.raw=C.slice(t.start,t.end),t.regex&&(e.raw==="//"&&(e.raw="/(?:)/"),e.regex=t.regex),e}function Fl(t,e,n){const r=new Re(Km);return r.computed=t==="[",r.object=e,r.property=n,r.computed||(n.member=!0),r}function EA(t){const e=new Re(qm);return e.properties=t,e}function Ml(t,e,n){const r=new Re(Jm);return r.key=e,r.value=n,r.kind=t,r}function CA(t,e){const n=new Re(_m);return n.operator=t,n.argument=e,n.prefix=!0,n}function k(t,e){var n,r=Array.prototype.slice.call(arguments,2),i=e.replace(/%(\d)/g,(s,o)=>(Ei(o<r.length,"Message reference must be in range"),r[o]));throw n=new Error(i),n.index=x,n.description=i,n}function Di(t){t.type===fr&&k(t,rA),t.type===Vt&&k(t,$m),t.type===hr&&k(t,eA),t.type===Qt&&k(t,tA),t.type===At&&k(t,nA),k(t,ne,t.value)}function oe(t){const e=Ae();(e.type!==me||e.value!==t)&&Di(e)}function Q(t){return O.type===me&&O.value===t}function Ro(t){return O.type===At&&O.value===t}function DA(){const t=[];for(x=O.start,oe("[");!Q("]");)Q(",")?(Ae(),t.push(null)):(t.push(jt()),Q("]")||oe(","));return Ae(),bA(t)}function Il(){x=O.start;const t=Ae();return t.type===hr||t.type===Vt?(t.octal&&k(t,wl),Ar(t)):Lo(t.value)}function SA(){var t,e,n,r;if(x=O.start,t=O,t.type===Qt)return n=Il(),oe(":"),r=jt(),Ml("init",n,r);if(t.type===fr||t.type===me)Di(t);else return e=Il(),oe(":"),r=jt(),Ml("init",e,r)}function BA(){var t=[],e,n,r,i={},s=String;for(x=O.start,oe("{");!Q("}");)e=SA(),e.key.type===bl?n=e.key.name:n=s(e.key.value),r="$"+n,Object.prototype.hasOwnProperty.call(i,r)?k({},iA):i[r]=!0,t.push(e),Q("}")||oe(",");return oe("}"),EA(t)}function FA(){oe("(");const t=ko();return oe(")"),t}const MA={if:1};function IA(){var t,e,n;if(Q("("))return FA();if(Q("["))return DA();if(Q("{"))return BA();if(t=O.type,x=O.start,t===Qt||MA[O.value])n=Lo(Ae().value);else if(t===hr||t===Vt)O.octal&&k(O,wl),n=Ar(Ae());else{if(t===At)throw new Error(dr);t===wi?(e=Ae(),e.value=e.value==="true",n=Ar(e)):t===vi?(e=Ae(),e.value=null,n=Ar(e)):Q("/")||Q("/=")?(n=Ar(xA()),Sl()):Di(Ae())}return n}function TA(){const t=[];if(oe("("),!Q(")"))for(;x<se&&(t.push(jt()),!Q(")"));)oe(",");return oe(")"),t}function PA(){x=O.start;const t=Ae();return yA(t)||Di(t),Lo(t.value)}function LA(){return oe("."),PA()}function RA(){oe("[");const t=ko();return oe("]"),t}function kA(){var t,e,n;for(t=IA();;)if(Q("."))n=LA(),t=Fl(".",t,n);else if(Q("("))e=TA(),t=wA(t,e);else if(Q("["))n=RA(),t=Fl("[",t,n);else break;return t}function Tl(){const t=kA();if(O.type===me&&(Q("++")||Q("--")))throw new Error(dr);return t}function Si(){var t,e;if(O.type!==me&&O.type!==At)e=Tl();else{if(Q("++")||Q("--"))throw new Error(dr);if(Q("+")||Q("-")||Q("~")||Q("!"))t=Ae(),e=Si(),e=CA(t.value,e);else{if(Ro("delete")||Ro("void")||Ro("typeof"))throw new Error(dr);e=Tl()}}return e}function Pl(t){let e=0;if(t.type!==me&&t.type!==At)return 0;switch(t.value){case"||":e=1;break;case"&&":e=2;break;case"|":e=3;break;case"^":e=4;break;case"&":e=5;break;case"==":case"!=":case"===":case"!==":e=6;break;case"<":case">":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11;break}return e}function NA(){var t,e,n,r,i,s,o,a,u,c;if(t=O,u=Si(),r=O,i=Pl(r),i===0)return u;for(r.prec=i,Ae(),e=[t,O],o=Si(),s=[u,r,o];(i=Pl(O))>0;){for(;s.length>2&&i<=s[s.length-2].prec;)o=s.pop(),a=s.pop().value,u=s.pop(),e.pop(),n=Bl(a,u,o),s.push(n);r=Ae(),r.prec=i,s.push(r),e.push(O),n=Si(),s.push(n)}for(c=s.length-1,n=s[c],e.pop();c>1;)e.pop(),n=Bl(s[c-1].value,s[c-2],n),c-=2;return n}function jt(){var t,e,n;return t=NA(),Q("?")&&(Ae(),e=jt(),oe(":"),n=jt(),t=vA(t,e,n)),t}function ko(){const t=jt();if(Q(","))throw new Error(dr);return t}function zA(t){C=t,x=0,se=C.length,O=null,Sl();const e=ko();if(O.type!==fr)throw new Error("Unexpect token after expression.");return e}var OA={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function GA(t){function e(o,a,u,c){let f=t(a[0]);return u&&(f=u+"("+f+")",u.lastIndexOf("new ",0)===0&&(f="("+f+")")),f+"."+o+(c<0?"":c===0?"()":"("+a.slice(1).map(t).join(",")+")")}function n(o,a,u){return c=>e(o,c,a,u)}const r="new Date",i="String",s="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(o){o.length<3&&Y("Missing arguments to clamp function."),o.length>3&&Y("Too many arguments to clamp function.");const a=o.map(t);return"Math.max("+a[1]+", Math.min("+a[2]+","+a[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:r,date:n("getDate",r,0),day:n("getDay",r,0),year:n("getFullYear",r,0),month:n("getMonth",r,0),hours:n("getHours",r,0),minutes:n("getMinutes",r,0),seconds:n("getSeconds",r,0),milliseconds:n("getMilliseconds",r,0),time:n("getTime",r,0),timezoneoffset:n("getTimezoneOffset",r,0),utcdate:n("getUTCDate",r,0),utcday:n("getUTCDay",r,0),utcyear:n("getUTCFullYear",r,0),utcmonth:n("getUTCMonth",r,0),utchours:n("getUTCHours",r,0),utcminutes:n("getUTCMinutes",r,0),utcseconds:n("getUTCSeconds",r,0),utcmilliseconds:n("getUTCMilliseconds",r,0),length:n("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:n("toUpperCase",i,0),lower:n("toLowerCase",i,0),substring:n("substring",i),split:n("split",i),trim:n("trim",i,0),regexp:s,test:n("test",s),if:function(o){o.length<3&&Y("Missing arguments to if function."),o.length>3&&Y("Too many arguments to if function.");const a=o.map(t);return"("+a[0]+"?"+a[1]+":"+a[2]+")"}}}function UA(t){const e=t&&t.length-1;return e&&(t[0]==='"'&&t[e]==='"'||t[0]==="'"&&t[e]==="'")?t.slice(1,-1):t}function HA(t){t=t||{};const e=t.allowed?Vr(t.allowed):{},n=t.forbidden?Vr(t.forbidden):{},r=t.constants||OA,i=(t.functions||GA)(l),s=t.globalvar,o=t.fieldvar,a=he(s)?s:d=>`${s}["${d}"]`;let u={},c={},f=0;function l(d){if(W(d))return d;const g=h[d.type];return g==null&&Y("Unsupported type: "+d.type),g(d)}const h={Literal:d=>d.raw,Identifier:d=>{const g=d.name;return f>0?g:Bt(n,g)?Y("Illegal identifier: "+g):Bt(r,g)?r[g]:Bt(e,g)?g:(u[g]=1,a(g))},MemberExpression:d=>{const g=!d.computed,m=l(d.object);g&&(f+=1);const A=l(d.property);return m===o&&(c[UA(A)]=1),g&&(f-=1),m+(g?"."+A:"["+A+"]")},CallExpression:d=>{d.callee.type!=="Identifier"&&Y("Illegal callee type: "+d.callee.type);const g=d.callee.name,m=d.arguments,A=Bt(i,g)&&i[g];return A||Y("Unrecognized function: "+g),he(A)?A(m):A+"("+m.map(l).join(",")+")"},ArrayExpression:d=>"["+d.elements.map(l).join(",")+"]",BinaryExpression:d=>"("+l(d.left)+" "+d.operator+" "+l(d.right)+")",UnaryExpression:d=>"("+d.operator+l(d.argument)+")",ConditionalExpression:d=>"("+l(d.test)+"?"+l(d.consequent)+":"+l(d.alternate)+")",LogicalExpression:d=>"("+l(d.left)+d.operator+l(d.right)+")",ObjectExpression:d=>"{"+d.properties.map(l).join(",")+"}",Property:d=>{f+=1;const g=l(d.key);return f-=1,g+":"+l(d.value)}};function p(d){const g={code:l(d),globals:Object.keys(u),fields:Object.keys(c)};return u={},c={},g}return p.functions=i,p.constants=r,p}function No(t,e={}){const n=HA({forbidden:[],allowed:["datum"],globalvar:"global",fieldvar:"datum"});try{const r=zA(t),i=n(r),s=Function("datum","global",`"use strict"; return (${i.code});`),o=a=>s(a,e);return o.fields=i.fields,o}catch(r){throw new Error(`Invalid expression: ${t}, ${r.message}`)}}function QA(){let t=0;const e=new Map,n=r=>{let i=e.get(r);return i===void 0&&(i=t++,e.set(r,i)),i};return n.addAll=r=>{for(const i of r)n(i)},n.invert=r=>{for(const i of e.entries())if(i[1]==r)return i[0]},n.domain=()=>[...e.keys()],n}function VA(t,e){const n={};e||(e=t.encoding);for(const[r,i]of Object.entries(e)){if(!i)continue;const s=t.unitView.getScaleResolution(Me(i)&&i.resolutionChannel||r);n[r]=jA(e[r],s==null?void 0:s.getScale(),t.unitView.getAccessor(r),r)}return n}function jA(t,e,n,r){let i;if(Fe(t)){const s=t.value;i=o=>s,i.constant=!0,i.constantValue=!0,i.accessor=void 0}else if(n)if(r=="text")i=s=>{},i.accessor=n,i.constant=n.constant;else{if(!e)throw new Error(`Missing scale! "${r}": ${JSON.stringify(t)}`);if(i=s=>e(n(s)),Ht(e.type)){const s=QA();s.addAll(e.domain()),i.indexer=s}i.constant=n.constant,i.accessor=n,i.scale=e}else throw new Error(`Missing value or accessor (field, expr, datum) on channel "${r}": ${JSON.stringify(t)}`);return i.invert=e?s=>e.invert(s):s=>{throw new Error("No scale available, cannot invert: "+JSON.stringify(t))},i.channelDef=t,i.applyMetadata=s=>{for(const o in i)o in i&&(s[o]=i[o]);return s},i}function Fe(t){return t&&"value"in t}function xr(t){return t&&"field"in t}function yr(t){return t&&"datum"in t}function Me(t){return xr(t)||yr(t)||Oo(t)||Ll(t)}function zo(t,e){const n=t.mark.encoding[e];if(Me(n))return n;throw new Error("Not a channel def with scale!")}function Ll(t){return t&&"chrom"in t}function Oo(t){return t&&"expr"in t}const br=["x","y"],YA=["x2","y2"],WA=[...br,...YA];function Rl(t){return br.includes(t)}function wr(t){return WA.includes(t)}const Go={x:"x2",y:"y2"},kl=Object.fromEntries(Object.entries(Go).map(t=>[t[1],t[0]]));function vr(t){return t in kl}function XA(t){const e=Go[t];if(e)return e;throw new Error(`${t} has no secondary channel!`)}function pn(t){var e;return(e=kl[t])!=null?e:t}function Yt(t){return["color","fill","stroke"].includes(pn(t))}function Bi(t){return["shape","squeeze"].includes(t)}function Nl(t){switch(t){case"shape":return["circle","square","triangle-up","cross","diamond","triangle-down","triangle-right","triangle-left"]}}function zl(t){if(!Bi(t))throw new Error("Not a discrete channel: "+t);const e=new Map(Nl(t).map((n,r)=>[n,r]));return n=>{const r=e.get(n);if(r!==void 0)return r;throw new Error(`Invalid value for "${t}" channel: ${n}`)}}function G(t,e=t){if(/^[A-Za-z0-9_]+$/.test(t)){const n=new Function("datum",`return datum[${JSON.stringify(t)}]`);return H(n,[t],e)}else return Nr(t)}class ZA{constructor(){this.accessorCreators=[],this.register(e=>{if(xr(e))try{const n=G(e.field);return n.constant=!1,n.fields=Oa(n),n}catch(n){throw new Error(`Invalid field definition: ${n.message}`)}}),this.register(e=>Oo(e)?KA(e.expr):void 0),this.register(e=>{if(yr(e)){const r=Dh(e.datum);return r.constant=!0,r.fields=[],r}})}register(e){this.accessorCreators.push(e)}createAccessor(e){for(const n of this.accessorCreators){const r=n(e);if(r)return r}}}function KA(t){const e=No(t);return e.constant=e.fields.length==0,e}/* @license twgl.js 4.22.0 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
13
13
|
Available via the MIT license.
|
|
14
|
-
see: http://github.com/greggman/twgl.js for details */const ra=5120,wr=5121,ia=5122,sa=5123,oa=5124,aa=5125,ua=5126,Y1=32819,W1=32820,X1=33635,Z1=5131,K1=33640,q1=35899,J1=35902,_1=36269,$1=34042,fl={};{const t=fl;t[ra]=Int8Array,t[wr]=Uint8Array,t[ia]=Int16Array,t[sa]=Uint16Array,t[oa]=Int32Array,t[aa]=Uint32Array,t[ua]=Float32Array,t[Y1]=Uint16Array,t[W1]=Uint16Array,t[X1]=Uint16Array,t[Z1]=Uint16Array,t[K1]=Uint32Array,t[q1]=Uint32Array,t[J1]=Uint32Array,t[_1]=Uint32Array,t[$1]=Uint32Array}function ca(t){if(t instanceof Int8Array)return ra;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return wr;if(t instanceof Int16Array)return ia;if(t instanceof Uint16Array)return sa;if(t instanceof Int32Array)return oa;if(t instanceof Uint32Array)return aa;if(t instanceof Float32Array)return ua;throw new Error("unsupported typed array type")}function ex(t){if(t===Int8Array)return ra;if(t===Uint8Array||t===Uint8ClampedArray)return wr;if(t===Int16Array)return ia;if(t===Uint16Array)return sa;if(t===Int32Array)return oa;if(t===Uint32Array)return aa;if(t===Float32Array)return ua;throw new Error("unsupported typed array type")}function tx(t){const e=fl[t];if(!e)throw new Error("unknown gl type");return e}const Ri=typeof SharedArrayBuffer!="undefined"?function(e){return e&&e.buffer&&(e.buffer instanceof ArrayBuffer||e.buffer instanceof SharedArrayBuffer)}:function(e){return e&&e.buffer&&e.buffer instanceof ArrayBuffer};function nx(...t){console.error(...t)}function ll(...t){console.warn(...t)}function rx(t,e){return typeof WebGLBuffer!="undefined"&&e instanceof WebGLBuffer}function hl(t,e){return typeof WebGLRenderbuffer!="undefined"&&e instanceof WebGLRenderbuffer}function Ni(t,e){return typeof WebGLTexture!="undefined"&&e instanceof WebGLTexture}function ix(t,e){return typeof WebGLSampler!="undefined"&&e instanceof WebGLSampler}const dl=35044,_e=34962,sx=34963,ox=34660,ax=5120,ux=5121,cx=5122,fx=5123,lx=5124,hx=5125,dx=5126,pl={attribPrefix:""};function gl(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||dl)}function ml(t,e,n,r){if(rx(t,e))return e;n=n||_e;const i=t.createBuffer();return gl(t,n,i,e,r),i}function Al(t){return t==="indices"}function px(t){return t instanceof Int8Array||t instanceof Uint8Array}function gx(t){return t===Int8Array||t===Uint8Array}function mx(t){return t.length?t:t.data}const Ax=/coord|texture/i,xx=/color|colour/i;function xl(t,e){let n;if(Ax.test(t)?n=2:xx.test(t)?n=4:n=3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function yx(t,e){return t.numComponents||t.size||xl(e,mx(t).length)}function fa(t,e){if(Ri(t))return t;if(Ri(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type;return n||(Al(e)?n=Uint16Array:n=Float32Array),new n(t.data)}function bx(t,e){const n={};return Object.keys(e).forEach(function(r){if(!Al(r)){const i=e[r],s=i.attrib||i.name||i.attribName||pl.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!Ri(i.value))throw new Error("array.value is not array or typedarray");n[s]={value:i.value}}else{let o,a,u,c;if(i.buffer&&i.buffer instanceof WebGLBuffer)o=i.buffer,c=i.numComponents||i.size,a=i.type,u=i.normalize;else if(typeof i=="number"||typeof i.data=="number"){const l=i.data||i,f=i.type||Float32Array,h=l*f.BYTES_PER_ELEMENT;a=ex(f),u=i.normalize!==void 0?i.normalize:gx(f),c=i.numComponents||i.size||xl(r,l),o=t.createBuffer(),t.bindBuffer(_e,o),t.bufferData(_e,h,i.drawType||dl)}else{const l=fa(i,r);o=ml(t,l,void 0,i.drawType),a=ca(l),u=i.normalize!==void 0?i.normalize:px(l),c=yx(i,r)}n[s]={buffer:o,numComponents:c,type:a,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:i.divisor===void 0?void 0:i.divisor,drawType:i.drawType}}}}),t.bindBuffer(_e,null),n}function wx(t,e,n,r){n=fa(n),r!==void 0?(t.bindBuffer(_e,e.buffer),t.bufferSubData(_e,r,n)):gl(t,_e,e.buffer,n,e.drawType)}function vx(t,e){return e===ax||e===ux?1:e===cx||e===fx?2:e===lx||e===hx||e===dx?4:0}const la=["position","positions","a_position"];function Ex(t,e){let n,r;for(r=0;r<la.length&&(n=la[r],!(n in e||(n=pl.attribPrefix+n,n in e)));++r);r===la.length&&(n=Object.keys(e)[0]);const i=e[n];t.bindBuffer(_e,i.buffer);const s=t.getBufferParameter(_e,ox);t.bindBuffer(_e,null);const o=vx(t,i.type),a=s/o,u=i.numComponents||i.size,c=a/u;if(c%1!==0)throw new Error(`numComponents ${u} not correct for length ${length}`);return c}function Cx(t,e,n){const r=bx(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const s=e.indices;if(s){const o=fa(s,"indices");i.indices=ml(t,o,sx),i.numElements=o.length,i.elementType=ca(o)}else i.numElements||(i.numElements=Ex(t,i.attribs));return i}function gn(t){return!!t.texStorage2D}const ha=function(){const t={},e={};function n(r){const i=r.constructor.name;if(!t[i]){for(const s in r)if(typeof r[s]=="number"){const o=e[r[s]];e[r[s]]=o?`${o} | ${s}`:s}t[i]=!0}}return function(i,s){return n(i),e[s]||(typeof s=="number"?`0x${s.toString(16)}`:s)}}(),Ct={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},mn=Ri,yl=function(){let t;return function(){return t=t||(typeof document!="undefined"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),bl=6406,$e=6407,Q=6408,wl=6409,vl=6410,vr=6402,El=34041,ki=33071,Dx=9728,Sx=9729,ct=3553,ft=34067,Dt=32879,St=35866,Oi=34069,Mx=34070,Bx=34071,Fx=34072,Ix=34073,Tx=34074,da=10241,pa=10240,zi=10242,Ui=10243,Cl=32882,Px=33082,Lx=33083,Rx=33084,Nx=33085,ga=3317,Dl=3314,Sl=32878,Ml=3316,Bl=3315,Fl=32877,kx=37443,Ox=37441,zx=37440,Ux=33321,Gx=36756,Hx=33325,Vx=33326,Qx=33330,jx=33329,Yx=33338,Wx=33337,Xx=33340,Zx=33339,Kx=33323,qx=36757,Jx=33327,_x=33328,$x=33336,ey=33335,ty=33332,ny=33331,ry=33334,iy=33333,sy=32849,oy=35905,ay=36194,uy=36758,cy=35898,fy=35901,ly=34843,hy=34837,dy=36221,py=36239,gy=36215,my=36233,Ay=36209,xy=36227,yy=32856,by=35907,wy=36759,vy=32855,Ey=32854,Cy=32857,Dy=34842,Sy=34836,My=36220,By=36238,Fy=36975,Iy=36214,Ty=36232,Py=36226,Ly=36208,Ry=33189,Ny=33190,ky=36012,Oy=36013,zy=35056,Mt=5120,j=5121,Gi=5122,An=5123,Hi=5124,Xt=5125,ce=5126,Il=32819,Tl=32820,Pl=33635,ze=5131,Er=36193,ma=33640,Uy=35899,Gy=35902,Hy=36269,Vy=34042,Vi=33319,xn=33320,Qi=6403,yn=36244,bn=36248,Zt=36249;let Aa;function ji(t){if(!Aa){const e={};e[bl]={textureFormat:bl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[j,ze,Er,ce]},e[wl]={textureFormat:wl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[j,ze,Er,ce]},e[vl]={textureFormat:vl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[j,ze,Er,ce]},e[$e]={textureFormat:$e,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[j,ze,Er,ce,Pl]},e[Q]={textureFormat:Q,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[j,ze,Er,ce,Il,Tl]},e[vr]={textureFormat:vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Xt,An]},e[Ux]={textureFormat:Qi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[j]},e[Gx]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[Mt]},e[Hx]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[ce,ze]},e[Vx]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[ce]},e[Qx]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[j]},e[jx]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[Mt]},e[ty]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[An]},e[ny]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Gi]},e[ry]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Xt]},e[iy]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Hi]},e[Kx]={textureFormat:Vi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[j]},e[qx]={textureFormat:Vi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[Mt]},e[Jx]={textureFormat:Vi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[ce,ze]},e[_x]={textureFormat:Vi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[ce]},e[$x]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[j]},e[ey]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Mt]},e[Yx]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[An]},e[Wx]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Gi]},e[Xx]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Xt]},e[Zx]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Hi]},e[sy]={textureFormat:$e,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[j]},e[oy]={textureFormat:$e,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[j]},e[ay]={textureFormat:$e,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[j,Pl]},e[uy]={textureFormat:$e,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[Mt]},e[cy]={textureFormat:$e,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[ce,ze,Uy]},e[fy]={textureFormat:$e,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[ce,ze,Gy]},e[ly]={textureFormat:$e,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[ce,ze]},e[hy]={textureFormat:$e,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[ce]},e[dy]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[j]},e[py]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[Mt]},e[gy]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[An]},e[my]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Gi]},e[Ay]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Xt]},e[xy]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Hi]},e[yy]={textureFormat:Q,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[j]},e[by]={textureFormat:Q,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[j]},e[wy]={textureFormat:Q,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[Mt]},e[vy]={textureFormat:Q,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[j,Tl,ma]},e[Ey]={textureFormat:Q,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[j,Il]},e[Cy]={textureFormat:Q,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[ma]},e[Dy]={textureFormat:Q,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[ce,ze]},e[Sy]={textureFormat:Q,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[ce]},e[My]={textureFormat:Zt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[j]},e[By]={textureFormat:Zt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Mt]},e[Fy]={textureFormat:Zt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ma]},e[Iy]={textureFormat:Zt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[An]},e[Ty]={textureFormat:Zt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Gi]},e[Py]={textureFormat:Zt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Hi]},e[Ly]={textureFormat:Zt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Xt]},e[Ry]={textureFormat:vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[An,Xt]},e[Ny]={textureFormat:vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Xt]},e[ky]={textureFormat:vr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ce]},e[zy]={textureFormat:El,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Vy]},e[Oy]={textureFormat:El,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Hy]},Object.keys(e).forEach(function(n){const r=e[n];r.bytesPerElementMap={},r.bytesPerElement.forEach(function(i,s){const o=r.type[s];r.bytesPerElementMap[o]=i})}),Aa=e}return Aa[t]}function Qy(t,e){const n=ji(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(r===void 0)throw"unknown internal format";return r}function wn(t){const e=ji(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function Ll(t){return(t&t-1)===0}function jy(t,e,n,r){if(!gn(t))return Ll(e)&&Ll(n);const i=ji(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function Yy(t){const e=ji(t);if(!e)throw"unknown internal format";return e.textureFilterable}function Rl(t,e,n){return mn(e)?ca(e):n||j}function Yi(t,e,n,r,i){if(i%1!==0)throw"can't guess dimensions";if(!n&&!r){const s=Math.sqrt(i/(e===ft?6:1));s%1===0?(n=s,r=s):(n=i,r=1)}else if(r){if(!n&&(n=i/r,n%1))throw"can't guess dimensions"}else if(r=i/n,r%1)throw"can't guess dimensions";return{width:n,height:r}}function vn(t,e){e.colorspaceConversion!==void 0&&t.pixelStorei(kx,e.colorspaceConversion),e.premultiplyAlpha!==void 0&&t.pixelStorei(Ox,e.premultiplyAlpha),e.flipY!==void 0&&t.pixelStorei(zx,e.flipY)}function Nl(t){t.pixelStorei(ga,4),gn(t)&&(t.pixelStorei(Dl,0),t.pixelStorei(Sl,0),t.pixelStorei(Ml,0),t.pixelStorei(Bl,0),t.pixelStorei(Fl,0))}function Wy(t,e,n,r){r.minMag&&(n.call(t,e,da,r.minMag),n.call(t,e,pa,r.minMag)),r.min&&n.call(t,e,da,r.min),r.mag&&n.call(t,e,pa,r.mag),r.wrap&&(n.call(t,e,zi,r.wrap),n.call(t,e,Ui,r.wrap),(e===Dt||ix(t,e))&&n.call(t,e,Cl,r.wrap)),r.wrapR&&n.call(t,e,Cl,r.wrapR),r.wrapS&&n.call(t,e,zi,r.wrapS),r.wrapT&&n.call(t,e,Ui,r.wrapT),r.minLod&&n.call(t,e,Px,r.minLod),r.maxLod&&n.call(t,e,Lx,r.maxLod),r.baseLevel&&n.call(t,e,Rx,r.baseLevel),r.maxLevel&&n.call(t,e,Nx,r.maxLevel)}function kl(t,e,n){const r=n.target||ct;t.bindTexture(r,e),Wy(t,r,t.texParameteri,n)}function Xy(t){return t=t||Ct.textureColor,mn(t)?t:new Uint8Array([t[0]*255,t[1]*255,t[2]*255,t[3]*255])}function xa(t,e,n,r,i,s){n=n||Ct.textureOptions,s=s||Q;const o=n.target||ct;if(r=r||n.width,i=i||n.height,t.bindTexture(o,e),jy(t,r,i,s))t.generateMipmap(o);else{const a=Yy(s)?Sx:Dx;t.texParameteri(o,da,a),t.texParameteri(o,pa,a),t.texParameteri(o,zi,ki),t.texParameteri(o,Ui,ki)}}function Cr(t){return t.auto===!0||t.auto===void 0&&t.level===void 0}function ya(t,e){return e=e||{},e.cubeFaceOrder||[Oi,Mx,Bx,Fx,Ix,Tx]}function ba(t,e){const r=ya(t,e).map(function(i,s){return{face:i,ndx:s}});return r.sort(function(i,s){return i.face-s.face}),r}function Ol(t,e,n,r){r=r||Ct.textureOptions;const i=r.target||ct,s=r.level||0;let o=n.width,a=n.height;const u=r.internalFormat||r.format||Q,c=wn(u),l=r.format||c.format,f=r.type||c.type;if(vn(t,r),t.bindTexture(i,e),i===ft){const h=n.width,p=n.height;let d,g;if(h/6===p)d=p,g=[0,0,1,0,2,0,3,0,4,0,5,0];else if(p/6===h)d=h,g=[0,0,0,1,0,2,0,3,0,4,0,5];else if(h/3===p/2)d=h/3,g=[0,0,1,0,2,0,0,1,1,1,2,1];else if(h/2===p/3)d=h/2,g=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);const m=yl();m?(m.canvas.width=d,m.canvas.height=d,o=d,a=d,ba(t,r).forEach(function(A){const b=g[A.ndx*2+0]*d,y=g[A.ndx*2+1]*d;m.drawImage(n,b,y,d,d,0,0,d,d),t.texImage2D(A.face,s,u,l,f,m.canvas)}),m.canvas.width=1,m.canvas.height=1):typeof createImageBitmap!="undefined"&&(o=d,a=d,ba(t,r).forEach(function(A){const b=g[A.ndx*2+0]*d,y=g[A.ndx*2+1]*d;t.texImage2D(A.face,s,u,d,d,0,l,f,null),createImageBitmap(n,b,y,d,d,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(v){vn(t,r),t.bindTexture(i,e),t.texImage2D(A.face,s,u,l,f,v),Cr(r)&&xa(t,e,r,o,a,u)})}))}else if(i===Dt||i===St){const h=Math.min(n.width,n.height),p=Math.max(n.width,n.height),d=p/h;if(d%1!==0)throw"can not compute 3D dimensions of element";const g=n.width===p?1:0,m=n.height===p?1:0;t.pixelStorei(ga,1),t.pixelStorei(Dl,n.width),t.pixelStorei(Sl,0),t.pixelStorei(Fl,0),t.texImage3D(i,s,u,h,h,h,0,l,f,null);for(let A=0;A<d;++A){const b=A*h*g,y=A*h*m;t.pixelStorei(Ml,b),t.pixelStorei(Bl,y),t.texSubImage3D(i,s,0,0,A,h,h,1,l,f,n)}Nl(t)}else t.texImage2D(i,s,u,l,f,n);Cr(r)&&xa(t,e,r,o,a,u),kl(t,e,r)}function Dr(){}function Zy(t){if(typeof document!="undefined"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}else{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function Ky(t,e){return e===void 0&&!Zy(t)?"anonymous":e}function qy(t,e,n){n=n||Dr;let r;if(e=e!==void 0?e:Ct.crossOrigin,e=Ky(t,e),typeof Image!="undefined"){r=new Image,e!==void 0&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",s),r.removeEventListener("load",o),r=null},s=function(){const u="couldn't load image: "+t;nx(u),n(u,r),i()},o=function(){n(null,r),i()};return r.addEventListener("error",s),r.addEventListener("load",o),r.src=t,r}else if(typeof ImageBitmap!="undefined"){let i,s;const o=function(){n(i,s)},a={};e&&(a.mode="cors"),fetch(t,a).then(function(u){if(!u.ok)throw u;return u.blob()}).then(function(u){return createImageBitmap(u,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(u){s=u,setTimeout(o)}).catch(function(u){i=u,setTimeout(o)}),r=null}return r}function zl(t){return typeof ImageBitmap!="undefined"&&t instanceof ImageBitmap||typeof ImageData!="undefined"&&t instanceof ImageData||typeof HTMLElement!="undefined"&&t instanceof HTMLElement}function wa(t,e,n){return zl(t)?(setTimeout(function(){n(null,t)}),t):qy(t,e,n)}function va(t,e,n){n=n||Ct.textureOptions;const r=n.target||ct;if(t.bindTexture(r,e),n.color===!1)return;const i=Xy(n.color);if(r===ft)for(let s=0;s<6;++s)t.texImage2D(Oi+s,0,Q,1,1,0,Q,j,i);else r===Dt||r===St?t.texImage3D(r,0,Q,1,1,1,0,Q,j,i):t.texImage2D(r,0,Q,1,1,0,Q,j,i)}function Jy(t,e,n,r){return r=r||Dr,n=n||Ct.textureOptions,va(t,e,n),n=Object.assign({},n),wa(n.src,n.crossOrigin,function(s,o){s?r(s,e,o):(Ol(t,e,o,n),r(null,e,o))})}function _y(t,e,n,r){r=r||Dr;const i=n.src;if(i.length!==6)throw"there must be 6 urls for a cubemap";const s=n.level||0,o=n.internalFormat||n.format||Q,a=wn(o),u=n.format||a.format,c=n.type||j,l=n.target||ct;if(l!==ft)throw"target must be TEXTURE_CUBE_MAP";va(t,e,n),n=Object.assign({},n);let f=6;const h=[],p=ya(t,n);let d;function g(m){return function(A,b){--f,A?h.push(A):b.width!==b.height?h.push("cubemap face img is not a square: "+b.src):(vn(t,n),t.bindTexture(l,e),f===5?ya().forEach(function(y){t.texImage2D(y,s,o,u,c,b)}):t.texImage2D(m,s,o,u,c,b),Cr(n)&&t.generateMipmap(l)),f===0&&r(h.length?h:void 0,e,d)}}d=i.map(function(m,A){return wa(m,n.crossOrigin,g(p[A]))})}function $y(t,e,n,r){r=r||Dr;const i=n.src,s=n.internalFormat||n.format||Q,o=wn(s),a=n.format||o.format,u=n.type||j,c=n.target||St;if(c!==Dt&&c!==St)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";va(t,e,n),n=Object.assign({},n);let l=i.length;const f=[];let h;const p=n.level||0;let d=n.width,g=n.height;const m=i.length;let A=!0;function b(y){return function(v,D){if(--l,v)f.push(v);else{if(vn(t,n),t.bindTexture(c,e),A){A=!1,d=n.width||D.width,g=n.height||D.height,t.texImage3D(c,p,s,d,g,m,0,a,u,null);for(let C=0;C<m;++C)t.texSubImage3D(c,p,0,0,C,d,g,1,a,u,D)}else{let C=D,F;(D.width!==d||D.height!==g)&&(F=yl(),C=F.canvas,F.canvas.width=d,F.canvas.height=g,F.drawImage(D,0,0,d,g)),t.texSubImage3D(c,p,0,0,y,d,g,1,a,u,C),F&&C===F.canvas&&(F.canvas.width=0,F.canvas.height=0)}Cr(n)&&t.generateMipmap(c)}l===0&&r(f.length?f:void 0,e,h)}}h=i.map(function(y,v){return wa(y,n.crossOrigin,b(v))})}function Ul(t,e,n,r){r=r||Ct.textureOptions;const i=r.target||ct;t.bindTexture(i,e);let s=r.width,o=r.height,a=r.depth;const u=r.level||0,c=r.internalFormat||r.format||Q,l=wn(c),f=r.format||l.format,h=r.type||Rl(t,n,l.type);if(mn(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const m=tx(h);n=new m(n)}const p=Qy(c,h),d=n.byteLength/p;if(d%1)throw"length wrong size for format: "+ha(t,f);let g;if(i===Dt||i===St)if(!s&&!o&&!a){const m=Math.cbrt(d);if(m%1!==0)throw"can't guess cube size of array of numElements: "+d;s=m,o=m,a=m}else s&&(!o||!a)?(g=Yi(t,i,o,a,d/s),o=g.width,a=g.height):o&&(!s||!a)?(g=Yi(t,i,s,a,d/o),s=g.width,a=g.height):(g=Yi(t,i,s,o,d/a),s=g.width,o=g.height);else g=Yi(t,i,s,o,d),s=g.width,o=g.height;if(Nl(t),t.pixelStorei(ga,r.unpackAlignment||1),vn(t,r),i===ft){const m=p/n.BYTES_PER_ELEMENT,A=d/6*m;ba(t,r).forEach(b=>{const y=A*b.ndx,v=n.subarray(y,y+A);t.texImage2D(b.face,u,c,s,o,0,f,h,v)})}else i===Dt||i===St?t.texImage3D(i,u,c,s,o,a,0,f,h,n):t.texImage2D(i,u,c,s,o,0,f,h,n);return{width:s,height:o,depth:a,type:h}}function eb(t,e,n){const r=n.target||ct;t.bindTexture(r,e);const i=n.level||0,s=n.internalFormat||n.format||Q,o=wn(s),a=n.format||o.format,u=n.type||o.type;if(vn(t,n),r===ft)for(let c=0;c<6;++c)t.texImage2D(Oi+c,i,s,n.width,n.height,0,a,u,null);else r===Dt||r===St?t.texImage3D(r,i,s,n.width,n.height,n.depth,0,a,u,null):t.texImage2D(r,i,s,n.width,n.height,0,a,u,null)}function Sr(t,e,n){n=n||Dr,e=e||Ct.textureOptions;const r=t.createTexture(),i=e.target||ct;let s=e.width||1,o=e.height||1;const a=e.internalFormat||Q;t.bindTexture(i,r),i===ft&&(t.texParameteri(i,zi,ki),t.texParameteri(i,Ui,ki));let u=e.src;if(u)if(typeof u=="function"&&(u=u(t,e)),typeof u=="string")Jy(t,r,e,n);else if(mn(u)||Array.isArray(u)&&(typeof u[0]=="number"||Array.isArray(u[0])||mn(u[0]))){const c=Ul(t,r,u,e);s=c.width,o=c.height}else Array.isArray(u)&&(typeof u[0]=="string"||zl(u[0]))?i===ft?_y(t,r,e,n):$y(t,r,e,n):(Ol(t,r,u,e),s=u.width,o=u.height);else eb(t,r,e);return Cr(e)&&xa(t,r,e,s,o,a),kl(t,r,e),r}function tb(t,e,n,r,i,s){r=r||n.width,i=i||n.height,s=s||n.depth;const o=n.target||ct;t.bindTexture(o,e);const a=n.level||0,u=n.internalFormat||n.format||Q,c=wn(u),l=n.format||c.format;let f;const h=n.src;if(h&&(mn(h)||Array.isArray(h)&&typeof h[0]=="number")?f=n.type||Rl(t,h,c.type):f=n.type||c.type,o===ft)for(let p=0;p<6;++p)t.texImage2D(Oi+p,a,u,r,i,0,l,f,null);else o===Dt||o===St?t.texImage3D(o,a,u,r,i,s,0,l,f,null):t.texImage2D(o,a,u,r,i,0,l,f,null)}const nb=ll,Wi=33984,rb=35048,Xi=34962,ib=34963,Ea=35345,Gl=35718,sb=35721,ob=35971,ab=35382,ub=35396,cb=35398,fb=35392,lb=35395,Zi=5126,Hl=35664,Vl=35665,Ql=35666,Ca=5124,jl=35667,Yl=35668,Wl=35669,Xl=35670,Zl=35671,Kl=35672,ql=35673,Jl=35674,_l=35675,$l=35676,hb=35678,db=35680,pb=35679,gb=35682,mb=35685,Ab=35686,xb=35687,yb=35688,bb=35689,wb=35690,vb=36289,Eb=36292,Cb=36293,Da=5125,e0=36294,t0=36295,n0=36296,Db=36298,Sb=36299,Mb=36300,Bb=36303,Fb=36306,Ib=36307,Tb=36308,Pb=36311,Ki=3553,qi=34067,Sa=32879,Ji=35866,I={};function r0(t,e){return I[e].bindPoint}function Lb(t,e){return function(n){t.uniform1f(e,n)}}function Rb(t,e){return function(n){t.uniform1fv(e,n)}}function Nb(t,e){return function(n){t.uniform2fv(e,n)}}function kb(t,e){return function(n){t.uniform3fv(e,n)}}function Ob(t,e){return function(n){t.uniform4fv(e,n)}}function i0(t,e){return function(n){t.uniform1i(e,n)}}function s0(t,e){return function(n){t.uniform1iv(e,n)}}function o0(t,e){return function(n){t.uniform2iv(e,n)}}function a0(t,e){return function(n){t.uniform3iv(e,n)}}function u0(t,e){return function(n){t.uniform4iv(e,n)}}function zb(t,e){return function(n){t.uniform1ui(e,n)}}function Ub(t,e){return function(n){t.uniform1uiv(e,n)}}function Gb(t,e){return function(n){t.uniform2uiv(e,n)}}function Hb(t,e){return function(n){t.uniform3uiv(e,n)}}function Vb(t,e){return function(n){t.uniform4uiv(e,n)}}function Qb(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function jb(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function Yb(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function Wb(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function Xb(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function Zb(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function Kb(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function qb(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function Jb(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function he(t,e,n,r){const i=r0(t,e);return gn(t)?function(s){let o,a;Ni(t,s)?(o=s,a=null):(o=s.texture,a=s.sampler),t.uniform1i(r,n),t.activeTexture(Wi+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(s){t.uniform1i(r,n),t.activeTexture(Wi+n),t.bindTexture(i,s)}}function de(t,e,n,r,i){const s=r0(t,e),o=new Int32Array(i);for(let a=0;a<i;++a)o[a]=n+a;return gn(t)?function(a){t.uniform1iv(r,o),a.forEach(function(u,c){t.activeTexture(Wi+o[c]);let l,f;Ni(t,u)?(l=u,f=null):(l=u.texture,f=u.sampler),t.bindSampler(n,f),t.bindTexture(s,l)})}:function(a){t.uniform1iv(r,o),a.forEach(function(u,c){t.activeTexture(Wi+o[c]),t.bindTexture(s,u)})}}I[Zi]={Type:Float32Array,size:4,setter:Lb,arraySetter:Rb},I[Hl]={Type:Float32Array,size:8,setter:Nb,cols:2},I[Vl]={Type:Float32Array,size:12,setter:kb,cols:3},I[Ql]={Type:Float32Array,size:16,setter:Ob,cols:4},I[Ca]={Type:Int32Array,size:4,setter:i0,arraySetter:s0},I[jl]={Type:Int32Array,size:8,setter:o0,cols:2},I[Yl]={Type:Int32Array,size:12,setter:a0,cols:3},I[Wl]={Type:Int32Array,size:16,setter:u0,cols:4},I[Da]={Type:Uint32Array,size:4,setter:zb,arraySetter:Ub},I[e0]={Type:Uint32Array,size:8,setter:Gb,cols:2},I[t0]={Type:Uint32Array,size:12,setter:Hb,cols:3},I[n0]={Type:Uint32Array,size:16,setter:Vb,cols:4},I[Xl]={Type:Uint32Array,size:4,setter:i0,arraySetter:s0},I[Zl]={Type:Uint32Array,size:8,setter:o0,cols:2},I[Kl]={Type:Uint32Array,size:12,setter:a0,cols:3},I[ql]={Type:Uint32Array,size:16,setter:u0,cols:4},I[Jl]={Type:Float32Array,size:32,setter:Qb,rows:2,cols:2},I[_l]={Type:Float32Array,size:48,setter:jb,rows:3,cols:3},I[$l]={Type:Float32Array,size:64,setter:Yb,rows:4,cols:4},I[mb]={Type:Float32Array,size:32,setter:Wb,rows:2,cols:3},I[Ab]={Type:Float32Array,size:32,setter:Zb,rows:2,cols:4},I[xb]={Type:Float32Array,size:48,setter:Xb,rows:3,cols:2},I[yb]={Type:Float32Array,size:48,setter:qb,rows:3,cols:4},I[bb]={Type:Float32Array,size:64,setter:Kb,rows:4,cols:2},I[wb]={Type:Float32Array,size:64,setter:Jb,rows:4,cols:3},I[hb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Ki},I[db]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:qi},I[pb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Sa},I[gb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Ki},I[vb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Ji},I[Eb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Ji},I[Cb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:qi},I[Db]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Ki},I[Sb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Sa},I[Mb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:qi},I[Bb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Ji},I[Fb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Ki},I[Ib]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Sa},I[Tb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:qi},I[Pb]={Type:null,size:0,setter:he,arraySetter:de,bindPoint:Ji};function _i(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(Xi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||Zi,n.normalize||!1,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function Bt(t,e){return function(n){if(n.value)if(t.disableVertexAttribArray(e),n.value.length===4)t.vertexAttrib4iv(e,n.value);else throw new Error("The length of an integer constant value must be 4!");else t.bindBuffer(Xi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Ca,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function $i(t,e){return function(n){if(n.value)if(t.disableVertexAttribArray(e),n.value.length===4)t.vertexAttrib4uiv(e,n.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else t.bindBuffer(Xi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Da,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function Ma(t,e,n){const r=n.size,i=n.count;return function(s){t.bindBuffer(Xi,s.buffer);const o=s.size||s.numComponents||r,a=o/i,u=s.type||Zi,l=I[u].size*o,f=s.normalize||!1,h=s.offset||0,p=l/i;for(let d=0;d<i;++d)t.enableVertexAttribArray(e+d),t.vertexAttribPointer(e+d,a,u,f,l,h+p*d),s.divisor!==void 0&&t.vertexAttribDivisor(e+d,s.divisor)}}const K={};K[Zi]={size:4,setter:_i},K[Hl]={size:8,setter:_i},K[Vl]={size:12,setter:_i},K[Ql]={size:16,setter:_i},K[Ca]={size:4,setter:Bt},K[jl]={size:8,setter:Bt},K[Yl]={size:12,setter:Bt},K[Wl]={size:16,setter:Bt},K[Da]={size:4,setter:$i},K[e0]={size:8,setter:$i},K[t0]={size:12,setter:$i},K[n0]={size:16,setter:$i},K[Xl]={size:4,setter:Bt},K[Zl]={size:8,setter:Bt},K[Kl]={size:12,setter:Bt},K[ql]={size:16,setter:Bt},K[Jl]={size:4,setter:Ma,count:2},K[_l]={size:9,setter:Ma,count:3},K[$l]={size:16,setter:Ma,count:4};function c0(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const _b=/(\.|\[|]|\w+)/g,$b=t=>t>="0"&&t<="9";function f0(t,e,n,r){const i=t.split(_b).filter(a=>a!=="");let s=0,o="";for(;;){const a=i[s++];o+=a;const u=$b(a[0]),c=u?parseInt(a):a;if(u&&(o+=i[s++]),s===i.length){n[c]=e;break}else{const f=i[s++],h=f==="[",p=n[c]||(h?[]:{});n[c]=p,n=p,r[o]=r[o]||function(d){return function(g){h0(d,g)}}(p),o+=f}}}function e2(t,e){let n=0;function r(a,u,c){const l=u.name.endsWith("[0]"),f=u.type,h=I[f];if(!h)throw new Error(`unknown type: 0x${f.toString(16)}`);let p;if(h.bindPoint){const d=n;n+=u.size,l?p=h.arraySetter(t,f,d,c,u.size):p=h.setter(t,f,d,c,u.size)}else h.arraySetter&&l?p=h.arraySetter(t,c):p=h.setter(t,c);return p.location=c,p}const i={},s={},o=t.getProgramParameter(e,Gl);for(let a=0;a<o;++a){const u=t.getActiveUniform(e,a);if(c0(u))continue;let c=u.name;c.endsWith("[0]")&&(c=c.substr(0,c.length-3));const l=t.getUniformLocation(e,u.name);if(l){const f=r(e,u,l);i[c]=f,f0(c,f,s,i)}}return i}function t2(t,e){const n={},r=t.getProgramParameter(e,ob);for(let i=0;i<r;++i){const s=t.getTransformFeedbackVarying(e,i);n[s.name]={index:i,type:s.type,size:s.size}}return n}function n2(t,e){const n=t.getProgramParameter(e,Gl),r=[],i=[];for(let a=0;a<n;++a){i.push(a),r.push({});const u=t.getActiveUniform(e,a);r[a].name=u.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(a){const u=a[0],c=a[1];t.getActiveUniforms(e,i,t[u]).forEach(function(l,f){r[f][c]=l})});const s={},o=t.getProgramParameter(e,ab);for(let a=0;a<o;++a){const u=t.getActiveUniformBlockName(e,a),c={index:t.getUniformBlockIndex(e,u),usedByVertexShader:t.getActiveUniformBlockParameter(e,a,ub),usedByFragmentShader:t.getActiveUniformBlockParameter(e,a,cb),size:t.getActiveUniformBlockParameter(e,a,fb),uniformIndices:t.getActiveUniformBlockParameter(e,a,lb)};c.used=c.usedByVertexShader||c.usedByFragmentShader,s[u]=c}return{blockSpecs:s,uniformData:r}}const l0=/\[\d+\]\.$/,r2=(t,e)=>((t+(e-1))/e|0)*e;function i2(t,e,n,r){if(e||n){r=r||1;const s=t.length/4;return function(o){let a=0,u=0;for(let c=0;c<s;++c){for(let l=0;l<r;++l)t[a++]=o[u++];a+=4-r}}}else return function(i){i.length?t.set(i):t[0]=i}}function s2(t,e,n,r){const i=n.blockSpecs,s=n.uniformData,o=i[r];if(!o)return nb("no uniform block object named:",r),{name:r,uniforms:{}};const a=new ArrayBuffer(o.size),u=t.createBuffer(),c=o.index;t.bindBuffer(Ea,u),t.uniformBlockBinding(e,o.index,c);let l=r+".";l0.test(l)&&(l=l.replace(l0,"."));const f={},h={},p={};return o.uniformIndices.forEach(function(d){const g=s[d];let m=g.name;m.startsWith(l)&&(m=m.substr(l.length));const A=m.endsWith("[0]");A&&(m=m.substr(0,m.length-3));const b=I[g.type],y=b.Type,v=A?r2(b.size,16)*g.size:b.size*g.size,D=new y(a,g.offset,v/y.BYTES_PER_ELEMENT);f[m]=D;const C=i2(D,A,b.rows,b.cols);h[m]=C,f0(m,C,p,h)}),{name:r,array:a,asFloat:new Float32Array(a),buffer:u,uniforms:f,setters:h}}function o2(t,e,n){return s2(t,e.program,e.uniformBlockSpec,n)}function a2(t,e,n){const i=(e.uniformBlockSpec||e).blockSpecs[n.name];if(i){const s=i.index;return t.bindBufferRange(Ea,s,n.buffer,n.offset||0,n.array.byteLength),!0}return!1}function u2(t,e,n){a2(t,e,n)&&t.bufferData(Ea,n.array,rb)}function h0(t,e){for(const n in e){const r=t[n];typeof r=="function"?r(e[n]):h0(t[n],e[n])}}function fe(t,...e){const n=t.uniformSetters||t,r=e.length;for(let i=0;i<r;++i){const s=e[i];if(Array.isArray(s)){const o=s.length;for(let a=0;a<o;++a)fe(n,s[a])}else for(const o in s){const a=n[o];a&&a(s[o])}}}function c2(t,e){const n={},r=t.getProgramParameter(e,sb);for(let i=0;i<r;++i){const s=t.getActiveAttrib(e,i);if(c0(s))continue;const o=t.getAttribLocation(e,s.name),a=K[s.type],u=a.setter(t,o,a);u.location=o,n[s.name]=u}return n}function f2(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function En(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(f2(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(ib,n.indices))}function l2(t,e){const n=e2(t,e),r=c2(t,e),i={program:e,uniformSetters:n,attribSetters:r};return gn(t)&&(i.uniformBlockSpec=n2(t,e),i.transformFeedbackInfo=t2(t,e)),i}const h2=4,d0=5123;function Mr(t,e,n,r,i,s){n=n===void 0?h2:n;const o=e.indices,a=e.elementType,u=r===void 0?e.numElements:r;i=i===void 0?0:i,a||o?s!==void 0?t.drawElementsInstanced(n,u,a===void 0?d0:e.elementType,i,s):t.drawElements(n,u,a===void 0?d0:e.elementType,i):s!==void 0?t.drawArraysInstanced(n,i,u,s):t.drawArrays(n,i,u)}const d2=36160,Br=36161,p2=3553,g2=5121,m2=6402,A2=6408,x2=33190,y2=36012,b2=35056,w2=36013,v2=32854,E2=32855,C2=36194,p0=33189,g0=6401,m0=36168,Ba=34041,D2=36064,es=36096,A0=36128,Fa=33306,Ia=33071,Ta=9729,x0=[{format:A2,type:g2,min:Ta,wrap:Ia},{format:Ba}],Ue={};Ue[Ba]=Fa,Ue[g0]=A0,Ue[m0]=A0,Ue[m2]=es,Ue[p0]=es,Ue[x2]=es,Ue[y2]=es,Ue[b2]=Fa,Ue[w2]=Fa;function S2(t,e){return Ue[t]||Ue[e]}const Ft={};Ft[v2]=!0,Ft[E2]=!0,Ft[C2]=!0,Ft[Ba]=!0,Ft[p0]=!0,Ft[g0]=!0,Ft[m0]=!0;function M2(t){return Ft[t]}function B2(t,e,n,r){const i=d2,s=t.createFramebuffer();t.bindFramebuffer(i,s),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight,e=e||x0;let o=0;const a={framebuffer:s,attachments:[],width:n,height:r};return e.forEach(function(u){let c=u.attachment;const l=u.format;let f=u.attachmentPoint||S2(l,u.internalFormat);if(f||(f=D2+o++),!c)if(M2(l))c=t.createRenderbuffer(),t.bindRenderbuffer(Br,c),t.renderbufferStorage(Br,l,n,r);else{const h=Object.assign({},u);h.width=n,h.height=r,h.auto===void 0&&(h.auto=!1,h.min=h.min||h.minMag||Ta,h.mag=h.mag||h.minMag||Ta,h.wrapS=h.wrapS||h.wrap||Ia,h.wrapT=h.wrapT||h.wrap||Ia),c=Sr(t,h)}if(hl(t,c))t.framebufferRenderbuffer(i,f,Br,c);else if(Ni(t,c))u.layer!==void 0?t.framebufferTextureLayer(i,f,c,u.level||0,u.layer):t.framebufferTexture2D(i,f,u.target||p2,c,u.level||0);else throw new Error("unknown attachment type");a.attachments.push(c)}),a}function F2(t,e,n,r,i){r=r||t.drawingBufferWidth,i=i||t.drawingBufferHeight,e.width=r,e.height=i,n=n||x0,n.forEach(function(s,o){const a=e.attachments[o],u=s.format;if(hl(t,a))t.bindRenderbuffer(Br,a),t.renderbufferStorage(Br,u,r,i);else if(Ni(t,a))tb(t,a,s,r,i);else throw new Error("unknown attachment type")})}function I2(t,e,n){const r=t.createVertexArray();return t.bindVertexArray(r),e.length||(e=[e]),e.forEach(function(i){En(t,i,n)}),t.bindVertexArray(null),{numElements:n.numElements,elementType:n.elementType,vertexArrayObject:r}}const T2=/^(.*?)_/;function P2(t,e){ha(t,0);const n=t.getExtension(e);if(n){const r={},i=T2.exec(e)[1],s="_"+i;for(const o in n){const a=n[o],u=typeof a=="function",c=u?i:s;let l=o;o.endsWith(c)&&(l=o.substring(0,o.length-c.length)),t[l]!==void 0?!u&&t[l]!==a&&ll(l,t[l],a,o):u?t[l]=function(f){return function(){return f.apply(n,arguments)}}(a):(t[l]=a,r[l]=a)}r.constructor={name:n.constructor.name},ha(r,0)}return n}const y0=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_color_buffer_float","EXT_color_buffer_half_float","EXT_disjoint_timer_query","EXT_disjoint_timer_query_webgl2","EXT_frag_depth","EXT_sRGB","EXT_shader_texture_lod","EXT_texture_filter_anisotropic","OES_element_index_uint","OES_standard_derivatives","OES_texture_float","OES_texture_float_linear","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_compressed_texture_atc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_pvrtc","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_depth_texture","WEBGL_draw_buffers"];function b0(t){for(let e=0;e<y0.length;++e)P2(t,y0[e])}function L2(t,e){const n=["webgl2","webgl","experimental-webgl"];let r=null;for(let i=0;i<n.length;++i)if(r=t.getContext(n[i],e),r){b0(r);break}return r}function R2(t,e){return L2(t,e)}var N2=`/***The vertex position wrt the rectangle specified by(x,x2,y,y2).*[0,0]=[x,y],[1,1]=[x2,y2].*The x or y component may contain fractional values if the rectangle*have been tessellated.*/in vec2 frac;uniform vec2 uMinSize;uniform float uMinOpacity;uniform vec4 uCornerRadii;flat out lowp vec4 vFillColor;flat out lowp vec4 vStrokeColor;flat out float vHalfStrokeWidth;flat out vec4 vCornerRadii;
|
|
14
|
+
see: http://github.com/greggman/twgl.js for details */const Uo=5120,Er=5121,Ho=5122,Qo=5123,Vo=5124,jo=5125,Yo=5126,qA=32819,JA=32820,_A=33635,$A=5131,e1=33640,t1=35899,n1=35902,r1=36269,i1=34042,Ol={};{const t=Ol;t[Uo]=Int8Array,t[Er]=Uint8Array,t[Ho]=Int16Array,t[Qo]=Uint16Array,t[Vo]=Int32Array,t[jo]=Uint32Array,t[Yo]=Float32Array,t[qA]=Uint16Array,t[JA]=Uint16Array,t[_A]=Uint16Array,t[$A]=Uint16Array,t[e1]=Uint32Array,t[t1]=Uint32Array,t[n1]=Uint32Array,t[r1]=Uint32Array,t[i1]=Uint32Array}function Wo(t){if(t instanceof Int8Array)return Uo;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return Er;if(t instanceof Int16Array)return Ho;if(t instanceof Uint16Array)return Qo;if(t instanceof Int32Array)return Vo;if(t instanceof Uint32Array)return jo;if(t instanceof Float32Array)return Yo;throw new Error("unsupported typed array type")}function s1(t){if(t===Int8Array)return Uo;if(t===Uint8Array||t===Uint8ClampedArray)return Er;if(t===Int16Array)return Ho;if(t===Uint16Array)return Qo;if(t===Int32Array)return Vo;if(t===Uint32Array)return jo;if(t===Float32Array)return Yo;throw new Error("unsupported typed array type")}function o1(t){const e=Ol[t];if(!e)throw new Error("unknown gl type");return e}const Fi=typeof SharedArrayBuffer!="undefined"?function(e){return e&&e.buffer&&(e.buffer instanceof ArrayBuffer||e.buffer instanceof SharedArrayBuffer)}:function(e){return e&&e.buffer&&e.buffer instanceof ArrayBuffer};function a1(...t){console.error(...t)}function Gl(...t){console.warn(...t)}function u1(t,e){return typeof WebGLBuffer!="undefined"&&e instanceof WebGLBuffer}function Ul(t,e){return typeof WebGLRenderbuffer!="undefined"&&e instanceof WebGLRenderbuffer}function Mi(t,e){return typeof WebGLTexture!="undefined"&&e instanceof WebGLTexture}function c1(t,e){return typeof WebGLSampler!="undefined"&&e instanceof WebGLSampler}const Hl=35044,We=34962,l1=34963,f1=34660,h1=5120,d1=5121,p1=5122,g1=5123,m1=5124,A1=5125,x1=5126,Ql={attribPrefix:""};function Vl(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||Hl)}function jl(t,e,n,r){if(u1(t,e))return e;n=n||We;const i=t.createBuffer();return Vl(t,n,i,e,r),i}function Yl(t){return t==="indices"}function y1(t){return t instanceof Int8Array||t instanceof Uint8Array}function b1(t){return t===Int8Array||t===Uint8Array}function w1(t){return t.length?t:t.data}const v1=/coord|texture/i,E1=/color|colour/i;function Wl(t,e){let n;if(v1.test(t)?n=2:E1.test(t)?n=4:n=3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function C1(t,e){return t.numComponents||t.size||Wl(e,w1(t).length)}function Xo(t,e){if(Fi(t))return t;if(Fi(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type;return n||(Yl(e)?n=Uint16Array:n=Float32Array),new n(t.data)}function D1(t,e){const n={};return Object.keys(e).forEach(function(r){if(!Yl(r)){const i=e[r],s=i.attrib||i.name||i.attribName||Ql.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!Fi(i.value))throw new Error("array.value is not array or typedarray");n[s]={value:i.value}}else{let o,a,u,c;if(i.buffer&&i.buffer instanceof WebGLBuffer)o=i.buffer,c=i.numComponents||i.size,a=i.type,u=i.normalize;else if(typeof i=="number"||typeof i.data=="number"){const f=i.data||i,l=i.type||Float32Array,h=f*l.BYTES_PER_ELEMENT;a=s1(l),u=i.normalize!==void 0?i.normalize:b1(l),c=i.numComponents||i.size||Wl(r,f),o=t.createBuffer(),t.bindBuffer(We,o),t.bufferData(We,h,i.drawType||Hl)}else{const f=Xo(i,r);o=jl(t,f,void 0,i.drawType),a=Wo(f),u=i.normalize!==void 0?i.normalize:y1(f),c=C1(i,r)}n[s]={buffer:o,numComponents:c,type:a,normalize:u,stride:i.stride||0,offset:i.offset||0,divisor:i.divisor===void 0?void 0:i.divisor,drawType:i.drawType}}}}),t.bindBuffer(We,null),n}function S1(t,e,n,r){n=Xo(n),r!==void 0?(t.bindBuffer(We,e.buffer),t.bufferSubData(We,r,n)):Vl(t,We,e.buffer,n,e.drawType)}function B1(t,e){return e===h1||e===d1?1:e===p1||e===g1?2:e===m1||e===A1||e===x1?4:0}const Zo=["position","positions","a_position"];function F1(t,e){let n,r;for(r=0;r<Zo.length&&(n=Zo[r],!(n in e||(n=Ql.attribPrefix+n,n in e)));++r);r===Zo.length&&(n=Object.keys(e)[0]);const i=e[n];t.bindBuffer(We,i.buffer);const s=t.getBufferParameter(We,f1);t.bindBuffer(We,null);const o=B1(t,i.type),a=s/o,u=i.numComponents||i.size,c=a/u;if(c%1!==0)throw new Error(`numComponents ${u} not correct for length ${length}`);return c}function M1(t,e,n){const r=D1(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const s=e.indices;if(s){const o=Xo(s,"indices");i.indices=jl(t,o,l1),i.numElements=o.length,i.elementType=Wo(o)}else i.numElements||(i.numElements=F1(t,i.attribs));return i}function gn(t){return!!t.texStorage2D}const Ko=function(){const t={},e={};function n(r){const i=r.constructor.name;if(!t[i]){for(const s in r)if(typeof r[s]=="number"){const o=e[r[s]];e[r[s]]=o?`${o} | ${s}`:s}t[i]=!0}}return function(i,s){return n(i),e[s]||(typeof s=="number"?`0x${s.toString(16)}`:s)}}(),xt={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},mn=Fi,Xl=function(){let t;return function(){return t=t||(typeof document!="undefined"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),Zl=6406,Xe=6407,V=6408,Kl=6409,ql=6410,Cr=6402,Jl=34041,Ii=33071,I1=9728,T1=9729,tt=3553,nt=34067,yt=32879,bt=35866,Ti=34069,P1=34070,L1=34071,R1=34072,k1=34073,N1=34074,qo=10241,Jo=10240,Pi=10242,Li=10243,_l=32882,z1=33082,O1=33083,G1=33084,U1=33085,_o=3317,$l=3314,ef=32878,tf=3316,nf=3315,rf=32877,H1=37443,Q1=37441,V1=37440,j1=33321,Y1=36756,W1=33325,X1=33326,Z1=33330,K1=33329,q1=33338,J1=33337,_1=33340,$1=33339,ex=33323,tx=36757,nx=33327,rx=33328,ix=33336,sx=33335,ox=33332,ax=33331,ux=33334,cx=33333,lx=32849,fx=35905,hx=36194,dx=36758,px=35898,gx=35901,mx=34843,Ax=34837,xx=36221,yx=36239,bx=36215,wx=36233,vx=36209,Ex=36227,Cx=32856,Dx=35907,Sx=36759,Bx=32855,Fx=32854,Mx=32857,Ix=34842,Tx=34836,Px=36220,Lx=36238,Rx=36975,kx=36214,Nx=36232,zx=36226,Ox=36208,Gx=33189,Ux=33190,Hx=36012,Qx=36013,Vx=35056,wt=5120,j=5121,Ri=5122,An=5123,ki=5124,Wt=5125,ae=5126,sf=32819,of=32820,af=33635,ke=5131,Dr=36193,$o=33640,jx=35899,Yx=35902,Wx=36269,Xx=34042,Ni=33319,xn=33320,zi=6403,yn=36244,bn=36248,Xt=36249;let ea;function Oi(t){if(!ea){const e={};e[Zl]={textureFormat:Zl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[j,ke,Dr,ae]},e[Kl]={textureFormat:Kl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[j,ke,Dr,ae]},e[ql]={textureFormat:ql,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[j,ke,Dr,ae]},e[Xe]={textureFormat:Xe,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[j,ke,Dr,ae,af]},e[V]={textureFormat:V,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[j,ke,Dr,ae,sf,of]},e[Cr]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Wt,An]},e[j1]={textureFormat:zi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[j]},e[Y1]={textureFormat:zi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[wt]},e[W1]={textureFormat:zi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[ae,ke]},e[X1]={textureFormat:zi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[ae]},e[Z1]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[j]},e[K1]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[wt]},e[ox]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[An]},e[ax]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Ri]},e[ux]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wt]},e[cx]={textureFormat:yn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ki]},e[ex]={textureFormat:Ni,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[j]},e[tx]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[wt]},e[nx]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[ae,ke]},e[rx]={textureFormat:Ni,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[ae]},e[ix]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[j]},e[sx]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[wt]},e[q1]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[An]},e[J1]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ri]},e[_1]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Wt]},e[$1]={textureFormat:xn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[ki]},e[lx]={textureFormat:Xe,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[j]},e[fx]={textureFormat:Xe,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[j]},e[hx]={textureFormat:Xe,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[j,af]},e[dx]={textureFormat:Xe,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[wt]},e[px]={textureFormat:Xe,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[ae,ke,jx]},e[gx]={textureFormat:Xe,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[ae,ke,Yx]},e[mx]={textureFormat:Xe,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[ae,ke]},e[Ax]={textureFormat:Xe,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[ae]},e[xx]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[j]},e[yx]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[wt]},e[bx]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[An]},e[wx]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Ri]},e[vx]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Wt]},e[Ex]={textureFormat:bn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[ki]},e[Cx]={textureFormat:V,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[j]},e[Dx]={textureFormat:V,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[j]},e[Sx]={textureFormat:V,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[wt]},e[Bx]={textureFormat:V,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[j,of,$o]},e[Fx]={textureFormat:V,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[j,sf]},e[Mx]={textureFormat:V,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[$o]},e[Ix]={textureFormat:V,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[ae,ke]},e[Tx]={textureFormat:V,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[ae]},e[Px]={textureFormat:Xt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[j]},e[Lx]={textureFormat:Xt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[wt]},e[Rx]={textureFormat:Xt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[$o]},e[kx]={textureFormat:Xt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[An]},e[Nx]={textureFormat:Xt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ri]},e[zx]={textureFormat:Xt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[ki]},e[Ox]={textureFormat:Xt,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Wt]},e[Gx]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[An,Wt]},e[Ux]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wt]},e[Hx]={textureFormat:Cr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ae]},e[Vx]={textureFormat:Jl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Xx]},e[Qx]={textureFormat:Jl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Wx]},Object.keys(e).forEach(function(n){const r=e[n];r.bytesPerElementMap={},r.bytesPerElement.forEach(function(i,s){const o=r.type[s];r.bytesPerElementMap[o]=i})}),ea=e}return ea[t]}function Zx(t,e){const n=Oi(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(r===void 0)throw"unknown internal format";return r}function wn(t){const e=Oi(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function uf(t){return(t&t-1)===0}function Kx(t,e,n,r){if(!gn(t))return uf(e)&&uf(n);const i=Oi(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function qx(t){const e=Oi(t);if(!e)throw"unknown internal format";return e.textureFilterable}function cf(t,e,n){return mn(e)?Wo(e):n||j}function Gi(t,e,n,r,i){if(i%1!==0)throw"can't guess dimensions";if(!n&&!r){const s=Math.sqrt(i/(e===nt?6:1));s%1===0?(n=s,r=s):(n=i,r=1)}else if(r){if(!n&&(n=i/r,n%1))throw"can't guess dimensions"}else if(r=i/n,r%1)throw"can't guess dimensions";return{width:n,height:r}}function vn(t,e){e.colorspaceConversion!==void 0&&t.pixelStorei(H1,e.colorspaceConversion),e.premultiplyAlpha!==void 0&&t.pixelStorei(Q1,e.premultiplyAlpha),e.flipY!==void 0&&t.pixelStorei(V1,e.flipY)}function lf(t){t.pixelStorei(_o,4),gn(t)&&(t.pixelStorei($l,0),t.pixelStorei(ef,0),t.pixelStorei(tf,0),t.pixelStorei(nf,0),t.pixelStorei(rf,0))}function Jx(t,e,n,r){r.minMag&&(n.call(t,e,qo,r.minMag),n.call(t,e,Jo,r.minMag)),r.min&&n.call(t,e,qo,r.min),r.mag&&n.call(t,e,Jo,r.mag),r.wrap&&(n.call(t,e,Pi,r.wrap),n.call(t,e,Li,r.wrap),(e===yt||c1(t,e))&&n.call(t,e,_l,r.wrap)),r.wrapR&&n.call(t,e,_l,r.wrapR),r.wrapS&&n.call(t,e,Pi,r.wrapS),r.wrapT&&n.call(t,e,Li,r.wrapT),r.minLod&&n.call(t,e,z1,r.minLod),r.maxLod&&n.call(t,e,O1,r.maxLod),r.baseLevel&&n.call(t,e,G1,r.baseLevel),r.maxLevel&&n.call(t,e,U1,r.maxLevel)}function ff(t,e,n){const r=n.target||tt;t.bindTexture(r,e),Jx(t,r,t.texParameteri,n)}function _x(t){return t=t||xt.textureColor,mn(t)?t:new Uint8Array([t[0]*255,t[1]*255,t[2]*255,t[3]*255])}function ta(t,e,n,r,i,s){n=n||xt.textureOptions,s=s||V;const o=n.target||tt;if(r=r||n.width,i=i||n.height,t.bindTexture(o,e),Kx(t,r,i,s))t.generateMipmap(o);else{const a=qx(s)?T1:I1;t.texParameteri(o,qo,a),t.texParameteri(o,Jo,a),t.texParameteri(o,Pi,Ii),t.texParameteri(o,Li,Ii)}}function Sr(t){return t.auto===!0||t.auto===void 0&&t.level===void 0}function na(t,e){return e=e||{},e.cubeFaceOrder||[Ti,P1,L1,R1,k1,N1]}function ra(t,e){const r=na(t,e).map(function(i,s){return{face:i,ndx:s}});return r.sort(function(i,s){return i.face-s.face}),r}function hf(t,e,n,r){r=r||xt.textureOptions;const i=r.target||tt,s=r.level||0;let o=n.width,a=n.height;const u=r.internalFormat||r.format||V,c=wn(u),f=r.format||c.format,l=r.type||c.type;if(vn(t,r),t.bindTexture(i,e),i===nt){const h=n.width,p=n.height;let d,g;if(h/6===p)d=p,g=[0,0,1,0,2,0,3,0,4,0,5,0];else if(p/6===h)d=h,g=[0,0,0,1,0,2,0,3,0,4,0,5];else if(h/3===p/2)d=h/3,g=[0,0,1,0,2,0,0,1,1,1,2,1];else if(h/2===p/3)d=h/2,g=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);const m=Xl();m?(m.canvas.width=d,m.canvas.height=d,o=d,a=d,ra(t,r).forEach(function(A){const w=g[A.ndx*2+0]*d,y=g[A.ndx*2+1]*d;m.drawImage(n,w,y,d,d,0,0,d,d),t.texImage2D(A.face,s,u,f,l,m.canvas)}),m.canvas.width=1,m.canvas.height=1):typeof createImageBitmap!="undefined"&&(o=d,a=d,ra(t,r).forEach(function(A){const w=g[A.ndx*2+0]*d,y=g[A.ndx*2+1]*d;t.texImage2D(A.face,s,u,d,d,0,f,l,null),createImageBitmap(n,w,y,d,d,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(v){vn(t,r),t.bindTexture(i,e),t.texImage2D(A.face,s,u,f,l,v),Sr(r)&&ta(t,e,r,o,a,u)})}))}else if(i===yt||i===bt){const h=Math.min(n.width,n.height),p=Math.max(n.width,n.height),d=p/h;if(d%1!==0)throw"can not compute 3D dimensions of element";const g=n.width===p?1:0,m=n.height===p?1:0;t.pixelStorei(_o,1),t.pixelStorei($l,n.width),t.pixelStorei(ef,0),t.pixelStorei(rf,0),t.texImage3D(i,s,u,h,h,h,0,f,l,null);for(let A=0;A<d;++A){const w=A*h*g,y=A*h*m;t.pixelStorei(tf,w),t.pixelStorei(nf,y),t.texSubImage3D(i,s,0,0,A,h,h,1,f,l,n)}lf(t)}else t.texImage2D(i,s,u,f,l,n);Sr(r)&&ta(t,e,r,o,a,u),ff(t,e,r)}function Br(){}function $x(t){if(typeof document!="undefined"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}else{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function ey(t,e){return e===void 0&&!$x(t)?"anonymous":e}function ty(t,e,n){n=n||Br;let r;if(e=e!==void 0?e:xt.crossOrigin,e=ey(t,e),typeof Image!="undefined"){r=new Image,e!==void 0&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",s),r.removeEventListener("load",o),r=null},s=function(){const u="couldn't load image: "+t;a1(u),n(u,r),i()},o=function(){n(null,r),i()};return r.addEventListener("error",s),r.addEventListener("load",o),r.src=t,r}else if(typeof ImageBitmap!="undefined"){let i,s;const o=function(){n(i,s)},a={};e&&(a.mode="cors"),fetch(t,a).then(function(u){if(!u.ok)throw u;return u.blob()}).then(function(u){return createImageBitmap(u,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(u){s=u,setTimeout(o)}).catch(function(u){i=u,setTimeout(o)}),r=null}return r}function df(t){return typeof ImageBitmap!="undefined"&&t instanceof ImageBitmap||typeof ImageData!="undefined"&&t instanceof ImageData||typeof HTMLElement!="undefined"&&t instanceof HTMLElement}function ia(t,e,n){return df(t)?(setTimeout(function(){n(null,t)}),t):ty(t,e,n)}function sa(t,e,n){n=n||xt.textureOptions;const r=n.target||tt;if(t.bindTexture(r,e),n.color===!1)return;const i=_x(n.color);if(r===nt)for(let s=0;s<6;++s)t.texImage2D(Ti+s,0,V,1,1,0,V,j,i);else r===yt||r===bt?t.texImage3D(r,0,V,1,1,1,0,V,j,i):t.texImage2D(r,0,V,1,1,0,V,j,i)}function ny(t,e,n,r){return r=r||Br,n=n||xt.textureOptions,sa(t,e,n),n=Object.assign({},n),ia(n.src,n.crossOrigin,function(s,o){s?r(s,e,o):(hf(t,e,o,n),r(null,e,o))})}function ry(t,e,n,r){r=r||Br;const i=n.src;if(i.length!==6)throw"there must be 6 urls for a cubemap";const s=n.level||0,o=n.internalFormat||n.format||V,a=wn(o),u=n.format||a.format,c=n.type||j,f=n.target||tt;if(f!==nt)throw"target must be TEXTURE_CUBE_MAP";sa(t,e,n),n=Object.assign({},n);let l=6;const h=[],p=na(t,n);let d;function g(m){return function(A,w){--l,A?h.push(A):w.width!==w.height?h.push("cubemap face img is not a square: "+w.src):(vn(t,n),t.bindTexture(f,e),l===5?na().forEach(function(y){t.texImage2D(y,s,o,u,c,w)}):t.texImage2D(m,s,o,u,c,w),Sr(n)&&t.generateMipmap(f)),l===0&&r(h.length?h:void 0,e,d)}}d=i.map(function(m,A){return ia(m,n.crossOrigin,g(p[A]))})}function iy(t,e,n,r){r=r||Br;const i=n.src,s=n.internalFormat||n.format||V,o=wn(s),a=n.format||o.format,u=n.type||j,c=n.target||bt;if(c!==yt&&c!==bt)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";sa(t,e,n),n=Object.assign({},n);let f=i.length;const l=[];let h;const p=n.level||0;let d=n.width,g=n.height;const m=i.length;let A=!0;function w(y){return function(v,S){if(--f,v)l.push(v);else{if(vn(t,n),t.bindTexture(c,e),A){A=!1,d=n.width||S.width,g=n.height||S.height,t.texImage3D(c,p,s,d,g,m,0,a,u,null);for(let E=0;E<m;++E)t.texSubImage3D(c,p,0,0,E,d,g,1,a,u,S)}else{let E=S,B;(S.width!==d||S.height!==g)&&(B=Xl(),E=B.canvas,B.canvas.width=d,B.canvas.height=g,B.drawImage(S,0,0,d,g)),t.texSubImage3D(c,p,0,0,y,d,g,1,a,u,E),B&&E===B.canvas&&(B.canvas.width=0,B.canvas.height=0)}Sr(n)&&t.generateMipmap(c)}f===0&&r(l.length?l:void 0,e,h)}}h=i.map(function(y,v){return ia(y,n.crossOrigin,w(v))})}function pf(t,e,n,r){r=r||xt.textureOptions;const i=r.target||tt;t.bindTexture(i,e);let s=r.width,o=r.height,a=r.depth;const u=r.level||0,c=r.internalFormat||r.format||V,f=wn(c),l=r.format||f.format,h=r.type||cf(t,n,f.type);if(mn(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const m=o1(h);n=new m(n)}const p=Zx(c,h),d=n.byteLength/p;if(d%1)throw"length wrong size for format: "+Ko(t,l);let g;if(i===yt||i===bt)if(!s&&!o&&!a){const m=Math.cbrt(d);if(m%1!==0)throw"can't guess cube size of array of numElements: "+d;s=m,o=m,a=m}else s&&(!o||!a)?(g=Gi(t,i,o,a,d/s),o=g.width,a=g.height):o&&(!s||!a)?(g=Gi(t,i,s,a,d/o),s=g.width,a=g.height):(g=Gi(t,i,s,o,d/a),s=g.width,o=g.height);else g=Gi(t,i,s,o,d),s=g.width,o=g.height;if(lf(t),t.pixelStorei(_o,r.unpackAlignment||1),vn(t,r),i===nt){const m=p/n.BYTES_PER_ELEMENT,A=d/6*m;ra(t,r).forEach(w=>{const y=A*w.ndx,v=n.subarray(y,y+A);t.texImage2D(w.face,u,c,s,o,0,l,h,v)})}else i===yt||i===bt?t.texImage3D(i,u,c,s,o,a,0,l,h,n):t.texImage2D(i,u,c,s,o,0,l,h,n);return{width:s,height:o,depth:a,type:h}}function sy(t,e,n){const r=n.target||tt;t.bindTexture(r,e);const i=n.level||0,s=n.internalFormat||n.format||V,o=wn(s),a=n.format||o.format,u=n.type||o.type;if(vn(t,n),r===nt)for(let c=0;c<6;++c)t.texImage2D(Ti+c,i,s,n.width,n.height,0,a,u,null);else r===yt||r===bt?t.texImage3D(r,i,s,n.width,n.height,n.depth,0,a,u,null):t.texImage2D(r,i,s,n.width,n.height,0,a,u,null)}function Fr(t,e,n){n=n||Br,e=e||xt.textureOptions;const r=t.createTexture(),i=e.target||tt;let s=e.width||1,o=e.height||1;const a=e.internalFormat||V;t.bindTexture(i,r),i===nt&&(t.texParameteri(i,Pi,Ii),t.texParameteri(i,Li,Ii));let u=e.src;if(u)if(typeof u=="function"&&(u=u(t,e)),typeof u=="string")ny(t,r,e,n);else if(mn(u)||Array.isArray(u)&&(typeof u[0]=="number"||Array.isArray(u[0])||mn(u[0]))){const c=pf(t,r,u,e);s=c.width,o=c.height}else Array.isArray(u)&&(typeof u[0]=="string"||df(u[0]))?i===nt?ry(t,r,e,n):iy(t,r,e,n):(hf(t,r,u,e),s=u.width,o=u.height);else sy(t,r,e);return Sr(e)&&ta(t,r,e,s,o,a),ff(t,r,e),r}function oy(t,e,n,r,i,s){r=r||n.width,i=i||n.height,s=s||n.depth;const o=n.target||tt;t.bindTexture(o,e);const a=n.level||0,u=n.internalFormat||n.format||V,c=wn(u),f=n.format||c.format;let l;const h=n.src;if(h&&(mn(h)||Array.isArray(h)&&typeof h[0]=="number")?l=n.type||cf(t,h,c.type):l=n.type||c.type,o===nt)for(let p=0;p<6;++p)t.texImage2D(Ti+p,a,u,r,i,0,f,l,null);else o===yt||o===bt?t.texImage3D(o,a,u,r,i,s,0,f,l,null):t.texImage2D(o,a,u,r,i,0,f,l,null)}const ay=Gl,Ui=33984,uy=35048,Hi=34962,cy=34963,oa=35345,gf=35718,ly=35721,fy=35971,hy=35382,dy=35396,py=35398,gy=35392,my=35395,Qi=5126,mf=35664,Af=35665,xf=35666,aa=5124,yf=35667,bf=35668,wf=35669,vf=35670,Ef=35671,Cf=35672,Df=35673,Sf=35674,Bf=35675,Ff=35676,Ay=35678,xy=35680,yy=35679,by=35682,wy=35685,vy=35686,Ey=35687,Cy=35688,Dy=35689,Sy=35690,By=36289,Fy=36292,My=36293,ua=5125,Mf=36294,If=36295,Tf=36296,Iy=36298,Ty=36299,Py=36300,Ly=36303,Ry=36306,ky=36307,Ny=36308,zy=36311,Vi=3553,ji=34067,ca=32879,Yi=35866,F={};function Pf(t,e){return F[e].bindPoint}function Oy(t,e){return function(n){t.uniform1f(e,n)}}function Gy(t,e){return function(n){t.uniform1fv(e,n)}}function Uy(t,e){return function(n){t.uniform2fv(e,n)}}function Hy(t,e){return function(n){t.uniform3fv(e,n)}}function Qy(t,e){return function(n){t.uniform4fv(e,n)}}function Lf(t,e){return function(n){t.uniform1i(e,n)}}function Rf(t,e){return function(n){t.uniform1iv(e,n)}}function kf(t,e){return function(n){t.uniform2iv(e,n)}}function Nf(t,e){return function(n){t.uniform3iv(e,n)}}function zf(t,e){return function(n){t.uniform4iv(e,n)}}function Vy(t,e){return function(n){t.uniform1ui(e,n)}}function jy(t,e){return function(n){t.uniform1uiv(e,n)}}function Yy(t,e){return function(n){t.uniform2uiv(e,n)}}function Wy(t,e){return function(n){t.uniform3uiv(e,n)}}function Xy(t,e){return function(n){t.uniform4uiv(e,n)}}function Zy(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function Ky(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function qy(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function Jy(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function _y(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function $y(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function e2(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function t2(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function n2(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function le(t,e,n,r){const i=Pf(t,e);return gn(t)?function(s){let o,a;Mi(t,s)?(o=s,a=null):(o=s.texture,a=s.sampler),t.uniform1i(r,n),t.activeTexture(Ui+n),t.bindTexture(i,o),t.bindSampler(n,a)}:function(s){t.uniform1i(r,n),t.activeTexture(Ui+n),t.bindTexture(i,s)}}function fe(t,e,n,r,i){const s=Pf(t,e),o=new Int32Array(i);for(let a=0;a<i;++a)o[a]=n+a;return gn(t)?function(a){t.uniform1iv(r,o),a.forEach(function(u,c){t.activeTexture(Ui+o[c]);let f,l;Mi(t,u)?(f=u,l=null):(f=u.texture,l=u.sampler),t.bindSampler(n,l),t.bindTexture(s,f)})}:function(a){t.uniform1iv(r,o),a.forEach(function(u,c){t.activeTexture(Ui+o[c]),t.bindTexture(s,u)})}}F[Qi]={Type:Float32Array,size:4,setter:Oy,arraySetter:Gy},F[mf]={Type:Float32Array,size:8,setter:Uy,cols:2},F[Af]={Type:Float32Array,size:12,setter:Hy,cols:3},F[xf]={Type:Float32Array,size:16,setter:Qy,cols:4},F[aa]={Type:Int32Array,size:4,setter:Lf,arraySetter:Rf},F[yf]={Type:Int32Array,size:8,setter:kf,cols:2},F[bf]={Type:Int32Array,size:12,setter:Nf,cols:3},F[wf]={Type:Int32Array,size:16,setter:zf,cols:4},F[ua]={Type:Uint32Array,size:4,setter:Vy,arraySetter:jy},F[Mf]={Type:Uint32Array,size:8,setter:Yy,cols:2},F[If]={Type:Uint32Array,size:12,setter:Wy,cols:3},F[Tf]={Type:Uint32Array,size:16,setter:Xy,cols:4},F[vf]={Type:Uint32Array,size:4,setter:Lf,arraySetter:Rf},F[Ef]={Type:Uint32Array,size:8,setter:kf,cols:2},F[Cf]={Type:Uint32Array,size:12,setter:Nf,cols:3},F[Df]={Type:Uint32Array,size:16,setter:zf,cols:4},F[Sf]={Type:Float32Array,size:32,setter:Zy,rows:2,cols:2},F[Bf]={Type:Float32Array,size:48,setter:Ky,rows:3,cols:3},F[Ff]={Type:Float32Array,size:64,setter:qy,rows:4,cols:4},F[wy]={Type:Float32Array,size:32,setter:Jy,rows:2,cols:3},F[vy]={Type:Float32Array,size:32,setter:$y,rows:2,cols:4},F[Ey]={Type:Float32Array,size:48,setter:_y,rows:3,cols:2},F[Cy]={Type:Float32Array,size:48,setter:t2,rows:3,cols:4},F[Dy]={Type:Float32Array,size:64,setter:e2,rows:4,cols:2},F[Sy]={Type:Float32Array,size:64,setter:n2,rows:4,cols:3},F[Ay]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:Vi},F[xy]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:ji},F[yy]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:ca},F[by]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:Vi},F[By]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:Yi},F[Fy]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:Yi},F[My]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:ji},F[Iy]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:Vi},F[Ty]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:ca},F[Py]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:ji},F[Ly]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:Yi},F[Ry]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:Vi},F[ky]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:ca},F[Ny]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:ji},F[zy]={Type:null,size:0,setter:le,arraySetter:fe,bindPoint:Yi};function Wi(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(Hi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||Qi,n.normalize||!1,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function vt(t,e){return function(n){if(n.value)if(t.disableVertexAttribArray(e),n.value.length===4)t.vertexAttrib4iv(e,n.value);else throw new Error("The length of an integer constant value must be 4!");else t.bindBuffer(Hi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||aa,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function Xi(t,e){return function(n){if(n.value)if(t.disableVertexAttribArray(e),n.value.length===4)t.vertexAttrib4uiv(e,n.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else t.bindBuffer(Hi,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||ua,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function la(t,e,n){const r=n.size,i=n.count;return function(s){t.bindBuffer(Hi,s.buffer);const o=s.size||s.numComponents||r,a=o/i,u=s.type||Qi,f=F[u].size*o,l=s.normalize||!1,h=s.offset||0,p=f/i;for(let d=0;d<i;++d)t.enableVertexAttribArray(e+d),t.vertexAttribPointer(e+d,a,u,l,f,h+p*d),s.divisor!==void 0&&t.vertexAttribDivisor(e+d,s.divisor)}}const Z={};Z[Qi]={size:4,setter:Wi},Z[mf]={size:8,setter:Wi},Z[Af]={size:12,setter:Wi},Z[xf]={size:16,setter:Wi},Z[aa]={size:4,setter:vt},Z[yf]={size:8,setter:vt},Z[bf]={size:12,setter:vt},Z[wf]={size:16,setter:vt},Z[ua]={size:4,setter:Xi},Z[Mf]={size:8,setter:Xi},Z[If]={size:12,setter:Xi},Z[Tf]={size:16,setter:Xi},Z[vf]={size:4,setter:vt},Z[Ef]={size:8,setter:vt},Z[Cf]={size:12,setter:vt},Z[Df]={size:16,setter:vt},Z[Sf]={size:4,setter:la,count:2},Z[Bf]={size:9,setter:la,count:3},Z[Ff]={size:16,setter:la,count:4};function Of(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const r2=/(\.|\[|]|\w+)/g,i2=t=>t>="0"&&t<="9";function Gf(t,e,n,r){const i=t.split(r2).filter(a=>a!=="");let s=0,o="";for(;;){const a=i[s++];o+=a;const u=i2(a[0]),c=u?parseInt(a):a;if(u&&(o+=i[s++]),s===i.length){n[c]=e;break}else{const l=i[s++],h=l==="[",p=n[c]||(h?[]:{});n[c]=p,n=p,r[o]=r[o]||function(d){return function(g){Hf(d,g)}}(p),o+=l}}}function s2(t,e){let n=0;function r(a,u,c){const f=u.name.endsWith("[0]"),l=u.type,h=F[l];if(!h)throw new Error(`unknown type: 0x${l.toString(16)}`);let p;if(h.bindPoint){const d=n;n+=u.size,f?p=h.arraySetter(t,l,d,c,u.size):p=h.setter(t,l,d,c,u.size)}else h.arraySetter&&f?p=h.arraySetter(t,c):p=h.setter(t,c);return p.location=c,p}const i={},s={},o=t.getProgramParameter(e,gf);for(let a=0;a<o;++a){const u=t.getActiveUniform(e,a);if(Of(u))continue;let c=u.name;c.endsWith("[0]")&&(c=c.substr(0,c.length-3));const f=t.getUniformLocation(e,u.name);if(f){const l=r(e,u,f);i[c]=l,Gf(c,l,s,i)}}return i}function o2(t,e){const n={},r=t.getProgramParameter(e,fy);for(let i=0;i<r;++i){const s=t.getTransformFeedbackVarying(e,i);n[s.name]={index:i,type:s.type,size:s.size}}return n}function a2(t,e){const n=t.getProgramParameter(e,gf),r=[],i=[];for(let a=0;a<n;++a){i.push(a),r.push({});const u=t.getActiveUniform(e,a);r[a].name=u.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(a){const u=a[0],c=a[1];t.getActiveUniforms(e,i,t[u]).forEach(function(f,l){r[l][c]=f})});const s={},o=t.getProgramParameter(e,hy);for(let a=0;a<o;++a){const u=t.getActiveUniformBlockName(e,a),c={index:t.getUniformBlockIndex(e,u),usedByVertexShader:t.getActiveUniformBlockParameter(e,a,dy),usedByFragmentShader:t.getActiveUniformBlockParameter(e,a,py),size:t.getActiveUniformBlockParameter(e,a,gy),uniformIndices:t.getActiveUniformBlockParameter(e,a,my)};c.used=c.usedByVertexShader||c.usedByFragmentShader,s[u]=c}return{blockSpecs:s,uniformData:r}}const Uf=/\[\d+\]\.$/,u2=(t,e)=>((t+(e-1))/e|0)*e;function c2(t,e,n,r){if(e||n){r=r||1;const s=t.length/4;return function(o){let a=0,u=0;for(let c=0;c<s;++c){for(let f=0;f<r;++f)t[a++]=o[u++];a+=4-r}}}else return function(i){i.length?t.set(i):t[0]=i}}function l2(t,e,n,r){const i=n.blockSpecs,s=n.uniformData,o=i[r];if(!o)return ay("no uniform block object named:",r),{name:r,uniforms:{}};const a=new ArrayBuffer(o.size),u=t.createBuffer(),c=o.index;t.bindBuffer(oa,u),t.uniformBlockBinding(e,o.index,c);let f=r+".";Uf.test(f)&&(f=f.replace(Uf,"."));const l={},h={},p={};return o.uniformIndices.forEach(function(d){const g=s[d];let m=g.name;m.startsWith(f)&&(m=m.substr(f.length));const A=m.endsWith("[0]");A&&(m=m.substr(0,m.length-3));const w=F[g.type],y=w.Type,v=A?u2(w.size,16)*g.size:w.size*g.size,S=new y(a,g.offset,v/y.BYTES_PER_ELEMENT);l[m]=S;const E=c2(S,A,w.rows,w.cols);h[m]=E,Gf(m,E,p,h)}),{name:r,array:a,asFloat:new Float32Array(a),buffer:u,uniforms:l,setters:h}}function f2(t,e,n){return l2(t,e.program,e.uniformBlockSpec,n)}function h2(t,e,n){const i=(e.uniformBlockSpec||e).blockSpecs[n.name];if(i){const s=i.index;return t.bindBufferRange(oa,s,n.buffer,n.offset||0,n.array.byteLength),!0}return!1}function d2(t,e,n){h2(t,e,n)&&t.bufferData(oa,n.array,uy)}function Hf(t,e){for(const n in e){const r=t[n];typeof r=="function"?r(e[n]):Hf(t[n],e[n])}}function ue(t,...e){const n=t.uniformSetters||t,r=e.length;for(let i=0;i<r;++i){const s=e[i];if(Array.isArray(s)){const o=s.length;for(let a=0;a<o;++a)ue(n,s[a])}else for(const o in s){const a=n[o];a&&a(s[o])}}}function p2(t,e){const n={},r=t.getProgramParameter(e,ly);for(let i=0;i<r;++i){const s=t.getActiveAttrib(e,i);if(Of(s))continue;const o=t.getAttribLocation(e,s.name),a=Z[s.type],u=a.setter(t,o,a);u.location=o,n[s.name]=u}return n}function g2(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function En(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(g2(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(cy,n.indices))}function m2(t,e){const n=s2(t,e),r=p2(t,e),i={program:e,uniformSetters:n,attribSetters:r};return gn(t)&&(i.uniformBlockSpec=a2(t,e),i.transformFeedbackInfo=o2(t,e)),i}const A2=4,Qf=5123;function Mr(t,e,n,r,i,s){n=n===void 0?A2:n;const o=e.indices,a=e.elementType,u=r===void 0?e.numElements:r;i=i===void 0?0:i,a||o?s!==void 0?t.drawElementsInstanced(n,u,a===void 0?Qf:e.elementType,i,s):t.drawElements(n,u,a===void 0?Qf:e.elementType,i):s!==void 0?t.drawArraysInstanced(n,i,u,s):t.drawArrays(n,i,u)}const x2=36160,Zt=36161,y2=3553,b2=5121,w2=6402,v2=6408,E2=33190,C2=36012,D2=35056,S2=36013,B2=32854,F2=32855,M2=36194,Vf=33189,jf=6401,Yf=36168,fa=34041,I2=36064,Zi=36096,Wf=36128,ha=33306,da=33071,pa=9729,Xf=[{format:v2,type:b2,min:pa,wrap:da},{format:fa}],Ne={};Ne[fa]=ha,Ne[jf]=Wf,Ne[Yf]=Wf,Ne[w2]=Zi,Ne[Vf]=Zi,Ne[E2]=Zi,Ne[C2]=Zi,Ne[D2]=ha,Ne[S2]=ha;function T2(t,e){return Ne[t]||Ne[e]}const Et={};Et[B2]=!0,Et[F2]=!0,Et[M2]=!0,Et[fa]=!0,Et[Vf]=!0,Et[jf]=!0,Et[Yf]=!0;function P2(t){return Et[t]}function L2(t,e,n,r){const i=x2,s=t.createFramebuffer();t.bindFramebuffer(i,s),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight,e=e||Xf;let o=0;const a={framebuffer:s,attachments:[],width:n,height:r};return e.forEach(function(u){let c=u.attachment;const f=u.samples,l=u.format;let h=u.attachmentPoint||T2(l,u.internalFormat);if(h||(h=I2+o++),!c)if(f!==void 0||P2(l))c=t.createRenderbuffer(),t.bindRenderbuffer(Zt,c),f>1?t.renderbufferStorageMultisample(Zt,f,l,n,r):t.renderbufferStorage(Zt,l,n,r);else{const p=Object.assign({},u);p.width=n,p.height=r,p.auto===void 0&&(p.auto=!1,p.min=p.min||p.minMag||pa,p.mag=p.mag||p.minMag||pa,p.wrapS=p.wrapS||p.wrap||da,p.wrapT=p.wrapT||p.wrap||da),c=Fr(t,p)}if(Ul(t,c))t.framebufferRenderbuffer(i,h,Zt,c);else if(Mi(t,c))u.layer!==void 0?t.framebufferTextureLayer(i,h,c,u.level||0,u.layer):t.framebufferTexture2D(i,h,u.target||y2,c,u.level||0);else throw new Error("unknown attachment type");a.attachments.push(c)}),a}function R2(t,e,n,r,i){r=r||t.drawingBufferWidth,i=i||t.drawingBufferHeight,e.width=r,e.height=i,n=n||Xf,n.forEach(function(s,o){const a=e.attachments[o],u=s.format,c=s.samples;if(c!==void 0||Ul(t,a))t.bindRenderbuffer(Zt,a),c>1?t.renderbufferStorageMultisample(Zt,c,u,r,i):t.renderbufferStorage(Zt,u,r,i);else if(Mi(t,a))oy(t,a,s,r,i);else throw new Error("unknown attachment type")})}function k2(t,e,n){const r=t.createVertexArray();return t.bindVertexArray(r),e.length||(e=[e]),e.forEach(function(i){En(t,i,n)}),t.bindVertexArray(null),{numElements:n.numElements,elementType:n.elementType,vertexArrayObject:r}}const N2=/^(.*?)_/;function z2(t,e){Ko(t,0);const n=t.getExtension(e);if(n){const r={},i=N2.exec(e)[1],s="_"+i;for(const o in n){const a=n[o],u=typeof a=="function",c=u?i:s;let f=o;o.endsWith(c)&&(f=o.substring(0,o.length-c.length)),t[f]!==void 0?!u&&t[f]!==a&&Gl(f,t[f],a,o):u?t[f]=function(l){return function(){return l.apply(n,arguments)}}(a):(t[f]=a,r[f]=a)}r.constructor={name:n.constructor.name},Ko(r,0)}return n}const Zf=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_color_buffer_float","EXT_color_buffer_half_float","EXT_disjoint_timer_query","EXT_disjoint_timer_query_webgl2","EXT_frag_depth","EXT_sRGB","EXT_shader_texture_lod","EXT_texture_filter_anisotropic","OES_element_index_uint","OES_standard_derivatives","OES_texture_float","OES_texture_float_linear","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_compressed_texture_atc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_pvrtc","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_depth_texture","WEBGL_draw_buffers"];function Kf(t){for(let e=0;e<Zf.length;++e)z2(t,Zf[e])}function O2(t,e){const n=["webgl2","webgl","experimental-webgl"];let r=null;for(let i=0;i<n.length;++i)if(r=t.getContext(n[i],e),r){Kf(r);break}return r}function G2(t,e){return O2(t,e)}var U2=`/***The vertex position wrt the rectangle specified by(x,x2,y,y2).*[0,0]=[x,y],[1,1]=[x2,y2].*The x or y component may contain fractional values if the rectangle*have been tessellated.*/in vec2 frac;uniform vec2 uMinSize;uniform float uMinOpacity;uniform vec4 uCornerRadii;flat out lowp vec4 vFillColor;flat out lowp vec4 vStrokeColor;flat out float vHalfStrokeWidth;flat out vec4 vCornerRadii;
|
|
15
15
|
#if defined(ROUNDED_CORNERS) || defined(STROKED)
|
|
16
16
|
out vec2 vPosInPixels;
|
|
17
17
|
#endif
|
|
@@ -19,7 +19,7 @@ flat out vec2 vHalfSizeInPixels;/***Clamps the minimumSize and returns an opacit
|
|
|
19
19
|
#if defined(ROUNDED_CORNERS) || defined(STROKED)
|
|
20
20
|
float aaPadding=1.0/uDevicePixelRatio;float strokeWidth=getScaled_strokeWidth();float strokeOpacity=getScaled_strokeOpacity()*opaFactor;vec2 centeredFrac=frac-0.5;vec2 expand=centeredFrac*(strokeWidth+aaPadding)/uViewportSize;pos+=expand;vec2 sizeInPixels=size*uViewportSize;vPosInPixels=(centeredFrac+expand/size)*sizeInPixels;vHalfSizeInPixels=sizeInPixels/2.0;vCornerRadii=min(uCornerRadii,min(vHalfSizeInPixels.x,vHalfSizeInPixels.y));vHalfStrokeWidth=strokeWidth/2.0;vStrokeColor=vec4(getScaled_stroke()*strokeOpacity,strokeOpacity);
|
|
21
21
|
#endif
|
|
22
|
-
gl_Position=unitToNdc(pos);float fillOpacity=getScaled_fillOpacity()*opaFactor;vFillColor=vec4(getScaled_fill()*fillOpacity,fillOpacity);setupPicking();}`,
|
|
22
|
+
gl_Position=unitToNdc(pos);float fillOpacity=getScaled_fillOpacity()*opaFactor;vFillColor=vec4(getScaled_fill()*fillOpacity,fillOpacity);setupPicking();}`,H2=`#if defined(ROUNDED_CORNERS) || defined(STROKED)
|
|
23
23
|
in vec2 vPosInPixels;
|
|
24
24
|
#endif
|
|
25
25
|
flat in vec2 vHalfSizeInPixels;flat in lowp vec4 vFillColor;flat in lowp vec4 vStrokeColor;flat in float vHalfStrokeWidth;flat in vec4 vCornerRadii;out lowp vec4 fragColor;float sdRoundedBox(vec2 p,vec2 b,vec4 r){r.xy=p.x>0.0 ? r.xy : r.zw;r.x=p.y>0.0 ? r.x : r.y;vec2 q=abs(p)-b+r.x;return min(max(q.x,q.y),0.0)+length(max(q,0.0))-r.x;}float sdSharpBox(vec2 p,vec2 b){vec2 q=abs(p)-b;return max(q.x,q.y);}void main(void){
|
|
@@ -33,38 +33,20 @@ fragColor=distanceToColor(d,vFillColor,vStrokeColor,vHalfStrokeWidth);if(fragCol
|
|
|
33
33
|
#else
|
|
34
34
|
fragColor=vFillColor;
|
|
35
35
|
#endif
|
|
36
|
-
if(uPickingEnabled){fragColor=vPickingColor;}}`;
|
|
37
|
-
// Nvidia optimizes away the calculation necessary for emulated fp64
|
|
38
|
-
#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
|
|
39
|
-
`;case"intel":return` #define INTEL_GPU
|
|
40
|
-
// Intel optimizes away the calculation necessary for emulated fp64
|
|
41
|
-
#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
|
|
42
|
-
// Intel's built-in 'tan' function doesn't have acceptable precision
|
|
43
|
-
#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
|
|
44
|
-
// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
|
|
45
|
-
#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
|
|
46
|
-
`;case"amd":return` #define AMD_GPU
|
|
47
|
-
`;default:return` #define DEFAULT_GPU
|
|
48
|
-
// Prevent driver from optimizing away the calculation necessary for emulated fp64
|
|
49
|
-
#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
|
|
50
|
-
// Intel's built-in 'tan' function doesn't have acceptable precision
|
|
51
|
-
#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
|
|
52
|
-
// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
|
|
53
|
-
#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
|
|
54
|
-
`}}const z2=7936,U2=7937,G2=7938,H2=35724;function V2(t){const e=t.getExtension("WEBGL_debug_renderer_info"),n=t.getParameter(e&&e.UNMASKED_VENDOR_WEBGL||z2),r=t.getParameter(e&&e.UNMASKED_RENDERER_WEBGL||U2);return{gpuVendor:Q2(n,r),vendor:n,renderer:r,version:t.getParameter(G2),shadingLanguageVersion:t.getParameter(H2)}}function Q2(t,e){return t.match(/NVIDIA/i)||e.match(/NVIDIA/i)?"NVIDIA":t.match(/INTEL/i)||e.match(/INTEL/i)?"INTEL":t.match(/AMD/i)||e.match(/AMD/i)||t.match(/ATI/i)||e.match(/ATI/i)?"AMD":"UNKNOWN GPU"}function La(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function w0(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Fr(){}var Ir=.7,ts=1/Ir,Cn="\\s*([+-]?\\d+)\\s*",Tr="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",et="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",j2=/^#([0-9a-f]{3,8})$/,Y2=new RegExp("^rgb\\("+[Cn,Cn,Cn]+"\\)$"),W2=new RegExp("^rgb\\("+[et,et,et]+"\\)$"),X2=new RegExp("^rgba\\("+[Cn,Cn,Cn,Tr]+"\\)$"),Z2=new RegExp("^rgba\\("+[et,et,et,Tr]+"\\)$"),K2=new RegExp("^hsl\\("+[Tr,et,et]+"\\)$"),q2=new RegExp("^hsla\\("+[Tr,et,et,Tr]+"\\)$"),v0={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};La(Fr,Pr,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:E0,formatHex:E0,formatHsl:J2,formatRgb:C0,toString:C0});function E0(){return this.rgb().formatHex()}function J2(){return F0(this).formatHsl()}function C0(){return this.rgb().formatRgb()}function Pr(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=j2.exec(t))?(n=e[1].length,e=parseInt(e[1],16),n===6?D0(e):n===3?new Ee(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?ns(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?ns(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Y2.exec(t))?new Ee(e[1],e[2],e[3],1):(e=W2.exec(t))?new Ee(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=X2.exec(t))?ns(e[1],e[2],e[3],e[4]):(e=Z2.exec(t))?ns(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=K2.exec(t))?B0(e[1],e[2]/100,e[3]/100,1):(e=q2.exec(t))?B0(e[1],e[2]/100,e[3]/100,e[4]):v0.hasOwnProperty(t)?D0(v0[t]):t==="transparent"?new Ee(NaN,NaN,NaN,0):null}function D0(t){return new Ee(t>>16&255,t>>8&255,t&255,1)}function ns(t,e,n,r){return r<=0&&(t=e=n=NaN),new Ee(t,e,n,r)}function _2(t){return t instanceof Fr||(t=Pr(t)),t?(t=t.rgb(),new Ee(t.r,t.g,t.b,t.opacity)):new Ee}function $2(t,e,n,r){return arguments.length===1?_2(t):new Ee(t,e,n,r==null?1:r)}function Ee(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}La(Ee,$2,w0(Fr,{brighter:function(t){return t=t==null?ts:Math.pow(ts,t),new Ee(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=t==null?Ir:Math.pow(Ir,t),new Ee(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:S0,formatHex:S0,formatRgb:M0,toString:M0}));function S0(){return"#"+Ra(this.r)+Ra(this.g)+Ra(this.b)}function M0(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"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))+(t===1?")":", "+t+")")}function Ra(t){return t=Math.max(0,Math.min(255,Math.round(t)||0)),(t<16?"0":"")+t.toString(16)}function B0(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new tt(t,e,n,r)}function F0(t){if(t instanceof tt)return new tt(t.h,t.s,t.l,t.opacity);if(t instanceof Fr||(t=Pr(t)),!t)return new tt;if(t instanceof tt)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),s=Math.max(e,n,r),o=NaN,a=s-i,u=(s+i)/2;return a?(e===s?o=(n-r)/a+(n<r)*6:n===s?o=(r-e)/a+2:o=(e-n)/a+4,a/=u<.5?s+i:2-s-i,o*=60):a=u>0&&u<1?0:o,new tt(o,a,u,t.opacity)}function ew(t,e,n,r){return arguments.length===1?F0(t):new tt(t,e,n,r==null?1:r)}function tt(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}La(tt,ew,w0(Fr,{brighter:function(t){return t=t==null?ts:Math.pow(ts,t),new tt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?Ir:Math.pow(Ir,t),new tt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Ee(Na(t>=240?t-240:t+120,i,r),Na(t,i,r),Na(t<120?t+240:t-120,i,r),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 t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(t===1?")":", "+t+")")}}));function Na(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const ka="attr_",I0="uDomain_",tw="range_",T0="scale_",P0="getScaled_",Oa="uRangeTexture_",L0=3402823466e29;function nw(t){const e=t.match(/^(?:(\w+)-)?(\w+)$/);if(!e)throw new Error("Not a scale type: "+t);return{family:e[1]||"continuous",transform:e[2]}}function rw(t,e){let n;if(Li(t))n=Kt(cl(t)(e));else if(X(e))if(Wt(t))n=sw(e);else throw new Error(`String values are not supported on the "${t}" channel: ${e}`);else if(Qr(e))n=Kt(e?1:0);else if(e===null)if(Wt(t))n=Kt([0,0,0]);else throw new Error(`null value is not supported on the "${t}" chanel.`);else n=Kt(e);return`
|
|
36
|
+
if(uPickingEnabled){fragColor=vPickingColor;}}`;const ga="attr_",qf="uDomain_",Q2="range_",Jf="scale_",_f="getScaled_",ma="uRangeTexture_",$f=3402823466e29;function V2(t){const e=t.match(/^(?:(\w+)-)?(\w+)$/);if(!e)throw new Error("Not a scale type: "+t);return{family:e[1]||"continuous",transform:e[2]}}function j2(t,e){let n;if(Bi(t))n=Kt(zl(t)(e));else if(W(e))if(Yt(t))n=W2(e);else throw new Error(`String values are not supported on the "${t}" channel: ${e}`);else if(Ur(e))n=Kt(e?1:0);else if(e===null)if(Yt(t))n=Kt([0,0,0]);else throw new Error(`null value is not supported on the "${t}" chanel.`);else n=Kt(e);return`
|
|
55
37
|
#define ${t}_DEFINED
|
|
56
|
-
${n.type} ${
|
|
38
|
+
${n.type} ${_f}${t}() {
|
|
57
39
|
// Constant value
|
|
58
40
|
return ${n};
|
|
59
|
-
}`}function
|
|
60
|
-
${m} ${
|
|
61
|
-
${
|
|
41
|
+
}`}function Y2(t,e,n){var B,T;if(Fe(n))throw new Error(`Cannot create scale for "value": ${JSON.stringify(n)}`);const r=pn(t),i=ga+t,s=qf+r,o=Q2+r,a=Ki(e.type),u=a?"vec2":"float",c=e.domain?e.domain().length:void 0;let f;const l=[];l.push(""),l.push("/".repeat(70)),l.push(`// Channel: ${t}`),l.push(""),l.push(`#define ${t}_DEFINED`);const{transform:h}=V2(e.type),p=(L,...ce)=>X2.apply(null,[L,"value",...ce]);let d;switch(h){case"linear":d=p("scaleLinear","domain",o);break;case"log":d=p("scaleLog","domain",o,e.base());break;case"symlog":d=p("scaleSymlog","domain",o,e.constant());break;case"pow":case"sqrt":d=p("scalePow","domain",o,e.exponent());break;case"index":case"locus":d=p("scaleBandHp","domain",o,e.paddingInner(),e.paddingOuter(),e.align(),(B=n.band)!=null?B:.5);break;case"point":case"band":d=p("scaleBand","domain",o,e.paddingInner(),e.paddingOuter(),e.align(),(T=n.band)!=null?T:.5);break;case"ordinal":case"null":case"identity":d=p("scaleIdentity");break;case"threshold":break;default:throw new Error(`Unsupported scale type: ${e.type}! ${t}: ${JSON.stringify(n)}`)}const g=yi(e.type)||Ve(e.type)&&Yt(t)?[0,1]:e.range?e.range():void 0;if(g&&t==r&&g.length&&g.every(de)){const L=e0(g);l.push(`const ${L.type} ${o} = ${L};`)}const m=Yt(t)?"vec3":"float";let A;if(Yt(t)){const L=ma+r;if(t==r&&l.push(`uniform sampler2D ${L};`),Ve(e.type))A=`getInterpolatedColor(${L}, transformed)`;else if(Ht(e.type)||dn(e.type))A=`getDiscreteColor(${L}, int(transformed))`;else throw new Error("Problem with color scale!")}else if(e.type==="ordinal"||dn(e.type)){const L=ma+r;t==r&&l.push(`uniform sampler2D ${L};`),A=`getDiscreteColor(${L}, int(transformed)).r`}yr(n)?l.push(`uniform highp ${u} ${i};`):l.push(`in highp ${u} ${i};`);const w=[],y=Ve(e.type)&&c>2,v=dn(e.type)||y;if(w.push("int slot = 0;"),v){const L=s;w.push(y?`while (slot < ${L}.length() - 2 && value >= ${L}[slot + 1]) { slot++; }`:`while (slot < ${L}.length() && value >= ${L}[slot]) { slot++; }`)}const S=Ve(e.type)||dn(e.type)||["band","point"].includes(e.type);if(d){const L=s;S&&(a?w.push(`vec3 domain = ${L};`):w.push(`vec2 domain = vec2(${L}[slot], ${L}[slot + 1]);`)),w.push(`float transformed = ${d};`),y&&w.push(`transformed = (float(slot) + transformed) / (float(${L}.length()) - 1.0);`)}else w.push("float transformed = float(slot);");"clamp"in e&&e.clamp()&&w.push(`transformed = clampToRange(transformed, ${e0(g)});`),w.push(`return ${A!=null?A:"transformed"};`),l.push(`
|
|
42
|
+
${m} ${Jf}${t}(${u} value) {
|
|
43
|
+
${w.map(L=>` ${L}
|
|
62
44
|
`).join("")}
|
|
63
|
-
}`),
|
|
64
|
-
${m} ${
|
|
65
|
-
return ${
|
|
66
|
-
}`);const
|
|
67
|
-
`);if(
|
|
45
|
+
}`),l.push(`
|
|
46
|
+
${m} ${_f}${t}() {
|
|
47
|
+
return ${Jf}${t}(${i});
|
|
48
|
+
}`);const E=l.join(`
|
|
49
|
+
`);if(S&&t==r){const L=Ve(e.type)||dn(e.type)?c:2;f=a?`highp vec3 ${s};`:`mediump float ${s}[${L}];`}return{glsl:E,domainUniform:f}}function Aa(t){if(!de(t))throw new Error(`Not a number: ${t}`);if(t==1/0)return""+$f;if(t==-1/0)return""+-$f;{let e=`${t}`;return/^(-)?\d+$/.test(e)&&(e+=".0"),e}}function Kt(t){typeof t=="number"&&(t=[t]);const e=t.length;if(e<1||e>4)throw new Error("Invalid number of components: "+e);let n,r;return e>1?(n=`vec${e}`,r=`${n}(${t.map(Aa).join(", ")})`):(n="float",r=Aa(t[0])),Object.assign(r,{type:n,numComponents:e})}function W2(t){const e=Nt(t).rgb();return Kt([e.r,e.g,e.b].map(n=>n/255))}function e0(t){return Kt([t[0],Be(t)])}function X2(t,...e){const n=[];for(const r of e)de(r)?n.push(Aa(r)):Ce(r)?n.push(Kt(r)):n.push(r);return`${t}(${n.join(", ")})`}function Ki(t){return t=="index"||t=="locus"}function xa(t,e){const r=t%2048,i=Math.round(t-r);return e!=null||(e=[]),e[0]=i,e[1]=r,e}function Z2(t){return[...xa(t[0]),t[1]-t[0]]}class K2{constructor(e){this.size=e,this.arrays={},this.pushers=[],this.dataUpdaters=[],this.vertexCount=0}addConverter(e,n){const r=this.createUpdater(ga+e,n.numComponents||1,n.arrayReference),i=n.f;this.dataUpdaters.push(n.arrayReference?s=>r(i(s)):s=>r(i(s)))}createUpdater(e,n,r){if(!de(this.size))throw new Error("The number of vertices must be defined!");let i,s,o=0;const a=new Float32Array(this.size*n);if(this.arrays[e]={data:a,numComponents:n},n==1){let u=0;const c=f=>{u=+f};i=()=>{a[o++]=u},s=c}else{let u=r!=null?r:[0];const c=r?f=>{}:f=>{u=f};switch(n){case 1:break;case 2:i=()=>{a[o++]=u[0],a[o++]=u[1]},s=c;break;case 3:i=()=>{a[o++]=u[0],a[o++]=u[1],a[o++]=u[2]},s=c;break;case 4:i=()=>{a[o++]=u[0],a[o++]=u[1],a[o++]=u[2],a[o++]=u[3]},s=c;break;default:throw new Error("Invalid numComponents: "+n)}}return this.pushers.push(i),s}_unrollPushAll(){let e="",n="";for(let i=0;i<this.pushers.length;i++)e+=`const p${i} = that.pushers[${i}];
|
|
68
50
|
`,n+=`p${i}();
|
|
69
51
|
`;const r=new Function("that",`${e}
|
|
70
52
|
|
|
@@ -72,64 +54,8 @@ ${m} ${P0}${t}() {
|
|
|
72
54
|
${n}
|
|
73
55
|
that.vertexCount++;
|
|
74
56
|
};
|
|
75
|
-
`);this.pushAll=r(this)}pushAll(){this.size>1e5?this._unrollPushAll():this.pushAll=()=>{for(let n=0;n<this.pushers.length;n++)this.pushers[n]();this.vertexCount++},this.pushAll()}updateFromDatum(e){for(let n=0;n<this.dataUpdaters.length;n++)this.dataUpdaters[n](e)}pushFromDatum(e){this.updateFromDatum(e),this.pushAll()}}const
|
|
76
|
-
|
|
77
|
-
float a_hi=t*ONE-(t-a);float a_lo=a*ONE-a_hi;
|
|
78
|
-
#else
|
|
79
|
-
float a_hi=t-(t-a);float a_lo=a-a_hi;
|
|
80
|
-
#endif
|
|
81
|
-
return vec2(a_hi,a_lo);}vec2 split2(vec2 a){vec2 b=split(a.x);b.y+=a.y;return b;}vec2 quickTwoSum(float a,float b){
|
|
82
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
83
|
-
float sum=(a+b)*ONE;float err=b-(sum-a)*ONE;
|
|
84
|
-
#else
|
|
85
|
-
float sum=a+b;float err=b-(sum-a);
|
|
86
|
-
#endif
|
|
87
|
-
return vec2(sum,err);}vec2 twoSum(float a,float b){float s=(a+b);
|
|
88
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
89
|
-
float v=(s*ONE-a)*ONE;float err=(a-(s-v)*ONE)*ONE*ONE*ONE+(b-v);
|
|
90
|
-
#else
|
|
91
|
-
float v=s-a;float err=(a-(s-v))+(b-v);
|
|
92
|
-
#endif
|
|
93
|
-
return vec2(s,err);}vec2 twoSub(float a,float b){float s=(a-b);
|
|
94
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
95
|
-
float v=(s*ONE-a)*ONE;float err=(a-(s-v)*ONE)*ONE*ONE*ONE-(b+v);
|
|
96
|
-
#else
|
|
97
|
-
float v=s-a;float err=(a-(s-v))-(b+v);
|
|
98
|
-
#endif
|
|
99
|
-
return vec2(s,err);}vec2 twoSqr(float a){float prod=a*a;vec2 a_fp64=split(a);
|
|
100
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
101
|
-
float err=((a_fp64.x*a_fp64.x-prod)*ONE+2.0*a_fp64.x*a_fp64.y*ONE*ONE)+a_fp64.y*a_fp64.y*ONE*ONE*ONE;
|
|
102
|
-
#else
|
|
103
|
-
float err=((a_fp64.x*a_fp64.x-prod)+2.0*a_fp64.x*a_fp64.y)+a_fp64.y*a_fp64.y;
|
|
104
|
-
#endif
|
|
105
|
-
return vec2(prod,err);}vec2 twoProd(float a,float b){float prod=a*b;vec2 a_fp64=split(a);vec2 b_fp64=split(b);float err=((a_fp64.x*b_fp64.x-prod)+a_fp64.x*b_fp64.y+a_fp64.y*b_fp64.x)+a_fp64.y*b_fp64.y;return vec2(prod,err);}vec2 sum_fp64(vec2 a,vec2 b){vec2 s,t;s=twoSum(a.x,b.x);t=twoSum(a.y,b.y);s.y+=t.x;s=quickTwoSum(s.x,s.y);s.y+=t.y;s=quickTwoSum(s.x,s.y);return s;}vec2 sub_fp64(vec2 a,vec2 b){vec2 s,t;s=twoSub(a.x,b.x);t=twoSub(a.y,b.y);s.y+=t.x;s=quickTwoSum(s.x,s.y);s.y+=t.y;s=quickTwoSum(s.x,s.y);return s;}vec2 mul_fp64(vec2 a,vec2 b){vec2 prod=twoProd(a.x,b.x);prod.y+=a.x*b.y;
|
|
106
|
-
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
107
|
-
prod=split2(prod);
|
|
108
|
-
#endif
|
|
109
|
-
prod=quickTwoSum(prod.x,prod.y);prod.y+=a.y*b.x;
|
|
110
|
-
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
111
|
-
prod=split2(prod);
|
|
112
|
-
#endif
|
|
113
|
-
prod=quickTwoSum(prod.x,prod.y);return prod;}vec2 div_fp64(vec2 a,vec2 b){float xn=1.0/b.x;
|
|
114
|
-
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
115
|
-
vec2 yn=mul_fp64(a,vec2(xn,0));
|
|
116
|
-
#else
|
|
117
|
-
vec2 yn=a*xn;
|
|
118
|
-
#endif
|
|
119
|
-
float diff=(sub_fp64(a,mul_fp64(b,yn))).x;vec2 prod=twoProd(xn,diff);return sum_fp64(yn,prod);}vec2 sqrt_fp64(vec2 a){if(a.x==0.0&&a.y==0.0)return vec2(0.0,0.0);if(a.x<0.0)return vec2(0.0/0.0,0.0/0.0);float x=1.0/sqrt(a.x);float yn=a.x*x;
|
|
120
|
-
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
121
|
-
vec2 yn_sqr=twoSqr(yn)*ONE;
|
|
122
|
-
#else
|
|
123
|
-
vec2 yn_sqr=twoSqr(yn);
|
|
124
|
-
#endif
|
|
125
|
-
float diff=sub_fp64(a,yn_sqr).x;vec2 prod=twoProd(x*0.5,diff);
|
|
126
|
-
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
127
|
-
return sum_fp64(split(yn),prod);
|
|
128
|
-
#else
|
|
129
|
-
return sum_fp64(vec2(yn,0.0),prod);
|
|
130
|
-
#endif
|
|
131
|
-
}`,N0=`#define PI 3.141593
|
|
132
|
-
uniform vec2 uViewOffset;uniform vec2 uViewScale;uniform vec2 uViewportSize;uniform lowp float uDevicePixelRatio;uniform lowp float uViewOpacity;/***Maps a coordinate on the unit scale to a normalized device coordinate.*(0,0)is at the bottom left corner.*/vec4 unitToNdc(vec2 coord){return vec4((coord*uViewScale+uViewOffset)*2.0-1.0,0.0,1.0);}vec4 unitToNdc(float x,float y){return unitToNdc(vec2(x,y));}vec4 pixelsToNdc(vec2 coord){return unitToNdc(coord/uViewportSize);}vec4 pixelsToNdc(float x,float y){return pixelsToNdc(vec2(x,y));}float linearstep(float edge0,float edge1,float x){return clamp((x-edge0)/(edge1-edge0),0.0,1.0);}/***Specialized linearstep for doing antialiasing*/float distanceToRatio(float d){return clamp(d*uDevicePixelRatio+0.5,0.0,1.0);}vec4 distanceToColor(float d,vec4 fill,vec4 stroke,float halfStrokeWidth){if(halfStrokeWidth>0.0){float sd=abs(d)-halfStrokeWidth;return mix(stroke,d<=0.0 ? fill : vec4(0.0),distanceToRatio(sd));}else{return fill*distanceToRatio(-d);}}`,Aw="vec3 getDiscreteColor(sampler2D s,int index){return texelFetch(s,ivec2(index % textureSize(s,0).x,0),0).rgb;}vec3 getInterpolatedColor(sampler2D s,float unitValue){return texture(s,vec2(unitValue,0.0)).rgb;}float clampToRange(float value,vec2 range){return clamp(value,min(range[0],range[1]),max(range[0],range[1]));}float scaleIdentity(float value){return value;}float scaleLinear(float value,vec2 domain,vec2 range){float domainSpan=domain[1]-domain[0];float rangeSpan=range[1]-range[0];return(value-domain[0])/domainSpan*rangeSpan+range[0];}float scaleLog(float value,vec2 domain,vec2 range,float base){return scaleLinear(log(value)/log(base),log(domain)/log(base),range);}float symlog(float value,float constant){return sign(value)*log(abs(value/constant)+1.0);}float scaleSymlog(float value,vec2 domain,vec2 range,float constant){return scaleLinear(symlog(value,constant),vec2(symlog(domain[0],constant),symlog(domain[1],constant)),range);}float scalePow(float value,vec2 domain,vec2 range,float exponent){return scaleLinear(pow(abs(value),exponent)*sign(value),pow(abs(domain),vec2(exponent))*sign(domain),range);}float scaleBand(float value,vec2 domainExtent,vec2 range,float paddingInner,float paddingOuter,float align,float band){float start=range[0];float stop=range[1];float n=domainExtent[1]-domainExtent[0];paddingInner=int(n)>1 ? paddingInner : 0.0;float step=(stop-start)/max(1.0,n-paddingInner+paddingOuter*2.0);start+=(stop-start-step*(n-paddingInner))*align;float bandwidth=step*(1.0-paddingInner);return start+(value-domainExtent[0])*step+bandwidth*band;}",xw="float scaleIdentityFp64(vec2 value){return value[0];}float scaleLinearFp64(vec2 value,vec4 domain,vec2 range){vec2 domainSpan=sub_fp64(domain.zw,domain.xy);float rangeSpan=range[1]-range[0];float unitValue=div_fp64(sub_fp64(value,domain.xy),domainSpan).x;return unitValue*rangeSpan+range[0];}float scaleBandFp64(vec2 value,vec4 domainExtent,vec2 range,float paddingInner,float paddingOuter,float align,float band){float start=range[0];float stop=range[1];vec2 domainSpan=sub_fp64(domainExtent.zw,domainExtent.xy);float n=domainSpan.x;float step=(stop-start)/max(1.0,n-paddingInner+paddingOuter*2.0);start+=(stop-start-step*(n-paddingInner))*align;float bandwidth=step*(1.0-paddingInner);return start+sub_fp64(value,domainExtent.xy).x*step+bandwidth*band;}",yw=`/***Describes where a sample facet should be shown. Interpolating between the*current and target positions/heights allows for transitioning between facet*configurations.*/struct SampleFacetPosition{float pos;float height;float targetPos;float targetHeight;};/***Trasition fraction[0,1]between the current and target configurations.*/uniform float uTransitionOffset;
|
|
57
|
+
`);this.pushAll=r(this)}pushAll(){this.size>1e5?this._unrollPushAll():this.pushAll=()=>{for(let n=0;n<this.pushers.length;n++)this.pushers[n]();this.vertexCount++},this.pushAll()}updateFromDatum(e){for(let n=0;n<this.dataUpdaters.length;n++)this.dataUpdaters[n](e)}pushFromDatum(e){this.updateFromDatum(e),this.pushAll()}}const Cn=5,ya=127;function ba(t){const e=[];for(let d=0;d<=ya;d++)e.push(void 0);const n=new Map;for(const d of t.chars)d.id<=ya?e[d.id]=d:n.set(d.id,d);const r=8722;n.has(r)||n.set(r,e["-".charCodeAt(0)]);function i(d){return(d<=ya?e[d]:n.get(d))||e[63]}function s(d){return i(d.charCodeAt(0))}const o=t.common.base,a=s("x"),u=s("X"),c=s("q"),f=a.height-Cn*2,l=u.height-Cn*2,h=c.height-a.height+c.yoffset-a.yoffset;function p(d,g=1){let m=0;for(let A=0;A<d.length;A++)m+=i(d.charCodeAt(A)).xadvance;return m/o*g}return{measureWidth:p,getCharByCode:i,getChar:s,xHeight:f,capHeight:l,descent:h,common:t.common}}function q2(t,e=0,n=1){return Math.max(e,Math.min(n,t))}const J2=2**31-1;function _2(t,e){const n=new Int32Array(t);n.fill(J2);const r=new Int32Array(t),i=e[0],o=(e[1]-e[0])/t,a=l=>q2(Math.floor((l-i)/o),0,t-1),u=(l,h,p,d)=>{const g=a(l),m=a(h);for(let A=g;A<=m;A++)n[A]>p&&(n[A]=p),r[A]<d&&(r[A]=d)},c=(l,h)=>[n[a(l)],r[a(h)]],f=()=>{for(let l=1;l<r.length;l++)r[l]<r[l-1]&&(r[l]=r[l-1]);for(let l=r.length-1;l>0;l--)r[l-1]>r[l]&&(r[l-1]=r[l]);return c};return u.getIndex=f,u}class Ir{constructor({encoders:e,numVertices:n=void 0,attributes:r=[],buildXIndex:i=!1}){this.encoders=e,this._buildXIndex=i,this.variableEncoders=Object.fromEntries(Object.entries(e).filter(([s,o])=>r.includes(s)&&o&&o.scale&&!o.constant)),this.allocatedVertices=n,this.variableBuilder=new K2(n);for(const[s,o]of Object.entries(this.variableEncoders)){const a=o.accessor,u=[0,0],c=Ki(o.scale.type),f=o.indexer,l=f?h=>f(a(h)):c?h=>xa(a(h),u):a;this.variableBuilder.addConverter(s,{f:l,numComponents:c?2:1,arrayReference:c?u:void 0})}this.lastOffset=0,this.rangeMap=new $t([],JSON.stringify)}registerBatch(e){var s;const n=this.lastOffset,r=this.variableBuilder.vertexCount,i=r-n;i&&this.rangeMap.set(e,{offset:n,count:i,xIndex:(s=this.xIndexer)==null?void 0:s.getIndex()}),this.lastOffset=r}addBatches(e){for(const[n,r]of e)this.addBatch(n,r)}addBatch(e,n,r=0,i=n.length){for(let s=r;s<i;s++)this.variableBuilder.pushFromDatum(n[s]);this.registerBatch(e)}prepareXIndexer(e){if(!this._buildXIndex)return;const n=this.variableEncoders.x,r=this.variableEncoders.x2;if(n&&r){const i=n.accessor,s=r.accessor;this.xIndexer=_2(50,[i(e[0]),s(Be(e))]);let o=this.variableBuilder.vertexCount;this.addToXIndex=a=>{let u=this.variableBuilder.vertexCount;this.xIndexer(i(a),s(a),o,u),o=u}}else this.xIndexer=void 0,this.addToXIndex=i=>{}}addToXIndex(e){}toArrays(){return{arrays:this.variableBuilder.arrays,vertexCount:this.variableBuilder.vertexCount,allocatedVertices:this.allocatedVertices,rangeMap:this.rangeMap}}}class $2 extends Ir{constructor({encoders:e,attributes:n,tessellationThreshold:r=1/0,visibleRange:i=[-1/0,1/0],numItems:s,buildXIndex:o=!1}){super({encoders:e,attributes:n,numVertices:r==1/0?s*6:void 0,buildXIndex:o}),this.visibleRange=i,this.tessellationThreshold=r||1/0,this.updateFrac=this.variableBuilder.createUpdater("frac",2)}addBatch(e,n,r=0,i=n.length){if(i<=r)return;const s=this.encoders,[o,a]=this.visibleRange,u=h=>h.accessor||(p=>0),c=u(s.x),f=u(s.x2);this.prepareXIndexer(n);const l=[0,0];this.updateFrac(l);for(let h=r;h<i;h++){const p=n[h];let d=c(p),g=f(p);if(d>g&&([d,g]=[g,d]),g<o||d>a)continue;d<o&&(d=o),g>a&&(g=a),this.variableBuilder.updateFromDatum(p),l[0]=0,l[1]=0;const m=1;this.variableBuilder.pushAll();for(let A=0;A<=m;A++)l[0]=A/m,l[1]=0,this.variableBuilder.pushAll(),l[1]=1,this.variableBuilder.pushAll();this.variableBuilder.pushAll(),this.addToXIndex(p)}this.registerBatch(e)}}class eb extends Ir{constructor({encoders:e,attributes:n,tessellationThreshold:r=1/0,visibleRange:i=[-1/0,1/0],numItems:s,buildXIndex:o}){super({encoders:e,attributes:n,numVertices:r==1/0?s*6:void 0,buildXIndex:o}),this.visibleRange=i,this.tessellationThreshold=r||1/0,this.updateSide=this.variableBuilder.createUpdater("side",1),this.updatePos=this.variableBuilder.createUpdater("pos",1)}addBatch(e,n,r=0,i=n.length){this.prepareXIndexer(n);for(let s=r;s<i;s++){const o=n[s];this.variableBuilder.updateFromDatum(o),this.updateSide(-.5),this.updatePos(0),this.variableBuilder.pushAll();const a=1;for(let u=0;u<=a;u++)this.updatePos(u/a),this.updateSide(-.5),this.variableBuilder.pushAll(),this.updateSide(.5),this.variableBuilder.pushAll();this.variableBuilder.pushAll(),this.addToXIndex(o)}this.registerBatch(e)}}class tb extends Ir{constructor({encoders:e,attributes:n,numItems:r=void 0}){super({encoders:e,attributes:n,numVertices:r})}}class nb extends Ir{constructor({encoders:e,attributes:n,numItems:r=void 0}){super({encoders:e,attributes:n,numVertices:r})}toArrays(){const e=this.variableBuilder.arrays;for(let n of Object.values(e))n.divisor=1;return super.toArrays()}}class rb extends Ir{constructor({encoders:e,attributes:n,fontMetrics:r,properties:i,numCharacters:s=void 0,buildXIndex:o=!1}){super({encoders:e,attributes:n,numVertices:s*6,buildXIndex:o}),this.metadata=r,this.metrics=r,this.properties=i;const u=e.text.channelDef;this.numberFormat=!Fe(u)&&u.format?re(u.format):c=>c,this.updateVertexCoord=this.variableBuilder.createUpdater("vertexCoord",2),this.updateTextureCoord=this.variableBuilder.createUpdater("textureCoord",2),this.updateWidth=this.variableBuilder.createUpdater("width",1)}addBatch(e,n,r=0,i=n.length){var p;const s=this.properties.align||"left",o=(p=this.properties.logoLetters)!=null?p:!1,a=this.metadata.common.base,u=this.metadata.common.scaleH;let c=-Cn;switch(this.properties.baseline){case"top":c+=this.metrics.capHeight;break;case"middle":c+=this.metrics.capHeight/2;break;case"bottom":c-=this.metrics.descent;break}const f=this.encoders.text.accessor||this.encoders.text,l=[0,0];this.updateVertexCoord(l);const h=[0,0];this.updateTextureCoord(h),this.prepareXIndexer(n);for(let d=r;d<i;d++){const g=n[d],m=this.numberFormat(f(g)),A=W(m)?m:m===null?"":""+m;if(A.length==0)continue;this.variableBuilder.updateFromDatum(g);const w=o?A.length:this.metrics.measureWidth(A);this.updateWidth(w);let y=s=="right"?-w:s=="center"?-w/2:0;if(!o){const B=this.metrics.getCharByCode(A.charCodeAt(0));y-=(B.width-B.xadvance)/a/2}let v=-.5,S=1,E=1;for(let B=0;B<A.length;B++){const T=this.metrics.getCharByCode(A.charCodeAt(B)),L=o?1:T.xadvance/a;if(T.id==32){y+=L;continue}o?(E=(T.width+Cn*2)/T.width,y=-E/2,S=(T.height+Cn*2)/T.height,v=-.5-Cn/T.height):(S=T.height/a,v=-(T.height+T.yoffset+c)/a,E=T.width/a);const ce=T.x,I=T.y;l[0]=y,l[1]=v+S,h[0]=ce/u,h[1]=I/u,this.variableBuilder.pushAll(),l[0]=y+E,l[1]=v+S,h[0]=(ce+T.width)/u,h[1]=I/u,this.variableBuilder.pushAll(),l[0]=y,l[1]=v,h[0]=ce/u,h[1]=(I+T.height)/u,this.variableBuilder.pushAll(),l[0]=y+E,l[1]=v+S,h[0]=(ce+T.width)/u,h[1]=I/u,this.variableBuilder.pushAll(),l[0]=y,l[1]=v,h[0]=ce/u,h[1]=(I+T.height)/u,this.variableBuilder.pushAll(),l[0]=y+E,l[1]=v,h[0]=(ce+T.width)/u,h[1]=(I+T.height)/u,this.variableBuilder.pushAll(),y+=L}this.addToXIndex(n)}this.registerBatch(e)}}var t0=`#define PI 3.141593
|
|
58
|
+
uniform mediump vec2 uViewOffset;uniform mediump vec2 uViewScale;uniform mediump vec2 uViewportSize;uniform lowp float uDevicePixelRatio;uniform lowp float uViewOpacity;/***Maps a coordinate on the unit scale to a normalized device coordinate.*(0,0)is at the bottom left corner.*/vec4 unitToNdc(vec2 coord){return vec4((coord*uViewScale+uViewOffset)*2.0-1.0,0.0,1.0);}vec4 unitToNdc(float x,float y){return unitToNdc(vec2(x,y));}vec4 pixelsToNdc(vec2 coord){return unitToNdc(coord/uViewportSize);}vec4 pixelsToNdc(float x,float y){return pixelsToNdc(vec2(x,y));}float linearstep(float edge0,float edge1,float x){return clamp((x-edge0)/(edge1-edge0),0.0,1.0);}/***Specialized linearstep for doing antialiasing*/float distanceToRatio(float d){return clamp(d*uDevicePixelRatio+0.5,0.0,1.0);}vec4 distanceToColor(float d,vec4 fill,vec4 stroke,float halfStrokeWidth){if(halfStrokeWidth>0.0){float sd=abs(d)-halfStrokeWidth;return mix(stroke,d<=0.0 ? fill : vec4(0.0),distanceToRatio(sd));}else{return fill*distanceToRatio(-d);}}`,ib="const float inf=1.0/0.0;vec3 getDiscreteColor(sampler2D s,int index){return texelFetch(s,ivec2(index % textureSize(s,0).x,0),0).rgb;}vec3 getInterpolatedColor(sampler2D s,float unitValue){return texture(s,vec2(unitValue,0.0)).rgb;}float clampToRange(float value,vec2 range){return clamp(value,min(range[0],range[1]),max(range[0],range[1]));}float scaleIdentity(float value){return value;}float scaleLinear(float value,vec2 domain,vec2 range){float domainSpan=domain[1]-domain[0];float rangeSpan=range[1]-range[0];return(value-domain[0])/domainSpan*rangeSpan+range[0];}float scaleLog(float value,vec2 domain,vec2 range,float base){return scaleLinear(log(value)/log(base),log(domain)/log(base),range);}float symlog(float value,float constant){return sign(value)*log(abs(value/constant)+1.0);}float scaleSymlog(float value,vec2 domain,vec2 range,float constant){return scaleLinear(symlog(value,constant),vec2(symlog(domain[0],constant),symlog(domain[1],constant)),range);}float scalePow(float value,vec2 domain,vec2 range,float exponent){return scaleLinear(pow(abs(value),exponent)*sign(value),pow(abs(domain),vec2(exponent))*sign(domain),range);}float scaleBand(float value,vec2 domainExtent,vec2 range,float paddingInner,float paddingOuter,float align,float band){float start=range[0];float stop=range[1];float rangeSpan=stop-start;float n=domainExtent[1]-domainExtent[0];paddingInner=int(n)>1 ? paddingInner : 0.0;float step=rangeSpan/max(1.0,n-paddingInner+paddingOuter*2.0);start+=(rangeSpan-step*(n-paddingInner))*align;float bandwidth=step*(1.0-paddingInner);return start+(value-domainExtent[0])*step+bandwidth*band;}float scaleBandHp(vec2 value,vec3 domainExtent,vec2 range,float paddingInner,float paddingOuter,float align,float band){float start=range[0];float stop=range[1];float rangeSpan=stop-start;vec2 domainStart=domainExtent.xy;float n=domainExtent[2];float step=rangeSpan/max(1.0,n-paddingInner+paddingOuter*2.0);start+=(rangeSpan-step*(n-paddingInner))*align;float bandwidth=step*(1.0-paddingInner);float hi=max(value[0]-domainStart[0],-inf);float lo=max(value[1]-domainStart[1],-inf);return dot(vec4(start,hi,lo,bandwidth),vec4(1.0,step,step,band));}",sb=`/***Describes where a sample facet should be shown. Interpolating between the*current and target positions/heights allows for transitioning between facet*configurations.*/struct SampleFacetPosition{float pos;float height;float targetPos;float targetHeight;};/***Trasition fraction[0,1]between the current and target configurations.*/uniform float uTransitionOffset;
|
|
133
59
|
#if !defined(SAMPLE_FACET_UNIFORM) && !defined(SAMPLE_FACET_TEXTURE)
|
|
134
60
|
SampleFacetPosition getSampleFacetPos(){return SampleFacetPosition(0.0,1.0,0.0,1.0);}
|
|
135
61
|
#elif defined(SAMPLE_FACET_UNIFORM)
|
|
@@ -137,35 +63,36 @@ SampleFacetPosition getSampleFacetPos(){return SampleFacetPosition(0.0,1.0,0.0,1
|
|
|
137
63
|
#elif defined(SAMPLE_FACET_TEXTURE)
|
|
138
64
|
uniform sampler2D uSampleFacetTexture;SampleFacetPosition getSampleFacetPos(){vec4 texel=texelFetch(uSampleFacetTexture,ivec2(int(attr_facetIndex),0),0);return SampleFacetPosition(1.0-texel.r-texel.g,texel.g,1.0-texel.r-texel.g,texel.g);}
|
|
139
65
|
#endif
|
|
140
|
-
bool isFacetedSamples(SampleFacetPosition facetPos){return facetPos!=SampleFacetPosition(0.0,1.0,0.0,1.0);}bool isFacetedSamples(){return isFacetedSamples(getSampleFacetPos());}bool isInTransit(){return uTransitionOffset>0.0;}float getTransitionFraction(float xPos){return smoothstep(0.0,0.7+uTransitionOffset,(xPos-uTransitionOffset)*2.0);}vec2 applySampleFacet(vec2 pos){SampleFacetPosition facetPos=getSampleFacetPos();if(!isFacetedSamples(facetPos)){return pos;}else if(isInTransit()){vec2 interpolated=mix(vec2(facetPos.pos,facetPos.height),vec2(facetPos.targetPos,facetPos.targetHeight),getTransitionFraction(pos.x));return vec2(pos.x,interpolated[0]+pos.y*interpolated[1]);}else{return vec2(pos.x,facetPos.pos+pos.y*facetPos.height);}}float getSampleFacetHeight(vec2 pos){SampleFacetPosition facetPos=getSampleFacetPos();if(!isFacetedSamples(facetPos)){return 1.0;}else if(isInTransit()){return mix(facetPos.height,facetPos.targetHeight,getTransitionFraction(pos.x));}else{return facetPos.height;}}`,
|
|
66
|
+
bool isFacetedSamples(SampleFacetPosition facetPos){return facetPos!=SampleFacetPosition(0.0,1.0,0.0,1.0);}bool isFacetedSamples(){return isFacetedSamples(getSampleFacetPos());}bool isInTransit(){return uTransitionOffset>0.0;}float getTransitionFraction(float xPos){return smoothstep(0.0,0.7+uTransitionOffset,(xPos-uTransitionOffset)*2.0);}vec2 applySampleFacet(vec2 pos){SampleFacetPosition facetPos=getSampleFacetPos();if(!isFacetedSamples(facetPos)){return pos;}else if(isInTransit()){vec2 interpolated=mix(vec2(facetPos.pos,facetPos.height),vec2(facetPos.targetPos,facetPos.targetHeight),getTransitionFraction(pos.x));return vec2(pos.x,interpolated[0]+pos.y*interpolated[1]);}else{return vec2(pos.x,facetPos.pos+pos.y*facetPos.height);}}float getSampleFacetHeight(vec2 pos){SampleFacetPosition facetPos=getSampleFacetPos();if(!isFacetedSamples(facetPos)){return 1.0;}else if(isInTransit()){return mix(facetPos.height,facetPos.targetHeight,getTransitionFraction(pos.x));}else{return facetPos.height;}}`,ob=`/**Based on concepts presented at:*https:*https:*/uniform bool uPickingEnabled;flat out highp vec4 vPickingColor;/***Passes the unique id to the fragment shader as a color if picking is enabled.*Returns true if picking is enabled.*/bool setupPicking(){if(uPickingEnabled){
|
|
141
67
|
#ifdef uniqueId_DEFINED
|
|
142
68
|
int id=int(getScaled_uniqueId());vPickingColor=vec4(ivec4(id>>0,id>>8,id>>16,0xFF)&0xFF)/float(0xFF);
|
|
143
69
|
#else
|
|
144
70
|
vPickingColor=vec4(1.0);
|
|
145
71
|
#endif
|
|
146
|
-
return true;}return false;}`,
|
|
72
|
+
return true;}return false;}`,ab="uniform bool uPickingEnabled;flat in highp vec4 vPickingColor;";const qi=Symbol("cacheMap");function Dn(t,e,n){let r=Tr(t).get(e);return r===void 0&&(r=n(e),Tr(t).set(e,r)),r}function n0(t,e){Tr(t).delete(e)}function Ji(t,e){const n=Tr(t);for(const r of n.keys())r.startsWith(e)&&n.delete(r);Tr(t).delete(e)}function r0(t){t[qi]=new Map}function Tr(t){return t[qi]||r0(t),t[qi]}function ub(t,e,n,r){const i=W(t)?t:t.name,s=!W(t)&&t.extent||[0,1];if(n===void 0&&!W(t)&&(n=t.count),i){const o=Bo(i);if(he(o)){const a=s0(o,{extent:s,count:n});return _i(e,{minMag:e.LINEAR,format:e.RGB,height:1,wrap:e.CLAMP_TO_EDGE},a,r)}else{if(Ce(o))return i0(o,e);throw new Error("Unknown scheme: "+i)}}}function cb(t,e="rgb",n,r){const i=bi(t,W(e)?e:e.type,W(e)?void 0:e.gamma),s=s0(i);return _i(n,{minMag:n.LINEAR,format:n.RGB,height:1,wrap:n.CLAMP_TO_EDGE},s,r)}function lb(t,e,n,r){const i=Math.max(t.length,n||0),s=new Float32Array(i);for(let o=0;o<i;o++)s[o]=t[o%t.length];return _i(e,{minMag:e.NEAREST,format:e.RED,internalFormat:e.R32F,height:1},s,r)}function i0(t,e,n,r){const i=o0(t,n);return _i(e,{minMag:e.NEAREST,format:e.RGB,height:1},i,r)}function s0(t,{extent:e=[0,1],reverse:n=!1,count:r=256}={}){const i=e[0],s=Be(e)-i,o=Rn(r).map(a=>a/(r-1)).map(a=>i+a/s).map(t);return n&&o.reverse(),o0(o)}function o0(t,e){const n=Math.max(t.length,e||0),r=new Uint8Array(n*3);for(let i=0;i<n;i++){const s=Nt(t[i%t.length]).rgb();r[i*3+0]=s.r,r[i*3+1]=s.g,r[i*3+2]=s.b}return r}class fb{constructor(e,n){this._container=e,this._sizeSource=n,this._shaderCache=new Map,this._listeners=[],this.rangeTextures=new WeakMap;const r=document.createElement("canvas");e.appendChild(r);const i=G2(r,{antialias:!0,depth:!1,premultipliedAlpha:!0});if(!i)throw new Error("Unable to initialize WebGL. Your browser or machine may not support it.");if(!gn(i))throw new Error("Your web browser does not support WebGL 2.0. Chrome, Firefox, and Safari Tech Preview should work.");Kf(i),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),this.canvas=r,this.gl=i,this._pickingAttachmentOptions=[{format:i.RGBA,type:i.UNSIGNED_BYTE,minMag:i.LINEAR,wrap:i.CLAMP_TO_EDGE}],this._pickingBufferInfo=L2(i,this._pickingAttachmentOptions),i.bindFramebuffer(i.FRAMEBUFFER,null),this.adjustGl(),this._resizeObserver=new ResizeObserver(s=>{this.invalidateSize(),this._emit("resize")}),this._resizeObserver.observe(this._container),this._updateDpr()}invalidateSize(){this._logicalCanvasSize=void 0,this._updateDpr(),this.adjustGl()}_updateDpr(){this.dpr=window.devicePixelRatio}compileShader(e,n){const r="#version 300 es",i="precision mediump float;";Ce(n)&&(n=n.join(`
|
|
147
73
|
|
|
148
74
|
`));const s=this.gl,o=n.replaceAll(/ {2,}|^\s*\/\/.*$/gm,"");let a=this._shaderCache.get(o);if(!a){const u=[r,i,n].join(`
|
|
149
75
|
|
|
150
|
-
`);a=s.createShader(e),s.shaderSource(a,u),s.compileShader(a),this._shaderCache.set(o,a)}return a}adjustGl(){const e=this.getLogicalCanvasSize();this.canvas.style.width=`${e.width}px`,this.canvas.style.height=`${e.height}px`;const n=this.getPhysicalCanvasSize(e);this.canvas.width=n.width,this.canvas.height=n.height,
|
|
76
|
+
`);a=s.createShader(e),s.shaderSource(a,u),s.compileShader(a),this._shaderCache.set(o,a)}return a}adjustGl(){const e=this.getLogicalCanvasSize();this.canvas.style.width=`${e.width}px`,this.canvas.style.height=`${e.height}px`;const n=this.getPhysicalCanvasSize(e);this.canvas.width=n.width,this.canvas.height=n.height,R2(this.gl,this._pickingBufferInfo,this._pickingAttachmentOptions)}finalize(){this._resizeObserver.unobserve(this._container),this.canvas.remove()}getPhysicalCanvasSize(e){return e=e||this.getLogicalCanvasSize(),{width:e.width*this.dpr,height:e.height*this.dpr}}getLogicalCanvasSize(){var s,o,a,u;if(this._logicalCanvasSize)return this._logicalCanvasSize;const e=(o=(s=this._sizeSource)==null?void 0:s.call(this))!=null?o:{width:void 0,height:void 0},n=window.getComputedStyle(this._container,null),r=(a=e.width)!=null?a:this._container.clientWidth-parseFloat(n.paddingLeft)-parseFloat(n.paddingRight),i=(u=e.height)!=null?u:this._container.clientHeight-parseFloat(n.paddingTop)-parseFloat(n.paddingBottom);return this._logicalCanvasSize={width:r,height:i},this._logicalCanvasSize}addEventListener(e,n){this._listeners.push({type:e,listener:n})}_emit(e){for(const n of this._listeners)n.type===e&&n.listener()}readPickingPixel(e,n){const r=this.gl;e*=this.dpr,n*=this.dpr;const i=this.getPhysicalCanvasSize().height,s=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this._pickingBufferInfo.framebuffer),r.readPixels(e,i-n-1,1,1,r.RGBA,r.UNSIGNED_BYTE,s),r.bindFramebuffer(r.FRAMEBUFFER,null),s}clearAll(){const e=this.gl,{width:n,height:r}=this.getPhysicalCanvasSize();e.viewport(0,0,n,r),e.disable(e.SCISSOR_TEST),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)}createRangeTexture(e,n=!1){const r=this.rangeTextures.get(e);if(!n&&r)return;function i(o,a){return Ht(a.type)?a.domain().length:a.type=="threshold"?a.domain().length+1:a.type=="quantize"||a.type=="quantile"?o!=null?o:4:o}const s=e.channel;if(Yt(s)){const o=e.getScaleProps(),a=e.getScale();let u;if(o.scheme){let c=W(o.scheme)?void 0:o.scheme.count;c=i(c,a),u=ub(o.scheme,this.gl,c,r)}else{const c=a.range();yi(a.type)?u=cb(c,o.interpolate,this.gl,r):u=i0(c,this.gl,a.domain().length,r)}this.rangeTextures.set(e,u)}else{const o=e.getScale();if(o.type==="ordinal"||dn(o.type)){const a=Bi(s)?zl(s):c=>c,u=e.getScale().range();this.rangeTextures.set(e,lb(u.map(a),this.gl,o.domain().length,r))}}}}function hb(t,e="",n=0){const r=/ERROR:\s*\d+:(\d+)/gi,i=[...e.matchAll(r)],s=new Map(i.map((o,a)=>{const u=parseInt(o[1]),c=i[a+1],f=c?c.index:e.length,l=e.substring(o.index,f);return[u-1,l]}));return t.split(`
|
|
151
77
|
`).map((o,a)=>{const u=s.get(a);return`${a+1+n}: ${o}${u?`
|
|
152
78
|
|
|
153
79
|
^^^ ${u}`:""}`}).join(`
|
|
154
|
-
`)}function
|
|
155
|
-
Error compiling: ${s}`,t.deleteShader(u));t.deleteProgram(r)}if(s)return{message:s,detail:o}}return{program:r,getProgramErrors:i}}function
|
|
156
|
-
`+this.domainUniforms.map(
|
|
80
|
+
`)}function db(t,e,n){const r=t.createProgram();t.attachShader(r,e),t.attachShader(r,n),t.linkProgram(r);function i(){let s,o;if(!t.getProgramParameter(r,t.LINK_STATUS)){s=t.getProgramInfoLog(r);for(const u of[e,n])t.getShaderParameter(u,t.COMPILE_STATUS)||(s=t.getShaderInfoLog(u),o=hb(t.getShaderSource(u),s,0)+`
|
|
81
|
+
Error compiling: ${s}`,t.deleteShader(u));t.deleteProgram(r)}if(s)return{message:s,detail:o}}return{program:r,getProgramErrors:i}}function _i(t,e,n,r){return r?pf(t,r,n,e):r=Fr(t,ve(M({},e),{src:n})),r}function pb(...t){const e={get(n,r,i){for(const s of t){const a=s()[r];if(a!==void 0)return a}},has(n,r,i){for(const s of t){const o=s();if(r in o)return!0}return!1}};return new Proxy({},e)}function gb(t){return W(t)||de(t)||Ur(t)}const mb="SAMPLE_FACET_UNIFORM",a0="SAMPLE_FACET_TEXTURE";class Pr{constructor(e){this.unitView=e,this.encoders=void 0,this.bufferInfo=void 0,this.programInfo=void 0,this.vertexArrayInfo=void 0,this.domainUniformInfo=void 0,this.defaultProperties={get clip(){return["x","y"].map(n=>e.getScaleResolution(n)).some(n=>{var r;return(r=n==null?void 0:n.isZoomable())!=null?r:!1})},xOffset:0,yOffset:0,minBufferSize:0},this.properties=pb(typeof this.unitView.spec.mark=="object"?()=>this.unitView.spec.mark:()=>({}),()=>this.defaultProperties)}get opaque(){return!1}getAttributes(){throw new Error("Not implemented!")}getSupportedChannels(){return["sample","facetIndex","x","y","color","opacity","search","uniqueId"]}getDefaultEncoding(){const e={sample:void 0,uniqueId:void 0};return this.isPickingParticipant()&&(e.uniqueId={field:"_uniqueId"}),e}fixEncoding(e){return e}get encoding(){return Dn(this,"encoding",()=>{const e=this.getDefaultEncoding(),n=this.unitView.getEncoding(),r=o=>{const a=this.properties[o];return gb(a)&&{value:a}},i=Object.fromEntries(this.getSupportedChannels().map(o=>[o,r(o)]).filter(o=>o[1].value!==void 0)),s=this.fixEncoding(M(M(M({},e),i),n));for(const o of Object.keys(s))this.getSupportedChannels().includes(o)||delete s[o];return s})}getContext(){return this.unitView.context}getType(){return this.unitView.getMarkType()}initializeData(){}initializeEncoders(){this.encoders=VA(this)}async initializeGraphics(){}updateGraphicsData(){}getSampleFacetMode(){if(this.encoders.facetIndex)return a0;if(this.unitView.getFacetAccessor())return mb}createAndLinkShaders(e,n,r=[]){const i=this.getAttributes();r.push("// view: "+this.unitView.getPathString()),this.domainUniforms=[];let s=[];const o=this.getSampleFacetMode();o&&r.push(`#define ${o}`);for(const h of i){let p;if(h in this.encoding)p=h;else continue;const d=this.encoding[p];if(!!d)if(Fe(d))s.push(j2(p,d.value));else{const g=Me(d)&&d.resolutionChannel||p,m=this.unitView.getScaleResolution(g).getScale(),A=Y2(p,m,d);s.push(A.glsl),A.domainUniform&&this.domainUniforms.push(A.domainUniform)}}const a=this.domainUniforms.length?`layout(std140) uniform Domains {
|
|
82
|
+
`+this.domainUniforms.map(h=>` ${h}
|
|
157
83
|
`).join("")+`};
|
|
158
84
|
|
|
159
|
-
`:"",
|
|
85
|
+
`:"",c=[`precision highp float;
|
|
86
|
+
`,...r,t0,ib,a,...s,sb,ob,e],f=[...r,t0,ab,n],l=this.gl;this.programStatus=db(l,this.glHelper.compileShader(l.VERTEX_SHADER,c),this.glHelper.compileShader(l.FRAGMENT_SHADER,f))}finalizeGraphicsInitialization(){const e=this.programStatus.getProgramErrors();if(e){e.detail&&console.warn(e.detail);const n=new Error("Cannot create shader program: "+e.message);throw n.view=this.unitView,n}this.programInfo=m2(this.gl,this.programStatus.program),delete this.programStatus,this.domainUniforms.length&&(this.domainUniformInfo=f2(this.gl,this.programInfo,"Domains")),this.gl.useProgram(this.programInfo.program),this._setDatums()}_setDatums(){for(const[e,n]of Object.entries(this.encoding))if(yr(n)){const r=this.encoders[e],i=r.indexer?r.indexer(n.datum):Ki(r.scale.type)?xa(+n.datum):+n.datum;ue(this.programInfo,{[ga+e]:i})}}deleteGraphicsData(){if(this.bufferInfo){const e=this.gl;for(let n=0;n<8;n++)e.disableVertexAttribArray(n);Object.values(this.bufferInfo.attribs).forEach(n=>this.gl.deleteBuffer(n.buffer)),this.bufferInfo.indices&&this.gl.deleteBuffer(this.bufferInfo.indices),this.bufferInfo=void 0}}updateBufferInfo(e){if(this.gl.bindVertexArray(null),this.bufferInfo&&e.vertexCount<=this.bufferInfo.allocatedVertices)for(const[n,r]of Object.entries(e.arrays))r.data&&S1(this.gl,this.bufferInfo.attribs[n],r.data,0);else this.deleteGraphicsData(),this.bufferInfo=M1(this.gl,e.arrays,{numElements:e.vertexCount}),this.bufferInfo.allocatedVertices=e.allocatedVertices,this.vertexArrayInfo=void 0}get glHelper(){return this.getContext().glHelper}get gl(){return this.glHelper.gl}onBeforeSampleAnimation(){}onAfterSampleAnimation(){}isReady(){return this.bufferInfo&&this.programInfo}isPickingParticipant(){if(this.properties.tooltip===null)return!1;for(const e of this.unitView.getAncestors())if(!e.isPickingSupported())return!1;return!0}prepareRender(e){var i;const n=this.glHelper,r=this.gl;if(this.vertexArrayInfo||(this.vertexArrayInfo=k2(this.gl,this.programInfo,this.bufferInfo)),r.useProgram(this.programInfo.program),this.domainUniformInfo){for(const[s,o]of Object.entries(this.domainUniformInfo.setters)){const a=s.substring(qf.length),u=this.encoding[a],c=Me(u)&&u.resolutionChannel||a,f=this.unitView.getScaleResolution(c);if(f){const l=f.getScale(),h=Ht(l.type)?[0,l.domain().length]:l.domain();o(Ki(l.type)?Z2(h):h)}}d2(r,this.programInfo,this.domainUniformInfo)}for(const[s,o]of Object.entries(this.encoding))if(Me(o)){const a=Me(o)&&o.resolutionChannel||s,u=this.unitView.getScaleResolution(a),c=n.rangeTextures.get(u);c&&ue(this.programInfo,{[ma+s]:c})}if(this.getSampleFacetMode()==a0){let s;for(const o of this.unitView.getAncestors())if(s=o.getSampleFacetTexture(),s)break;ue(this.programInfo,{uSampleFacetTexture:s})}ue(this.programInfo,{uDevicePixelRatio:this.glHelper.dpr,uViewOpacity:this.unitView.getEffectiveOpacity(),uPickingEnabled:((i=e.picking)!=null?i:!1)&&this.isPickingParticipant()}),ue(this.programInfo,{uSampleFacet:[0,1,0,1],uTransitionOffset:0}),this.opaque||e.picking?r.disable(r.BLEND):r.enable(r.BLEND)}prepareSampleFacetRendering(e){const n=e.sampleFacetRenderingOptions,r=this.programInfo.uniformSetters.uSampleFacet;if(n&&r){const i=n.locSize?n.locSize.location:0,s=n.locSize?n.locSize.size:1;if(i>1||i+s<0)return!1;const o=n.targetLocSize?n.targetLocSize.location:i,a=n.targetLocSize?n.targetLocSize.size:s;this.gl.uniform4f(r.location,i,s,o,a)}return!0}render(e){}createRenderCallback(e,n,r){var o;const i=this;let s;if(this.properties.buildIndex){const a=(o=this.unitView.getScaleResolution("x"))==null?void 0:o.getScale();s=u=>{if(a&&u.xIndex){const c=a.domain(),f=u.xIndex(c[0],c[1]),l=f[0],h=f[1]-l;h>0&&e(l,h)}else e(u.offset,u.count)}}else s=a=>e(a.offset,a.count);if(this.properties.dynamicData)return function(){const u=r().get(n.facetId);u&&u.count&&i.prepareSampleFacetRendering(n)&&s(u)};{const a=r().get(n.facetId);if(a&&a.count)return function(){i.prepareSampleFacetRendering(n)&&s(a)}}}setViewport(e,n){const r=this.glHelper.dpr,i=this.gl,s=this.properties,o=this.glHelper.getLogicalCanvasSize(),a=.5,u=(s.xOffset||0)+a,c=(s.yOffset||0)+a;let f,l=e;if(s.clip||n){let h=0,p=0,d;n?(l=s.clip?e.intersect(n):n,d=[e.width/l.width,e.height/l.height],p=Math.max(0,e.y2-n.y2),h=Math.max(0,e.x2-n.x2)):d=[1,1];const g=[e.x,o.height-l.y2,Math.max(0,l.width),Math.max(0,l.height)].map(y=>y*r),m=g.map(y=>Math.floor(y)),[A,w]=g.map((y,v)=>y-m[v]);i.viewport(...m),i.scissor(...m),i.enable(i.SCISSOR_TEST),f={uViewOffset:[(u+h+A)/l.width,-(c+p-w)/l.height],uViewScale:d}}else i.viewport(0,0,o.width*r,o.height*r),i.disable(i.SCISSOR_TEST),f={uViewOffset:[(e.x+u)/o.width,(o.height-e.y-c-e.height)/o.height],uViewScale:[e.width/o.width,e.height/o.height]};return ue(this.programInfo,f),ue(this.programInfo,{uViewportSize:[e.width,e.height]}),l.height>0&&l.width>0}findDatumAt(e,n){}}function wa(t,e){var s;const n=XA(e);let r=t[e]&&M({},t[e]),i=t[n]&&M({},t[n]);if(!(Fe(r)||Fe(i))){if(r){if(!Me(t[e]))return;if(i){if(r.type!="quantitative"){const o=(1-(r.band||1))/2;r.band=o,i.band=-o}}else if(r.type=="quantitative")i={datum:0};else{i=M({},r);const o=(1-((s=r.band)!=null?s:1))/2;r.band=0+o,i.band=1-o}}else r={value:0},i={value:1};t[e]=r,t[n]=i}}function u0(t,e){t.stroke||(e?t.stroke={value:null}:t.stroke=M({resolutionChannel:"color"},t.color)),Fe(t.stroke)&&t.stroke.value===null&&(t.strokeWidth={value:0}),t.strokeOpacity||(t.strokeOpacity=M({resolutionChannel:"opacity"},t.opacity))}function c0(t,e){Fe(t.fill)&&t.fill.value===null?t.fillOpacity={value:0}:t.fill||(t.fill=M({resolutionChannel:"color"},t.color),!e&&!t.fillOpacity&&(t.fillOpacity={value:0})),t.fillOpacity||(e?t.fillOpacity=M({resolutionChannel:"opacity"},t.opacity):t.fillOpacity={value:0})}class Ab extends Pr{constructor(e){super(e),Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x2:void 0,y2:void 0,filled:!0,color:"#4c78a8",opacity:1,strokeWidth:3,cornerRadius:0,minWidth:.5,minHeight:.5,minOpacity:1,tessellationZoomThreshold:10,tessellationTiles:35}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","fill","stroke","fillOpacity","strokeOpacity","strokeWidth"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","fill","stroke","fillOpacity","strokeOpacity","strokeWidth"]}get opaque(){return Dn(this,"opaque",()=>!this._isRoundedCorners()&&!this._isStroked()&&Fe(this.encoding.fillOpacity)&&this.encoding.fillOpacity.value==1&&this.properties.minOpacity==1)&&this.unitView.getEffectiveOpacity()==1}fixEncoding(e){return wa(e,"x"),wa(e,"y"),u0(e,this.properties.filled),c0(e,this.properties.filled),delete e.color,delete e.opacity,e}onBeforeSampleAnimation(){}onAfterSampleAnimation(){}_isRoundedCorners(){return["","TopLeft","TopRight","BottomLeft","BottomRight"].map(e=>"cornerRadius"+e).some(e=>this.properties[e]>0)}_isStroked(){const e=this.encoding.strokeWidth;return!(Fe(e)&&!e.value)}async initializeGraphics(){await super.initializeGraphics();const e=[];this._isRoundedCorners()&&e.push("ROUNDED_CORNERS"),this._isStroked()&&e.push("STROKED"),this.createAndLinkShaders(U2,H2,e.map(n=>"#define "+n))}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new $2({encoders:this.encoders,attributes:this.getAttributes(),numItems:n,buildXIndex:this.properties.buildIndex});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}prepareRender(e){var r,i,s,o;super.prepareRender(e);const n=this.properties;ue(this.programInfo,{uMinSize:[n.minWidth,n.minHeight],uMinOpacity:n.minOpacity,uCornerRadii:[(r=n.cornerRadiusTopRight)!=null?r:n.cornerRadius,(i=n.cornerRadiusBottomRight)!=null?i:n.cornerRadius,(s=n.cornerRadiusTopLeft)!=null?s:n.cornerRadius,(o=n.cornerRadiusBottomLeft)!=null?o:n.cornerRadius]}),En(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{Mr(n,this.vertexArrayInfo,n.TRIANGLE_STRIP,i,r)},e,()=>this.rangeMap)}findDatumAt(e,n){e=je(e);const r=this.encoders,i=this.unitView.getCollector().facetBatches.get(e),s=r.x.accessor,o=r.x2.accessor;if(i)return i.find(a=>n>=s(a)&&n<o(a))}}var xb=`/***The stroke should only grow inwards,e.g,the diameter/outline is not affected by the stroke width.*Thus,a point that has a zero size has no visible stroke. This allows strokes to be used with*geometric zoom,etc.*/uniform bool uInwardStroke;uniform lowp float uMaxRelativePointDiameter;uniform float uScaleFactor;uniform float uMaxPointSize;uniform float uZoomLevel;uniform float uSemanticThreshold;flat out float vRadius;flat out float vRadiusWithPadding;flat out lowp vec4 vFillColor;flat out lowp vec4 vStrokeColor;flat out lowp float vShape;flat out lowp float vHalfStrokeWidth;flat out mat2 vRotationMatrix;float computeSemanticThresholdFactor(){return getScaled_semanticScore()>=uSemanticThreshold ? 1.0 : 0.0;}/***Computes a scaling factor for the points in a sample-faceted view.*/float getDownscaleFactor(vec2 pos){if(!isFacetedSamples()){return 1.0;}float sampleFacetHeight=getSampleFacetHeight(pos);float maxPointDiameter=sqrt(uMaxPointSize);float factor=sampleFacetHeight*uViewportSize.y*uMaxRelativePointDiameter;return clamp(0.0,maxPointDiameter,factor)/maxPointDiameter;}vec2 getDxDy(){
|
|
160
87
|
#if defined(dx_DEFINED) || defined(dy_DEFINED)
|
|
161
88
|
return vec2(getScaled_dx(),getScaled_dy())/uViewportSize;
|
|
162
89
|
#else
|
|
163
90
|
return vec2(0.0,0.0);
|
|
164
91
|
#endif
|
|
165
|
-
}void main(void){float semanticThresholdFactor=computeSemanticThresholdFactor();if(semanticThresholdFactor<=0.0){gl_PointSize=0.0;return;}float size=getScaled_size();vec2 pos=vec2(getScaled_x(),getScaled_y())+getDxDy();gl_Position=unitToNdc(applySampleFacet(pos));float strokeWidth=getScaled_strokeWidth();float diameter=sqrt(size)*uScaleFactor*semanticThresholdFactor*getDownscaleFactor(pos);float opacity=uViewOpacity;if(strokeWidth<=0.0||uInwardStroke){float minDiameter=1.0/uDevicePixelRatio;if(diameter<minDiameter){opacity*=pow(diameter/minDiameter,2.5);diameter=minDiameter;}}float fillOpa=getScaled_fillOpacity()*opacity;float strokeOpa=getScaled_strokeOpacity()*opacity;vShape=getScaled_shape();bool circle=vShape==0.0;float angleInDegrees=getScaled_angle();float angle=-angleInDegrees*PI/180.0;float sinTheta=sin(angle);float cosTheta=cos(angle);vRotationMatrix=mat2(cosTheta,sinTheta,-sinTheta,cosTheta);float roomForRotation=circle ? 1.0 : sin(mod(angle,PI/2.0)+PI/4.0)/sin(PI/4.0);float aaPadding=1.0/uDevicePixelRatio;float rotationPadding=(diameter*roomForRotation)-diameter;float strokePadding=uInwardStroke ? 0.0 : strokeWidth*(circle ? 1.0 : sqrt(3.0));float padding=rotationPadding+strokePadding+aaPadding;gl_PointSize=(diameter+padding)*uDevicePixelRatio;vRadius=diameter/2.0;vRadiusWithPadding=vRadius+padding/2.0;vHalfStrokeWidth=strokeWidth/2.0;vFillColor=vec4(getScaled_fill()*fillOpa,fillOpa);vStrokeColor=vec4(getScaled_stroke()*strokeOpa,strokeOpa);setupPicking();}`,
|
|
166
|
-
`)+`return function propagate(datum) {${
|
|
92
|
+
}void main(void){float semanticThresholdFactor=computeSemanticThresholdFactor();if(semanticThresholdFactor<=0.0){gl_PointSize=0.0;return;}float size=getScaled_size();vec2 pos=vec2(getScaled_x(),getScaled_y())+getDxDy();gl_Position=unitToNdc(applySampleFacet(pos));float strokeWidth=getScaled_strokeWidth();float diameter=sqrt(size)*uScaleFactor*semanticThresholdFactor*getDownscaleFactor(pos);float opacity=uViewOpacity;if(strokeWidth<=0.0||uInwardStroke){float minDiameter=1.0/uDevicePixelRatio;if(diameter<minDiameter){opacity*=pow(diameter/minDiameter,2.5);diameter=minDiameter;}}float fillOpa=getScaled_fillOpacity()*opacity;float strokeOpa=getScaled_strokeOpacity()*opacity;vShape=getScaled_shape();bool circle=vShape==0.0;float angleInDegrees=getScaled_angle();float angle=-angleInDegrees*PI/180.0;float sinTheta=sin(angle);float cosTheta=cos(angle);vRotationMatrix=mat2(cosTheta,sinTheta,-sinTheta,cosTheta);float roomForRotation=circle ? 1.0 : sin(mod(angle,PI/2.0)+PI/4.0)/sin(PI/4.0);float aaPadding=1.0/uDevicePixelRatio;float rotationPadding=(diameter*roomForRotation)-diameter;float strokePadding=uInwardStroke ? 0.0 : strokeWidth*(circle ? 1.0 : sqrt(3.0));float padding=rotationPadding+strokePadding+aaPadding;gl_PointSize=(diameter+padding)*uDevicePixelRatio;vRadius=diameter/2.0;vRadiusWithPadding=vRadius+padding/2.0;vHalfStrokeWidth=strokeWidth/2.0;vFillColor=vec4(getScaled_fill()*fillOpa,fillOpa);vStrokeColor=vec4(getScaled_stroke()*strokeOpa,strokeOpa);setupPicking();}`,yb="const lowp vec4 white=vec4(1.0);const lowp vec4 black=vec4(0.0,0.0,0.0,1.0);uniform bool uInwardStroke;uniform float uGradientStrength;flat in float vRadius;flat in float vRadiusWithPadding;flat in lowp vec4 vFillColor;flat in lowp vec4 vStrokeColor;flat in lowp float vShape;flat in lowp float vHalfStrokeWidth;flat in mat2 vRotationMatrix;out lowp vec4 fragColor;const float CIRCLE=0.0;const float SQUARE=1.0;const float TRIANGLE_UP=2.0;const float CROSS=3.0;const float DIAMOND=4.0;const float TRIANGLE_DOWN=5.0;const float TRIANGLE_RIGHT=6.0;const float TRIANGLE_LEFT=7.0;float circle(vec2 p,float r){return length(p)-r;}float square(vec2 p,float r){p=abs(p);return max(p.x,p.y)-r;}float equilateralTriangle(vec2 p,float r,bool flip,bool swap){if(swap){p.xy=p.yx;}if(flip){p.y=-p.y;}float k=sqrt(3.0);float kr=k*r;p.y-=kr/2.0;return max((abs(p.x)*k+p.y)/2.0,-p.y-kr);}float crossShape(vec2 p,float r){p=abs(p);vec2 b=vec2(0.4,1.0)*r;vec2 v=abs(p)-b.xy;vec2 h=abs(p)-b.yx;return min(max(v.x,v.y),max(h.x,h.y));}float diamond(vec2 p,float r){p=abs(p);return(max(abs(p.x-p.y),abs(p.x+p.y))-r)/sqrt(2.0);}void main(){float d;vec2 p=vRotationMatrix*(2.0*gl_PointCoord-1.0)*vRadiusWithPadding;float r=vRadius;if(vShape==CIRCLE){d=circle(p,r);}else if(vShape==SQUARE){d=square(p,r);}else if(vShape==TRIANGLE_UP){d=equilateralTriangle(p,r,true,false);}else if(vShape==CROSS){d=crossShape(p,r);}else if(vShape==DIAMOND){d=diamond(p,r);}else if(vShape==TRIANGLE_DOWN){d=equilateralTriangle(p,r,false,false);}else if(vShape==TRIANGLE_RIGHT){d=equilateralTriangle(p,r,false,true);}else if(vShape==TRIANGLE_LEFT){d=equilateralTriangle(p,r,true,true);}else{d=0.0;}if(!uPickingEnabled){lowp vec4 fillColor=mix(vFillColor,white,-d*uGradientStrength/vRadius);fragColor=distanceToColor(d+(uInwardStroke ? vHalfStrokeWidth : 0.0),fillColor,vStrokeColor,vHalfStrokeWidth);}else if(d-vHalfStrokeWidth<=0.0){fragColor=vPickingColor;}else{discard;}}";const rt=1<<0,Ct=1<<1,bb={};class K{get behavior(){return 0}constructor(){this.children=[],this.parent=void 0,this.completed=!1}reset(){this.completed=!1;for(const e of this.children)e.reset()}initialize(){}_updatePropagator(){this._propagate=Function("children",Rn(this.children.length).map(e=>`const child${e} = children[${e}];`).join(`
|
|
93
|
+
`)+`return function propagate(datum) {${Rn(this.children.length).map(e=>`child${e}.handle(datum);`).join(`
|
|
167
94
|
`)}}`)(this.children)}setParent(e){this.parent=e}addChild(e){if(e.parent)throw new Error("Cannot add the child! It already has a parent.");return this.children.push(e),e.setParent(this),this._updatePropagator(),this}adopt(e){e.parent&&e.parent.removeChild(e),this.addChild(e)}adoptChildrenOf(e){for(const n of e.children)this.adopt(n)}insertAsParent(e){if(this.isRoot())throw new Error("Cannot insert a new parent for a root node!");e.parent=this.parent,this.parent.children[this.parent.children.indexOf(this)]=e,this.parent._updatePropagator(),this.parent=void 0,e.addChild(this)}removeChild(e){const n=this.children.indexOf(e);if(n>-1)this.children.splice(n,1),e.parent=void 0,this._updatePropagator();else throw new Error("Trying to remove an unknown child node!")}excise(){if(this.isRoot())throw new Error("Cannot excise root node!");if(this.isTerminal())this.parent.removeChild(this);else if(this.children.length==1){const e=this.children[0];e.setParent(this.parent),this.parent.children[this.parent.children.indexOf(this)]=e,this.parent._updatePropagator(),this.setParent(void 0),this.children.length=0}else throw new Error("Cannot excise a node that has multiple children!")}isRoot(){return!this.parent}isBranching(){return this.children.length>1}isTerminal(){return this.children.length==0}visit(e){e(this);for(const n of this.children)n.visit(e);e.afterChildren&&e.afterChildren(this)}subtreeToString(e=0){var r;const n=this.children.map(i=>i.subtreeToString(e+1)).join("");return" ".repeat(e*2)+"* "+((r=/^class ([A-Za-z0-9_]+)/.exec(""+this.constructor))==null?void 0:r[1])+`
|
|
168
|
-
`+n}getGlobalObject(){return this.parent?this.parent.getGlobalObject():Rw}handle(e){this._propagate(e)}complete(){this.completed=!0;for(const e of this.children)e.complete()}beginBatch(e){for(const n of this.children)n.beginBatch(e)}_propagate(e){}}function j0(t){return t.type=="file"}function Nw(t){return t.type=="facet"}class Y0 extends q{constructor(e){super();this.k=e.size||500,this.reset()}reset(){super.reset(),this.reservoir=[],this.W=void 0,this.ingester=this._initialIngester}_initialIngester(e){this.reservoir.push(e),this.reservoir.length==this.k&&(this.W=Math.exp(Math.log(Math.random())/this.k),this.i=this.k,this.next=this.i,this.ingester=this._finalIngester,this._setNextStop())}_finalIngester(e){++this.i==this.next&&(this.reservoir[Math.floor(Math.random()*this.k)]=e,this.W*=Math.exp(Math.log(Math.random())/this.k),this._setNextStop())}_setNextStop(){this.next+=Math.floor(Math.log(Math.random())/Math.log(1-this.W))+1}handle(e){this.ingester(e)}complete(){for(const e of this.reservoir)this._propagate(e);super.complete()}}function kw(t,e,n){const r=new Y0({type:"sample",size:t});for(const i of e)r.handle(n(i));return r.complete(),r.reservoir}const Ow={};class zw extends Nr{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:.5,y:.5,color:"#4c78a8",filled:!0,opacity:1,size:100,semanticScore:0,shape:"circle",strokeWidth:2,fillGradientStrength:0,dx:0,dy:0,angle:0,sampleFacetPadding:.1,semanticZoomFraction:.02}))}getAttributes(){return["inwardStroke","uniqueId","facetIndex","x","y","size","semanticScore","shape","strokeWidth","gradientStrength","dx","dy","fill","stroke","fillOpacity","strokeOpacity","angle"]}getSupportedChannels(){return[...super.getSupportedChannels(),"size","semanticScore","shape","strokeWidth","dx","dy","fill","stroke","fillOpacity","strokeOpacity","angle"]}getDefaultEncoding(){return T(T({},super.getDefaultEncoding()),Ow)}fixEncoding(e){return V0(e,this.properties.filled),Q0(e,this.properties.filled),delete e.color,delete e.opacity,e}initializeData(){super.initializeData();const e=this.unitView.getAccessor("semanticScore");e&&(this.sampledSemanticScores=Float32Array.from(kw(1e4,this.unitView.getCollector().getData(),e)),this.sampledSemanticScores.sort((n,r)=>n-r))}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(Pw,Lw)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;fe(this.programInfo,{uInwardStroke:e.inwardStroke,uGradientStrength:e.fillGradientStrength,uMaxRelativePointDiameter:1-2*e.sampleFacetPadding})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new dw({encoders:this.encoders,attributes:this.getAttributes(),numItems:Math.max(n,this.properties.minBufferSize||0)});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}_getGeometricScaleFactor(){const e=Math.pow(2,this.properties.geometricZoomBound||0);return Math.pow(Math.min(1,this.unitView.getZoomLevel()/e),1/3)}_getMaxPointSize(){const e=this.encoders.size;return e.constant?e(null):e.scale.range().reduce((n,r)=>Math.max(n,r))}getSemanticThreshold(){if(this.sampledSemanticScores){const e=Math.max(0,1-this.properties.semanticZoomFraction*this.unitView.getZoomLevel());if(e<=0)return-1/0;if(e>=1)return 1/0;{const n=this.sampledSemanticScores;return Zg(n,e)}}else return-1}prepareRender(e){super.prepareRender(e),fe(this.programInfo,{uMaxPointSize:this._getMaxPointSize(),uScaleFactor:this._getGeometricScaleFactor(),uSemanticThreshold:this.getSemanticThreshold()}),En(this.gl,this.programInfo,this.vertexArrayInfo);const n=this.encoders.x;if(n&&!n.constant){const r=oi(n.accessor).left,i=this.unitView.getScaleResolution("x").getScale().domain(),s=hs(i,null,1.01);this._findIndices=o=>{const a=this.unitView.getCollector().facetBatches.get(o);return[r(a,s[0]),r(a,s[s.length-1])]}}}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{const[s,o]=this._findIndices?this._findIndices(e.facetId):[0,i],a=o-s;a&&Mr(n,this.vertexArrayInfo,n.POINTS,a,r+s)},e,()=>this.rangeMap)}}var Uw="const int BUTT=0;const int SQUARE=1;const int ROUND=2;in float pos;in float side;uniform float uMinLength;uniform float uDashTextureSize;uniform lowp int uStrokeCap;flat out vec4 vColor;flat out float vSize;out float vNormalLengthInPixels;out highp vec2 vPosInPixels;void main(void){float pixelSize=1.0/uDevicePixelRatio;float size=getScaled_size();float opacity=getScaled_opacity()*uViewOpacity;if(size<pixelSize){opacity*=size/pixelSize;size=pixelSize;}vec2 a=applySampleFacet(vec2(getScaled_x(),getScaled_y()));vec2 b=applySampleFacet(vec2(getScaled_x2(),getScaled_y2()));vec2 tangent=b-a;float offset=0.0;float relativeDiff=0.0;if(uMinLength>0.0||uStrokeCap!=BUTT){float len=length(tangent*uViewportSize);float diff=max(0.0,uMinLength-len);if(uStrokeCap!=BUTT){diff+=size;}relativeDiff=diff/len;offset=relativeDiff*(pos-0.5);}vec2 p=pos<1.0? a+tangent*(pos+offset): b+tangent*offset;float aaPadding=pixelSize;vec2 normal=normalize(vec2(-tangent.y,tangent.x)/uViewportSize);p+=normal*side*(size+aaPadding)/uViewportSize;gl_Position=unitToNdc(p);vColor=vec4(getScaled_color()*opacity,opacity);vSize=size;vNormalLengthInPixels=side*(size+aaPadding);vPosInPixels=vec2(pos,(1.0-pos))*(1.0+relativeDiff)*length(tangent*uViewportSize)-vec2(uStrokeCap!=BUTT ? size/2.0 : 0.0);setupPicking();}",Gw="const int BUTT=0;const int SQUARE=1;const int ROUND=2;uniform sampler2D uDashTexture;uniform float uDashTextureSize;uniform float uStrokeDashOffset;uniform lowp int uStrokeCap;flat in vec4 vColor;flat in float vSize;in vec2 vPosInPixels;in float vNormalLengthInPixels;out lowp vec4 fragColor;void main(void){float dpr=uDevicePixelRatio;float distanceFromEnd=-min(vPosInPixels[0],vPosInPixels[1]);float distance;if(distanceFromEnd>0.0&&uStrokeCap==ROUND){distance=length(vec2(distanceFromEnd,vNormalLengthInPixels));}else{distance=abs(vNormalLengthInPixels);}float opacity=clamp(((vSize/2.0-distance)*dpr),-0.5,0.5)+0.5;if(uDashTextureSize>0.0){float pos=(vPosInPixels[0]+uStrokeDashOffset)*dpr;float floored=floor(pos);vec2 texelPositions=(floored+vec2(0.5,1.5))/dpr/uDashTextureSize;opacity*=mix(texture(uDashTexture,vec2(texelPositions[0],0)).r,texture(uDashTexture,vec2(texelPositions[1],0)).r,clamp((pos-floored),0.0,1.0));}fragColor=vColor*opacity;if(uPickingEnabled){fragColor=vPickingColor;}}";class Hw extends Nr{constructor(e){super(e);this.dashTextureSize=0,Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x2:void 0,y2:void 0,size:1,color:"black",opacity:1,minLength:0,strokeDash:null,strokeDashOffset:0,strokeCap:"butt"}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","size","color","opacity"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size"]}fixEncoding(e){if(!(e.x&&e.y&&e.x2&&e.y2))if(e.x&&e.x2&&!e.y)e.y={value:.5},e.y2=e.y;else if(e.y&&e.y2&&!e.x)e.x={value:.5},e.x2=e.x;else if(e.x&&!e.y)e.y={value:0},e.y2={value:1},e.x2=e.x;else if(e.y&&!e.x)e.x={value:0},e.x2={value:1},e.y2=e.y;else if(e.x&&e.y&&e.y2)e.x2=e.x;else if(e.y&&e.x&&e.x2)e.y2=e.y;else if(e.y&&e.x)if(!e.x2&&Pe(e.y)&&e.y.type=="quantitative")e.x2=e.x,e.y2={datum:0};else if(!e.y2&&Pe(e.x)&&e.x.type=="quantitative")e.y2=e.y,e.x2={datum:0};else throw new Error("A bug!");else throw new Error("Invalid x and y encodings for rule mark: "+JSON.stringify(e));return e}async initializeGraphics(){if(await super.initializeGraphics(),this.properties.strokeDash){const e=this.gl,n=Vw(this.properties.strokeDash);this.dashTexture=Sr(e,{mag:e.NEAREST,min:e.NEAREST,internalFormat:e.R8,format:e.RED,src:n,height:1}),this.dashTextureSize=n.length}this.createAndLinkShaders(Uw,Gw)}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new hw({encoders:this.encoders,attributes:this.getAttributes(),numItems:Math.max(n,this.properties.minBufferSize||0),buildXIndex:this.properties.buildIndex});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}prepareRender(e){super.prepareRender(e),fe(this.programInfo,{uMinLength:this.properties.minLength,uDashTextureSize:this.dashTextureSize,uStrokeCap:["butt","square","round"].indexOf(this.properties.strokeCap)}),this.dashTexture&&fe(this.programInfo,{uDashTexture:this.dashTexture,uStrokeDashOffset:this.properties.strokeDashOffset}),En(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>Mr(n,this.vertexArrayInfo,n.TRIANGLE_STRIP,i,r),e,()=>this.rangeMap)}}function Vw(t){if(t.length==0||t.length%2||t.findIndex(s=>Math.round(s)!=s||s<1||s>1e3)>=0)throw new Error("Invalid stroke dash pattern: "+JSON.stringify(t));const e=t.reduce((s,o)=>s+o),n=new Uint8Array(e);let r=!0,i=0;for(let s of t){for(;s;)n[i++]=r&&255||0,s--;r=!r}return n}var Qw=`uniform float uSagittaScaleFactor;uniform float uMinSagittaLength;in vec2 strip;out vec4 vColor;out float vSize;out float vNormalLengthInPixels;void main(void){float pixelSize=1.0/uDevicePixelRatio;float opacity=getScaled_opacity()*uViewOpacity;vec2 a=vec2(getScaled_x(),getScaled_y())*uViewportSize;vec2 b=vec2(getScaled_x2(),getScaled_y2())*uViewportSize;vec2 chordVector=b-a;vec2 unitChordVector=normalize(chordVector);vec2 chordNormal=vec2(-unitChordVector.y,unitChordVector.x);float sagitta=max(length(chordVector)/2.0*uSagittaScaleFactor,uMinSagittaLength);bool compress=false;if(compress){float maxSagittaLen=length(chordNormal*uViewportSize);float maxChordLen=length(unitChordVector*uViewportSize);float threshold=maxSagittaLen*0.5;if(sagitta>threshold){float m=(maxSagittaLen-threshold)/(maxChordLen-threshold);sagitta=(sagitta-threshold)*m+threshold;}}vec2 controlOffset=chordNormal*sagitta/0.75;vec2 p1=a;vec2 p2=a+controlOffset;vec2 p3=b+controlOffset;vec2 p4=b;float t=smoothstep(0.0,1.0,strip.x);vec2 C1=p4-3.0*p3+3.0*p2-p1;vec2 C2=3.0*p3-6.0*p2+3.0*p1;vec2 C3=3.0*p2-3.0*p1;vec2 C4=p1;vec2 p;if(t==0.0){p=p1;}else if(t==1.0){p=p4;}else{p=C1*t*t*t+C2*t*t+C3*t+C4;}vec2 tangent=normalize(3.0*C1*t*t+2.0*C2*t+C3);vec2 normal=vec2(-tangent.y,tangent.x);
|
|
95
|
+
`+n}getGlobalObject(){return this.parent?this.parent.getGlobalObject():bb}handle(e){this._propagate(e)}complete(){this.completed=!0;for(const e of this.children)e.complete()}beginBatch(e){for(const n of this.children)n.beginBatch(e)}_propagate(e){}}function l0(t){return t.type=="file"}function wb(t){return t.type=="facet"}class f0 extends K{constructor(e){super(),this.k=e.size||500,this.reset()}reset(){super.reset(),this.reservoir=[],this.W=void 0,this.ingester=this._initialIngester}_initialIngester(e){this.reservoir.push(e),this.reservoir.length==this.k&&(this.W=Math.exp(Math.log(Math.random())/this.k),this.i=this.k,this.next=this.i,this.ingester=this._finalIngester,this._setNextStop())}_finalIngester(e){++this.i==this.next&&(this.reservoir[Math.floor(Math.random()*this.k)]=e,this.W*=Math.exp(Math.log(Math.random())/this.k),this._setNextStop())}_setNextStop(){this.next+=Math.floor(Math.log(Math.random())/Math.log(1-this.W))+1}handle(e){this.ingester(e)}complete(){for(const e of this.reservoir)this._propagate(e);super.complete()}}function vb(t,e,n){const r=new f0({type:"sample",size:t});for(const i of e)r.handle(n(i));return r.complete(),r.reservoir}const Eb={};class Cb extends Pr{constructor(e){super(e),Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:.5,y:.5,color:"#4c78a8",filled:!0,opacity:1,size:100,semanticScore:0,shape:"circle",strokeWidth:2,fillGradientStrength:0,dx:0,dy:0,angle:0,sampleFacetPadding:.1,semanticZoomFraction:.02}))}getAttributes(){return["inwardStroke","uniqueId","facetIndex","x","y","size","semanticScore","shape","strokeWidth","gradientStrength","dx","dy","fill","stroke","fillOpacity","strokeOpacity","angle"]}getSupportedChannels(){return[...super.getSupportedChannels(),"size","semanticScore","shape","strokeWidth","dx","dy","fill","stroke","fillOpacity","strokeOpacity","angle"]}getDefaultEncoding(){return M(M({},super.getDefaultEncoding()),Eb)}fixEncoding(e){return u0(e,this.properties.filled),c0(e,this.properties.filled),delete e.color,delete e.opacity,e}initializeData(){super.initializeData();const e=this.unitView.getAccessor("semanticScore");e&&(this.sampledSemanticScores=Float32Array.from(vb(1e4,this.unitView.getCollector().getData(),e)),this.sampledSemanticScores.sort((n,r)=>n-r))}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(xb,yb)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;ue(this.programInfo,{uInwardStroke:e.inwardStroke,uGradientStrength:e.fillGradientStrength,uMaxRelativePointDiameter:1-2*e.sampleFacetPadding})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new tb({encoders:this.encoders,attributes:this.getAttributes(),numItems:Math.max(n,this.properties.minBufferSize||0)});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}_getGeometricScaleFactor(){const e=Math.pow(2,this.properties.geometricZoomBound||0);return Math.pow(Math.min(1,this.unitView.getZoomLevel()/e),1/3)}_getMaxPointSize(){const e=this.encoders.size;return e.constant?e(null):e.scale.range().reduce((n,r)=>Math.max(n,r))}getSemanticThreshold(){if(this.sampledSemanticScores){const e=Math.max(0,1-this.properties.semanticZoomFraction*this.unitView.getZoomLevel());if(e<=0)return-1/0;if(e>=1)return 1/0;{const n=this.sampledSemanticScores;return tu(n,e)}}else return-1}prepareRender(e){super.prepareRender(e),ue(this.programInfo,{uMaxPointSize:this._getMaxPointSize(),uScaleFactor:this._getGeometricScaleFactor(),uSemanticThreshold:this.getSemanticThreshold()}),En(this.gl,this.programInfo,this.vertexArrayInfo);const n=this.encoders.x;if(n&&!n.constant){const r=Ln(n.accessor).left,i=this.unitView.getScaleResolution("x").getScale().domain(),s=os(i,null,1.01);this._findIndices=o=>{const a=this.unitView.getCollector().facetBatches.get(o);return[r(a,s[0]),r(a,s[s.length-1])]}}}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{const[s,o]=this._findIndices?this._findIndices(e.facetId):[0,i],a=o-s;a&&Mr(n,this.vertexArrayInfo,n.POINTS,a,r+s)},e,()=>this.rangeMap)}}var Db="const int BUTT=0;const int SQUARE=1;const int ROUND=2;in float pos;in float side;uniform float uMinLength;uniform mediump float uDashTextureSize;uniform lowp int uStrokeCap;flat out vec4 vColor;flat out float vSize;out float vNormalLengthInPixels;out highp vec2 vPosInPixels;void main(void){float pixelSize=1.0/uDevicePixelRatio;float size=getScaled_size();float opacity=getScaled_opacity()*uViewOpacity;if(size<pixelSize){opacity*=size/pixelSize;size=pixelSize;}vec2 a=applySampleFacet(vec2(getScaled_x(),getScaled_y()));vec2 b=applySampleFacet(vec2(getScaled_x2(),getScaled_y2()));vec2 tangent=b-a;float offset=0.0;float relativeDiff=0.0;if(uMinLength>0.0||uStrokeCap!=BUTT){float len=length(tangent*uViewportSize);float diff=max(0.0,uMinLength-len);if(uStrokeCap!=BUTT){diff+=size;}relativeDiff=diff/len;offset=relativeDiff*(pos-0.5);}vec2 p=pos<1.0? a+tangent*(pos+offset): b+tangent*offset;float aaPadding=pixelSize;vec2 normal=normalize(vec2(-tangent.y,tangent.x)/uViewportSize);p+=normal*side*(size+aaPadding)/uViewportSize;gl_Position=unitToNdc(p);vColor=vec4(getScaled_color()*opacity,opacity);vSize=size;vNormalLengthInPixels=side*(size+aaPadding);vPosInPixels=vec2(pos,(1.0-pos))*(1.0+relativeDiff)*length(tangent*uViewportSize)-vec2(uStrokeCap!=BUTT ? size/2.0 : 0.0);setupPicking();}",Sb="const int BUTT=0;const int SQUARE=1;const int ROUND=2;uniform sampler2D uDashTexture;uniform float uDashTextureSize;uniform float uStrokeDashOffset;uniform lowp int uStrokeCap;flat in vec4 vColor;flat in float vSize;in vec2 vPosInPixels;in float vNormalLengthInPixels;out lowp vec4 fragColor;void main(void){float dpr=uDevicePixelRatio;float distanceFromEnd=-min(vPosInPixels[0],vPosInPixels[1]);float distance;if(distanceFromEnd>0.0&&uStrokeCap==ROUND){distance=length(vec2(distanceFromEnd,vNormalLengthInPixels));}else{distance=abs(vNormalLengthInPixels);}float opacity=clamp(((vSize/2.0-distance)*dpr),-0.5,0.5)+0.5;if(uDashTextureSize>0.0){float pos=(vPosInPixels[0]+uStrokeDashOffset)*dpr;float floored=floor(pos);vec2 texelPositions=(floored+vec2(0.5,1.5))/dpr/uDashTextureSize;opacity*=mix(texture(uDashTexture,vec2(texelPositions[0],0)).r,texture(uDashTexture,vec2(texelPositions[1],0)).r,clamp((pos-floored),0.0,1.0));}fragColor=vColor*opacity;if(uPickingEnabled){fragColor=vPickingColor;}}";class Bb extends Pr{constructor(e){super(e),this.dashTextureSize=0,Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x2:void 0,y2:void 0,size:1,color:"black",opacity:1,minLength:0,strokeDash:null,strokeDashOffset:0,strokeCap:"butt"}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","size","color","opacity"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size"]}fixEncoding(e){if(!(e.x&&e.y&&e.x2&&e.y2))if(e.x&&e.x2&&!e.y)e.y={value:.5},e.y2=e.y;else if(e.y&&e.y2&&!e.x)e.x={value:.5},e.x2=e.x;else if(e.x&&!e.y)e.y={value:0},e.y2={value:1},e.x2=e.x;else if(e.y&&!e.x)e.x={value:0},e.x2={value:1},e.y2=e.y;else if(e.x&&e.y&&e.y2)e.x2=e.x;else if(e.y&&e.x&&e.x2)e.y2=e.y;else if(e.y&&e.x)if(!e.x2&&Me(e.y)&&e.y.type=="quantitative")e.x2=e.x,e.y2={datum:0};else if(!e.y2&&Me(e.x)&&e.x.type=="quantitative")e.y2=e.y,e.x2={datum:0};else throw new Error("A bug!");else throw new Error("Invalid x and y encodings for rule mark: "+JSON.stringify(e));return e}async initializeGraphics(){if(await super.initializeGraphics(),this.properties.strokeDash){const e=this.gl,n=Fb(this.properties.strokeDash);this.dashTexture=Fr(e,{mag:e.NEAREST,min:e.NEAREST,internalFormat:e.R8,format:e.RED,src:n,height:1}),this.dashTextureSize=n.length}this.createAndLinkShaders(Db,Sb)}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new eb({encoders:this.encoders,attributes:this.getAttributes(),numItems:Math.max(n,this.properties.minBufferSize||0),buildXIndex:this.properties.buildIndex});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}prepareRender(e){super.prepareRender(e),ue(this.programInfo,{uMinLength:this.properties.minLength,uDashTextureSize:this.dashTextureSize,uStrokeCap:["butt","square","round"].indexOf(this.properties.strokeCap)}),this.dashTexture&&ue(this.programInfo,{uDashTexture:this.dashTexture,uStrokeDashOffset:this.properties.strokeDashOffset}),En(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>Mr(n,this.vertexArrayInfo,n.TRIANGLE_STRIP,i,r),e,()=>this.rangeMap)}}function Fb(t){if(t.length==0||t.length%2||t.findIndex(s=>Math.round(s)!=s||s<1||s>1e3)>=0)throw new Error("Invalid stroke dash pattern: "+JSON.stringify(t));const e=t.reduce((s,o)=>s+o),n=new Uint8Array(e);let r=!0,i=0;for(let s of t){for(;s;)n[i++]=r&&255||0,s--;r=!r}return n}var Mb=`uniform float uSagittaScaleFactor;uniform float uMinSagittaLength;in vec2 strip;out vec4 vColor;out float vSize;out float vNormalLengthInPixels;void main(void){float pixelSize=1.0/uDevicePixelRatio;float opacity=getScaled_opacity()*uViewOpacity;vec2 a=vec2(getScaled_x(),getScaled_y())*uViewportSize;vec2 b=vec2(getScaled_x2(),getScaled_y2())*uViewportSize;vec2 chordVector=b-a;vec2 unitChordVector=normalize(chordVector);vec2 chordNormal=vec2(-unitChordVector.y,unitChordVector.x);float sagitta=max(length(chordVector)/2.0*uSagittaScaleFactor,uMinSagittaLength);bool compress=false;if(compress){float maxSagittaLen=length(chordNormal*uViewportSize);float maxChordLen=length(unitChordVector*uViewportSize);float threshold=maxSagittaLen*0.5;if(sagitta>threshold){float m=(maxSagittaLen-threshold)/(maxChordLen-threshold);sagitta=(sagitta-threshold)*m+threshold;}}vec2 controlOffset=chordNormal*sagitta/0.75;vec2 p1=a;vec2 p2=a+controlOffset;vec2 p3=b+controlOffset;vec2 p4=b;float t=smoothstep(0.0,1.0,strip.x);vec2 C1=p4-3.0*p3+3.0*p2-p1;vec2 C2=3.0*p3-6.0*p2+3.0*p1;vec2 C3=3.0*p2-3.0*p1;vec2 C4=p1;vec2 p;if(t==0.0){p=p1;}else if(t==1.0){p=p4;}else{p=C1*t*t*t+C2*t*t+C3*t+C4;}vec2 tangent=normalize(3.0*C1*t*t+2.0*C2*t+C3);vec2 normal=vec2(-tangent.y,tangent.x);
|
|
169
96
|
#ifdef size2_DEFINED
|
|
170
97
|
float mixedSize=mix(getScaled_size(),getScaled_size2(),t);
|
|
171
98
|
#else
|
|
@@ -177,7 +104,7 @@ vec3 color=mix(getScaled_color(),getScaled_color2(),t);
|
|
|
177
104
|
#else
|
|
178
105
|
vec3 color=getScaled_color();
|
|
179
106
|
#endif
|
|
180
|
-
vColor=vec4(color*opacity,opacity);vSize=paddedSize;setupPicking();}`,
|
|
107
|
+
vColor=vec4(color*opacity,opacity);vSize=paddedSize;setupPicking();}`,Ib="in lowp vec4 vColor;in float vSize;in float vNormalLengthInPixels;out lowp vec4 fragColor;void main(void){float dpr=uDevicePixelRatio;float distance=abs(vNormalLengthInPixels);float opacity=clamp(((vSize/2.0-distance)*dpr),0.0,1.0);fragColor=vColor*opacity;if(uPickingEnabled){fragColor=vPickingColor;}}";class Tb extends Pr{constructor(e){super(e),Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:0,x2:void 0,y:0,y2:void 0,size:1,color:"black",opacity:1,segments:101,sagittaScaleFactor:1,minSagittaLength:1.5}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","size","height","color","opacity"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size"]}fixEncoding(e){return e.x||(e.x2=e.x),e.y2||(e.y2=e.y),e}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(Mb,Ib)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;ue(this.programInfo,{uSagittaScaleFactor:e.sagittaScaleFactor,uMinSagittaLength:e.minSagittaLength})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new nb({encoders:this.encoders,attributes:this.getAttributes(),numItems:n});r.addBatches(e.facetBatches);const i=r.toArrays();i.arrays.strip={data:Pb(this.properties.segments),numComponents:2},this.rangeMap=i.rangeMap,this.arrays=Object.fromEntries(Object.entries(i.arrays).map(([s,o])=>[s,ve(M({},o),{data:void 0})])),this.updateBufferInfo(i)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{this.gl.bindVertexArray(this.vertexArrayInfo.vertexArrayObject);for(const s of Object.entries(this.bufferInfo.attribs)){const[o,a]=s;a.buffer&&this.arrays[o].numComponents&&(a.offset=r*this.arrays[o].numComponents*4)}En(n,this.programInfo,this.bufferInfo),Mr(n,this.bufferInfo,n.TRIANGLE_STRIP,(this.properties.segments+1)*2,0,i)},e,()=>this.rangeMap)}}function Pb(t){let e=0;const n=[];for(;e<=t;e++)n.push(e/t,.5),n.push(e/t,-.5);return n}var Lb=`uniform float uSdfNumerator;uniform vec2 uD;in mediump vec2 vertexCoord;in lowp vec2 textureCoord;uniform vec4 uViewportEdgeFadeWidth;uniform vec4 uViewportEdgeFadeDistance;uniform bool uSqueeze;uniform bool uLogoLetter;in float width;uniform ivec2 uAlign;
|
|
181
108
|
#ifdef x2_DEFINED
|
|
182
109
|
uniform float uPaddingX;uniform bool uFlushX;
|
|
183
110
|
#endif
|
|
@@ -197,7 +124,7 @@ vec2 pos=applySampleFacet(vec2(x,y));
|
|
|
197
124
|
#ifdef y2_DEFINED
|
|
198
125
|
float y2=getScaled_y2();vec2 pos2=applySampleFacet(vec2(x,y2));if(uLogoLetter){size.y=(pos2.y-pos.y)*uViewportSize.y;pos.y+=(pos2.y-pos.y)/2.0;}else{RangeResult result=positionInsideRange(min(pos.y,pos2.y),max(pos.y,pos2.y),size.y*scale*flushSize.y/uViewportSize.y,uPaddingY/uViewportSize.y,align.y,uFlushY);pos.y=result.pos;scale*=result.scale;}
|
|
199
126
|
#endif
|
|
200
|
-
if(scale<1.0){if(uSqueeze){vec2 scaleFadeExtent=vec2(3.0,6.0)/size;if(scale<scaleFadeExtent[0]){gl_Position=vec4(0.0);return;}size*=scale;opacity*=linearstep(scaleFadeExtent[0],scaleFadeExtent[1],scale);}else if(scale<1.0){gl_Position=vec4(0.0);return;}}vec2 charPos=rotationMatrix*(vertexCoord*size+uD);vec2 unitPos=pos+charPos/uViewportSize;gl_Position=unitToNdc(unitPos);vSlope=max(1.0,min(size.x,size.y)/uSdfNumerator);vColor=vec4(getScaled_color()*opacity,opacity);vTexCoord=textureCoord;if(maxValue(uViewportEdgeFadeDistance)>-pow(10.0,10.0)){vEdgeFadeOpacity=minValue(((vec4(1.0,1.0,0.0,0.0)+vec4(-1.0,-1.0,1.0,1.0)*unitPos.yxyx)*uViewportSize.yxyx-uViewportEdgeFadeDistance)/uViewportEdgeFadeWidth);}else{vEdgeFadeOpacity=1.0;}setupPicking();}`,Zw="uniform sampler2D uTexture;in vec2 vTexCoord;in float vEdgeFadeOpacity;flat in vec4 vColor;flat in float vSlope;out lowp vec4 fragColor;float median(float r,float g,float b){return max(min(r,g),min(max(r,g),b));}void main(){vec3 c=texture(uTexture,vTexCoord).rgb;float sigDist=1.0-median(c.r,c.g,c.b);float opa=clamp((sigDist-0.5)*vSlope+0.5,0.0,1.0);opa*=pow(clamp(vEdgeFadeOpacity,0.0,1.0),2.2);fragColor=vColor*opa;if(uPickingEnabled){fragColor=vPickingColor;}}";const Kw={left:-1,center:0,right:1},qw={top:-1,middle:0,bottom:1,alphabetic:1};class Jw extends Nr{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:.5,y:.5,x2:void 0,y2:void 0,text:"",size:11,color:"black",opacity:1,font:void 0,fontStyle:void 0,fontWeight:void 0,align:"center",baseline:"middle",dx:0,dy:0,angle:0,fitToBand:!1,squeeze:!0,paddingX:0,paddingY:0,flushX:!0,flushY:!0,logoLetters:!1,viewportEdgeFadeWidthTop:0,viewportEdgeFadeWidthRight:0,viewportEdgeFadeWidthBottom:0,viewportEdgeFadeWidthLeft:0,viewportEdgeFadeDistanceTop:-1/0,viewportEdgeFadeDistanceRight:-1/0,viewportEdgeFadeDistanceBottom:-1/0,viewportEdgeFadeDistanceLeft:-1/0})),this.font=this.properties.font?e.context.fontManager.getFont(this.properties.font,this.properties.fontStyle,this.properties.fontWeight):e.context.fontManager.getDefaultFont()}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","color","size","opacity","angle"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size","text","angle"]}fixEncoding(e){for(const n of xr)this.properties.fitToBand&&Ha(e,n);return e}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(Xw,Zw)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;fe(this.programInfo,{uPaddingX:e.paddingX,uPaddingY:e.paddingY,uFlushX:!!e.flushX,uFlushY:!!e.flushY,uAlign:[Kw[e.align],qw[e.baseline]],uD:[e.dx,-e.dy],uLogoLetter:!!e.logoLetters,uSqueeze:!!e.squeeze,uViewportEdgeFadeWidth:[e.viewportEdgeFadeWidthTop,e.viewportEdgeFadeWidthRight,e.viewportEdgeFadeWidthBottom,e.viewportEdgeFadeWidthLeft],uViewportEdgeFadeDistance:[e.viewportEdgeFadeDistanceTop,e.viewportEdgeFadeDistanceRight,e.viewportEdgeFadeDistanceBottom,e.viewportEdgeFadeDistanceLeft]})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getData(),r=this.encoding,i=this.encoders.text.accessor||this.encoders.text;let s=0;const o=r.text.format?xe(r.text.format):c=>c;for(const c of n){const l=o(i(c)),f=X(l)?l:l===null?"":""+l;s+=f&&f.length||0}const a=new gw({encoders:this.encoders,attributes:this.getAttributes(),properties:this.properties,fontMetrics:this.font.metrics,numCharacters:Math.max(s,this.properties.minBufferSize||0),buildXIndex:this.properties.buildIndex});a.addBatches(e.facetBatches);const u=a.toArrays();this.rangeMap=u.rangeMap,this.updateBufferInfo(u)}prepareRender(e){super.prepareRender(e);let n=.35;this.properties.logoLetters&&(n/=2),fe(this.programInfo,{uTexture:this.font.texture,uSdfNumerator:this.font.metrics.common.base/(this.glHelper.dpr/n)}),En(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>Mr(n,this.vertexArrayInfo,n.TRIANGLES,i,r),e,()=>this.rangeMap)}}function _w(t,e,{spacing:n,devicePixelRatio:r,offset:i,reverse:s}={}){n=n||0,i=i||0;let o=0,a=0;for(const d of t)o+=kr(d.px)+(os(d)?0:n),a+=kr(d.grow);o-=n;const u=Math.max(0,e-o),c=r!==void 0?d=>Math.round(d*r)/r:d=>d,l=[],f=[],h=d=>{const g=l.length;if(!g)return;const m=(d?n:0)*(s?-1:1);p-=m;for(let A=0;A<g;A++)f.push({location:p+(A+1)/(g+1)*m,size:0});p+=m,l.length=0};let p=s?Math.max(e,o):0+i;if(t.length==1&&os(t[0]))return[{location:p,size:0}];for(let d=0;d<t.length;d++){const g=t[d];if(os(g))l.push(g);else{h(f.length>0);const m=kr(g.px)+(a?kr(g.grow)/a*u:0);s&&(p-=m),f.push({location:c(p),size:c(m)}),s?p-=n:p+=m+n}}return p+=s?n:-n,h(!1),f}function $w(t,{spacing:e}={spacing:0}){let n=0;for(const r of t)n+=kr(r.px)+(os(r)?0:e);return Math.max(0,n-e)}class Tt{constructor(e,n){this.width=e,this.height=n}addPadding(e){return new Tt({px:(this.width.px||0)+e.width,grow:this.width.grow},{px:(this.height.px||0)+e.height,grow:this.height.grow})}}const W0=Object.freeze({px:0,grow:0}),X0=new Tt(W0,W0);function os(t){return!t.px&&!t.grow}function kr(t){return t||0}function ev(t){return t&&(me(t.px)||me(t.grow))}function Va(t){if(q0(t))throw new Error("parseSizeDef does not accept step-based sizes.");if(ev(t))return t;if(me(t))return{px:t,grow:0};if(t==="container")return{px:0,grow:1};if(!t)return{px:0,grow:1};throw new Error(`Invalid sizeDef: ${t}`)}class Ge{constructor(e,n,r,i){this.top=e||0,this.right=n||0,this.bottom=r||0,this.left=i||0}get width(){return this.left+this.right}get height(){return this.top+this.bottom}expand(e){return e<=0?this:new Ge(this.top+e,this.right+e,this.bottom+e,this.left+e)}add(e){return new Ge(this.top+e.top,this.right+e.right,this.bottom+e.bottom,this.left+e.left)}static createFromConfig(e){return typeof e=="number"?this.createUniformPadding(e):e?this.createFromRecord(e):Qa}static createFromRecord(e){return new Ge(e.top,e.right,e.bottom,e.left)}static zero(){return Qa}static createUniformPadding(e){return new Ge(e,e,e,e)}}const Qa=Ge.createUniformPadding(0);Object.freeze(Qa);const tv=/^([A-Za-z]+:)?\/\//;function nv(t,e){if(e&&tv.test(e))return e;const n=t();return n&&e?n.endsWith("/")?n+e:n+"/"+e:n!=null?n:e}const as="VISIT_SKIP",Or="VISIT_STOP",Z0=t=>t;class K0{constructor(e,n,r,i){this.context=n,this.parent=r,this.name=e.name||i,this.spec=e,this.resolutions={scale:{},axis:{}},this._broadcastHandlers={},this._capturingInteractionEventListeners={},this._nonCapturingInteractionEventListeners={},O0(this),this.opacityFunction=Z0}getPadding(){return this._cache("size/padding",()=>Ge.createFromConfig(this.spec.padding))}getEffectivePadding(){return this.getPadding()}getSize(){return this._cache("size/size",()=>this.isVisible()?this.getSizeFromSpec().addPadding(this.getPadding()):X0)}getSizeFromSpec(){const e=n=>{var i,s;let r=this.spec[n];if(q0(r)){const o=r.step,a=(i=this.getScaleResolution(n=="width"?"x":"y"))==null?void 0:i.getScale();if(a){let u=0;if(Vt(a.type))u=a.domain().length;else if(["locus","index"].includes(a.type)){const l=a.domain();u=ke(l)-l[0]}else throw new Error(`Cannot use step-based size with "${a.type}" scale!`);const c=a;return u=zo(u,c.paddingInner(),c.paddingOuter()),{px:u*o,grow:0}}else throw new Error("Cannot use 'step' size with missing scale!")}else return(s=r&&Va(r))!=null?s:{px:0,grow:1}};return this._cache("size/sizeFromSpec",()=>new Tt(e("width"),e("height")))}isVisible(){return this.context.isViewVisible(this)}isVisibleInSpec(){var e;return(e=this.spec.visible)!=null?e:!0}getEffectiveOpacity(){var e,n;return this.opacityFunction((n=(e=this.parent)==null?void 0:e.getEffectiveOpacity())!=null?n:1)}getPathString(){return[...this.getAncestors()].map(e=>e.name).reverse().join("/")}*getAncestors(){let e=this;do yield e,e=e.parent;while(e)}handleBroadcast(e){for(const n of this._broadcastHandlers[e.type]||[])n(e)}_addBroadcastHandler(e,n){let r=this._broadcastHandlers[e];r||(r=[],this._broadcastHandlers[e]=r),r.push(n)}handleInteractionEvent(e,n,r){const i=r?this._capturingInteractionEventListeners:this._nonCapturingInteractionEventListeners;for(const s of i[n.type]||[])s(e,n)}addInteractionEventListener(e,n,r){const i=r?this._capturingInteractionEventListeners:this._nonCapturingInteractionEventListeners;let s=i[e];s||(s=[],i[e]=s),s.push(n)}visit(e){try{const n=e(this);if(e.postOrder&&e.postOrder(this),n!==Or)return n}catch(n){throw n.view=this,n}}onScalesResolved(){(!this.opacityFunction||this.opacityFunction===Z0)&&(this.opacityFunction=iv(this))}onBeforeRender(){}render(e,n,r={}){}getEncoding(e){const n=this.parent?this.parent.getEncoding(this):{},r=this.spec.encoding||{},i=T(T({},n),r);for(const[s,o]of Object.entries(i))o===null&&delete i[s];return i}getFacetAccessor(e){if(this.parent)return this.parent.getFacetAccessor(this)}getFacetFields(e){var r;const n=this.getEncoding().sample;return mr(n)?[n.field]:(r=this.parent)==null?void 0:r.getFacetFields(this)}getSampleFacetTexture(){}_getResolution(e,n){e=pn(e);let r=this;do{const i=r.resolutions[n][e];if(i)return i;r=r.parent}while(r)}getScaleResolution(e){return this._getResolution(e,"scale")}getAxisResolution(e){return this._getResolution(e,"axis")}getBaseUrl(){return nv(()=>{var e;return(e=this.parent)==null?void 0:e.getBaseUrl()},this.spec.baseUrl)}getDynamicDataSource(){throw new Error("The view does not provide dynamic data!")}isPickingSupported(){return!0}_cache(e,n){return Sn(this,e,n)}_invalidateCacheByPrefix(e,n="self"){switch(n){case"self":is(this,e);break;case"ancestors":for(const r of this.getAncestors())is(r,e);break;case"progeny":this.visit(r=>is(r,e));break}}invalidateSizeCache(){this._invalidateCacheByPrefix("size/","ancestors")}}function rv(t){return"unitsPerPixel"in t}function iv(t){const e=t.spec.opacity;if(e!==void 0){if(me(e))return n=>n*e;if(rv(e)){const n=s=>{var a;const o=(a=t.getScaleResolution(s))==null?void 0:a.getScale();if(["linear","index","locus"].includes(o==null?void 0:o.type))return o},r=e.channel?n(e.channel):n("x")||n("y");if(!r)throw new Error("Cannot find a resolved quantitative scale for dynamic opacity!");const i=Io().domain(e.unitsPerPixel).range(e.values).clamp(!0);return s=>{const a=jr(r.domain())/1e3;return i(a)*s}}}return n=>n}const q0=t=>!!(t==null?void 0:t.step);class ht extends K0{constructor(e,n,r,i){super(e,n,r,i);this.spec=e}*[Symbol.iterator](){}replaceChild(e,n){throw new Error("Not implemented")}visit(e){let n;try{n=e(this)}catch(r){throw r.view=this,r}if(n===Or)return n;if(n!==as){e.beforeChildren&&e.beforeChildren(this);for(const r of this){const i=r.visit(e);if(i===Or)return i}e.afterChildren&&e.afterChildren(this),e.postOrder&&e.postOrder(this)}}findDescendantByPath(e){for(const n of this)if(n.name===e[0]){if(e.length==1)return n;if(n instanceof ht)return n.findDescendantByPath(e.slice(1))}}findChildByName(e){for(const n of this)if(n.name===e)return n}getConfiguredResolution(e,n){var r,i;return(i=(r=this.spec.resolve)==null?void 0:r[n])==null?void 0:i[e]}getDefaultResolution(e,n){return"shared"}getConfiguredOrDefaultResolution(e,n){var r,i;return(i=(r=this.getConfiguredResolution(e,n))!=null?r:this.getConfiguredResolution("default",n))!=null?i:this.getDefaultResolution(e,n)}}function us(t,e,n){if(n=n||[],t.some(o=>o===null)){if(t.every(o=>o===null))return null;throw console.warn(t),new Error("Cannot merge objects with nulls!")}const r={},i=(o,a)=>o===a||Mn(o)&&Mn(a)||Mn(o)&&a===!0||o===!0&&Le(a),s=o=>{for(let a in o){const u=o[a];if(!n.includes(a)&&u!==void 0)if(r[a]!==void 0&&!i(r[a],u))console.warn(`Conflicting property ${a} of ${e}: (${JSON.stringify(r[a])} and ${JSON.stringify(o[a])}). Using ${JSON.stringify(r[a])}.`);else{const c=r[a];if(Mn(c))Mn(u)&&(r[a]=us([c,u],a));else if(Mn(u)){if(!(c===!0||c===void 0))throw new Error("Bug in merge! Target is: "+c);r[a]=us([{},u],a)}else r[a]=u}}};for(const o of t)s(o);return r}function Mn(t){return Le(t)&&!Array.isArray(t)}/*!
|
|
127
|
+
if(scale<1.0){if(uSqueeze){vec2 scaleFadeExtent=vec2(3.0,6.0)/size;if(scale<scaleFadeExtent[0]){gl_Position=vec4(0.0);return;}size*=scale;opacity*=linearstep(scaleFadeExtent[0],scaleFadeExtent[1],scale);}else if(scale<1.0){gl_Position=vec4(0.0);return;}}vec2 charPos=rotationMatrix*(vertexCoord*size+uD);vec2 unitPos=pos+charPos/uViewportSize;gl_Position=unitToNdc(unitPos);vSlope=max(1.0,min(size.x,size.y)/uSdfNumerator);vColor=vec4(getScaled_color()*opacity,opacity);vTexCoord=textureCoord;if(maxValue(uViewportEdgeFadeDistance)>-pow(10.0,10.0)){vEdgeFadeOpacity=minValue(((vec4(1.0,1.0,0.0,0.0)+vec4(-1.0,-1.0,1.0,1.0)*unitPos.yxyx)*uViewportSize.yxyx-uViewportEdgeFadeDistance)/uViewportEdgeFadeWidth);}else{vEdgeFadeOpacity=1.0;}setupPicking();}`,Rb="uniform sampler2D uTexture;in vec2 vTexCoord;in float vEdgeFadeOpacity;flat in vec4 vColor;flat in float vSlope;out lowp vec4 fragColor;float median(float r,float g,float b){return max(min(r,g),min(max(r,g),b));}void main(){vec3 c=texture(uTexture,vTexCoord).rgb;float sigDist=1.0-median(c.r,c.g,c.b);float opa=clamp((sigDist-0.5)*vSlope+0.5,0.0,1.0);opa*=pow(clamp(vEdgeFadeOpacity,0.0,1.0),2.2);fragColor=vColor*opa;if(uPickingEnabled){fragColor=vPickingColor;}}";const kb={left:-1,center:0,right:1},Nb={top:-1,middle:0,bottom:1,alphabetic:1};class zb extends Pr{constructor(e){super(e),Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:.5,y:.5,x2:void 0,y2:void 0,text:"",size:11,color:"black",opacity:1,font:void 0,fontStyle:void 0,fontWeight:void 0,align:"center",baseline:"middle",dx:0,dy:0,angle:0,fitToBand:!1,squeeze:!0,paddingX:0,paddingY:0,flushX:!0,flushY:!0,logoLetters:!1,viewportEdgeFadeWidthTop:0,viewportEdgeFadeWidthRight:0,viewportEdgeFadeWidthBottom:0,viewportEdgeFadeWidthLeft:0,viewportEdgeFadeDistanceTop:-1/0,viewportEdgeFadeDistanceRight:-1/0,viewportEdgeFadeDistanceBottom:-1/0,viewportEdgeFadeDistanceLeft:-1/0})),this.font=this.properties.font?e.context.fontManager.getFont(this.properties.font,this.properties.fontStyle,this.properties.fontWeight):e.context.fontManager.getDefaultFont()}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","color","size","opacity","angle"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size","text","angle"]}fixEncoding(e){for(const n of br)this.properties.fitToBand&&wa(e,n);return e}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(Lb,Rb)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;ue(this.programInfo,{uPaddingX:e.paddingX,uPaddingY:e.paddingY,uFlushX:!!e.flushX,uFlushY:!!e.flushY,uAlign:[kb[e.align],Nb[e.baseline]],uD:[e.dx,-e.dy],uLogoLetter:!!e.logoLetters,uSqueeze:!!e.squeeze,uViewportEdgeFadeWidth:[e.viewportEdgeFadeWidthTop,e.viewportEdgeFadeWidthRight,e.viewportEdgeFadeWidthBottom,e.viewportEdgeFadeWidthLeft],uViewportEdgeFadeDistance:[e.viewportEdgeFadeDistanceTop,e.viewportEdgeFadeDistanceRight,e.viewportEdgeFadeDistanceBottom,e.viewportEdgeFadeDistanceLeft]})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getData(),r=this.encoding,i=this.encoders.text.accessor||this.encoders.text;let s=0;const o=r.text.format?re(r.text.format):c=>c;for(const c of n){const f=o(i(c)),l=W(f)?f:f===null?"":""+f;s+=l&&l.length||0}const a=new rb({encoders:this.encoders,attributes:this.getAttributes(),properties:this.properties,fontMetrics:this.font.metrics,numCharacters:Math.max(s,this.properties.minBufferSize||0),buildXIndex:this.properties.buildIndex});a.addBatches(e.facetBatches);const u=a.toArrays();this.rangeMap=u.rangeMap,this.updateBufferInfo(u)}prepareRender(e){super.prepareRender(e);let n=.35;this.properties.logoLetters&&(n/=2),ue(this.programInfo,{uTexture:this.font.texture,uSdfNumerator:this.font.metrics.common.base/(this.glHelper.dpr/n)}),En(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>Mr(n,this.vertexArrayInfo,n.TRIANGLES,i,r),e,()=>this.rangeMap)}}function Ob(t,e,{spacing:n,devicePixelRatio:r,offset:i,reverse:s}={}){n=n||0,i=i||0;let o=0,a=0;for(const d of t)o+=Lr(d.px)+($i(d)?0:n),a+=Lr(d.grow);o-=n;const u=Math.max(0,e-o),c=r!==void 0?d=>Math.round(d*r)/r:d=>d,f=[],l=[],h=d=>{const g=f.length;if(!g)return;const m=(d?n:0)*(s?-1:1);p-=m;for(let A=0;A<g;A++)l.push({location:p+(A+1)/(g+1)*m,size:0});p+=m,f.length=0};let p=s?Math.max(e,o):0+i;if(t.length==1&&$i(t[0]))return[{location:p,size:0}];for(let d=0;d<t.length;d++){const g=t[d];if($i(g))f.push(g);else{h(l.length>0);const m=Lr(g.px)+(a?Lr(g.grow)/a*u:0);s&&(p-=m),l.push({location:c(p),size:c(m)}),s?p-=n:p+=m+n}}return p+=s?n:-n,h(!1),l}function Gb(t,{spacing:e}={spacing:0}){let n=0;for(const r of t)n+=Lr(r.px)+($i(r)?0:e);return Math.max(0,n-e)}class Dt{constructor(e,n){this.width=e,this.height=n}addPadding(e){return new Dt({px:(this.width.px||0)+e.width,grow:this.width.grow},{px:(this.height.px||0)+e.height,grow:this.height.grow})}}const h0=Object.freeze({px:0,grow:0}),d0=new Dt(h0,h0);function $i(t){return!t.px&&!t.grow}function Lr(t){return t||0}function Ub(t){return t&&(de(t.px)||de(t.grow))}function va(t){if(m0(t))throw new Error("parseSizeDef does not accept step-based sizes.");if(Ub(t))return t;if(de(t))return{px:t,grow:0};if(t==="container")return{px:0,grow:1};if(!t)return{px:0,grow:1};throw new Error(`Invalid sizeDef: ${t}`)}class ze{constructor(e,n,r,i){this.top=e||0,this.right=n||0,this.bottom=r||0,this.left=i||0}get width(){return this.left+this.right}get height(){return this.top+this.bottom}expand(e){return e<=0?this:new ze(this.top+e,this.right+e,this.bottom+e,this.left+e)}add(e){return new ze(this.top+e.top,this.right+e.right,this.bottom+e.bottom,this.left+e.left)}static createFromConfig(e){return typeof e=="number"?this.createUniformPadding(e):e?this.createFromRecord(e):Ea}static createFromRecord(e){return new ze(e.top,e.right,e.bottom,e.left)}static zero(){return Ea}static createUniformPadding(e){return new ze(e,e,e,e)}}const Ea=ze.createUniformPadding(0);Object.freeze(Ea);const Hb=/^([A-Za-z]+:)?\/\//;function Qb(t,e){if(e&&Hb.test(e))return e;const n=t();return n&&e?n.endsWith("/")?n+e:n+"/"+e:n!=null?n:e}const es="VISIT_SKIP",Rr="VISIT_STOP",p0=t=>t;class g0{constructor(e,n,r,i){this.context=n,this.parent=r,this.name=e.name||i,this.spec=e,this.resolutions={scale:{},axis:{}},this._broadcastHandlers={},this._capturingInteractionEventListeners={},this._nonCapturingInteractionEventListeners={},r0(this),this.opacityFunction=p0}getPadding(){return this._cache("size/padding",()=>ze.createFromConfig(this.spec.padding))}getEffectivePadding(){return this.getPadding()}getSize(){return this._cache("size/size",()=>this.isVisible()?this.getSizeFromSpec().addPadding(this.getPadding()):d0)}getSizeFromSpec(){const e=n=>{var i,s;let r=this.spec[n];if(m0(r)){const o=r.step,a=(i=this.getScaleResolution(n=="width"?"x":"y"))==null?void 0:i.getScale();if(a){let u=0;if(Ht(a.type))u=a.domain().length;else if(["locus","index"].includes(a.type)){const f=a.domain();u=Be(f)-f[0]}else throw new Error(`Cannot use step-based size with "${a.type}" scale!`);const c=a;return u=wo(u,c.paddingInner(),c.paddingOuter()),{px:u*o,grow:0}}else throw new Error("Cannot use 'step' size with missing scale!")}else return(s=r&&va(r))!=null?s:{px:0,grow:1}};return this._cache("size/sizeFromSpec",()=>new Dt(e("width"),e("height")))}isVisible(){return this.context.isViewVisible(this)}isVisibleInSpec(){var e;return(e=this.spec.visible)!=null?e:!0}getEffectiveOpacity(){var e,n;return this.opacityFunction((n=(e=this.parent)==null?void 0:e.getEffectiveOpacity())!=null?n:1)}getPathString(){return[...this.getAncestors()].map(e=>e.name).reverse().join("/")}*getAncestors(){let e=this;do yield e,e=e.parent;while(e)}handleBroadcast(e){for(const n of this._broadcastHandlers[e.type]||[])n(e)}_addBroadcastHandler(e,n){let r=this._broadcastHandlers[e];r||(r=[],this._broadcastHandlers[e]=r),r.push(n)}handleInteractionEvent(e,n,r){const i=r?this._capturingInteractionEventListeners:this._nonCapturingInteractionEventListeners;for(const s of i[n.type]||[])s(e,n)}addInteractionEventListener(e,n,r){const i=r?this._capturingInteractionEventListeners:this._nonCapturingInteractionEventListeners;let s=i[e];s||(s=[],i[e]=s),s.push(n)}visit(e){try{const n=e(this);if(e.postOrder&&e.postOrder(this),n!==Rr)return n}catch(n){throw n.view=this,n}}onScalesResolved(){(!this.opacityFunction||this.opacityFunction===p0)&&(this.opacityFunction=jb(this))}onBeforeRender(){}render(e,n,r={}){}getEncoding(e){const n=this.parent?this.parent.getEncoding(this):{},r=this.spec.encoding||{},i=M(M({},n),r);for(const[s,o]of Object.entries(i))o===null&&delete i[s];return i}getFacetAccessor(e){if(this.parent)return this.parent.getFacetAccessor(this)}getFacetFields(e){var r;const n=this.getEncoding().sample;return xr(n)?[n.field]:(r=this.parent)==null?void 0:r.getFacetFields(this)}getSampleFacetTexture(){}_getResolution(e,n){e=pn(e);let r=this;do{const i=r.resolutions[n][e];if(i)return i;r=r.parent}while(r)}getScaleResolution(e){return this._getResolution(e,"scale")}getAxisResolution(e){return this._getResolution(e,"axis")}getBaseUrl(){return Qb(()=>{var e;return(e=this.parent)==null?void 0:e.getBaseUrl()},this.spec.baseUrl)}getDynamicDataSource(){throw new Error("The view does not provide dynamic data!")}isPickingSupported(){return!0}_cache(e,n){return Dn(this,e,n)}_invalidateCacheByPrefix(e,n="self"){switch(n){case"self":Ji(this,e);break;case"ancestors":for(const r of this.getAncestors())Ji(r,e);break;case"progeny":this.visit(r=>Ji(r,e));break}}invalidateSizeCache(){this._invalidateCacheByPrefix("size/","ancestors")}}function Vb(t){return"unitsPerPixel"in t}function jb(t){const e=t.spec.opacity;if(e!==void 0){if(de(e))return n=>n*e;if(Vb(e)){const n=s=>{var a;const o=(a=t.getScaleResolution(s))==null?void 0:a.getScale();if(["linear","index","locus"].includes(o==null?void 0:o.type))return o},r=e.channel?n(e.channel):n("x")||n("y");if(!r)throw new Error("Cannot find a resolved quantitative scale for dynamic opacity!");const i=ho().domain(e.unitsPerPixel).range(e.values).clamp(!0);return s=>{const a=Hr(r.domain())/1e3;return i(a)*s}}}return n=>n}const m0=t=>!!(t!=null&&t.step);class it extends g0{constructor(e,n,r,i){super(e,n,r,i),this.spec=e}*[Symbol.iterator](){}replaceChild(e,n){throw new Error("Not implemented")}visit(e){let n;try{n=e(this)}catch(r){throw r.view=this,r}if(n===Rr)return n;if(n!==es){e.beforeChildren&&e.beforeChildren(this);for(const r of this){const i=r.visit(e);if(i===Rr)return i}e.afterChildren&&e.afterChildren(this),e.postOrder&&e.postOrder(this)}}findDescendantByPath(e){for(const n of this)if(n.name===e[0]){if(e.length==1)return n;if(n instanceof it)return n.findDescendantByPath(e.slice(1))}}findChildByName(e){for(const n of this)if(n.name===e)return n}getConfiguredResolution(e,n){var r,i;return(i=(r=this.spec.resolve)==null?void 0:r[n])==null?void 0:i[e]}getDefaultResolution(e,n){return"shared"}getConfiguredOrDefaultResolution(e,n){var r,i;return(i=(r=this.getConfiguredResolution(e,n))!=null?r:this.getConfiguredResolution("default",n))!=null?i:this.getDefaultResolution(e,n)}}function ts(t,e,n){if(n=n||[],t.some(o=>o===null)){if(t.every(o=>o===null))return null;throw console.warn(t),new Error("Cannot merge objects with nulls!")}const r={},i=(o,a)=>o===a||Sn(o)&&Sn(a)||Sn(o)&&a===!0||o===!0&&Ie(a),s=o=>{for(let a in o){const u=o[a];if(!n.includes(a)&&u!==void 0)if(r[a]!==void 0&&!i(r[a],u))console.warn(`Conflicting property ${a} of ${e}: (${JSON.stringify(r[a])} and ${JSON.stringify(o[a])}). Using ${JSON.stringify(r[a])}.`);else{const c=r[a];if(Sn(c))Sn(u)&&(r[a]=ts([c,u],a));else if(Sn(u)){if(!(c===!0||c===void 0))throw new Error("Bug in merge! Target is: "+c);r[a]=ts([{},u],a)}else r[a]=u}}};for(const o of t)s(o);return r}function Sn(t){return Ie(t)&&!Array.isArray(t)}/*!
|
|
201
128
|
* Adapted from vega-encode:
|
|
202
129
|
* https://github.com/vega/vega/blob/master/packages/vega-encode/src/ticks.js
|
|
203
130
|
*
|
|
@@ -205,7 +132,7 @@ if(scale<1.0){if(uSqueeze){vec2 scaleFadeExtent=vec2(3.0,6.0)/size;if(scale<scal
|
|
|
205
132
|
* All rights reserved.
|
|
206
133
|
*
|
|
207
134
|
* BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
|
|
208
|
-
*/function
|
|
135
|
+
*/function A0(t,e,n){return de(e)&&n!=null&&(e=Math.min(e,~~(Hr(t.domain())/n)||1)),Ie(e)&&(e=e.interval),e}function x0(t,e,n){var r=t.range(),i=Math.floor(r[0]),s=Math.ceil(Te(r));if(i>s&&(r=s,s=i,i=r),e=e.filter(function(a){return a=t(a),i<=a&&a<=s}),n>0&&e.length>1){for(var o=[e[0],Te(e)];e.length>n&&e.length>=3;)e=e.filter(function(a,u){return!(u%2)});e.length<3&&(e=o)}return e}function Yb(t,e){return t.bins?x0(t,Wb(t.bins,e)):t.ticks?t.ticks(e):t.domain()}function Wb(t,e){var n=t.length,r=~~(n/(e||n));return r<2?t.slice():t.filter(function(i,s){return!(s%r)})}function Xb(t,e,n){var r=t.tickFormat?t.tickFormat(e,n):n?re(n):String;if(pl(t.type)){var i=Kb(n);r=t.bins?i:Zb(r,i)}return r}function Zb(t,e){return function(n){return t(n)?e(n):""}}function Kb(t){var e=at(t||",");if(e.precision==null){switch(e.precision=12,e.type){case"%":e.precision-=2;break;case"e":e.precision-=1;break}return qb(re(e),re(".1f")(1)[1])}else return re(e)}function qb(t,e){return function(n){var r=t(n),i=r.indexOf(e),s,o;if(i<0)return r;for(s=Jb(r,i),o=s<r.length?r.slice(s):"";--s>i;)if(r[s]!=="0"){++s;break}return r.slice(0,s)+o}}function Jb(t,e){var n=t.lastIndexOf("e"),r;if(n>0)return n;for(n=t.length;--n>e;)if(r=t.charCodeAt(n),r>=48&&r<=57)return n+1}/*!
|
|
209
136
|
* Adapted from vega-encode:
|
|
210
137
|
* https://github.com/vega/vega/blob/master/packages/vega-encode/src/Scale.js
|
|
211
138
|
*
|
|
@@ -213,12 +140,12 @@ if(scale<1.0){if(uSqueeze){vec2 scaleFadeExtent=vec2(3.0,6.0)/size;if(scale<scal
|
|
|
213
140
|
* All rights reserved.
|
|
214
141
|
*
|
|
215
142
|
* BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
|
|
216
|
-
*/const hv="locus",dv="index";var pv=5;function gv(t){const e=t.type;return!t.bins&&(e===ln||e===ir||e===sr)}function $0(t){return Ke(t)&&![Ze,dv,hv].includes(t)}function eh(t){return t||{warn:(e,...n)=>console.warn(e,...n)}}var mv=Wr(["set","modified","clear","type","scheme","schemeExtent","schemeCount","domain","domainMin","domainMid","domainMax","domainRaw","domainImplicit","nice","zero","bins","range","rangeStep","round","reverse","interpolate","interpolateGamma","zoom","fp64","name"]);function th(t,e,n){n=eh(n);for(const r in t)if(!mv[r]){if(r==="padding"&&$0(e.type))continue;ge(e[r])?e[r](t[r]):n.warn("Unsupported scale property: "+r)}Cv(e,t,Ev(e,t,bv(e,t,n)))}function Av(t,e){const n=xv(t),r=k(n);if(!r)throw new Error("Unknown scale type: "+n);const i=r();return th(t,i,e),i}function xv(t){var e=t.type,n="",r;return e===Ze?Ze+"-"+ln:(yv(t)&&(r=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(t.domainMid!=null):0,n=r===2?Ze+"-":r===3?hn+"-":""),(n+e||ln).toLowerCase())}function yv(t){const e=t.type;return Ke(e)&&e!==Pf&&e!==Lf&&(t.scheme||t.range&&t.range.length&&t.range.every(X))}function bv(t,e,n){if(!t.domain)return 0;n=eh(n);var r=wv(t,e.domainRaw,n);if(r>-1)return r;var i=e.domain,s=t.type,o=e.zero||e.zero===void 0&&gv(t),a,u;return i?($0(s)&&e.padding&&i[0]!==Re(i)&&(i=vv(s,i,e.range,e.padding,e.exponent,e.constant)),(o||e.domainMin!=null||e.domainMax!=null||e.domainMid!=null)&&(a=(i=i.slice()).length-1||1,o&&(i[0]>0&&(i[0]=0),i[a]<0&&(i[a]=0)),e.domainMin!=null&&(i[0]=e.domainMin),e.domainMax!=null&&(i[a]=e.domainMax),e.domainMid!=null&&(u=e.domainMid,(u<i[0]||u>i[a])&&n.warn("Scale domainMid exceeds domain min or max.",u),i.splice(a,0,u))),t.domain(nh(s,i,n)),s===Go&&t.unknown(e.domainImplicit?so:void 0),e.nice&&t.nice&&t.nice(e.nice!==!0&&J0(t,e.nice)||null),i.length):0}function wv(t,e,n){return e?(t.domain(nh(t.type,e,n)),e.length):-1}function vv(t,e,n,r,i,s){var o=Math.abs(Re(n)-n[0]),a=o/(o-2*r),u=t===vt?au(e,null,a):t===sr?ds(e,null,a,.5):t===ir?ds(e,null,a,i||1):t===Ei?$h(e,null,a,s||1):hs(e,null,a);return e=e.slice(),e[0]=u[0],e[e.length-1]=u[1],e}function nh(t,e,n){if(Gf(t)){var r=Math.abs(e.reduce(function(i,s){return i+(s<0?-1:s>0?1:0)},0));r!==e.length&&n.warn("Log scale domain includes zero: "+Yr(e))}return e}function Ev(t,e,n){let r=e.bins;if(r&&!Be(r)){const i=(r.start==null||r.stop==null)&&t.domain(),s=r.start==null?i[0]:r.start,o=r.stop==null?Re(i):r.stop,a=r.step;a||Y("Scale bins parameter missing step property."),r=ci(s,o+a,a)}return r?t.bins=r:t.bins&&delete t.bins,t.type===Vo&&(r?!e.domain&&!e.domainRaw&&(t.domain(r),n=r.length):t.bins=t.domain()),n}function Cv(t,e,n){var r=t.type,i=e.round||!1,s=e.range;if(e.rangeStep!=null)s=Dv(r,e,n);else if(e.scheme&&(s=Sv(r,e,n),ge(s))){if(t.interpolator)return t.interpolator(s);Y(`Scale type ${r} does not support interpolating color schemes.`)}if(s&&Di(r))return t.interpolator(Si(ja(s,e.reverse),e.interpolate,e.interpolateGamma));s&&e.interpolate&&t.interpolate?t.interpolate(Hf(e.interpolate,e.interpolateGamma)):ge(t.round)?t.round(i):ge(t.rangeRound)&&t.interpolate(i?nr:bt),s&&t.range(ja(s,e.reverse))}function Dv(t,e,n){t!==kf&&t!==Ho&&Y("Only band and point scales support rangeStep.");var r=(e.paddingOuter!=null?e.paddingOuter:e.padding)||0,i=t===Ho?1:(e.paddingInner!=null?e.paddingInner:e.padding)||0;return[0,e.rangeStep*zo(n,i,r)]}function Sv(t,e,n){var r=e.schemeExtent,i,s;return Be(e.scheme)?s=Si(e.scheme,e.interpolate,e.interpolateGamma):(i=e.scheme.toLowerCase(),s=jo(i),s||Y(`Unrecognized scheme name: ${e.scheme}`)),n=t===Nf?n+1:t===Vo?n-1:t===Uo||t===Rf?+e.schemeCount||pv:n,Di(t)?rh(s,r,e.reverse):ge(s)?mA(rh(s,r),n):t===Go?s:s.slice(0,n)}function rh(t,e,n){return ge(t)&&(e||n)?gA(t,ja(e||[0,1],n)):t}function ja(t,e){return e?t.slice().reverse():t}const ih=xe(",d");function Mv(t,e){return t.chrom+":"+ih(Math.floor(t.pos+1))+"-"+(t.chrom!=e.chrom?e.chrom+":":"")+ih(Math.ceil(e.pos))}const Bv="https://genomespy.app/data/genomes/";class Fv{constructor(e){if(this.config=e,!this.config.contigs&&typeof this.config.name!="string")throw new Error("No name has been defined for the genome assembly!");this.chromosomes=[],this.cumulativeChromPositions=new Map,this.chromosomesByName=new Map,this.startByIndex=[],this.totalSize=0,this.config.contigs&&this.setChromSizes(this.config.contigs)}get name(){return this.config.name}async load(e){if(!this.config.contigs){this.config.baseUrl?this.baseUrl=/^http(s)?/.test(this.config.baseUrl)?this.config.baseUrl:e+"/"+this.config.baseUrl:this.baseUrl=Bv;try{this.setChromSizes(Iv(await ii({baseURL:this.baseUrl}).load(`${this.config.name}/${this.name}.chrom.sizes`)))}catch(n){throw new Error(`Could not load chrom sizes: ${n.message}`)}}}setChromSizes(e){let n=0;this.startByIndex=[0];for(let r=0;r<e.length;r++){this.startByIndex.push(n);const i=e[r].size,s=Se(T({},e[r]),{continuousStart:n,continuousEnd:n+i,continuousInterval:[n,n+i],index:r,number:r+1,odd:!(r&1)});this.chromosomes.push(s);const o=s.name.replace(/^chr/i,"");for(const a of["chr"+o,"CHR"+o,"Chr"+o,s.number,""+s.number,o,s.name])this.cumulativeChromPositions.set(a,n),this.chromosomesByName.set(a,s);n+=s.size}this.totalSize=n}getExtent(){return[0,this.totalSize]}toContinuous(e,n){let r=this.cumulativeChromPositions.get(e);if(r===void 0)throw new Error("Unknown chromosome/contig: "+e);return r+ +n}toChromosome(e){if(e>=this.totalSize)return;e=Math.floor(e);const n=Gg(this.startByIndex,e)-1;if(n>0&&n<=this.chromosomes.length)return this.chromosomes[n-1]}toChromosomal(e){const n=this.toChromosome(e);if(!!n)return{chrom:n.name,pos:Math.floor(e)-n.continuousStart}}getChromosome(e){return this.chromosomesByName.get(e)}formatInterval(e){return Mv(...this.toChromosomalInterval(e))}toChromosomalInterval(e){const n=this.toChromosomal(e[0]+.5),r=this.toChromosomal(e[1]-.5);return r.pos+=1,[n,r]}toContinuousInterval(e){var i,s,o;let[n,r]=e;return r||(r=n),[this.toContinuous(n.chrom,(i=n.pos)!=null?i:0),this.toContinuous(r.chrom,(o=r.pos)!=null?o:(s=this.chromosomesByName.get(r.chrom))==null?void 0:s.size)]}parseInterval(e){const n=e.match(/^(chr[0-9A-Z]+):([0-9,]+)-(?:(chr[0-9A-Z]+):)?([0-9,]+)$/);if(n){const r=n[1],i=n[3]||r,s=parseInt(n[2].replace(/,/g,"")),o=parseInt(n[4].replace(/,/g,""));return[this.toContinuous(r,s-1),this.toContinuous(i,o)]}}}function Iv(t){return xd(t).filter(e=>/^chr[0-9A-Z]+$/.test(e[0])).map(([e,n])=>({name:e,size:parseInt(n)}))}function sh(t){return Le(t)&&"chrom"in t}function Tv(t){return t.every(sh)}class zr extends Array{constructor(){super();this.type=void 0}extend(e){return this}extendAll(e){if(e instanceof zr&&e.type!=this.type)throw new Error(`Cannot combine different types of domains: ${this.type} and ${e.type}`);for(const n of e)this.extend(n);return this}extendAllWithAccessor(e,n){for(const r of e)this.extend(n(r));return this}}class Ya extends zr{constructor(){super();this.type="quantitative"}extend(e){return e==null||Number.isNaN(e)?this:(e=+e,this.length?e<this[0]?this[0]=e:e>this[1]&&(this[1]=e):(this.push(e),this.push(e)),this)}}class oh extends zr{constructor(){super();this.type="ordinal",this.uniqueValues=new Set}extend(e){return e==null||Number.isNaN(e)?this:(this.uniqueValues.has(e)||(this.uniqueValues.add(e),this.push(e)),this)}}class ah extends oh{constructor(){super();this.type="nominal"}}class Pv extends zr{constructor(e){super();let n=0;for(let r=1;r<e.length;r++)n+=Math.sign(e[r]-e[r-1]);if(Math.abs(n)!=e.length-1)throw new Error("Piecewise domain must be strictly increasing or decreasing: "+JSON.stringify(e));e.forEach(r=>this.push(r))}extend(e){if(this.includes(e))return this;throw new Error("Piecewise domains are immutable and cannot be unioned!")}}const uh={quantitative:Ya,index:Ya,locus:Ya,nominal:ah,ordinal:oh};function ch(t,e){if(t=="quantitative"&&Lv(e)){const n=new Pv(e);return n.type=t,n}else if(uh[t]){const n=new uh[t];return n.type=t,e&&n.extendAll(e),n}throw new Error("Unknown type: "+t)}function Lv(t){return t&&t.length>0&&t.length!=2&&t.every(e=>typeof e=="number")}function Rv(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}const fh="quantitative",lh="ordinal",hh="nominal",Wa="locus",Nv="index";class kv{constructor(e){this.channel=e,this.members=[],this.type=null,this._zoomExtent=void 0,this._domainListeners=new Set,this.name=void 0,this._scale=void 0}addEventListener(e,n){if(e!="domain")throw new Error("Unsupported event type: "+e);this._domainListeners.add(n)}removeEventListener(e,n){if(e!="domain")throw new Error("Unsupported event type: "+e);this._domainListeners.delete(n)}_notifyDomainListeners(){for(const e of this._domainListeners.values())e({type:"domain",scaleResolution:this})}pushUnitView(e,n){var o;const r=ea(e,n),i=r.type,s=(o=r==null?void 0:r.scale)==null?void 0:o.name;if(s){if(this.name!==void 0&&s!=this.name)throw new Error(`Shared scales have conflicting names: "${s}" vs. "${this.name}"!`);this.name=s}if(!this.type)this.type=i;else if(i!==this.type&&!br(n))throw new Error(`Can not use shared scale for different data types: ${this.type} vs. ${i}. Use "resolve: independent" for channel ${this.channel}`);this.members.push({view:e,channel:n})}isExplicitDomain(){return!!this.getConfiguredDomain()}_getMergedScaleProps(){return Sn(this,"mergedScaleProps",()=>{const e=this.members.map(n=>ea(n.view,n.channel).scale).filter(n=>n!==void 0);return us(e,"scale",["domain"])})}getScaleProps(){return Sn(this,"scaleProps",()=>{var i,s;const e=this._getMergedScaleProps();if(e===null||e.type=="null")return{type:"null"};const n=T(T({},this._getDefaultScaleProperties(this.type)),e);n.type||(n.type=Ov(this.channel,this.type));const r=this.getInitialDomain();return r&&r.length>0?n.domain=r:Vt(n.type)&&(n.domain=new ah),!n.domain&&n.domainMid!==void 0&&(n.domain=[(i=n.domainMin)!=null?i:0,(s=n.domainMax)!=null?s:1]),n.type==Wa&&!("fp64"in n)&&(n.fp64=!0),this.channel=="y"&&Vt(n.type)&&n.reverse==null&&(n.reverse=!0),n.range&&n.scheme&&delete n.scheme,!("zoom"in n)&&["index","locus"].includes(n.type)&&(n.zoom=!0),zv(n,this.channel),n})}getInitialDomain(){var e;return(e=this.getConfiguredDomain())!=null?e:this.type==Wa?this.getGenome().getExtent():this.getDataDomain()}getConfiguredDomain(){return this._reduceDomains(e=>br(e.channel)?void 0:e.view.getConfiguredDomain(e.channel))}getDataDomain(){return this._reduceDomains(e=>br(e.channel)?void 0:e.view.extractDataDomain(e.channel))}reconfigure(){if(this._scale&&this._scale.type!="null"){k0(this,"scaleProps");const e=this.getScaleProps();th(e,this._scale),Ke(this._scale.type)&&(this._zoomExtent=this._getZoomExtent())}}getScale(){if(this._scale)return this._scale;const e=this.getScaleProps(),n=Av(e);return this._scale=n,sm(n)&&n.genome(this.getGenome()),n.fp64=!!e.fp64,Ke(n.type)&&(this._zoomExtent=this._getZoomExtent()),n}getDomain(){return this.getScale().domain()}getComplexDomain(){var e,n;return(n=(e=this.getGenome())==null?void 0:e.toChromosomalInterval(this.getDomain()))!=null?n:this.getDomain()}isZoomed(){return this.isZoomable()&&Yf(this.getInitialDomain(),this.getDomain())}isZoomable(){if(!ol(this.channel))return!1;const e=this.getScale().type;return["linear","locus","index","log","pow","sqrt"].includes(e)?!!this.getScaleProps().zoom:!1}zoom(e,n,r){if(!this.isZoomable())return!1;const i=this.getScale(),s=i.domain();let o=[...s];const a=i.invert(n);switch(this.getScaleProps().reverse&&(r=-r),i.type){case"linear":case"index":case"locus":o=qh(o,r||0),o=hs(o,a,e);break;case"log":o=Jh(o,r||0),o=au(o,a,e);break;case"pow":case"sqrt":{const u=i;o=_h(o,r||0,u.exponent()),o=ds(o,a,e,u.exponent());break}default:throw new Error("Zooming is not implemented for: "+i.type)}return this._zoomExtent&&(o=ed(o,this._zoomExtent[0],this._zoomExtent[1])),[0,1].some(u=>o[u]!=s[u])?(i.domain(o),this._notifyDomainListeners(),!0):!1}async zoomTo(e,n=!1){var a;if(Qr(n)&&(n=n?700:0),!this.isZoomable())throw new Error("Not a zoomable scale!");const r=this.fromComplexInterval(e),i=(a=this.members[0])==null?void 0:a.view.context.animator,s=this.getScale(),o=s.domain();if(n>0&&o.length==2){const u=o[1]-o[0],c=o[0]+u/2,l=r[1]-r[0],f=r[0]+l/2,h=af([c,0,u],[f,0,l]).rho(.7);await i.transition({duration:n/1e3*h.duration,easingFunction:Rv,onUpdate:p=>{const[d,,g]=h(p);s.domain([d-g/2,d+g/2]),this._notifyDomainListeners()}}),s.domain(r),this._notifyDomainListeners()}else s.domain(r),i==null||i.requestRender(),this._notifyDomainListeners()}getZoomLevel(){return this.isZoomable()?jr(this._zoomExtent)/jr(this.getScale().domain()):1}_getZoomExtent(){const e=this.getScaleProps(),n=e.zoom;if(Uv(n)&&Be(n.extent))return this.fromComplexInterval(n.extent);if(n)return e.type=="locus"?this.getGenome().getExtent():this._scale.domain()}_getDefaultScaleProperties(e){const n=this.channel,r={};return this.isExplicitDomain()&&(r.zero=!1),yr(n)?r.nice=!this.isExplicitDomain():Wt(n)?r.scheme=e==hh?"tableau10":e==lh?"blues":"viridis":Li(n)?r.range=ul(n):n=="size"?r.range=[0,400]:n=="angle"&&(r.range=[0,360]),r}getGenome(){var n;if(this.type!=="locus")return;const e=(n=this.members[0].view.context.genomeStore)==null?void 0:n.getGenome();if(!e)throw new Error("No genome has been defined!");return e}invertToComplex(e){const n=this.getScale();if("invert"in n){const r=n.invert(e);return this.toComplex(r)}else throw new Error("The scale does not support inverting!")}toComplex(e){const n=this.getGenome();return n?n.toChromosomal(e):e}fromComplex(e){return sh(e)?this.getGenome().toContinuous(e.chrom,e.pos):e}fromComplexInterval(e){return this.type==="locus"&&Tv(e)?this.getGenome().toContinuousInterval(e):e}_getViewPaths(){return this.members.map(e=>e.view.getPathString()).join(", ")}_reduceDomains(e){const n=this.members.map(e).filter(r=>!!r);if(n.length)return n.reduce((r,i)=>r.extendAll(i))}}function Ov(t,e){if(e==Nv||e==Wa){if(ol(t))return e;throw new Error(`${t} does not support ${e} data type. Only positional channels do.`)}const n={x:["band","band","linear"],y:["band","band","linear"],size:[void 0,"point","linear"],opacity:[void 0,"point","linear"],fillOpacity:[void 0,"point","linear"],strokeOpacity:[void 0,"point","linear"],color:["ordinal","ordinal","linear"],fill:["ordinal","ordinal","linear"],stroke:["ordinal","ordinal","linear"],strokeWidth:[void 0,void 0,"linear"],shape:["ordinal","ordinal",void 0],dx:[void 0,void 0,"null"],dy:[void 0,void 0,"null"],angle:[void 0,void 0,"linear"]},i=["uniqueId","facetIndex","semanticScore","search","text","sample"].includes(t)?"null":n[t]?n[t][[hh,lh,fh].indexOf(e)]:e==fh?"linear":"ordinal";if(i===void 0)throw new Error(`Channel "${t}" is not compatible with "${e}" data type. Use of a proper scale may be needed.`);return i}function zv(t,e){yr(e)&&t.type!=="ordinal"&&(t.range=[0,1]),e=="opacity"&&Ke(t.type)&&(t.clamp=!0)}function Uv(t){return Le(t)}function Xa(...t){for(const e of t)if(e!==void 0)return e}class Gv{constructor(e){this.channel=e,this.members=[]}get scaleResolution(){var e;return(e=ke(this.members))==null?void 0:e.view.getScaleResolution(this.channel)}pushUnitView(e,n){const r=e.getScaleResolution(this.channel);if(!r)throw new Error("Cannot find a scale resolution!");if(this.scaleResolution&&r!==this.scaleResolution)throw new Error("Shared axes must have a shared scale!");this.members.push({view:e,channel:n})}getAxisProps(){return Sn(this,"axisProps",()=>{const e=this.members.map(n=>{const r=n.view.mark.encoding[n.channel];return"axis"in r&&r.axis});return e.length>0&&e.some(n=>n===null)?null:us(e.filter(n=>n!==void 0),"axis",["title"])})}getTitle(){const e=s=>{var a;const o=ea(s.view,s.channel);if(!Te(o))return{member:s,explicitTitle:Xa((a=o.axis)==null?void 0:a.title,o.title),implicitTitle:Xa(mr(o)?o.field:void 0,ta(o)?o.expr:void 0)}},n=this.members.map(e),r=n.filter(s=>{var o;if(br(s.member.channel)&&!s.explicitTitle){const a=pn(s.member.channel);return((o=n.find(u=>u.member.view==s.member.view&&u.member.channel==a))==null?void 0:o.explicitTitle)===void 0}return!0}),i=new Set(r.map(s=>Xa(s.explicitTitle,s.implicitTitle)).filter(X));return i.size?[...i].join(", "):null}}class dh extends K0{constructor(e,n,r,i){super(e,n,r,i);this.spec=e}}class Za extends ht{constructor(e,n,r,i){super(e,n,r,i);this.spec=e,this.children=(e.layer||[]).map((s,o)=>{if(Ja(s)||qa(s))return n.createView(s,this,"layer"+o);throw new Error("LayerView accepts only unit or layer specs as children!")})}*[Symbol.iterator](){for(const e of this.children)yield e}render(e,n,r={}){if(!!this.isVisible()){n=n.shrink(this.getPadding()),e.pushView(this,n);for(const i of this.children)i.render(e,n,r);e.popView(this)}}}function dt(t){return()=>t}class nt{static create(e,n,r,i){return new nt(dt(e),dt(n),dt(r),dt(i))}_offset(e,n){const r=this["_"+e];if(n===0)return r;switch(typeof n){case"number":return()=>r()+n;case"function":return()=>r()+n();default:throw new Error("Not a number of function")}}_passThrough(e){return this._offset(e,0)}constructor(e,n,r,i){this._x=e,this._y=n,this._width=r,this._height=i}get x(){return this._x()}get y(){return this._y()}get width(){return this._width()}get height(){return this._height()}get x2(){return this._x()+this._width()}get y2(){return this._y()+this._height()}equals(e){return e?this===e||this.x===e.x&&this.y===e.y&&this.width===e.width&&this.height===e.height:!1}modify(e){if(!Object.keys(e).length)return this;const n=r=>{const i=e[r];return typeof i=="number"?dt(i):typeof i=="function"?i:this._passThrough(r)};return new nt(n("x"),n("y"),n("width"),n("height"))}translate(e,n){return e===0&&n===0?this:new nt(this._offset("x",e),this._offset("y",n),this._passThrough("width"),this._passThrough("height"))}translateBy(e){return this.translate(e.x,e.y)}expand(e,n=1){return e.left==0&&e.top==0&&e.right==0&&e.bottom==0?this:new nt(e.left?this._offset("x",-e.left*n):this._passThrough("x"),e.top?this._offset("y",-e.top*n):this._passThrough("y"),e.width?this._offset("width",e.width*n):this._passThrough("width"),e.height?this._offset("height",e.height*n):this._passThrough("height"))}shrink(e){return this.expand(e,-1)}intersect(e){return this===e?this:new nt(()=>Math.max(this.x,e.x),()=>Math.max(this.y,e.y),()=>Math.min(this.x2,e.x2)-Math.max(this.x,e.x),()=>Math.min(this.y2,e.y2)-Math.max(this.y,e.y))}isDefined(){return this.width>=0&&this.height>=0}flatten(){return new nt(dt(this.x),dt(this.y),dt(this.width),dt(this.height))}containsPoint(e,n){return e>=this.x&&e<this.x2&&n>=this.y&&n<this.y2}normalizePoint(e,n){return{x:(e-this.x)/this.width,y:(n-this.y)/this.height}}}class Ka extends ht{constructor(e,n,r,i){super(e,n,r,i);this.spec=e,"spacing"in this.spec||(this.spec.spacing=10),this.mainDimension=_a(e)?"width":"height",this.secondaryDimension=this.mainDimension=="width"?"height":"width";const s=_a(e)?e.hconcat:mh(e)?e.vconcat:e.concat;this.children=s.map((o,a)=>n.createView(o,this,"concat"+a))}getEffectivePadding(){return this._cache("size/effectivePadding",()=>{const e=this.children.filter(s=>s.isVisible());if(!e.length)return this.getPadding();const n=e.map(s=>s.getEffectivePadding()).map(s=>this.mainDimension=="height"?[s.left,s.right]:[s.top,s.bottom]),r=ph(n),i=this.mainDimension=="height"?new Ge(e[0].getEffectivePadding().top,r[1],ke(e).getEffectivePadding().bottom,r[0]):new Ge(r[0],e[0].getEffectivePadding().left,r[1],ke(e).getEffectivePadding().right);return this.getPadding().add(i)})}getSize(){return this._cache("size",()=>{let e;if(this.spec[this.mainDimension])e=Va(this.spec[this.mainDimension]);else{const r=this.children.filter(i=>i.isVisible()).map(i=>i.getSize()[this.mainDimension]);e={grow:r.map(i=>+i.grow).reduce((i,s)=>i+s,0),px:$w(r,{spacing:this.spec.spacing})}}const n=this.spec[this.secondaryDimension]&&Va(this.spec[this.secondaryDimension])||{grow:1};return(this.mainDimension=="height"?new Tt(n,e):new Tt(e,n)).addPadding(this.getPadding())})}render(e,n,r={}){if(!this.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n);const i=this.children.filter(c=>c.isVisible()),s=i.map(c=>c.getSize()[this.mainDimension]),o=_w(s,n[this.mainDimension],{spacing:this.spec.spacing,devicePixelRatio:this.context.glHelper.dpr}),a=i.map(c=>c.getEffectivePadding()).map(c=>this.mainDimension=="height"?[c.left,c.right]:[c.top,c.bottom]),u=ph(a);for(let c=0;c<i.length;c++){const l=i[c],f=o[c],h=u[0]-a[c][0],p=u[1]-a[c][1],d=n[this.secondaryDimension]-h-p,g=this.mainDimension=="height"?new nt(()=>n.x+h,()=>n.y+f.location,()=>d,()=>f.size):new nt(()=>n.x+f.location,()=>n.y+h,()=>f.size,()=>d);l.render(e,g,r)}e.popView(this)}*[Symbol.iterator](){for(const e of this.children)yield e}replaceChild(e,n){const r=this.children.indexOf(e);if(r>=0)this.children[r]=n;else throw new Error("Not my child view!")}addChildBySpec(e){const n=this.children.length,r=this.context.createView(e,this,"concat"+n);return this.children.push(r),r}addChild(e){const n=this.children.length;return e.name||(e.name="concat"+n),e.parent=this,this.children.push(e),e}getDefaultResolution(e,n){return"independent"}}function ph(t){return[0,1].map(e=>t.map(n=>n[e]).reduce((n,r)=>Math.max(n,r),0))}class Hv{constructor(){this.types=[];const e=n=>(r,i,s,o)=>{var a;return new n(r,i,s,(a=r.name)!=null?a:o)};this.addViewType(Vv,e(dh)),this.addViewType(Ja,e(Za)),this.addViewType(qa,e(rt)),this.addViewType(mh,e(Ka)),this.addViewType(_a,e(Ka)),this.addViewType(Qv,e(Ka))}addViewType(e,n){this.types.push({specGuard:e,factory:n})}createView(e,n,r,i){const s=this.types.find(o=>o.specGuard(e));if(s)return s.factory(e,n,r,i!=null?i:"unnamed");throw new Error("Invalid spec, cannot figure out the view type from the properties: "+JSON.stringify([...Object.keys(e)]))}isViewSpec(e){const n=this.types.filter(r=>r.specGuard(e));if(n.length>1)throw new Error("Ambiguous spec. Cannot create a view!");return n.length==1}}function qa(t){return"mark"in t&&(X(t.mark)||Le(t.mark))}function Ja(t){return"layer"in t&&Le(t.layer)}function gh(t){return t&&(qa(t)||Ja(t))&&"aggregateSamples"in t}function Vv(t){return"import"in t}function mh(t){return"vconcat"in t&&Be(t.vconcat)}function _a(t){return"hconcat"in t&&Be(t.hconcat)}function Qv(t){return"concat"in t&&Be(t.concat)}const jv={point:zw,rect:Tw,rule:Hw,link:Yw,text:Jw};class rt extends ht{constructor(e,n,r,i){super(e,n,r,i);this.spec=e;const s=jv[this.getMarkType()];if(s)this.mark=new s(this);else throw new Error(`No such mark: ${this.getMarkType()}`);this.sampleAggregateViews=[],this._initializeAggregateViews(),this.coords=void 0}*[Symbol.iterator](){for(const e of this.sampleAggregateViews)yield e}replaceChild(e,n){const r=this.sampleAggregateViews.indexOf(e);if(r>=0)this.sampleAggregateViews[r]=n;else throw new Error("Not my child view!")}render(e,n,r={}){!this.isVisible()||(n=n.shrink(this.getPadding()),this.coords=n,e.pushView(this,n),e.renderMark(this.mark,r),e.popView(this))}getMarkType(){return typeof this.spec.mark=="object"?this.spec.mark.type:this.spec.mark}resolve(e){var r;const n=this.mark.encoding;for(const[i,s]of Object.entries(n)){if(!Pe(s))continue;let o=pn((r=s.resolutionChannel)!=null?r:i);if(e=="axis"&&!yr(o))continue;let a=this;for(;a.parent instanceof ht&&["shared","excluded"].includes(a.parent.getConfiguredOrDefaultResolution(o,e))&&a.getConfiguredOrDefaultResolution(o,e)!="excluded";)a=a.parent;a.resolutions[e][o]||(a.resolutions[e][o]=e=="scale"?new kv(o):new Gv(o)),yr(i)?a.resolutions[e][o].pushUnitView(this,i):e=="scale"&&a.resolutions[e][o].pushUnitView(this,i)}}getAccessor(e){return this._cache("accessor/"+e,()=>{const n=this.mark.encoding;if(n&&n[e])return this.context.accessorFactory.createAccessor(n[e])})}getFacetAccessor(e){const n=this.getAccessor("sample");return n||super.getFacetAccessor(this)}getCollector(){return this.context.dataFlow.findCollectorByKey(this)}_validateDomainQuery(e){if(br(e))throw new Error(`getDomain(${e}), must only be called for primary channels!`);const n=this.mark.encoding[e];if(!Pe(n))throw new Error("The channel has no scale, cannot get domain!");return n}getConfiguredDomain(e){var i,s;const n=this._validateDomainQuery(e),r=n&&n.scale&&n.scale.domain;if(r){const o=this.getScaleResolution((i=n.resolutionChannel)!=null?i:e);return ch((s=n.type)!=null?s:"nominal",o.fromComplexInterval(r))}}extractDataDomain(e){var a;const r=(a=this._validateDomainQuery(e).type)!=null?a:"nominal",i=u=>{let c;const l=this.mark.encoding[u];if(l){const f=this.context.accessorFactory.createAccessor(l);if(f)if(c=ch(r),f.constant)c.extend(f({}));else{const h=this.getCollector();(h==null?void 0:h.completed)&&h.visitData(p=>c.extend(f(p)))}}return c};let s=i(e);const o=na[e];if(o){const u=i(o);u&&s.extendAll(u)}return s}getZoomLevel(){const e=n=>{var r,i;return(i=(r=this.getScaleResolution(n))==null?void 0:r.getZoomLevel())!=null?i:1};return xr.map(e).reduce((n,r)=>n*r,1)}_initializeAggregateViews(){var e,n;if(gh(this.spec))for(const r of this.spec.aggregateSamples){r.transform=[...(e=r.transform)!=null?e:[],{type:"mergeFacets"}],r.encoding=Se(T({},(n=r.encoding)!=null?n:{}),{sample:null});const i=this.context.createView(r,this,"summaryView");i.getFacetFields=s=>{},this.sampleAggregateViews.push(i)}}getDefaultResolution(e,n){return e=="x"?"shared":"independent"}}function Yv(t,e,n){return n=(n-t)/(e-t),n=Math.max(0,Math.min(1,n)),n*n*(3-2*n)}class Bn extends q{get identifier(){}handle(e){throw new Error("Source does not handle incoming data!")}async load(){}}function Ah(t){var n,r;const e=T({},t.format);if((n=e.type)!=null||(e.type=Kv(t)&&Wv(t.url)),(r=e.parse)!=null||(e.parse="auto"),!e.type)throw new Error("Format for the data source was not defined and it could not be inferred: "+JSON.stringify(t));return e}function Wv(t){var e;if(Array.isArray(t)&&(t=t[0]),t)return(e=t.match(/\.(csv|tsv|json)/))==null?void 0:e[1]}const cs=t=>typeof t!="object"?Xv:Zv,Xv=t=>({data:t}),Zv=t=>t;function Kv(t){return"url"in t}function qv(t){return"dynamicCallbackSource"in t}class xh extends Bn{constructor(e){super();this.callback=e}loadSynchronously(){if(!this.callback)return;const e=this.callback();if(!e||typeof e[Symbol.iterator]!="function")throw new Error("Dynamic data callback didn't return iterable data!");this.reset(),this.beginBatch({type:"file"});let n;for(const r of e)n||(n=cs(r)),this._propagate(n(r));this.complete()}async load(){this.loadSynchronously()}}const yh="chromosome_ticks_and_labels",bh={x:"width",y:"height"};function $a(t){return t=="x"?"y":"x"}const wh=Object.fromEntries(Object.entries({x:["bottom","top"],y:["left","right"]}).map(([t,e])=>e.map(n=>[n,t])).flat(1));function qt(t){return wh[t]}class vh extends Za{constructor(e,n,r,i){const s=n=="locus",o=T(T(T({},s?$v:Eh),_v(n,e)),e);super(s?eE(o):Ch(o),r,i,`axis_${e.orient}`);if(this.axisProps=o,this.axisUpdateRequested=!0,this._addBroadcastHandler("layout",()=>{this.axisUpdateRequested=!0}),this.previousScaleDomain=[],this.axisLength=void 0,this.ticks=[],this.tickSource=new xh(()=>this.ticks),s){const a=qt(this.axisProps.orient),u=this.getScaleResolution(a).getGenome();this.findChildByName(yh).getDynamicDataSource=()=>new xh(()=>u.chromosomes)}}getOrient(){return this.axisProps.orient}getSize(){const e={px:this.getPerpendicularSize()},n={grow:1};return wh[this.axisProps.orient]=="x"?new Tt(n,e):new Tt(e,n)}getPerpendicularSize(){return eu(this.axisProps)}getDynamicDataSource(){return this.tickSource}_updateAxisData(){const e=qt(this.axisProps.orient),n=this.getScaleResolution(e).getScale(),r=n.domain();if(Yf(r,this.previousScaleDomain)&&!this.axisUpdateRequested)return;this.previousScaleDomain=r;const i=this.ticks,s=Jv(this.axisProps,n,this.axisLength,i);s!==i&&(this.ticks=s,this.tickSource.loadSynchronously()),this.axisUpdateRequested=!1}onBeforeRender(){super.onBeforeRender(),this._updateAxisData()}render(e,n,r={}){!this.isVisible()||(this.axisLength=n[bh[qt(this.getOrient())]],super.render(e,n,r))}isPickingSupported(){return!1}}function eu(t){const e=qt(t.orient);let n=t.ticks&&t.tickSize||0;return t.labels&&(n+=t.labelPadding,e=="x"?n+=t.labelFontSize:n+=30),t.title&&(n+=t.titlePadding+t.titleFontSize),n=Math.min(t.maxExtent||1/0,Math.max(t.minExtent||0,n)),n}function Jv(t,e,n,r=[]){const i=a=>25+60*Yv(100,700,a);let s=me(t.tickCount)?t.tickCount:Math.round(n/i(n));s=J0(e,s,t.tickMinStep);const o=t.values?_0(e,t.values,s):sv(e,s);if(wA(o,r,a=>a,a=>a.value))return r;{const a=av(e,s,t.format);return o.map(u=>({value:u,label:a(u)}))}}const Eh={values:null,minExtent:20,maxExtent:1/0,offset:0,domain:!0,domainWidth:1,domainColor:"gray",domainDash:null,domainDashOffset:0,domainCap:"square",ticks:!0,tickSize:5,tickWidth:1,tickColor:"gray",tickDash:null,tickDashOffset:0,tickCap:"square",tickCount:null,tickMinStep:null,labels:!0,labelAlign:"center",labelBaseline:"middle",labelPadding:4,labelFontSize:10,labelLimit:180,labelColor:"black",format:null,titleColor:"black",titleFont:"sans-serif",titleFontSize:10,titlePadding:3};function _v(t,e){var a;const n=e.orient,r=t=="nominal"||t=="ordinal";let i="center",s="middle",o=(a=e.labelAngle)!=null?a:(n=="top"||n=="bottom")&&r?-90:0;switch(n){case"left":i="right";break;case"right":i="left";break;case"top":case"bottom":Math.abs(o)>30?(i=o>0==(n=="bottom")?"left":"right",s="middle"):s=n=="top"?"alphabetic":"top";break}return{labelAlign:i,labelAngle:o,labelBaseline:s}}function Ch(t){const e=Se(T({},t),{extent:eu(t)}),n=qt(e.orient),r=$a(n),i=e.orient=="bottom"||e.orient=="right"?1:-1,s=e.orient=="bottom"||e.orient=="left"?1:0,o=()=>({name:"domain",data:{values:[0]},mark:{type:"rule",clip:!1,strokeDash:e.domainDash,strokeCap:e.domainCap,color:e.domainColor,[r]:s,size:e.domainWidth}}),a=()=>({name:"labels",mark:{type:"text",clip:!1,align:e.labelAlign,angle:e.labelAngle,baseline:e.labelBaseline,[r+"Offset"]:(e.tickSize+e.labelPadding)*i,[r]:s,size:e.labelFontSize,color:e.labelColor,minBufferSize:1500,dynamicData:!0},encoding:{[n]:{field:"value",type:"quantitative"},text:{field:"label"}}}),u=()=>({name:"ticks",mark:{type:"rule",clip:!1,strokeDash:e.tickDash,strokeCap:e.tickCap,color:e.tickColor,size:e.tickWidth,minBufferSize:300,dynamicData:!0},encoding:{[r]:{value:s},[r+"2"]:{value:s-e.tickSize/e.extent*(s?1:-1)}}}),c=()=>({name:"title",data:{values:[0]},mark:{type:"text",clip:!1,align:"center",baseline:e.orient=="bottom"?"bottom":"top",angle:[0,90,0,-90][["top","right","bottom","left"].indexOf(e.orient)],text:e.title,color:e.titleColor,[n]:.5,[r]:1-s}}),l=()=>{const h={name:"ticks_and_labels",encoding:{[n]:{field:"value",type:"quantitative"}},layer:[]};return e.ticks&&h.layer.push(u()),e.labels&&h.layer.push(a()),h},f={[bh[$a(qt(e.orient))]]:e.extent,data:{dynamicCallbackSource:!0},layer:[]};return e.domain&&f.layer.push(o()),(e.ticks||e.labels)&&f.layer.push(l()),e.title&&f.layer.push(c()),f}const $v=Se(T({},Eh),{chromTicks:!0,chromTickSize:18,chromTickWidth:1,chromTickColor:"#989898",chromTickDash:[4,2],chromTickDashOffset:1,chromLabels:!0,chromLabelFontSize:13,chromLabelFontWeight:"normal",chromLabelFontStyle:"normal",chromLabelColor:"black",chromLabelAlign:"left",chromLabelPadding:7});function eE(t){const e=Se(T({},t),{extent:eu(t)}),n=qt(e.orient),r=$a(n),i=e.orient=="bottom"||e.orient=="left"?1:0,s=()=>({name:"chromosome_ticks",mark:{type:"rule",strokeDash:t.chromTickDash,strokeDashOffset:t.chromTickDashOffset,[r]:i,[r+"2"]:i-e.chromTickSize/e.extent*(i?1:-1),color:t.chromTickColor,size:e.chromTickWidth,dynamicData:!0}}),o=()=>{let c;switch(e.orient){case"top":c={y:0,angle:0,paddingX:4,dy:-e.chromLabelPadding,viewportEdgeFadeWidthLeft:20,viewportEdgeFadeWidthRight:20,viewportEdgeFadeDistanceRight:-10,viewportEdgeFadeDistanceLeft:-20};break;case"bottom":c={y:1,angle:0,paddingX:4,dy:e.chromLabelPadding+e.chromLabelFontSize*.73,viewportEdgeFadeWidthLeft:20,viewportEdgeFadeWidthRight:20,viewportEdgeFadeDistanceRight:-10,viewportEdgeFadeDistanceLeft:-20};break;case"left":c={x:1,angle:-90,paddingY:4,dy:-e.chromLabelPadding,viewportEdgeFadeWidthBottom:20,viewportEdgeFadeWidthTop:20,viewportEdgeFadeDistanceBottom:-20,viewportEdgeFadeDistanceTop:-10};break;case"right":c={x:0,angle:90,align:"right",paddingY:4,dy:-e.chromLabelPadding};break;default:c={}}return{name:"chromosome_labels",mark:T({type:"text",size:e.chromLabelFontSize,font:e.chromLabelFont,fontWeight:e.chromLabelFontWeight,fontStyle:e.chromLabelFontStyle,color:e.chromLabelColor,align:t.chromLabelAlign,baseline:"alphabetic",clip:!1,dynamicData:!0},c),encoding:{[n+"2"]:{field:"continuousEnd",type:"locus"},text:{field:"name"}}}};let a;switch(e.orient){case"bottom":case"top":a={};break;case"left":a={labelAngle:-90,labelAlign:"center",labelPadding:6};break;case"right":a={labelAngle:90,labelAlign:"center",labelPadding:6};break;default:a={}}const u=Ch(T(T({},t),a));if(t.chromTicks||t.chromLabels){const c={name:yh,data:{dynamicCallbackSource:!0},encoding:{[n]:{field:"continuousStart",type:"locus",band:0}},layer:[]};if(t.chromTicks&&c.layer.push(s()),t.chromLabels){c.layer.push(o());let l;u.layer.filter(f=>f.name=="ticks_and_labels").forEach(f=>f.layer.filter(h=>h.name=="labels").forEach(h=>{l=h.mark})),l&&(e.orient=="top"||e.orient=="bottom"?(l.viewportEdgeFadeWidthLeft=30,l.viewportEdgeFadeDistanceLeft=40):(l.viewportEdgeFadeWidthBottom=30,l.viewportEdgeFadeDistanceBottom=40))}u.layer.push(c)}return u}const tE={x:["bottom","top"],y:["left","right"]};class nE extends ht{constructor(e,n){super({},e,n,"decorator");this.child=void 0,this.backgroundView=void 0,this.axisViews={top:void 0,right:void 0,bottom:void 0,left:void 0},["mousedown","wheel"].forEach(r=>this.addInteractionEventListener(r,this.handleMouseEvent.bind(this)))}initialize(){var n;Object.entries(tE).forEach(([r,i])=>this._initializeAxes(r,i)),this._invalidateCacheByPrefix("size/","ancestors");const e=(n=this.child.spec)==null?void 0:n.view;((e==null?void 0:e.fill)||(e==null?void 0:e.stroke))&&(this.backgroundView=new rt(rE(e),this.context,this,"background"))}getEncoding(e){return Object.values(this.axisViews).find(n=>e===n)||e==this.backgroundView?{}:super.getEncoding()}getFacetAccessor(e){if(e==this.child&&this.parent)return this.parent.getFacetAccessor(this)}*[Symbol.iterator](){yield this.child,this.backgroundView&&(yield this.backgroundView);for(const e of Object.values(this.axisViews))e&&(yield e)}_getAxisExtents(){return this._cache("size/axisExtents",()=>{const e={};for(const n of Object.values(this.axisViews))n&&(e[n.getOrient()]=n.getPerpendicularSize());return Ge.createFromRecord(e)})}_getAxisOffsets(){return this._cache("size/axisOffsets",()=>{const e={};for(const n of Object.values(this.axisViews))n&&(e[n.getOrient()]=n.axisProps.offset);return Ge.createFromRecord(e)})}getEffectivePadding(){return this._cache("size/effectivePadding",()=>this.getPadding().add(this._getAxisExtents()))}getSize(){return this._cache("size/size",()=>this.child.isVisible()?this.getSizeFromSpec().addPadding(this.getPadding()).addPadding(this.getAxisSizes()):X0)}getAxisSizes(){return this._cache("size/axisSizes",()=>this._getAxisExtents().add(this._getAxisOffsets()))}render(e,n,r={}){if(!this.isVisible()||!this.child.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n);const i=this._getAxisExtents(),s=n.shrink(i.add(this._getAxisOffsets()));this._childCoords=s,this.backgroundView&&this.backgroundView.render(e,s,r),this.child.render(e,s,r);const o=this._cache("axisViewEntries",()=>Object.entries(this.axisViews).filter(a=>!!a[1]));for(const[a,u]of o){const c=u.axisProps;let l;a=="bottom"?l=s.translate(0,s.height+c.offset).modify({height:i.bottom}):a=="top"?l=s.translate(0,-i.top-c.offset).modify({height:i.top}):a=="left"?l=s.translate(-i.left-c.offset,0).modify({width:i.left}):a=="right"&&(l=s.translate(s.width+c.offset,0).modify({width:i.right})),u.render(e,l)}e.popView(this)}_getResolutionParticipants(){return[...this.getAncestors(),...YE(this.child)]}_initializeAxes(e,n){const r=this._getResolutionParticipants().map(i=>i.resolutions.axis[e]).filter(i=>i);for(const i of r){const s=i.getAxisProps();if(s&&s.orient){if(!n.includes(s.orient))throw new Error(`Invalid axis orientation for '${e}' channel: ${s.orient}`);if(this.axisViews[s.orient])throw new Error(`The slot for ${s.orient} axis is already reserved!`);this.axisViews[s.orient]=new vh(Se(T({},s),{title:i.getTitle()}),i.scaleResolution.type,this.context,this)}}e:for(const i of r){const s=i.getAxisProps();if(s&&!s.orient){for(const o of n)if(!this.axisViews[o]){s.orient=o,this.axisViews[o]=new vh(Se(T({},s),{title:i.getTitle()}),i.scaleResolution.type,this.context,this);continue e}throw new Error("No room for axes. All slots are already reserved.")}}}handleMouseEvent(e,n){if(!!this.isZoomable()){if(n.type=="wheel"){n.uiEvent.preventDefault();const r=n.uiEvent,i=r.deltaMode?120:1;let{x:s,y:o}=n.point;const a=this.context.getCurrentHover();if(a){const u=e.shrink(this.getEffectivePadding()),c=a.mark.encoders;c.x&&!c.x2&&(s=+c.x(a.datum)*u.width+u.x),c.y&&!c.y2&&(o=(1-+c.y(a.datum))*u.height+u.y)}Math.abs(r.deltaX)<Math.abs(r.deltaY)?this._handleZoom(e,{x:s,y:o,xDelta:0,yDelta:0,zDelta:r.deltaY*i/300}):this._handleZoom(e,{x:s,y:o,xDelta:-r.deltaX*i,yDelta:0,zDelta:0})}else if(n.type=="mousedown"&&n.uiEvent.button===0){const r=n.uiEvent;r.preventDefault();let i=r;const s=a=>{this._handleZoom(e,{x:i.clientX,y:i.clientY,xDelta:a.clientX-i.clientX,yDelta:a.clientY-i.clientY,zDelta:0}),i=a},o=a=>{document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",o)};document.addEventListener("mouseup",o,!1),document.addEventListener("mousemove",s,!1)}}}isZoomable(){return this._cache("zoomable",()=>Object.values(this._getZoomableResolutions()).some(e=>e.size))}_getZoomableResolutions(){return this._cache("zoomableResolutions",()=>{const e={x:new Set,y:new Set};return this.child.visit(n=>{for(const[r,i]of Object.entries(e)){const s=n.getScaleResolution(r);s&&s.isZoomable()&&i.add(s)}}),e})}_handleZoom(e,n){for(const[r,i]of Object.entries(this._getZoomableResolutions())){if(i.size<=0)continue;const s=this._getAxisExtents(),o=e.shrink(s.add(this._getAxisOffsets())),a=o.normalizePoint(n.x,n.y),u=o.normalizePoint(n.x+n.xDelta,n.y+n.yDelta),c={x:u.x-a.x,y:u.y-a.y};for(const l of i)l.zoom(2**n.zDelta,r=="y"?1-a[r]:a[r],r=="x"?c.x:-c.y)}this.context.animator.requestRender()}}function rE(t){return{configurableVisibility:!1,data:{values:[{}]},mark:Se(T({fill:null,strokeWidth:1},t),{type:"rect",clip:!1,tooltip:null})}}function*tu(t,e=[]){for(const[n,r]of t.entries())if(r instanceof Map)for(const i of tu(r,[...e,n]))yield i;else yield[[...e,n],r]}class Dh extends q{constructor(e){super();this.params=e!=null?e:{type:"collect"},this.observers=[],this.facetBatches=void 0,this._init()}_init(){this._data=[],this.facetBatches=new ai([],JSON.stringify),this.facetBatches.set(void 0,this._data)}reset(){super.reset(),this._init()}handle(e){this._data.push(e)}beginBatch(e){Nw(e)&&(this._data=[],this.facetBatches.set(qe(e.facetId),this._data))}complete(){var i,s;const e=(i=this.params)==null?void 0:i.sort,n=e?uu(e.field,e.order):void 0,r=o=>{n&&o.sort(n)};if((s=this.params.groupby)==null?void 0:s.length){if(this.facetBatches.size>1)throw new Error("TODO: Support faceted data!");const o=this.params.groupby.map(u=>U(u)),a=ui(this._data,...o);this.facetBatches.clear();for(const[u,c]of tu(a))this.facetBatches.set(u,c)}for(const o of this.facetBatches.values())r(o);if(this.children.length)for(const o of this.facetBatches.values())for(const a of o)this._propagate(a);super.complete();for(const o of this.observers)o(this)}getData(){switch(this._checkStatus(),this.facetBatches.size){case 0:return[];case 1:return[...this.facetBatches.values()][0];default:{const e=this.facetBatches;return{[Symbol.iterator]:function*(){for(const r of e.values())for(let i=0;i<r.length;i++)yield r[i]}}}}}visitData(e){this._checkStatus();for(const n of this.facetBatches.values())for(let r=0;r<n.length;r++)e(n[r])}getItemCount(){let e=0;for(const n of this.facetBatches.values())e+=n.length;return e}_checkStatus(){if(!this.completed)throw new Error("Data propagation is not completed! No data are available.")}}class fs{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,n){let r=this.length++;for(this.ids[r]=e,this.values[r]=n;r>0;){const i=r-1>>1,s=this.values[i];if(n>=s)break;this.ids[r]=this.ids[i],this.values[r]=s,r=i}this.ids[r]=e,this.values[r]=n}pop(){if(this.length===0)return;const e=this.ids[0];if(this.length--,this.length>0){const n=this.ids[0]=this.ids[this.length],r=this.values[0]=this.values[this.length],i=this.length>>1;let s=0;for(;s<i;){let o=(s<<1)+1;const a=o+1;let u=this.ids[o],c=this.values[o];const l=this.values[a];if(a<this.length&&l<c&&(o=a,u=this.ids[a],c=l),c>=r)break;this.ids[s]=u,this.values[s]=c,s=o}this.ids[s]=n,this.values[s]=r}return e}peek(){if(this.length!==0)return this.ids[0]}peekValue(){if(this.length!==0)return this.values[0]}}class iE extends q{get behavior(){return lt}constructor(e){super();this.params=e,this.startAccessor=U(e.start),this.endAccessor=U(e.end),this.chromAccessor=e.chrom?U(e.chrom):n=>{},this.weightAccessor=e.weight?U(e.weight):n=>1,this.as={coverage:e.as||"coverage",start:e.asStart||e.start,end:e.asEnd||e.end,chrom:e.asChrom||e.chrom},this.createSegment=new Function("start","end","coverage","chrom","return {"+Object.entries(this.as).filter(([n,r])=>r).map(([n,r])=>`${JSON.stringify(r)}: ${n}`).join(", ")+"};"),this.ends=new fs}reset(){super.reset(),this.initialize()}initialize(){const e=this.as.coverage,n=this.as.end,r=this.as.chrom,i=this.startAccessor,s=this.endAccessor,o=this.chromAccessor,a=this.weightAccessor;let u,c,l,f=0,h;const p=this.ends;p.clear();const d=(m,A,b)=>{if(m==A)return;let y=!1;u&&(u[e]===b?(u[n]=A,y=!0):u[e]!=0&&this._propagate(u)),y||(u=this.createSegment(m,A,b,l))},g=()=>{let m;for(;(m=p.peekValue())!==void 0;)d(h,m,f),h=m,f-=p.pop();h=void 0,u&&(this._propagate(u),u=void 0)};this.handle=m=>{const A=i(m);let b;for(;(b=p.peekValue())!==void 0&&b<A;)d(h,b,f),h=b,f-=p.pop();if(r){let v=o(m);v!==c&&(g(),l=v,c=l)}h!==void 0&&d(h,A,f),h=A;const y=a(m);f+=y,p.push(y,s(m))},this.complete=()=>{g(),super.complete()}}}function sE(t,e,n=0,r=t.length){const i=new fs,s=r-n;let o;for(o=0;o<e&&o<s;o++)i.push(o,t[n+o]);for(;o<s;o++){const c=t[n+o];c>=i.peekValue()&&(i.push(o,c),i.pop())}const a=[];let u;for(;(u=i.pop())!==void 0;)a.push(n+u);return a.reverse()}class oE{constructor(e,n=-1/0,r=1/0){this.maxSize=e,this.lowerLimit=n,this.upperLimit=r;const i=this.maxSize*2+1;this.lowerLimits=new Float64Array(i),this.upperLimits=new Float64Array(i),this.lowerChildren=new Int32Array(i),this.upperChildren=new Int32Array(i),this.reset()}reset(){this.lowerLimits.fill(0),this.upperLimits.fill(0),this.lowerChildren.fill(0),this.upperChildren.fill(0),this.n=1,this.lowerLimits[0]=this.lowerLimit,this.upperLimits[0]=this.upperLimit}_findSlot(e,n,r=0){if(e>=this.lowerLimits[r]&&n<=this.upperLimits[r]){const i=this.lowerChildren[r];if(i){const s=this._findSlot(e,n,i);return s>=0?s:this._findSlot(e,n,this.upperChildren[r])}else return r}else return-1}reserve(e,n){if(n-e<=0)throw new Error("Cannot reserve an empty or negative-size slot!");if(this.n+1>this.lowerLimits.length)return!1;const r=this._findSlot(e,n);if(r<0)return!1;const i=this.n++,s=this.n++;return this.lowerLimits[i]=this.lowerLimits[r],this.upperLimits[i]=e,this.lowerLimits[s]=n,this.upperLimits[s]=this.upperLimits[r],this.lowerChildren[r]=i,this.upperChildren[r]=s,!0}}class aE extends q{constructor(e,n){super();var i,s;if(this.params=e,this._data=[],this.channel=(i=e.channel)!=null?i:"x",!["x","y"].includes(this.channel))throw new Error("Invalid channel: "+this.channel);this.posAccessor=U(this.params.pos),this.posBisector=oi(this.posAccessor),this.scoreAccessor=U(this.params.score),this.widthAccessor=U(this.params.width),this.laneAccessor=this.params.lane?U(this.params.lane):o=>0,this.padding=(s=this.params.padding)!=null?s:0,this.reservationMaps=new Map,this.resolution=n.getScaleResolution(this.channel);const r=()=>this._filterAndPropagate();this.schedule=()=>n.context.animator.requestTransition(r),this.resolution.addEventListener("domain",o=>this.schedule()),n._addBroadcastHandler("layoutComputed",()=>this.schedule())}complete(){const e=this.posAccessor;this._data.sort((n,r)=>e(n)-e(r)),this._scores=this._data.map(this.scoreAccessor);for(const n of new Set(this._data.map(this.laneAccessor)))this.reservationMaps.set(n,new oE(200));this.schedule(),super.complete()}_filterAndPropagate(){var o;super.reset();const e=this.resolution.getScale(),n=(o=this.resolution.members[0].view.coords)==null?void 0:o[this.channel=="x"?"width":"height"];if(!n)return;for(const a of this.reservationMaps.values())a.reset();const r=e.domain(),i=70,s=sE(this._scores,i,this.posBisector.left(this._data,r[0]),this.posBisector.right(this._data,r[1]));for(const a of s){const u=this._data[a],c=e(this.posAccessor(u))*n,l=this.widthAccessor(u)/2+this.padding;this.reservationMaps.get(this.laneAccessor(u)).reserve(c-l,c+l)&&this._propagate(u)}super.complete()}reset(){super.reset(),this._data=[],this.groups=new Map}handle(e){this._data.push(e)}}class uE extends q{constructor(e){super();this.params=e,this.predicate=void 0}initialize(){this.predicate=$o(this.params.expr,this.getGlobalObject())}handle(e){this.predicate(e)&&this._propagate(e)}}const cE="0".charCodeAt(0);function*fE(t,e=","){const n=e.charCodeAt(0);let r=0;for(let i=0;i<t.length;i++){const s=t.charCodeAt(i);s==n?(yield r,r=0):r=r*10+s-cE}yield r}class lE extends q{get behavior(){return lt}constructor(e){super();var o,a;const n=U((o=e.exons)!=null?o:"exons"),r=U((a=e.start)!=null?a:"start"),[i,s]=e.as||["exonStart","exonEnd"];this.handle=u=>{let c=r(u),l=c,f=!0;const h=n(u);for(const p of fE(h)){if(f)l=c+p;else{c=l+p;const d=Object.assign({},u);d[i]=l,d[s]=c,this._propagate(d)}f=!f}}}}class hE extends q{get behavior(){return lt}constructor(e){super();const n=qe(e.field).map(s=>U(s)),r=qe(e.separator),i=qe(e.as||e.field);if(n.length!==r.length||n.length!==i.length)throw new Error(`Lengths of "separator" (${r.length}), "fields" (${n.length}), and "as" (${i.length}) do not match!`);this.handle=s=>{if(n.some(u=>!u(s)))return;const o=n.map((u,c)=>u(s).split(r[c]));dE(o,s);const a=o[0].length;for(let u=0;u<a;u++){const c=Object.assign({},s);for(let l=0;l<n.length;l++)c[i[l]]=o[l][u];this._propagate(c)}}}}function dE(t,e){const n=t.map(r=>r.length);if(!n.every(r=>r==n[0]))throw new Error("Mismatching number of elements in the fields to be split: "+JSON.stringify(e))}class pE extends q{get behavior(){return It}constructor(e){super();this.params=e,this.as=e.as,this.fn=void 0}initialize(){this.fn=$o(this.params.expr,this.getGlobalObject())}handle(e){e[this.as]=this.fn(e),this._propagate(e)}}class Sh extends q{get behavior(){return It}constructor(e,n){super();var d;const r=(d=e.channel)!=null?d:"x";if(!["x","y"].includes(r))throw new Error("Invalid channel: "+r);const i=n.getScaleResolution(r).getGenome();if(!i)throw new Error("LinearizeGenomicCoordinate transform requires a locus scale!");const s=U(e.chrom),o=qe(e.pos).map(g=>U(g)),a=qe(e.as);if(o.length!=a.length)throw new Error('The number of "pos" and "as" elements must be equal!');const u=qe(e.offset);let c;if(u.length==0)c=new Array(o.length).fill(0);else if(u.length==1)c=new Array(o.length).fill(u[0]);else if(u.length==o.length)c=u;else throw new Error(`Invalid "offset" parameter: ${JSON.stringify(e.offset)}!`);const l=new Function("datum","chromOffset","posAccessors",a.map((g,m)=>`datum[${JSON.stringify(g)}] = chromOffset + +posAccessors[${m}](datum) - ${c[m]};`).join(`
|
|
217
|
-
`));let f,h=0;const p=g=>{if(g!==f){if(h=i.cumulativeChromPositions.get(g),h===void 0)throw new Error("Unknown chromosome/contig: "+g);f=g}return h};this.handle=g=>{l(g,p(s(g)),o),this._propagate(g)}}}var Mh={pages:["Lato-Regular.png"],chars:[{id:87,width:53,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:43.491,chnl:15,x:0,y:0,page:0},{id:124,width:17,height:50,xoffset:0,yoffset:-32.193000000000005,xadvance:10.521,chnl:15,x:0,y:42,page:0},{id:40,width:20,height:49,xoffset:0,yoffset:-32.571000000000005,xadvance:11.214,chnl:15,x:0,y:94,page:0},{id:41,width:19,height:49,xoffset:0,yoffset:-32.571000000000005,xadvance:11.214,chnl:15,x:0,y:145,page:0},{id:36,width:32,height:49,xoffset:0,yoffset:-34.419000000000004,xadvance:24.360000000000003,chnl:15,x:0,y:196,page:0},{id:125,width:21,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.642000000000001,chnl:15,x:0,y:247,page:0},{id:91,width:22,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.852,chnl:15,x:0,y:297,page:0},{id:93,width:19,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.852,chnl:15,x:0,y:347,page:0},{id:123,width:21,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.642000000000001,chnl:15,x:0,y:397,page:0},{id:106,width:19,height:48,xoffset:0,yoffset:-30.639000000000003,xadvance:10.08,chnl:15,x:0,y:447,page:0},{id:81,width:43,height:47,xoffset:0,yoffset:-30.429000000000002,xadvance:33.621,chnl:15,x:21,y:447,page:0},{id:77,width:45,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:38.997,chnl:15,x:66,y:447,page:0},{id:64,width:43,height:44,xoffset:0,yoffset:-28.539,xadvance:35.133,chnl:15,x:23,y:397,page:0},{id:92,width:28,height:43,xoffset:0,yoffset:-30.933000000000003,xadvance:18.984,chnl:15,x:68,y:397,page:0},{id:47,width:28,height:43,xoffset:0,yoffset:-30.933000000000003,xadvance:18.984,chnl:15,x:98,y:397,page:0},{id:109,width:42,height:32,xoffset:0,yoffset:-21.609,xadvance:34.545,chnl:15,x:113,y:447,page:0},{id:119,width:42,height:31,xoffset:0,yoffset:-21.315,xadvance:32.991,chnl:15,x:157,y:447,page:0},{id:42,width:25,height:42,xoffset:0,yoffset:-31.626,xadvance:17.85,chnl:15,x:128,y:397,page:0},{id:37,width:42,height:41,xoffset:0,yoffset:-30.387,xadvance:33.663000000000004,chnl:15,x:155,y:397,page:0},{id:79,width:42,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:33.621,chnl:15,x:199,y:397,page:0},{id:102,width:24,height:41,xoffset:0,yoffset:-30.534000000000002,xadvance:14.721,chnl:15,x:243,y:397,page:0},{id:100,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.520000000000003,chnl:15,x:269,y:397,page:0},{id:98,width:32,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.520000000000003,chnl:15,x:302,y:397,page:0},{id:56,width:32,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:336,y:397,page:0},{id:38,width:40,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:29.904000000000003,chnl:15,x:370,y:397,page:0},{id:108,width:17,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:9.912,chnl:15,x:412,y:397,page:0},{id:107,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:21.336000000000002,chnl:15,x:431,y:397,page:0},{id:48,width:33,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:464,y:397,page:0},{id:71,width:38,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:30.681,chnl:15,x:21,y:347,page:0},{id:83,width:31,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:22.785,chnl:15,x:61,y:347,page:0},{id:63,width:27,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:18.795,chnl:15,x:94,y:347,page:0},{id:105,width:18,height:41,xoffset:0,yoffset:-30.639000000000003,xadvance:10.08,chnl:15,x:123,y:347,page:0},{id:51,width:32,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:143,y:347,page:0},{id:104,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.436,chnl:15,x:177,y:347,page:0},{id:67,width:37,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:28.056,chnl:15,x:210,y:347,page:0},{id:88,width:37,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.258000000000003,chnl:15,x:249,y:347,page:0},{id:68,width:40,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:31.941000000000003,chnl:15,x:288,y:347,page:0},{id:70,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:23.751,chnl:15,x:330,y:347,page:0},{id:34,width:23,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:15.561000000000002,chnl:15,x:364,y:347,page:0},{id:72,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:32.067,chnl:15,x:389,y:347,page:0},{id:73,width:18,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:11.760000000000002,chnl:15,x:429,y:347,page:0},{id:74,width:24,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:17.745,chnl:15,x:449,y:347,page:0},{id:75,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.825000000000003,chnl:15,x:24,y:297,page:0},{id:76,width:31,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:21.567,chnl:15,x:475,y:347,page:0},{id:66,width:35,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.153000000000002,chnl:15,x:64,y:297,page:0},{id:78,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:32.067,chnl:15,x:101,y:297,page:0},{id:33,width:18,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:11.298,chnl:15,x:141,y:297,page:0},{id:80,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:25.221,chnl:15,x:161,y:297,page:0},{id:65,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:28.434,chnl:15,x:197,y:297,page:0},{id:82,width:36,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:26.313000000000002,chnl:15,x:237,y:297,page:0},{id:35,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:275,y:297,page:0},{id:84,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.801000000000002,chnl:15,x:310,y:297,page:0},{id:85,width:37,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:30.891000000000002,chnl:15,x:346,y:297,page:0},{id:86,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:28.434,chnl:15,x:385,y:297,page:0},{id:39,width:16,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:8.568000000000001,chnl:15,x:425,y:297,page:0},{id:69,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.255000000000003,chnl:15,x:443,y:297,page:0},{id:89,width:36,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:26.208000000000002,chnl:15,x:23,y:247,page:0},{id:90,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:25.284000000000002,chnl:15,x:477,y:297,page:0},{id:49,width:31,height:40,xoffset:0,yoffset:-30.156000000000002,xadvance:24.360000000000003,chnl:15,x:61,y:247,page:0},{id:50,width:32,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:94,y:247,page:0},{id:57,width:32,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:128,y:247,page:0},{id:94,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:162,y:247,page:0},{id:96,width:21,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:16.8,chnl:15,x:196,y:247,page:0},{id:55,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:219,y:247,page:0},{id:54,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:254,y:247,page:0},{id:53,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:289,y:247,page:0},{id:52,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:323,y:247,page:0},{id:103,width:31,height:39,xoffset:0,yoffset:-21.630000000000003,xadvance:21.84,chnl:15,x:358,y:247,page:0},{id:112,width:32,height:39,xoffset:0,yoffset:-21.651,xadvance:23.541,chnl:15,x:391,y:247,page:0},{id:113,width:31,height:39,xoffset:0,yoffset:-21.651,xadvance:23.520000000000003,chnl:15,x:425,y:247,page:0},{id:116,width:25,height:39,xoffset:0,yoffset:-28.182000000000002,xadvance:15.057,chnl:15,x:458,y:247,page:0},{id:121,width:31,height:38,xoffset:0,yoffset:-21.273,xadvance:21.651,chnl:15,x:34,y:196,page:0},{id:59,width:18,height:36,xoffset:0,yoffset:-20.706,xadvance:10.983,chnl:15,x:485,y:247,page:0},{id:43,width:32,height:34,xoffset:0,yoffset:-24.486,xadvance:24.360000000000003,chnl:15,x:67,y:196,page:0},{id:60,width:30,height:33,xoffset:0,yoffset:-23.331000000000003,xadvance:24.360000000000003,chnl:15,x:101,y:196,page:0},{id:62,width:31,height:33,xoffset:0,yoffset:-23.331000000000003,xadvance:24.360000000000003,chnl:15,x:133,y:196,page:0},{id:117,width:30,height:32,xoffset:0,yoffset:-21.273,xadvance:23.415000000000003,chnl:15,x:166,y:196,page:0},{id:99,width:29,height:32,xoffset:0,yoffset:-21.609,xadvance:20.055,chnl:15,x:198,y:196,page:0},{id:110,width:31,height:32,xoffset:0,yoffset:-21.609,xadvance:23.436,chnl:15,x:229,y:196,page:0},{id:111,width:32,height:32,xoffset:0,yoffset:-21.609,xadvance:23.814,chnl:15,x:262,y:196,page:0},{id:126,width:32,height:26,xoffset:0,yoffset:-16.128,xadvance:24.360000000000003,chnl:15,x:201,y:447,page:0},{id:101,width:31,height:32,xoffset:0,yoffset:-21.609,xadvance:22.176000000000002,chnl:15,x:296,y:196,page:0},{id:114,width:25,height:32,xoffset:0,yoffset:-21.651,xadvance:15.288,chnl:15,x:329,y:196,page:0},{id:115,width:27,height:32,xoffset:0,yoffset:-21.609,xadvance:18.186,chnl:15,x:356,y:196,page:0},{id:97,width:28,height:32,xoffset:0,yoffset:-21.651,xadvance:20.874000000000002,chnl:15,x:385,y:196,page:0},{id:118,width:31,height:31,xoffset:0,yoffset:-21.273,xadvance:21.672,chnl:15,x:415,y:196,page:0},{id:61,width:31,height:29,xoffset:0,yoffset:-19.089000000000002,xadvance:24.360000000000003,chnl:15,x:448,y:196,page:0},{id:120,width:30,height:31,xoffset:0,yoffset:-21.273,xadvance:20.916,chnl:15,x:21,y:145,page:0},{id:58,width:18,height:31,xoffset:0,yoffset:-20.706,xadvance:10.5,chnl:15,x:53,y:145,page:0},{id:122,width:28,height:31,xoffset:0,yoffset:-21.273,xadvance:18.984,chnl:15,x:73,y:145,page:0},{id:95,width:28,height:16,xoffset:0,yoffset:0,xadvance:19.278000000000002,chnl:15,x:235,y:447,page:0},{id:45,width:23,height:24,xoffset:0,yoffset:-14.175,xadvance:15.603000000000002,chnl:15,x:481,y:196,page:0},{id:44,width:17,height:21,xoffset:0,yoffset:-4.956,xadvance:9.534,chnl:15,x:103,y:145,page:0},{id:46,width:18,height:15,xoffset:0,yoffset:-4.956,xadvance:9.912,chnl:15,x:0,y:497,page:0},{id:32,width:0,height:0,xoffset:0,yoffset:0,xadvance:10.752,chnl:15,x:20,y:497,page:0}],info:{face:"Lato Regular",size:42,bold:0,italic:0,charset:[" ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"],unicode:1,stretchH:100,smooth:1,aa:1,padding:[0,0,0,0],spacing:[2,2]},common:{lineHeight:50.400000000000006,base:41.454,scaleW:512,scaleH:512,pages:1,packed:0,alphaChnl:0,redChnl:0,greenChnl:0,blueChnl:0},kernings:[]};class gE extends q{get behavior(){return It}constructor(e){super();const n=Ga(Mh),r=U(e.field),i=e.as,s=e.fontSize;this.handle=o=>{const a=r(o);a!==void 0?o[i]=n.measureWidth(a,s):o[i]=0,this._propagate(o)}}}const mE=65536;class AE extends q{get behavior(){return It}constructor(e){super();this.params=e}reset(){this.initialize()}initialize(){const e=this.params,n=e.as||"lane",r=me(e.spacing)?e.spacing:1,i=U(e.start),s=U(e.end);if(!e.preference!=!e.preferredOrder)throw new Error('Must specify both "preference" and "preferredOrder"');if(e.preference){const o=new Float64Array(mE),a=U(e.preference),u=e.preferredOrder;let c=1/0;this.handle=l=>{const f=i(l);f<c&&o.fill(-1/0),c=f;const h=u.indexOf(a(l));let p=-1;if(h>=0&&o[h]<f)p=h;else{const d=i(l);for(p=0;p<o.length&&!(o[p]<d);p++);if(p>=o.length)throw new Error("Out of lanes!")}o[p]=s(l)+r,l[n]=p,this._propagate(l)}}else{const o=new fs,a=new fs;let u=-1/0,c=0;this.handle=l=>{const f=i(l);for(;o.length&&(o.peekValue()<=f||f<u);){const p=o.pop();a.push(p,p)}u=f;let h=a.pop();h===void 0&&(h=c++),l[n]=h,this._propagate(l),o.push(h,s(l)+r)}}}}class xE extends q{get behavior(){return lt}constructor(e){super();if(e.as&&e.as.length!=e.fields.length)throw new Error('"fields" and "as" have unequal lengths!');const n=e.fields.map(i=>U(i)),r=e.as?e.as:n.map(Me);this.handle=i=>{const s={};for(let o=0;o<n.length;o++)s[r[o]]=n[o](i);this._propagate(s)}}}class yE extends q{get behavior(){return It}constructor(e){super();const n=new RegExp(e.regex),r=typeof e.as=="string"?[e.as]:e.as,i=U(e.field);this.handle=s=>{const o=i(s);if(X(o)){const a=o.match(n);if(a){if(a.length-1!=r.length)throw new Error('The number of RegEx groups and the length of "as" do not match!');for(let u=0;u<r.length;u++)s[r[u]]=a[u+1]}else if(e.skipInvalidInput)for(let u=0;u<r.length;u++)s[r[u]]=void 0;else throw new Error(`"${o}" does not match the given regex: ${n.toString()}`)}else if(!e.skipInvalidInput)throw new Error(`Trying to match a non-string field. Encountered type: ${typeof o}, field content: "${o}".`);this._propagate(s)}}}class bE extends q{get behavior(){return lt}constructor(e){super();const n=qe(e.columnRegex).map(h=>new RegExp(h)),r=qe(e.asValue);if(n.length!=r.length)throw new Error('Lengths of "columnRegex" and "as" are not equal!');const i=e.skipRegex?new RegExp(e.skipRegex):void 0,s=e.asKey||"sample";let o,a,u;const c=h=>{var m;const p=Object.keys(h),d=new Map;for(const[A,b]of n.entries())for(const y of p){const v=(m=b.exec(y))==null?void 0:m[1];if(v!==void 0){let D=d.get(v);D||(D=[],d.set(v,D)),D[A]=y}}o=[...d.entries()],a=p.filter(A=>!n.some(b=>b.test(A))&&!(i&&i.test(A)));const g=[...a.map(A=>JSON.stringify(A)+": datum["+JSON.stringify(A)+"]"),JSON.stringify(s)+": sampleId",...r.map(A=>JSON.stringify(A)+": null")];u=new Function("datum","sampleId",`return {
|
|
143
|
+
*/const _b="locus",$b="index";var ew=5;function tw(t){const e=t.type;return!t.bins&&(e===fn||e===or||e===ar)}function y0(t){return Ve(t)&&![Qe,$b,_b].includes(t)}function b0(t){return t||{warn:(e,...n)=>console.warn(e,...n)}}var nw=Vr(["set","modified","clear","type","scheme","schemeExtent","schemeCount","domain","domainMin","domainMid","domainMax","domainRaw","domainImplicit","nice","zero","bins","range","rangeStep","round","reverse","interpolate","interpolateGamma","zoom","fp64","name"]);function w0(t,e,n){n=b0(n);for(const r in t)if(!nw[r]){if(r==="padding"&&y0(e.type))continue;he(e[r])?e[r](t[r]):n.warn("Unsupported scale property: "+r)}lw(e,t,cw(e,t,ow(e,t,n)))}function rw(t,e){const n=iw(t),r=z(n);if(!r)throw new Error("Unknown scale type: "+n);const i=r();return w0(t,i,e),i}function iw(t){var e=t.type,n="",r;return e===Qe?Qe+"-"+fn:(sw(t)&&(r=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(t.domainMid!=null):0,n=r===2?Qe+"-":r===3?hn+"-":""),(n+e||fn).toLowerCase())}function sw(t){const e=t.type;return Ve(e)&&e!==ol&&e!==al&&(t.scheme||t.range&&t.range.length&&t.range.every(W))}function ow(t,e,n){if(!t.domain)return 0;n=b0(n);var r=aw(t,e.domainRaw,n);if(r>-1)return r;var i=e.domain,s=t.type,o=e.zero||e.zero===void 0&&tw(t),a,u;return i?(y0(s)&&e.padding&&i[0]!==Te(i)&&(i=uw(s,i,e.range,e.padding,e.exponent,e.constant)),(o||e.domainMin!=null||e.domainMax!=null||e.domainMid!=null)&&(a=(i=i.slice()).length-1||1,o&&(i[0]>0&&(i[0]=0),i[a]<0&&(i[a]=0)),e.domainMin!=null&&(i[0]=e.domainMin),e.domainMax!=null&&(i[a]=e.domainMax),e.domainMid!=null&&(u=e.domainMid,(u<i[0]||u>i[a])&&n.warn("Scale domainMid exceeds domain min or max.",u),i.splice(a,0,u))),t.domain(v0(s,i,n)),s===Eo&&t.unknown(e.domainImplicit?Vs:void 0),e.nice&&t.nice&&t.nice(e.nice!==!0&&A0(t,e.nice)||null),i.length):0}function aw(t,e,n){return e?(t.domain(v0(t.type,e,n)),e.length):-1}function uw(t,e,n,r,i,s){var o=Math.abs(Te(n)-n[0]),a=o/(o-2*r),u=t===mt?Ha(e,null,a):t===ar?as(e,null,a,.5):t===or?as(e,null,a,i||1):t===Ai?yh(e,null,a,s||1):os(e,null,a);return e=e.slice(),e[0]=u[0],e[e.length-1]=u[1],e}function v0(t,e,n){if(pl(t)){var r=Math.abs(e.reduce(function(i,s){return i+(s<0?-1:s>0?1:0)},0));r!==e.length&&n.warn("Log scale domain includes zero: "+Qr(e))}return e}function cw(t,e,n){let r=e.bins;if(r&&!Ce(r)){const i=(r.start==null||r.stop==null)&&t.domain(),s=r.start==null?i[0]:r.start,o=r.stop==null?Te(i):r.stop,a=r.step;a||Y("Scale bins parameter missing step property."),r=Rn(s,o+a,a)}return r?t.bins=r:t.bins&&delete t.bins,t.type===Do&&(r?!e.domain&&!e.domainRaw&&(t.domain(r),n=r.length):t.bins=t.domain()),n}function lw(t,e,n){var r=t.type,i=e.round||!1,s=e.range;if(e.rangeStep!=null)s=fw(r,e,n);else if(e.scheme&&(s=hw(r,e,n),he(s))){if(t.interpolator)return t.interpolator(s);Y(`Scale type ${r} does not support interpolating color schemes.`)}if(s&&yi(r))return t.interpolator(bi(Ca(s,e.reverse),e.interpolate,e.interpolateGamma));s&&e.interpolate&&t.interpolate?t.interpolate(gl(e.interpolate,e.interpolateGamma)):he(t.round)?t.round(i):he(t.rangeRound)&&t.interpolate(i?ir:pt),s&&t.range(Ca(s,e.reverse))}function fw(t,e,n){t!==ll&&t!==Co&&Y("Only band and point scales support rangeStep.");var r=(e.paddingOuter!=null?e.paddingOuter:e.padding)||0,i=t===Co?1:(e.paddingInner!=null?e.paddingInner:e.padding)||0;return[0,e.rangeStep*wo(n,i,r)]}function hw(t,e,n){var r=e.schemeExtent,i,s;return Ce(e.scheme)?s=bi(e.scheme,e.interpolate,e.interpolateGamma):(i=e.scheme.toLowerCase(),s=Bo(i),s||Y(`Unrecognized scheme name: ${e.scheme}`)),n=t===cl?n+1:t===Do?n-1:t===vo||t===ul?+e.schemeCount||ew:n,yi(t)?E0(s,r,e.reverse):he(s)?wm(E0(s,r),n):t===Eo?s:s.slice(0,n)}function E0(t,e,n){return he(t)&&(e||n)?bm(t,Ca(e||[0,1],n)):t}function Ca(t,e){return e?t.slice().reverse():t}const C0=re(",d");function dw(t,e){return t.chrom+":"+C0(Math.floor(t.pos+1))+"-"+(t.chrom!=e.chrom?e.chrom+":":"")+C0(Math.ceil(e.pos))}const pw="https://genomespy.app/data/genomes/";class gw{constructor(e){if(this.config=e,!this.config.contigs&&typeof this.config.name!="string")throw new Error("No name has been defined for the genome assembly!");this.chromosomes=[],this.cumulativeChromPositions=new Map,this.chromosomesByName=new Map,this.startByIndex=[],this.totalSize=0,this.config.contigs&&this.setChromSizes(this.config.contigs)}get name(){return this.config.name}async load(e){if(!this.config.contigs){this.config.baseUrl?this.baseUrl=/^http(s)?/.test(this.config.baseUrl)?this.config.baseUrl:e+"/"+this.config.baseUrl:this.baseUrl=pw;try{this.setChromSizes(mw(await ri({baseURL:this.baseUrl}).load(`${this.config.name}/${this.name}.chrom.sizes`)))}catch(n){throw new Error(`Could not load chrom sizes: ${n.message}`)}}}setChromSizes(e){let n=0;this.startByIndex=[0];for(let r=0;r<e.length;r++){this.startByIndex.push(n);const i=e[r].size,s=ve(M({},e[r]),{continuousStart:n,continuousEnd:n+i,continuousInterval:[n,n+i],index:r,number:r+1,odd:!(r&1)});this.chromosomes.push(s);const o=s.name.replace(/^chr/i,"");for(const a of["chr"+o,"CHR"+o,"Chr"+o,s.number,""+s.number,o,s.name])this.cumulativeChromPositions.set(a,n),this.chromosomesByName.set(a,s);n+=s.size}this.totalSize=n}getExtent(){return[0,this.totalSize]}toContinuous(e,n){let r=this.cumulativeChromPositions.get(e);if(r===void 0)throw new Error("Unknown chromosome/contig: "+e);return r+ +n}toChromosome(e){if(e>=this.totalSize)return;e=Math.floor(e);const n=_t(this.startByIndex,e)-1;if(n>0&&n<=this.chromosomes.length)return this.chromosomes[n-1]}toChromosomal(e){const n=this.toChromosome(e);if(!!n)return{chrom:n.name,pos:Math.floor(e)-n.continuousStart}}getChromosome(e){return this.chromosomesByName.get(e)}formatInterval(e){return dw(...this.toChromosomalInterval(e))}toChromosomalInterval(e){const n=this.toChromosomal(e[0]+.5),r=this.toChromosomal(e[1]-.5);return r.pos+=1,[n,r]}toContinuousInterval(e){var i,s,o;let[n,r]=e;return r||(r=n),[this.toContinuous(n.chrom,(i=n.pos)!=null?i:0),this.toContinuous(r.chrom,(o=r.pos)!=null?o:(s=this.chromosomesByName.get(r.chrom))==null?void 0:s.size)]}parseInterval(e){const n=e.match(/^(chr[0-9A-Z]+)(?::([0-9,]+)(?:-(?:(chr[0-9A-Z]+):)?([0-9,]+))?)?$/);if(n){const r=n[1];if(n.slice(2).every(a=>a===void 0)){const a=this.getChromosome(r);return a?[a.continuousStart,a.continuousEnd]:void 0}const i=n[3]||r,s=parseInt(n[2].replace(/,/g,"")),o=n[4]!==void 0?parseInt(n[4].replace(/,/g,"")):s;return[this.toContinuous(r,s-1),this.toContinuous(i,o)]}}}function mw(t){return Oh(t).filter(e=>/^chr[0-9A-Z]+$/.test(e[0])).map(([e,n])=>({name:e,size:parseInt(n)}))}function D0(t){return Ie(t)&&"chrom"in t}function Aw(t){return t.every(D0)}class kr extends Array{constructor(){super(),this.type=void 0}extend(e){return this}extendAll(e){if(e instanceof kr&&e.type!=this.type)throw new Error(`Cannot combine different types of domains: ${this.type} and ${e.type}`);for(const n of e)this.extend(n);return this}extendAllWithAccessor(e,n){for(const r of e)this.extend(n(r));return this}}class Da extends kr{constructor(){super(),this.type="quantitative"}extend(e){return e==null||Number.isNaN(e)?this:(e=+e,this.length?e<this[0]?this[0]=e:e>this[1]&&(this[1]=e):(this.push(e),this.push(e)),this)}}class S0 extends kr{constructor(){super(),this.type="ordinal",this.uniqueValues=new Set}extend(e){return e==null||Number.isNaN(e)?this:(this.uniqueValues.has(e)||(this.uniqueValues.add(e),this.push(e)),this)}}class B0 extends S0{constructor(){super(),this.type="nominal"}}class xw extends kr{constructor(e){super();let n=0;for(let r=1;r<e.length;r++)n+=Math.sign(e[r]-e[r-1]);if(Math.abs(n)!=e.length-1)throw new Error("Piecewise domain must be strictly increasing or decreasing: "+JSON.stringify(e));e.forEach(r=>this.push(r))}extend(e){if(this.includes(e))return this;throw new Error("Piecewise domains are immutable and cannot be unioned!")}}const F0={quantitative:Da,index:Da,locus:Da,nominal:B0,ordinal:S0};function M0(t,e){if(t=="quantitative"&&yw(e)){const n=new xw(e);return n.type=t,n}else if(F0[t]){const n=new F0[t];return n.type=t,e&&n.extendAll(e),n}throw new Error("Unknown type: "+t)}function yw(t){return t&&t.length>0&&t.length!=2&&t.every(e=>typeof e=="number")}function bw(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}const I0="quantitative",T0="ordinal",P0="nominal",L0="locus",ww="index";class vw{constructor(e){this.channel=e,this.members=[],this.type=null,this._zoomExtent=void 0,this._domainListeners=new Set,this.name=void 0,this._scale=void 0}addEventListener(e,n){if(e!="domain")throw new Error("Unsupported event type: "+e);this._domainListeners.add(n)}removeEventListener(e,n){if(e!="domain")throw new Error("Unsupported event type: "+e);this._domainListeners.delete(n)}_notifyDomainListeners(){for(const e of this._domainListeners.values())e({type:"domain",scaleResolution:this})}pushUnitView(e,n){var o;const r=zo(e,n),i=r.type,s=(o=r==null?void 0:r.scale)==null?void 0:o.name;if(s){if(this.name!==void 0&&s!=this.name)throw new Error(`Shared scales have conflicting names: "${s}" vs. "${this.name}"!`);this.name=s}if(!this.type)this.type=i;else if(i!==this.type&&!vr(n))throw new Error(`Can not use shared scale for different data types: ${this.type} vs. ${i}. Use "resolve: independent" for channel ${this.channel}`);this.members.push({view:e,channel:n})}isExplicitDomain(){return!!this.getConfiguredDomain()}_getMergedScaleProps(){return Dn(this,"mergedScaleProps",()=>{const e=this.members.map(n=>zo(n.view,n.channel).scale).filter(n=>n!==void 0);return ts(e,"scale",["domain"])})}getScaleProps(){return Dn(this,"scaleProps",()=>{var i,s;const e=this._getMergedScaleProps();if(e===null||e.type=="null")return{type:"null"};const n=M(M({},this._getDefaultScaleProperties(this.type)),e);n.type||(n.type=Ew(this.channel,this.type));const r=this.getInitialDomain();return r&&r.length>0?n.domain=r:Ht(n.type)&&(n.domain=new B0),!n.domain&&n.domainMid!==void 0&&(n.domain=[(i=n.domainMin)!=null?i:0,(s=n.domainMax)!=null?s:1]),this.channel=="y"&&Ht(n.type)&&n.reverse==null&&(n.reverse=!0),n.range&&n.scheme&&delete n.scheme,!("zoom"in n)&&["index","locus"].includes(n.type)&&(n.zoom=!0),Cw(n,this.channel),n})}getInitialDomain(){var e;return(e=this.getConfiguredDomain())!=null?e:this.type==L0?this.getGenome().getExtent():this.getDataDomain()}getConfiguredDomain(){return this._reduceDomains(e=>vr(e.channel)?void 0:e.view.getConfiguredDomain(e.channel))}getDataDomain(){return this._reduceDomains(e=>vr(e.channel)?void 0:e.view.extractDataDomain(e.channel))}reconfigure(){if(this._scale&&this._scale.type!="null"){n0(this,"scaleProps");const e=this.getScaleProps();w0(e,this._scale),Ve(this._scale.type)&&(this._zoomExtent=this._getZoomExtent())}}getScale(){if(this._scale)return this._scale;const e=this.getScaleProps(),n=rw(e);return this._scale=n,ug(n)&&n.genome(this.getGenome()),Ve(n.type)&&(this._zoomExtent=this._getZoomExtent()),n}getDomain(){return this.getScale().domain()}getComplexDomain(){var e,n;return(n=(e=this.getGenome())==null?void 0:e.toChromosomalInterval(this.getDomain()))!=null?n:this.getDomain()}isZoomed(){return this.isZoomable()&&yl(this.getInitialDomain(),this.getDomain())}isZoomable(){if(!Rl(this.channel))return!1;const e=this.getScale().type;return["linear","locus","index","log","pow","sqrt"].includes(e)?!!this.getScaleProps().zoom:!1}zoom(e,n,r){if(!this.isZoomable())return!1;const i=this.getScale(),s=i.domain();let o=[...s],a=i.invert(n);switch(this.getScaleProps().reverse&&(r=-r),"align"in i&&(a+=i.align()),i.type){case"linear":case"index":case"locus":o=mh(o,r||0),o=os(o,a,e);break;case"log":o=Ah(o,r||0),o=Ha(o,a,e);break;case"pow":case"sqrt":{const u=i;o=xh(o,r||0,u.exponent()),o=as(o,a,e,u.exponent());break}default:throw new Error("Zooming is not implemented for: "+i.type)}return this._zoomExtent&&(o=bh(o,this._zoomExtent[0],this._zoomExtent[1])),[0,1].some(u=>o[u]!=s[u])?(i.domain(o),this._notifyDomainListeners(),!0):!1}async zoomTo(e,n=!1){var a;if(Ur(n)&&(n=n?700:0),!this.isZoomable())throw new Error("Not a zoomable scale!");const r=this.fromComplexInterval(e),i=(a=this.members[0])==null?void 0:a.view.context.animator,s=this.getScale(),o=s.domain();if(n>0&&o.length==2){const u=o[1]-o[0],c=o[0]+u/2,f=r[1]-r[0],l=r[0]+f/2,h=kc([c,0,u],[l,0,f]).rho(.7);await i.transition({duration:n/1e3*h.duration,easingFunction:bw,onUpdate:p=>{const[d,,g]=h(p);s.domain([d-g/2,d+g/2]),this._notifyDomainListeners()}}),s.domain(r),this._notifyDomainListeners()}else s.domain(r),i==null||i.requestRender(),this._notifyDomainListeners()}getZoomLevel(){return this.isZoomable()?Hr(this._zoomExtent)/Hr(this.getScale().domain()):1}_getZoomExtent(){const e=this.getScaleProps(),n=e.zoom;if(Dw(n)&&Ce(n.extent))return this.fromComplexInterval(n.extent);if(n)return e.type=="locus"?this.getGenome().getExtent():this._scale.domain()}_getDefaultScaleProperties(e){const n=this.channel,r={};return this.isExplicitDomain()&&(r.zero=!1),wr(n)?r.nice=!this.isExplicitDomain():Yt(n)?r.scheme=e==P0?"tableau10":e==T0?"blues":"viridis":Bi(n)?r.range=Nl(n):n=="size"?r.range=[0,400]:n=="angle"&&(r.range=[0,360]),r}getGenome(){var n;if(this.type!=="locus")return;const e=(n=this.members[0].view.context.genomeStore)==null?void 0:n.getGenome();if(!e)throw new Error("No genome has been defined!");return e}invertToComplex(e){const n=this.getScale();if("invert"in n){const r=n.invert(e);return this.toComplex(r)}else throw new Error("The scale does not support inverting!")}toComplex(e){const n=this.getGenome();return n?n.toChromosomal(e):e}fromComplex(e){return D0(e)?this.getGenome().toContinuous(e.chrom,e.pos):e}fromComplexInterval(e){return this.type==="locus"&&Aw(e)?this.getGenome().toContinuousInterval(e):e}_getViewPaths(){return this.members.map(e=>e.view.getPathString()).join(", ")}_reduceDomains(e){const n=this.members.map(e).filter(r=>!!r);if(n.length)return n.reduce((r,i)=>r.extendAll(i))}}function Ew(t,e){if(e==ww||e==L0){if(Rl(t))return e;throw new Error(`${t} does not support ${e} data type. Only positional channels do.`)}const n={x:["band","band","linear"],y:["band","band","linear"],size:[void 0,"point","linear"],opacity:[void 0,"point","linear"],fillOpacity:[void 0,"point","linear"],strokeOpacity:[void 0,"point","linear"],color:["ordinal","ordinal","linear"],fill:["ordinal","ordinal","linear"],stroke:["ordinal","ordinal","linear"],strokeWidth:[void 0,void 0,"linear"],shape:["ordinal","ordinal",void 0],dx:[void 0,void 0,"null"],dy:[void 0,void 0,"null"],angle:[void 0,void 0,"linear"]},i=["uniqueId","facetIndex","semanticScore","search","text","sample"].includes(t)?"null":n[t]?n[t][[P0,T0,I0].indexOf(e)]:e==I0?"linear":"ordinal";if(i===void 0)throw new Error(`Channel "${t}" is not compatible with "${e}" data type. Use of a proper scale may be needed.`);return i}function Cw(t,e){wr(e)&&t.type!=="ordinal"&&(t.range=[0,1]),e=="opacity"&&Ve(t.type)&&(t.clamp=!0)}function Dw(t){return Ie(t)}function Sa(...t){for(const e of t)if(e!==void 0)return e}class Sw{constructor(e){this.channel=e,this.members=[]}get scaleResolution(){var e;return(e=Be(this.members))==null?void 0:e.view.getScaleResolution(this.channel)}pushUnitView(e,n){const r=e.getScaleResolution(this.channel);if(!r)throw new Error("Cannot find a scale resolution!");if(this.scaleResolution&&r!==this.scaleResolution)throw new Error("Shared axes must have a shared scale!");this.members.push({view:e,channel:n})}getAxisProps(){return Dn(this,"axisProps",()=>{const e=this.members.map(n=>{const r=n.view.mark.encoding[n.channel];return"axis"in r&&r.axis});return e.length>0&&e.some(n=>n===null)?null:ts(e.filter(n=>n!==void 0),"axis",["title"])})}getTitle(){const e=s=>{var a;const o=zo(s.view,s.channel);if(!Fe(o))return{member:s,explicitTitle:Sa((a=o.axis)==null?void 0:a.title,o.title),implicitTitle:Sa(xr(o)?o.field:void 0,Oo(o)?o.expr:void 0)}},n=this.members.map(e),r=n.filter(s=>{var o;if(vr(s.member.channel)&&!s.explicitTitle){const a=pn(s.member.channel);return((o=n.find(u=>u.member.view==s.member.view&&u.member.channel==a))==null?void 0:o.explicitTitle)===void 0}return!0}),i=new Set(r.map(s=>Sa(s.explicitTitle,s.implicitTitle)).filter(W));return i.size?[...i].join(", "):null}}class R0 extends g0{constructor(e,n,r,i){super(e,n,r,i),this.spec=e}}class Ba extends it{constructor(e,n,r,i){super(e,n,r,i),this.spec=e,this.children=(e.layer||[]).map((s,o)=>{if(Ia(s)||Ma(s))return n.createView(s,this,"layer"+o);throw new Error("LayerView accepts only unit or layer specs as children!")})}*[Symbol.iterator](){for(const e of this.children)yield e}render(e,n,r={}){if(!!this.isVisible()){n=n.shrink(this.getPadding()),e.pushView(this,n);for(const i of this.children)i.render(e,n,r);e.popView(this)}}}function st(t){return()=>t}class Ze{static create(e,n,r,i){return new Ze(st(e),st(n),st(r),st(i))}_offset(e,n){const r=this["_"+e];if(n===0)return r;switch(typeof n){case"number":return()=>r()+n;case"function":return()=>r()+n();default:throw new Error("Not a number of function")}}_passThrough(e){return this._offset(e,0)}constructor(e,n,r,i){this._x=e,this._y=n,this._width=r,this._height=i}get x(){return this._x()}get y(){return this._y()}get width(){return this._width()}get height(){return this._height()}get x2(){return this._x()+this._width()}get y2(){return this._y()+this._height()}equals(e){return e?this===e||this.x===e.x&&this.y===e.y&&this.width===e.width&&this.height===e.height:!1}modify(e){if(!Object.keys(e).length)return this;const n=r=>{const i=e[r];return typeof i=="number"?st(i):typeof i=="function"?i:this._passThrough(r)};return new Ze(n("x"),n("y"),n("width"),n("height"))}translate(e,n){return e===0&&n===0?this:new Ze(this._offset("x",e),this._offset("y",n),this._passThrough("width"),this._passThrough("height"))}translateBy(e){return this.translate(e.x,e.y)}expand(e,n=1){return e.left==0&&e.top==0&&e.right==0&&e.bottom==0?this:new Ze(e.left?this._offset("x",-e.left*n):this._passThrough("x"),e.top?this._offset("y",-e.top*n):this._passThrough("y"),e.width?this._offset("width",e.width*n):this._passThrough("width"),e.height?this._offset("height",e.height*n):this._passThrough("height"))}shrink(e){return this.expand(e,-1)}intersect(e){return this===e?this:new Ze(()=>Math.max(this.x,e.x),()=>Math.max(this.y,e.y),()=>Math.min(this.x2,e.x2)-Math.max(this.x,e.x),()=>Math.min(this.y2,e.y2)-Math.max(this.y,e.y))}isDefined(){return this.width>=0&&this.height>=0}flatten(){return new Ze(st(this.x),st(this.y),st(this.width),st(this.height))}containsPoint(e,n){return e>=this.x&&e<this.x2&&n>=this.y&&n<this.y2}normalizePoint(e,n){return{x:(e-this.x)/this.width,y:(n-this.y)/this.height}}}class Fa extends it{constructor(e,n,r,i){super(e,n,r,i),this.spec=e,"spacing"in this.spec||(this.spec.spacing=10),this.mainDimension=Ta(e)?"width":"height",this.secondaryDimension=this.mainDimension=="width"?"height":"width";const s=Ta(e)?e.hconcat:z0(e)?e.vconcat:e.concat;this.children=s.map((o,a)=>n.createView(o,this,"concat"+a))}getEffectivePadding(){return this._cache("size/effectivePadding",()=>{const e=this.children.filter(s=>s.isVisible());if(!e.length)return this.getPadding();const n=e.map(s=>s.getEffectivePadding()).map(s=>this.mainDimension=="height"?[s.left,s.right]:[s.top,s.bottom]),r=k0(n),i=this.mainDimension=="height"?new ze(e[0].getEffectivePadding().top,r[1],Be(e).getEffectivePadding().bottom,r[0]):new ze(r[0],e[0].getEffectivePadding().left,r[1],Be(e).getEffectivePadding().right);return this.getPadding().add(i)})}getSize(){return this._cache("size",()=>{let e;if(this.spec[this.mainDimension])e=va(this.spec[this.mainDimension]);else{const r=this.children.filter(i=>i.isVisible()).map(i=>i.getSize()[this.mainDimension]);e={grow:r.map(i=>+i.grow).reduce((i,s)=>i+s,0),px:Gb(r,{spacing:this.spec.spacing})}}const n=this.spec[this.secondaryDimension]&&va(this.spec[this.secondaryDimension])||{grow:1};return(this.mainDimension=="height"?new Dt(n,e):new Dt(e,n)).addPadding(this.getPadding())})}render(e,n,r={}){if(!this.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n);const i=this.children.filter(c=>c.isVisible()),s=i.map(c=>c.getSize()[this.mainDimension]),o=Ob(s,n[this.mainDimension],{spacing:this.spec.spacing,devicePixelRatio:this.context.glHelper.dpr}),a=i.map(c=>c.getEffectivePadding()).map(c=>this.mainDimension=="height"?[c.left,c.right]:[c.top,c.bottom]),u=k0(a);for(let c=0;c<i.length;c++){const f=i[c],l=o[c],h=u[0]-a[c][0],p=u[1]-a[c][1],d=n[this.secondaryDimension]-h-p,g=this.mainDimension=="height"?new Ze(()=>n.x+h,()=>n.y+l.location,()=>d,()=>l.size):new Ze(()=>n.x+l.location,()=>n.y+h,()=>l.size,()=>d);f.render(e,g,r)}e.popView(this)}*[Symbol.iterator](){for(const e of this.children)yield e}replaceChild(e,n){const r=this.children.indexOf(e);if(r>=0)this.children[r]=n;else throw new Error("Not my child view!")}addChildBySpec(e){const n=this.children.length,r=this.context.createView(e,this,"concat"+n);return this.children.push(r),r}addChild(e){const n=this.children.length;return e.name||(e.name="concat"+n),e.parent=this,this.children.push(e),e}getDefaultResolution(e,n){return"independent"}}function k0(t){return[0,1].map(e=>t.map(n=>n[e]).reduce((n,r)=>Math.max(n,r),0))}class Bw{constructor(){this.types=[];const e=n=>(r,i,s,o)=>{var a;return new n(r,i,s,(a=r.name)!=null?a:o)};this.addViewType(Fw,e(R0)),this.addViewType(Ia,e(Ba)),this.addViewType(Ma,e(Ke)),this.addViewType(z0,e(Fa)),this.addViewType(Ta,e(Fa)),this.addViewType(Mw,e(Fa))}addViewType(e,n){this.types.push({specGuard:e,factory:n})}createView(e,n,r,i){const s=this.types.find(o=>o.specGuard(e));if(s)return s.factory(e,n,r,i!=null?i:"unnamed");throw new Error("Invalid spec, cannot figure out the view type from the properties: "+JSON.stringify([...Object.keys(e)]))}isViewSpec(e){const n=this.types.filter(r=>r.specGuard(e));if(n.length>1)throw new Error("Ambiguous spec. Cannot create a view!");return n.length==1}}function Ma(t){return"mark"in t&&(W(t.mark)||Ie(t.mark))}function Ia(t){return"layer"in t&&Ie(t.layer)}function N0(t){return t&&(Ma(t)||Ia(t))&&"aggregateSamples"in t}function Fw(t){return"import"in t}function z0(t){return"vconcat"in t&&Ce(t.vconcat)}function Ta(t){return"hconcat"in t&&Ce(t.hconcat)}function Mw(t){return"concat"in t&&Ce(t.concat)}const Iw={point:Cb,rect:Ab,rule:Bb,link:Tb,text:zb};class Ke extends it{constructor(e,n,r,i){super(e,n,r,i),this.spec=e;const s=Iw[this.getMarkType()];if(s)this.mark=new s(this);else throw new Error(`No such mark: ${this.getMarkType()}`);this.sampleAggregateViews=[],this._initializeAggregateViews(),this.coords=void 0}*[Symbol.iterator](){for(const e of this.sampleAggregateViews)yield e}replaceChild(e,n){const r=this.sampleAggregateViews.indexOf(e);if(r>=0)this.sampleAggregateViews[r]=n;else throw new Error("Not my child view!")}render(e,n,r={}){!this.isVisible()||(n=n.shrink(this.getPadding()),this.coords=n,e.pushView(this,n),e.renderMark(this.mark,r),e.popView(this))}getMarkType(){return typeof this.spec.mark=="object"?this.spec.mark.type:this.spec.mark}resolve(e){var r;const n=this.mark.encoding;for(const[i,s]of Object.entries(n)){if(!Me(s))continue;let o=pn((r=s.resolutionChannel)!=null?r:i);if(e=="axis"&&!wr(o))continue;let a=this;for(;a.parent instanceof it&&["shared","excluded"].includes(a.parent.getConfiguredOrDefaultResolution(o,e))&&a.getConfiguredOrDefaultResolution(o,e)!="excluded";)a=a.parent;a.resolutions[e][o]||(a.resolutions[e][o]=e=="scale"?new vw(o):new Sw(o)),wr(i)?a.resolutions[e][o].pushUnitView(this,i):e=="scale"&&a.resolutions[e][o].pushUnitView(this,i)}}getAccessor(e){return this._cache("accessor/"+e,()=>{const n=this.mark.encoding;if(n&&n[e])return this.context.accessorFactory.createAccessor(n[e])})}getFacetAccessor(e){const n=this.getAccessor("sample");return n||super.getFacetAccessor(this)}getCollector(){return this.context.dataFlow.findCollectorByKey(this)}_validateDomainQuery(e){if(vr(e))throw new Error(`getDomain(${e}), must only be called for primary channels!`);const n=this.mark.encoding[e];if(!Me(n))throw new Error("The channel has no scale, cannot get domain!");return n}getConfiguredDomain(e){var i,s;const n=this._validateDomainQuery(e),r=n&&n.scale&&n.scale.domain;if(r){const o=this.getScaleResolution((i=n.resolutionChannel)!=null?i:e);return M0((s=n.type)!=null?s:"nominal",o.fromComplexInterval(r))}}extractDataDomain(e){var a;const r=(a=this._validateDomainQuery(e).type)!=null?a:"nominal",i=u=>{let c;const f=this.mark.encoding[u];if(f){const l=this.context.accessorFactory.createAccessor(f);if(l)if(c=M0(r),l.constant)c.extend(l({}));else{const h=this.getCollector();h!=null&&h.completed&&h.visitData(p=>c.extend(l(p)))}}return c};let s=i(e);const o=Go[e];if(o){const u=i(o);u&&s.extendAll(u)}return s}getZoomLevel(){const e=n=>{var r,i;return(i=(r=this.getScaleResolution(n))==null?void 0:r.getZoomLevel())!=null?i:1};return br.map(e).reduce((n,r)=>n*r,1)}_initializeAggregateViews(){var e,n;if(N0(this.spec))for(const r of this.spec.aggregateSamples){const i=(e=r.transform)!=null?e:[];i.length&&Be(i).type!="collect"&&i.push({type:"collect"}),i.push({type:"mergeFacets"}),r.transform=i,r.encoding=ve(M({},(n=r.encoding)!=null?n:{}),{sample:null});const s=this.context.createView(r,this,"summaryView");s.getFacetFields=o=>{},this.sampleAggregateViews.push(s)}}getDefaultResolution(e,n){return e=="x"?"shared":"independent"}}function Tw(t,e,n){return n=(n-t)/(e-t),n=Math.max(0,Math.min(1,n)),n*n*(3-2*n)}class Bn extends K{get identifier(){}handle(e){throw new Error("Source does not handle incoming data!")}async load(){}}function O0(t){var n,r;const e=M({},t.format);if((n=e.type)!=null||(e.type=kw(t)&&Pw(t.url)),(r=e.parse)!=null||(e.parse="auto"),!e.type)throw new Error("Format for the data source was not defined and it could not be inferred: "+JSON.stringify(t));return e}function Pw(t){var e;if(Array.isArray(t)&&(t=t[0]),t)return(e=t.match(/\.(csv|tsv|json)/))==null?void 0:e[1]}const ns=t=>typeof t!="object"?Lw:Rw,Lw=t=>({data:t}),Rw=t=>t;function kw(t){return"url"in t}function Nw(t){return"dynamicCallbackSource"in t}class G0 extends Bn{constructor(e){super(),this.callback=e}loadSynchronously(){if(!this.callback)return;const e=this.callback();if(!e||typeof e[Symbol.iterator]!="function")throw new Error("Dynamic data callback didn't return iterable data!");this.reset(),this.beginBatch({type:"file"});let n;for(const r of e)n||(n=ns(r)),this._propagate(n(r));this.complete()}async load(){this.loadSynchronously()}}const U0="chromosome_ticks_and_labels",H0={x:"width",y:"height"};function Pa(t){return t=="x"?"y":"x"}const Q0=Object.fromEntries(Object.entries({x:["bottom","top"],y:["left","right"]}).map(([t,e])=>e.map(n=>[n,t])).flat(1));function qt(t){return Q0[t]}class V0 extends Ba{constructor(e,n,r,i){const s=n=="locus",o=M(M(M({},s?Gw:j0),Ow(n,e)),e);if(super(s?Uw(o):Y0(o),r,i,`axis_${e.orient}`),this.axisProps=o,this.axisUpdateRequested=!0,this._addBroadcastHandler("layout",()=>{this.axisUpdateRequested=!0}),this.previousScaleDomain=[],this.axisLength=void 0,this.ticks=[],this.tickSource=new G0(()=>this.ticks),s){const a=qt(this.axisProps.orient),u=this.getScaleResolution(a).getGenome();this.findChildByName(U0).getDynamicDataSource=()=>new G0(()=>u.chromosomes)}}getOrient(){return this.axisProps.orient}getSize(){const e={px:this.getPerpendicularSize()},n={grow:1};return Q0[this.axisProps.orient]=="x"?new Dt(n,e):new Dt(e,n)}getPerpendicularSize(){return La(this.axisProps)}getDynamicDataSource(){return this.tickSource}_updateAxisData(){const e=qt(this.axisProps.orient),n=this.getScaleResolution(e).getScale(),r=n.domain();if(yl(r,this.previousScaleDomain)&&!this.axisUpdateRequested)return;this.previousScaleDomain=r;const i=this.ticks,s=zw(this.axisProps,n,this.axisLength,i);s!==i&&(this.ticks=s,this.tickSource.loadSynchronously()),this.axisUpdateRequested=!1}onBeforeRender(){super.onBeforeRender(),this._updateAxisData()}render(e,n,r={}){!this.isVisible()||(this.axisLength=n[H0[qt(this.getOrient())]],super.render(e,n,r))}isPickingSupported(){return!1}}function La(t){const e=qt(t.orient);let n=t.ticks&&t.tickSize||0;return t.labels&&(n+=t.labelPadding,e=="x"?n+=t.labelFontSize:n+=30),t.title&&(n+=t.titlePadding+t.titleFontSize),n=Math.min(t.maxExtent||1/0,Math.max(t.minExtent||0,n)),n}function zw(t,e,n,r=[]){const i=a=>25+60*Tw(100,700,a);let s=de(t.tickCount)?t.tickCount:Math.round(n/i(n));s=A0(e,s,t.tickMinStep);const o=t.values?x0(e,t.values,s):Yb(e,s);if(Sm(o,r,a=>a,a=>a.value))return r;{const a=Xb(e,s,t.format);return o.map(u=>({value:u,label:a(u)}))}}const j0={values:null,minExtent:20,maxExtent:1/0,offset:0,domain:!0,domainWidth:1,domainColor:"gray",domainDash:null,domainDashOffset:0,domainCap:"square",ticks:!0,tickSize:5,tickWidth:1,tickColor:"gray",tickDash:null,tickDashOffset:0,tickCap:"square",tickCount:null,tickMinStep:null,labels:!0,labelAlign:"center",labelBaseline:"middle",labelPadding:4,labelFontSize:10,labelLimit:180,labelColor:"black",format:null,titleColor:"black",titleFont:"sans-serif",titleFontSize:10,titlePadding:3};function Ow(t,e){var a;const n=e.orient,r=t=="nominal"||t=="ordinal";let i="center",s="middle",o=(a=e.labelAngle)!=null?a:(n=="top"||n=="bottom")&&r?-90:0;switch(n){case"left":i="right";break;case"right":i="left";break;case"top":case"bottom":Math.abs(o)>30?(i=o>0==(n=="bottom")?"left":"right",s="middle"):s=n=="top"?"alphabetic":"top";break}return{labelAlign:i,labelAngle:o,labelBaseline:s}}function Y0(t){const e=ve(M({},t),{extent:La(t)}),n=qt(e.orient),r=Pa(n),i=e.orient=="bottom"||e.orient=="right"?1:-1,s=e.orient=="bottom"||e.orient=="left"?1:0,o=()=>({name:"domain",data:{values:[0]},mark:{type:"rule",clip:!1,strokeDash:e.domainDash,strokeCap:e.domainCap,color:e.domainColor,[r]:s,size:e.domainWidth}}),a=()=>({name:"labels",mark:{type:"text",clip:!1,align:e.labelAlign,angle:e.labelAngle,baseline:e.labelBaseline,[r+"Offset"]:(e.tickSize+e.labelPadding)*i,[r]:s,size:e.labelFontSize,color:e.labelColor,minBufferSize:1500,dynamicData:!0},encoding:{[n]:{field:"value",type:"quantitative"},text:{field:"label"}}}),u=()=>({name:"ticks",mark:{type:"rule",clip:!1,strokeDash:e.tickDash,strokeCap:e.tickCap,color:e.tickColor,size:e.tickWidth,minBufferSize:300,dynamicData:!0},encoding:{[r]:{value:s},[r+"2"]:{value:s-e.tickSize/e.extent*(s?1:-1)}}}),c=()=>({name:"title",data:{values:[0]},mark:{type:"text",clip:!1,align:"center",baseline:e.orient=="bottom"?"bottom":"top",angle:[0,90,0,-90][["top","right","bottom","left"].indexOf(e.orient)],text:e.title,color:e.titleColor,[n]:.5,[r]:1-s}}),f=()=>{const h={name:"ticks_and_labels",encoding:{[n]:{field:"value",type:"quantitative"}},layer:[]};return e.ticks&&h.layer.push(u()),e.labels&&h.layer.push(a()),h},l={[H0[Pa(qt(e.orient))]]:e.extent,data:{dynamicCallbackSource:!0},layer:[]};return e.domain&&l.layer.push(o()),(e.ticks||e.labels)&&l.layer.push(f()),e.title&&l.layer.push(c()),l}const Gw=ve(M({},j0),{chromTicks:!0,chromTickSize:18,chromTickWidth:1,chromTickColor:"#989898",chromTickDash:[4,2],chromTickDashOffset:1,chromLabels:!0,chromLabelFontSize:13,chromLabelFontWeight:"normal",chromLabelFontStyle:"normal",chromLabelColor:"black",chromLabelAlign:"left",chromLabelPadding:7});function Uw(t){const e=ve(M({},t),{extent:La(t)}),n=qt(e.orient),r=Pa(n),i=e.orient=="bottom"||e.orient=="left"?1:0,s=()=>({name:"chromosome_ticks",mark:{type:"rule",strokeDash:t.chromTickDash,strokeDashOffset:t.chromTickDashOffset,[r]:i,[r+"2"]:i-e.chromTickSize/e.extent*(i?1:-1),color:t.chromTickColor,size:e.chromTickWidth,dynamicData:!0}}),o=()=>{let c;switch(e.orient){case"top":c={y:0,angle:0,paddingX:4,dy:-e.chromLabelPadding,viewportEdgeFadeWidthLeft:20,viewportEdgeFadeWidthRight:20,viewportEdgeFadeDistanceRight:-10,viewportEdgeFadeDistanceLeft:-20};break;case"bottom":c={y:1,angle:0,paddingX:4,dy:e.chromLabelPadding+e.chromLabelFontSize*.73,viewportEdgeFadeWidthLeft:20,viewportEdgeFadeWidthRight:20,viewportEdgeFadeDistanceRight:-10,viewportEdgeFadeDistanceLeft:-20};break;case"left":c={x:1,angle:-90,paddingY:4,dy:-e.chromLabelPadding,viewportEdgeFadeWidthBottom:20,viewportEdgeFadeWidthTop:20,viewportEdgeFadeDistanceBottom:-20,viewportEdgeFadeDistanceTop:-10};break;case"right":c={x:0,angle:90,align:"right",paddingY:4,dy:-e.chromLabelPadding};break;default:c={}}return{name:"chromosome_labels",mark:M({type:"text",size:e.chromLabelFontSize,font:e.chromLabelFont,fontWeight:e.chromLabelFontWeight,fontStyle:e.chromLabelFontStyle,color:e.chromLabelColor,align:t.chromLabelAlign,baseline:"alphabetic",clip:!1,dynamicData:!0},c),encoding:{[n+"2"]:{field:"continuousEnd",type:"locus"},text:{field:"name"}}}};let a;switch(e.orient){case"bottom":case"top":a={};break;case"left":a={labelAngle:-90,labelAlign:"center",labelPadding:6};break;case"right":a={labelAngle:90,labelAlign:"center",labelPadding:6};break;default:a={}}const u=Y0(M(M({},t),a));if(t.chromTicks||t.chromLabels){const c={name:U0,data:{dynamicCallbackSource:!0},encoding:{[n]:{field:"continuousStart",type:"locus",band:0}},layer:[]};if(t.chromTicks&&c.layer.push(s()),t.chromLabels){c.layer.push(o());let f;u.layer.filter(l=>l.name=="ticks_and_labels").forEach(l=>l.layer.filter(h=>h.name=="labels").forEach(h=>{f=h.mark})),f&&(e.orient=="top"||e.orient=="bottom"?(f.viewportEdgeFadeWidthLeft=30,f.viewportEdgeFadeDistanceLeft=40):(f.viewportEdgeFadeWidthBottom=30,f.viewportEdgeFadeDistanceBottom=40))}u.layer.push(c)}return u}const Hw={x:["bottom","top"],y:["left","right"]};class Qw extends it{constructor(e,n){super({},e,n,"decorator"),this.child=void 0,this.backgroundView=void 0,this.axisViews={top:void 0,right:void 0,bottom:void 0,left:void 0},["mousedown","wheel"].forEach(r=>this.addInteractionEventListener(r,this.handleMouseEvent.bind(this)))}initialize(){var n;Object.entries(Hw).forEach(([r,i])=>this._initializeAxes(r,i)),this._invalidateCacheByPrefix("size/","ancestors");const e=(n=this.child.spec)==null?void 0:n.view;((e==null?void 0:e.fill)||(e==null?void 0:e.stroke))&&(this.backgroundView=new Ke(Vw(e),this.context,this,"background"))}getEncoding(e){return Object.values(this.axisViews).find(n=>e===n)||e==this.backgroundView?{}:super.getEncoding()}getFacetAccessor(e){if(e==this.child&&this.parent)return this.parent.getFacetAccessor(this)}*[Symbol.iterator](){yield this.child,this.backgroundView&&(yield this.backgroundView);for(const e of Object.values(this.axisViews))e&&(yield e)}_getAxisExtents(){return this._cache("size/axisExtents",()=>{const e={};for(const n of Object.values(this.axisViews))n&&(e[n.getOrient()]=n.getPerpendicularSize());return ze.createFromRecord(e)})}_getAxisOffsets(){return this._cache("size/axisOffsets",()=>{const e={};for(const n of Object.values(this.axisViews))n&&(e[n.getOrient()]=n.axisProps.offset);return ze.createFromRecord(e)})}getEffectivePadding(){return this._cache("size/effectivePadding",()=>this.getPadding().add(this._getAxisExtents()))}getSize(){return this._cache("size/size",()=>this.child.isVisible()?this.getSizeFromSpec().addPadding(this.getPadding()).addPadding(this.getAxisSizes()):d0)}getAxisSizes(){return this._cache("size/axisSizes",()=>this._getAxisExtents().add(this._getAxisOffsets()))}render(e,n,r={}){if(!this.isVisible()||!this.child.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n);const i=this._getAxisExtents(),s=n.shrink(i.add(this._getAxisOffsets()));this._childCoords=s,this.backgroundView&&this.backgroundView.render(e,s,r),this.child.render(e,s,r);const o=this._cache("axisViewEntries",()=>Object.entries(this.axisViews).filter(a=>!!a[1]));for(const[a,u]of o){const c=u.axisProps;let f;a=="bottom"?f=s.translate(0,s.height+c.offset).modify({height:i.bottom}):a=="top"?f=s.translate(0,-i.top-c.offset).modify({height:i.top}):a=="left"?f=s.translate(-i.left-c.offset,0).modify({width:i.left}):a=="right"&&(f=s.translate(s.width+c.offset,0).modify({width:i.right})),u.render(e,f)}e.popView(this)}_getResolutionParticipants(){return[...this.getAncestors(),...Tv(this.child)]}_initializeAxes(e,n){const r=this._getResolutionParticipants().map(i=>i.resolutions.axis[e]).filter(i=>i);for(const i of r){const s=i.getAxisProps();if(s&&s.orient){if(!n.includes(s.orient))throw new Error(`Invalid axis orientation for '${e}' channel: ${s.orient}`);if(this.axisViews[s.orient])throw new Error(`The slot for ${s.orient} axis is already reserved!`);this.axisViews[s.orient]=new V0(ve(M({},s),{title:i.getTitle()}),i.scaleResolution.type,this.context,this)}}e:for(const i of r){const s=i.getAxisProps();if(s&&!s.orient){for(const o of n)if(!this.axisViews[o]){s.orient=o,this.axisViews[o]=new V0(ve(M({},s),{title:i.getTitle()}),i.scaleResolution.type,this.context,this);continue e}throw new Error("No room for axes. All slots are already reserved.")}}}handleMouseEvent(e,n){if(!!this.isZoomable()){if(n.type=="wheel"){n.uiEvent.preventDefault();const r=n.uiEvent,i=r.deltaMode?120:1;let{x:s,y:o}=n.point;const a=this.context.getCurrentHover();if(a){const u=e.shrink(this.getEffectivePadding()),c=a.mark.encoders;c.x&&!c.x2&&(s=+c.x(a.datum)*u.width+u.x),c.y&&!c.y2&&(o=(1-+c.y(a.datum))*u.height+u.y)}Math.abs(r.deltaX)<Math.abs(r.deltaY)?this._handleZoom(e,{x:s,y:o,xDelta:0,yDelta:0,zDelta:r.deltaY*i/300}):this._handleZoom(e,{x:s,y:o,xDelta:-r.deltaX*i,yDelta:0,zDelta:0})}else if(n.type=="mousedown"&&n.uiEvent.button===0){const r=n.uiEvent;r.preventDefault();let i=r;const s=a=>{this._handleZoom(e,{x:i.clientX,y:i.clientY,xDelta:a.clientX-i.clientX,yDelta:a.clientY-i.clientY,zDelta:0}),i=a},o=a=>{document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",o)};document.addEventListener("mouseup",o,!1),document.addEventListener("mousemove",s,!1)}}}isZoomable(){return this._cache("zoomable",()=>Object.values(this._getZoomableResolutions()).some(e=>e.size))}_getZoomableResolutions(){return this._cache("zoomableResolutions",()=>{const e={x:new Set,y:new Set};return this.child.visit(n=>{for(const[r,i]of Object.entries(e)){const s=n.getScaleResolution(r);s&&s.isZoomable()&&i.add(s)}}),e})}_handleZoom(e,n){for(const[r,i]of Object.entries(this._getZoomableResolutions())){if(i.size<=0)continue;const s=this._getAxisExtents(),o=e.shrink(s.add(this._getAxisOffsets())),a=o.normalizePoint(n.x,n.y),u=o.normalizePoint(n.x+n.xDelta,n.y+n.yDelta),c={x:u.x-a.x,y:u.y-a.y};for(const f of i)f.zoom(2**n.zDelta,r=="y"?1-a[r]:a[r],r=="x"?c.x:-c.y)}this.context.animator.requestRender()}}function Vw(t){return{configurableVisibility:!1,data:{values:[{}]},mark:ve(M({fill:null,strokeWidth:1},t),{type:"rect",clip:!1,tooltip:null})}}function*Ra(t,e=[]){for(const[n,r]of t.entries())if(r instanceof Map)for(const i of Ra(r,[...e,n]))yield i;else yield[[...e,n],r]}class ka extends K{constructor(e){super(),this.params=e!=null?e:{type:"collect"},this.observers=[],this.facetBatches=void 0,this._init()}_init(){this._data=[],this.facetBatches=new $t([],JSON.stringify),this.facetBatches.set(void 0,this._data)}reset(){super.reset(),this._init()}handle(e){this._data.push(e)}beginBatch(e){wb(e)&&(this._data=[],this.facetBatches.set(je(e.facetId),this._data))}complete(){var i,s;const e=(i=this.params)==null?void 0:i.sort,n=e?Qa(e.field,e.order):void 0,r=o=>{n&&o.sort(n)};if((s=this.params.groupby)!=null&&s.length){if(this.facetBatches.size>1)throw new Error("TODO: Support faceted data!");const o=this.params.groupby.map(u=>G(u)),a=Yr(this._data,...o);this.facetBatches.clear();for(const[u,c]of Ra(a))this.facetBatches.set(u,c)}for(const o of this.facetBatches.values())r(o);if(this.children.length)for(const[o,a]of this.facetBatches.entries()){if(o){const u={type:"facet",facetId:o};for(const c of this.children)c.beginBatch(u)}for(const u of a)this._propagate(u)}super.complete();for(const o of this.observers)o(this)}getData(){switch(this._checkStatus(),this.facetBatches.size){case 0:return[];case 1:return[...this.facetBatches.values()][0];default:{const e=this.facetBatches;return{[Symbol.iterator]:function*(){for(const r of e.values())for(let i=0;i<r.length;i++)yield r[i]}}}}}visitData(e){this._checkStatus();for(const n of this.facetBatches.values())for(let r=0;r<n.length;r++)e(n[r])}getItemCount(){let e=0;for(const n of this.facetBatches.values())e+=n.length;return e}_checkStatus(){if(!this.completed)throw new Error("Data propagation is not completed! No data are available.")}}class rs{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,n){let r=this.length++;for(this.ids[r]=e,this.values[r]=n;r>0;){const i=r-1>>1,s=this.values[i];if(n>=s)break;this.ids[r]=this.ids[i],this.values[r]=s,r=i}this.ids[r]=e,this.values[r]=n}pop(){if(this.length===0)return;const e=this.ids[0];if(this.length--,this.length>0){const n=this.ids[0]=this.ids[this.length],r=this.values[0]=this.values[this.length],i=this.length>>1;let s=0;for(;s<i;){let o=(s<<1)+1;const a=o+1;let u=this.ids[o],c=this.values[o];const f=this.values[a];if(a<this.length&&f<c&&(o=a,u=this.ids[a],c=f),c>=r)break;this.ids[s]=u,this.values[s]=c,s=o}this.ids[s]=n,this.values[s]=r}return e}peek(){if(this.length!==0)return this.ids[0]}peekValue(){if(this.length!==0)return this.values[0]}}class jw extends K{get behavior(){return rt}constructor(e){super(),this.params=e,this.startAccessor=G(e.start),this.endAccessor=G(e.end),this.chromAccessor=e.chrom?G(e.chrom):n=>{},this.weightAccessor=e.weight?G(e.weight):n=>1,this.as={coverage:e.as||"coverage",start:e.asStart||e.start,end:e.asEnd||e.end,chrom:e.asChrom||e.chrom},this.createSegment=new Function("start","end","coverage","chrom","return {"+Object.entries(this.as).filter(([n,r])=>r).map(([n,r])=>`${JSON.stringify(r)}: ${n}`).join(", ")+"};"),this.ends=new rs}reset(){super.reset(),this.initialize()}initialize(){const e=this.as.coverage,n=this.as.end,r=this.as.chrom,i=this.startAccessor,s=this.endAccessor,o=this.chromAccessor,a=this.weightAccessor;let u,c,f,l=0,h;const p=this.ends;p.clear();const d=(m,A,w)=>{if(m==A)return;let y=!1;u&&(u[e]===w?(u[n]=A,y=!0):u[e]!=0&&this._propagate(u)),y||(u=this.createSegment(m,A,w,f))},g=()=>{let m;for(;(m=p.peekValue())!==void 0;)d(h,m,l),h=m,l-=p.pop();h=void 0,u&&(this._propagate(u),u=void 0)};this.handle=m=>{const A=i(m);let w;for(;(w=p.peekValue())!==void 0&&w<A;)d(h,w,l),h=w,l-=p.pop();if(r){let v=o(m);v!==c&&(g(),f=v,c=f)}h!==void 0&&d(h,A,l),h=A;const y=a(m);l+=y,p.push(y,s(m))},this.complete=()=>{g(),super.complete()}}}function Yw(t,e,n=0,r=t.length){const i=new rs,s=r-n;let o;for(o=0;o<e&&o<s;o++)i.push(o,t[n+o]);for(;o<s;o++){const c=t[n+o];c>=i.peekValue()&&(i.push(o,c),i.pop())}const a=[];let u;for(;(u=i.pop())!==void 0;)a.push(n+u);return a.reverse()}class Ww{constructor(e,n=-1/0,r=1/0){this.maxSize=e,this.lowerLimit=n,this.upperLimit=r;const i=this.maxSize*2+1;this.lowerLimits=new Float64Array(i),this.upperLimits=new Float64Array(i),this.lowerChildren=new Int32Array(i),this.upperChildren=new Int32Array(i),this.reset()}reset(){this.lowerLimits.fill(0),this.upperLimits.fill(0),this.lowerChildren.fill(0),this.upperChildren.fill(0),this.n=1,this.lowerLimits[0]=this.lowerLimit,this.upperLimits[0]=this.upperLimit}_findSlot(e,n,r=0){if(e>=this.lowerLimits[r]&&n<=this.upperLimits[r]){const i=this.lowerChildren[r];if(i){const s=this._findSlot(e,n,i);return s>=0?s:this._findSlot(e,n,this.upperChildren[r])}else return r}else return-1}reserve(e,n){if(n-e<=0)throw new Error("Cannot reserve an empty or negative-size slot!");if(this.n+1>this.lowerLimits.length)return!1;const r=this._findSlot(e,n);if(r<0)return!1;const i=this.n++,s=this.n++;return this.lowerLimits[i]=this.lowerLimits[r],this.upperLimits[i]=e,this.lowerLimits[s]=n,this.upperLimits[s]=this.upperLimits[r],this.lowerChildren[r]=i,this.upperChildren[r]=s,!0}}class Xw extends K{constructor(e,n){var i,s;if(super(),this.params=e,this._data=[],this.channel=(i=e.channel)!=null?i:"x",!["x","y"].includes(this.channel))throw new Error("Invalid channel: "+this.channel);this.posAccessor=G(this.params.pos),this.posBisector=Ln(this.posAccessor),this.scoreAccessor=G(this.params.score),this.widthAccessor=G(this.params.width),this.laneAccessor=this.params.lane?G(this.params.lane):o=>0,this.padding=(s=this.params.padding)!=null?s:0,this.reservationMaps=new Map,this.resolution=n.getScaleResolution(this.channel);const r=()=>this._filterAndPropagate();this.schedule=()=>n.context.animator.requestTransition(r),this.resolution.addEventListener("domain",o=>this.schedule()),n._addBroadcastHandler("layoutComputed",()=>this.schedule())}complete(){const e=this.posAccessor;this._data.sort((n,r)=>e(n)-e(r)),this._scores=this._data.map(this.scoreAccessor);for(const n of new Set(this._data.map(this.laneAccessor)))this.reservationMaps.set(n,new Ww(200));this.schedule(),super.complete()}_filterAndPropagate(){var o;super.reset();const e=this.resolution.getScale(),n=(o=this.resolution.members[0].view.coords)==null?void 0:o[this.channel=="x"?"width":"height"];if(!n)return;for(const a of this.reservationMaps.values())a.reset();const r=e.domain(),i=70,s=Yw(this._scores,i,this.posBisector.left(this._data,r[0]),this.posBisector.right(this._data,r[1]));for(const a of s){const u=this._data[a],c=e(this.posAccessor(u))*n,f=this.widthAccessor(u)/2+this.padding;this.reservationMaps.get(this.laneAccessor(u)).reserve(c-f,c+f)&&this._propagate(u)}super.complete()}reset(){super.reset(),this._data=[],this.groups=new Map}handle(e){this._data.push(e)}}class Zw extends K{constructor(e){super(),this.params=e,this.predicate=void 0}initialize(){this.predicate=No(this.params.expr,this.getGlobalObject())}handle(e){this.predicate(e)&&this._propagate(e)}}const Kw="0".charCodeAt(0);function*qw(t,e=","){const n=e.charCodeAt(0);let r=0;for(let i=0;i<t.length;i++){const s=t.charCodeAt(i);s==n?(yield r,r=0):r=r*10+s-Kw}yield r}class Jw extends K{get behavior(){return rt}constructor(e){var o,a;super();const n=G((o=e.exons)!=null?o:"exons"),r=G((a=e.start)!=null?a:"start"),[i,s]=e.as||["exonStart","exonEnd"];this.handle=u=>{let c=r(u),f=c,l=!0;const h=n(u);for(const p of qw(h)){if(l)f=c+p;else{c=f+p;const d=Object.assign({},u);d[i]=f,d[s]=c,this._propagate(d)}l=!l}}}}class _w extends K{get behavior(){return rt}constructor(e){super();const n=je(e.field).map(s=>G(s)),r=je(e.separator),i=je(e.as||e.field);if(n.length!==r.length||n.length!==i.length)throw new Error(`Lengths of "separator" (${r.length}), "fields" (${n.length}), and "as" (${i.length}) do not match!`);this.handle=s=>{if(n.some(u=>!u(s)))return;const o=n.map((u,c)=>u(s).split(r[c]));$w(o,s);const a=o[0].length;for(let u=0;u<a;u++){const c=Object.assign({},s);for(let f=0;f<n.length;f++)c[i[f]]=o[f][u];this._propagate(c)}}}}function $w(t,e){const n=t.map(r=>r.length);if(!n.every(r=>r==n[0]))throw new Error("Mismatching number of elements in the fields to be split: "+JSON.stringify(e))}class ev extends K{get behavior(){return Ct}constructor(e){super(),this.params=e,this.as=e.as,this.fn=void 0}initialize(){this.fn=No(this.params.expr,this.getGlobalObject())}handle(e){e[this.as]=this.fn(e),this._propagate(e)}}class W0 extends K{get behavior(){return Ct}constructor(e,n){var d;super();const r=(d=e.channel)!=null?d:"x";if(!["x","y"].includes(r))throw new Error("Invalid channel: "+r);const i=n.getScaleResolution(r).getGenome();if(!i)throw new Error("LinearizeGenomicCoordinate transform requires a locus scale!");const s=G(e.chrom),o=je(e.pos).map(g=>G(g)),a=je(e.as);if(o.length!=a.length)throw new Error('The number of "pos" and "as" elements must be equal!');const u=je(e.offset);let c;if(u.length==0)c=new Array(o.length).fill(0);else if(u.length==1)c=new Array(o.length).fill(u[0]);else if(u.length==o.length)c=u;else throw new Error(`Invalid "offset" parameter: ${JSON.stringify(e.offset)}!`);const f=new Function("datum","chromOffset","posAccessors",a.map((g,m)=>`datum[${JSON.stringify(g)}] = chromOffset + +posAccessors[${m}](datum) - ${c[m]};`).join(`
|
|
144
|
+
`));let l,h=0;const p=g=>{if(g!==l){if(h=i.cumulativeChromPositions.get(g),h===void 0)throw new Error("Unknown chromosome/contig: "+g);l=g}return h};this.handle=g=>{f(g,p(s(g)),o),this._propagate(g)}}}var X0={pages:["Lato-Regular.png"],chars:[{id:87,width:53,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:43.491,chnl:15,x:0,y:0,page:0},{id:124,width:17,height:50,xoffset:0,yoffset:-32.193000000000005,xadvance:10.521,chnl:15,x:0,y:42,page:0},{id:40,width:20,height:49,xoffset:0,yoffset:-32.571000000000005,xadvance:11.214,chnl:15,x:0,y:94,page:0},{id:41,width:19,height:49,xoffset:0,yoffset:-32.571000000000005,xadvance:11.214,chnl:15,x:0,y:145,page:0},{id:36,width:32,height:49,xoffset:0,yoffset:-34.419000000000004,xadvance:24.360000000000003,chnl:15,x:0,y:196,page:0},{id:125,width:21,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.642000000000001,chnl:15,x:0,y:247,page:0},{id:91,width:22,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.852,chnl:15,x:0,y:297,page:0},{id:93,width:19,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.852,chnl:15,x:0,y:347,page:0},{id:123,width:21,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.642000000000001,chnl:15,x:0,y:397,page:0},{id:106,width:19,height:48,xoffset:0,yoffset:-30.639000000000003,xadvance:10.08,chnl:15,x:0,y:447,page:0},{id:81,width:43,height:47,xoffset:0,yoffset:-30.429000000000002,xadvance:33.621,chnl:15,x:21,y:447,page:0},{id:77,width:45,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:38.997,chnl:15,x:66,y:447,page:0},{id:64,width:43,height:44,xoffset:0,yoffset:-28.539,xadvance:35.133,chnl:15,x:23,y:397,page:0},{id:92,width:28,height:43,xoffset:0,yoffset:-30.933000000000003,xadvance:18.984,chnl:15,x:68,y:397,page:0},{id:47,width:28,height:43,xoffset:0,yoffset:-30.933000000000003,xadvance:18.984,chnl:15,x:98,y:397,page:0},{id:109,width:42,height:32,xoffset:0,yoffset:-21.609,xadvance:34.545,chnl:15,x:113,y:447,page:0},{id:119,width:42,height:31,xoffset:0,yoffset:-21.315,xadvance:32.991,chnl:15,x:157,y:447,page:0},{id:42,width:25,height:42,xoffset:0,yoffset:-31.626,xadvance:17.85,chnl:15,x:128,y:397,page:0},{id:37,width:42,height:41,xoffset:0,yoffset:-30.387,xadvance:33.663000000000004,chnl:15,x:155,y:397,page:0},{id:79,width:42,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:33.621,chnl:15,x:199,y:397,page:0},{id:102,width:24,height:41,xoffset:0,yoffset:-30.534000000000002,xadvance:14.721,chnl:15,x:243,y:397,page:0},{id:100,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.520000000000003,chnl:15,x:269,y:397,page:0},{id:98,width:32,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.520000000000003,chnl:15,x:302,y:397,page:0},{id:56,width:32,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:336,y:397,page:0},{id:38,width:40,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:29.904000000000003,chnl:15,x:370,y:397,page:0},{id:108,width:17,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:9.912,chnl:15,x:412,y:397,page:0},{id:107,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:21.336000000000002,chnl:15,x:431,y:397,page:0},{id:48,width:33,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:464,y:397,page:0},{id:71,width:38,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:30.681,chnl:15,x:21,y:347,page:0},{id:83,width:31,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:22.785,chnl:15,x:61,y:347,page:0},{id:63,width:27,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:18.795,chnl:15,x:94,y:347,page:0},{id:105,width:18,height:41,xoffset:0,yoffset:-30.639000000000003,xadvance:10.08,chnl:15,x:123,y:347,page:0},{id:51,width:32,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:143,y:347,page:0},{id:104,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.436,chnl:15,x:177,y:347,page:0},{id:67,width:37,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:28.056,chnl:15,x:210,y:347,page:0},{id:88,width:37,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.258000000000003,chnl:15,x:249,y:347,page:0},{id:68,width:40,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:31.941000000000003,chnl:15,x:288,y:347,page:0},{id:70,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:23.751,chnl:15,x:330,y:347,page:0},{id:34,width:23,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:15.561000000000002,chnl:15,x:364,y:347,page:0},{id:72,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:32.067,chnl:15,x:389,y:347,page:0},{id:73,width:18,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:11.760000000000002,chnl:15,x:429,y:347,page:0},{id:74,width:24,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:17.745,chnl:15,x:449,y:347,page:0},{id:75,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.825000000000003,chnl:15,x:24,y:297,page:0},{id:76,width:31,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:21.567,chnl:15,x:475,y:347,page:0},{id:66,width:35,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.153000000000002,chnl:15,x:64,y:297,page:0},{id:78,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:32.067,chnl:15,x:101,y:297,page:0},{id:33,width:18,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:11.298,chnl:15,x:141,y:297,page:0},{id:80,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:25.221,chnl:15,x:161,y:297,page:0},{id:65,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:28.434,chnl:15,x:197,y:297,page:0},{id:82,width:36,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:26.313000000000002,chnl:15,x:237,y:297,page:0},{id:35,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:275,y:297,page:0},{id:84,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.801000000000002,chnl:15,x:310,y:297,page:0},{id:85,width:37,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:30.891000000000002,chnl:15,x:346,y:297,page:0},{id:86,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:28.434,chnl:15,x:385,y:297,page:0},{id:39,width:16,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:8.568000000000001,chnl:15,x:425,y:297,page:0},{id:69,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.255000000000003,chnl:15,x:443,y:297,page:0},{id:89,width:36,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:26.208000000000002,chnl:15,x:23,y:247,page:0},{id:90,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:25.284000000000002,chnl:15,x:477,y:297,page:0},{id:49,width:31,height:40,xoffset:0,yoffset:-30.156000000000002,xadvance:24.360000000000003,chnl:15,x:61,y:247,page:0},{id:50,width:32,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:94,y:247,page:0},{id:57,width:32,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:128,y:247,page:0},{id:94,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:162,y:247,page:0},{id:96,width:21,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:16.8,chnl:15,x:196,y:247,page:0},{id:55,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:219,y:247,page:0},{id:54,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:254,y:247,page:0},{id:53,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:289,y:247,page:0},{id:52,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:323,y:247,page:0},{id:103,width:31,height:39,xoffset:0,yoffset:-21.630000000000003,xadvance:21.84,chnl:15,x:358,y:247,page:0},{id:112,width:32,height:39,xoffset:0,yoffset:-21.651,xadvance:23.541,chnl:15,x:391,y:247,page:0},{id:113,width:31,height:39,xoffset:0,yoffset:-21.651,xadvance:23.520000000000003,chnl:15,x:425,y:247,page:0},{id:116,width:25,height:39,xoffset:0,yoffset:-28.182000000000002,xadvance:15.057,chnl:15,x:458,y:247,page:0},{id:121,width:31,height:38,xoffset:0,yoffset:-21.273,xadvance:21.651,chnl:15,x:34,y:196,page:0},{id:59,width:18,height:36,xoffset:0,yoffset:-20.706,xadvance:10.983,chnl:15,x:485,y:247,page:0},{id:43,width:32,height:34,xoffset:0,yoffset:-24.486,xadvance:24.360000000000003,chnl:15,x:67,y:196,page:0},{id:60,width:30,height:33,xoffset:0,yoffset:-23.331000000000003,xadvance:24.360000000000003,chnl:15,x:101,y:196,page:0},{id:62,width:31,height:33,xoffset:0,yoffset:-23.331000000000003,xadvance:24.360000000000003,chnl:15,x:133,y:196,page:0},{id:117,width:30,height:32,xoffset:0,yoffset:-21.273,xadvance:23.415000000000003,chnl:15,x:166,y:196,page:0},{id:99,width:29,height:32,xoffset:0,yoffset:-21.609,xadvance:20.055,chnl:15,x:198,y:196,page:0},{id:110,width:31,height:32,xoffset:0,yoffset:-21.609,xadvance:23.436,chnl:15,x:229,y:196,page:0},{id:111,width:32,height:32,xoffset:0,yoffset:-21.609,xadvance:23.814,chnl:15,x:262,y:196,page:0},{id:126,width:32,height:26,xoffset:0,yoffset:-16.128,xadvance:24.360000000000003,chnl:15,x:201,y:447,page:0},{id:101,width:31,height:32,xoffset:0,yoffset:-21.609,xadvance:22.176000000000002,chnl:15,x:296,y:196,page:0},{id:114,width:25,height:32,xoffset:0,yoffset:-21.651,xadvance:15.288,chnl:15,x:329,y:196,page:0},{id:115,width:27,height:32,xoffset:0,yoffset:-21.609,xadvance:18.186,chnl:15,x:356,y:196,page:0},{id:97,width:28,height:32,xoffset:0,yoffset:-21.651,xadvance:20.874000000000002,chnl:15,x:385,y:196,page:0},{id:118,width:31,height:31,xoffset:0,yoffset:-21.273,xadvance:21.672,chnl:15,x:415,y:196,page:0},{id:61,width:31,height:29,xoffset:0,yoffset:-19.089000000000002,xadvance:24.360000000000003,chnl:15,x:448,y:196,page:0},{id:120,width:30,height:31,xoffset:0,yoffset:-21.273,xadvance:20.916,chnl:15,x:21,y:145,page:0},{id:58,width:18,height:31,xoffset:0,yoffset:-20.706,xadvance:10.5,chnl:15,x:53,y:145,page:0},{id:122,width:28,height:31,xoffset:0,yoffset:-21.273,xadvance:18.984,chnl:15,x:73,y:145,page:0},{id:95,width:28,height:16,xoffset:0,yoffset:0,xadvance:19.278000000000002,chnl:15,x:235,y:447,page:0},{id:45,width:23,height:24,xoffset:0,yoffset:-14.175,xadvance:15.603000000000002,chnl:15,x:481,y:196,page:0},{id:44,width:17,height:21,xoffset:0,yoffset:-4.956,xadvance:9.534,chnl:15,x:103,y:145,page:0},{id:46,width:18,height:15,xoffset:0,yoffset:-4.956,xadvance:9.912,chnl:15,x:0,y:497,page:0},{id:32,width:0,height:0,xoffset:0,yoffset:0,xadvance:10.752,chnl:15,x:20,y:497,page:0}],info:{face:"Lato Regular",size:42,bold:0,italic:0,charset:[" ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"],unicode:1,stretchH:100,smooth:1,aa:1,padding:[0,0,0,0],spacing:[2,2]},common:{lineHeight:50.400000000000006,base:41.454,scaleW:512,scaleH:512,pages:1,packed:0,alphaChnl:0,redChnl:0,greenChnl:0,blueChnl:0},kernings:[]};class tv extends K{get behavior(){return Ct}constructor(e){super();const n=ba(X0),r=G(e.field),i=e.as,s=e.fontSize;this.handle=o=>{const a=r(o);a!==void 0?o[i]=n.measureWidth(a,s):o[i]=0,this._propagate(o)}}}const nv=65536;class rv extends K{get behavior(){return Ct}constructor(e){super(),this.params=e}reset(){this.initialize()}initialize(){const e=this.params,n=e.as||"lane",r=de(e.spacing)?e.spacing:1,i=G(e.start),s=G(e.end);if(!e.preference!=!e.preferredOrder)throw new Error('Must specify both "preference" and "preferredOrder"');if(e.preference){const o=new Float64Array(nv),a=G(e.preference),u=e.preferredOrder;let c=1/0;this.handle=f=>{const l=i(f);l<c&&o.fill(-1/0),c=l;const h=u.indexOf(a(f));let p=-1;if(h>=0&&o[h]<l)p=h;else{const d=i(f);for(p=0;p<o.length&&!(o[p]<d);p++);if(p>=o.length)throw new Error("Out of lanes!")}o[p]=s(f)+r,f[n]=p,this._propagate(f)}}else{const o=new rs,a=new rs;let u=-1/0,c=0;this.handle=f=>{const l=i(f);for(;o.length&&(o.peekValue()<=l||l<u);){const p=o.pop();a.push(p,p)}u=l;let h=a.pop();h===void 0&&(h=c++),f[n]=h,this._propagate(f),o.push(h,s(f)+r)}}}}class iv extends K{get behavior(){return rt}constructor(e){if(super(),e.as&&e.as.length!=e.fields.length)throw new Error('"fields" and "as" have unequal lengths!');const n=e.fields.map(i=>G(i)),r=e.as?e.as:n.map(Ee);this.handle=i=>{const s={};for(let o=0;o<n.length;o++)s[r[o]]=n[o](i);this._propagate(s)}}}class sv extends K{get behavior(){return Ct}constructor(e){super();const n=new RegExp(e.regex),r=typeof e.as=="string"?[e.as]:e.as,i=G(e.field);this.handle=s=>{const o=i(s);if(W(o)){const a=o.match(n);if(a){if(a.length-1!=r.length)throw new Error('The number of RegEx groups and the length of "as" do not match!');for(let u=0;u<r.length;u++)s[r[u]]=a[u+1]}else if(e.skipInvalidInput)for(let u=0;u<r.length;u++)s[r[u]]=void 0;else throw new Error(`"${o}" does not match the given regex: ${n.toString()}`)}else if(!e.skipInvalidInput)throw new Error(`Trying to match a non-string field. Encountered type: ${typeof o}, field content: "${o}".`);this._propagate(s)}}}class ov extends K{get behavior(){return rt}constructor(e){super();const n=je(e.columnRegex).map(h=>new RegExp(h)),r=je(e.asValue);if(n.length!=r.length)throw new Error('Lengths of "columnRegex" and "as" are not equal!');const i=e.skipRegex?new RegExp(e.skipRegex):void 0,s=e.asKey||"sample";let o,a,u;const c=h=>{var m;const p=Object.keys(h),d=new Map;for(const[A,w]of n.entries())for(const y of p){const v=(m=w.exec(y))==null?void 0:m[1];if(v!==void 0){let S=d.get(v);S||(S=[],d.set(v,S)),S[A]=y}}o=[...d.entries()],a=p.filter(A=>!n.some(w=>w.test(A))&&!(i&&i.test(A)));const g=[...a.map(A=>JSON.stringify(A)+": datum["+JSON.stringify(A)+"]"),JSON.stringify(s)+": sampleId",...r.map(A=>JSON.stringify(A)+": null")];u=new Function("datum","sampleId",`return {
|
|
218
145
|
`+g.join(`,
|
|
219
146
|
`)+`
|
|
220
|
-
};`)},
|
|
221
|
-
`)+" };");return n.properties=e,n}class
|
|
222
|
-
Reason: ${a.message}`)}));if(n.isViewSpec(s))return s.baseUrl=(o=i.match(/^[^?#]*\//))==null?void 0:o[0],s;throw new Error(`The imported spec "${i}" is not a view spec: ${JSON.stringify(t)}`)}async function Rh(t){const e=[];t.visit(n=>{if(n instanceof dh)return e.push(n),as});for(const n of e){const r=n.context,i=await KE(n.spec,n.getBaseUrl(),r),s=r.createView(i,n.parent,n.name);n.parent.replaceChild(n,s),await Rh(s)}}function qE(t){const e=[],n=r=>t(r,e);return n.beforeChildren=r=>{e.push(r)},n.afterChildren=r=>{e.pop()},n}class ru{constructor(e){this.globalOptions=e}pushView(e,n){}popView(e){}renderMark(e,n){}}class Nh extends ru{constructor(e,n){super(e);this.webGLHelper=n,this.buffer=[],this.coords=void 0,this.views=new Set}pushView(e,n){this.views.add(e),this.coords=n}renderMark(e,n){if(this.globalOptions.picking&&!e.isPickingParticipant())return;const r=e.render(n);r&&this.buffer.push({mark:e,callback:r,coords:this.coords,clipRect:n.clipRect})}renderDeferred(){if(this.batch||this._buildBatch(),this.batch.length==0)return;const e=this.webGLHelper.gl,n=this.globalOptions.picking;e.bindFramebuffer(e.FRAMEBUFFER,n?this.webGLHelper._pickingBufferInfo.framebuffer:null),this.webGLHelper.clearAll();for(const r of this.views)r.onBeforeRender();for(const r of this.batch)r();n&&e.bindFramebuffer(e.FRAMEBUFFER,null)}_buildBatch(){this.batch=[];let e=!0,n=!0;const r=o=>()=>{e&&o()},i=o=>()=>{e&&n&&o()},s=ui(this.buffer,o=>o.mark);for(const[o,a]of s.entries()){if(!o.isReady())continue;this.batch.push(()=>{e=o.unitView.getEffectiveOpacity()>0}),this.batch.push(r(()=>o.prepareRender(this.globalOptions)));let u;for(const c of a){const l=c.coords;l.equals(u)||this.batch.push(r(()=>{n=o.setViewport(l,c.clipRect)})),this.batch.push(i(c.callback)),u=c.coords}}}}class JE extends ru{constructor(e){super(e);this.root=void 0,this.stack=[],this.lastAddition=void 0}pushView(e,n){const r=new _E(e,n);this.root?ke(this.stack).addChild(r):this.root=r,this.stack.push(r)}popView(e){this.stack.pop()}getLayout(){return this.root}}class _E{constructor(e,n){this.view=e,this.coords=n,this.children=[]}addChild(e){const n=ke(this.children);n&&e.view===n.view&&e.coords.equals(n.coords)||this.children.push(e)}dispatchInteractionEvent(e){if(this.coords.containsPoint(e.point.x,e.point.y)){if(this.view.handleInteractionEvent(this.coords,e,!0),e.stopped)return;if(this.children.length==0)e.target=this.view;else for(const n of this.children){if(n.dispatchInteractionEvent(e),e.target)break;if(e.stopped)return}this.view.handleInteractionEvent(this.coords,e,!1)}}}class $E extends ru{constructor(...e){super({});this.contexts=e}pushView(e,n){for(const r of this.contexts)r.pushView(e,n)}popView(e){for(const n of this.contexts)n.popView(e)}renderMark(e,n){for(const r of this.contexts)r.renderMark(e,n)}}class eC{constructor(e,n){this.point=e,this.uiEvent=n,this.stopped=!1,this.target=void 0}stopPropagation(){this.stopped=!0}get type(){return this.uiEvent.type}}class tC{constructor(e,n){this.x=e,this.y=n}equals(e){return e?e===this||e.x===this.x&&e.y===this.y:!1}}const nC=t=>new Promise(e=>setTimeout(e,t));function rC(t){const e=t.requestAnimationFrame||window.requestAnimationFrame,n=t.signal,r=()=>new Promise((i,s)=>{if(n==null?void 0:n.aborted)return s("aborted");const o=performance.now(),a=o+(t.duration||1e3),u=typeof t.from=="number"?t.from:0,c=typeof t.to=="number"?t.to:1,l=t.easingFunction||(g=>g),f=g=>(g-o)/(a-o),h=g=>g*(c-u)+u,p=g=>Math.max(0,Math.min(1,g)),d=g=>{(n==null?void 0:n.aborted)?s("aborted"):(t.onUpdate(h(l(p(f(g))))),g<a?e(d):(t.onUpdate(h(l(1))),i()))};e(d)});return t.delay?(n==null?void 0:n.aborted)?Promise.reject("aborted"):nC(t.delay).then(r):r()}class iC{constructor(e){this._renderCallback=e,this._renderRequested=!1,this._warn=!1,this.transitions=[]}requestTransition(e){this.cancelTransition(e),this.transitions.push(e),this.requestRender()}cancelTransition(e){const n=this.transitions.indexOf(e);n>=0&&this.transitions.splice(n,1)}requestRender(){this._renderRequested?this._warn&&console.warn("Render already requested!"):(this._renderRequested=!0,window.requestAnimationFrame(e=>{this._renderRequested=!1;const n=this.transitions;this.transitions=[];let r;for(;r=n.shift();)r(e);this._renderCallback(e)}))}transition(e){return rC(T({requestAnimationFrame:n=>this.requestTransition(n)},e))}}function kh(){const t=e=>e;return t.invert=e=>e,t.copy=kh,t.invertRange=()=>{},t}class sC{constructor(e){this.genomes=new Map,this.genomeSpy=e}async initialize(e){const n=new Fv(e);return this.genomes.set(n.name,n),Promise.all([...this.genomes.values()].map(r=>r.load(this.genomeSpy.spec.baseUrl)))}getGenome(e){if(!this.genomes.size)throw new Error("No genomes have been configured!");if(e){const n=this.genomes.get(e);if(!n)throw new Error(`No genome with the name ${e} has been configured!`);return n}else{if(this.genomes.size>1)throw new Error("Cannot pick a default genome! More than one have been configured!");return this.genomes.values().next().value}}}var oC="data:image/png;base64,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";const aC={thin:100,light:300,regular:400,normal:400,medium:500,bold:700,black:900};class uC{constructor(e){this._webGLHelper=e,this.fontRepository="https://raw.githubusercontent.com/etiennepinchon/aframe-fonts/master/fonts/",this._fonts=new ai([],JSON.stringify),this._metadataPromises=new Map,this._fontPromises=new Map,this._promises=[],this._defaultFontEntry={metrics:Ga(Mh),texture:this._createTextureNow(oC)}}async waitUntilReady(){await Promise.all(this._promises)}getFont(e,n="normal",r="regular"){if(X(r)&&(r=aC[r.toLowerCase()],!r))throw new Error("Unknown font weight: "+r);const i={family:e,style:n,weight:r};let s=this._fonts.get(i);return s||(s={metrics:void 0,texture:void 0},this._fonts.set(i,s),this._promises.push(this._loadFontEntry(s,i))),s}async _loadFontEntry(e,n){try{const r=await this._loadMetadata(n.family),i=fC(r,n),s=this.fontRepository+Oh(n.family)+"/"+i.replace(/\.\w+/,""),o=this._createTexture(s+".png"),a=this._loadFont(s+".json");e.texture=await o,e.metrics=await a}catch(r){console.log("Cannot load font. Using default.",r),e.metrics=this._defaultFontEntry.metrics,e.texture=this._defaultFontEntry.texture}}_loadFont(e){let n=this._fontPromises.get(e);return n||(n=fetch(e).then(r=>{if(!r.ok)throw new Error("Could not load font: "+r.status);return r}).then(r=>r.json()).then(r=>Ga(r)),this._fontPromises.set(e,n)),n}_loadMetadata(e){const n=Oh(e);let r=this._metadataPromises.get(n);return r||(r=fetch(this.fontRepository+n+"/METADATA.pb").then(i=>{if(!i.ok)throw new Error("Could not load font metadata: "+i.status);return i}).then(i=>i.text()).then(i=>cC(i)).catch(i=>{console.warn(i)}),this._metadataPromises.set(n,r)),r}getDefaultFont(){return this._defaultFontEntry}_createTexture(e){const n=this._webGLHelper.gl;return new Promise((r,i)=>{Sr(n,{src:e,min:n.LINEAR},(s,o,a)=>{s?i(s):r(o)})})}_createTextureNow(e){const n=this._webGLHelper.gl;let r;const i=new Promise((s,o)=>{r=Sr(n,{src:e,min:n.LINEAR},(a,u,c)=>{a?o(a):s(u)})});return this._promises.push(i),r}}function Oh(t){return t.toLowerCase().replaceAll(/[^\w]/g,"")}function cC(t){const e=t.split(`
|
|
223
|
-
`),n=[];let r;for(const i of e)if(i.startsWith("fonts {")&&(r={name:void 0,style:void 0,weight:void 0,filename:void 0,post_script_name:void 0,full_name:void 0,copyright:void 0}),i.startsWith("}")&&(n.push(r),r=void 0),r){let s=i.match(/^\s*([A-Za-z_]+):[ ]?"(.*)"$/);if(s){const o=s[1];r[o]=s[2]}if(s=i.match(/^\s*([A-Za-z_]+):[ ]?(\d+)$/),s){const o=s[1];r[o]=+s[2]}}return n}function
|
|
224
|
-
`))if(i.startsWith(">"))r={identifier:i.match(/>(\S+)/)[1],sequence:""},n.push(r);else if(r)r.sequence+=i.trim();else throw new Error("Invalid fasta file!");return n}class hC{constructor(e,n){this.animator=e,this.disabled=!!n,this.damping=.015,this.acceleration=.3,this.accelerationThreshold=100,this.lowerLimit=.5,this.loop=!1,this.momentum=0,this.timestamp=0,this.callback=null,this._transitionCallback=this.animate.bind(this),this.clear()}clear(){this.momentum=0,this.timestamp=null,this.loop=null,this.callback=null}cancel(){this.loop&&(this.animator.cancelTransition(this._transitionCallback),this.clear())}setMomentum(e,n){if(this.disabled){n(e);return}e*this.momentum<0?this.momentum=0:Math.abs(e)>this.accelerationThreshold?this.momentum=cd([this.momentum,e],this.acceleration):this.momentum=e,this.callback=n,this.loop||this.animate()}animate(e){this.callback(this.momentum);const n=e-this.timestamp||0;this.timestamp=e;const r=Math.abs(this.momentum);this.momentum=Math.sign(this.momentum)*Math.max(0,r-((r*this.damping)**1.5+.04)*n),Math.abs(this.momentum)>this.lowerLimit?(this.loop=!0,this.animator.requestTransition(this._transitionCallback)):this.clear()}}function dC(t){const e={},n=["string","number","boolean"],r=["wheelDelta","wheelDeltaX","wheelDeltaY"];for(const i in t){const s=i;!r.includes(i)&&n.includes(typeof t[s])&&(e[s]=t[s])}return e}function pC(t,e,n=!0){let r,i=o=>{};return function(...a){return new Promise((u,c)=>{const l=()=>{clearTimeout(r),i=f=>{},u(t(...a))};n&&i("debounced"),clearTimeout(r),i=c,r=setTimeout(l,e)})}}const zh=new Map;async function gC(t,e,n){var s;const r=t.symbol;let i=(s=zh.get(r))!=null?s:await xC(t.symbol);return i?(zh.set(r,i),ot`<div class="title"><strong>${i.name}</strong> ${i.description}</div><p class="summary">${i.summary}</p><p class="source">Source: NCBI RefSeq Gene</p>`):null}async function mC(t){console.log("Searching: "+t);const e={mode:"cors"},r=(await fetch(`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=gene&term=${t}[GENE]&sort=relevance&retmode=json`,e).then(i=>i.json())).esearchresult.idlist[0];return r?(await fetch(`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gene&id=${r}&retmode=json`,e).then(o=>o.json())).result[r]:null}const AC=pC(mC,500);function xC(t){return AC(t)}const yC=xe(".4~r"),bC=xe(".4~e");function wC(t){return t===null?ot`<span class="na">NA</span>`:X(t)?t.substring(0,30):Number.isInteger(t)?""+t:me(t)?Math.abs(t)>Math.pow(10,8)||Math.abs(t)<Math.pow(10,-8)?bC(t):yC(t):Qr(t)?t?"True":"False":"?"+typeof t+" "+t}async function vC(t,e,n){const r=(o,a)=>{var u;for(const[c,l]of Object.entries(e.encoders))if((u=l==null?void 0:l.accessor)==null?void 0:u.fields.includes(o))switch(c){case"color":case"fill":case"stroke":return ot`<span class="color-legend" style="${`background-color: ${l(a)}`}"></span>`}return""},i=ot`<table class="attributes">${Object.entries(t).filter(([o,a])=>!o.startsWith("_")).map(([o,a])=>ot`<tr><th>${o}</th><td>${wC(a)} ${r(o,t)}</td></tr>`)}</table>`,s=e.unitView.spec.title?ot`<div class="title"><strong>${e.unitView.spec.title}</strong></div>`:"";return ot`${s}${i}`}k("index",io,["continuous"]),k("locus",im,["continuous"]),k("null",kh,[]),tc("fasta",lC);class Uh{constructor(e,n,r={}){var i;this.container=e,this.spec=n,this.accessorFactory=new Q1,this.viewFactory=new Hv,this.namedDataProviders=[],this.animator=new iC(()=>this.renderAll()),this.genomeStore=void 0,this.viewVisibilityPredicate=s=>s.isVisibleInSpec(),this._renderingContext=void 0,this._pickingContext=void 0,this._dirtyPickingBuffer=!1,this._currentHover=void 0,this._wheelInertia=new hC(this.animator),this._keyboardListeners=new Map,this._eventListeners=new Map,this.tooltipHandlers=T({default:vC,refseqgene:gC},(i=r.tooltipHandlers)!=null?i:{}),this.viewRoot=void 0}registerNamedDataProvider(e){this.namedDataProviders.unshift(e)}getNamedData(e){for(const n of this.namedDataProviders){const r=n(e);if(r)return r}}broadcast(e,n){const r={type:e,payload:n};this.viewRoot.visit(i=>i.handleBroadcast(r))}_prepareContainer(){this.container.classList.add("genome-spy"),this.container.classList.add("loading"),this._glHelper=new Dw(this.container,()=>{if(this.viewRoot){const e=this.viewRoot.getSize(),n=r=>r.grow>0?void 0:r.px;return{width:n(e.width),height:n(e.height)}}}),this.loadingMessageElement=document.createElement("div"),this.loadingMessageElement.className="loading-message",this.loadingMessageElement.innerHTML='<div class="message">Loading<span class="ellipsis">...</span></div>',this.container.appendChild(this.loadingMessageElement),this.tooltip=new vA(this.container),this.loadingMessageElement.querySelector(".message").addEventListener("transitionend",()=>{this.loadingMessageElement.style.display="none"})}destroy(){this.container.classList.remove("genome-spy"),this.container.classList.remove("loading");for(const[e,n]of this._keyboardListeners)for(const r of n)document.removeEventListener(e,r);for(this._glHelper.finalize();this.container.firstChild;)this.container.firstChild.remove()}async _prepareViewsAndData(){this.spec.genome&&(this.genomeStore=new sC(this),await this.genomeStore.initialize(this.spec.genome));const e=this,n={dataFlow:new Ph,accessorFactory:this.accessorFactory,glHelper:this._glHelper,animator:this.animator,genomeStore:this.genomeStore,fontManager:new uC(this._glHelper),requestLayoutReflow:()=>{},updateTooltip:this.updateTooltip.bind(this),getNamedData:this.getNamedData.bind(this),getCurrentHover:()=>this._currentHover,addKeyboardListener:(a,u)=>{document.addEventListener(a,u);let c=this._keyboardListeners.get(a);c||(c=[],this._keyboardListeners.set(a,c)),c.push(u)},isViewVisible:e.viewVisibilityPredicate,isViewSpec:a=>e.viewFactory.isViewSpec(a),createView:function(a,u,c){return e.viewFactory.createView(a,n,u,c)}},r=this.spec;r.datasets&&this.registerNamedDataProvider(a=>r.datasets[a]),this.viewRoot=n.createView(r,null,"viewRoot"),await Rh(this.viewRoot),WE(this.viewRoot),XE(this.viewRoot),this.viewRoot=ZE(this.viewRoot),this._glHelper.invalidateSize();const i=[];this.viewRoot.visit(a=>{a instanceof rt&&i.push(a)});const s=UE(this.viewRoot,n.dataFlow);jE(s),this.broadcast("dataFlowBuilt",s),s.dataSources.forEach(a=>console.log(a.subtreeToString())),i.forEach(a=>a.mark.initializeEncoders());const o=Promise.all(i.map(a=>a.mark.initializeGraphics()));for(const a of i)s.addObserver(u=>{a.mark.initializeData(),a.mark.updateGraphicsData()},a);await n.fontManager.waitUntilReady(),s.initialize(),await Promise.all(s.dataSources.map(a=>a.load())),this.viewRoot.visit(a=>{for(const u of Object.values(a.resolutions.scale))u.reconfigure()}),this.broadcast("dataLoaded"),await o,this.viewRoot.visit(a=>{for(const u of Object.values(a.resolutions.scale))this._glHelper.createRangeTexture(u)});for(const a of i)a.mark.finalizeGraphicsInitialization();n.requestLayoutReflow=this.computeLayout.bind(this),this.viewRoot.visit(a=>is(a,"size")),this._glHelper.invalidateSize()}async launch(){try{return this._prepareContainer(),await this._prepareViewsAndData(),this.registerMouseEvents(),this.computeLayout(),this.animator.requestRender(),this._glHelper.addEventListener("resize",()=>{this.computeLayout(),this.renderAll()}),!0}catch(e){const n=`${e.view?`At "${e.view.getPathString()}": `:""}${e.toString()}`;return console.error(e.stack),EC(this.container,n),!1}finally{this.container.classList.remove("loading"),window.setTimeout(()=>{this.loadingMessageElement.style.display="none"},2e3)}}registerMouseEvents(){const e=this._glHelper.canvas,n=r=>{var i;if(this.layout&&r instanceof MouseEvent){r.type=="mousemove"&&(this.tooltip.handleMouseMove(r),this._tooltipUpdateRequested=!1,r.buttons==0&&this.renderPickingFramebuffer());const s=e.getBoundingClientRect(),o=new tC(r.clientX-s.left-e.clientLeft,r.clientY-s.top-e.clientTop),a=u=>{this.layout.dispatchInteractionEvent(new eC(o,u)),this._tooltipUpdateRequested||this.tooltip.clear()};if(r.type!="wheel"&&this._wheelInertia.cancel(),r.type=="mousemove")this._handlePicking(o.x,o.y);else if(r.type=="mousedown"||r.type=="mouseup")this.renderPickingFramebuffer();else if(r.type=="wheel"){this._tooltipUpdateRequested=!1;const u=r;if(Math.abs(u.deltaX)>Math.abs(u.deltaY))this._currentHover=null,this._wheelInertia.cancel();else{const c=dC(u);this._wheelInertia.setMomentum(u.deltaY*(u.deltaMode?80:1),l=>{const f=new WheelEvent("wheel",Se(T({},c),{deltaMode:0,deltaX:0,deltaY:l}));a(f)}),u.preventDefault();return}}if(r.type=="click"){const u=this._currentHover?{type:r.type,viewPath:[...this._currentHover.mark.unitView.getAncestors()].map(c=>c.name).reverse(),datum:this._currentHover.datum}:{type:r.type,viewPath:null,datum:null};(i=this._eventListeners.get("click"))==null||i.forEach(c=>c(u))}a(r)}};["mousedown","mouseup","wheel","click","mousemove","gesturechange","contextmenu"].forEach(r=>e.addEventListener(r,n)),e.addEventListener("mousedown",()=>{document.addEventListener("mouseup",()=>this.tooltip.popEnabledState(),{once:!0}),this.tooltip.pushEnabledState(!1)}),e.addEventListener("dragstart",r=>r.stopPropagation())}_handlePicking(e,n){var s;const r=this._glHelper.readPickingPixel(e,n),i=r[0]|r[1]<<8|r[2]<<16;if(i==0){this._currentHover=null;return}if(i!==((s=this._currentHover)==null?void 0:s.uniqueId)&&(this._currentHover=null),this._currentHover||this.viewRoot.visit(o=>{if(o instanceof rt){if(o.mark.isPickingParticipant()){const a=o.mark.encoders.uniqueId.accessor;o.getCollector().visitData(u=>{a(u)==i&&(this._currentHover={mark:o.mark,datum:u,uniqueId:i})})}if(this._currentHover)return Or}}),this._currentHover){const o=this._currentHover.mark;this.updateTooltip(this._currentHover.datum,async a=>{var c;if(!o.isPickingParticipant())return;const u=o.properties.tooltip;if(u!==null){const l=(c=u==null?void 0:u.handler)!=null?c:"default",f=this.tooltipHandlers[l];if(!f)throw new Error("No such tooltip handler: "+l);return f(a,o,u==null?void 0:u.params)}})}}updateTooltip(e,n){if(!this._tooltipUpdateRequested||!e)this.tooltip.updateWithDatum(e,n),this._tooltipUpdateRequested=!0;else throw new Error("Tooltip has already been updated! Duplicate event handler?")}computeLayout(){const e=this.viewRoot;if(!e)return;this.broadcast("layout");const n=this._glHelper.getLogicalCanvasSize();if(isNaN(n.width)||isNaN(n.height)){console.log(`NaN in canvas size: ${n.width}x${n.height}. Skipping computeLayout().`);return}this._renderingContext=new Nh({picking:!1},this._glHelper),this._pickingContext=new Nh({picking:!0},this._glHelper);const r=new JE({});e.render(new $E(this._renderingContext,this._pickingContext,r),nt.create(0,0,n.width,n.height)),this.layout=r.getLayout(),this.broadcast("layoutComputed")}renderAll(){var e;(e=this._renderingContext)==null||e.renderDeferred(),this._dirtyPickingBuffer=!0}renderPickingFramebuffer(){!this._dirtyPickingBuffer||(this._pickingContext.renderDeferred(),this._dirtyPickingBuffer=!1)}getSearchableViews(){const e=[];return this.viewRoot.visit(n=>{n instanceof rt&&n.getAccessor("search")&&e.push(n)}),e}getNamedScaleResolutions(){const e=new Map;return this.viewRoot.visit(n=>{for(const r of Object.values(n.resolutions.scale))r.name&&e.set(r.name,r)}),e}}function EC(t,e){const n=document.createElement("div");n.className="message-box";const r=document.createElement("div");r.textContent=e,n.appendChild(r),t.appendChild(n)}var CC="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSI+PHBhdGggZD0iTTQuNyAyMS4ycy40IDIuMyAxLjMgMy42QzcgMjYgOS44IDI4IDkuOCAyOHMzLjQtMi42IDYuNC04LjVjMCAwIDEgLjEgMS45LS40LjktLjYuOC0uNCAxLTEuMiAwIDAgMi45LjUgNi42IDAgMi4xLS4zIDQuMy0xIDYuMi0yLjUgMCAwLTEuMS0xLjctMi41LTUuMS0uNS0xLjMtMi0xLjgtNC42LTQuNmwtOC4yIDguNi0xMS45IDYuOXoiIGZpbGwtb3BhY2l0eT0iLjEiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSIjN2ZiYmRkIi8+PHBhdGggZD0iTTEyLjQgMTUuNWMtLjctLjUtMi40LS44LTQuNC0uNC0yIC40LTQgMS4zLTQuOCAxLjgtLjUuMy0xLjIgMS0xLjIgMS40IDAgLjcuMyAxLjguOCAyLjQuMy4zLjcuNSAxLjQuNi44IDAgMi41LTEuNCAzLjUtMiAxLS42IDEuNi0uOCAyLjctMS4ybC0yLjkgMi40Yy0xLjMgMS4yLTIuMiAxLjUtMi40IDIuMyAwIC41IDAgMS40LjUgMS44LjQuNS42LjggMS42LjguNiAwIDEgMCAyLjYtMS41LjktLjkgMi4zLTMgMi43LTMuNy42LTEuMSAxLTIuMi43LTMtLjItMS0uNC0xLjQtLjgtMS43ek0xNy40IDE0LjJjLS4zLS41LS45LTEuMi0uMi0yLjVsMS45LTNjLjUtLjggMi0yLjMgMi42LTIuNi42LS40IDEuNS0uNiAyLS4yLjYuNCAxIDEgMS4zIDEuNS40LjYuNyAxLjMuMiAyLS43IDEtMS42LjktMi44IDEuNy0xLjIuOC0xLjkgMS4yLTIuNSAxLjlsMy44LTEuOGMxLjMtLjYgMi43LTEuMSAzLjQtLjcuOC41LjguNyAxIDEuNC4zIDEtLjIgMS45LS44IDIuNC0uNS42LTEuNS45LTIuNiAxLjItMS40LjQtNC41IDEtNS44LjUtMS4zLS41LTEuMy0xLjQtMS41LTEuOHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iLjUiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0iIzdmYmJkZCIvPjxwYXRoIGQ9Ik0xMy44IDE1LjNjLjkuOC42IDIgMS40IDEuOCAxLS4yIDEuNC0uOCAxLjMtMS41IDAtLjcgMC0uOC0uNC0xLjYtLjMtLjctMS0xLjEtMi0uNS0uNy41LTEuNCAxLjMtMS40IDEuM3MuMi0uMyAxLjEuNXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9Ii41Ii8+PC9zdmc+";async function DC(t,e,n={}){var s,o,a;let r;if(X(t)){if(r=document.querySelector(t),!r)throw new Error(`No such element: ${t}`)}else if(t instanceof HTMLElement)r=t;else throw new Error(`Invalid element: ${t}`);let i;try{const u=Le(e)?e:await Gh(e);if((s=u.baseUrl)!=null||(u.baseUrl=""),(o=u.width)!=null||(u.width="container"),(a=u.padding)!=null||(u.padding=10),r==document.body){const c=document.createElement("div");c.style.position="fixed",c.style.inset="0",c.style.overflow="hidden",r.appendChild(c),r=c}i=new Uh(r,u,n),SC(i,n),await i.launch()}catch(u){r.innerText=u.toString(),console.error(u)}return{finalize(){for(i.destroy();r.firstChild;)r.firstChild.remove()},addEventListener(u,c){const l=i._eventListeners;let f=l.get(u);f||(f=new Set,l.set(u,f)),f.add(c)},removeEventListener(u,c){var f;(f=i._eventListeners.get(u))==null||f.delete(c)},getScaleResolutionByName(u){return i.getNamedScaleResolutions().get(u)}}}function SC(t,e){e.namedDataProvider&&t.registerNamedDataProvider(e.namedDataProvider)}async function Gh(t){let e;try{e=JSON.parse(await ii().load(t))}catch(n){throw new Error(`Could not load or parse configuration: ${t}, reason: ${n.message}`)}if(!e.baseUrl){const n=t.match(/^[^?#]*\//);e.baseUrl=n&&n[0]||"./"}return e}W.GenomeSpy=Uh,W.embed=DC,W.html=ot,W.icon=CC,W.loadSpec=Gh,Object.defineProperty(W,"__esModule",{value:!0}),W[Symbol.toStringTag]="Module"});
|
|
147
|
+
};`)},f=h=>{o||c(h);for(const[p,d]of o){const g=u(h,p);for(let m=0;m<d.length;m++)g[r[m]]=h[d[m]];this._propagate(g)}},l=h=>{c(h),f(h),this.handle=f};this.handle=l,this.beginBatch=h=>{l0(h)&&(this.handle=l),super.beginBatch(h)}}}class av extends K{get behavior(){return Ct}constructor(e){super(),this.params=e,this.buffer=[]}reset(){this.buffer=[]}handle(e){this.buffer.push(e)}complete(){var f;const e=this.params,n=e.as||["y0","y1"],r=e.sort?Qa(e.sort.field,e.sort.order):void 0,i=e.field?G(e.field):()=>1,s=e.groupby.map(l=>G(l)),o=Jh(this.buffer,l=>s.map(h=>h(l)).join()).map(l=>l[1]);let a=l=>!0;if(e.baseField){const l=G(e.baseField);a=h=>l(h)!==null}let u,c;switch(e.offset){case"normalize":u=(l,h)=>l/h,c=(l,h)=>Xr(l,h);break;case"center":u=(l,h)=>l-h/2,c=(l,h)=>Xr(l,h);break;case"information":{const l=Math.log2((f=e.cardinality)!=null?f:4);u=(h,p)=>h/p,c=(h,p)=>{const g=Xr(h,y=>+!a(y)),m=Xr(h,p),A=m-g;let w=0;for(let y=0;y<h.length;y++){const v=h[y];if(a(v)){const S=p(v)/A;w-=S*Math.log2(S)}}return A/(l-(w+0))*(A/m)}}break;default:u=(l,h)=>l,c=(l,h)=>1}for(const l of o){r&&l.sort(r);const h=c(l,i);let p=0;for(const d of l){const g=p+i(d);a(d)&&(d[n[0]]=u(p,h),d[n[1]]=u(g,h),this._propagate(d),p=g)}}super.complete()}}class uv extends K{get behavior(){return rt}constructor(e){var s,o;super();const n=G((s=e.field)!=null?s:"sequence"),[r,i]=(o=e.as)!=null?o:["pos","sequence"];this.handle=a=>{const u=Object.assign({},a,{[i]:"",[r]:0}),c=n(a);for(let f=0;f<c.length;f++){const l=Object.assign({},u);l[r]=f,l[i]=c.charAt(f),this._propagate(l)}}}}class cv extends K{get behavior(){return rt}constructor(e){super(),this.params=e,this.buffer=[]}reset(){this.buffer=[]}handle(e){this.buffer.push(e)}complete(){const n=this.params.groupby,r=n.map(s=>G(s)),i=Yr(this.buffer,...r);for(const[s,o]of Ra(i)){const a={count:o.length};for(let u=0;u<n.length;u++)a[n[u]]=s[u];this._propagate(a)}super.complete()}}const lv="_uniqueId",Z0=1e4,K0=[null];class q0 extends K{get behavior(){return Ct}constructor(e){var n;super(),this.params=e,this.as=(n=e.as)!=null?n:lv,this._blocks=[],this._usedBlocks=0,this._id=-1}initialize(){}reset(){super.reset(),this._usedBlocks=0,this._id=-1}handle(e){e[this.as]=this._nextId(),this._propagate(e)}_nextId(){return++this._id%Z0==0&&(this._id=this._getBlock()*Z0),this._id}_getBlock(){return this._usedBlocks<this._blocks.length?this._blocks[this._usedBlocks++]:this._reserveBlock()}_reserveBlock(){const e=K0.length;return K0[e]=this,this._blocks.push(e),this._usedBlocks++,e}}const fv={aggregate:cv,collect:ka,coverage:jw,filterScoredLabels:Xw,filter:Zw,flattenCompressedExons:Jw,flattenDelimited:_w,flattenSequence:uv,formula:ev,identifier:q0,linearizeGenomicCoordinate:W0,measureText:tv,pileup:rv,project:iv,regexExtract:sv,regexFold:ov,sample:f0,stack:av};function hv(t,e){const n=fv[t.type];if(n)return new n(t,e);throw new Error("Unknown transform: "+t.type)}function dv(t){return"values"in t}class pv extends Bn{constructor(e){var n;if(super(),this.params=e,typeof e.values=="string"&&!((n=e==null?void 0:e.format)!=null&&n.type))throw new Error("Data format type (csv, dsv, ...) must be specified if a string is provided!")}loadSynchronously(){const e=this.params.values;let n=[],r=i=>i;if(Array.isArray(e))e.length>0&&(n=e,r=ns(e[0]));else if(typeof e=="object")n=[e];else if(typeof e=="string")n=Uu(e,O0(this.params));else throw new Error('"values" in data configuration is not an array, object, or a string!');this.reset(),this.beginBatch({type:"file"});for(const i of n)this._propagate(r(i));this.complete()}async load(){this.loadSynchronously()}}function gv(t){return"url"in t}class mv extends Bn{constructor(e,n){super(),this.params=e,this.baseUrl=n}get identifier(){return JSON.stringify({params:this.params,baseUrl:this.baseUrl})}async load(){const e=this.params.url,n=Array.isArray(e)?e:[e],r=async s=>ri({baseURL:this.baseUrl}).load(s).catch(o=>{throw new Error(`Cannot fetch: ${this.baseUrl}${s}: ${o.message}`)}),i=(s,o)=>{try{const a=Uu(s,O0(this.params));this.beginBatch({type:"file",url:o});for(const u of a)this._propagate(u)}catch(a){throw new Error(`Cannot parse: ${o}: ${a.message}`)}};this.reset(),await Promise.all(n.map(s=>r(s).then(i))),this.complete()}}function Av(t){return"sequence"in t}class xv extends Bn{constructor(e){if(super(),this.sequence=e.sequence,!("start"in this.sequence))throw new Error("'start' is missing from sequence parameters!");if(!("stop"in this.sequence))throw new Error("'stop' is missing from sequence parameters!")}loadSynchronously(){const e=this.sequence.as||"data",n=this.sequence.step||1,r=this.sequence.stop;this.reset(),this.beginBatch({type:"file"});for(let i=this.sequence.start;i<r;i+=n)this._propagate({[e]:i});this.complete()}async load(){this.loadSynchronously()}}function yv(t){return"dynamicSource"in t}class bv extends Bn{publishData(e){this.reset(),this.beginBatch({type:"file"});let n;for(const r of e)n||(n=ns(r)),this._propagate(n(r));this.complete()}async load(){}}function wv(t,e){if(dv(t))return new pv(t);if(gv(t))return new mv(t,e);if(Av(t))return new xv(t);if(yv(t))return new bv;throw new Error("Cannot figure out the data source type: "+JSON.stringify(t))}function vv(t){const e=Object.keys(t).filter(r=>typeof r=="string"),n=new Function("source","return { "+e.map(r=>JSON.stringify(r)).map(r=>`${r}: source[${r}]`).join(`,
|
|
148
|
+
`)+" };");return n.properties=e,n}class J0 extends K{get behavior(){return rt}constructor(){super();const e=n=>{const r=vv(n);this.handle=i=>this._propagate(r(i)),this.handle(n)};this.handle=e,this.beginBatch=n=>{l0(n)&&(this.handle=e),super.beginBatch(n)}}}class _0{constructor(){this._dataSourcesByHost=new Map,this._collectorsByHost=new Map,this._observers=new Map}get dataSources(){return[...new Set(this._dataSourcesByHost.values()).values()]}get collectors(){return[...this._collectorsByHost.values()]}addObserver(e,n){let r=this._observers.get(n);r||(r=[],this._observers.set(n,r)),r.push(e)}_relayObserverCallback(e,n){const r=this._observers.get(n);if(r)for(const i of r)i(e)}addDataSource(e,n){this._dataSourcesByHost.set(n,e)}findDataSourceByKey(e){return this._dataSourcesByHost.get(e)}addCollector(e,n){this._collectorsByHost.set(n,e),e.observers.push(r=>this._relayObserverCallback(r,n))}findCollectorByKey(e){return this._collectorsByHost.get(e)}initialize(){for(const e of this.dataSources)e.visit(n=>n.initialize())}}function Ev(t){return"name"in t}class Cv extends Bn{constructor(e,n){super(),this.getNamedData=n,this.params=e}get identifier(){return this.params.name}_getValues(){const e=this.getNamedData(this.params.name);if(e)return e;throw new Error("Cannot find named data: "+this.params.name)}loadSynchronously(){const e=this._getValues();let n=r=>r;if(Array.isArray(e))e.length>0&&(n=ns(e[0]));else throw new Error(`Named data "${this.params.name}" is not an array!`);this.reset(),this.beginBatch({type:"file"});for(const r of e)this._propagate(n(r));this.complete()}async load(){this.loadSynchronously()}}function Dv(t,e){const n=[];let r;const i=e!=null?e:new _0,s=[];function o(f,l=()=>{}){if(!r)throw l()||new Error("Cannot append data flow node, no parent exist!");return r.addChild(f),r=f,f}function a(f,l){return o(f,()=>new Error(`Cannot append a transform because no (inherited) data are available! ${l?JSON.stringify(l):""}`))}function u(f,l){for(const h of f){let p;try{p=hv(h,l)}catch(d){throw console.warn(d),new Error(`Cannot initialize "${h.type}" transform: ${d}`)}p.behavior&Ct&&a(new J0),a(p)}}const c=f=>{if(n.push(r),f.spec.data){const l=Nw(f.spec.data)?f.getDynamicDataSource():Ev(f.spec.data)?new Cv(f.spec.data,f.context.getNamedData):wv(f.spec.data,f.getBaseUrl());r=l,i.addDataSource(l,f)}if(f.spec.transform&&u(f.spec.transform,f),f instanceof Ke){if(!r)throw new Error("A unit view has no (inherited) data source");const l=Sv(f);if(l){s.push(l.rewrite);for(const p of l.transforms)a(p)}f.mark.isPickingParticipant()&&a(new q0({type:"identifier"}));const h=new ka({type:"collect",groupby:f.getFacetFields(),sort:Bv(f,l==null?void 0:l.rewrittenEncoding)});o(h),i.addCollector(h,f)}N0(f.spec)};return c.postOrder=f=>{r=n.pop()},t.visit(c),s.forEach(f=>f()),i}function Sv(t){var s,o,a,u;const e=[],n={},r=[];for(const[c,f]of Object.entries(t.getEncoding())){const l=c;wr(l)&&Ll(f)&&r.push({channel:l,chromPosDef:f})}const i=Yr(r,c=>pn(c.channel),c=>c.chromPosDef.chrom);for(const[c,f]of i.entries())for(const[l,h]of f.entries()){const p=[],d=[],g=[];for(const{channel:m,chromPosDef:A}of h){const w=S=>S.replace(/[^A-Za-z0-9_]/g,""),y=["_linearized_",w(A.chrom),"_",w(A.pos)].join(""),v=ve(M({},(a=(o=(s=t.spec.encoding)==null?void 0:s[m])!=null?o:t.getEncoding()[m])!=null?a:{}),{field:y});delete v.chrom,delete v.pos,!v.type&&A.type&&(v.type=A.type),n[m]=v,p.push(A.pos),g.push((u=A.offset)!=null?u:0),d.push(y)}e.push(new W0({type:"linearizeGenomicCoordinate",channel:c,chrom:l,pos:p,offset:g,as:d},t))}return e.length?{transforms:e,rewrittenEncoding:n,rewrite:()=>{t.spec.encoding=M(M({},t.spec.encoding),n),n0(t.mark,"encoding")}}:void 0}function Bv(t,e){var r;const n=M(M({},t.getEncoding()),e).x;if(Me(n)&&(r=t.getScaleResolution("x"))!=null&&r.isZoomable()){if(xr(n))return{field:n.field};if(!yr(n))throw new Error("A zoomable x channel must be mapped to a field.")}}function $0(t,e=void 0){if(t.parent!==e)return!1;for(const n of t.children)if(!$0(n,t))return!1;return!0}function Na(t,e=!1){if(t instanceof ka&&(e=!0),t instanceof J0)if(e)e=!1;else{const n=t.children[0];t.excise(),n&&Na(n,e);return}t.behavior&rt&&(e=!1);for(let n=0,r=t.children.length;n<r;n++)Na(t.children[n],e||n<r-1)}function Fv(t){const e=[...t._dataSourcesByHost.entries()],n=new Map;for(const r of e){const i=r[1];i.identifier&&!n.has(i.identifier)&&n.set(i.identifier,i)}t._dataSourcesByHost.clear();for(let[r,i]of e){const s=n.get(i.identifier);s&&(s.adoptChildrenOf(i),i=s),t.addDataSource(i,r)}}function Mv(t){if(Na(t),!$0(t))throw new Error("Encountered a bug! There's a problem in the data flow structure.")}function Iv(t){for(const e of t.dataSources)Mv(e);Fv(t)}function Tv(t){const e=[];return t.visit(n=>{e.push(n)}),e}function Pv(t){t.visit(n=>{n instanceof Ke&&n.resolve("scale")});const e=new Set;t.visit(n=>{for(const r of Object.values(n.resolutions.scale)){const i=r.name;if(i&&e.has(i))throw new Error(`The same scale name "${i}" occurs in multiple scale resolutions!`);e.add(i)}}),t.visit(n=>{n instanceof Ke&&n.resolve("axis")}),t.visit(n=>n.onScalesResolved())}function Lv(t){for(const e of br){const n=t.getScaleResolution(e);n&&!n.name&&n.isZoomable()&&(n.name=`${e}_at_root`)}}function Rv(t){let e=t;const n=r=>r&&!Fe(r);return t.visit(r=>{if(r instanceof Ba||r instanceof Ke){const i=r.getEncoding();if(r instanceof Ke&&!n(i.x)&&!n(i.y))return es;const s=r.parent,o=new Qw(r.context,s);if(r.parent=o,o.child=r,o.name=r.name+"_decorator",s)if(s instanceof it)s.replaceChild(r,o);else{let a;if(t.visit(Nv((u,c)=>{if(u===r)return a=Be(c),Rr})),a instanceof it)a.replaceChild(r,o);else throw new Error("Cannot find parent while decorating: "+r.getPathString())}return o.resolutions=r.resolutions,r.resolutions={scale:{},axis:{}},o.spec.height=r.spec.height,r.spec.height="container",o.spec.width=r.spec.width,r.spec.width="container",o.spec.padding=r.spec.padding,r.spec.padding=void 0,r===t&&(e=o),o.initialize(),es}}),e}async function kv(t,e,n){var o;if(!t.import.url)throw new Error("Cannot import, not an import spec: "+JSON.stringify(t));const r=ri({baseURL:e}),i=t.import.url,s=JSON.parse(await r.load(i).catch(a=>{throw new Error(`Could not load imported view spec: ${i}
|
|
149
|
+
Reason: ${a.message}`)}));if(n.isViewSpec(s))return s.baseUrl=(o=i.match(/^[^?#]*\//))==null?void 0:o[0],s;throw new Error(`The imported spec "${i}" is not a view spec: ${JSON.stringify(t)}`)}async function eh(t){const e=[];t.visit(n=>{if(n instanceof R0)return e.push(n),es});for(const n of e){const r=n.context,i=await kv(n.spec,n.getBaseUrl(),r),s=r.createView(i,n.parent,n.name);n.parent.replaceChild(n,s),await eh(s)}}function Nv(t){const e=[],n=r=>t(r,e);return n.beforeChildren=r=>{e.push(r)},n.afterChildren=r=>{e.pop()},n}class za{constructor(e){this.globalOptions=e}pushView(e,n){}popView(e){}renderMark(e,n){}}class th extends za{constructor(e,n){super(e),this.webGLHelper=n,this.buffer=[],this.coords=void 0,this.views=new Set}pushView(e,n){this.views.add(e),this.coords=n}renderMark(e,n){if(this.globalOptions.picking&&!e.isPickingParticipant())return;const r=e.render(n);r&&this.buffer.push({mark:e,callback:r,coords:this.coords,clipRect:n.clipRect})}renderDeferred(){if(this.batch||this._buildBatch(),this.batch.length==0)return;const e=this.webGLHelper.gl,n=this.globalOptions.picking;e.bindFramebuffer(e.FRAMEBUFFER,n?this.webGLHelper._pickingBufferInfo.framebuffer:null),this.webGLHelper.clearAll();for(const r of this.views)r.onBeforeRender();for(const r of this.batch)r();n&&e.bindFramebuffer(e.FRAMEBUFFER,null)}_buildBatch(){this.batch=[];let e=!0,n=!0;const r=o=>()=>{e&&o()},i=o=>()=>{e&&n&&o()},s=Yr(this.buffer,o=>o.mark);for(const[o,a]of s.entries()){if(!o.isReady())continue;this.batch.push(()=>{e=o.unitView.getEffectiveOpacity()>0}),this.batch.push(r(()=>o.prepareRender(this.globalOptions)));let u;for(const c of a){const f=c.coords;f.equals(u)||this.batch.push(r(()=>{n=o.setViewport(f,c.clipRect)})),this.batch.push(i(c.callback)),u=c.coords}}}}class zv extends za{constructor(e){super(e),this.root=void 0,this.stack=[],this.lastAddition=void 0}pushView(e,n){const r=new Ov(e,n);this.root?Be(this.stack).addChild(r):this.root=r,this.stack.push(r)}popView(e){this.stack.pop()}getLayout(){return this.root}}class Ov{constructor(e,n){this.view=e,this.coords=n,this.children=[]}addChild(e){const n=Be(this.children);n&&e.view===n.view&&e.coords.equals(n.coords)||this.children.push(e)}dispatchInteractionEvent(e){if(this.coords.containsPoint(e.point.x,e.point.y)){if(this.view.handleInteractionEvent(this.coords,e,!0),e.stopped)return;if(this.children.length==0)e.target=this.view;else for(const n of this.children){if(n.dispatchInteractionEvent(e),e.target)break;if(e.stopped)return}this.view.handleInteractionEvent(this.coords,e,!1)}}}class Gv extends za{constructor(...e){super({}),this.contexts=e}pushView(e,n){for(const r of this.contexts)r.pushView(e,n)}popView(e){for(const n of this.contexts)n.popView(e)}renderMark(e,n){for(const r of this.contexts)r.renderMark(e,n)}}class Uv{constructor(e,n){this.point=e,this.uiEvent=n,this.stopped=!1,this.target=void 0}stopPropagation(){this.stopped=!0}get type(){return this.uiEvent.type}}class Hv{constructor(e,n){this.x=e,this.y=n}equals(e){return e?e===this||e.x===this.x&&e.y===this.y:!1}}const Qv=t=>new Promise(e=>setTimeout(e,t));function Vv(t){const e=t.requestAnimationFrame||window.requestAnimationFrame,n=t.signal,r=()=>new Promise((i,s)=>{if(n!=null&&n.aborted)return s("aborted");const o=performance.now(),a=o+(t.duration||1e3),u=typeof t.from=="number"?t.from:0,c=typeof t.to=="number"?t.to:1,f=t.easingFunction||(g=>g),l=g=>(g-o)/(a-o),h=g=>g*(c-u)+u,p=g=>Math.max(0,Math.min(1,g)),d=g=>{n!=null&&n.aborted?s("aborted"):(t.onUpdate(h(f(p(l(g))))),g<a?e(d):(t.onUpdate(h(f(1))),i()))};e(d)});return t.delay?n!=null&&n.aborted?Promise.reject("aborted"):Qv(t.delay).then(r):r()}class jv{constructor(e){this._renderCallback=e,this._renderRequested=!1,this._warn=!1,this.transitions=[]}requestTransition(e){this.cancelTransition(e),this.transitions.push(e),this.requestRender()}cancelTransition(e){const n=this.transitions.indexOf(e);n>=0&&this.transitions.splice(n,1)}requestRender(){this._renderRequested?this._warn&&console.warn("Render already requested!"):(this._renderRequested=!0,window.requestAnimationFrame(e=>{this._renderRequested=!1;const n=this.transitions;this.transitions=[];let r;for(;r=n.shift();)r(e);this._renderCallback(e)}))}transition(e){return Vv(M({requestAnimationFrame:n=>this.requestTransition(n)},e))}}function nh(){const t=e=>e;return t.invert=e=>e,t.copy=nh,t.invertRange=()=>{},t}class Yv{constructor(e){this.genomes=new Map,this.genomeSpy=e}async initialize(e){const n=new gw(e);return this.genomes.set(n.name,n),Promise.all([...this.genomes.values()].map(r=>r.load(this.genomeSpy.spec.baseUrl)))}getGenome(e){if(!this.genomes.size)throw new Error("No genomes have been configured!");if(e){const n=this.genomes.get(e);if(!n)throw new Error(`No genome with the name ${e} has been configured!`);return n}else{if(this.genomes.size>1)throw new Error("Cannot pick a default genome! More than one have been configured!");return this.genomes.values().next().value}}}var Wv="data:image/png;base64,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";const Xv={thin:100,light:300,regular:400,normal:400,medium:500,bold:700,black:900};class Zv{constructor(e){this._webGLHelper=e,this.fontRepository="https://raw.githubusercontent.com/etiennepinchon/aframe-fonts/master/fonts/",this._fonts=new $t([],JSON.stringify),this._metadataPromises=new Map,this._fontPromises=new Map,this._promises=[],this._defaultFontEntry={metrics:ba(X0),texture:this._createTextureNow(Wv)}}async waitUntilReady(){await Promise.all(this._promises)}getFont(e,n="normal",r="regular"){if(W(r)&&(r=Xv[r.toLowerCase()],!r))throw new Error("Unknown font weight: "+r);const i={family:e,style:n,weight:r};let s=this._fonts.get(i);return s||(s={metrics:void 0,texture:void 0},this._fonts.set(i,s),this._promises.push(this._loadFontEntry(s,i))),s}async _loadFontEntry(e,n){try{const r=await this._loadMetadata(n.family),i=qv(r,n),s=this.fontRepository+rh(n.family)+"/"+i.replace(/\.\w+/,""),o=this._createTexture(s+".png"),a=this._loadFont(s+".json");e.texture=await o,e.metrics=await a}catch(r){console.log("Cannot load font. Using default.",r),e.metrics=this._defaultFontEntry.metrics,e.texture=this._defaultFontEntry.texture}}_loadFont(e){let n=this._fontPromises.get(e);return n||(n=fetch(e).then(r=>{if(!r.ok)throw new Error("Could not load font: "+r.status);return r}).then(r=>r.json()).then(r=>ba(r)),this._fontPromises.set(e,n)),n}_loadMetadata(e){const n=rh(e);let r=this._metadataPromises.get(n);return r||(r=fetch(this.fontRepository+n+"/METADATA.pb").then(i=>{if(!i.ok)throw new Error("Could not load font metadata: "+i.status);return i}).then(i=>i.text()).then(i=>Kv(i)).catch(i=>{console.warn(i)}),this._metadataPromises.set(n,r)),r}getDefaultFont(){return this._defaultFontEntry}_createTexture(e){const n=this._webGLHelper.gl;return new Promise((r,i)=>{Fr(n,{src:e,min:n.LINEAR},(s,o,a)=>{s?i(s):r(o)})})}_createTextureNow(e){const n=this._webGLHelper.gl;let r;const i=new Promise((s,o)=>{r=Fr(n,{src:e,min:n.LINEAR},(a,u,c)=>{a?o(a):s(u)})});return this._promises.push(i),r}}function rh(t){return t.toLowerCase().replaceAll(/[^\w]/g,"")}function Kv(t){const e=t.split(`
|
|
150
|
+
`),n=[];let r;for(const i of e)if(i.startsWith("fonts {")&&(r={name:void 0,style:void 0,weight:void 0,filename:void 0,post_script_name:void 0,full_name:void 0,copyright:void 0}),i.startsWith("}")&&(n.push(r),r=void 0),r){let s=i.match(/^\s*([A-Za-z_]+):[ ]?"(.*)"$/);if(s){const o=s[1];r[o]=s[2]}if(s=i.match(/^\s*([A-Za-z_]+):[ ]?(\d+)$/),s){const o=s[1];r[o]=+s[2]}}return n}function qv(t,e){let n,r=Number.POSITIVE_INFINITY;for(const i of t)if(e.family.localeCompare(i.name,void 0,{sensitivity:"accent"})==0&&e.style==i.style){const s=Math.abs(e.weight-i.weight);s<r&&(r=s,n=i)}return n==null?void 0:n.filename}function Jv(t,e){const n=[];let r;for(const i of t.split(`
|
|
151
|
+
`))if(i.startsWith(">"))r={identifier:i.match(/>(\S+)/)[1],sequence:""},n.push(r);else if(r)r.sequence+=i.trim();else throw new Error("Invalid fasta file!");return n}class _v{constructor(e,n){this.animator=e,this.disabled=!!n,this.damping=.015,this.acceleration=.3,this.accelerationThreshold=100,this.lowerLimit=.5,this.loop=!1,this.momentum=0,this.timestamp=0,this.callback=null,this._transitionCallback=this.animate.bind(this),this.clear()}clear(){this.momentum=0,this.timestamp=null,this.loop=null,this.callback=null}cancel(){this.loop&&(this.animator.cancelTransition(this._transitionCallback),this.clear())}setMomentum(e,n){if(this.disabled){n(e);return}e*this.momentum<0?this.momentum=0:Math.abs(e)>this.accelerationThreshold?this.momentum=Mh([this.momentum,e],this.acceleration):this.momentum=e,this.callback=n,this.loop||this.animate()}animate(e){this.callback(this.momentum);const n=e-this.timestamp||0;this.timestamp=e;const r=Math.abs(this.momentum);this.momentum=Math.sign(this.momentum)*Math.max(0,r-((r*this.damping)**1.5+.04)*n),Math.abs(this.momentum)>this.lowerLimit?(this.loop=!0,this.animator.requestTransition(this._transitionCallback)):this.clear()}}function $v(t){const e={},n=["string","number","boolean"],r=["wheelDelta","wheelDeltaX","wheelDeltaY"];for(const i in t){const s=i;!r.includes(i)&&n.includes(typeof t[s])&&(e[s]=t[s])}return e}function eE(t,e,n=!0){let r,i=o=>{};return function(...a){return new Promise((u,c)=>{const f=()=>{clearTimeout(r),i=l=>{},u(t(...a))};n&&i("debounced"),clearTimeout(r),i=c,r=setTimeout(f,e)})}}const ih=new Map;async function tE(t,e,n){var s;const r=t.symbol;let i=(s=ih.get(r))!=null?s:await iE(t.symbol);return i?(ih.set(r,i),_e`<div class="title"><strong>${i.name}</strong> ${i.description}</div><p class="summary">${i.summary}</p><p class="source">Source: NCBI RefSeq Gene</p>`):null}async function nE(t){console.log("Searching: "+t);const e={mode:"cors"},r=(await fetch(`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=gene&term=${t}[GENE]&sort=relevance&retmode=json`,e).then(i=>i.json())).esearchresult.idlist[0];return r?(await fetch(`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gene&id=${r}&retmode=json`,e).then(o=>o.json())).result[r]:null}const rE=eE(nE,500);function iE(t){return rE(t)}const sE=re(".4~r"),oE=re(".4~e");function aE(t){return t===null?_e`<span class="na">NA</span>`:W(t)?t.substring(0,30):Number.isInteger(t)?""+t:de(t)?Math.abs(t)>Math.pow(10,8)||Math.abs(t)<Math.pow(10,-8)?oE(t):sE(t):Ur(t)?t?"True":"False":"?"+typeof t+" "+t}async function uE(t,e,n){const r=(o,a)=>{var u;for(const[c,f]of Object.entries(e.encoders))if((u=f==null?void 0:f.accessor)!=null&&u.fields.includes(o))switch(c){case"color":case"fill":case"stroke":return _e`<span class="color-legend" style="${`background-color: ${f(a)}`}"></span>`}return""},i=_e`<table class="attributes">${Object.entries(t).filter(([o,a])=>!o.startsWith("_")).map(([o,a])=>_e`<tr><th>${o}</th><td>${aE(a)} ${r(o,t)}</td></tr>`)}</table>`,s=e.unitView.spec.title?_e`<div class="title"><strong>${e.unitView.spec.title}</strong></div>`:"";return _e`${s}${i}`}z("index",Qs,["continuous"]),z("locus",ag,["continuous"]),z("null",nh,[]),Gu("fasta",Jv);class sh{constructor(e,n,r={}){var i;this.container=e,this.spec=n,this.accessorFactory=new ZA,this.viewFactory=new Bw,this.namedDataProviders=[],this.animator=new jv(()=>this.renderAll()),this.genomeStore=void 0,this.viewVisibilityPredicate=s=>s.isVisibleInSpec(),this._renderingContext=void 0,this._pickingContext=void 0,this._dirtyPickingBuffer=!1,this._currentHover=void 0,this._wheelInertia=new _v(this.animator),this._keyboardListeners=new Map,this._eventListeners=new Map,this.tooltipHandlers=M({default:uE,refseqgene:tE},(i=r.tooltipHandlers)!=null?i:{}),this.viewRoot=void 0}registerNamedDataProvider(e){this.namedDataProviders.unshift(e)}getNamedData(e){for(const n of this.namedDataProviders){const r=n(e);if(r)return r}}broadcast(e,n){const r={type:e,payload:n};this.viewRoot.visit(i=>i.handleBroadcast(r))}_prepareContainer(){this.container.classList.add("genome-spy"),this.container.classList.add("loading"),this._glHelper=new fb(this.container,()=>{if(this.viewRoot){const e=this.viewRoot.getSize(),n=r=>r.grow>0?void 0:r.px;return{width:n(e.width),height:n(e.height)}}}),this.loadingMessageElement=document.createElement("div"),this.loadingMessageElement.className="loading-message",this.loadingMessageElement.innerHTML='<div class="message">Loading<span class="ellipsis">...</span></div>',this.container.appendChild(this.loadingMessageElement),this.tooltip=new Bm(this.container),this.loadingMessageElement.querySelector(".message").addEventListener("transitionend",()=>{this.loadingMessageElement.style.display="none"})}destroy(){this.container.classList.remove("genome-spy"),this.container.classList.remove("loading");for(const[e,n]of this._keyboardListeners)for(const r of n)document.removeEventListener(e,r);for(this._glHelper.finalize();this.container.firstChild;)this.container.firstChild.remove()}async _prepareViewsAndData(){this.spec.genome&&(this.genomeStore=new Yv(this),await this.genomeStore.initialize(this.spec.genome));const e=this,n={dataFlow:new _0,accessorFactory:this.accessorFactory,glHelper:this._glHelper,animator:this.animator,genomeStore:this.genomeStore,fontManager:new Zv(this._glHelper),requestLayoutReflow:()=>{},updateTooltip:this.updateTooltip.bind(this),getNamedData:this.getNamedData.bind(this),getCurrentHover:()=>this._currentHover,addKeyboardListener:(a,u)=>{document.addEventListener(a,u);let c=this._keyboardListeners.get(a);c||(c=[],this._keyboardListeners.set(a,c)),c.push(u)},isViewVisible:e.viewVisibilityPredicate,isViewSpec:a=>e.viewFactory.isViewSpec(a),createView:function(a,u,c){return e.viewFactory.createView(a,n,u,c)}},r=this.spec;r.datasets&&this.registerNamedDataProvider(a=>r.datasets[a]),this.viewRoot=n.createView(r,null,"viewRoot"),await eh(this.viewRoot),Pv(this.viewRoot),Lv(this.viewRoot),this.viewRoot=Rv(this.viewRoot),this._glHelper.invalidateSize();const i=[];this.viewRoot.visit(a=>{a instanceof Ke&&i.push(a)});const s=Dv(this.viewRoot,n.dataFlow);Iv(s),this.broadcast("dataFlowBuilt",s),s.dataSources.forEach(a=>console.log(a.subtreeToString())),i.forEach(a=>a.mark.initializeEncoders());const o=Promise.all(i.map(a=>a.mark.initializeGraphics()));for(const a of i)s.addObserver(u=>{a.mark.initializeData(),a.mark.updateGraphicsData()},a);await n.fontManager.waitUntilReady(),s.initialize(),await Promise.all(s.dataSources.map(a=>a.load())),this.viewRoot.visit(a=>{for(const u of Object.values(a.resolutions.scale))u.reconfigure()}),this.broadcast("dataLoaded"),await o,this.viewRoot.visit(a=>{for(const u of Object.values(a.resolutions.scale))this._glHelper.createRangeTexture(u)});for(const a of i)a.mark.finalizeGraphicsInitialization();n.requestLayoutReflow=this.computeLayout.bind(this),this.viewRoot.visit(a=>Ji(a,"size")),this._glHelper.invalidateSize()}async launch(){try{return this._prepareContainer(),await this._prepareViewsAndData(),this.registerMouseEvents(),this.computeLayout(),this.animator.requestRender(),this._glHelper.addEventListener("resize",()=>{this.computeLayout(),this.renderAll()}),!0}catch(e){const n=`${e.view?`At "${e.view.getPathString()}": `:""}${e.toString()}`;return console.error(e.stack),cE(this.container,n),!1}finally{this.container.classList.remove("loading"),window.setTimeout(()=>{this.loadingMessageElement.style.display="none"},2e3)}}registerMouseEvents(){const e=this._glHelper.canvas,n=r=>{var i;if(this.layout&&r instanceof MouseEvent){r.type=="mousemove"&&(this.tooltip.handleMouseMove(r),this._tooltipUpdateRequested=!1,r.buttons==0&&this.renderPickingFramebuffer());const s=e.getBoundingClientRect(),o=new Hv(r.clientX-s.left-e.clientLeft,r.clientY-s.top-e.clientTop),a=u=>{this.layout.dispatchInteractionEvent(new Uv(o,u)),this._tooltipUpdateRequested||this.tooltip.clear()};if(r.type!="wheel"&&this._wheelInertia.cancel(),r.type=="mousemove")this._handlePicking(o.x,o.y);else if(r.type=="mousedown"||r.type=="mouseup")this.renderPickingFramebuffer();else if(r.type=="wheel"){this._tooltipUpdateRequested=!1;const u=r;if(Math.abs(u.deltaX)>Math.abs(u.deltaY))this._currentHover=null,this._wheelInertia.cancel();else{const c=$v(u);this._wheelInertia.setMomentum(u.deltaY*(u.deltaMode?80:1),f=>{const l=new WheelEvent("wheel",ve(M({},c),{deltaMode:0,deltaX:0,deltaY:f}));a(l)}),u.preventDefault();return}}if(r.type=="click"){const u=this._currentHover?{type:r.type,viewPath:[...this._currentHover.mark.unitView.getAncestors()].map(c=>c.name).reverse(),datum:this._currentHover.datum}:{type:r.type,viewPath:null,datum:null};(i=this._eventListeners.get("click"))==null||i.forEach(c=>c(u))}a(r)}};["mousedown","mouseup","wheel","click","mousemove","gesturechange","contextmenu"].forEach(r=>e.addEventListener(r,n)),e.addEventListener("mousedown",()=>{document.addEventListener("mouseup",()=>this.tooltip.popEnabledState(),{once:!0}),this.tooltip.pushEnabledState(!1)}),e.addEventListener("dragstart",r=>r.stopPropagation())}_handlePicking(e,n){var s;const r=this._glHelper.readPickingPixel(e,n),i=r[0]|r[1]<<8|r[2]<<16;if(i==0){this._currentHover=null;return}if(i!==((s=this._currentHover)==null?void 0:s.uniqueId)&&(this._currentHover=null),this._currentHover||this.viewRoot.visit(o=>{if(o instanceof Ke){if(o.mark.isPickingParticipant()){const a=o.mark.encoders.uniqueId.accessor;o.getCollector().visitData(u=>{a(u)==i&&(this._currentHover={mark:o.mark,datum:u,uniqueId:i})})}if(this._currentHover)return Rr}}),this._currentHover){const o=this._currentHover.mark;this.updateTooltip(this._currentHover.datum,async a=>{var c;if(!o.isPickingParticipant())return;const u=o.properties.tooltip;if(u!==null){const f=(c=u==null?void 0:u.handler)!=null?c:"default",l=this.tooltipHandlers[f];if(!l)throw new Error("No such tooltip handler: "+f);return l(a,o,u==null?void 0:u.params)}})}}updateTooltip(e,n){if(!this._tooltipUpdateRequested||!e)this.tooltip.updateWithDatum(e,n),this._tooltipUpdateRequested=!0;else throw new Error("Tooltip has already been updated! Duplicate event handler?")}computeLayout(){const e=this.viewRoot;if(!e)return;this.broadcast("layout");const n=this._glHelper.getLogicalCanvasSize();if(isNaN(n.width)||isNaN(n.height)){console.log(`NaN in canvas size: ${n.width}x${n.height}. Skipping computeLayout().`);return}this._renderingContext=new th({picking:!1},this._glHelper),this._pickingContext=new th({picking:!0},this._glHelper);const r=new zv({});e.render(new Gv(this._renderingContext,this._pickingContext,r),Ze.create(0,0,n.width,n.height)),this.layout=r.getLayout(),this.broadcast("layoutComputed")}renderAll(){var e;(e=this._renderingContext)==null||e.renderDeferred(),this._dirtyPickingBuffer=!0}renderPickingFramebuffer(){!this._dirtyPickingBuffer||(this._pickingContext.renderDeferred(),this._dirtyPickingBuffer=!1)}getSearchableViews(){const e=[];return this.viewRoot.visit(n=>{n instanceof Ke&&n.getAccessor("search")&&e.push(n)}),e}getNamedScaleResolutions(){const e=new Map;return this.viewRoot.visit(n=>{for(const r of Object.values(n.resolutions.scale))r.name&&e.set(r.name,r)}),e}}function cE(t,e){const n=document.createElement("div");n.className="message-box";const r=document.createElement("div");r.textContent=e,n.appendChild(r),t.appendChild(n)}var lE="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSI+PHBhdGggZD0iTTQuNyAyMS4ycy40IDIuMyAxLjMgMy42QzcgMjYgOS44IDI4IDkuOCAyOHMzLjQtMi42IDYuNC04LjVjMCAwIDEgLjEgMS45LS40LjktLjYuOC0uNCAxLTEuMiAwIDAgMi45LjUgNi42IDAgMi4xLS4zIDQuMy0xIDYuMi0yLjUgMCAwLTEuMS0xLjctMi41LTUuMS0uNS0xLjMtMi0xLjgtNC42LTQuNmwtOC4yIDguNi0xMS45IDYuOXoiIGZpbGwtb3BhY2l0eT0iLjEiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSIjN2ZiYmRkIi8+PHBhdGggZD0iTTEyLjQgMTUuNWMtLjctLjUtMi40LS44LTQuNC0uNC0yIC40LTQgMS4zLTQuOCAxLjgtLjUuMy0xLjIgMS0xLjIgMS40IDAgLjcuMyAxLjguOCAyLjQuMy4zLjcuNSAxLjQuNi44IDAgMi41LTEuNCAzLjUtMiAxLS42IDEuNi0uOCAyLjctMS4ybC0yLjkgMi40Yy0xLjMgMS4yLTIuMiAxLjUtMi40IDIuMyAwIC41IDAgMS40LjUgMS44LjQuNS42LjggMS42LjguNiAwIDEgMCAyLjYtMS41LjktLjkgMi4zLTMgMi43LTMuNy42LTEuMSAxLTIuMi43LTMtLjItMS0uNC0xLjQtLjgtMS43ek0xNy40IDE0LjJjLS4zLS41LS45LTEuMi0uMi0yLjVsMS45LTNjLjUtLjggMi0yLjMgMi42LTIuNi42LS40IDEuNS0uNiAyLS4yLjYuNCAxIDEgMS4zIDEuNS40LjYuNyAxLjMuMiAyLS43IDEtMS42LjktMi44IDEuNy0xLjIuOC0xLjkgMS4yLTIuNSAxLjlsMy44LTEuOGMxLjMtLjYgMi43LTEuMSAzLjQtLjcuOC41LjguNyAxIDEuNC4zIDEtLjIgMS45LS44IDIuNC0uNS42LTEuNS45LTIuNiAxLjItMS40LjQtNC41IDEtNS44LjUtMS4zLS41LTEuMy0xLjQtMS41LTEuOHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iLjUiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0iIzdmYmJkZCIvPjxwYXRoIGQ9Ik0xMy44IDE1LjNjLjkuOC42IDIgMS40IDEuOCAxLS4yIDEuNC0uOCAxLjMtMS41IDAtLjcgMC0uOC0uNC0xLjYtLjMtLjctMS0xLjEtMi0uNS0uNy41LTEuNCAxLjMtMS40IDEuM3MuMi0uMyAxLjEuNXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9Ii41Ii8+PC9zdmc+";async function fE(t,e,n={}){var s,o,a;let r;if(W(t)){if(r=document.querySelector(t),!r)throw new Error(`No such element: ${t}`)}else if(t instanceof HTMLElement)r=t;else throw new Error(`Invalid element: ${t}`);let i;try{const u=Ie(e)?e:await oh(e);if((s=u.baseUrl)!=null||(u.baseUrl=""),(o=u.width)!=null||(u.width="container"),(a=u.padding)!=null||(u.padding=10),r==document.body){const c=document.createElement("div");c.style.position="fixed",c.style.inset="0",c.style.overflow="hidden",r.appendChild(c),r=c}i=new sh(r,u,n),hE(i,n),await i.launch()}catch(u){r.innerText=u.toString(),console.error(u)}return{finalize(){for(i.destroy();r.firstChild;)r.firstChild.remove()},addEventListener(u,c){const f=i._eventListeners;let l=f.get(u);l||(l=new Set,f.set(u,l)),l.add(c)},removeEventListener(u,c){var l;(l=i._eventListeners.get(u))==null||l.delete(c)},getScaleResolutionByName(u){return i.getNamedScaleResolutions().get(u)}}}function hE(t,e){e.namedDataProvider&&t.registerNamedDataProvider(e.namedDataProvider)}async function oh(t){let e;try{e=JSON.parse(await ri().load(t))}catch(n){throw new Error(`Could not load or parse configuration: ${t}, reason: ${n.message}`)}if(!e.baseUrl){const n=t.match(/^[^?#]*\//);e.baseUrl=n&&n[0]||"./"}return e}X.GenomeSpy=sh,X.embed=fE,X.html=_e,X.icon=lE,X.loadSpec=oh,Object.defineProperties(X,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|