@footgun/cobalt 0.10.0 → 0.11.0
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/CHANGELOG.md +6 -0
- package/bundle.js +117 -91
- package/examples/03-tiles/index.html +3 -3
- package/examples/04-overlay/index.html +2 -102
- package/examples/06-displacement/index.html +2 -2
- package/examples/08-light/index.html +10 -70
- package/package.json +1 -1
- package/src/cobalt.js +3 -3
- package/src/create-texture.js +13 -4
- package/src/fb-texture/fb-texture.js +1 -0
- package/src/light/light.js +62 -500
- package/src/light/lights-buffer.js +59 -55
- package/src/light/lights-renderer.js +230 -0
- package/src/light/public-api.js +4 -3
- package/src/light/texture/lights-texture-initializer.js +175 -0
- package/src/light/texture/lights-texture-mask.js +167 -187
- package/src/light/texture/lights-texture.js +85 -0
- package/src/light/viewport.js +40 -0
- package/src/sprite/sprite.js +2 -2
- package/src/spritesheet/spritesheet.js +17 -14
- package/src/{tile-hdr → tile}/tile.js +1 -1
- /package/src/{tile-hdr → tile}/atlas.js +0 -0
- /package/src/{tile-hdr → tile}/tile.wgsl +0 -0
package/bundle.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Js=Object.create;var sn=Object.defineProperty;var js=Object.getOwnPropertyDescriptor;var t0=Object.getOwnPropertyNames;var e0=Object.getPrototypeOf,r0=Object.prototype.hasOwnProperty;var xt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),un=(t,e)=>{for(var n in e)sn(t,n,{get:e[n],enumerable:!0})},n0=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of t0(e))!r0.call(t,i)&&i!==n&&sn(t,i,{get:()=>e[i],enumerable:!(r=js(e,i))||r.enumerable});return t};var hi=(t,e,n)=>(n=t!=null?Js(e0(t)):{},n0(e||!t||!t.__esModule?sn(n,"default",{value:t,enumerable:!0}):n,t));var je=xt((zl,Xi)=>{"use strict";function O0(t,e,n,r,i){for(var o=i+1;r<=i;){var a=r+i>>>1,f=t[a],h=n!==void 0?n(f,e):f-e;h>=0?(o=a,i=a-1):r=a+1}return o}function q0(t,e,n,r,i){for(var o=i+1;r<=i;){var a=r+i>>>1,f=t[a],h=n!==void 0?n(f,e):f-e;h>0?(o=a,i=a-1):r=a+1}return o}function N0(t,e,n,r,i){for(var o=r-1;r<=i;){var a=r+i>>>1,f=t[a],h=n!==void 0?n(f,e):f-e;h<0?(o=a,r=a+1):i=a-1}return o}function V0(t,e,n,r,i){for(var o=r-1;r<=i;){var a=r+i>>>1,f=t[a],h=n!==void 0?n(f,e):f-e;h<=0?(o=a,r=a+1):i=a-1}return o}function k0(t,e,n,r,i){for(;r<=i;){var o=r+i>>>1,a=t[o],f=n!==void 0?n(a,e):a-e;if(f===0)return o;f<=0?r=o+1:i=o-1}return-1}function Je(t,e,n,r,i,o){return typeof n=="function"?o(t,e,n,r===void 0?0:r|0,i===void 0?t.length-1:i|0):o(t,e,void 0,n===void 0?0:n|0,r===void 0?t.length-1:r|0)}Xi.exports={ge:function(t,e,n,r,i){return Je(t,e,n,r,i,O0)},gt:function(t,e,n,r,i){return Je(t,e,n,r,i,q0)},lt:function(t,e,n,r,i){return Je(t,e,n,r,i,N0)},le:function(t,e,n,r,i){return Je(t,e,n,r,i,V0)},eq:function(t,e,n,r,i){return Je(t,e,n,r,i,k0)}}});var xr=xt((Il,Zi)=>{"use strict";Zi.exports=C0;var Hi=+(Math.pow(2,27)+1);function C0(t,e,n){var r=t*e,i=Hi*t,o=i-t,a=i-o,f=t-a,h=Hi*e,v=h-e,d=h-v,D=e-d,C=r-a*d,k=C-f*d,R=k-a*D,q=f*D-R;return n?(n[0]=q,n[1]=r,n):[q,r]}});var gn=xt((El,$i)=>{"use strict";$i.exports=Y0;function m0(t,e){var n=t+e,r=n-t,i=n-r,o=e-r,a=t-i,f=a+o;return f?[f,n]:[n]}function Y0(t,e){var n=t.length|0,r=e.length|0;if(n===1&&r===1)return m0(t[0],e[0]);var i=n+r,o=new Array(i),a=0,f=0,h=0,v=Math.abs,d=t[f],D=v(d),C=e[h],k=v(C),R,q;D<k?(q=d,f+=1,f<n&&(d=t[f],D=v(d))):(q=C,h+=1,h<r&&(C=e[h],k=v(C))),f<n&&D<k||h>=r?(R=d,f+=1,f<n&&(d=t[f],D=v(d))):(R=C,h+=1,h<r&&(C=e[h],k=v(C)));for(var V=R+q,X=V-R,$=q-X,Q=$,j=V,H,W,at,tt,rt;f<n&&h<r;)D<k?(R=d,f+=1,f<n&&(d=t[f],D=v(d))):(R=C,h+=1,h<r&&(C=e[h],k=v(C))),q=Q,V=R+q,X=V-R,$=q-X,$&&(o[a++]=$),H=j+V,W=H-j,at=H-W,tt=V-W,rt=j-at,Q=rt+tt,j=H;for(;f<n;)R=d,q=Q,V=R+q,X=V-R,$=q-X,$&&(o[a++]=$),H=j+V,W=H-j,at=H-W,tt=V-W,rt=j-at,Q=rt+tt,j=H,f+=1,f<n&&(d=t[f]);for(;h<r;)R=C,q=Q,V=R+q,X=V-R,$=q-X,$&&(o[a++]=$),H=j+V,W=H-j,at=H-W,tt=V-W,rt=j-at,Q=rt+tt,j=H,h+=1,h<r&&(C=e[h]);return Q&&(o[a++]=Q),j&&(o[a++]=j),a||(o[a++]=0),o.length=a,o}});var Ki=xt((Gl,Wi)=>{"use strict";Wi.exports=X0;function X0(t,e,n){var r=t+e,i=r-t,o=r-i,a=e-i,f=t-o;return n?(n[0]=f+a,n[1]=r,n):[f+a,r]}});var wn=xt((Ll,Qi)=>{"use strict";var dn=xr(),H0=Ki();Qi.exports=Z0;function Z0(t,e){var n=t.length;if(n===1){var r=dn(t[0],e);return r[0]?r:[r[1]]}var i=new Array(2*n),o=[.1,.1],a=[.1,.1],f=0;dn(t[0],e,o),o[0]&&(i[f++]=o[0]);for(var h=1;h<n;++h){dn(t[h],e,a);var v=o[1];H0(v,a[0],o),o[0]&&(i[f++]=o[0]);var d=a[1],D=o[1],C=d+D,k=C-d,R=D-k;o[1]=C,R&&(i[f++]=R)}return o[1]&&(i[f++]=o[1]),f===0&&(i[f++]=0),i.length=f,i}});var xn=xt((Rl,Ji)=>{"use strict";Ji.exports=W0;function $0(t,e){var n=t+e,r=n-t,i=n-r,o=e-r,a=t-i,f=a+o;return f?[f,n]:[n]}function W0(t,e){var n=t.length|0,r=e.length|0;if(n===1&&r===1)return $0(t[0],-e[0]);var i=n+r,o=new Array(i),a=0,f=0,h=0,v=Math.abs,d=t[f],D=v(d),C=-e[h],k=v(C),R,q;D<k?(q=d,f+=1,f<n&&(d=t[f],D=v(d))):(q=C,h+=1,h<r&&(C=-e[h],k=v(C))),f<n&&D<k||h>=r?(R=d,f+=1,f<n&&(d=t[f],D=v(d))):(R=C,h+=1,h<r&&(C=-e[h],k=v(C)));for(var V=R+q,X=V-R,$=q-X,Q=$,j=V,H,W,at,tt,rt;f<n&&h<r;)D<k?(R=d,f+=1,f<n&&(d=t[f],D=v(d))):(R=C,h+=1,h<r&&(C=-e[h],k=v(C))),q=Q,V=R+q,X=V-R,$=q-X,$&&(o[a++]=$),H=j+V,W=H-j,at=H-W,tt=V-W,rt=j-at,Q=rt+tt,j=H;for(;f<n;)R=d,q=Q,V=R+q,X=V-R,$=q-X,$&&(o[a++]=$),H=j+V,W=H-j,at=H-W,tt=V-W,rt=j-at,Q=rt+tt,j=H,f+=1,f<n&&(d=t[f]);for(;h<r;)R=C,q=Q,V=R+q,X=V-R,$=q-X,$&&(o[a++]=$),H=j+V,W=H-j,at=H-W,tt=V-W,rt=j-at,Q=rt+tt,j=H,h+=1,h<r&&(C=-e[h]);return Q&&(o[a++]=Q),j&&(o[a++]=j),a||(o[a++]=0),o.length=a,o}});var yn=xt((Ol,Mn)=>{"use strict";var K0=xr(),Q0=gn(),J0=wn(),j0=xn(),ji=5,Mr=11102230246251565e-32,tu=(3+16*Mr)*Mr,eu=(7+56*Mr)*Mr;function ru(t,e,n,r){return function(o,a,f){var h=t(t(e(a[1],f[0]),e(-f[1],a[0])),t(e(o[1],a[0]),e(-a[1],o[0]))),v=t(e(o[1],f[0]),e(-f[1],o[0])),d=r(h,v);return d[d.length-1]}}function nu(t,e,n,r){return function(o,a,f,h){var v=t(t(n(t(e(f[1],h[0]),e(-h[1],f[0])),a[2]),t(n(t(e(a[1],h[0]),e(-h[1],a[0])),-f[2]),n(t(e(a[1],f[0]),e(-f[1],a[0])),h[2]))),t(n(t(e(a[1],h[0]),e(-h[1],a[0])),o[2]),t(n(t(e(o[1],h[0]),e(-h[1],o[0])),-a[2]),n(t(e(o[1],a[0]),e(-a[1],o[0])),h[2])))),d=t(t(n(t(e(f[1],h[0]),e(-h[1],f[0])),o[2]),t(n(t(e(o[1],h[0]),e(-h[1],o[0])),-f[2]),n(t(e(o[1],f[0]),e(-f[1],o[0])),h[2]))),t(n(t(e(a[1],f[0]),e(-f[1],a[0])),o[2]),t(n(t(e(o[1],f[0]),e(-f[1],o[0])),-a[2]),n(t(e(o[1],a[0]),e(-a[1],o[0])),f[2])))),D=r(v,d);return D[D.length-1]}}function iu(t,e,n,r){return function(o,a,f,h,v){var d=t(t(t(n(t(n(t(e(h[1],v[0]),e(-v[1],h[0])),f[2]),t(n(t(e(f[1],v[0]),e(-v[1],f[0])),-h[2]),n(t(e(f[1],h[0]),e(-h[1],f[0])),v[2]))),a[3]),t(n(t(n(t(e(h[1],v[0]),e(-v[1],h[0])),a[2]),t(n(t(e(a[1],v[0]),e(-v[1],a[0])),-h[2]),n(t(e(a[1],h[0]),e(-h[1],a[0])),v[2]))),-f[3]),n(t(n(t(e(f[1],v[0]),e(-v[1],f[0])),a[2]),t(n(t(e(a[1],v[0]),e(-v[1],a[0])),-f[2]),n(t(e(a[1],f[0]),e(-f[1],a[0])),v[2]))),h[3]))),t(n(t(n(t(e(f[1],h[0]),e(-h[1],f[0])),a[2]),t(n(t(e(a[1],h[0]),e(-h[1],a[0])),-f[2]),n(t(e(a[1],f[0]),e(-f[1],a[0])),h[2]))),-v[3]),t(n(t(n(t(e(h[1],v[0]),e(-v[1],h[0])),a[2]),t(n(t(e(a[1],v[0]),e(-v[1],a[0])),-h[2]),n(t(e(a[1],h[0]),e(-h[1],a[0])),v[2]))),o[3]),n(t(n(t(e(h[1],v[0]),e(-v[1],h[0])),o[2]),t(n(t(e(o[1],v[0]),e(-v[1],o[0])),-h[2]),n(t(e(o[1],h[0]),e(-h[1],o[0])),v[2]))),-a[3])))),t(t(n(t(n(t(e(a[1],v[0]),e(-v[1],a[0])),o[2]),t(n(t(e(o[1],v[0]),e(-v[1],o[0])),-a[2]),n(t(e(o[1],a[0]),e(-a[1],o[0])),v[2]))),h[3]),t(n(t(n(t(e(a[1],h[0]),e(-h[1],a[0])),o[2]),t(n(t(e(o[1],h[0]),e(-h[1],o[0])),-a[2]),n(t(e(o[1],a[0]),e(-a[1],o[0])),h[2]))),-v[3]),n(t(n(t(e(f[1],h[0]),e(-h[1],f[0])),a[2]),t(n(t(e(a[1],h[0]),e(-h[1],a[0])),-f[2]),n(t(e(a[1],f[0]),e(-f[1],a[0])),h[2]))),o[3]))),t(n(t(n(t(e(f[1],h[0]),e(-h[1],f[0])),o[2]),t(n(t(e(o[1],h[0]),e(-h[1],o[0])),-f[2]),n(t(e(o[1],f[0]),e(-f[1],o[0])),h[2]))),-a[3]),t(n(t(n(t(e(a[1],h[0]),e(-h[1],a[0])),o[2]),t(n(t(e(o[1],h[0]),e(-h[1],o[0])),-a[2]),n(t(e(o[1],a[0]),e(-a[1],o[0])),h[2]))),f[3]),n(t(n(t(e(a[1],f[0]),e(-f[1],a[0])),o[2]),t(n(t(e(o[1],f[0]),e(-f[1],o[0])),-a[2]),n(t(e(o[1],a[0]),e(-a[1],o[0])),f[2]))),-h[3]))))),D=t(t(t(n(t(n(t(e(h[1],v[0]),e(-v[1],h[0])),f[2]),t(n(t(e(f[1],v[0]),e(-v[1],f[0])),-h[2]),n(t(e(f[1],h[0]),e(-h[1],f[0])),v[2]))),o[3]),n(t(n(t(e(h[1],v[0]),e(-v[1],h[0])),o[2]),t(n(t(e(o[1],v[0]),e(-v[1],o[0])),-h[2]),n(t(e(o[1],h[0]),e(-h[1],o[0])),v[2]))),-f[3])),t(n(t(n(t(e(f[1],v[0]),e(-v[1],f[0])),o[2]),t(n(t(e(o[1],v[0]),e(-v[1],o[0])),-f[2]),n(t(e(o[1],f[0]),e(-f[1],o[0])),v[2]))),h[3]),n(t(n(t(e(f[1],h[0]),e(-h[1],f[0])),o[2]),t(n(t(e(o[1],h[0]),e(-h[1],o[0])),-f[2]),n(t(e(o[1],f[0]),e(-f[1],o[0])),h[2]))),-v[3]))),t(t(n(t(n(t(e(f[1],v[0]),e(-v[1],f[0])),a[2]),t(n(t(e(a[1],v[0]),e(-v[1],a[0])),-f[2]),n(t(e(a[1],f[0]),e(-f[1],a[0])),v[2]))),o[3]),n(t(n(t(e(f[1],v[0]),e(-v[1],f[0])),o[2]),t(n(t(e(o[1],v[0]),e(-v[1],o[0])),-f[2]),n(t(e(o[1],f[0]),e(-f[1],o[0])),v[2]))),-a[3])),t(n(t(n(t(e(a[1],v[0]),e(-v[1],a[0])),o[2]),t(n(t(e(o[1],v[0]),e(-v[1],o[0])),-a[2]),n(t(e(o[1],a[0]),e(-a[1],o[0])),v[2]))),f[3]),n(t(n(t(e(a[1],f[0]),e(-f[1],a[0])),o[2]),t(n(t(e(o[1],f[0]),e(-f[1],o[0])),-a[2]),n(t(e(o[1],a[0]),e(-a[1],o[0])),f[2]))),-v[3])))),C=r(d,D);return C[C.length-1]}}function yr(t){var e=t===3?ru:t===4?nu:iu;return e(Q0,K0,J0,j0)}var ou=yr(3),au=yr(4),De=[function(){return 0},function(){return 0},function(e,n){return n[0]-e[0]},function(e,n,r){var i=(e[1]-r[1])*(n[0]-r[0]),o=(e[0]-r[0])*(n[1]-r[1]),a=i-o,f;if(i>0){if(o<=0)return a;f=i+o}else if(i<0){if(o>=0)return a;f=-(i+o)}else return a;var h=tu*f;return a>=h||a<=-h?a:ou(e,n,r)},function(e,n,r,i){var o=e[0]-i[0],a=n[0]-i[0],f=r[0]-i[0],h=e[1]-i[1],v=n[1]-i[1],d=r[1]-i[1],D=e[2]-i[2],C=n[2]-i[2],k=r[2]-i[2],R=a*d,q=f*v,V=f*h,X=o*d,$=o*v,Q=a*h,j=D*(R-q)+C*(V-X)+k*($-Q),H=(Math.abs(R)+Math.abs(q))*Math.abs(D)+(Math.abs(V)+Math.abs(X))*Math.abs(C)+(Math.abs($)+Math.abs(Q))*Math.abs(k),W=eu*H;return j>W||-j>W?j:au(e,n,r,i)}];function su(t){var e=De[t.length];return e||(e=De[t.length]=yr(t.length)),e.apply(void 0,t)}function uu(t,e,n,r,i,o,a){return function(h,v,d,D,C){switch(arguments.length){case 0:case 1:return 0;case 2:return r(h,v);case 3:return i(h,v,d);case 4:return o(h,v,d,D);case 5:return a(h,v,d,D,C)}for(var k=new Array(arguments.length),R=0;R<arguments.length;++R)k[R]=arguments[R];return t(k)}}function fu(){for(;De.length<=ji;)De.push(yr(De.length));Mn.exports=uu.apply(void 0,[su].concat(De));for(var t=0;t<=ji;++t)Mn.exports[t]=De[t]}fu()});var oo=xt((ql,io)=>{"use strict";var _r=je(),_e=yn()[3],bn=0,to=1,_n=2;io.exports=pu;function ro(t,e,n,r,i){this.a=t,this.b=e,this.idx=n,this.lowerIds=r,this.upperIds=i}function tr(t,e,n,r){this.a=t,this.b=e,this.type=n,this.idx=r}function cu(t,e){var n=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return n||t.type!==bn&&(n=_e(t.a,t.b,e.b),n)?n:t.idx-e.idx}function eo(t,e){return _e(t.a,t.b,e)}function lu(t,e,n,r,i){for(var o=_r.lt(e,r,eo),a=_r.gt(e,r,eo),f=o;f<a;++f){for(var h=e[f],v=h.lowerIds,D=v.length;D>1&&_e(n[v[D-2]],n[v[D-1]],r)>0;)t.push([v[D-1],v[D-2],i]),D-=1;v.length=D,v.push(i);for(var d=h.upperIds,D=d.length;D>1&&_e(n[d[D-2]],n[d[D-1]],r)<0;)t.push([d[D-2],d[D-1],i]),D-=1;d.length=D,d.push(i)}}function no(t,e){var n;return t.a[0]<e.a[0]?n=_e(t.a,t.b,e.a):n=_e(e.b,e.a,t.a),n||(e.b[0]<t.b[0]?n=_e(t.a,t.b,e.b):n=_e(e.b,e.a,t.b),n||t.idx-e.idx)}function hu(t,e,n){var r=_r.le(t,n,no),i=t[r],o=i.upperIds,a=o[o.length-1];i.upperIds=[a],t.splice(r+1,0,new ro(n.a,n.b,n.idx,[a],o))}function vu(t,e,n){var r=n.a;n.a=n.b,n.b=r;var i=_r.eq(t,n,no),o=t[i],a=t[i-1];a.upperIds=o.upperIds,t.splice(i,1)}function pu(t,e){for(var n=t.length,r=e.length,i=[],o=0;o<n;++o)i.push(new tr(t[o],null,bn,o));for(var o=0;o<r;++o){var a=e[o],f=t[a[0]],h=t[a[1]];f[0]<h[0]?i.push(new tr(f,h,_n,o),new tr(h,f,to,o)):f[0]>h[0]&&i.push(new tr(h,f,_n,o),new tr(f,h,to,o))}i.sort(cu);for(var v=i[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),d=[new ro([v,1],[v,0],-1,[],[],[],[])],D=[],o=0,C=i.length;o<C;++o){var k=i[o],R=k.type;R===bn?lu(D,d,t,k.a,k.idx):R===_n?hu(d,t,k):vu(d,t,k)}return D}});var uo=xt((Nl,so)=>{"use strict";var gu=je();so.exports=du;function ao(t,e){this.stars=t,this.edges=e}var Fe=ao.prototype;function Sn(t,e,n){for(var r=1,i=t.length;r<i;r+=2)if(t[r-1]===e&&t[r]===n){t[r-1]=t[i-2],t[r]=t[i-1],t.length=i-2;return}}Fe.isConstraint=(function(){var t=[0,0];function e(n,r){return n[0]-r[0]||n[1]-r[1]}return function(n,r){return t[0]=Math.min(n,r),t[1]=Math.max(n,r),gu.eq(this.edges,t,e)>=0}})();Fe.removeTriangle=function(t,e,n){var r=this.stars;Sn(r[t],e,n),Sn(r[e],n,t),Sn(r[n],t,e)};Fe.addTriangle=function(t,e,n){var r=this.stars;r[t].push(e,n),r[e].push(n,t),r[n].push(t,e)};Fe.opposite=function(t,e){for(var n=this.stars[e],r=1,i=n.length;r<i;r+=2)if(n[r]===t)return n[r-1];return-1};Fe.flip=function(t,e){var n=this.opposite(t,e),r=this.opposite(e,t);this.removeTriangle(t,e,n),this.removeTriangle(e,t,r),this.addTriangle(t,r,n),this.addTriangle(e,n,r)};Fe.edges=function(){for(var t=this.stars,e=[],n=0,r=t.length;n<r;++n)for(var i=t[n],o=0,a=i.length;o<a;o+=2)e.push([i[o],i[o+1]]);return e};Fe.cells=function(){for(var t=this.stars,e=[],n=0,r=t.length;n<r;++n)for(var i=t[n],o=0,a=i.length;o<a;o+=2){var f=i[o],h=i[o+1];n<Math.min(f,h)&&e.push([n,f,h])}return e};function du(t,e){for(var n=new Array(t),r=0;r<t;++r)n[r]=[];return new ao(n,e)}});var lo=xt((Vl,Tn)=>{"use strict";var wu=xr(),xu=gn(),Mu=xn(),yu=wn(),fo=6;function co(t){var e=t===3?Tu:t===4?Bu:t===5?Pu:Du;return e(xu,Mu,wu,yu)}function _u(){return 0}function bu(){return 0}function Su(){return 0}function Tu(t,e,n,r){function i(o,a,f){var h=n(o[0],o[0]),v=r(h,a[0]),d=r(h,f[0]),D=n(a[0],a[0]),C=r(D,o[0]),k=r(D,f[0]),R=n(f[0],f[0]),q=r(R,o[0]),V=r(R,a[0]),X=t(e(V,k),e(C,v)),$=e(q,d),Q=e(X,$);return Q[Q.length-1]}return i}function Bu(t,e,n,r){function i(o,a,f,h){var v=t(n(o[0],o[0]),n(o[1],o[1])),d=r(v,a[0]),D=r(v,f[0]),C=r(v,h[0]),k=t(n(a[0],a[0]),n(a[1],a[1])),R=r(k,o[0]),q=r(k,f[0]),V=r(k,h[0]),X=t(n(f[0],f[0]),n(f[1],f[1])),$=r(X,o[0]),Q=r(X,a[0]),j=r(X,h[0]),H=t(n(h[0],h[0]),n(h[1],h[1])),W=r(H,o[0]),at=r(H,a[0]),tt=r(H,f[0]),rt=t(t(r(e(tt,j),a[1]),t(r(e(at,V),-f[1]),r(e(Q,q),h[1]))),t(r(e(at,V),o[1]),t(r(e(W,C),-a[1]),r(e(R,d),h[1])))),F=t(t(r(e(tt,j),o[1]),t(r(e(W,C),-f[1]),r(e($,D),h[1]))),t(r(e(Q,q),o[1]),t(r(e($,D),-a[1]),r(e(R,d),f[1])))),s=e(rt,F);return s[s.length-1]}return i}function Pu(t,e,n,r){function i(o,a,f,h,v){var d=t(n(o[0],o[0]),t(n(o[1],o[1]),n(o[2],o[2]))),D=r(d,a[0]),C=r(d,f[0]),k=r(d,h[0]),R=r(d,v[0]),q=t(n(a[0],a[0]),t(n(a[1],a[1]),n(a[2],a[2]))),V=r(q,o[0]),X=r(q,f[0]),$=r(q,h[0]),Q=r(q,v[0]),j=t(n(f[0],f[0]),t(n(f[1],f[1]),n(f[2],f[2]))),H=r(j,o[0]),W=r(j,a[0]),at=r(j,h[0]),tt=r(j,v[0]),rt=t(n(h[0],h[0]),t(n(h[1],h[1]),n(h[2],h[2]))),F=r(rt,o[0]),s=r(rt,a[0]),p=r(rt,f[0]),b=r(rt,v[0]),y=t(n(v[0],v[0]),t(n(v[1],v[1]),n(v[2],v[2]))),T=r(y,o[0]),E=r(y,a[0]),O=r(y,f[0]),P=r(y,h[0]),l=t(t(t(r(t(r(e(P,b),f[1]),t(r(e(O,tt),-h[1]),r(e(p,at),v[1]))),a[2]),t(r(t(r(e(P,b),a[1]),t(r(e(E,Q),-h[1]),r(e(s,$),v[1]))),-f[2]),r(t(r(e(O,tt),a[1]),t(r(e(E,Q),-f[1]),r(e(W,X),v[1]))),h[2]))),t(r(t(r(e(p,at),a[1]),t(r(e(s,$),-f[1]),r(e(W,X),h[1]))),-v[2]),t(r(t(r(e(P,b),a[1]),t(r(e(E,Q),-h[1]),r(e(s,$),v[1]))),o[2]),r(t(r(e(P,b),o[1]),t(r(e(T,R),-h[1]),r(e(F,k),v[1]))),-a[2])))),t(t(r(t(r(e(E,Q),o[1]),t(r(e(T,R),-a[1]),r(e(V,D),v[1]))),h[2]),t(r(t(r(e(s,$),o[1]),t(r(e(F,k),-a[1]),r(e(V,D),h[1]))),-v[2]),r(t(r(e(p,at),a[1]),t(r(e(s,$),-f[1]),r(e(W,X),h[1]))),o[2]))),t(r(t(r(e(p,at),o[1]),t(r(e(F,k),-f[1]),r(e(H,C),h[1]))),-a[2]),t(r(t(r(e(s,$),o[1]),t(r(e(F,k),-a[1]),r(e(V,D),h[1]))),f[2]),r(t(r(e(W,X),o[1]),t(r(e(H,C),-a[1]),r(e(V,D),f[1]))),-h[2]))))),A=t(t(t(r(t(r(e(P,b),f[1]),t(r(e(O,tt),-h[1]),r(e(p,at),v[1]))),o[2]),r(t(r(e(P,b),o[1]),t(r(e(T,R),-h[1]),r(e(F,k),v[1]))),-f[2])),t(r(t(r(e(O,tt),o[1]),t(r(e(T,R),-f[1]),r(e(H,C),v[1]))),h[2]),r(t(r(e(p,at),o[1]),t(r(e(F,k),-f[1]),r(e(H,C),h[1]))),-v[2]))),t(t(r(t(r(e(O,tt),a[1]),t(r(e(E,Q),-f[1]),r(e(W,X),v[1]))),o[2]),r(t(r(e(O,tt),o[1]),t(r(e(T,R),-f[1]),r(e(H,C),v[1]))),-a[2])),t(r(t(r(e(E,Q),o[1]),t(r(e(T,R),-a[1]),r(e(V,D),v[1]))),f[2]),r(t(r(e(W,X),o[1]),t(r(e(H,C),-a[1]),r(e(V,D),f[1]))),-v[2])))),ot=e(l,A);return ot[ot.length-1]}return i}function Du(t,e,n,r){function i(o,a,f,h,v,d){var D=t(t(n(o[0],o[0]),n(o[1],o[1])),t(n(o[2],o[2]),n(o[3],o[3]))),C=r(D,a[0]),k=r(D,f[0]),R=r(D,h[0]),q=r(D,v[0]),V=r(D,d[0]),X=t(t(n(a[0],a[0]),n(a[1],a[1])),t(n(a[2],a[2]),n(a[3],a[3]))),$=r(X,o[0]),Q=r(X,f[0]),j=r(X,h[0]),H=r(X,v[0]),W=r(X,d[0]),at=t(t(n(f[0],f[0]),n(f[1],f[1])),t(n(f[2],f[2]),n(f[3],f[3]))),tt=r(at,o[0]),rt=r(at,a[0]),F=r(at,h[0]),s=r(at,v[0]),p=r(at,d[0]),b=t(t(n(h[0],h[0]),n(h[1],h[1])),t(n(h[2],h[2]),n(h[3],h[3]))),y=r(b,o[0]),T=r(b,a[0]),E=r(b,f[0]),O=r(b,v[0]),P=r(b,d[0]),l=t(t(n(v[0],v[0]),n(v[1],v[1])),t(n(v[2],v[2]),n(v[3],v[3]))),A=r(l,o[0]),ot=r(l,a[0]),st=r(l,f[0]),ut=r(l,h[0]),ft=r(l,d[0]),Mt=t(t(n(d[0],d[0]),n(d[1],d[1])),t(n(d[2],d[2]),n(d[3],d[3]))),vt=r(Mt,o[0]),Y=r(Mt,a[0]),K=r(Mt,f[0]),U=r(Mt,h[0]),c=r(Mt,v[0]),_=t(t(t(r(t(t(r(t(r(e(c,ft),h[1]),t(r(e(U,P),-v[1]),r(e(ut,O),d[1]))),f[2]),r(t(r(e(c,ft),f[1]),t(r(e(K,p),-v[1]),r(e(st,s),d[1]))),-h[2])),t(r(t(r(e(U,P),f[1]),t(r(e(K,p),-h[1]),r(e(E,F),d[1]))),v[2]),r(t(r(e(ut,O),f[1]),t(r(e(st,s),-h[1]),r(e(E,F),v[1]))),-d[2]))),a[3]),t(r(t(t(r(t(r(e(c,ft),h[1]),t(r(e(U,P),-v[1]),r(e(ut,O),d[1]))),a[2]),r(t(r(e(c,ft),a[1]),t(r(e(Y,W),-v[1]),r(e(ot,H),d[1]))),-h[2])),t(r(t(r(e(U,P),a[1]),t(r(e(Y,W),-h[1]),r(e(T,j),d[1]))),v[2]),r(t(r(e(ut,O),a[1]),t(r(e(ot,H),-h[1]),r(e(T,j),v[1]))),-d[2]))),-f[3]),r(t(t(r(t(r(e(c,ft),f[1]),t(r(e(K,p),-v[1]),r(e(st,s),d[1]))),a[2]),r(t(r(e(c,ft),a[1]),t(r(e(Y,W),-v[1]),r(e(ot,H),d[1]))),-f[2])),t(r(t(r(e(K,p),a[1]),t(r(e(Y,W),-f[1]),r(e(rt,Q),d[1]))),v[2]),r(t(r(e(st,s),a[1]),t(r(e(ot,H),-f[1]),r(e(rt,Q),v[1]))),-d[2]))),h[3]))),t(t(r(t(t(r(t(r(e(U,P),f[1]),t(r(e(K,p),-h[1]),r(e(E,F),d[1]))),a[2]),r(t(r(e(U,P),a[1]),t(r(e(Y,W),-h[1]),r(e(T,j),d[1]))),-f[2])),t(r(t(r(e(K,p),a[1]),t(r(e(Y,W),-f[1]),r(e(rt,Q),d[1]))),h[2]),r(t(r(e(E,F),a[1]),t(r(e(T,j),-f[1]),r(e(rt,Q),h[1]))),-d[2]))),-v[3]),r(t(t(r(t(r(e(ut,O),f[1]),t(r(e(st,s),-h[1]),r(e(E,F),v[1]))),a[2]),r(t(r(e(ut,O),a[1]),t(r(e(ot,H),-h[1]),r(e(T,j),v[1]))),-f[2])),t(r(t(r(e(st,s),a[1]),t(r(e(ot,H),-f[1]),r(e(rt,Q),v[1]))),h[2]),r(t(r(e(E,F),a[1]),t(r(e(T,j),-f[1]),r(e(rt,Q),h[1]))),-v[2]))),d[3])),t(r(t(t(r(t(r(e(c,ft),h[1]),t(r(e(U,P),-v[1]),r(e(ut,O),d[1]))),a[2]),r(t(r(e(c,ft),a[1]),t(r(e(Y,W),-v[1]),r(e(ot,H),d[1]))),-h[2])),t(r(t(r(e(U,P),a[1]),t(r(e(Y,W),-h[1]),r(e(T,j),d[1]))),v[2]),r(t(r(e(ut,O),a[1]),t(r(e(ot,H),-h[1]),r(e(T,j),v[1]))),-d[2]))),o[3]),r(t(t(r(t(r(e(c,ft),h[1]),t(r(e(U,P),-v[1]),r(e(ut,O),d[1]))),o[2]),r(t(r(e(c,ft),o[1]),t(r(e(vt,V),-v[1]),r(e(A,q),d[1]))),-h[2])),t(r(t(r(e(U,P),o[1]),t(r(e(vt,V),-h[1]),r(e(y,R),d[1]))),v[2]),r(t(r(e(ut,O),o[1]),t(r(e(A,q),-h[1]),r(e(y,R),v[1]))),-d[2]))),-a[3])))),t(t(t(r(t(t(r(t(r(e(c,ft),a[1]),t(r(e(Y,W),-v[1]),r(e(ot,H),d[1]))),o[2]),r(t(r(e(c,ft),o[1]),t(r(e(vt,V),-v[1]),r(e(A,q),d[1]))),-a[2])),t(r(t(r(e(Y,W),o[1]),t(r(e(vt,V),-a[1]),r(e($,C),d[1]))),v[2]),r(t(r(e(ot,H),o[1]),t(r(e(A,q),-a[1]),r(e($,C),v[1]))),-d[2]))),h[3]),r(t(t(r(t(r(e(U,P),a[1]),t(r(e(Y,W),-h[1]),r(e(T,j),d[1]))),o[2]),r(t(r(e(U,P),o[1]),t(r(e(vt,V),-h[1]),r(e(y,R),d[1]))),-a[2])),t(r(t(r(e(Y,W),o[1]),t(r(e(vt,V),-a[1]),r(e($,C),d[1]))),h[2]),r(t(r(e(T,j),o[1]),t(r(e(y,R),-a[1]),r(e($,C),h[1]))),-d[2]))),-v[3])),t(r(t(t(r(t(r(e(ut,O),a[1]),t(r(e(ot,H),-h[1]),r(e(T,j),v[1]))),o[2]),r(t(r(e(ut,O),o[1]),t(r(e(A,q),-h[1]),r(e(y,R),v[1]))),-a[2])),t(r(t(r(e(ot,H),o[1]),t(r(e(A,q),-a[1]),r(e($,C),v[1]))),h[2]),r(t(r(e(T,j),o[1]),t(r(e(y,R),-a[1]),r(e($,C),h[1]))),-v[2]))),d[3]),r(t(t(r(t(r(e(U,P),f[1]),t(r(e(K,p),-h[1]),r(e(E,F),d[1]))),a[2]),r(t(r(e(U,P),a[1]),t(r(e(Y,W),-h[1]),r(e(T,j),d[1]))),-f[2])),t(r(t(r(e(K,p),a[1]),t(r(e(Y,W),-f[1]),r(e(rt,Q),d[1]))),h[2]),r(t(r(e(E,F),a[1]),t(r(e(T,j),-f[1]),r(e(rt,Q),h[1]))),-d[2]))),o[3]))),t(t(r(t(t(r(t(r(e(U,P),f[1]),t(r(e(K,p),-h[1]),r(e(E,F),d[1]))),o[2]),r(t(r(e(U,P),o[1]),t(r(e(vt,V),-h[1]),r(e(y,R),d[1]))),-f[2])),t(r(t(r(e(K,p),o[1]),t(r(e(vt,V),-f[1]),r(e(tt,k),d[1]))),h[2]),r(t(r(e(E,F),o[1]),t(r(e(y,R),-f[1]),r(e(tt,k),h[1]))),-d[2]))),-a[3]),r(t(t(r(t(r(e(U,P),a[1]),t(r(e(Y,W),-h[1]),r(e(T,j),d[1]))),o[2]),r(t(r(e(U,P),o[1]),t(r(e(vt,V),-h[1]),r(e(y,R),d[1]))),-a[2])),t(r(t(r(e(Y,W),o[1]),t(r(e(vt,V),-a[1]),r(e($,C),d[1]))),h[2]),r(t(r(e(T,j),o[1]),t(r(e(y,R),-a[1]),r(e($,C),h[1]))),-d[2]))),f[3])),t(r(t(t(r(t(r(e(K,p),a[1]),t(r(e(Y,W),-f[1]),r(e(rt,Q),d[1]))),o[2]),r(t(r(e(K,p),o[1]),t(r(e(vt,V),-f[1]),r(e(tt,k),d[1]))),-a[2])),t(r(t(r(e(Y,W),o[1]),t(r(e(vt,V),-a[1]),r(e($,C),d[1]))),f[2]),r(t(r(e(rt,Q),o[1]),t(r(e(tt,k),-a[1]),r(e($,C),f[1]))),-d[2]))),-h[3]),r(t(t(r(t(r(e(E,F),a[1]),t(r(e(T,j),-f[1]),r(e(rt,Q),h[1]))),o[2]),r(t(r(e(E,F),o[1]),t(r(e(y,R),-f[1]),r(e(tt,k),h[1]))),-a[2])),t(r(t(r(e(T,j),o[1]),t(r(e(y,R),-a[1]),r(e($,C),h[1]))),f[2]),r(t(r(e(rt,Q),o[1]),t(r(e(tt,k),-a[1]),r(e($,C),f[1]))),-h[2]))),d[3]))))),w=t(t(t(r(t(t(r(t(r(e(c,ft),h[1]),t(r(e(U,P),-v[1]),r(e(ut,O),d[1]))),f[2]),r(t(r(e(c,ft),f[1]),t(r(e(K,p),-v[1]),r(e(st,s),d[1]))),-h[2])),t(r(t(r(e(U,P),f[1]),t(r(e(K,p),-h[1]),r(e(E,F),d[1]))),v[2]),r(t(r(e(ut,O),f[1]),t(r(e(st,s),-h[1]),r(e(E,F),v[1]))),-d[2]))),o[3]),t(r(t(t(r(t(r(e(c,ft),h[1]),t(r(e(U,P),-v[1]),r(e(ut,O),d[1]))),o[2]),r(t(r(e(c,ft),o[1]),t(r(e(vt,V),-v[1]),r(e(A,q),d[1]))),-h[2])),t(r(t(r(e(U,P),o[1]),t(r(e(vt,V),-h[1]),r(e(y,R),d[1]))),v[2]),r(t(r(e(ut,O),o[1]),t(r(e(A,q),-h[1]),r(e(y,R),v[1]))),-d[2]))),-f[3]),r(t(t(r(t(r(e(c,ft),f[1]),t(r(e(K,p),-v[1]),r(e(st,s),d[1]))),o[2]),r(t(r(e(c,ft),o[1]),t(r(e(vt,V),-v[1]),r(e(A,q),d[1]))),-f[2])),t(r(t(r(e(K,p),o[1]),t(r(e(vt,V),-f[1]),r(e(tt,k),d[1]))),v[2]),r(t(r(e(st,s),o[1]),t(r(e(A,q),-f[1]),r(e(tt,k),v[1]))),-d[2]))),h[3]))),t(t(r(t(t(r(t(r(e(U,P),f[1]),t(r(e(K,p),-h[1]),r(e(E,F),d[1]))),o[2]),r(t(r(e(U,P),o[1]),t(r(e(vt,V),-h[1]),r(e(y,R),d[1]))),-f[2])),t(r(t(r(e(K,p),o[1]),t(r(e(vt,V),-f[1]),r(e(tt,k),d[1]))),h[2]),r(t(r(e(E,F),o[1]),t(r(e(y,R),-f[1]),r(e(tt,k),h[1]))),-d[2]))),-v[3]),r(t(t(r(t(r(e(ut,O),f[1]),t(r(e(st,s),-h[1]),r(e(E,F),v[1]))),o[2]),r(t(r(e(ut,O),o[1]),t(r(e(A,q),-h[1]),r(e(y,R),v[1]))),-f[2])),t(r(t(r(e(st,s),o[1]),t(r(e(A,q),-f[1]),r(e(tt,k),v[1]))),h[2]),r(t(r(e(E,F),o[1]),t(r(e(y,R),-f[1]),r(e(tt,k),h[1]))),-v[2]))),d[3])),t(r(t(t(r(t(r(e(c,ft),f[1]),t(r(e(K,p),-v[1]),r(e(st,s),d[1]))),a[2]),r(t(r(e(c,ft),a[1]),t(r(e(Y,W),-v[1]),r(e(ot,H),d[1]))),-f[2])),t(r(t(r(e(K,p),a[1]),t(r(e(Y,W),-f[1]),r(e(rt,Q),d[1]))),v[2]),r(t(r(e(st,s),a[1]),t(r(e(ot,H),-f[1]),r(e(rt,Q),v[1]))),-d[2]))),o[3]),r(t(t(r(t(r(e(c,ft),f[1]),t(r(e(K,p),-v[1]),r(e(st,s),d[1]))),o[2]),r(t(r(e(c,ft),o[1]),t(r(e(vt,V),-v[1]),r(e(A,q),d[1]))),-f[2])),t(r(t(r(e(K,p),o[1]),t(r(e(vt,V),-f[1]),r(e(tt,k),d[1]))),v[2]),r(t(r(e(st,s),o[1]),t(r(e(A,q),-f[1]),r(e(tt,k),v[1]))),-d[2]))),-a[3])))),t(t(t(r(t(t(r(t(r(e(c,ft),a[1]),t(r(e(Y,W),-v[1]),r(e(ot,H),d[1]))),o[2]),r(t(r(e(c,ft),o[1]),t(r(e(vt,V),-v[1]),r(e(A,q),d[1]))),-a[2])),t(r(t(r(e(Y,W),o[1]),t(r(e(vt,V),-a[1]),r(e($,C),d[1]))),v[2]),r(t(r(e(ot,H),o[1]),t(r(e(A,q),-a[1]),r(e($,C),v[1]))),-d[2]))),f[3]),r(t(t(r(t(r(e(K,p),a[1]),t(r(e(Y,W),-f[1]),r(e(rt,Q),d[1]))),o[2]),r(t(r(e(K,p),o[1]),t(r(e(vt,V),-f[1]),r(e(tt,k),d[1]))),-a[2])),t(r(t(r(e(Y,W),o[1]),t(r(e(vt,V),-a[1]),r(e($,C),d[1]))),f[2]),r(t(r(e(rt,Q),o[1]),t(r(e(tt,k),-a[1]),r(e($,C),f[1]))),-d[2]))),-v[3])),t(r(t(t(r(t(r(e(st,s),a[1]),t(r(e(ot,H),-f[1]),r(e(rt,Q),v[1]))),o[2]),r(t(r(e(st,s),o[1]),t(r(e(A,q),-f[1]),r(e(tt,k),v[1]))),-a[2])),t(r(t(r(e(ot,H),o[1]),t(r(e(A,q),-a[1]),r(e($,C),v[1]))),f[2]),r(t(r(e(rt,Q),o[1]),t(r(e(tt,k),-a[1]),r(e($,C),f[1]))),-v[2]))),d[3]),r(t(t(r(t(r(e(ut,O),f[1]),t(r(e(st,s),-h[1]),r(e(E,F),v[1]))),a[2]),r(t(r(e(ut,O),a[1]),t(r(e(ot,H),-h[1]),r(e(T,j),v[1]))),-f[2])),t(r(t(r(e(st,s),a[1]),t(r(e(ot,H),-f[1]),r(e(rt,Q),v[1]))),h[2]),r(t(r(e(E,F),a[1]),t(r(e(T,j),-f[1]),r(e(rt,Q),h[1]))),-v[2]))),o[3]))),t(t(r(t(t(r(t(r(e(ut,O),f[1]),t(r(e(st,s),-h[1]),r(e(E,F),v[1]))),o[2]),r(t(r(e(ut,O),o[1]),t(r(e(A,q),-h[1]),r(e(y,R),v[1]))),-f[2])),t(r(t(r(e(st,s),o[1]),t(r(e(A,q),-f[1]),r(e(tt,k),v[1]))),h[2]),r(t(r(e(E,F),o[1]),t(r(e(y,R),-f[1]),r(e(tt,k),h[1]))),-v[2]))),-a[3]),r(t(t(r(t(r(e(ut,O),a[1]),t(r(e(ot,H),-h[1]),r(e(T,j),v[1]))),o[2]),r(t(r(e(ut,O),o[1]),t(r(e(A,q),-h[1]),r(e(y,R),v[1]))),-a[2])),t(r(t(r(e(ot,H),o[1]),t(r(e(A,q),-a[1]),r(e($,C),v[1]))),h[2]),r(t(r(e(T,j),o[1]),t(r(e(y,R),-a[1]),r(e($,C),h[1]))),-v[2]))),f[3])),t(r(t(t(r(t(r(e(st,s),a[1]),t(r(e(ot,H),-f[1]),r(e(rt,Q),v[1]))),o[2]),r(t(r(e(st,s),o[1]),t(r(e(A,q),-f[1]),r(e(tt,k),v[1]))),-a[2])),t(r(t(r(e(ot,H),o[1]),t(r(e(A,q),-a[1]),r(e($,C),v[1]))),f[2]),r(t(r(e(rt,Q),o[1]),t(r(e(tt,k),-a[1]),r(e($,C),f[1]))),-v[2]))),-h[3]),r(t(t(r(t(r(e(E,F),a[1]),t(r(e(T,j),-f[1]),r(e(rt,Q),h[1]))),o[2]),r(t(r(e(E,F),o[1]),t(r(e(y,R),-f[1]),r(e(tt,k),h[1]))),-a[2])),t(r(t(r(e(T,j),o[1]),t(r(e(y,R),-a[1]),r(e($,C),h[1]))),f[2]),r(t(r(e(rt,Q),o[1]),t(r(e(tt,k),-a[1]),r(e($,C),f[1]))),-h[2]))),v[3]))))),I=e(_,w);return I[I.length-1]}return i}var Ue=[_u,bu,Su];function Fu(t){var e=Ue[t.length];return e||(e=Ue[t.length]=co(t.length)),e.apply(void 0,t)}function Uu(t,e,n,r,i,o,a,f){function h(v,d,D,C,k,R){switch(arguments.length){case 0:case 1:return 0;case 2:return r(v,d);case 3:return i(v,d,D);case 4:return o(v,d,D,C);case 5:return a(v,d,D,C,k);case 6:return f(v,d,D,C,k,R)}for(var q=new Array(arguments.length),V=0;V<arguments.length;++V)q[V]=arguments[V];return t(q)}return h}function Au(){for(;Ue.length<=fo;)Ue.push(co(Ue.length));Tn.exports=Uu.apply(void 0,[Fu].concat(Ue));for(var t=0;t<=fo;++t)Tn.exports[t]=Ue[t]}Au()});var vo=xt((Cl,ho)=>{"use strict";var Bn=lo()[4],kl=je();ho.exports=zu;function br(t,e,n,r,i,o){var a=e.opposite(r,i);if(!(a<0)){if(i<r){var f=r;r=i,i=f,f=o,o=a,a=f}e.isConstraint(r,i)||Bn(t[r],t[i],t[o],t[a])<0&&n.push(r,i)}}function zu(t,e){for(var n=[],r=t.length,i=e.stars,o=0;o<r;++o)for(var a=i[o],f=1;f<a.length;f+=2){var h=a[f];if(!(h<o)&&!e.isConstraint(o,h)){for(var v=a[f-1],d=-1,D=1;D<a.length;D+=2)if(a[D-1]===h){d=a[D];break}d<0||Bn(t[o],t[h],t[v],t[d])<0&&n.push(o,h)}}for(;n.length>0;){for(var h=n.pop(),o=n.pop(),v=-1,d=-1,a=i[o],C=1;C<a.length;C+=2){var k=a[C-1],R=a[C];k===h?d=R:R===h&&(v=k)}v<0||d<0||Bn(t[o],t[h],t[v],t[d])>=0||(e.flip(o,h),br(t,e,n,v,o,d),br(t,e,n,o,d,v),br(t,e,n,d,h,v),br(t,e,n,h,v,d))}}});var xo=xt((ml,wo)=>{"use strict";var Iu=je();wo.exports=Ru;function po(t,e,n,r,i,o,a){this.cells=t,this.neighbor=e,this.flags=r,this.constraint=n,this.active=i,this.next=o,this.boundary=a}var Eu=po.prototype;function go(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}Eu.locate=(function(){var t=[0,0,0];return function(e,n,r){var i=e,o=n,a=r;return n<r?n<e&&(i=n,o=r,a=e):r<e&&(i=r,o=e,a=n),i<0?-1:(t[0]=i,t[1]=o,t[2]=a,Iu.eq(this.cells,t,go))}})();function Gu(t,e){for(var n=t.cells(),r=n.length,i=0;i<r;++i){var o=n[i],a=o[0],f=o[1],h=o[2];f<h?f<a&&(o[0]=f,o[1]=h,o[2]=a):h<a&&(o[0]=h,o[1]=a,o[2]=f)}n.sort(go);for(var v=new Array(r),i=0;i<v.length;++i)v[i]=0;var d=[],D=[],C=new Array(3*r),k=new Array(3*r),R=null;e&&(R=[]);for(var q=new po(n,C,k,v,d,D,R),i=0;i<r;++i)for(var o=n[i],V=0;V<3;++V){var a=o[V],f=o[(V+1)%3],X=C[3*i+V]=q.locate(f,a,t.opposite(f,a)),$=k[3*i+V]=t.isConstraint(a,f);X<0&&($?D.push(i):(d.push(i),v[i]=1),e&&R.push([f,a,-1]))}return q}function Lu(t,e,n){for(var r=0,i=0;i<t.length;++i)e[i]===n&&(t[r++]=t[i]);return t.length=r,t}function Ru(t,e,n){var r=Gu(t,n);if(e===0)return n?r.cells.concat(r.boundary):r.cells;for(var i=1,o=r.active,a=r.next,f=r.flags,h=r.cells,v=r.constraint,d=r.neighbor;o.length>0||a.length>0;){for(;o.length>0;){var D=o.pop();if(f[D]!==-i){f[D]=i;for(var C=h[D],k=0;k<3;++k){var R=d[3*D+k];R>=0&&f[R]===0&&(v[3*D+k]?a.push(R):(o.push(R),f[R]=i))}}}var q=a;a=o,o=q,a.length=0,i=-i}var V=Lu(h,f,e);return n?V.concat(r.boundary):V}});var yo=xt((Yl,Mo)=>{"use strict";var Ou=oo(),qu=uo(),Nu=vo(),Pn=xo();Mo.exports=mu;function Vu(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function ku(t,e){return t[0]-e[0]||t[1]-e[1]}function Cu(t){return t.map(Vu).sort(ku)}function Sr(t,e,n){return e in t?t[e]:n}function mu(t,e,n){Array.isArray(e)?(n=n||{},e=e||[]):(n=e||{},e=[]);var r=!!Sr(n,"delaunay",!0),i=!!Sr(n,"interior",!0),o=!!Sr(n,"exterior",!0),a=!!Sr(n,"infinity",!1);if(!i&&!o||t.length===0)return[];var f=Ou(t,e);if(r||i!==o||a){for(var h=qu(t.length,Cu(e)),v=0;v<f.length;++v){var d=f[v];h.addTriangle(d[0],d[1],d[2])}return r&&Nu(t,h),o?i?a?Pn(h,0,a):h.cells():Pn(h,1,a):Pn(h,-1)}else return f}});var So=xt((Xl,bo)=>{"use strict";"use restrict";bo.exports=_o;function _o(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}var Tr=_o.prototype;Object.defineProperty(Tr,"length",{get:function(){return this.roots.length}});Tr.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t};Tr.find=function(t){for(var e=t,n=this.roots;n[t]!==t;)t=n[t];for(;n[e]!==t;){var r=n[e];n[e]=t,e=r}return t};Tr.link=function(t,e){var n=this.find(t),r=this.find(e);if(n!==r){var i=this.ranks,o=this.roots,a=i[n],f=i[r];a<f?o[n]=r:f<a?o[r]=n:(o[r]=n,++i[n])}}});var rr=xt(mt=>{"use strict";"use restrict";var Dn=32;mt.INT_BITS=Dn;mt.INT_MAX=2147483647;mt.INT_MIN=-1<<Dn-1;mt.sign=function(t){return(t>0)-(t<0)};mt.abs=function(t){var e=t>>Dn-1;return(t^e)-e};mt.min=function(t,e){return e^(t^e)&-(t<e)};mt.max=function(t,e){return t^(t^e)&-(t<e)};mt.isPow2=function(t){return!(t&t-1)&&!!t};mt.log2=function(t){var e,n;return e=(t>65535)<<4,t>>>=e,n=(t>255)<<3,t>>>=n,e|=n,n=(t>15)<<2,t>>>=n,e|=n,n=(t>3)<<1,t>>>=n,e|=n,e|t>>1};mt.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0};mt.popCount=function(t){return t=t-(t>>>1&1431655765),t=(t&858993459)+(t>>>2&858993459),(t+(t>>>4)&252645135)*16843009>>>24};function To(t){var e=32;return t&=-t,t&&e--,t&65535&&(e-=16),t&16711935&&(e-=8),t&252645135&&(e-=4),t&858993459&&(e-=2),t&1431655765&&(e-=1),e}mt.countTrailingZeros=To;mt.nextPow2=function(t){return t+=t===0,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t+1};mt.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t-(t>>>1)};mt.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,t&=15,27030>>>t&1};var er=new Array(256);(function(t){for(var e=0;e<256;++e){var n=e,r=e,i=7;for(n>>>=1;n;n>>>=1)r<<=1,r|=n&1,--i;t[e]=r<<i&255}})(er);mt.reverse=function(t){return er[t&255]<<24|er[t>>>8&255]<<16|er[t>>>16&255]<<8|er[t>>>24&255]};mt.interleave2=function(t,e){return t&=65535,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e&=65535,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t|e<<1};mt.deinterleave2=function(t,e){return t=t>>>e&1431655765,t=(t|t>>>1)&858993459,t=(t|t>>>2)&252645135,t=(t|t>>>4)&16711935,t=(t|t>>>16)&65535,t<<16>>16};mt.interleave3=function(t,e,n){return t&=1023,t=(t|t<<16)&4278190335,t=(t|t<<8)&251719695,t=(t|t<<4)&3272356035,t=(t|t<<2)&1227133513,e&=1023,e=(e|e<<16)&4278190335,e=(e|e<<8)&251719695,e=(e|e<<4)&3272356035,e=(e|e<<2)&1227133513,t|=e<<1,n&=1023,n=(n|n<<16)&4278190335,n=(n|n<<8)&251719695,n=(n|n<<4)&3272356035,n=(n|n<<2)&1227133513,t|n<<2};mt.deinterleave3=function(t,e){return t=t>>>e&1227133513,t=(t|t>>>2)&3272356035,t=(t|t>>>4)&251719695,t=(t|t>>>8)&4278190335,t=(t|t>>>16)&1023,t<<22>>22};mt.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>To(t)+1}});var Do=xt((Zl,Po)=>{"use strict";function Bo(t,e,n){var r=t[n]|0;if(r<=0)return[];var i=new Array(r),o;if(n===t.length-1)for(o=0;o<r;++o)i[o]=e;else for(o=0;o<r;++o)i[o]=Bo(t,e,n+1);return i}function Yu(t,e){var n,r;for(n=new Array(t),r=0;r<t;++r)n[r]=e;return n}function Xu(t,e){switch(typeof e>"u"&&(e=0),typeof t){case"number":if(t>0)return Yu(t|0,e);break;case"object":if(typeof t.length=="number")return Bo(t,e,0);break}return[]}Po.exports=Xu});var Dr=xt(Et=>{"use strict";var Br=rr(),te=Do();globalThis.__TYPEDARRAY_POOL||(globalThis.__TYPEDARRAY_POOL={UINT8:te([32,0]),UINT16:te([32,0]),UINT32:te([32,0]),BIGUINT64:te([32,0]),INT8:te([32,0]),INT16:te([32,0]),INT32:te([32,0]),BIGINT64:te([32,0]),FLOAT:te([32,0]),DOUBLE:te([32,0]),DATA:te([32,0]),UINT8C:te([32,0])});var Hu=typeof Uint8ClampedArray<"u",Zu=typeof BigUint64Array<"u",$u=typeof BigInt64Array<"u",Qt=globalThis.__TYPEDARRAY_POOL;Qt.UINT8C||(Qt.UINT8C=te([32,0]));Qt.BIGUINT64||(Qt.BIGUINT64=te([32,0]));Qt.BIGINT64||(Qt.BIGINT64=te([32,0]));var Pr=Qt.DATA;Et.free=function(e){if(Object.prototype.toString.call(e)!=="[object ArrayBuffer]"&&(e=e.buffer),!!e){var n=e.length||e.byteLength,r=Br.log2(n)|0;Pr[r].push(e)}};function Fo(t){if(t){var e=t.length||t.byteLength,n=Br.log2(e);Pr[n].push(t)}}function Wu(t){Fo(t.buffer)}Et.freeUint8=Et.freeUint16=Et.freeUint32=Et.freeBigUint64=Et.freeInt8=Et.freeInt16=Et.freeInt32=Et.freeBigInt64=Et.freeFloat32=Et.freeFloat=Et.freeFloat64=Et.freeDouble=Et.freeUint8Clamped=Et.freeDataView=Wu;Et.freeArrayBuffer=Fo;Et.malloc=function(e,n){if(n===void 0||n==="arraybuffer")return ie(e);switch(n){case"uint8":return Fn(e);case"uint16":return Uo(e);case"uint32":return Ao(e);case"int8":return zo(e);case"int16":return Io(e);case"int32":return Eo(e);case"float":case"float32":return Go(e);case"double":case"float64":return Lo(e);case"uint8_clamped":return Ro(e);case"bigint64":return qo(e);case"biguint64":return Oo(e);case"data":case"dataview":return No(e);default:return null}return null};function ie(e){var e=Br.nextPow2(e),n=Br.log2(e),r=Pr[n];return r.length>0?r.pop():new ArrayBuffer(e)}Et.mallocArrayBuffer=ie;function Fn(t){return new Uint8Array(ie(t),0,t)}Et.mallocUint8=Fn;function Uo(t){return new Uint16Array(ie(2*t),0,t)}Et.mallocUint16=Uo;function Ao(t){return new Uint32Array(ie(4*t),0,t)}Et.mallocUint32=Ao;function zo(t){return new Int8Array(ie(t),0,t)}Et.mallocInt8=zo;function Io(t){return new Int16Array(ie(2*t),0,t)}Et.mallocInt16=Io;function Eo(t){return new Int32Array(ie(4*t),0,t)}Et.mallocInt32=Eo;function Go(t){return new Float32Array(ie(4*t),0,t)}Et.mallocFloat32=Et.mallocFloat=Go;function Lo(t){return new Float64Array(ie(8*t),0,t)}Et.mallocFloat64=Et.mallocDouble=Lo;function Ro(t){return Hu?new Uint8ClampedArray(ie(t),0,t):Fn(t)}Et.mallocUint8Clamped=Ro;function Oo(t){return Zu?new BigUint64Array(ie(8*t),0,t):null}Et.mallocBigUint64=Oo;function qo(t){return $u?new BigInt64Array(ie(8*t),0,t):null}Et.mallocBigInt64=qo;function No(t){return new DataView(ie(t),0,t)}Et.mallocDataView=No;Et.clearCache=function(){for(var e=0;e<32;++e)Qt.UINT8[e].length=0,Qt.UINT16[e].length=0,Qt.UINT32[e].length=0,Qt.INT8[e].length=0,Qt.INT16[e].length=0,Qt.INT32[e].length=0,Qt.FLOAT[e].length=0,Qt.DOUBLE[e].length=0,Qt.BIGUINT64[e].length=0,Qt.BIGINT64[e].length=0,Qt.UINT8C[e].length=0,Pr[e].length=0}});var Yo=xt((Wl,mo)=>{"use strict";mo.exports=Ku;var Ur=32;function Ku(t,e){e<=4*Ur?Ar(0,e-1,t):zr(0,e-1,t)}function Ar(t,e,n){for(var r=2*(t+1),i=t+1;i<=e;++i){for(var o=n[r++],a=n[r++],f=i,h=r-2;f-- >t;){var v=n[h-2],d=n[h-1];if(v<o)break;if(v===o&&d<a)break;n[h]=v,n[h+1]=d,h-=2}n[h]=o,n[h+1]=a}}function Vo(t,e,n){t*=2,e*=2;var r=n[t],i=n[t+1];n[t]=n[e],n[t+1]=n[e+1],n[e]=r,n[e+1]=i}function ko(t,e,n){t*=2,e*=2,n[t]=n[e],n[t+1]=n[e+1]}function Qu(t,e,n,r){t*=2,e*=2,n*=2;var i=r[t],o=r[t+1];r[t]=r[e],r[t+1]=r[e+1],r[e]=r[n],r[e+1]=r[n+1],r[n]=i,r[n+1]=o}function Co(t,e,n,r,i){t*=2,e*=2,i[t]=i[e],i[e]=n,i[t+1]=i[e+1],i[e+1]=r}function ge(t,e,n){t*=2,e*=2;var r=n[t],i=n[e];return r<i?!1:r===i?n[t+1]>n[e+1]:!0}function Fr(t,e,n,r){t*=2;var i=r[t];return i<e?!0:i===e?r[t+1]<n:!1}function zr(t,e,n){var r=(e-t+1)/6|0,i=t+r,o=e-r,a=t+e>>1,f=a-r,h=a+r,v=i,d=f,D=a,C=h,k=o,R=t+1,q=e-1,V=0;ge(v,d,n)&&(V=v,v=d,d=V),ge(C,k,n)&&(V=C,C=k,k=V),ge(v,D,n)&&(V=v,v=D,D=V),ge(d,D,n)&&(V=d,d=D,D=V),ge(v,C,n)&&(V=v,v=C,C=V),ge(D,C,n)&&(V=D,D=C,C=V),ge(d,k,n)&&(V=d,d=k,k=V),ge(d,D,n)&&(V=d,d=D,D=V),ge(C,k,n)&&(V=C,C=k,k=V);for(var X=n[2*d],$=n[2*d+1],Q=n[2*C],j=n[2*C+1],H=2*v,W=2*D,at=2*k,tt=2*i,rt=2*a,F=2*o,s=0;s<2;++s){var p=n[H+s],b=n[W+s],y=n[at+s];n[tt+s]=p,n[rt+s]=b,n[F+s]=y}ko(f,t,n),ko(h,e,n);for(var T=R;T<=q;++T)if(Fr(T,X,$,n))T!==R&&Vo(T,R,n),++R;else if(!Fr(T,Q,j,n))for(;;)if(Fr(q,Q,j,n)){Fr(q,X,$,n)?(Qu(T,R,q,n),++R,--q):(Vo(T,q,n),--q);break}else{if(--q<T)break;continue}Co(t,R-1,X,$,n),Co(e,q+1,Q,j,n),R-2-t<=Ur?Ar(t,R-2,n):zr(t,R-2,n),e-(q+2)<=Ur?Ar(q+2,e,n):zr(q+2,e,n),q-R<=Ur?Ar(R,q,n):zr(R,q,n)}});var Un=xt((Kl,Xo)=>{"use strict";Xo.exports={init:ju,sweepBipartite:tf,sweepComplete:ef,scanBipartite:rf,scanComplete:nf};var Xt=Dr(),Ju=rr(),Ir=Yo(),ae=1<<28,ze=1024,Jt=Xt.mallocInt32(ze),de=Xt.mallocInt32(ze),we=Xt.mallocInt32(ze),Ae=Xt.mallocInt32(ze),me=Xt.mallocInt32(ze),nr=Xt.mallocInt32(ze),St=Xt.mallocDouble(ze*8);function ju(t){var e=Ju.nextPow2(t);Jt.length<e&&(Xt.free(Jt),Jt=Xt.mallocInt32(e)),de.length<e&&(Xt.free(de),de=Xt.mallocInt32(e)),we.length<e&&(Xt.free(we),we=Xt.mallocInt32(e)),Ae.length<e&&(Xt.free(Ae),Ae=Xt.mallocInt32(e)),me.length<e&&(Xt.free(me),me=Xt.mallocInt32(e)),nr.length<e&&(Xt.free(nr),nr=Xt.mallocInt32(e));var n=8*e;St.length<n&&(Xt.free(St),St=Xt.mallocDouble(n))}function Ye(t,e,n,r){var i=e[r],o=t[n-1];t[i]=o,e[o]=i}function Xe(t,e,n,r){t[n]=r,e[r]=n}function tf(t,e,n,r,i,o,a,f,h,v){for(var d=0,D=2*t,C=t-1,k=D-1,R=n;R<r;++R){var q=o[R],V=D*R;St[d++]=i[V+C],St[d++]=-(q+1),St[d++]=i[V+k],St[d++]=q}for(var R=a;R<f;++R){var q=v[R]+ae,X=D*R;St[d++]=h[X+C],St[d++]=-q,St[d++]=h[X+k],St[d++]=q}var $=d>>>1;Ir(St,$);for(var Q=0,j=0,R=0;R<$;++R){var H=St[2*R+1]|0;if(H>=ae)H=H-ae|0,Ye(we,Ae,j--,H);else if(H>=0)Ye(Jt,de,Q--,H);else if(H<=-ae){H=-H-ae|0;for(var W=0;W<Q;++W){var at=e(Jt[W],H);if(at!==void 0)return at}Xe(we,Ae,j++,H)}else{H=-H-1|0;for(var W=0;W<j;++W){var at=e(H,we[W]);if(at!==void 0)return at}Xe(Jt,de,Q++,H)}}}function ef(t,e,n,r,i,o,a,f,h,v){for(var d=0,D=2*t,C=t-1,k=D-1,R=n;R<r;++R){var q=o[R]+1<<1,V=D*R;St[d++]=i[V+C],St[d++]=-q,St[d++]=i[V+k],St[d++]=q}for(var R=a;R<f;++R){var q=v[R]+1<<1,X=D*R;St[d++]=h[X+C],St[d++]=-q|1,St[d++]=h[X+k],St[d++]=q|1}var $=d>>>1;Ir(St,$);for(var Q=0,j=0,H=0,R=0;R<$;++R){var W=St[2*R+1]|0,at=W&1;if(R<$-1&&W>>1===St[2*R+3]>>1&&(at=2,R+=1),W<0){for(var tt=-(W>>1)-1,rt=0;rt<H;++rt){var F=e(me[rt],tt);if(F!==void 0)return F}if(at!==0)for(var rt=0;rt<Q;++rt){var F=e(Jt[rt],tt);if(F!==void 0)return F}if(at!==1)for(var rt=0;rt<j;++rt){var F=e(we[rt],tt);if(F!==void 0)return F}at===0?Xe(Jt,de,Q++,tt):at===1?Xe(we,Ae,j++,tt):at===2&&Xe(me,nr,H++,tt)}else{var tt=(W>>1)-1;at===0?Ye(Jt,de,Q--,tt):at===1?Ye(we,Ae,j--,tt):at===2&&Ye(me,nr,H--,tt)}}}function rf(t,e,n,r,i,o,a,f,h,v,d,D){var C=0,k=2*t,R=e,q=e+t,V=1,X=1;r?X=ae:V=ae;for(var $=i;$<o;++$){var Q=$+V,j=k*$;St[C++]=a[j+R],St[C++]=-Q,St[C++]=a[j+q],St[C++]=Q}for(var $=h;$<v;++$){var Q=$+X,H=k*$;St[C++]=d[H+R],St[C++]=-Q}var W=C>>>1;Ir(St,W);for(var at=0,$=0;$<W;++$){var tt=St[2*$+1]|0;if(tt<0){var Q=-tt,rt=!1;if(Q>=ae?(rt=!r,Q-=ae):(rt=!!r,Q-=1),rt)Xe(Jt,de,at++,Q);else{var F=D[Q],s=k*Q,p=d[s+e+1],b=d[s+e+1+t];t:for(var y=0;y<at;++y){var T=Jt[y],E=k*T;if(!(b<a[E+e+1]||a[E+e+1+t]<p)){for(var O=e+2;O<t;++O)if(d[s+O+t]<a[E+O]||a[E+O+t]<d[s+O])continue t;var P=f[T],l;if(r?l=n(F,P):l=n(P,F),l!==void 0)return l}}}}else Ye(Jt,de,at--,tt-V)}}function nf(t,e,n,r,i,o,a,f,h,v,d){for(var D=0,C=2*t,k=e,R=e+t,q=r;q<i;++q){var V=q+ae,X=C*q;St[D++]=o[X+k],St[D++]=-V,St[D++]=o[X+R],St[D++]=V}for(var q=f;q<h;++q){var V=q+1,$=C*q;St[D++]=v[$+k],St[D++]=-V}var Q=D>>>1;Ir(St,Q);for(var j=0,q=0;q<Q;++q){var H=St[2*q+1]|0;if(H<0){var V=-H;if(V>=ae)Jt[j++]=V-ae;else{V-=1;var W=d[V],at=C*V,tt=v[at+e+1],rt=v[at+e+1+t];t:for(var F=0;F<j;++F){var s=Jt[F],p=a[s];if(p===W)break;var b=C*s;if(!(rt<o[b+e+1]||o[b+e+1+t]<tt)){for(var y=e+2;y<t;++y)if(v[at+y+t]<o[b+y]||o[b+y+t]<v[at+y])continue t;var T=n(p,W);if(T!==void 0)return T}}}}else{for(var V=H-ae,F=j-1;F>=0;--F)if(Jt[F]===V){for(var y=F+1;y<j;++y)Jt[y-1]=Jt[y];break}--j}}}});var Ko=xt(Rn=>{"use strict";var Ie="d",$e="ax",Ho="vv",An="fp",ir="es",Er="rs",Gn="re",or="rb",Zo="ri",He="rp",Gr="bs",Ln="be",ar="bb",$o="bi",Ze="bp",zn="rv",In="Q",En=[Ie,$e,Ho,Er,Gn,or,Zo,Gr,Ln,ar,$o];function of(t,e,n){var r="bruteForce"+(t?"Red":"Blue")+(e?"Flip":"")+(n?"Full":""),i=["function ",r,"(",En.join(),"){","var ",ir,"=2*",Ie,";"],o="for(var i="+Er+","+He+"="+ir+"*"+Er+";i<"+Gn+";++i,"+He+"+="+ir+"){var x0="+or+"["+$e+"+"+He+"],x1="+or+"["+$e+"+"+He+"+"+Ie+"],xi="+Zo+"[i];",a="for(var j="+Gr+","+Ze+"="+ir+"*"+Gr+";j<"+Ln+";++j,"+Ze+"+="+ir+"){var y0="+ar+"["+$e+"+"+Ze+"],"+(n?"y1="+ar+"["+$e+"+"+Ze+"+"+Ie+"],":"")+"yi="+$o+"[j];";return t?i.push(o,In,":",a):i.push(a,In,":",o),n?i.push("if(y1<x0||x1<y0)continue;"):e?i.push("if(y0<=x0||x1<y0)continue;"):i.push("if(y0<x0||x1<y0)continue;"),i.push("for(var k="+$e+"+1;k<"+Ie+";++k){var r0="+or+"[k+"+He+"],r1="+or+"[k+"+Ie+"+"+He+"],b0="+ar+"[k+"+Ze+"],b1="+ar+"[k+"+Ie+"+"+Ze+"];if(r1<b0||b1<r0)continue "+In+";}var "+zn+"="+Ho+"("),e?i.push("yi,xi"):i.push("xi,yi"),i.push(");if("+zn+"!==void 0)return "+zn+";}}}"),{name:r,code:i.join("")}}function Wo(t){var e="bruteForce"+(t?"Full":"Partial"),n=[],r=En.slice();t||r.splice(3,0,An);var i=["function "+e+"("+r.join()+"){"];function o(h,v){var d=of(h,v,t);n.push(d.code),i.push("return "+d.name+"("+En.join()+");")}i.push("if("+Gn+"-"+Er+">"+Ln+"-"+Gr+"){"),t?(o(!0,!1),i.push("}else{"),o(!1,!1)):(i.push("if("+An+"){"),o(!0,!0),i.push("}else{"),o(!0,!1),i.push("}}else{if("+An+"){"),o(!1,!0),i.push("}else{"),o(!1,!1),i.push("}")),i.push("}}return "+e);var a=n.join("")+i.join(""),f=new Function(a);return f()}Rn.partial=Wo(!1);Rn.full=Wo(!0)});var On=xt((Jl,Qo)=>{"use strict";Qo.exports=sf;var af="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m";function sf(t,e){var n="abcdef".split("").concat(e),r=[];return t.indexOf("lo")>=0&&r.push("lo=e[k+n]"),t.indexOf("hi")>=0&&r.push("hi=e[k+o]"),n.push(af.replace("_",r.join()).replace("$",t)),Function.apply(void 0,n)}});var ta=xt((jl,jo)=>{"use strict";jo.exports=lf;var uf=On(),Jo=uf("lo<p0",["p0"]),ff=8;function cf(t,e,n,r,i,o){for(var a=2*t,f=a*(n+1)+e,h=n+1;h<r;++h,f+=a)for(var v=i[f],d=h,D=a*(h-1);d>n&&i[D+e]>v;--d,D-=a){for(var C=D,k=D+a,R=0;R<a;++R,++C,++k){var q=i[C];i[C]=i[k],i[k]=q}var V=o[d];o[d]=o[d-1],o[d-1]=V}}function lf(t,e,n,r,i,o){if(r<=n+1)return n;for(var a=n,f=r,h=r+n>>>1,v=2*t,d=h,D=i[v*h+e];a<f;){if(f-a<ff){cf(t,e,a,f,i,o),D=i[v*h+e];break}var C=f-a,k=Math.random()*C+a|0,R=i[v*k+e],q=Math.random()*C+a|0,V=i[v*q+e],X=Math.random()*C+a|0,$=i[v*X+e];R<=V?$>=V?(d=q,D=V):R>=$?(d=k,D=R):(d=X,D=$):V>=$?(d=q,D=V):$>=R?(d=k,D=R):(d=X,D=$);for(var H=v*(f-1),W=v*d,Q=0;Q<v;++Q,++H,++W){var j=i[H];i[H]=i[W],i[W]=j}var at=o[f-1];o[f-1]=o[d],o[d]=at,d=Jo(t,e,a,f-1,i,o,D);for(var H=v*(f-1),W=v*d,Q=0;Q<v;++Q,++H,++W){var j=i[H];i[H]=i[W],i[W]=j}var at=o[f-1];if(o[f-1]=o[d],o[d]=at,h<d){for(f=d-1;a<f&&i[v*(f-1)+e]===D;)f-=1;f+=1}else if(d<h)for(a=d+1;a<f&&i[v*a+e]===D;)a+=1;else break}return Jo(t,e,n,h,i,o,i[v*h+e])}});var sa=xt((th,aa)=>{"use strict";aa.exports=Tf;var We=Dr(),qn=rr(),ia=Ko(),hf=ia.partial,vf=ia.full,be=Un(),pf=ta(),Ke=On(),ea=128,gf=1<<22,df=1<<22,wf=Ke("!(lo>=p0)&&!(p1>=hi)",["p0","p1"]),ra=Ke("lo===p0",["p0"]),xf=Ke("lo<p0",["p0"]),Mf=Ke("hi<=p0",["p0"]),na=Ke("lo<=p0&&p0<=hi",["p0"]),yf=Ke("lo<p0&&p0<=hi",["p0"]),Nn=6,Vn=2,oa=1024,ee=We.mallocInt32(oa),Ee=We.mallocDouble(oa);function _f(t,e){var n=8*qn.log2(e+1)*(t+1)|0,r=qn.nextPow2(Nn*n);ee.length<r&&(We.free(ee),ee=We.mallocInt32(r));var i=qn.nextPow2(Vn*n);Ee.length<i&&(We.free(Ee),Ee=We.mallocDouble(i))}function fe(t,e,n,r,i,o,a,f,h){var v=Nn*t;ee[v]=e,ee[v+1]=n,ee[v+2]=r,ee[v+3]=i,ee[v+4]=o,ee[v+5]=a;var d=Vn*t;Ee[d]=f,Ee[d+1]=h}function bf(t,e,n,r,i,o,a,f,h,v,d){var D=2*t,C=h*D,k=v[C+e];t:for(var R=i,q=i*D;R<o;++R,q+=D){var V=a[q+e],X=a[q+e+t];if(!(k<V||X<k)&&!(r&&k===V)){for(var $=f[R],Q=e+1;Q<t;++Q){var V=a[q+Q],X=a[q+Q+t],j=v[C+Q],H=v[C+Q+t];if(X<j||H<V)continue t}var W;if(r?W=n(d,$):W=n($,d),W!==void 0)return W}}}function Sf(t,e,n,r,i,o,a,f,h,v){var d=2*t,D=f*d,C=h[D+e];t:for(var k=r,R=r*d;k<i;++k,R+=d){var q=a[k];if(q!==v){var V=o[R+e],X=o[R+e+t];if(!(C<V||X<C)){for(var $=e+1;$<t;++$){var V=o[R+$],X=o[R+$+t],Q=h[D+$],j=h[D+$+t];if(X<Q||j<V)continue t}var H=n(q,v);if(H!==void 0)return H}}}}function Tf(t,e,n,r,i,o,a,f,h){_f(t,r+a);var v=0,d=2*t,D;for(fe(v++,0,0,r,0,a,n?16:0,-1/0,1/0),n||fe(v++,0,0,a,0,r,1,-1/0,1/0);v>0;){v-=1;var C=v*Nn,k=ee[C],R=ee[C+1],q=ee[C+2],V=ee[C+3],X=ee[C+4],$=ee[C+5],Q=v*Vn,j=Ee[Q],H=Ee[Q+1],W=$&1,at=!!($&16),tt=i,rt=o,F=f,s=h;if(W&&(tt=f,rt=h,F=i,s=o),!($&2&&(q=xf(t,k,R,q,tt,rt,H),R>=q))&&!($&4&&(R=Mf(t,k,R,q,tt,rt,j),R>=q))){var p=q-R,b=X-V;if(at){if(t*p*(p+b)<df){if(D=be.scanComplete(t,k,e,R,q,tt,rt,V,X,F,s),D!==void 0)return D;continue}}else if(t*Math.min(p,b)<ea){if(D=hf(t,k,e,W,R,q,tt,rt,V,X,F,s),D!==void 0)return D;continue}else if(t*p*b<gf){if(D=be.scanBipartite(t,k,e,W,R,q,tt,rt,V,X,F,s),D!==void 0)return D;continue}var y=wf(t,k,R,q,tt,rt,j,H);if(R<y)if(t*(y-R)<ea){if(D=vf(t,k+1,e,R,y,tt,rt,V,X,F,s),D!==void 0)return D}else if(k===t-2){if(W?D=be.sweepBipartite(t,e,V,X,F,s,R,y,tt,rt):D=be.sweepBipartite(t,e,R,y,tt,rt,V,X,F,s),D!==void 0)return D}else fe(v++,k+1,R,y,V,X,W,-1/0,1/0),fe(v++,k+1,V,X,R,y,W^1,-1/0,1/0);if(y<q){var T=pf(t,k,V,X,F,s),E=F[d*T+k],O=ra(t,k,T,X,F,s,E);if(O<X&&fe(v++,k,y,q,O,X,(W|4)+(at?16:0),E,H),V<T&&fe(v++,k,y,q,V,T,(W|2)+(at?16:0),j,E),T+1===O){if(at?D=Sf(t,k,e,y,q,tt,rt,T,F,s[T]):D=bf(t,k,e,W,y,q,tt,rt,T,F,s[T]),D!==void 0)return D}else if(T<O){var P;if(at){if(P=na(t,k,y,q,tt,rt,E),y<P){var l=ra(t,k,y,P,tt,rt,E);if(k===t-2){if(y<l&&(D=be.sweepComplete(t,e,y,l,tt,rt,T,O,F,s),D!==void 0)||l<P&&(D=be.sweepBipartite(t,e,l,P,tt,rt,T,O,F,s),D!==void 0))return D}else y<l&&fe(v++,k+1,y,l,T,O,16,-1/0,1/0),l<P&&(fe(v++,k+1,l,P,T,O,0,-1/0,1/0),fe(v++,k+1,T,O,l,P,1,-1/0,1/0))}}else W?P=yf(t,k,y,q,tt,rt,E):P=na(t,k,y,q,tt,rt,E),y<P&&(k===t-2?W?D=be.sweepBipartite(t,e,T,O,F,s,y,P,tt,rt):D=be.sweepBipartite(t,e,y,P,tt,rt,T,O,F,s):(fe(v++,k+1,y,P,T,O,W,-1/0,1/0),fe(v++,k+1,T,O,y,P,W^1,-1/0,1/0)))}}}}}});var la=xt((eh,ca)=>{"use strict";ca.exports=Uf;var Se=Dr(),Lr=Un(),Bf=sa();function Pf(t,e){for(var n=0;n<t;++n)if(!(e[n]<=e[n+t]))return!0;return!1}function ua(t,e,n,r){for(var i=0,o=0,a=0,f=t.length;a<f;++a){var h=t[a];if(!Pf(e,h)){for(var v=0;v<2*e;++v)n[i++]=h[v];r[o++]=a}}return o}function Rr(t,e,n,r){var i=t.length,o=e.length;if(!(i<=0||o<=0)){var a=t[0].length>>>1;if(!(a<=0)){var f,h=Se.mallocDouble(2*a*i),v=Se.mallocInt32(i);if(i=ua(t,a,h,v),i>0){if(a===1&&r)Lr.init(i),f=Lr.sweepComplete(a,n,0,i,h,v,0,i,h,v);else{var d=Se.mallocDouble(2*a*o),D=Se.mallocInt32(o);o=ua(e,a,d,D),o>0&&(Lr.init(i+o),a===1?f=Lr.sweepBipartite(a,n,0,i,h,v,0,o,d,D):f=Bf(a,n,r,i,h,v,o,d,D),Se.free(d),Se.free(D))}Se.free(h),Se.free(v)}return f}}}var sr;function fa(t,e){sr.push([t,e])}function Df(t){return sr=[],Rr(t,t,fa,!0),sr}function Ff(t,e){return sr=[],Rr(t,e,fa,!1),sr}function Uf(t,e,n){var r;switch(arguments.length){case 1:return Df(t);case 2:return typeof e=="function"?Rr(t,t,e,!0):Ff(t,e);case 3:return Rr(t,e,n,!1);default:throw new Error("box-intersect: Invalid arguments")}}});var va=xt((rh,ha)=>{"use strict";ha.exports=zf;var Or=yn()[3];function Af(t,e,n,r){for(var i=0;i<2;++i){var o=t[i],a=e[i],f=Math.min(o,a),h=Math.max(o,a),v=n[i],d=r[i],D=Math.min(v,d),C=Math.max(v,d);if(C<f||h<D)return!1}return!0}function zf(t,e,n,r){var i=Or(t,n,r),o=Or(e,n,r);if(i>0&&o>0||i<0&&o<0)return!1;var a=Or(n,t,e),f=Or(r,t,e);return a>0&&f>0||a<0&&f<0?!1:i===0&&o===0&&a===0&&f===0?Af(t,e,n,r):!0}});var pa=xt(()=>{});var ur=xt((ga,kn)=>{(function(t,e){"use strict";function n(F,s){if(!F)throw new Error(s||"Assertion failed")}function r(F,s){F.super_=s;var p=function(){};p.prototype=s.prototype,F.prototype=new p,F.prototype.constructor=F}function i(F,s,p){if(i.isBN(F))return F;this.negative=0,this.words=null,this.length=0,this.red=null,F!==null&&((s==="le"||s==="be")&&(p=s,s=10),this._init(F||0,s||10,p||"be"))}typeof t=="object"?t.exports=i:e.BN=i,i.BN=i,i.wordSize=26;var o;try{typeof window<"u"&&typeof window.Buffer<"u"?o=window.Buffer:o=pa().Buffer}catch{}i.isBN=function(s){return s instanceof i?!0:s!==null&&typeof s=="object"&&s.constructor.wordSize===i.wordSize&&Array.isArray(s.words)},i.max=function(s,p){return s.cmp(p)>0?s:p},i.min=function(s,p){return s.cmp(p)<0?s:p},i.prototype._init=function(s,p,b){if(typeof s=="number")return this._initNumber(s,p,b);if(typeof s=="object")return this._initArray(s,p,b);p==="hex"&&(p=16),n(p===(p|0)&&p>=2&&p<=36),s=s.toString().replace(/\s+/g,"");var y=0;s[0]==="-"&&(y++,this.negative=1),y<s.length&&(p===16?this._parseHex(s,y,b):(this._parseBase(s,p,y),b==="le"&&this._initArray(this.toArray(),p,b)))},i.prototype._initNumber=function(s,p,b){s<0&&(this.negative=1,s=-s),s<67108864?(this.words=[s&67108863],this.length=1):s<4503599627370496?(this.words=[s&67108863,s/67108864&67108863],this.length=2):(n(s<9007199254740992),this.words=[s&67108863,s/67108864&67108863,1],this.length=3),b==="le"&&this._initArray(this.toArray(),p,b)},i.prototype._initArray=function(s,p,b){if(n(typeof s.length=="number"),s.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(s.length/3),this.words=new Array(this.length);for(var y=0;y<this.length;y++)this.words[y]=0;var T,E,O=0;if(b==="be")for(y=s.length-1,T=0;y>=0;y-=3)E=s[y]|s[y-1]<<8|s[y-2]<<16,this.words[T]|=E<<O&67108863,this.words[T+1]=E>>>26-O&67108863,O+=24,O>=26&&(O-=26,T++);else if(b==="le")for(y=0,T=0;y<s.length;y+=3)E=s[y]|s[y+1]<<8|s[y+2]<<16,this.words[T]|=E<<O&67108863,this.words[T+1]=E>>>26-O&67108863,O+=24,O>=26&&(O-=26,T++);return this.strip()};function a(F,s){var p=F.charCodeAt(s);return p>=65&&p<=70?p-55:p>=97&&p<=102?p-87:p-48&15}function f(F,s,p){var b=a(F,p);return p-1>=s&&(b|=a(F,p-1)<<4),b}i.prototype._parseHex=function(s,p,b){this.length=Math.ceil((s.length-p)/6),this.words=new Array(this.length);for(var y=0;y<this.length;y++)this.words[y]=0;var T=0,E=0,O;if(b==="be")for(y=s.length-1;y>=p;y-=2)O=f(s,p,y)<<T,this.words[E]|=O&67108863,T>=18?(T-=18,E+=1,this.words[E]|=O>>>26):T+=8;else{var P=s.length-p;for(y=P%2===0?p+1:p;y<s.length;y+=2)O=f(s,p,y)<<T,this.words[E]|=O&67108863,T>=18?(T-=18,E+=1,this.words[E]|=O>>>26):T+=8}this.strip()};function h(F,s,p,b){for(var y=0,T=Math.min(F.length,p),E=s;E<T;E++){var O=F.charCodeAt(E)-48;y*=b,O>=49?y+=O-49+10:O>=17?y+=O-17+10:y+=O}return y}i.prototype._parseBase=function(s,p,b){this.words=[0],this.length=1;for(var y=0,T=1;T<=67108863;T*=p)y++;y--,T=T/p|0;for(var E=s.length-b,O=E%y,P=Math.min(E,E-O)+b,l=0,A=b;A<P;A+=y)l=h(s,A,A+y,p),this.imuln(T),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(O!==0){var ot=1;for(l=h(s,A,s.length,p),A=0;A<O;A++)ot*=p;this.imuln(ot),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this.strip()},i.prototype.copy=function(s){s.words=new Array(this.length);for(var p=0;p<this.length;p++)s.words[p]=this.words[p];s.length=this.length,s.negative=this.negative,s.red=this.red},i.prototype.clone=function(){var s=new i(null);return this.copy(s),s},i.prototype._expand=function(s){for(;this.length<s;)this.words[this.length++]=0;return this},i.prototype.strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},i.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},i.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var v=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],D=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];i.prototype.toString=function(s,p){s=s||10,p=p|0||1;var b;if(s===16||s==="hex"){b="";for(var y=0,T=0,E=0;E<this.length;E++){var O=this.words[E],P=((O<<y|T)&16777215).toString(16);T=O>>>24-y&16777215,y+=2,y>=26&&(y-=26,E--),T!==0||E!==this.length-1?b=v[6-P.length]+P+b:b=P+b}for(T!==0&&(b=T.toString(16)+b);b.length%p!==0;)b="0"+b;return this.negative!==0&&(b="-"+b),b}if(s===(s|0)&&s>=2&&s<=36){var l=d[s],A=D[s];b="";var ot=this.clone();for(ot.negative=0;!ot.isZero();){var st=ot.modn(A).toString(s);ot=ot.idivn(A),ot.isZero()?b=st+b:b=v[l-st.length]+st+b}for(this.isZero()&&(b="0"+b);b.length%p!==0;)b="0"+b;return this.negative!==0&&(b="-"+b),b}n(!1,"Base should be between 2 and 36")},i.prototype.toNumber=function(){var s=this.words[0];return this.length===2?s+=this.words[1]*67108864:this.length===3&&this.words[2]===1?s+=4503599627370496+this.words[1]*67108864:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-s:s},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toBuffer=function(s,p){return n(typeof o<"u"),this.toArrayLike(o,s,p)},i.prototype.toArray=function(s,p){return this.toArrayLike(Array,s,p)},i.prototype.toArrayLike=function(s,p,b){var y=this.byteLength(),T=b||Math.max(1,y);n(y<=T,"byte array longer than desired length"),n(T>0,"Requested array length <= 0"),this.strip();var E=p==="le",O=new s(T),P,l,A=this.clone();if(E){for(l=0;!A.isZero();l++)P=A.andln(255),A.iushrn(8),O[l]=P;for(;l<T;l++)O[l]=0}else{for(l=0;l<T-y;l++)O[l]=0;for(l=0;!A.isZero();l++)P=A.andln(255),A.iushrn(8),O[T-l-1]=P}return O},Math.clz32?i.prototype._countBits=function(s){return 32-Math.clz32(s)}:i.prototype._countBits=function(s){var p=s,b=0;return p>=4096&&(b+=13,p>>>=13),p>=64&&(b+=7,p>>>=7),p>=8&&(b+=4,p>>>=4),p>=2&&(b+=2,p>>>=2),b+p},i.prototype._zeroBits=function(s){if(s===0)return 26;var p=s,b=0;return(p&8191)===0&&(b+=13,p>>>=13),(p&127)===0&&(b+=7,p>>>=7),(p&15)===0&&(b+=4,p>>>=4),(p&3)===0&&(b+=2,p>>>=2),(p&1)===0&&b++,b},i.prototype.bitLength=function(){var s=this.words[this.length-1],p=this._countBits(s);return(this.length-1)*26+p};function C(F){for(var s=new Array(F.bitLength()),p=0;p<s.length;p++){var b=p/26|0,y=p%26;s[p]=(F.words[b]&1<<y)>>>y}return s}i.prototype.zeroBits=function(){if(this.isZero())return 0;for(var s=0,p=0;p<this.length;p++){var b=this._zeroBits(this.words[p]);if(s+=b,b!==26)break}return s},i.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},i.prototype.toTwos=function(s){return this.negative!==0?this.abs().inotn(s).iaddn(1):this.clone()},i.prototype.fromTwos=function(s){return this.testn(s-1)?this.notn(s).iaddn(1).ineg():this.clone()},i.prototype.isNeg=function(){return this.negative!==0},i.prototype.neg=function(){return this.clone().ineg()},i.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},i.prototype.iuor=function(s){for(;this.length<s.length;)this.words[this.length++]=0;for(var p=0;p<s.length;p++)this.words[p]=this.words[p]|s.words[p];return this.strip()},i.prototype.ior=function(s){return n((this.negative|s.negative)===0),this.iuor(s)},i.prototype.or=function(s){return this.length>s.length?this.clone().ior(s):s.clone().ior(this)},i.prototype.uor=function(s){return this.length>s.length?this.clone().iuor(s):s.clone().iuor(this)},i.prototype.iuand=function(s){var p;this.length>s.length?p=s:p=this;for(var b=0;b<p.length;b++)this.words[b]=this.words[b]&s.words[b];return this.length=p.length,this.strip()},i.prototype.iand=function(s){return n((this.negative|s.negative)===0),this.iuand(s)},i.prototype.and=function(s){return this.length>s.length?this.clone().iand(s):s.clone().iand(this)},i.prototype.uand=function(s){return this.length>s.length?this.clone().iuand(s):s.clone().iuand(this)},i.prototype.iuxor=function(s){var p,b;this.length>s.length?(p=this,b=s):(p=s,b=this);for(var y=0;y<b.length;y++)this.words[y]=p.words[y]^b.words[y];if(this!==p)for(;y<p.length;y++)this.words[y]=p.words[y];return this.length=p.length,this.strip()},i.prototype.ixor=function(s){return n((this.negative|s.negative)===0),this.iuxor(s)},i.prototype.xor=function(s){return this.length>s.length?this.clone().ixor(s):s.clone().ixor(this)},i.prototype.uxor=function(s){return this.length>s.length?this.clone().iuxor(s):s.clone().iuxor(this)},i.prototype.inotn=function(s){n(typeof s=="number"&&s>=0);var p=Math.ceil(s/26)|0,b=s%26;this._expand(p),b>0&&p--;for(var y=0;y<p;y++)this.words[y]=~this.words[y]&67108863;return b>0&&(this.words[y]=~this.words[y]&67108863>>26-b),this.strip()},i.prototype.notn=function(s){return this.clone().inotn(s)},i.prototype.setn=function(s,p){n(typeof s=="number"&&s>=0);var b=s/26|0,y=s%26;return this._expand(b+1),p?this.words[b]=this.words[b]|1<<y:this.words[b]=this.words[b]&~(1<<y),this.strip()},i.prototype.iadd=function(s){var p;if(this.negative!==0&&s.negative===0)return this.negative=0,p=this.isub(s),this.negative^=1,this._normSign();if(this.negative===0&&s.negative!==0)return s.negative=0,p=this.isub(s),s.negative=1,p._normSign();var b,y;this.length>s.length?(b=this,y=s):(b=s,y=this);for(var T=0,E=0;E<y.length;E++)p=(b.words[E]|0)+(y.words[E]|0)+T,this.words[E]=p&67108863,T=p>>>26;for(;T!==0&&E<b.length;E++)p=(b.words[E]|0)+T,this.words[E]=p&67108863,T=p>>>26;if(this.length=b.length,T!==0)this.words[this.length]=T,this.length++;else if(b!==this)for(;E<b.length;E++)this.words[E]=b.words[E];return this},i.prototype.add=function(s){var p;return s.negative!==0&&this.negative===0?(s.negative=0,p=this.sub(s),s.negative^=1,p):s.negative===0&&this.negative!==0?(this.negative=0,p=s.sub(this),this.negative=1,p):this.length>s.length?this.clone().iadd(s):s.clone().iadd(this)},i.prototype.isub=function(s){if(s.negative!==0){s.negative=0;var p=this.iadd(s);return s.negative=1,p._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(s),this.negative=1,this._normSign();var b=this.cmp(s);if(b===0)return this.negative=0,this.length=1,this.words[0]=0,this;var y,T;b>0?(y=this,T=s):(y=s,T=this);for(var E=0,O=0;O<T.length;O++)p=(y.words[O]|0)-(T.words[O]|0)+E,E=p>>26,this.words[O]=p&67108863;for(;E!==0&&O<y.length;O++)p=(y.words[O]|0)+E,E=p>>26,this.words[O]=p&67108863;if(E===0&&O<y.length&&y!==this)for(;O<y.length;O++)this.words[O]=y.words[O];return this.length=Math.max(this.length,O),y!==this&&(this.negative=1),this.strip()},i.prototype.sub=function(s){return this.clone().isub(s)};function k(F,s,p){p.negative=s.negative^F.negative;var b=F.length+s.length|0;p.length=b,b=b-1|0;var y=F.words[0]|0,T=s.words[0]|0,E=y*T,O=E&67108863,P=E/67108864|0;p.words[0]=O;for(var l=1;l<b;l++){for(var A=P>>>26,ot=P&67108863,st=Math.min(l,s.length-1),ut=Math.max(0,l-F.length+1);ut<=st;ut++){var ft=l-ut|0;y=F.words[ft]|0,T=s.words[ut]|0,E=y*T+ot,A+=E/67108864|0,ot=E&67108863}p.words[l]=ot|0,P=A|0}return P!==0?p.words[l]=P|0:p.length--,p.strip()}var R=function(s,p,b){var y=s.words,T=p.words,E=b.words,O=0,P,l,A,ot=y[0]|0,st=ot&8191,ut=ot>>>13,ft=y[1]|0,Mt=ft&8191,vt=ft>>>13,Y=y[2]|0,K=Y&8191,U=Y>>>13,c=y[3]|0,_=c&8191,w=c>>>13,I=y[4]|0,L=I&8191,N=I>>>13,m=y[5]|0,u=m&8191,B=m>>>13,M=y[6]|0,x=M&8191,g=M>>>13,S=y[7]|0,G=S&8191,z=S>>>13,Z=y[8]|0,J=Z&8191,et=Z>>>13,ct=y[9]|0,nt=ct&8191,it=ct>>>13,pt=T[0]|0,ht=pt&8191,lt=pt>>>13,gt=T[1]|0,wt=gt&8191,dt=gt>>>13,Ct=T[2]|0,yt=Ct&8191,_t=Ct>>>13,Ht=T[3]|0,Bt=Ht&8191,Pt=Ht>>>13,$t=T[4]|0,Dt=$t&8191,Ft=$t>>>13,Wt=T[5]|0,Ut=Wt&8191,At=Wt>>>13,Kt=T[6]|0,zt=Kt&8191,It=Kt>>>13,jt=T[7]|0,Lt=jt&8191,Rt=jt>>>13,Te=T[8]|0,Ot=Te&8191,qt=Te>>>13,Be=T[9]|0,Nt=Be&8191,kt=Be>>>13;b.negative=s.negative^p.negative,b.length=19,P=Math.imul(st,ht),l=Math.imul(st,lt),l=l+Math.imul(ut,ht)|0,A=Math.imul(ut,lt);var qe=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(qe>>>26)|0,qe&=67108863,P=Math.imul(Mt,ht),l=Math.imul(Mt,lt),l=l+Math.imul(vt,ht)|0,A=Math.imul(vt,lt),P=P+Math.imul(st,wt)|0,l=l+Math.imul(st,dt)|0,l=l+Math.imul(ut,wt)|0,A=A+Math.imul(ut,dt)|0;var Ne=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,P=Math.imul(K,ht),l=Math.imul(K,lt),l=l+Math.imul(U,ht)|0,A=Math.imul(U,lt),P=P+Math.imul(Mt,wt)|0,l=l+Math.imul(Mt,dt)|0,l=l+Math.imul(vt,wt)|0,A=A+Math.imul(vt,dt)|0,P=P+Math.imul(st,yt)|0,l=l+Math.imul(st,_t)|0,l=l+Math.imul(ut,yt)|0,A=A+Math.imul(ut,_t)|0;var Ve=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Ve>>>26)|0,Ve&=67108863,P=Math.imul(_,ht),l=Math.imul(_,lt),l=l+Math.imul(w,ht)|0,A=Math.imul(w,lt),P=P+Math.imul(K,wt)|0,l=l+Math.imul(K,dt)|0,l=l+Math.imul(U,wt)|0,A=A+Math.imul(U,dt)|0,P=P+Math.imul(Mt,yt)|0,l=l+Math.imul(Mt,_t)|0,l=l+Math.imul(vt,yt)|0,A=A+Math.imul(vt,_t)|0,P=P+Math.imul(st,Bt)|0,l=l+Math.imul(st,Pt)|0,l=l+Math.imul(ut,Bt)|0,A=A+Math.imul(ut,Pt)|0;var Zt=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Zt>>>26)|0,Zt&=67108863,P=Math.imul(L,ht),l=Math.imul(L,lt),l=l+Math.imul(N,ht)|0,A=Math.imul(N,lt),P=P+Math.imul(_,wt)|0,l=l+Math.imul(_,dt)|0,l=l+Math.imul(w,wt)|0,A=A+Math.imul(w,dt)|0,P=P+Math.imul(K,yt)|0,l=l+Math.imul(K,_t)|0,l=l+Math.imul(U,yt)|0,A=A+Math.imul(U,_t)|0,P=P+Math.imul(Mt,Bt)|0,l=l+Math.imul(Mt,Pt)|0,l=l+Math.imul(vt,Bt)|0,A=A+Math.imul(vt,Pt)|0,P=P+Math.imul(st,Dt)|0,l=l+Math.imul(st,Ft)|0,l=l+Math.imul(ut,Dt)|0,A=A+Math.imul(ut,Ft)|0;var Xr=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,P=Math.imul(u,ht),l=Math.imul(u,lt),l=l+Math.imul(B,ht)|0,A=Math.imul(B,lt),P=P+Math.imul(L,wt)|0,l=l+Math.imul(L,dt)|0,l=l+Math.imul(N,wt)|0,A=A+Math.imul(N,dt)|0,P=P+Math.imul(_,yt)|0,l=l+Math.imul(_,_t)|0,l=l+Math.imul(w,yt)|0,A=A+Math.imul(w,_t)|0,P=P+Math.imul(K,Bt)|0,l=l+Math.imul(K,Pt)|0,l=l+Math.imul(U,Bt)|0,A=A+Math.imul(U,Pt)|0,P=P+Math.imul(Mt,Dt)|0,l=l+Math.imul(Mt,Ft)|0,l=l+Math.imul(vt,Dt)|0,A=A+Math.imul(vt,Ft)|0,P=P+Math.imul(st,Ut)|0,l=l+Math.imul(st,At)|0,l=l+Math.imul(ut,Ut)|0,A=A+Math.imul(ut,At)|0;var Hr=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Hr>>>26)|0,Hr&=67108863,P=Math.imul(x,ht),l=Math.imul(x,lt),l=l+Math.imul(g,ht)|0,A=Math.imul(g,lt),P=P+Math.imul(u,wt)|0,l=l+Math.imul(u,dt)|0,l=l+Math.imul(B,wt)|0,A=A+Math.imul(B,dt)|0,P=P+Math.imul(L,yt)|0,l=l+Math.imul(L,_t)|0,l=l+Math.imul(N,yt)|0,A=A+Math.imul(N,_t)|0,P=P+Math.imul(_,Bt)|0,l=l+Math.imul(_,Pt)|0,l=l+Math.imul(w,Bt)|0,A=A+Math.imul(w,Pt)|0,P=P+Math.imul(K,Dt)|0,l=l+Math.imul(K,Ft)|0,l=l+Math.imul(U,Dt)|0,A=A+Math.imul(U,Ft)|0,P=P+Math.imul(Mt,Ut)|0,l=l+Math.imul(Mt,At)|0,l=l+Math.imul(vt,Ut)|0,A=A+Math.imul(vt,At)|0,P=P+Math.imul(st,zt)|0,l=l+Math.imul(st,It)|0,l=l+Math.imul(ut,zt)|0,A=A+Math.imul(ut,It)|0;var Zr=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Zr>>>26)|0,Zr&=67108863,P=Math.imul(G,ht),l=Math.imul(G,lt),l=l+Math.imul(z,ht)|0,A=Math.imul(z,lt),P=P+Math.imul(x,wt)|0,l=l+Math.imul(x,dt)|0,l=l+Math.imul(g,wt)|0,A=A+Math.imul(g,dt)|0,P=P+Math.imul(u,yt)|0,l=l+Math.imul(u,_t)|0,l=l+Math.imul(B,yt)|0,A=A+Math.imul(B,_t)|0,P=P+Math.imul(L,Bt)|0,l=l+Math.imul(L,Pt)|0,l=l+Math.imul(N,Bt)|0,A=A+Math.imul(N,Pt)|0,P=P+Math.imul(_,Dt)|0,l=l+Math.imul(_,Ft)|0,l=l+Math.imul(w,Dt)|0,A=A+Math.imul(w,Ft)|0,P=P+Math.imul(K,Ut)|0,l=l+Math.imul(K,At)|0,l=l+Math.imul(U,Ut)|0,A=A+Math.imul(U,At)|0,P=P+Math.imul(Mt,zt)|0,l=l+Math.imul(Mt,It)|0,l=l+Math.imul(vt,zt)|0,A=A+Math.imul(vt,It)|0,P=P+Math.imul(st,Lt)|0,l=l+Math.imul(st,Rt)|0,l=l+Math.imul(ut,Lt)|0,A=A+Math.imul(ut,Rt)|0;var $r=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+($r>>>26)|0,$r&=67108863,P=Math.imul(J,ht),l=Math.imul(J,lt),l=l+Math.imul(et,ht)|0,A=Math.imul(et,lt),P=P+Math.imul(G,wt)|0,l=l+Math.imul(G,dt)|0,l=l+Math.imul(z,wt)|0,A=A+Math.imul(z,dt)|0,P=P+Math.imul(x,yt)|0,l=l+Math.imul(x,_t)|0,l=l+Math.imul(g,yt)|0,A=A+Math.imul(g,_t)|0,P=P+Math.imul(u,Bt)|0,l=l+Math.imul(u,Pt)|0,l=l+Math.imul(B,Bt)|0,A=A+Math.imul(B,Pt)|0,P=P+Math.imul(L,Dt)|0,l=l+Math.imul(L,Ft)|0,l=l+Math.imul(N,Dt)|0,A=A+Math.imul(N,Ft)|0,P=P+Math.imul(_,Ut)|0,l=l+Math.imul(_,At)|0,l=l+Math.imul(w,Ut)|0,A=A+Math.imul(w,At)|0,P=P+Math.imul(K,zt)|0,l=l+Math.imul(K,It)|0,l=l+Math.imul(U,zt)|0,A=A+Math.imul(U,It)|0,P=P+Math.imul(Mt,Lt)|0,l=l+Math.imul(Mt,Rt)|0,l=l+Math.imul(vt,Lt)|0,A=A+Math.imul(vt,Rt)|0,P=P+Math.imul(st,Ot)|0,l=l+Math.imul(st,qt)|0,l=l+Math.imul(ut,Ot)|0,A=A+Math.imul(ut,qt)|0;var Wr=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,P=Math.imul(nt,ht),l=Math.imul(nt,lt),l=l+Math.imul(it,ht)|0,A=Math.imul(it,lt),P=P+Math.imul(J,wt)|0,l=l+Math.imul(J,dt)|0,l=l+Math.imul(et,wt)|0,A=A+Math.imul(et,dt)|0,P=P+Math.imul(G,yt)|0,l=l+Math.imul(G,_t)|0,l=l+Math.imul(z,yt)|0,A=A+Math.imul(z,_t)|0,P=P+Math.imul(x,Bt)|0,l=l+Math.imul(x,Pt)|0,l=l+Math.imul(g,Bt)|0,A=A+Math.imul(g,Pt)|0,P=P+Math.imul(u,Dt)|0,l=l+Math.imul(u,Ft)|0,l=l+Math.imul(B,Dt)|0,A=A+Math.imul(B,Ft)|0,P=P+Math.imul(L,Ut)|0,l=l+Math.imul(L,At)|0,l=l+Math.imul(N,Ut)|0,A=A+Math.imul(N,At)|0,P=P+Math.imul(_,zt)|0,l=l+Math.imul(_,It)|0,l=l+Math.imul(w,zt)|0,A=A+Math.imul(w,It)|0,P=P+Math.imul(K,Lt)|0,l=l+Math.imul(K,Rt)|0,l=l+Math.imul(U,Lt)|0,A=A+Math.imul(U,Rt)|0,P=P+Math.imul(Mt,Ot)|0,l=l+Math.imul(Mt,qt)|0,l=l+Math.imul(vt,Ot)|0,A=A+Math.imul(vt,qt)|0,P=P+Math.imul(st,Nt)|0,l=l+Math.imul(st,kt)|0,l=l+Math.imul(ut,Nt)|0,A=A+Math.imul(ut,kt)|0;var Kr=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Kr>>>26)|0,Kr&=67108863,P=Math.imul(nt,wt),l=Math.imul(nt,dt),l=l+Math.imul(it,wt)|0,A=Math.imul(it,dt),P=P+Math.imul(J,yt)|0,l=l+Math.imul(J,_t)|0,l=l+Math.imul(et,yt)|0,A=A+Math.imul(et,_t)|0,P=P+Math.imul(G,Bt)|0,l=l+Math.imul(G,Pt)|0,l=l+Math.imul(z,Bt)|0,A=A+Math.imul(z,Pt)|0,P=P+Math.imul(x,Dt)|0,l=l+Math.imul(x,Ft)|0,l=l+Math.imul(g,Dt)|0,A=A+Math.imul(g,Ft)|0,P=P+Math.imul(u,Ut)|0,l=l+Math.imul(u,At)|0,l=l+Math.imul(B,Ut)|0,A=A+Math.imul(B,At)|0,P=P+Math.imul(L,zt)|0,l=l+Math.imul(L,It)|0,l=l+Math.imul(N,zt)|0,A=A+Math.imul(N,It)|0,P=P+Math.imul(_,Lt)|0,l=l+Math.imul(_,Rt)|0,l=l+Math.imul(w,Lt)|0,A=A+Math.imul(w,Rt)|0,P=P+Math.imul(K,Ot)|0,l=l+Math.imul(K,qt)|0,l=l+Math.imul(U,Ot)|0,A=A+Math.imul(U,qt)|0,P=P+Math.imul(Mt,Nt)|0,l=l+Math.imul(Mt,kt)|0,l=l+Math.imul(vt,Nt)|0,A=A+Math.imul(vt,kt)|0;var Qr=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Qr>>>26)|0,Qr&=67108863,P=Math.imul(nt,yt),l=Math.imul(nt,_t),l=l+Math.imul(it,yt)|0,A=Math.imul(it,_t),P=P+Math.imul(J,Bt)|0,l=l+Math.imul(J,Pt)|0,l=l+Math.imul(et,Bt)|0,A=A+Math.imul(et,Pt)|0,P=P+Math.imul(G,Dt)|0,l=l+Math.imul(G,Ft)|0,l=l+Math.imul(z,Dt)|0,A=A+Math.imul(z,Ft)|0,P=P+Math.imul(x,Ut)|0,l=l+Math.imul(x,At)|0,l=l+Math.imul(g,Ut)|0,A=A+Math.imul(g,At)|0,P=P+Math.imul(u,zt)|0,l=l+Math.imul(u,It)|0,l=l+Math.imul(B,zt)|0,A=A+Math.imul(B,It)|0,P=P+Math.imul(L,Lt)|0,l=l+Math.imul(L,Rt)|0,l=l+Math.imul(N,Lt)|0,A=A+Math.imul(N,Rt)|0,P=P+Math.imul(_,Ot)|0,l=l+Math.imul(_,qt)|0,l=l+Math.imul(w,Ot)|0,A=A+Math.imul(w,qt)|0,P=P+Math.imul(K,Nt)|0,l=l+Math.imul(K,kt)|0,l=l+Math.imul(U,Nt)|0,A=A+Math.imul(U,kt)|0;var Jr=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(Jr>>>26)|0,Jr&=67108863,P=Math.imul(nt,Bt),l=Math.imul(nt,Pt),l=l+Math.imul(it,Bt)|0,A=Math.imul(it,Pt),P=P+Math.imul(J,Dt)|0,l=l+Math.imul(J,Ft)|0,l=l+Math.imul(et,Dt)|0,A=A+Math.imul(et,Ft)|0,P=P+Math.imul(G,Ut)|0,l=l+Math.imul(G,At)|0,l=l+Math.imul(z,Ut)|0,A=A+Math.imul(z,At)|0,P=P+Math.imul(x,zt)|0,l=l+Math.imul(x,It)|0,l=l+Math.imul(g,zt)|0,A=A+Math.imul(g,It)|0,P=P+Math.imul(u,Lt)|0,l=l+Math.imul(u,Rt)|0,l=l+Math.imul(B,Lt)|0,A=A+Math.imul(B,Rt)|0,P=P+Math.imul(L,Ot)|0,l=l+Math.imul(L,qt)|0,l=l+Math.imul(N,Ot)|0,A=A+Math.imul(N,qt)|0,P=P+Math.imul(_,Nt)|0,l=l+Math.imul(_,kt)|0,l=l+Math.imul(w,Nt)|0,A=A+Math.imul(w,kt)|0;var jr=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(jr>>>26)|0,jr&=67108863,P=Math.imul(nt,Dt),l=Math.imul(nt,Ft),l=l+Math.imul(it,Dt)|0,A=Math.imul(it,Ft),P=P+Math.imul(J,Ut)|0,l=l+Math.imul(J,At)|0,l=l+Math.imul(et,Ut)|0,A=A+Math.imul(et,At)|0,P=P+Math.imul(G,zt)|0,l=l+Math.imul(G,It)|0,l=l+Math.imul(z,zt)|0,A=A+Math.imul(z,It)|0,P=P+Math.imul(x,Lt)|0,l=l+Math.imul(x,Rt)|0,l=l+Math.imul(g,Lt)|0,A=A+Math.imul(g,Rt)|0,P=P+Math.imul(u,Ot)|0,l=l+Math.imul(u,qt)|0,l=l+Math.imul(B,Ot)|0,A=A+Math.imul(B,qt)|0,P=P+Math.imul(L,Nt)|0,l=l+Math.imul(L,kt)|0,l=l+Math.imul(N,Nt)|0,A=A+Math.imul(N,kt)|0;var tn=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(tn>>>26)|0,tn&=67108863,P=Math.imul(nt,Ut),l=Math.imul(nt,At),l=l+Math.imul(it,Ut)|0,A=Math.imul(it,At),P=P+Math.imul(J,zt)|0,l=l+Math.imul(J,It)|0,l=l+Math.imul(et,zt)|0,A=A+Math.imul(et,It)|0,P=P+Math.imul(G,Lt)|0,l=l+Math.imul(G,Rt)|0,l=l+Math.imul(z,Lt)|0,A=A+Math.imul(z,Rt)|0,P=P+Math.imul(x,Ot)|0,l=l+Math.imul(x,qt)|0,l=l+Math.imul(g,Ot)|0,A=A+Math.imul(g,qt)|0,P=P+Math.imul(u,Nt)|0,l=l+Math.imul(u,kt)|0,l=l+Math.imul(B,Nt)|0,A=A+Math.imul(B,kt)|0;var en=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(en>>>26)|0,en&=67108863,P=Math.imul(nt,zt),l=Math.imul(nt,It),l=l+Math.imul(it,zt)|0,A=Math.imul(it,It),P=P+Math.imul(J,Lt)|0,l=l+Math.imul(J,Rt)|0,l=l+Math.imul(et,Lt)|0,A=A+Math.imul(et,Rt)|0,P=P+Math.imul(G,Ot)|0,l=l+Math.imul(G,qt)|0,l=l+Math.imul(z,Ot)|0,A=A+Math.imul(z,qt)|0,P=P+Math.imul(x,Nt)|0,l=l+Math.imul(x,kt)|0,l=l+Math.imul(g,Nt)|0,A=A+Math.imul(g,kt)|0;var rn=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(rn>>>26)|0,rn&=67108863,P=Math.imul(nt,Lt),l=Math.imul(nt,Rt),l=l+Math.imul(it,Lt)|0,A=Math.imul(it,Rt),P=P+Math.imul(J,Ot)|0,l=l+Math.imul(J,qt)|0,l=l+Math.imul(et,Ot)|0,A=A+Math.imul(et,qt)|0,P=P+Math.imul(G,Nt)|0,l=l+Math.imul(G,kt)|0,l=l+Math.imul(z,Nt)|0,A=A+Math.imul(z,kt)|0;var nn=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(nn>>>26)|0,nn&=67108863,P=Math.imul(nt,Ot),l=Math.imul(nt,qt),l=l+Math.imul(it,Ot)|0,A=Math.imul(it,qt),P=P+Math.imul(J,Nt)|0,l=l+Math.imul(J,kt)|0,l=l+Math.imul(et,Nt)|0,A=A+Math.imul(et,kt)|0;var on=(O+P|0)+((l&8191)<<13)|0;O=(A+(l>>>13)|0)+(on>>>26)|0,on&=67108863,P=Math.imul(nt,Nt),l=Math.imul(nt,kt),l=l+Math.imul(it,Nt)|0,A=Math.imul(it,kt);var an=(O+P|0)+((l&8191)<<13)|0;return O=(A+(l>>>13)|0)+(an>>>26)|0,an&=67108863,E[0]=qe,E[1]=Ne,E[2]=Ve,E[3]=Zt,E[4]=Xr,E[5]=Hr,E[6]=Zr,E[7]=$r,E[8]=Wr,E[9]=Kr,E[10]=Qr,E[11]=Jr,E[12]=jr,E[13]=tn,E[14]=en,E[15]=rn,E[16]=nn,E[17]=on,E[18]=an,O!==0&&(E[19]=O,b.length++),b};Math.imul||(R=k);function q(F,s,p){p.negative=s.negative^F.negative,p.length=F.length+s.length;for(var b=0,y=0,T=0;T<p.length-1;T++){var E=y;y=0;for(var O=b&67108863,P=Math.min(T,s.length-1),l=Math.max(0,T-F.length+1);l<=P;l++){var A=T-l,ot=F.words[A]|0,st=s.words[l]|0,ut=ot*st,ft=ut&67108863;E=E+(ut/67108864|0)|0,ft=ft+O|0,O=ft&67108863,E=E+(ft>>>26)|0,y+=E>>>26,E&=67108863}p.words[T]=O,b=E,E=y}return b!==0?p.words[T]=b:p.length--,p.strip()}function V(F,s,p){var b=new X;return b.mulp(F,s,p)}i.prototype.mulTo=function(s,p){var b,y=this.length+s.length;return this.length===10&&s.length===10?b=R(this,s,p):y<63?b=k(this,s,p):y<1024?b=q(this,s,p):b=V(this,s,p),b};function X(F,s){this.x=F,this.y=s}X.prototype.makeRBT=function(s){for(var p=new Array(s),b=i.prototype._countBits(s)-1,y=0;y<s;y++)p[y]=this.revBin(y,b,s);return p},X.prototype.revBin=function(s,p,b){if(s===0||s===b-1)return s;for(var y=0,T=0;T<p;T++)y|=(s&1)<<p-T-1,s>>=1;return y},X.prototype.permute=function(s,p,b,y,T,E){for(var O=0;O<E;O++)y[O]=p[s[O]],T[O]=b[s[O]]},X.prototype.transform=function(s,p,b,y,T,E){this.permute(E,s,p,b,y,T);for(var O=1;O<T;O<<=1)for(var P=O<<1,l=Math.cos(2*Math.PI/P),A=Math.sin(2*Math.PI/P),ot=0;ot<T;ot+=P)for(var st=l,ut=A,ft=0;ft<O;ft++){var Mt=b[ot+ft],vt=y[ot+ft],Y=b[ot+ft+O],K=y[ot+ft+O],U=st*Y-ut*K;K=st*K+ut*Y,Y=U,b[ot+ft]=Mt+Y,y[ot+ft]=vt+K,b[ot+ft+O]=Mt-Y,y[ot+ft+O]=vt-K,ft!==P&&(U=l*st-A*ut,ut=l*ut+A*st,st=U)}},X.prototype.guessLen13b=function(s,p){var b=Math.max(p,s)|1,y=b&1,T=0;for(b=b/2|0;b;b=b>>>1)T++;return 1<<T+1+y},X.prototype.conjugate=function(s,p,b){if(!(b<=1))for(var y=0;y<b/2;y++){var T=s[y];s[y]=s[b-y-1],s[b-y-1]=T,T=p[y],p[y]=-p[b-y-1],p[b-y-1]=-T}},X.prototype.normalize13b=function(s,p){for(var b=0,y=0;y<p/2;y++){var T=Math.round(s[2*y+1]/p)*8192+Math.round(s[2*y]/p)+b;s[y]=T&67108863,T<67108864?b=0:b=T/67108864|0}return s},X.prototype.convert13b=function(s,p,b,y){for(var T=0,E=0;E<p;E++)T=T+(s[E]|0),b[2*E]=T&8191,T=T>>>13,b[2*E+1]=T&8191,T=T>>>13;for(E=2*p;E<y;++E)b[E]=0;n(T===0),n((T&-8192)===0)},X.prototype.stub=function(s){for(var p=new Array(s),b=0;b<s;b++)p[b]=0;return p},X.prototype.mulp=function(s,p,b){var y=2*this.guessLen13b(s.length,p.length),T=this.makeRBT(y),E=this.stub(y),O=new Array(y),P=new Array(y),l=new Array(y),A=new Array(y),ot=new Array(y),st=new Array(y),ut=b.words;ut.length=y,this.convert13b(s.words,s.length,O,y),this.convert13b(p.words,p.length,A,y),this.transform(O,E,P,l,y,T),this.transform(A,E,ot,st,y,T);for(var ft=0;ft<y;ft++){var Mt=P[ft]*ot[ft]-l[ft]*st[ft];l[ft]=P[ft]*st[ft]+l[ft]*ot[ft],P[ft]=Mt}return this.conjugate(P,l,y),this.transform(P,l,ut,E,y,T),this.conjugate(ut,E,y),this.normalize13b(ut,y),b.negative=s.negative^p.negative,b.length=s.length+p.length,b.strip()},i.prototype.mul=function(s){var p=new i(null);return p.words=new Array(this.length+s.length),this.mulTo(s,p)},i.prototype.mulf=function(s){var p=new i(null);return p.words=new Array(this.length+s.length),V(this,s,p)},i.prototype.imul=function(s){return this.clone().mulTo(s,this)},i.prototype.imuln=function(s){n(typeof s=="number"),n(s<67108864);for(var p=0,b=0;b<this.length;b++){var y=(this.words[b]|0)*s,T=(y&67108863)+(p&67108863);p>>=26,p+=y/67108864|0,p+=T>>>26,this.words[b]=T&67108863}return p!==0&&(this.words[b]=p,this.length++),this.length=s===0?1:this.length,this},i.prototype.muln=function(s){return this.clone().imuln(s)},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.imul(this.clone())},i.prototype.pow=function(s){var p=C(s);if(p.length===0)return new i(1);for(var b=this,y=0;y<p.length&&p[y]===0;y++,b=b.sqr());if(++y<p.length)for(var T=b.sqr();y<p.length;y++,T=T.sqr())p[y]!==0&&(b=b.mul(T));return b},i.prototype.iushln=function(s){n(typeof s=="number"&&s>=0);var p=s%26,b=(s-p)/26,y=67108863>>>26-p<<26-p,T;if(p!==0){var E=0;for(T=0;T<this.length;T++){var O=this.words[T]&y,P=(this.words[T]|0)-O<<p;this.words[T]=P|E,E=O>>>26-p}E&&(this.words[T]=E,this.length++)}if(b!==0){for(T=this.length-1;T>=0;T--)this.words[T+b]=this.words[T];for(T=0;T<b;T++)this.words[T]=0;this.length+=b}return this.strip()},i.prototype.ishln=function(s){return n(this.negative===0),this.iushln(s)},i.prototype.iushrn=function(s,p,b){n(typeof s=="number"&&s>=0);var y;p?y=(p-p%26)/26:y=0;var T=s%26,E=Math.min((s-T)/26,this.length),O=67108863^67108863>>>T<<T,P=b;if(y-=E,y=Math.max(0,y),P){for(var l=0;l<E;l++)P.words[l]=this.words[l];P.length=E}if(E!==0)if(this.length>E)for(this.length-=E,l=0;l<this.length;l++)this.words[l]=this.words[l+E];else this.words[0]=0,this.length=1;var A=0;for(l=this.length-1;l>=0&&(A!==0||l>=y);l--){var ot=this.words[l]|0;this.words[l]=A<<26-T|ot>>>T,A=ot&O}return P&&A!==0&&(P.words[P.length++]=A),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.ishrn=function(s,p,b){return n(this.negative===0),this.iushrn(s,p,b)},i.prototype.shln=function(s){return this.clone().ishln(s)},i.prototype.ushln=function(s){return this.clone().iushln(s)},i.prototype.shrn=function(s){return this.clone().ishrn(s)},i.prototype.ushrn=function(s){return this.clone().iushrn(s)},i.prototype.testn=function(s){n(typeof s=="number"&&s>=0);var p=s%26,b=(s-p)/26,y=1<<p;if(this.length<=b)return!1;var T=this.words[b];return!!(T&y)},i.prototype.imaskn=function(s){n(typeof s=="number"&&s>=0);var p=s%26,b=(s-p)/26;if(n(this.negative===0,"imaskn works only with positive numbers"),this.length<=b)return this;if(p!==0&&b++,this.length=Math.min(b,this.length),p!==0){var y=67108863^67108863>>>p<<p;this.words[this.length-1]&=y}return this.length===0&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.maskn=function(s){return this.clone().imaskn(s)},i.prototype.iaddn=function(s){return n(typeof s=="number"),n(s<67108864),s<0?this.isubn(-s):this.negative!==0?this.length===1&&(this.words[0]|0)<s?(this.words[0]=s-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(s),this.negative=1,this):this._iaddn(s)},i.prototype._iaddn=function(s){this.words[0]+=s;for(var p=0;p<this.length&&this.words[p]>=67108864;p++)this.words[p]-=67108864,p===this.length-1?this.words[p+1]=1:this.words[p+1]++;return this.length=Math.max(this.length,p+1),this},i.prototype.isubn=function(s){if(n(typeof s=="number"),n(s<67108864),s<0)return this.iaddn(-s);if(this.negative!==0)return this.negative=0,this.iaddn(s),this.negative=1,this;if(this.words[0]-=s,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var p=0;p<this.length&&this.words[p]<0;p++)this.words[p]+=67108864,this.words[p+1]-=1;return this.strip()},i.prototype.addn=function(s){return this.clone().iaddn(s)},i.prototype.subn=function(s){return this.clone().isubn(s)},i.prototype.iabs=function(){return this.negative=0,this},i.prototype.abs=function(){return this.clone().iabs()},i.prototype._ishlnsubmul=function(s,p,b){var y=s.length+b,T;this._expand(y);var E,O=0;for(T=0;T<s.length;T++){E=(this.words[T+b]|0)+O;var P=(s.words[T]|0)*p;E-=P&67108863,O=(E>>26)-(P/67108864|0),this.words[T+b]=E&67108863}for(;T<this.length-b;T++)E=(this.words[T+b]|0)+O,O=E>>26,this.words[T+b]=E&67108863;if(O===0)return this.strip();for(n(O===-1),O=0,T=0;T<this.length;T++)E=-(this.words[T]|0)+O,O=E>>26,this.words[T]=E&67108863;return this.negative=1,this.strip()},i.prototype._wordDiv=function(s,p){var b=this.length-s.length,y=this.clone(),T=s,E=T.words[T.length-1]|0,O=this._countBits(E);b=26-O,b!==0&&(T=T.ushln(b),y.iushln(b),E=T.words[T.length-1]|0);var P=y.length-T.length,l;if(p!=="mod"){l=new i(null),l.length=P+1,l.words=new Array(l.length);for(var A=0;A<l.length;A++)l.words[A]=0}var ot=y.clone()._ishlnsubmul(T,1,P);ot.negative===0&&(y=ot,l&&(l.words[P]=1));for(var st=P-1;st>=0;st--){var ut=(y.words[T.length+st]|0)*67108864+(y.words[T.length+st-1]|0);for(ut=Math.min(ut/E|0,67108863),y._ishlnsubmul(T,ut,st);y.negative!==0;)ut--,y.negative=0,y._ishlnsubmul(T,1,st),y.isZero()||(y.negative^=1);l&&(l.words[st]=ut)}return l&&l.strip(),y.strip(),p!=="div"&&b!==0&&y.iushrn(b),{div:l||null,mod:y}},i.prototype.divmod=function(s,p,b){if(n(!s.isZero()),this.isZero())return{div:new i(0),mod:new i(0)};var y,T,E;return this.negative!==0&&s.negative===0?(E=this.neg().divmod(s,p),p!=="mod"&&(y=E.div.neg()),p!=="div"&&(T=E.mod.neg(),b&&T.negative!==0&&T.iadd(s)),{div:y,mod:T}):this.negative===0&&s.negative!==0?(E=this.divmod(s.neg(),p),p!=="mod"&&(y=E.div.neg()),{div:y,mod:E.mod}):(this.negative&s.negative)!==0?(E=this.neg().divmod(s.neg(),p),p!=="div"&&(T=E.mod.neg(),b&&T.negative!==0&&T.isub(s)),{div:E.div,mod:T}):s.length>this.length||this.cmp(s)<0?{div:new i(0),mod:this}:s.length===1?p==="div"?{div:this.divn(s.words[0]),mod:null}:p==="mod"?{div:null,mod:new i(this.modn(s.words[0]))}:{div:this.divn(s.words[0]),mod:new i(this.modn(s.words[0]))}:this._wordDiv(s,p)},i.prototype.div=function(s){return this.divmod(s,"div",!1).div},i.prototype.mod=function(s){return this.divmod(s,"mod",!1).mod},i.prototype.umod=function(s){return this.divmod(s,"mod",!0).mod},i.prototype.divRound=function(s){var p=this.divmod(s);if(p.mod.isZero())return p.div;var b=p.div.negative!==0?p.mod.isub(s):p.mod,y=s.ushrn(1),T=s.andln(1),E=b.cmp(y);return E<0||T===1&&E===0?p.div:p.div.negative!==0?p.div.isubn(1):p.div.iaddn(1)},i.prototype.modn=function(s){n(s<=67108863);for(var p=(1<<26)%s,b=0,y=this.length-1;y>=0;y--)b=(p*b+(this.words[y]|0))%s;return b},i.prototype.idivn=function(s){n(s<=67108863);for(var p=0,b=this.length-1;b>=0;b--){var y=(this.words[b]|0)+p*67108864;this.words[b]=y/s|0,p=y%s}return this.strip()},i.prototype.divn=function(s){return this.clone().idivn(s)},i.prototype.egcd=function(s){n(s.negative===0),n(!s.isZero());var p=this,b=s.clone();p.negative!==0?p=p.umod(s):p=p.clone();for(var y=new i(1),T=new i(0),E=new i(0),O=new i(1),P=0;p.isEven()&&b.isEven();)p.iushrn(1),b.iushrn(1),++P;for(var l=b.clone(),A=p.clone();!p.isZero();){for(var ot=0,st=1;(p.words[0]&st)===0&&ot<26;++ot,st<<=1);if(ot>0)for(p.iushrn(ot);ot-- >0;)(y.isOdd()||T.isOdd())&&(y.iadd(l),T.isub(A)),y.iushrn(1),T.iushrn(1);for(var ut=0,ft=1;(b.words[0]&ft)===0&&ut<26;++ut,ft<<=1);if(ut>0)for(b.iushrn(ut);ut-- >0;)(E.isOdd()||O.isOdd())&&(E.iadd(l),O.isub(A)),E.iushrn(1),O.iushrn(1);p.cmp(b)>=0?(p.isub(b),y.isub(E),T.isub(O)):(b.isub(p),E.isub(y),O.isub(T))}return{a:E,b:O,gcd:b.iushln(P)}},i.prototype._invmp=function(s){n(s.negative===0),n(!s.isZero());var p=this,b=s.clone();p.negative!==0?p=p.umod(s):p=p.clone();for(var y=new i(1),T=new i(0),E=b.clone();p.cmpn(1)>0&&b.cmpn(1)>0;){for(var O=0,P=1;(p.words[0]&P)===0&&O<26;++O,P<<=1);if(O>0)for(p.iushrn(O);O-- >0;)y.isOdd()&&y.iadd(E),y.iushrn(1);for(var l=0,A=1;(b.words[0]&A)===0&&l<26;++l,A<<=1);if(l>0)for(b.iushrn(l);l-- >0;)T.isOdd()&&T.iadd(E),T.iushrn(1);p.cmp(b)>=0?(p.isub(b),y.isub(T)):(b.isub(p),T.isub(y))}var ot;return p.cmpn(1)===0?ot=y:ot=T,ot.cmpn(0)<0&&ot.iadd(s),ot},i.prototype.gcd=function(s){if(this.isZero())return s.abs();if(s.isZero())return this.abs();var p=this.clone(),b=s.clone();p.negative=0,b.negative=0;for(var y=0;p.isEven()&&b.isEven();y++)p.iushrn(1),b.iushrn(1);do{for(;p.isEven();)p.iushrn(1);for(;b.isEven();)b.iushrn(1);var T=p.cmp(b);if(T<0){var E=p;p=b,b=E}else if(T===0||b.cmpn(1)===0)break;p.isub(b)}while(!0);return b.iushln(y)},i.prototype.invm=function(s){return this.egcd(s).a.umod(s)},i.prototype.isEven=function(){return(this.words[0]&1)===0},i.prototype.isOdd=function(){return(this.words[0]&1)===1},i.prototype.andln=function(s){return this.words[0]&s},i.prototype.bincn=function(s){n(typeof s=="number");var p=s%26,b=(s-p)/26,y=1<<p;if(this.length<=b)return this._expand(b+1),this.words[b]|=y,this;for(var T=y,E=b;T!==0&&E<this.length;E++){var O=this.words[E]|0;O+=T,T=O>>>26,O&=67108863,this.words[E]=O}return T!==0&&(this.words[E]=T,this.length++),this},i.prototype.isZero=function(){return this.length===1&&this.words[0]===0},i.prototype.cmpn=function(s){var p=s<0;if(this.negative!==0&&!p)return-1;if(this.negative===0&&p)return 1;this.strip();var b;if(this.length>1)b=1;else{p&&(s=-s),n(s<=67108863,"Number is too big");var y=this.words[0]|0;b=y===s?0:y<s?-1:1}return this.negative!==0?-b|0:b},i.prototype.cmp=function(s){if(this.negative!==0&&s.negative===0)return-1;if(this.negative===0&&s.negative!==0)return 1;var p=this.ucmp(s);return this.negative!==0?-p|0:p},i.prototype.ucmp=function(s){if(this.length>s.length)return 1;if(this.length<s.length)return-1;for(var p=0,b=this.length-1;b>=0;b--){var y=this.words[b]|0,T=s.words[b]|0;if(y!==T){y<T?p=-1:y>T&&(p=1);break}}return p},i.prototype.gtn=function(s){return this.cmpn(s)===1},i.prototype.gt=function(s){return this.cmp(s)===1},i.prototype.gten=function(s){return this.cmpn(s)>=0},i.prototype.gte=function(s){return this.cmp(s)>=0},i.prototype.ltn=function(s){return this.cmpn(s)===-1},i.prototype.lt=function(s){return this.cmp(s)===-1},i.prototype.lten=function(s){return this.cmpn(s)<=0},i.prototype.lte=function(s){return this.cmp(s)<=0},i.prototype.eqn=function(s){return this.cmpn(s)===0},i.prototype.eq=function(s){return this.cmp(s)===0},i.red=function(s){return new tt(s)},i.prototype.toRed=function(s){return n(!this.red,"Already a number in reduction context"),n(this.negative===0,"red works only with positives"),s.convertTo(this)._forceRed(s)},i.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},i.prototype._forceRed=function(s){return this.red=s,this},i.prototype.forceRed=function(s){return n(!this.red,"Already a number in reduction context"),this._forceRed(s)},i.prototype.redAdd=function(s){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,s)},i.prototype.redIAdd=function(s){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,s)},i.prototype.redSub=function(s){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,s)},i.prototype.redISub=function(s){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,s)},i.prototype.redShl=function(s){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,s)},i.prototype.redMul=function(s){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,s),this.red.mul(this,s)},i.prototype.redIMul=function(s){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,s),this.red.imul(this,s)},i.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(s){return n(this.red&&!s.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,s)};var $={k256:null,p224:null,p192:null,p25519:null};function Q(F,s){this.name=F,this.p=new i(s,16),this.n=this.p.bitLength(),this.k=new i(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}Q.prototype._tmp=function(){var s=new i(null);return s.words=new Array(Math.ceil(this.n/13)),s},Q.prototype.ireduce=function(s){var p=s,b;do this.split(p,this.tmp),p=this.imulK(p),p=p.iadd(this.tmp),b=p.bitLength();while(b>this.n);var y=b<this.n?-1:p.ucmp(this.p);return y===0?(p.words[0]=0,p.length=1):y>0?p.isub(this.p):p.strip!==void 0?p.strip():p._strip(),p},Q.prototype.split=function(s,p){s.iushrn(this.n,0,p)},Q.prototype.imulK=function(s){return s.imul(this.k)};function j(){Q.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}r(j,Q),j.prototype.split=function(s,p){for(var b=4194303,y=Math.min(s.length,9),T=0;T<y;T++)p.words[T]=s.words[T];if(p.length=y,s.length<=9){s.words[0]=0,s.length=1;return}var E=s.words[9];for(p.words[p.length++]=E&b,T=10;T<s.length;T++){var O=s.words[T]|0;s.words[T-10]=(O&b)<<4|E>>>22,E=O}E>>>=22,s.words[T-10]=E,E===0&&s.length>10?s.length-=10:s.length-=9},j.prototype.imulK=function(s){s.words[s.length]=0,s.words[s.length+1]=0,s.length+=2;for(var p=0,b=0;b<s.length;b++){var y=s.words[b]|0;p+=y*977,s.words[b]=p&67108863,p=y*64+(p/67108864|0)}return s.words[s.length-1]===0&&(s.length--,s.words[s.length-1]===0&&s.length--),s};function H(){Q.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}r(H,Q);function W(){Q.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}r(W,Q);function at(){Q.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}r(at,Q),at.prototype.imulK=function(s){for(var p=0,b=0;b<s.length;b++){var y=(s.words[b]|0)*19+p,T=y&67108863;y>>>=26,s.words[b]=T,p=y}return p!==0&&(s.words[s.length++]=p),s},i._prime=function(s){if($[s])return $[s];var p;if(s==="k256")p=new j;else if(s==="p224")p=new H;else if(s==="p192")p=new W;else if(s==="p25519")p=new at;else throw new Error("Unknown prime "+s);return $[s]=p,p};function tt(F){if(typeof F=="string"){var s=i._prime(F);this.m=s.p,this.prime=s}else n(F.gtn(1),"modulus must be greater than 1"),this.m=F,this.prime=null}tt.prototype._verify1=function(s){n(s.negative===0,"red works only with positives"),n(s.red,"red works only with red numbers")},tt.prototype._verify2=function(s,p){n((s.negative|p.negative)===0,"red works only with positives"),n(s.red&&s.red===p.red,"red works only with red numbers")},tt.prototype.imod=function(s){return this.prime?this.prime.ireduce(s)._forceRed(this):s.umod(this.m)._forceRed(this)},tt.prototype.neg=function(s){return s.isZero()?s.clone():this.m.sub(s)._forceRed(this)},tt.prototype.add=function(s,p){this._verify2(s,p);var b=s.add(p);return b.cmp(this.m)>=0&&b.isub(this.m),b._forceRed(this)},tt.prototype.iadd=function(s,p){this._verify2(s,p);var b=s.iadd(p);return b.cmp(this.m)>=0&&b.isub(this.m),b},tt.prototype.sub=function(s,p){this._verify2(s,p);var b=s.sub(p);return b.cmpn(0)<0&&b.iadd(this.m),b._forceRed(this)},tt.prototype.isub=function(s,p){this._verify2(s,p);var b=s.isub(p);return b.cmpn(0)<0&&b.iadd(this.m),b},tt.prototype.shl=function(s,p){return this._verify1(s),this.imod(s.ushln(p))},tt.prototype.imul=function(s,p){return this._verify2(s,p),this.imod(s.imul(p))},tt.prototype.mul=function(s,p){return this._verify2(s,p),this.imod(s.mul(p))},tt.prototype.isqr=function(s){return this.imul(s,s.clone())},tt.prototype.sqr=function(s){return this.mul(s,s)},tt.prototype.sqrt=function(s){if(s.isZero())return s.clone();var p=this.m.andln(3);if(n(p%2===1),p===3){var b=this.m.add(new i(1)).iushrn(2);return this.pow(s,b)}for(var y=this.m.subn(1),T=0;!y.isZero()&&y.andln(1)===0;)T++,y.iushrn(1);n(!y.isZero());var E=new i(1).toRed(this),O=E.redNeg(),P=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new i(2*l*l).toRed(this);this.pow(l,P).cmp(O)!==0;)l.redIAdd(O);for(var A=this.pow(l,y),ot=this.pow(s,y.addn(1).iushrn(1)),st=this.pow(s,y),ut=T;st.cmp(E)!==0;){for(var ft=st,Mt=0;ft.cmp(E)!==0;Mt++)ft=ft.redSqr();n(Mt<ut);var vt=this.pow(A,new i(1).iushln(ut-Mt-1));ot=ot.redMul(vt),A=vt.redSqr(),st=st.redMul(A),ut=Mt}return ot},tt.prototype.invm=function(s){var p=s._invmp(this.m);return p.negative!==0?(p.negative=0,this.imod(p).redNeg()):this.imod(p)},tt.prototype.pow=function(s,p){if(p.isZero())return new i(1).toRed(this);if(p.cmpn(1)===0)return s.clone();var b=4,y=new Array(1<<b);y[0]=new i(1).toRed(this),y[1]=s;for(var T=2;T<y.length;T++)y[T]=this.mul(y[T-1],s);var E=y[0],O=0,P=0,l=p.bitLength()%26;for(l===0&&(l=26),T=p.length-1;T>=0;T--){for(var A=p.words[T],ot=l-1;ot>=0;ot--){var st=A>>ot&1;if(E!==y[0]&&(E=this.sqr(E)),st===0&&O===0){P=0;continue}O<<=1,O|=st,P++,!(P!==b&&(T!==0||ot!==0))&&(E=this.mul(E,y[O]),P=0,O=0)}l=26}return E},tt.prototype.convertTo=function(s){var p=s.umod(this.m);return p===s?p.clone():p},tt.prototype.convertFrom=function(s){var p=s.clone();return p.red=null,p},i.mont=function(s){return new rt(s)};function rt(F){tt.call(this,F),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new i(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}r(rt,tt),rt.prototype.convertTo=function(s){return this.imod(s.ushln(this.shift))},rt.prototype.convertFrom=function(s){var p=this.imod(s.mul(this.rinv));return p.red=null,p},rt.prototype.imul=function(s,p){if(s.isZero()||p.isZero())return s.words[0]=0,s.length=1,s;var b=s.imul(p),y=b.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),T=b.isub(y).iushrn(this.shift),E=T;return T.cmp(this.m)>=0?E=T.isub(this.m):T.cmpn(0)<0&&(E=T.iadd(this.m)),E._forceRed(this)},rt.prototype.mul=function(s,p){if(s.isZero()||p.isZero())return new i(0)._forceRed(this);var b=s.mul(p),y=b.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),T=b.isub(y).iushrn(this.shift),E=T;return T.cmp(this.m)>=0?E=T.isub(this.m):T.cmpn(0)<0&&(E=T.iadd(this.m)),E._forceRed(this)},rt.prototype.invm=function(s){var p=this.imod(s._invmp(this.m).mul(this.r2));return p._forceRed(this)}})(typeof kn>"u"||kn,ga)});var Cn=xt((ah,da)=>{"use strict";var oh=ur();da.exports=If;function If(t){return t&&typeof t=="object"&&!!t.words}});var Ma=xt((sh,xa)=>{"use strict";var wa=Cn();xa.exports=Ef;function Ef(t){return Array.isArray(t)&&t.length===2&&wa(t[0])&&wa(t[1])}});var qr=xt((uh,Yt)=>{var mn=!1;if(typeof Float64Array<"u")if(ce=new Float64Array(1),re=new Uint32Array(ce.buffer),ce[0]=1,mn=!0,re[1]===1072693248){let t=function(r,i){return re[0]=r,re[1]=i,ce[0]},e=function(r){return ce[0]=r,re[0]},n=function(r){return ce[0]=r,re[1]};Gf=t,Lf=e,Rf=n,Yt.exports=function(i){return ce[0]=i,[re[0],re[1]]},Yt.exports.pack=t,Yt.exports.lo=e,Yt.exports.hi=n}else if(re[0]===1072693248){let t=function(r,i){return re[1]=r,re[0]=i,ce[0]},e=function(r){return ce[0]=r,re[1]},n=function(r){return ce[0]=r,re[0]};Of=t,qf=e,Nf=n,Yt.exports=function(i){return ce[0]=i,[re[1],re[0]]},Yt.exports.pack=t,Yt.exports.lo=e,Yt.exports.hi=n}else mn=!1;var ce,re,Gf,Lf,Rf,Of,qf,Nf;if(!mn){let t=function(r,i){return le.writeUInt32LE(r,0,!0),le.writeUInt32LE(i,4,!0),le.readDoubleLE(0,!0)},e=function(r){return le.writeDoubleLE(r,0,!0),le.readUInt32LE(0,!0)},n=function(r){return le.writeDoubleLE(r,0,!0),le.readUInt32LE(4,!0)};Vf=t,kf=e,Cf=n,le=new Buffer(8),Yt.exports=function(i){return le.writeDoubleLE(i,0,!0),[le.readUInt32LE(0,!0),le.readUInt32LE(4,!0)]},Yt.exports.pack=t,Yt.exports.lo=e,Yt.exports.hi=n}var le,Vf,kf,Cf;Yt.exports.sign=function(t){return Yt.exports.hi(t)>>>31};Yt.exports.exponent=function(t){var e=Yt.exports.hi(t);return(e<<1>>>21)-1023};Yt.exports.fraction=function(t){var e=Yt.exports.lo(t),n=Yt.exports.hi(t),r=n&(1<<20)-1;return n&2146435072&&(r+=1<<20),[e,r]};Yt.exports.denormalized=function(t){var e=Yt.exports.hi(t);return!(e&2146435072)}});var Yn=xt((fh,_a)=>{"use strict";var ya=ur(),mf=qr();_a.exports=Yf;function Yf(t){var e=mf.exponent(t);return e<52?new ya(t):new ya(t*Math.pow(2,52-e)).ushln(e-52)}});var Sa=xt((ch,ba)=>{"use strict";var Xf=ur();ba.exports=Hf;function Hf(t){return new Xf(t)}});var Nr=xt((lh,Ta)=>{"use strict";var Zf=ur();Ta.exports=$f;function $f(t){return t.cmp(new Zf(0))}});var Qe=xt((hh,Pa)=>{"use strict";var Vr=Yn(),Ba=Nr();Pa.exports=Wf;function Wf(t,e){var n=Ba(t),r=Ba(e);if(n===0)return[Vr(0),Vr(1)];if(r===0)return[Vr(0),Vr(0)];r<0&&(t=t.neg(),e=e.neg());var i=t.gcd(e);return i.cmpn(1)?[t.div(i),e.div(i)]:[t,e]}});var Xn=xt((vh,Da)=>{"use strict";var Kf=Qe();Da.exports=Qf;function Qf(t,e){return Kf(t[0].mul(e[1]),t[1].mul(e[0]))}});var kr=xt((ph,Ia)=>{"use strict";var Fa=Ma(),Ua=Cn(),Ge=Yn(),Aa=Sa(),Jf=Qe(),jf=Xn();Ia.exports=za;function za(t,e){if(Fa(t))return e?jf(t,za(e)):[t[0].clone(),t[1].clone()];var n=0,r,i;if(Ua(t))r=t.clone();else if(typeof t=="string")r=Aa(t);else{if(t===0)return[Ge(0),Ge(1)];if(t===Math.floor(t))r=Ge(t);else{for(;t!==Math.floor(t);)t=t*Math.pow(2,256),n-=256;r=Ge(t)}}if(Fa(e))r.mul(e[1]),i=e[0].clone();else if(Ua(e))i=e.clone();else if(typeof e=="string")i=Aa(e);else if(!e)i=Ge(1);else if(e===Math.floor(e))i=Ge(e);else{for(;e!==Math.floor(e);)e=e*Math.pow(2,256),n+=256;i=Ge(e)}return n>0?r=r.ushln(n):n<0&&(i=i.ushln(-n)),Jf(r,i)}});var Ga=xt((gh,Ea)=>{"use strict";Ea.exports=tc;function tc(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}});var Ra=xt((dh,La)=>{"use strict";var ec=Nr();La.exports=rc;function rc(t){var e=t.length,n=t.words,r=0;if(e===1)r=n[0];else if(e===2)r=n[0]+n[1]*67108864;else for(var i=0;i<e;i++){var o=n[i];r+=o*Math.pow(67108864,i)}return ec(t)*r}});var Va=xt((wh,Na)=>{"use strict";var Oa=qr(),qa=rr().countTrailingZeros;Na.exports=nc;function nc(t){var e=qa(Oa.lo(t));if(e<32)return e;var n=qa(Oa.hi(t));return n>20?52:n+32}});var Ca=xt((xh,ka)=>{"use strict";var Hn=Ra(),ic=Va();ka.exports=oc;function oc(t){var e=t[0],n=t[1];if(e.cmpn(0)===0)return 0;var r=e.abs().divmod(n.abs()),i=r.div,o=Hn(i),a=r.mod,f=e.negative!==n.negative?-1:1;if(a.cmpn(0)===0)return f*o;if(o){var h=ic(o)+4,v=Hn(a.ushln(h).divRound(n));return f*(o+v*Math.pow(2,-h))}else{var d=n.bitLength()-a.bitLength()+53,v=Hn(a.ushln(d).divRound(n));return d<1023?f*v*Math.pow(2,-d):(v*=Math.pow(2,-1023),f*v*Math.pow(2,1023-d))}}});var Ya=xt((Mh,ma)=>{"use strict";ma.exports=sc;var ac=kr();function sc(t){for(var e=new Array(t.length),n=0;n<t.length;++n)e[n]=ac(t[n]);return e}});var $a=xt((yh,Za)=>{"use strict";var Zn=qr(),Xa=Math.pow(2,-1074),Ha=-1>>>0;Za.exports=uc;function uc(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(t===0)return e<0?-Xa:Xa;var n=Zn.hi(t),r=Zn.lo(t);return e>t==t>0?r===Ha?(n+=1,r=0):r+=1:r===0?(r=Ha,n-=1):r-=1,Zn.pack(r,n)}});var $n=xt((_h,Wa)=>{"use strict";var fc=Qe();Wa.exports=cc;function cc(t,e){return fc(t[0].mul(e[0]),t[1].mul(e[1]))}});var Wn=xt((bh,Ka)=>{"use strict";var lc=Qe();Ka.exports=hc;function hc(t,e){return lc(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}});var ja=xt((Sh,Ja)=>{"use strict";var Qa=Nr();Ja.exports=vc;function vc(t){return Qa(t[0])*Qa(t[1])}});var es=xt((Th,ts)=>{"use strict";var pc=Wn();ts.exports=gc;function gc(t,e){for(var n=t.length,r=new Array(n),i=0;i<n;++i)r[i]=pc(t[i],e[i]);return r}});var ns=xt((Bh,rs)=>{"use strict";var dc=Qe();rs.exports=wc;function wc(t,e){return dc(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}});var os=xt((Ph,is)=>{"use strict";var xc=ns();is.exports=Mc;function Mc(t,e){for(var n=t.length,r=new Array(n),i=0;i<n;++i)r[i]=xc(t[i],e[i]);return r}});var ss=xt((Dh,as)=>{"use strict";var yc=kr(),_c=$n();as.exports=bc;function bc(t,e){for(var n=yc(e),r=t.length,i=new Array(r),o=0;o<r;++o)i[o]=_c(t[o],n);return i}});var ls=xt((Fh,cs)=>{"use strict";cs.exports=Fc;var us=$n(),Sc=Xn(),Tc=Wn(),Bc=ja(),Kn=es(),Pc=os(),Dc=ss();function fs(t,e){return Tc(us(t[0],e[1]),us(t[1],e[0]))}function Fc(t,e,n,r){var i=Kn(e,t),o=Kn(r,n),a=fs(i,o);if(Bc(a)===0)return null;var f=Kn(t,n),h=fs(o,f),v=Sc(h,a),d=Dc(i,v),D=Pc(t,d);return D}});var ys=xt((Uh,Ms)=>{"use strict";Ms.exports=Nc;var Uc=So(),Jn=la(),gs=va(),hs=kr(),vs=Ga(),Qn=Ca(),Cr=Ya(),oe=$a(),Ac=ls();function ps(t){var e=Qn(t);return[oe(e,-1/0),oe(e,1/0)]}function zc(t,e){for(var n=new Array(e.length),r=0;r<e.length;++r){var i=e[r],o=t[i[0]],a=t[i[1]];n[r]=[oe(Math.min(o[0],a[0]),-1/0),oe(Math.min(o[1],a[1]),-1/0),oe(Math.max(o[0],a[0]),1/0),oe(Math.max(o[1],a[1]),1/0)]}return n}function ds(t){for(var e=new Array(t.length),n=0;n<t.length;++n){var r=t[n];e[n]=[oe(r[0],-1/0),oe(r[1],-1/0),oe(r[0],1/0),oe(r[1],1/0)]}return e}function Ic(t,e,n){var r=[];return Jn(n,function(i,o){var a=e[i],f=e[o];if(!(a[0]===f[0]||a[0]===f[1]||a[1]===f[0]||a[1]===f[1])){var h=t[a[0]],v=t[a[1]],d=t[f[0]],D=t[f[1]];gs(h,v,d,D)&&r.push([i,o])}}),r}function Ec(t,e,n,r){var i=[];return Jn(n,r,function(o,a){var f=e[o];if(!(f[0]===a||f[1]===a)){var h=t[a],v=t[f[0]],d=t[f[1]];gs(v,d,h,h)&&i.push([o,a])}}),i}function Gc(t,e,n,r,i){var o,a,f=t.map(function(tt){return[hs(tt[0]),hs(tt[1])]});for(o=0;o<n.length;++o){var h=n[o];a=h[0];var v=h[1],d=e[a],D=e[v],C=Ac(Cr(t[d[0]]),Cr(t[d[1]]),Cr(t[D[0]]),Cr(t[D[1]]));if(C){var k=t.length;t.push([Qn(C[0]),Qn(C[1])]),f.push(C),r.push([a,k],[v,k])}}for(r.sort(function(tt,rt){if(tt[0]!==rt[0])return tt[0]-rt[0];var F=f[tt[1]],s=f[rt[1]];return vs(F[0],s[0])||vs(F[1],s[1])}),o=r.length-1;o>=0;--o){var R=r[o];a=R[0];var q=e[a],V=q[0],X=q[1],$=t[V],Q=t[X];if(($[0]-Q[0]||$[1]-Q[1])<0){var j=V;V=X,X=j}q[0]=V;var H=q[1]=R[1],W;for(i&&(W=q[2]);o>0&&r[o-1][0]===a;){var R=r[--o],at=R[1];i?e.push([H,at,W]):e.push([H,at]),H=at}i?e.push([H,X,W]):e.push([H,X])}return f}function ws(t,e,n){for(var r=e.length,i=new Uc(r),o=[],a=0;a<e.length;++a){var f=e[a],h=ps(f[0]),v=ps(f[1]);o.push([oe(h[0],-1/0),oe(v[0],-1/0),oe(h[1],1/0),oe(v[1],1/0)])}Jn(o,function(R,q){i.link(R,q)});for(var d=!0,D=new Array(r),a=0;a<r;++a){var C=i.find(a);C!==a&&(d=!1,t[C]=[Math.min(t[a][0],t[C][0]),Math.min(t[a][1],t[C][1])])}if(d)return null;for(var k=0,a=0;a<r;++a){var C=i.find(a);C===a?(D[a]=k,t[k++]=t[a]):D[a]=-1}t.length=k;for(var a=0;a<r;++a)D[a]<0&&(D[a]=D[i.find(a)]);return D}function Lc(t,e){return t[0]-e[0]||t[1]-e[1]}function Rc(t,e){var n=t[0]-e[0]||t[1]-e[1];return n||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}function xs(t,e,n){if(t.length!==0){if(e)for(var r=0;r<t.length;++r){var i=t[r],o=e[i[0]],a=e[i[1]];i[0]=Math.min(o,a),i[1]=Math.max(o,a)}else for(var r=0;r<t.length;++r){var i=t[r],o=i[0],a=i[1];i[0]=Math.min(o,a),i[1]=Math.max(o,a)}n?t.sort(Rc):t.sort(Lc);for(var f=1,r=1;r<t.length;++r){var h=t[r-1],v=t[r];v[0]===h[0]&&v[1]===h[1]&&(!n||v[2]===h[2])||(t[f++]=v)}t.length=f}}function Oc(t,e,n){var r=ws(t,[],ds(t));return xs(e,r,n),!!r}function qc(t,e,n){var r=zc(t,e),i=Ic(t,e,r),o=ds(t),a=Ec(t,e,r,o),f=Gc(t,e,i,a,n),h=ws(t,f,o);return xs(e,h,n),h?!0:i.length>0||a.length>0}function Nc(t,e,n){var r;if(n){r=e;for(var i=new Array(e.length),o=0;o<e.length;++o){var a=e[o];i[o]=[a[0],a[1],n[o]]}e=i}for(var f=Oc(t,e,!!n);qc(t,e,!!n);)f=!0;if(n&&f){r.length=0,n.length=0;for(var o=0;o<e.length;++o){var a=e[o];r.push([a[0],a[1]]),n.push(a[2])}}return f}});function ne(t,e,n,r,i,o,a){let f=t.createTexture({label:e,size:{width:n,height:r},format:o,usage:a,mipLevelCount:i,sampleCount:1,dimension:"2d"}),h=f.createView(),v=[];for(let D=0;D<i;D++)v.push(f.createView({label:e,format:o,dimension:"2d",aspect:"all",baseMipLevel:D,mipLevelCount:1,baseArrayLayer:0,arrayLayerCount:1}));let d=t.createSampler({label:`${e} sampler`,addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"});return{size:{width:n,height:r},texture:f,view:h,mip_view:v,sampler:d}}function Vt(t){return t.canvas?navigator.gpu?.getPreferredCanvasFormat():t.context.getPreferredFormat()}function he(t,e,n,r){r=r||Vt(t);let i=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,a=ne(t.device,e,n.width,n.height,1,r,i);t.device.queue.writeTexture({texture:a.texture},n.data,{bytesPerRow:4*n.width},{width:n.width,height:n.height});let f={addressModeU:"repeat",addressModeV:"repeat",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",maxAnisotropy:1};return a.sampler=t.device.createSampler(f),a}async function ve(t,e,n,r){let o=await(await fetch(n)).blob();r=r||Vt(t);let a=await createImageBitmap(o),f=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,v=ne(t.device,e,a.width,a.height,1,r,f);t.device.queue.copyExternalImageToTexture({source:a},{texture:v.texture},{width:a.width,height:a.height});let d={addressModeU:"repeat",addressModeV:"repeat",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",maxAnisotropy:1};return v.sampler=t.device.createSampler(d),v}var vi="const BLOOM_MIP_COUNT:i32=7;const MODE_PREFILTER:u32=0u;const MODE_DOWNSAMPLE:u32=1u;const MODE_UPSAMPLE_FIRST:u32=2u;const MODE_UPSAMPLE:u32=3u;const EPSILON:f32=1.0e-4;struct bloom_param{parameters:vec4<f32>,combine_constant:f32,doop:u32,ferp:u32,}struct mode_lod_param{mode_lod:u32,}@group(0)@binding(0)var output_texture:texture_storage_2d<rgba16float,write>;@group(0)@binding(1)var input_texture:texture_2d<f32>;@group(0)@binding(2)var bloom_texture:texture_2d<f32>;@group(0)@binding(3)var samp:sampler;@group(0)@binding(4)var<uniform> param:bloom_param;@group(0)@binding(5)var<uniform> pc:mode_lod_param;fn QuadraticThreshold(color:vec4<f32>,threshold:f32,curve:vec3<f32>)->vec4<f32>{let brightness=max(max(color.r,color.g),color.b);var rq:f32=clamp(brightness-curve.x,0.0,curve.y);rq=curve.z*(rq*rq);let ret_color=color*max(rq,brightness-threshold)/max(brightness,EPSILON);return ret_color;}fn Prefilter(color:vec4<f32>,uv:vec2<f32>)->vec4<f32>{let clamp_value=20.0;var c=min(vec4<f32>(clamp_value),color);c=QuadraticThreshold(color,param.parameters.x,param.parameters.yzw);return c;}fn DownsampleBox13(tex:texture_2d<f32>,lod:f32,uv:vec2<f32>,tex_size:vec2<f32>)->vec3<f32>{let A=textureSampleLevel(tex,samp,uv,lod).rgb;let texel_size=tex_size*0.5;let B=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-1.0,-1.0),lod).rgb;let C=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-1.0,1.0),lod).rgb;let D=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(1.0,1.0),lod).rgb;let E=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(1.0,-1.0),lod).rgb;let F=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,-2.0),lod).rgb;let G=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,0.0),lod).rgb;let H=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(0.0,2.0),lod).rgb;let I=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,2.0),lod).rgb;let J=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,2.0),lod).rgb;let K=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,0.0),lod).rgb;let L=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,-2.0),lod).rgb;let M=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(0.0,-2.0),lod).rgb;var result:vec3<f32>=vec3<f32>(0.0);result=result+(B+C+D+E)*0.5;result=result+(F+G+A+M)*0.125;result=result+(G+H+I+A)*0.125;result=result+(A+I+J+K)*0.125;result=result+(M+A+K+L)*0.125;result=result*0.25;return result;}fn UpsampleTent9(tex:texture_2d<f32>,lod:f32,uv:vec2<f32>,texel_size:vec2<f32>,radius:f32)->vec3<f32>{let offset=texel_size.xyxy*vec4<f32>(1.0,1.0,-1.0,0.0)*radius;var result:vec3<f32>=textureSampleLevel(tex,samp,uv,lod).rgb*4.0;result=result+textureSampleLevel(tex,samp,uv-offset.xy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv-offset.wy,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv-offset.zy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv+offset.zw,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.xw,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.zy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv+offset.wy,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.xy,lod).rgb;return result*(1.0/16.0);}fn combine(ex_color:vec3<f32>,color_to_add:vec3<f32>,combine_constant:f32)->vec3<f32>{let existing_color=ex_color+(-color_to_add);let blended_color=(combine_constant*existing_color)+color_to_add;return blended_color;}@compute @workgroup_size(8,4,1)fn cs_main(@builtin(global_invocation_id)global_invocation_id:vec3<u32>){let mode=pc.mode_lod>>16u;let lod=pc.mode_lod&65535u;let imgSize=textureDimensions(output_texture);if(global_invocation_id.x<u32(imgSize.x)&&global_invocation_id.y<u32(imgSize.y)){var texCoords:vec2<f32>=vec2<f32>(f32(global_invocation_id.x)/f32(imgSize.x),f32(global_invocation_id.y)/f32(imgSize.y));texCoords=texCoords+(1.0/vec2<f32>(imgSize))*0.5;let texSize=vec2<f32>(textureDimensions(input_texture,i32(lod)));var color:vec4<f32>=vec4<f32>(1.0);if(mode==MODE_PREFILTER){color=vec4<f32>(DownsampleBox13(input_texture,f32(lod),texCoords,1.0/texSize),1.0);color=Prefilter(color,texCoords);}else if(mode==MODE_DOWNSAMPLE){color=vec4<f32>(DownsampleBox13(input_texture,f32(lod),texCoords,1.0/texSize),1.0);}else if(mode==MODE_UPSAMPLE_FIRST){let bloomTexSize=textureDimensions(input_texture,i32(lod)+1);let sampleScale=1.0;let upsampledTexture=UpsampleTent9(input_texture,f32(lod)+1.0,texCoords,1.0/vec2<f32>(bloomTexSize),sampleScale);let existing=textureSampleLevel(input_texture,samp,texCoords,f32(lod)).rgb;color=vec4<f32>(combine(existing,upsampledTexture,param.combine_constant),1.0);}else if(mode==MODE_UPSAMPLE){let bloomTexSize=textureDimensions(bloom_texture,i32(lod)+1);let sampleScale=1.0;let upsampledTexture=UpsampleTent9(bloom_texture,f32(lod)+1.0,texCoords,1.0/vec2<f32>(bloomTexSize),sampleScale);let existing=textureSampleLevel(input_texture,samp,texCoords,f32(lod)).rgb;color=vec4<f32>(combine(existing,upsampledTexture,param.combine_constant),1.0);}textureStore(output_texture,vec2<i32>(global_invocation_id.xy),color);}}";var se=7,i0=0,pi=1,o0=2,gi=3,di={type:"cobalt:bloom",onInit:async function(t,e={}){return a0(t,e)},onRun:function(t,e,n){s0(t,e,n)},onDestroy:function(t,e){xi(e)},onResize:function(t,e){u0(t,e)},onViewportPosition:function(t,e){}};function a0(t,e){let{device:n}=t,r=t.viewport.width,i=t.viewport.height,o={compute_pipeline:null,bind_group:[],bind_group_layout:[],bind_groups_textures:[],buffers:[]},a=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,storageTexture:{access:"write-only",format:"rgba16float",viewDimension:"2d"}},{binding:1,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}},{binding:2,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}},{binding:3,visibility:GPUShaderStage.COMPUTE,sampler:{}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}}]});o.bind_group_layout.push(a),o.bind_groups_textures.push(ne(n,"bloom downsampler image 0",r/2,i/2,se,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),o.bind_groups_textures.push(ne(n,"bloom downsampler image 1",r/2,i/2,se,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),o.bind_groups_textures.push(e.refs.bloom.data);let f=n.createPipelineLayout({bindGroupLayouts:o.bind_group_layout}),h=n.createComputePipeline({layout:f,compute:{module:n.createShaderModule({code:vi}),entryPoint:"cs_main"}});return wi(t,o,e),o.compute_pipeline=h,o}function wi(t,e,n){let{refs:r}=n,{device:i}=t,o=n.options.bloom_threshold??.1,a=n.options.bloom_knee??.2,f=n.options.bloom_combine_constant??.68,h=new Float32Array([o,o-a,a*2,.25/a,f,0,0,0]),v=i.createBuffer({label:"bloom static parameters buffer",size:h.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});e.buffers.push(v),new Float32Array(v.getMappedRange()).set(h),v.unmap(),e.bind_group.length=0,e.params_buf=v,e.bind_group.push(ke(i,e,e.bind_groups_textures[0].mip_view[0],r.emissive.data.view,r.hdr.data.view,r.hdr.data.sampler,v,i0<<16|0));for(let D=1;D<se;D++)e.bind_group.push(ke(i,e,e.bind_groups_textures[1].mip_view[D],e.bind_groups_textures[0].view,r.hdr.data.view,r.hdr.data.sampler,v,pi<<16|D-1)),e.bind_group.push(ke(i,e,e.bind_groups_textures[0].mip_view[D],e.bind_groups_textures[1].view,r.hdr.data.view,r.hdr.data.sampler,v,pi<<16|D));e.bind_group.push(ke(i,e,e.bind_groups_textures[2].mip_view[se-1],e.bind_groups_textures[0].view,r.hdr.data.view,r.hdr.data.sampler,v,o0<<16|se-2));let d=!0;for(let D=se-2;D>=0;D--)d?(e.bind_group.push(ke(i,e,e.bind_groups_textures[1].mip_view[D],e.bind_groups_textures[0].view,e.bind_groups_textures[2].view,r.hdr.data.sampler,v,gi<<16|D)),d=!1):(e.bind_group.push(ke(i,e,e.bind_groups_textures[2].mip_view[D],e.bind_groups_textures[0].view,e.bind_groups_textures[1].view,r.hdr.data.sampler,v,gi<<16|D)),d=!0)}function ke(t,e,n,r,i,o,a,f){let h=new Uint32Array([f]),v=t.createBuffer({label:"bloom static mode_lod buffer",size:h.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return e.buffers.push(v),new Uint32Array(v.getMappedRange()).set(h),v.unmap(),t.createBindGroup({label:"bloom bind group layout",layout:e.bind_group_layout[0],entries:[{binding:0,resource:n},{binding:1,resource:r},{binding:2,resource:i},{binding:3,resource:o},{binding:4,resource:{buffer:a}},{binding:5,resource:{buffer:v}}]})}function s0(t,e,n){let r=e.data,i=0,o=1,a=2,f=3,h=0,v=n.beginComputePass({label:"bloom Compute Pass"});v.setPipeline(r.compute_pipeline),v.setBindGroup(0,r.bind_group[h]),h+=1;let d=lr(0,r.bind_groups_textures[0]);v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1);for(let D=1;D<se;D++)d=lr(D,r.bind_groups_textures[0]),v.setBindGroup(0,r.bind_group[h]),h+=1,v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1),v.setBindGroup(0,r.bind_group[h]),h+=1,v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1);v.setBindGroup(0,r.bind_group[h]),h+=1,d=lr(se-1,r.bind_groups_textures[2]),v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1);for(let D=se-2;D>=0;D--)d=lr(D,r.bind_groups_textures[2]),v.setBindGroup(0,r.bind_group[h]),h+=1,v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1);v.end()}function lr(t,e){let n=e.size.width,r=e.size.height;for(let i=0;i<t;i++)n/=2,r/=2;return{width:n,height:r,depthOrArrayLayers:1}}function u0(t,e){let{device:n}=t,r=e.data;xi(e),r.bind_groups_textures.push(ne(n,"bloom downsampler image 0",t.viewport.width/2,t.viewport.height/2,se,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),r.bind_groups_textures.push(ne(n,"bloom downsampler image 1",t.viewport.width/2,t.viewport.height/2,se,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),r.bind_groups_textures.push(e.refs.bloom.data),wi(t,r,e)}function xi(t){for(let e of t.data.bind_groups_textures)e.texture.destroy();for(let e of t.data.buffers)e.destroy();t.data.buffers.length=0,t.data.bind_groups_textures.length=0}var Mi="struct DisplacementParameters{offset:vec2<f32>,scale:f32,};@group(0)@binding(0)var<uniform> uniforms:DisplacementParameters;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var colorSampler:sampler;@group(0)@binding(3)var noiseTexture:texture_2d<f32>;@group(0)@binding(4)var noiseSampler:sampler;@group(0)@binding(5)var displacementTexture:texture_2d<f32>;struct VertexIn{@builtin(vertex_index)vertexIndex:u32,};struct VertexOut{@builtin(position)position:vec4<f32>,@location(0)uv:vec2<f32>,};@vertex fn main_vertex(in:VertexIn)->VertexOut{const corners=array<vec2<f32>,4>(vec2<f32>(-1,-1),vec2<f32>(1,-1),vec2<f32>(-1,1),vec2<f32>(1,1),);let screenPosition=corners[in.vertexIndex];var out:VertexOut;out.position=vec4<f32>(screenPosition,0,1);out.uv=(0.5+0.5*screenPosition*vec2<f32>(1,-1));return out;}struct FragmentOut{@location(0)color:vec4<f32>,};@fragment fn main_fragment(in:VertexOut)->FragmentOut{let noiseTextureDimensions=vec2<f32>(textureDimensions(noiseTexture,0));let noiseUv=in.uv+uniforms.offset/noiseTextureDimensions;var noise=textureSample(noiseTexture,noiseSampler,noiseUv).rg;noise-=0.5;noise*=uniforms.scale/noiseTextureDimensions;let displacement=textureSample(displacementTexture,colorSampler,in.uv).r;noise*=displacement;let colorUv=in.uv+noise;var out:FragmentOut;out.color=textureSample(colorTexture,colorSampler,colorUv);return out;}";var hr=class{device;targetFormat;renderPipeline;colorSampler;noiseSampler;displacementParametersBuffer;renderBundle=null;colorTextureView;noiseMapTextureView;displacementTextureView;constructor(e){this.device=e.device,this.targetFormat=e.targetFormat,this.colorTextureView=e.colorTextureView,this.noiseMapTextureView=e.noiseMapTextureView,this.displacementTextureView=e.displacementTextureView,this.displacementParametersBuffer=e.displacementParametersBuffer;let n=this.device.createShaderModule({label:"DisplacementComposition shader module",code:Mi});this.renderPipeline=this.device.createRenderPipeline({label:"DisplacementComposition renderpipeline",layout:"auto",vertex:{module:n,entryPoint:"main_vertex"},fragment:{module:n,entryPoint:"main_fragment",targets:[{format:e.targetFormat}]},primitive:{cullMode:"none",topology:"triangle-strip"}}),this.noiseSampler=this.device.createSampler({label:"DisplacementComposition noisesampler",addressModeU:"repeat",addressModeV:"repeat",addressModeW:"repeat",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"}),this.colorSampler=this.device.createSampler({label:"DisplacementComposition colorSampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"})}getRenderBundle(){return this.renderBundle||(this.renderBundle=this.buildRenderBundle()),this.renderBundle}destroy(){}setColorTextureView(e){this.colorTextureView=e,this.renderBundle=null}setNoiseMapTextureView(e){this.noiseMapTextureView=e,this.renderBundle=null}setDisplacementTextureView(e){this.displacementTextureView=e,this.renderBundle=null}buildRenderBundle(){let e=this.device.createBindGroup({label:"DisplacementComposition bindgroup 0",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.displacementParametersBuffer.bufferGpu}},{binding:1,resource:this.colorTextureView},{binding:2,resource:this.colorSampler},{binding:3,resource:this.noiseMapTextureView},{binding:4,resource:this.noiseSampler},{binding:5,resource:this.displacementTextureView}]}),n=this.device.createRenderBundleEncoder({label:"DisplacementComposition renderbundle encoder",colorFormats:[this.targetFormat]});return n.setPipeline(this.renderPipeline),n.setBindGroup(0,e),n.draw(4),n.finish({label:"DisplacementComposition renderbundle"})}};var vr=class{device;bufferGpu;needsUpdate=!0;constructor(e){this.device=e.device,this.bufferGpu=this.device.createBuffer({label:"DisplacementParametersBuffer buffer",size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.setParameters(e.initialParameters)}setParameters(e){this.device.queue.writeBuffer(this.bufferGpu,0,new Float32Array([e.offsetX,e.offsetY,e.scale]))}destroy(){this.bufferGpu.destroy()}};var yi="struct TransformData{mvpMatrix:mat4x4<f32>,};@group(0)@binding(0)var<uniform> transformUBO:TransformData;struct VertexIn{@location(0)position:vec2<f32>,};struct VertexOut{@builtin(position)position:vec4<f32>,};@vertex fn main_vertex(in:VertexIn)->VertexOut{var output:VertexOut;output.position=transformUBO.mvpMatrix*vec4<f32>(in.position,0.0,1.0);return output;}struct FragmentOut{@location(0)color:vec4<f32>,};@fragment fn main_fragment()->FragmentOut{var out:FragmentOut;out.color=vec4<f32>(1.0,1.0,1.0,1.0);return out;}";function f0(t,e){return class extends t{constructor(...n){super(...n),e(this)}}}var c0=f0(Array,t=>t.fill(0)),bt=1e-6;function l0(t){function e(L=0,N=0){let m=new t(2);return L!==void 0&&(m[0]=L,N!==void 0&&(m[1]=N)),m}let n=e;function r(L,N,m){let u=m??new t(2);return u[0]=L,u[1]=N,u}function i(L,N){let m=N??new t(2);return m[0]=Math.ceil(L[0]),m[1]=Math.ceil(L[1]),m}function o(L,N){let m=N??new t(2);return m[0]=Math.floor(L[0]),m[1]=Math.floor(L[1]),m}function a(L,N){let m=N??new t(2);return m[0]=Math.round(L[0]),m[1]=Math.round(L[1]),m}function f(L,N=0,m=1,u){let B=u??new t(2);return B[0]=Math.min(m,Math.max(N,L[0])),B[1]=Math.min(m,Math.max(N,L[1])),B}function h(L,N,m){let u=m??new t(2);return u[0]=L[0]+N[0],u[1]=L[1]+N[1],u}function v(L,N,m,u){let B=u??new t(2);return B[0]=L[0]+N[0]*m,B[1]=L[1]+N[1]*m,B}function d(L,N){let m=L[0],u=L[1],B=N[0],M=N[1],x=Math.sqrt(m*m+u*u),g=Math.sqrt(B*B+M*M),S=x*g,G=S&&rt(L,N)/S;return Math.acos(G)}function D(L,N,m){let u=m??new t(2);return u[0]=L[0]-N[0],u[1]=L[1]-N[1],u}let C=D;function k(L,N){return Math.abs(L[0]-N[0])<bt&&Math.abs(L[1]-N[1])<bt}function R(L,N){return L[0]===N[0]&&L[1]===N[1]}function q(L,N,m,u){let B=u??new t(2);return B[0]=L[0]+m*(N[0]-L[0]),B[1]=L[1]+m*(N[1]-L[1]),B}function V(L,N,m,u){let B=u??new t(2);return B[0]=L[0]+m[0]*(N[0]-L[0]),B[1]=L[1]+m[1]*(N[1]-L[1]),B}function X(L,N,m){let u=m??new t(2);return u[0]=Math.max(L[0],N[0]),u[1]=Math.max(L[1],N[1]),u}function $(L,N,m){let u=m??new t(2);return u[0]=Math.min(L[0],N[0]),u[1]=Math.min(L[1],N[1]),u}function Q(L,N,m){let u=m??new t(2);return u[0]=L[0]*N,u[1]=L[1]*N,u}let j=Q;function H(L,N,m){let u=m??new t(2);return u[0]=L[0]/N,u[1]=L[1]/N,u}function W(L,N){let m=N??new t(2);return m[0]=1/L[0],m[1]=1/L[1],m}let at=W;function tt(L,N,m){let u=m??new t(3),B=L[0]*N[1]-L[1]*N[0];return u[0]=0,u[1]=0,u[2]=B,u}function rt(L,N){return L[0]*N[0]+L[1]*N[1]}function F(L){let N=L[0],m=L[1];return Math.sqrt(N*N+m*m)}let s=F;function p(L){let N=L[0],m=L[1];return N*N+m*m}let b=p;function y(L,N){let m=L[0]-N[0],u=L[1]-N[1];return Math.sqrt(m*m+u*u)}let T=y;function E(L,N){let m=L[0]-N[0],u=L[1]-N[1];return m*m+u*u}let O=E;function P(L,N){let m=N??new t(2),u=L[0],B=L[1],M=u*u+B*B,x=M>0?1/Math.sqrt(M):1;return m[0]=u*x,m[1]=B*x,m}function l(L,N){let m=N??new t(2);return m[0]=-L[0],m[1]=-L[1],m}function A(L,N){let m=N??new t(2);return m[0]=L[0],m[1]=L[1],m}let ot=A;function st(L,N,m){let u=m??new t(2);return u[0]=L[0]*N[0],u[1]=L[1]*N[1],u}let ut=st;function ft(L,N,m){let u=m??new t(2);return u[0]=L[0]/N[0],u[1]=L[1]/N[1],u}let Mt=ft;function vt(L=1,N){let m=N??new t(2),u=Math.random()*2*Math.PI;return m[0]=Math.cos(u)*L,m[1]=Math.sin(u)*L,m}function Y(L){let N=L??new t(2);return N[0]=0,N[1]=0,N}function K(L,N,m){let u=m??new t(2),B=L[0],M=L[1];return u[0]=B*N[0]+M*N[4]+N[12],u[1]=B*N[1]+M*N[5]+N[13],u}function U(L,N,m){let u=m??new t(2),B=L[0],M=L[1];return u[0]=N[0]*B+N[4]*M+N[8],u[1]=N[1]*B+N[5]*M+N[9],u}function c(L,N,m,u){let B=u??new t(2),M=L[0]-N[0],x=L[1]-N[1],g=Math.sin(m),S=Math.cos(m);return B[0]=M*S-x*g+N[0],B[1]=M*g+x*S+N[1],B}function _(L,N,m){let u=m??new t(2);return P(L,u),Q(u,N,u)}function w(L,N,m){let u=m??new t(2);return F(L)>N?_(L,N,u):A(L,u)}function I(L,N,m){let u=m??new t(2);return q(L,N,.5,u)}return{create:e,fromValues:n,set:r,ceil:i,floor:o,round:a,clamp:f,add:h,addScaled:v,angle:d,subtract:D,sub:C,equalsApproximately:k,equals:R,lerp:q,lerpV:V,max:X,min:$,mulScalar:Q,scale:j,divScalar:H,inverse:W,invert:at,cross:tt,dot:rt,length:F,len:s,lengthSq:p,lenSq:b,distance:y,dist:T,distanceSq:E,distSq:O,normalize:P,negate:l,copy:A,clone:ot,multiply:st,mul:ut,divide:ft,div:Mt,random:vt,zero:Y,transformMat4:K,transformMat3:U,rotate:c,setLength:_,truncate:w,midpoint:I}}var _i=new Map;function Di(t){let e=_i.get(t);return e||(e=l0(t),_i.set(t,e)),e}function h0(t){function e(g,S,G){let z=new t(3);return g!==void 0&&(z[0]=g,S!==void 0&&(z[1]=S,G!==void 0&&(z[2]=G))),z}let n=e;function r(g,S,G,z){let Z=z??new t(3);return Z[0]=g,Z[1]=S,Z[2]=G,Z}function i(g,S){let G=S??new t(3);return G[0]=Math.ceil(g[0]),G[1]=Math.ceil(g[1]),G[2]=Math.ceil(g[2]),G}function o(g,S){let G=S??new t(3);return G[0]=Math.floor(g[0]),G[1]=Math.floor(g[1]),G[2]=Math.floor(g[2]),G}function a(g,S){let G=S??new t(3);return G[0]=Math.round(g[0]),G[1]=Math.round(g[1]),G[2]=Math.round(g[2]),G}function f(g,S=0,G=1,z){let Z=z??new t(3);return Z[0]=Math.min(G,Math.max(S,g[0])),Z[1]=Math.min(G,Math.max(S,g[1])),Z[2]=Math.min(G,Math.max(S,g[2])),Z}function h(g,S,G){let z=G??new t(3);return z[0]=g[0]+S[0],z[1]=g[1]+S[1],z[2]=g[2]+S[2],z}function v(g,S,G,z){let Z=z??new t(3);return Z[0]=g[0]+S[0]*G,Z[1]=g[1]+S[1]*G,Z[2]=g[2]+S[2]*G,Z}function d(g,S){let G=g[0],z=g[1],Z=g[2],J=S[0],et=S[1],ct=S[2],nt=Math.sqrt(G*G+z*z+Z*Z),it=Math.sqrt(J*J+et*et+ct*ct),pt=nt*it,ht=pt&&rt(g,S)/pt;return Math.acos(ht)}function D(g,S,G){let z=G??new t(3);return z[0]=g[0]-S[0],z[1]=g[1]-S[1],z[2]=g[2]-S[2],z}let C=D;function k(g,S){return Math.abs(g[0]-S[0])<bt&&Math.abs(g[1]-S[1])<bt&&Math.abs(g[2]-S[2])<bt}function R(g,S){return g[0]===S[0]&&g[1]===S[1]&&g[2]===S[2]}function q(g,S,G,z){let Z=z??new t(3);return Z[0]=g[0]+G*(S[0]-g[0]),Z[1]=g[1]+G*(S[1]-g[1]),Z[2]=g[2]+G*(S[2]-g[2]),Z}function V(g,S,G,z){let Z=z??new t(3);return Z[0]=g[0]+G[0]*(S[0]-g[0]),Z[1]=g[1]+G[1]*(S[1]-g[1]),Z[2]=g[2]+G[2]*(S[2]-g[2]),Z}function X(g,S,G){let z=G??new t(3);return z[0]=Math.max(g[0],S[0]),z[1]=Math.max(g[1],S[1]),z[2]=Math.max(g[2],S[2]),z}function $(g,S,G){let z=G??new t(3);return z[0]=Math.min(g[0],S[0]),z[1]=Math.min(g[1],S[1]),z[2]=Math.min(g[2],S[2]),z}function Q(g,S,G){let z=G??new t(3);return z[0]=g[0]*S,z[1]=g[1]*S,z[2]=g[2]*S,z}let j=Q;function H(g,S,G){let z=G??new t(3);return z[0]=g[0]/S,z[1]=g[1]/S,z[2]=g[2]/S,z}function W(g,S){let G=S??new t(3);return G[0]=1/g[0],G[1]=1/g[1],G[2]=1/g[2],G}let at=W;function tt(g,S,G){let z=G??new t(3),Z=g[2]*S[0]-g[0]*S[2],J=g[0]*S[1]-g[1]*S[0];return z[0]=g[1]*S[2]-g[2]*S[1],z[1]=Z,z[2]=J,z}function rt(g,S){return g[0]*S[0]+g[1]*S[1]+g[2]*S[2]}function F(g){let S=g[0],G=g[1],z=g[2];return Math.sqrt(S*S+G*G+z*z)}let s=F;function p(g){let S=g[0],G=g[1],z=g[2];return S*S+G*G+z*z}let b=p;function y(g,S){let G=g[0]-S[0],z=g[1]-S[1],Z=g[2]-S[2];return Math.sqrt(G*G+z*z+Z*Z)}let T=y;function E(g,S){let G=g[0]-S[0],z=g[1]-S[1],Z=g[2]-S[2];return G*G+z*z+Z*Z}let O=E;function P(g,S){let G=S??new t(3),z=g[0],Z=g[1],J=g[2],et=z*z+Z*Z+J*J,ct=et>0?1/Math.sqrt(et):1;return G[0]=z*ct,G[1]=Z*ct,G[2]=J*ct,G}function l(g,S){let G=S??new t(3);return G[0]=-g[0],G[1]=-g[1],G[2]=-g[2],G}function A(g,S){let G=S??new t(3);return G[0]=g[0],G[1]=g[1],G[2]=g[2],G}let ot=A;function st(g,S,G){let z=G??new t(3);return z[0]=g[0]*S[0],z[1]=g[1]*S[1],z[2]=g[2]*S[2],z}let ut=st;function ft(g,S,G){let z=G??new t(3);return z[0]=g[0]/S[0],z[1]=g[1]/S[1],z[2]=g[2]/S[2],z}let Mt=ft;function vt(g=1,S){let G=S??new t(3),z=Math.random()*2*Math.PI,Z=Math.random()*2-1,J=Math.sqrt(1-Z*Z)*g;return G[0]=Math.cos(z)*J,G[1]=Math.sin(z)*J,G[2]=Z*g,G}function Y(g){let S=g??new t(3);return S[0]=0,S[1]=0,S[2]=0,S}function K(g,S,G){let z=G??new t(3),Z=g[0],J=g[1],et=g[2],ct=S[3]*Z+S[7]*J+S[11]*et+S[15]||1;return z[0]=(S[0]*Z+S[4]*J+S[8]*et+S[12])/ct,z[1]=(S[1]*Z+S[5]*J+S[9]*et+S[13])/ct,z[2]=(S[2]*Z+S[6]*J+S[10]*et+S[14])/ct,z}function U(g,S,G){let z=G??new t(3),Z=g[0],J=g[1],et=g[2];return z[0]=Z*S[0]+J*S[4]+et*S[8],z[1]=Z*S[1]+J*S[5]+et*S[9],z[2]=Z*S[2]+J*S[6]+et*S[10],z}function c(g,S,G){let z=G??new t(3),Z=g[0],J=g[1],et=g[2];return z[0]=Z*S[0]+J*S[4]+et*S[8],z[1]=Z*S[1]+J*S[5]+et*S[9],z[2]=Z*S[2]+J*S[6]+et*S[10],z}function _(g,S,G){let z=G??new t(3),Z=S[0],J=S[1],et=S[2],ct=S[3]*2,nt=g[0],it=g[1],pt=g[2],ht=J*pt-et*it,lt=et*nt-Z*pt,gt=Z*it-J*nt;return z[0]=nt+ht*ct+(J*gt-et*lt)*2,z[1]=it+lt*ct+(et*ht-Z*gt)*2,z[2]=pt+gt*ct+(Z*lt-J*ht)*2,z}function w(g,S){let G=S??new t(3);return G[0]=g[12],G[1]=g[13],G[2]=g[14],G}function I(g,S,G){let z=G??new t(3),Z=S*4;return z[0]=g[Z+0],z[1]=g[Z+1],z[2]=g[Z+2],z}function L(g,S){let G=S??new t(3),z=g[0],Z=g[1],J=g[2],et=g[4],ct=g[5],nt=g[6],it=g[8],pt=g[9],ht=g[10];return G[0]=Math.sqrt(z*z+Z*Z+J*J),G[1]=Math.sqrt(et*et+ct*ct+nt*nt),G[2]=Math.sqrt(it*it+pt*pt+ht*ht),G}function N(g,S,G,z){let Z=z??new t(3),J=[],et=[];return J[0]=g[0]-S[0],J[1]=g[1]-S[1],J[2]=g[2]-S[2],et[0]=J[0],et[1]=J[1]*Math.cos(G)-J[2]*Math.sin(G),et[2]=J[1]*Math.sin(G)+J[2]*Math.cos(G),Z[0]=et[0]+S[0],Z[1]=et[1]+S[1],Z[2]=et[2]+S[2],Z}function m(g,S,G,z){let Z=z??new t(3),J=[],et=[];return J[0]=g[0]-S[0],J[1]=g[1]-S[1],J[2]=g[2]-S[2],et[0]=J[2]*Math.sin(G)+J[0]*Math.cos(G),et[1]=J[1],et[2]=J[2]*Math.cos(G)-J[0]*Math.sin(G),Z[0]=et[0]+S[0],Z[1]=et[1]+S[1],Z[2]=et[2]+S[2],Z}function u(g,S,G,z){let Z=z??new t(3),J=[],et=[];return J[0]=g[0]-S[0],J[1]=g[1]-S[1],J[2]=g[2]-S[2],et[0]=J[0]*Math.cos(G)-J[1]*Math.sin(G),et[1]=J[0]*Math.sin(G)+J[1]*Math.cos(G),et[2]=J[2],Z[0]=et[0]+S[0],Z[1]=et[1]+S[1],Z[2]=et[2]+S[2],Z}function B(g,S,G){let z=G??new t(3);return P(g,z),Q(z,S,z)}function M(g,S,G){let z=G??new t(3);return F(g)>S?B(g,S,z):A(g,z)}function x(g,S,G){let z=G??new t(3);return q(g,S,.5,z)}return{create:e,fromValues:n,set:r,ceil:i,floor:o,round:a,clamp:f,add:h,addScaled:v,angle:d,subtract:D,sub:C,equalsApproximately:k,equals:R,lerp:q,lerpV:V,max:X,min:$,mulScalar:Q,scale:j,divScalar:H,inverse:W,invert:at,cross:tt,dot:rt,length:F,len:s,lengthSq:p,lenSq:b,distance:y,dist:T,distanceSq:E,distSq:O,normalize:P,negate:l,copy:A,clone:ot,multiply:st,mul:ut,divide:ft,div:Mt,random:vt,zero:Y,transformMat4:K,transformMat4Upper3x3:U,transformMat3:c,transformQuat:_,getTranslation:w,getAxis:I,getScaling:L,rotateX:N,rotateY:m,rotateZ:u,setLength:B,truncate:M,midpoint:x}}var bi=new Map;function pr(t){let e=bi.get(t);return e||(e=h0(t),bi.set(t,e)),e}function v0(t){let e=Di(t),n=pr(t);function r(c,_,w,I,L,N,m,u,B){let M=new t(12);return M[3]=0,M[7]=0,M[11]=0,c!==void 0&&(M[0]=c,_!==void 0&&(M[1]=_,w!==void 0&&(M[2]=w,I!==void 0&&(M[4]=I,L!==void 0&&(M[5]=L,N!==void 0&&(M[6]=N,m!==void 0&&(M[8]=m,u!==void 0&&(M[9]=u,B!==void 0&&(M[10]=B))))))))),M}function i(c,_,w,I,L,N,m,u,B,M){let x=M??new t(12);return x[0]=c,x[1]=_,x[2]=w,x[3]=0,x[4]=I,x[5]=L,x[6]=N,x[7]=0,x[8]=m,x[9]=u,x[10]=B,x[11]=0,x}function o(c,_){let w=_??new t(12);return w[0]=c[0],w[1]=c[1],w[2]=c[2],w[3]=0,w[4]=c[4],w[5]=c[5],w[6]=c[6],w[7]=0,w[8]=c[8],w[9]=c[9],w[10]=c[10],w[11]=0,w}function a(c,_){let w=_??new t(12),I=c[0],L=c[1],N=c[2],m=c[3],u=I+I,B=L+L,M=N+N,x=I*u,g=L*u,S=L*B,G=N*u,z=N*B,Z=N*M,J=m*u,et=m*B,ct=m*M;return w[0]=1-S-Z,w[1]=g+ct,w[2]=G-et,w[3]=0,w[4]=g-ct,w[5]=1-x-Z,w[6]=z+J,w[7]=0,w[8]=G+et,w[9]=z-J,w[10]=1-x-S,w[11]=0,w}function f(c,_){let w=_??new t(12);return w[0]=-c[0],w[1]=-c[1],w[2]=-c[2],w[4]=-c[4],w[5]=-c[5],w[6]=-c[6],w[8]=-c[8],w[9]=-c[9],w[10]=-c[10],w}function h(c,_,w){let I=w??new t(12);return I[0]=c[0]*_,I[1]=c[1]*_,I[2]=c[2]*_,I[4]=c[4]*_,I[5]=c[5]*_,I[6]=c[6]*_,I[8]=c[8]*_,I[9]=c[9]*_,I[10]=c[10]*_,I}let v=h;function d(c,_,w){let I=w??new t(12);return I[0]=c[0]+_[0],I[1]=c[1]+_[1],I[2]=c[2]+_[2],I[4]=c[4]+_[4],I[5]=c[5]+_[5],I[6]=c[6]+_[6],I[8]=c[8]+_[8],I[9]=c[9]+_[9],I[10]=c[10]+_[10],I}function D(c,_){let w=_??new t(12);return w[0]=c[0],w[1]=c[1],w[2]=c[2],w[4]=c[4],w[5]=c[5],w[6]=c[6],w[8]=c[8],w[9]=c[9],w[10]=c[10],w}let C=D;function k(c,_){return Math.abs(c[0]-_[0])<bt&&Math.abs(c[1]-_[1])<bt&&Math.abs(c[2]-_[2])<bt&&Math.abs(c[4]-_[4])<bt&&Math.abs(c[5]-_[5])<bt&&Math.abs(c[6]-_[6])<bt&&Math.abs(c[8]-_[8])<bt&&Math.abs(c[9]-_[9])<bt&&Math.abs(c[10]-_[10])<bt}function R(c,_){return c[0]===_[0]&&c[1]===_[1]&&c[2]===_[2]&&c[4]===_[4]&&c[5]===_[5]&&c[6]===_[6]&&c[8]===_[8]&&c[9]===_[9]&&c[10]===_[10]}function q(c){let _=c??new t(12);return _[0]=1,_[1]=0,_[2]=0,_[4]=0,_[5]=1,_[6]=0,_[8]=0,_[9]=0,_[10]=1,_}function V(c,_){let w=_??new t(12);if(w===c){let S;return S=c[1],c[1]=c[4],c[4]=S,S=c[2],c[2]=c[8],c[8]=S,S=c[6],c[6]=c[9],c[9]=S,w}let I=c[0],L=c[1],N=c[2],m=c[4],u=c[5],B=c[6],M=c[8],x=c[9],g=c[10];return w[0]=I,w[1]=m,w[2]=M,w[4]=L,w[5]=u,w[6]=x,w[8]=N,w[9]=B,w[10]=g,w}function X(c,_){let w=_??new t(12),I=c[0],L=c[1],N=c[2],m=c[4],u=c[5],B=c[6],M=c[8],x=c[9],g=c[10],S=g*u-B*x,G=-g*m+B*M,z=x*m-u*M,Z=1/(I*S+L*G+N*z);return w[0]=S*Z,w[1]=(-g*L+N*x)*Z,w[2]=(B*L-N*u)*Z,w[4]=G*Z,w[5]=(g*I-N*M)*Z,w[6]=(-B*I+N*m)*Z,w[8]=z*Z,w[9]=(-x*I+L*M)*Z,w[10]=(u*I-L*m)*Z,w}function $(c){let _=c[0],w=c[1],I=c[2],L=c[4],N=c[5],m=c[6],u=c[8],B=c[9],M=c[10];return _*(N*M-B*m)-L*(w*M-B*I)+u*(w*m-N*I)}let Q=X;function j(c,_,w){let I=w??new t(12),L=c[0],N=c[1],m=c[2],u=c[4],B=c[5],M=c[6],x=c[8],g=c[9],S=c[10],G=_[0],z=_[1],Z=_[2],J=_[4],et=_[5],ct=_[6],nt=_[8],it=_[9],pt=_[10];return I[0]=L*G+u*z+x*Z,I[1]=N*G+B*z+g*Z,I[2]=m*G+M*z+S*Z,I[4]=L*J+u*et+x*ct,I[5]=N*J+B*et+g*ct,I[6]=m*J+M*et+S*ct,I[8]=L*nt+u*it+x*pt,I[9]=N*nt+B*it+g*pt,I[10]=m*nt+M*it+S*pt,I}let H=j;function W(c,_,w){let I=w??q();return c!==I&&(I[0]=c[0],I[1]=c[1],I[2]=c[2],I[4]=c[4],I[5]=c[5],I[6]=c[6]),I[8]=_[0],I[9]=_[1],I[10]=1,I}function at(c,_){let w=_??e.create();return w[0]=c[8],w[1]=c[9],w}function tt(c,_,w){let I=w??e.create(),L=_*4;return I[0]=c[L+0],I[1]=c[L+1],I}function rt(c,_,w,I){let L=I===c?c:D(c,I),N=w*4;return L[N+0]=_[0],L[N+1]=_[1],L}function F(c,_){let w=_??e.create(),I=c[0],L=c[1],N=c[4],m=c[5];return w[0]=Math.sqrt(I*I+L*L),w[1]=Math.sqrt(N*N+m*m),w}function s(c,_){let w=_??n.create(),I=c[0],L=c[1],N=c[2],m=c[4],u=c[5],B=c[6],M=c[8],x=c[9],g=c[10];return w[0]=Math.sqrt(I*I+L*L+N*N),w[1]=Math.sqrt(m*m+u*u+B*B),w[2]=Math.sqrt(M*M+x*x+g*g),w}function p(c,_){let w=_??new t(12);return w[0]=1,w[1]=0,w[2]=0,w[4]=0,w[5]=1,w[6]=0,w[8]=c[0],w[9]=c[1],w[10]=1,w}function b(c,_,w){let I=w??new t(12),L=_[0],N=_[1],m=c[0],u=c[1],B=c[2],M=c[4],x=c[5],g=c[6],S=c[8],G=c[9],z=c[10];return c!==I&&(I[0]=m,I[1]=u,I[2]=B,I[4]=M,I[5]=x,I[6]=g),I[8]=m*L+M*N+S,I[9]=u*L+x*N+G,I[10]=B*L+g*N+z,I}function y(c,_){let w=_??new t(12),I=Math.cos(c),L=Math.sin(c);return w[0]=I,w[1]=L,w[2]=0,w[4]=-L,w[5]=I,w[6]=0,w[8]=0,w[9]=0,w[10]=1,w}function T(c,_,w){let I=w??new t(12),L=c[0],N=c[1],m=c[2],u=c[4],B=c[5],M=c[6],x=Math.cos(_),g=Math.sin(_);return I[0]=x*L+g*u,I[1]=x*N+g*B,I[2]=x*m+g*M,I[4]=x*u-g*L,I[5]=x*B-g*N,I[6]=x*M-g*m,c!==I&&(I[8]=c[8],I[9]=c[9],I[10]=c[10]),I}function E(c,_){let w=_??new t(12),I=Math.cos(c),L=Math.sin(c);return w[0]=1,w[1]=0,w[2]=0,w[4]=0,w[5]=I,w[6]=L,w[8]=0,w[9]=-L,w[10]=I,w}function O(c,_,w){let I=w??new t(12),L=c[4],N=c[5],m=c[6],u=c[8],B=c[9],M=c[10],x=Math.cos(_),g=Math.sin(_);return I[4]=x*L+g*u,I[5]=x*N+g*B,I[6]=x*m+g*M,I[8]=x*u-g*L,I[9]=x*B-g*N,I[10]=x*M-g*m,c!==I&&(I[0]=c[0],I[1]=c[1],I[2]=c[2]),I}function P(c,_){let w=_??new t(12),I=Math.cos(c),L=Math.sin(c);return w[0]=I,w[1]=0,w[2]=-L,w[4]=0,w[5]=1,w[6]=0,w[8]=L,w[9]=0,w[10]=I,w}function l(c,_,w){let I=w??new t(12),L=c[0],N=c[1],m=c[2],u=c[8],B=c[9],M=c[10],x=Math.cos(_),g=Math.sin(_);return I[0]=x*L-g*u,I[1]=x*N-g*B,I[2]=x*m-g*M,I[8]=x*u+g*L,I[9]=x*B+g*N,I[10]=x*M+g*m,c!==I&&(I[4]=c[4],I[5]=c[5],I[6]=c[6]),I}let A=y,ot=T;function st(c,_){let w=_??new t(12);return w[0]=c[0],w[1]=0,w[2]=0,w[4]=0,w[5]=c[1],w[6]=0,w[8]=0,w[9]=0,w[10]=1,w}function ut(c,_,w){let I=w??new t(12),L=_[0],N=_[1];return I[0]=L*c[0],I[1]=L*c[1],I[2]=L*c[2],I[4]=N*c[4],I[5]=N*c[5],I[6]=N*c[6],c!==I&&(I[8]=c[8],I[9]=c[9],I[10]=c[10]),I}function ft(c,_){let w=_??new t(12);return w[0]=c[0],w[1]=0,w[2]=0,w[4]=0,w[5]=c[1],w[6]=0,w[8]=0,w[9]=0,w[10]=c[2],w}function Mt(c,_,w){let I=w??new t(12),L=_[0],N=_[1],m=_[2];return I[0]=L*c[0],I[1]=L*c[1],I[2]=L*c[2],I[4]=N*c[4],I[5]=N*c[5],I[6]=N*c[6],I[8]=m*c[8],I[9]=m*c[9],I[10]=m*c[10],I}function vt(c,_){let w=_??new t(12);return w[0]=c,w[1]=0,w[2]=0,w[4]=0,w[5]=c,w[6]=0,w[8]=0,w[9]=0,w[10]=1,w}function Y(c,_,w){let I=w??new t(12);return I[0]=_*c[0],I[1]=_*c[1],I[2]=_*c[2],I[4]=_*c[4],I[5]=_*c[5],I[6]=_*c[6],c!==I&&(I[8]=c[8],I[9]=c[9],I[10]=c[10]),I}function K(c,_){let w=_??new t(12);return w[0]=c,w[1]=0,w[2]=0,w[4]=0,w[5]=c,w[6]=0,w[8]=0,w[9]=0,w[10]=c,w}function U(c,_,w){let I=w??new t(12);return I[0]=_*c[0],I[1]=_*c[1],I[2]=_*c[2],I[4]=_*c[4],I[5]=_*c[5],I[6]=_*c[6],I[8]=_*c[8],I[9]=_*c[9],I[10]=_*c[10],I}return{add:d,clone:C,copy:D,create:r,determinant:$,equals:R,equalsApproximately:k,fromMat4:o,fromQuat:a,get3DScaling:s,getAxis:tt,getScaling:F,getTranslation:at,identity:q,inverse:X,invert:Q,mul:H,mulScalar:v,multiply:j,multiplyScalar:h,negate:f,rotate:T,rotateX:O,rotateY:l,rotateZ:ot,rotation:y,rotationX:E,rotationY:P,rotationZ:A,scale:ut,scale3D:Mt,scaling:st,scaling3D:ft,set:i,setAxis:rt,setTranslation:W,translate:b,translation:p,transpose:V,uniformScale:Y,uniformScale3D:U,uniformScaling:vt,uniformScaling3D:K}}var Si=new Map;function p0(t){let e=Si.get(t);return e||(e=v0(t),Si.set(t,e)),e}function g0(t){let e=pr(t);function n(u,B,M,x,g,S,G,z,Z,J,et,ct,nt,it,pt,ht){let lt=new t(16);return u!==void 0&&(lt[0]=u,B!==void 0&&(lt[1]=B,M!==void 0&&(lt[2]=M,x!==void 0&&(lt[3]=x,g!==void 0&&(lt[4]=g,S!==void 0&&(lt[5]=S,G!==void 0&&(lt[6]=G,z!==void 0&&(lt[7]=z,Z!==void 0&&(lt[8]=Z,J!==void 0&&(lt[9]=J,et!==void 0&&(lt[10]=et,ct!==void 0&&(lt[11]=ct,nt!==void 0&&(lt[12]=nt,it!==void 0&&(lt[13]=it,pt!==void 0&&(lt[14]=pt,ht!==void 0&&(lt[15]=ht)))))))))))))))),lt}function r(u,B,M,x,g,S,G,z,Z,J,et,ct,nt,it,pt,ht,lt){let gt=lt??new t(16);return gt[0]=u,gt[1]=B,gt[2]=M,gt[3]=x,gt[4]=g,gt[5]=S,gt[6]=G,gt[7]=z,gt[8]=Z,gt[9]=J,gt[10]=et,gt[11]=ct,gt[12]=nt,gt[13]=it,gt[14]=pt,gt[15]=ht,gt}function i(u,B){let M=B??new t(16);return M[0]=u[0],M[1]=u[1],M[2]=u[2],M[3]=0,M[4]=u[4],M[5]=u[5],M[6]=u[6],M[7]=0,M[8]=u[8],M[9]=u[9],M[10]=u[10],M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function o(u,B){let M=B??new t(16),x=u[0],g=u[1],S=u[2],G=u[3],z=x+x,Z=g+g,J=S+S,et=x*z,ct=g*z,nt=g*Z,it=S*z,pt=S*Z,ht=S*J,lt=G*z,gt=G*Z,wt=G*J;return M[0]=1-nt-ht,M[1]=ct+wt,M[2]=it-gt,M[3]=0,M[4]=ct-wt,M[5]=1-et-ht,M[6]=pt+lt,M[7]=0,M[8]=it+gt,M[9]=pt-lt,M[10]=1-et-nt,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function a(u,B){let M=B??new t(16);return M[0]=-u[0],M[1]=-u[1],M[2]=-u[2],M[3]=-u[3],M[4]=-u[4],M[5]=-u[5],M[6]=-u[6],M[7]=-u[7],M[8]=-u[8],M[9]=-u[9],M[10]=-u[10],M[11]=-u[11],M[12]=-u[12],M[13]=-u[13],M[14]=-u[14],M[15]=-u[15],M}function f(u,B,M){let x=M??new t(16);return x[0]=u[0]+B[0],x[1]=u[1]+B[1],x[2]=u[2]+B[2],x[3]=u[3]+B[3],x[4]=u[4]+B[4],x[5]=u[5]+B[5],x[6]=u[6]+B[6],x[7]=u[7]+B[7],x[8]=u[8]+B[8],x[9]=u[9]+B[9],x[10]=u[10]+B[10],x[11]=u[11]+B[11],x[12]=u[12]+B[12],x[13]=u[13]+B[13],x[14]=u[14]+B[14],x[15]=u[15]+B[15],x}function h(u,B,M){let x=M??new t(16);return x[0]=u[0]*B,x[1]=u[1]*B,x[2]=u[2]*B,x[3]=u[3]*B,x[4]=u[4]*B,x[5]=u[5]*B,x[6]=u[6]*B,x[7]=u[7]*B,x[8]=u[8]*B,x[9]=u[9]*B,x[10]=u[10]*B,x[11]=u[11]*B,x[12]=u[12]*B,x[13]=u[13]*B,x[14]=u[14]*B,x[15]=u[15]*B,x}let v=h;function d(u,B){let M=B??new t(16);return M[0]=u[0],M[1]=u[1],M[2]=u[2],M[3]=u[3],M[4]=u[4],M[5]=u[5],M[6]=u[6],M[7]=u[7],M[8]=u[8],M[9]=u[9],M[10]=u[10],M[11]=u[11],M[12]=u[12],M[13]=u[13],M[14]=u[14],M[15]=u[15],M}let D=d;function C(u,B){return Math.abs(u[0]-B[0])<bt&&Math.abs(u[1]-B[1])<bt&&Math.abs(u[2]-B[2])<bt&&Math.abs(u[3]-B[3])<bt&&Math.abs(u[4]-B[4])<bt&&Math.abs(u[5]-B[5])<bt&&Math.abs(u[6]-B[6])<bt&&Math.abs(u[7]-B[7])<bt&&Math.abs(u[8]-B[8])<bt&&Math.abs(u[9]-B[9])<bt&&Math.abs(u[10]-B[10])<bt&&Math.abs(u[11]-B[11])<bt&&Math.abs(u[12]-B[12])<bt&&Math.abs(u[13]-B[13])<bt&&Math.abs(u[14]-B[14])<bt&&Math.abs(u[15]-B[15])<bt}function k(u,B){return u[0]===B[0]&&u[1]===B[1]&&u[2]===B[2]&&u[3]===B[3]&&u[4]===B[4]&&u[5]===B[5]&&u[6]===B[6]&&u[7]===B[7]&&u[8]===B[8]&&u[9]===B[9]&&u[10]===B[10]&&u[11]===B[11]&&u[12]===B[12]&&u[13]===B[13]&&u[14]===B[14]&&u[15]===B[15]}function R(u){let B=u??new t(16);return B[0]=1,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=1,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[10]=1,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function q(u,B){let M=B??new t(16);if(M===u){let dt;return dt=u[1],u[1]=u[4],u[4]=dt,dt=u[2],u[2]=u[8],u[8]=dt,dt=u[3],u[3]=u[12],u[12]=dt,dt=u[6],u[6]=u[9],u[9]=dt,dt=u[7],u[7]=u[13],u[13]=dt,dt=u[11],u[11]=u[14],u[14]=dt,M}let x=u[0],g=u[1],S=u[2],G=u[3],z=u[4],Z=u[5],J=u[6],et=u[7],ct=u[8],nt=u[9],it=u[10],pt=u[11],ht=u[12],lt=u[13],gt=u[14],wt=u[15];return M[0]=x,M[1]=z,M[2]=ct,M[3]=ht,M[4]=g,M[5]=Z,M[6]=nt,M[7]=lt,M[8]=S,M[9]=J,M[10]=it,M[11]=gt,M[12]=G,M[13]=et,M[14]=pt,M[15]=wt,M}function V(u,B){let M=B??new t(16),x=u[0],g=u[1],S=u[2],G=u[3],z=u[4],Z=u[5],J=u[6],et=u[7],ct=u[8],nt=u[9],it=u[10],pt=u[11],ht=u[12],lt=u[13],gt=u[14],wt=u[15],dt=it*wt,Ct=gt*pt,yt=J*wt,_t=gt*et,Ht=J*pt,Bt=it*et,Pt=S*wt,$t=gt*G,Dt=S*pt,Ft=it*G,Wt=S*et,Ut=J*G,At=ct*lt,Kt=ht*nt,zt=z*lt,It=ht*Z,jt=z*nt,Lt=ct*Z,Rt=x*lt,Te=ht*g,Ot=x*nt,qt=ct*g,Be=x*Z,Nt=z*g,kt=dt*Z+_t*nt+Ht*lt-(Ct*Z+yt*nt+Bt*lt),qe=Ct*g+Pt*nt+Ft*lt-(dt*g+$t*nt+Dt*lt),Ne=yt*g+$t*Z+Wt*lt-(_t*g+Pt*Z+Ut*lt),Ve=Bt*g+Dt*Z+Ut*nt-(Ht*g+Ft*Z+Wt*nt),Zt=1/(x*kt+z*qe+ct*Ne+ht*Ve);return M[0]=Zt*kt,M[1]=Zt*qe,M[2]=Zt*Ne,M[3]=Zt*Ve,M[4]=Zt*(Ct*z+yt*ct+Bt*ht-(dt*z+_t*ct+Ht*ht)),M[5]=Zt*(dt*x+$t*ct+Dt*ht-(Ct*x+Pt*ct+Ft*ht)),M[6]=Zt*(_t*x+Pt*z+Ut*ht-(yt*x+$t*z+Wt*ht)),M[7]=Zt*(Ht*x+Ft*z+Wt*ct-(Bt*x+Dt*z+Ut*ct)),M[8]=Zt*(At*et+It*pt+jt*wt-(Kt*et+zt*pt+Lt*wt)),M[9]=Zt*(Kt*G+Rt*pt+qt*wt-(At*G+Te*pt+Ot*wt)),M[10]=Zt*(zt*G+Te*et+Be*wt-(It*G+Rt*et+Nt*wt)),M[11]=Zt*(Lt*G+Ot*et+Nt*pt-(jt*G+qt*et+Be*pt)),M[12]=Zt*(zt*it+Lt*gt+Kt*J-(jt*gt+At*J+It*it)),M[13]=Zt*(Ot*gt+At*S+Te*it-(Rt*it+qt*gt+Kt*S)),M[14]=Zt*(Rt*J+Nt*gt+It*S-(Be*gt+zt*S+Te*J)),M[15]=Zt*(Be*it+jt*S+qt*J-(Ot*J+Nt*it+Lt*S)),M}function X(u){let B=u[0],M=u[1],x=u[2],g=u[3],S=u[4],G=u[5],z=u[6],Z=u[7],J=u[8],et=u[9],ct=u[10],nt=u[11],it=u[12],pt=u[13],ht=u[14],lt=u[15],gt=ct*lt,wt=ht*nt,dt=z*lt,Ct=ht*Z,yt=z*nt,_t=ct*Z,Ht=x*lt,Bt=ht*g,Pt=x*nt,$t=ct*g,Dt=x*Z,Ft=z*g,Wt=gt*G+Ct*et+yt*pt-(wt*G+dt*et+_t*pt),Ut=wt*M+Ht*et+$t*pt-(gt*M+Bt*et+Pt*pt),At=dt*M+Bt*G+Dt*pt-(Ct*M+Ht*G+Ft*pt),Kt=_t*M+Pt*G+Ft*et-(yt*M+$t*G+Dt*et);return B*Wt+S*Ut+J*At+it*Kt}let $=V;function Q(u,B,M){let x=M??new t(16),g=u[0],S=u[1],G=u[2],z=u[3],Z=u[4],J=u[5],et=u[6],ct=u[7],nt=u[8],it=u[9],pt=u[10],ht=u[11],lt=u[12],gt=u[13],wt=u[14],dt=u[15],Ct=B[0],yt=B[1],_t=B[2],Ht=B[3],Bt=B[4],Pt=B[5],$t=B[6],Dt=B[7],Ft=B[8],Wt=B[9],Ut=B[10],At=B[11],Kt=B[12],zt=B[13],It=B[14],jt=B[15];return x[0]=g*Ct+Z*yt+nt*_t+lt*Ht,x[1]=S*Ct+J*yt+it*_t+gt*Ht,x[2]=G*Ct+et*yt+pt*_t+wt*Ht,x[3]=z*Ct+ct*yt+ht*_t+dt*Ht,x[4]=g*Bt+Z*Pt+nt*$t+lt*Dt,x[5]=S*Bt+J*Pt+it*$t+gt*Dt,x[6]=G*Bt+et*Pt+pt*$t+wt*Dt,x[7]=z*Bt+ct*Pt+ht*$t+dt*Dt,x[8]=g*Ft+Z*Wt+nt*Ut+lt*At,x[9]=S*Ft+J*Wt+it*Ut+gt*At,x[10]=G*Ft+et*Wt+pt*Ut+wt*At,x[11]=z*Ft+ct*Wt+ht*Ut+dt*At,x[12]=g*Kt+Z*zt+nt*It+lt*jt,x[13]=S*Kt+J*zt+it*It+gt*jt,x[14]=G*Kt+et*zt+pt*It+wt*jt,x[15]=z*Kt+ct*zt+ht*It+dt*jt,x}let j=Q;function H(u,B,M){let x=M??R();return u!==x&&(x[0]=u[0],x[1]=u[1],x[2]=u[2],x[3]=u[3],x[4]=u[4],x[5]=u[5],x[6]=u[6],x[7]=u[7],x[8]=u[8],x[9]=u[9],x[10]=u[10],x[11]=u[11]),x[12]=B[0],x[13]=B[1],x[14]=B[2],x[15]=1,x}function W(u,B){let M=B??e.create();return M[0]=u[12],M[1]=u[13],M[2]=u[14],M}function at(u,B,M){let x=M??e.create(),g=B*4;return x[0]=u[g+0],x[1]=u[g+1],x[2]=u[g+2],x}function tt(u,B,M,x){let g=x===u?x:d(u,x),S=M*4;return g[S+0]=B[0],g[S+1]=B[1],g[S+2]=B[2],g}function rt(u,B){let M=B??e.create(),x=u[0],g=u[1],S=u[2],G=u[4],z=u[5],Z=u[6],J=u[8],et=u[9],ct=u[10];return M[0]=Math.sqrt(x*x+g*g+S*S),M[1]=Math.sqrt(G*G+z*z+Z*Z),M[2]=Math.sqrt(J*J+et*et+ct*ct),M}function F(u,B,M,x,g){let S=g??new t(16),G=Math.tan(Math.PI*.5-.5*u);if(S[0]=G/B,S[1]=0,S[2]=0,S[3]=0,S[4]=0,S[5]=G,S[6]=0,S[7]=0,S[8]=0,S[9]=0,S[11]=-1,S[12]=0,S[13]=0,S[15]=0,Number.isFinite(x)){let z=1/(M-x);S[10]=x*z,S[14]=x*M*z}else S[10]=-1,S[14]=-M;return S}function s(u,B,M,x=1/0,g){let S=g??new t(16),G=1/Math.tan(u*.5);if(S[0]=G/B,S[1]=0,S[2]=0,S[3]=0,S[4]=0,S[5]=G,S[6]=0,S[7]=0,S[8]=0,S[9]=0,S[11]=-1,S[12]=0,S[13]=0,S[15]=0,x===1/0)S[10]=0,S[14]=M;else{let z=1/(x-M);S[10]=M*z,S[14]=x*M*z}return S}function p(u,B,M,x,g,S,G){let z=G??new t(16);return z[0]=2/(B-u),z[1]=0,z[2]=0,z[3]=0,z[4]=0,z[5]=2/(x-M),z[6]=0,z[7]=0,z[8]=0,z[9]=0,z[10]=1/(g-S),z[11]=0,z[12]=(B+u)/(u-B),z[13]=(x+M)/(M-x),z[14]=g/(g-S),z[15]=1,z}function b(u,B,M,x,g,S,G){let z=G??new t(16),Z=B-u,J=x-M,et=g-S;return z[0]=2*g/Z,z[1]=0,z[2]=0,z[3]=0,z[4]=0,z[5]=2*g/J,z[6]=0,z[7]=0,z[8]=(u+B)/Z,z[9]=(x+M)/J,z[10]=S/et,z[11]=-1,z[12]=0,z[13]=0,z[14]=g*S/et,z[15]=0,z}function y(u,B,M,x,g,S=1/0,G){let z=G??new t(16),Z=B-u,J=x-M;if(z[0]=2*g/Z,z[1]=0,z[2]=0,z[3]=0,z[4]=0,z[5]=2*g/J,z[6]=0,z[7]=0,z[8]=(u+B)/Z,z[9]=(x+M)/J,z[11]=-1,z[12]=0,z[13]=0,z[15]=0,S===1/0)z[10]=0,z[14]=g;else{let et=1/(S-g);z[10]=g*et,z[14]=S*g*et}return z}let T=e.create(),E=e.create(),O=e.create();function P(u,B,M,x){let g=x??new t(16);return e.normalize(e.subtract(B,u,O),O),e.normalize(e.cross(M,O,T),T),e.normalize(e.cross(O,T,E),E),g[0]=T[0],g[1]=T[1],g[2]=T[2],g[3]=0,g[4]=E[0],g[5]=E[1],g[6]=E[2],g[7]=0,g[8]=O[0],g[9]=O[1],g[10]=O[2],g[11]=0,g[12]=u[0],g[13]=u[1],g[14]=u[2],g[15]=1,g}function l(u,B,M,x){let g=x??new t(16);return e.normalize(e.subtract(u,B,O),O),e.normalize(e.cross(M,O,T),T),e.normalize(e.cross(O,T,E),E),g[0]=T[0],g[1]=T[1],g[2]=T[2],g[3]=0,g[4]=E[0],g[5]=E[1],g[6]=E[2],g[7]=0,g[8]=O[0],g[9]=O[1],g[10]=O[2],g[11]=0,g[12]=u[0],g[13]=u[1],g[14]=u[2],g[15]=1,g}function A(u,B,M,x){let g=x??new t(16);return e.normalize(e.subtract(u,B,O),O),e.normalize(e.cross(M,O,T),T),e.normalize(e.cross(O,T,E),E),g[0]=T[0],g[1]=E[0],g[2]=O[0],g[3]=0,g[4]=T[1],g[5]=E[1],g[6]=O[1],g[7]=0,g[8]=T[2],g[9]=E[2],g[10]=O[2],g[11]=0,g[12]=-(T[0]*u[0]+T[1]*u[1]+T[2]*u[2]),g[13]=-(E[0]*u[0]+E[1]*u[1]+E[2]*u[2]),g[14]=-(O[0]*u[0]+O[1]*u[1]+O[2]*u[2]),g[15]=1,g}function ot(u,B){let M=B??new t(16);return M[0]=1,M[1]=0,M[2]=0,M[3]=0,M[4]=0,M[5]=1,M[6]=0,M[7]=0,M[8]=0,M[9]=0,M[10]=1,M[11]=0,M[12]=u[0],M[13]=u[1],M[14]=u[2],M[15]=1,M}function st(u,B,M){let x=M??new t(16),g=B[0],S=B[1],G=B[2],z=u[0],Z=u[1],J=u[2],et=u[3],ct=u[4],nt=u[5],it=u[6],pt=u[7],ht=u[8],lt=u[9],gt=u[10],wt=u[11],dt=u[12],Ct=u[13],yt=u[14],_t=u[15];return u!==x&&(x[0]=z,x[1]=Z,x[2]=J,x[3]=et,x[4]=ct,x[5]=nt,x[6]=it,x[7]=pt,x[8]=ht,x[9]=lt,x[10]=gt,x[11]=wt),x[12]=z*g+ct*S+ht*G+dt,x[13]=Z*g+nt*S+lt*G+Ct,x[14]=J*g+it*S+gt*G+yt,x[15]=et*g+pt*S+wt*G+_t,x}function ut(u,B){let M=B??new t(16),x=Math.cos(u),g=Math.sin(u);return M[0]=1,M[1]=0,M[2]=0,M[3]=0,M[4]=0,M[5]=x,M[6]=g,M[7]=0,M[8]=0,M[9]=-g,M[10]=x,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function ft(u,B,M){let x=M??new t(16),g=u[4],S=u[5],G=u[6],z=u[7],Z=u[8],J=u[9],et=u[10],ct=u[11],nt=Math.cos(B),it=Math.sin(B);return x[4]=nt*g+it*Z,x[5]=nt*S+it*J,x[6]=nt*G+it*et,x[7]=nt*z+it*ct,x[8]=nt*Z-it*g,x[9]=nt*J-it*S,x[10]=nt*et-it*G,x[11]=nt*ct-it*z,u!==x&&(x[0]=u[0],x[1]=u[1],x[2]=u[2],x[3]=u[3],x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}function Mt(u,B){let M=B??new t(16),x=Math.cos(u),g=Math.sin(u);return M[0]=x,M[1]=0,M[2]=-g,M[3]=0,M[4]=0,M[5]=1,M[6]=0,M[7]=0,M[8]=g,M[9]=0,M[10]=x,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function vt(u,B,M){let x=M??new t(16),g=u[0],S=u[1],G=u[2],z=u[3],Z=u[8],J=u[9],et=u[10],ct=u[11],nt=Math.cos(B),it=Math.sin(B);return x[0]=nt*g-it*Z,x[1]=nt*S-it*J,x[2]=nt*G-it*et,x[3]=nt*z-it*ct,x[8]=nt*Z+it*g,x[9]=nt*J+it*S,x[10]=nt*et+it*G,x[11]=nt*ct+it*z,u!==x&&(x[4]=u[4],x[5]=u[5],x[6]=u[6],x[7]=u[7],x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}function Y(u,B){let M=B??new t(16),x=Math.cos(u),g=Math.sin(u);return M[0]=x,M[1]=g,M[2]=0,M[3]=0,M[4]=-g,M[5]=x,M[6]=0,M[7]=0,M[8]=0,M[9]=0,M[10]=1,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function K(u,B,M){let x=M??new t(16),g=u[0],S=u[1],G=u[2],z=u[3],Z=u[4],J=u[5],et=u[6],ct=u[7],nt=Math.cos(B),it=Math.sin(B);return x[0]=nt*g+it*Z,x[1]=nt*S+it*J,x[2]=nt*G+it*et,x[3]=nt*z+it*ct,x[4]=nt*Z-it*g,x[5]=nt*J-it*S,x[6]=nt*et-it*G,x[7]=nt*ct-it*z,u!==x&&(x[8]=u[8],x[9]=u[9],x[10]=u[10],x[11]=u[11],x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}function U(u,B,M){let x=M??new t(16),g=u[0],S=u[1],G=u[2],z=Math.sqrt(g*g+S*S+G*G);g/=z,S/=z,G/=z;let Z=g*g,J=S*S,et=G*G,ct=Math.cos(B),nt=Math.sin(B),it=1-ct;return x[0]=Z+(1-Z)*ct,x[1]=g*S*it+G*nt,x[2]=g*G*it-S*nt,x[3]=0,x[4]=g*S*it-G*nt,x[5]=J+(1-J)*ct,x[6]=S*G*it+g*nt,x[7]=0,x[8]=g*G*it+S*nt,x[9]=S*G*it-g*nt,x[10]=et+(1-et)*ct,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}let c=U;function _(u,B,M,x){let g=x??new t(16),S=B[0],G=B[1],z=B[2],Z=Math.sqrt(S*S+G*G+z*z);S/=Z,G/=Z,z/=Z;let J=S*S,et=G*G,ct=z*z,nt=Math.cos(M),it=Math.sin(M),pt=1-nt,ht=J+(1-J)*nt,lt=S*G*pt+z*it,gt=S*z*pt-G*it,wt=S*G*pt-z*it,dt=et+(1-et)*nt,Ct=G*z*pt+S*it,yt=S*z*pt+G*it,_t=G*z*pt-S*it,Ht=ct+(1-ct)*nt,Bt=u[0],Pt=u[1],$t=u[2],Dt=u[3],Ft=u[4],Wt=u[5],Ut=u[6],At=u[7],Kt=u[8],zt=u[9],It=u[10],jt=u[11];return g[0]=ht*Bt+lt*Ft+gt*Kt,g[1]=ht*Pt+lt*Wt+gt*zt,g[2]=ht*$t+lt*Ut+gt*It,g[3]=ht*Dt+lt*At+gt*jt,g[4]=wt*Bt+dt*Ft+Ct*Kt,g[5]=wt*Pt+dt*Wt+Ct*zt,g[6]=wt*$t+dt*Ut+Ct*It,g[7]=wt*Dt+dt*At+Ct*jt,g[8]=yt*Bt+_t*Ft+Ht*Kt,g[9]=yt*Pt+_t*Wt+Ht*zt,g[10]=yt*$t+_t*Ut+Ht*It,g[11]=yt*Dt+_t*At+Ht*jt,u!==g&&(g[12]=u[12],g[13]=u[13],g[14]=u[14],g[15]=u[15]),g}let w=_;function I(u,B){let M=B??new t(16);return M[0]=u[0],M[1]=0,M[2]=0,M[3]=0,M[4]=0,M[5]=u[1],M[6]=0,M[7]=0,M[8]=0,M[9]=0,M[10]=u[2],M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function L(u,B,M){let x=M??new t(16),g=B[0],S=B[1],G=B[2];return x[0]=g*u[0],x[1]=g*u[1],x[2]=g*u[2],x[3]=g*u[3],x[4]=S*u[4],x[5]=S*u[5],x[6]=S*u[6],x[7]=S*u[7],x[8]=G*u[8],x[9]=G*u[9],x[10]=G*u[10],x[11]=G*u[11],u!==x&&(x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}function N(u,B){let M=B??new t(16);return M[0]=u,M[1]=0,M[2]=0,M[3]=0,M[4]=0,M[5]=u,M[6]=0,M[7]=0,M[8]=0,M[9]=0,M[10]=u,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function m(u,B,M){let x=M??new t(16);return x[0]=B*u[0],x[1]=B*u[1],x[2]=B*u[2],x[3]=B*u[3],x[4]=B*u[4],x[5]=B*u[5],x[6]=B*u[6],x[7]=B*u[7],x[8]=B*u[8],x[9]=B*u[9],x[10]=B*u[10],x[11]=B*u[11],u!==x&&(x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}return{add:f,aim:P,axisRotate:_,axisRotation:U,cameraAim:l,clone:D,copy:d,create:n,determinant:X,equals:k,equalsApproximately:C,fromMat3:i,fromQuat:o,frustum:b,frustumReverseZ:y,getAxis:at,getScaling:rt,getTranslation:W,identity:R,inverse:V,invert:$,lookAt:A,mul:j,mulScalar:v,multiply:Q,multiplyScalar:h,negate:a,ortho:p,perspective:F,perspectiveReverseZ:s,rotate:w,rotateX:ft,rotateY:vt,rotateZ:K,rotation:c,rotationX:ut,rotationY:Mt,rotationZ:Y,scale:L,scaling:I,set:r,setAxis:tt,setTranslation:H,translate:st,translation:ot,transpose:q,uniformScale:m,uniformScaling:N}}var Ti=new Map;function d0(t){let e=Ti.get(t);return e||(e=g0(t),Ti.set(t,e)),e}function w0(t){let e=pr(t);function n(Y,K,U,c){let _=new t(4);return Y!==void 0&&(_[0]=Y,K!==void 0&&(_[1]=K,U!==void 0&&(_[2]=U,c!==void 0&&(_[3]=c)))),_}let r=n;function i(Y,K,U,c,_){let w=_??new t(4);return w[0]=Y,w[1]=K,w[2]=U,w[3]=c,w}function o(Y,K,U){let c=U??new t(4),_=K*.5,w=Math.sin(_);return c[0]=w*Y[0],c[1]=w*Y[1],c[2]=w*Y[2],c[3]=Math.cos(_),c}function a(Y,K){let U=K??e.create(3),c=Math.acos(Y[3])*2,_=Math.sin(c*.5);return _>bt?(U[0]=Y[0]/_,U[1]=Y[1]/_,U[2]=Y[2]/_):(U[0]=1,U[1]=0,U[2]=0),{angle:c,axis:U}}function f(Y,K){let U=F(Y,K);return Math.acos(2*U*U-1)}function h(Y,K,U){let c=U??new t(4),_=Y[0],w=Y[1],I=Y[2],L=Y[3],N=K[0],m=K[1],u=K[2],B=K[3];return c[0]=_*B+L*N+w*u-I*m,c[1]=w*B+L*m+I*N-_*u,c[2]=I*B+L*u+_*m-w*N,c[3]=L*B-_*N-w*m-I*u,c}let v=h;function d(Y,K,U){let c=U??new t(4),_=K*.5,w=Y[0],I=Y[1],L=Y[2],N=Y[3],m=Math.sin(_),u=Math.cos(_);return c[0]=w*u+N*m,c[1]=I*u+L*m,c[2]=L*u-I*m,c[3]=N*u-w*m,c}function D(Y,K,U){let c=U??new t(4),_=K*.5,w=Y[0],I=Y[1],L=Y[2],N=Y[3],m=Math.sin(_),u=Math.cos(_);return c[0]=w*u-L*m,c[1]=I*u+N*m,c[2]=L*u+w*m,c[3]=N*u-I*m,c}function C(Y,K,U){let c=U??new t(4),_=K*.5,w=Y[0],I=Y[1],L=Y[2],N=Y[3],m=Math.sin(_),u=Math.cos(_);return c[0]=w*u+I*m,c[1]=I*u-w*m,c[2]=L*u+N*m,c[3]=N*u-L*m,c}function k(Y,K,U,c){let _=c??new t(4),w=Y[0],I=Y[1],L=Y[2],N=Y[3],m=K[0],u=K[1],B=K[2],M=K[3],x=w*m+I*u+L*B+N*M;x<0&&(x=-x,m=-m,u=-u,B=-B,M=-M);let g,S;if(1-x>bt){let G=Math.acos(x),z=Math.sin(G);g=Math.sin((1-U)*G)/z,S=Math.sin(U*G)/z}else g=1-U,S=U;return _[0]=g*w+S*m,_[1]=g*I+S*u,_[2]=g*L+S*B,_[3]=g*N+S*M,_}function R(Y,K){let U=K??new t(4),c=Y[0],_=Y[1],w=Y[2],I=Y[3],L=c*c+_*_+w*w+I*I,N=L?1/L:0;return U[0]=-c*N,U[1]=-_*N,U[2]=-w*N,U[3]=I*N,U}function q(Y,K){let U=K??new t(4);return U[0]=-Y[0],U[1]=-Y[1],U[2]=-Y[2],U[3]=Y[3],U}function V(Y,K){let U=K??new t(4),c=Y[0]+Y[5]+Y[10];if(c>0){let _=Math.sqrt(c+1);U[3]=.5*_;let w=.5/_;U[0]=(Y[6]-Y[9])*w,U[1]=(Y[8]-Y[2])*w,U[2]=(Y[1]-Y[4])*w}else{let _=0;Y[5]>Y[0]&&(_=1),Y[10]>Y[_*4+_]&&(_=2);let w=(_+1)%3,I=(_+2)%3,L=Math.sqrt(Y[_*4+_]-Y[w*4+w]-Y[I*4+I]+1);U[_]=.5*L;let N=.5/L;U[3]=(Y[w*4+I]-Y[I*4+w])*N,U[w]=(Y[w*4+_]+Y[_*4+w])*N,U[I]=(Y[I*4+_]+Y[_*4+I])*N}return U}function X(Y,K,U,c,_){let w=_??new t(4),I=Y*.5,L=K*.5,N=U*.5,m=Math.sin(I),u=Math.cos(I),B=Math.sin(L),M=Math.cos(L),x=Math.sin(N),g=Math.cos(N);switch(c){case"xyz":w[0]=m*M*g+u*B*x,w[1]=u*B*g-m*M*x,w[2]=u*M*x+m*B*g,w[3]=u*M*g-m*B*x;break;case"xzy":w[0]=m*M*g-u*B*x,w[1]=u*B*g-m*M*x,w[2]=u*M*x+m*B*g,w[3]=u*M*g+m*B*x;break;case"yxz":w[0]=m*M*g+u*B*x,w[1]=u*B*g-m*M*x,w[2]=u*M*x-m*B*g,w[3]=u*M*g+m*B*x;break;case"yzx":w[0]=m*M*g+u*B*x,w[1]=u*B*g+m*M*x,w[2]=u*M*x-m*B*g,w[3]=u*M*g-m*B*x;break;case"zxy":w[0]=m*M*g-u*B*x,w[1]=u*B*g+m*M*x,w[2]=u*M*x+m*B*g,w[3]=u*M*g-m*B*x;break;case"zyx":w[0]=m*M*g-u*B*x,w[1]=u*B*g+m*M*x,w[2]=u*M*x-m*B*g,w[3]=u*M*g+m*B*x;break;default:throw new Error(`Unknown rotation order: ${c}`)}return w}function $(Y,K){let U=K??new t(4);return U[0]=Y[0],U[1]=Y[1],U[2]=Y[2],U[3]=Y[3],U}let Q=$;function j(Y,K,U){let c=U??new t(4);return c[0]=Y[0]+K[0],c[1]=Y[1]+K[1],c[2]=Y[2]+K[2],c[3]=Y[3]+K[3],c}function H(Y,K,U){let c=U??new t(4);return c[0]=Y[0]-K[0],c[1]=Y[1]-K[1],c[2]=Y[2]-K[2],c[3]=Y[3]-K[3],c}let W=H;function at(Y,K,U){let c=U??new t(4);return c[0]=Y[0]*K,c[1]=Y[1]*K,c[2]=Y[2]*K,c[3]=Y[3]*K,c}let tt=at;function rt(Y,K,U){let c=U??new t(4);return c[0]=Y[0]/K,c[1]=Y[1]/K,c[2]=Y[2]/K,c[3]=Y[3]/K,c}function F(Y,K){return Y[0]*K[0]+Y[1]*K[1]+Y[2]*K[2]+Y[3]*K[3]}function s(Y,K,U,c){let _=c??new t(4);return _[0]=Y[0]+U*(K[0]-Y[0]),_[1]=Y[1]+U*(K[1]-Y[1]),_[2]=Y[2]+U*(K[2]-Y[2]),_[3]=Y[3]+U*(K[3]-Y[3]),_}function p(Y){let K=Y[0],U=Y[1],c=Y[2],_=Y[3];return Math.sqrt(K*K+U*U+c*c+_*_)}let b=p;function y(Y){let K=Y[0],U=Y[1],c=Y[2],_=Y[3];return K*K+U*U+c*c+_*_}let T=y;function E(Y,K){let U=K??new t(4),c=Y[0],_=Y[1],w=Y[2],I=Y[3],L=Math.sqrt(c*c+_*_+w*w+I*I);return L>1e-5?(U[0]=c/L,U[1]=_/L,U[2]=w/L,U[3]=I/L):(U[0]=0,U[1]=0,U[2]=0,U[3]=1),U}function O(Y,K){return Math.abs(Y[0]-K[0])<bt&&Math.abs(Y[1]-K[1])<bt&&Math.abs(Y[2]-K[2])<bt&&Math.abs(Y[3]-K[3])<bt}function P(Y,K){return Y[0]===K[0]&&Y[1]===K[1]&&Y[2]===K[2]&&Y[3]===K[3]}function l(Y){let K=Y??new t(4);return K[0]=0,K[1]=0,K[2]=0,K[3]=1,K}let A=e.create(),ot=e.create(),st=e.create();function ut(Y,K,U){let c=U??new t(4),_=e.dot(Y,K);return _<-.999999?(e.cross(ot,Y,A),e.len(A)<1e-6&&e.cross(st,Y,A),e.normalize(A,A),o(A,Math.PI,c),c):_>.999999?(c[0]=0,c[1]=0,c[2]=0,c[3]=1,c):(e.cross(Y,K,A),c[0]=A[0],c[1]=A[1],c[2]=A[2],c[3]=1+_,E(c,c))}let ft=new t(4),Mt=new t(4);function vt(Y,K,U,c,_,w){let I=w??new t(4);return k(Y,c,_,ft),k(K,U,_,Mt),k(ft,Mt,2*_*(1-_),I),I}return{create:n,fromValues:r,set:i,fromAxisAngle:o,toAxisAngle:a,angle:f,multiply:h,mul:v,rotateX:d,rotateY:D,rotateZ:C,slerp:k,inverse:R,conjugate:q,fromMat:V,fromEuler:X,copy:$,clone:Q,add:j,subtract:H,sub:W,mulScalar:at,scale:tt,divScalar:rt,dot:F,lerp:s,length:p,len:b,lengthSq:y,lenSq:T,normalize:E,equalsApproximately:O,equals:P,identity:l,rotationTo:ut,sqlerp:vt}}var Bi=new Map;function x0(t){let e=Bi.get(t);return e||(e=w0(t),Bi.set(t,e)),e}function M0(t){function e(U,c,_,w){let I=new t(4);return U!==void 0&&(I[0]=U,c!==void 0&&(I[1]=c,_!==void 0&&(I[2]=_,w!==void 0&&(I[3]=w)))),I}let n=e;function r(U,c,_,w,I){let L=I??new t(4);return L[0]=U,L[1]=c,L[2]=_,L[3]=w,L}function i(U,c){let _=c??new t(4);return _[0]=Math.ceil(U[0]),_[1]=Math.ceil(U[1]),_[2]=Math.ceil(U[2]),_[3]=Math.ceil(U[3]),_}function o(U,c){let _=c??new t(4);return _[0]=Math.floor(U[0]),_[1]=Math.floor(U[1]),_[2]=Math.floor(U[2]),_[3]=Math.floor(U[3]),_}function a(U,c){let _=c??new t(4);return _[0]=Math.round(U[0]),_[1]=Math.round(U[1]),_[2]=Math.round(U[2]),_[3]=Math.round(U[3]),_}function f(U,c=0,_=1,w){let I=w??new t(4);return I[0]=Math.min(_,Math.max(c,U[0])),I[1]=Math.min(_,Math.max(c,U[1])),I[2]=Math.min(_,Math.max(c,U[2])),I[3]=Math.min(_,Math.max(c,U[3])),I}function h(U,c,_){let w=_??new t(4);return w[0]=U[0]+c[0],w[1]=U[1]+c[1],w[2]=U[2]+c[2],w[3]=U[3]+c[3],w}function v(U,c,_,w){let I=w??new t(4);return I[0]=U[0]+c[0]*_,I[1]=U[1]+c[1]*_,I[2]=U[2]+c[2]*_,I[3]=U[3]+c[3]*_,I}function d(U,c,_){let w=_??new t(4);return w[0]=U[0]-c[0],w[1]=U[1]-c[1],w[2]=U[2]-c[2],w[3]=U[3]-c[3],w}let D=d;function C(U,c){return Math.abs(U[0]-c[0])<bt&&Math.abs(U[1]-c[1])<bt&&Math.abs(U[2]-c[2])<bt&&Math.abs(U[3]-c[3])<bt}function k(U,c){return U[0]===c[0]&&U[1]===c[1]&&U[2]===c[2]&&U[3]===c[3]}function R(U,c,_,w){let I=w??new t(4);return I[0]=U[0]+_*(c[0]-U[0]),I[1]=U[1]+_*(c[1]-U[1]),I[2]=U[2]+_*(c[2]-U[2]),I[3]=U[3]+_*(c[3]-U[3]),I}function q(U,c,_,w){let I=w??new t(4);return I[0]=U[0]+_[0]*(c[0]-U[0]),I[1]=U[1]+_[1]*(c[1]-U[1]),I[2]=U[2]+_[2]*(c[2]-U[2]),I[3]=U[3]+_[3]*(c[3]-U[3]),I}function V(U,c,_){let w=_??new t(4);return w[0]=Math.max(U[0],c[0]),w[1]=Math.max(U[1],c[1]),w[2]=Math.max(U[2],c[2]),w[3]=Math.max(U[3],c[3]),w}function X(U,c,_){let w=_??new t(4);return w[0]=Math.min(U[0],c[0]),w[1]=Math.min(U[1],c[1]),w[2]=Math.min(U[2],c[2]),w[3]=Math.min(U[3],c[3]),w}function $(U,c,_){let w=_??new t(4);return w[0]=U[0]*c,w[1]=U[1]*c,w[2]=U[2]*c,w[3]=U[3]*c,w}let Q=$;function j(U,c,_){let w=_??new t(4);return w[0]=U[0]/c,w[1]=U[1]/c,w[2]=U[2]/c,w[3]=U[3]/c,w}function H(U,c){let _=c??new t(4);return _[0]=1/U[0],_[1]=1/U[1],_[2]=1/U[2],_[3]=1/U[3],_}let W=H;function at(U,c){return U[0]*c[0]+U[1]*c[1]+U[2]*c[2]+U[3]*c[3]}function tt(U){let c=U[0],_=U[1],w=U[2],I=U[3];return Math.sqrt(c*c+_*_+w*w+I*I)}let rt=tt;function F(U){let c=U[0],_=U[1],w=U[2],I=U[3];return c*c+_*_+w*w+I*I}let s=F;function p(U,c){let _=U[0]-c[0],w=U[1]-c[1],I=U[2]-c[2],L=U[3]-c[3];return Math.sqrt(_*_+w*w+I*I+L*L)}let b=p;function y(U,c){let _=U[0]-c[0],w=U[1]-c[1],I=U[2]-c[2],L=U[3]-c[3];return _*_+w*w+I*I+L*L}let T=y;function E(U,c){let _=c??new t(4),w=U[0],I=U[1],L=U[2],N=U[3],m=w*w+I*I+L*L+N*N,u=m>0?1/Math.sqrt(m):1;return _[0]=w*u,_[1]=I*u,_[2]=L*u,_[3]=N*u,_}function O(U,c){let _=c??new t(4);return _[0]=-U[0],_[1]=-U[1],_[2]=-U[2],_[3]=-U[3],_}function P(U,c){let _=c??new t(4);return _[0]=U[0],_[1]=U[1],_[2]=U[2],_[3]=U[3],_}let l=P;function A(U,c,_){let w=_??new t(4);return w[0]=U[0]*c[0],w[1]=U[1]*c[1],w[2]=U[2]*c[2],w[3]=U[3]*c[3],w}let ot=A;function st(U,c,_){let w=_??new t(4);return w[0]=U[0]/c[0],w[1]=U[1]/c[1],w[2]=U[2]/c[2],w[3]=U[3]/c[3],w}let ut=st;function ft(U){let c=U??new t(4);return c[0]=0,c[1]=0,c[2]=0,c[3]=0,c}function Mt(U,c,_){let w=_??new t(4),I=U[0],L=U[1],N=U[2],m=U[3];return w[0]=c[0]*I+c[4]*L+c[8]*N+c[12]*m,w[1]=c[1]*I+c[5]*L+c[9]*N+c[13]*m,w[2]=c[2]*I+c[6]*L+c[10]*N+c[14]*m,w[3]=c[3]*I+c[7]*L+c[11]*N+c[15]*m,w}function vt(U,c,_){let w=_??new t(4);return E(U,w),$(w,c,w)}function Y(U,c,_){let w=_??new t(4);return tt(U)>c?vt(U,c,w):P(U,w)}function K(U,c,_){let w=_??new t(4);return R(U,c,.5,w)}return{create:e,fromValues:n,set:r,ceil:i,floor:o,round:a,clamp:f,add:h,addScaled:v,subtract:d,sub:D,equalsApproximately:C,equals:k,lerp:R,lerpV:q,max:V,min:X,mulScalar:$,scale:Q,divScalar:j,inverse:H,invert:W,dot:at,length:tt,len:rt,lengthSq:F,lenSq:s,distance:p,dist:b,distanceSq:y,distSq:T,normalize:E,negate:O,copy:P,clone:l,multiply:A,mul:ot,divide:st,div:ut,zero:ft,transformMat4:Mt,setLength:vt,truncate:Y,midpoint:K}}var Pi=new Map;function y0(t){let e=Pi.get(t);return e||(e=M0(t),Pi.set(t,e)),e}function fn(t,e,n,r,i,o){return{mat3:p0(t),mat4:d0(e),quat:x0(n),vec2:Di(r),vec3:pr(i),vec4:y0(o)}}var{mat3:Me,mat4:Tt,quat:k1,vec2:Gt,vec3:ue,vec4:Ce}=fn(Float32Array,Float32Array,Float32Array,Float32Array,Float32Array,Float32Array),{mat3:C1,mat4:m1,quat:Y1,vec2:X1,vec3:H1,vec4:Z1}=fn(Float64Array,Float64Array,Float64Array,Float64Array,Float64Array,Float64Array),{mat3:$1,mat4:W1,quat:K1,vec2:Q1,vec3:J1,vec4:j1}=fn(c0,Array,Array,Array,Array,Array);var gr=class{device;format="r8unorm";downsizeFactor;multisample;textureSimple;textureMultisampled=null;renderPipeline;bindgroup;uniformsBuffer;trianglesBuffer;constructor(e){this.device=e.device,this.downsizeFactor=e.blurFactor,this.multisample=this.downsizeFactor>1?4:1,[this.textureSimple,this.textureMultisampled]=this.createTextures(e.width,e.height),this.trianglesBuffer=e.trianglesBuffer;let n=this.device.createShaderModule({label:"DisplacementTexture shader module",code:yi});this.renderPipeline=this.device.createRenderPipeline({label:"DisplacementTexture renderpipeline",layout:"auto",vertex:{module:n,entryPoint:"main_vertex",buffers:[{attributes:[{shaderLocation:0,offset:0,format:"float32x2"}],arrayStride:2*Float32Array.BYTES_PER_ELEMENT,stepMode:"vertex"}]},fragment:{module:n,entryPoint:"main_fragment",targets:[{format:this.format}]},primitive:{cullMode:"none",topology:"triangle-list"},multisample:{count:this.multisample}}),this.uniformsBuffer=this.device.createBuffer({label:"DisplacementTexture uniforms buffer",size:64,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.bindgroup=this.device.createBindGroup({label:"DisplacementTexture bindgroup",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.uniformsBuffer}}]})}update(e){let n=this.textureMultisampled??this.textureSimple,r={view:n.view,clearValue:[0,0,0,1],loadOp:"clear",storeOp:"store"};this.textureMultisampled&&(r.resolveTarget=this.textureSimple.view);let i=e.beginRenderPass({label:"DisplacementTexture render to texture renderpass",colorAttachments:[r]}),[o,a]=[n.texture.width,n.texture.height];i.setViewport(0,0,o,a,0,1),i.setScissorRect(0,0,o,a),i.setPipeline(this.renderPipeline),i.setBindGroup(0,this.bindgroup),i.setVertexBuffer(0,this.trianglesBuffer.bufferGpu),i.draw(3*this.trianglesBuffer.spriteCount),i.end()}resize(e,n){this.textureSimple.texture.destroy(),this.textureMultisampled?.texture.destroy(),[this.textureSimple,this.textureMultisampled]=this.createTextures(e,n)}setViewport(e){let n=[1,1,1],r=0,i=[1,1,0],o=Tt.identity();Tt.multiply(Tt.scaling(n),o,o),Tt.multiply(Tt.rotationZ(r),o,o),Tt.multiply(Tt.translation(i),o,o);let a=Tt.translation([-e.position[0],-e.position[1],0]),f=e.width/e.zoom,h=e.height/e.zoom,v=Tt.ortho(0,f,h,0,-10,10),d=Tt.identity();Tt.multiply(a,o,d),Tt.multiply(v,d,d),this.device.queue.writeBuffer(this.uniformsBuffer,0,d)}getView(){return this.textureSimple.view}destroy(){this.textureSimple.texture.destroy(),this.textureMultisampled?.texture.destroy(),this.uniformsBuffer.destroy()}createTextures(e,n){let r=this.device.createTexture({label:"DisplacementTexture texture",size:[Math.ceil(e/this.downsizeFactor),Math.ceil(n/this.downsizeFactor)],format:this.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT}),i={texture:r,view:r.createView({label:"DisplacementTexture texture view"})},o=null;if(this.multisample>1){let a=this.device.createTexture({label:"DisplacementTexture texture multisampled",size:[r.width,r.height],format:r.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT,sampleCount:this.multisample});o={texture:a,view:a.createView({label:"DisplacementTexture texture multisampled view"})}}return[i,o]}};function Pe(){return Math.ceil(Math.random()*(Number.MAX_SAFE_INTEGER-10))}var dr=class{device;floatsPerSprite=6;bufferGpu;bufferNeedsUpdate=!1;sprites=new Map;get spriteCount(){return this.sprites.size}constructor(e){this.device=e.device,this.bufferGpu=this.device.createBuffer({size:e.maxSpriteCount*this.floatsPerSprite*Float32Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}destroy(){this.bufferGpu.destroy}update(){if(this.bufferNeedsUpdate){let e=[];for(let r of this.sprites.values())e.push(...r);let n=new Float32Array(e);this.device.queue.writeBuffer(this.bufferGpu,0,n)}}addTriangle(e){let n=Pe();if(this.sprites.has(n))throw new Error(`Duplicate triangle "${n}".`);let r=this.buildTriangleData(e);return this.sprites.set(n,r),this.bufferNeedsUpdate=!0,n}removeTriangle(e){if(!this.sprites.has(e))throw new Error(`Unknown triangle "${e}".`);this.sprites.delete(e),this.bufferNeedsUpdate=!0}setTriangle(e,n){if(!this.sprites.has(e))throw new Error(`Unknown triangle "${e}".`);let r=this.buildTriangleData(n);this.sprites.set(e,r),this.bufferNeedsUpdate=!0}buildTriangleData(e){return[e[0][0],e[0][1],e[1][0],e[1][1],e[2][0],e[2][1]]}};var Ui={type:"cobalt:displacement",onInit:async function(t,e={}){return _0(t,e)},onRun:function(t,e,n){b0(t,e,n)},onDestroy:function(t,e){S0(e)},onResize:function(t,e){e.data.displacementTexture.resize(t.viewport.width,t.viewport.height),e.data.displacementComposition.setColorTextureView(e.refs.color.data.view),e.data.displacementComposition.setNoiseMapTextureView(e.refs.map.view),e.data.displacementComposition.setDisplacementTextureView(e.data.displacementTexture.getView())},onViewportPosition:function(t,e){e.data.displacementTexture.setViewport(t.viewport)},customFunctions:{addTriangle:function(t,e,n){return e.data.trianglesBuffer.addTriangle(n)},removeTriangle:function(t,e,n){e.data.trianglesBuffer.removeTriangle(n)},setPosition:function(t,e,n,r){e.data.trianglesBuffer.setTriangle(n,r)}}};async function _0(t,e){let{device:n}=t,r=new vr({device:n,initialParameters:{offsetX:e.options.offseyX??0,offsetY:e.options.offseyY??0,scale:e.options.scale??20}}),i=256,o=new dr({device:n,maxSpriteCount:i}),a=new gr({device:n,width:t.viewport.width,height:t.viewport.height,blurFactor:8,trianglesBuffer:o}),f=new hr({device:n,targetFormat:Vt(t),colorTextureView:e.refs.color.data.view,noiseMapTextureView:e.refs.map.view,displacementTextureView:a.getView(),displacementParametersBuffer:r});return{displacementParameters:r,displacementTexture:a,displacementComposition:f,trianglesBuffer:o}}function b0(t,e,n){if(e.data.trianglesBuffer.spriteCount===0)return;e.data.trianglesBuffer.update(),e.data.displacementTexture.update(n);let i=n.beginRenderPass({label:"displacement",colorAttachments:[{view:e.refs.out,clearValue:t.clearValue,loadOp:"load",storeOp:"store"}]});i.executeBundles([e.data.displacementComposition.getRenderBundle()]),i.end()}function S0(t){t.data.trianglesBuffer.destroy(),t.data.trianglesBuffer=null,t.data.displacementParameters.destroy(),t.data.displacementParameters=null,t.data.displacementTexture.destroy(),t.data.displacementTexture=null,t.data.displacementComposition.destroy(),t.data.displacementComposition=null}var cn="@binding(0)@group(0)var tileTexture:texture_2d<f32>;@binding(1)@group(0)var tileSampler:sampler;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>};const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vs_main(@builtin(vertex_index)VertexIndex:u32)->Fragment{var output:Fragment;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.TexCoord=vec2<f32>(uvs[VertexIndex]);return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>)->@location(0)vec4<f32>{var col=textureSample(tileTexture,tileSampler,TexCoord);return vec4<f32>(col.rgb,1.0);}";var Ai={type:"cobalt:fbBlit",onInit:async function(t,e={}){return T0(t,e)},onRun:function(t,e,n){B0(t,e,n)},onDestroy:function(t,e){},onResize:function(t,e){P0(t,e)},onViewportPosition:function(t,e){}};async function T0(t,e){let{device:n}=t,r=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),i=n.createBindGroup({layout:r,entries:[{binding:0,resource:e.refs.in.data.view},{binding:1,resource:e.refs.in.data.sampler}]}),o=n.createPipelineLayout({bindGroupLayouts:[r]}),a=n.createRenderPipeline({label:"fb-blit",vertex:{module:n.createShaderModule({code:cn}),entryPoint:"vs_main",buffers:[]},fragment:{module:n.createShaderModule({code:cn}),entryPoint:"fs_main",targets:[{format:Vt(t),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:o});return{bindGroupLayout:r,bindGroup:i,pipeline:a}}function B0(t,e,n){let{device:r}=t,i=n.beginRenderPass({label:"fb-blit",colorAttachments:[{view:e.refs.out,clearValue:t.clearValue,loadOp:"load",storeOp:"store"}]});i.setPipeline(e.data.pipeline),i.setBindGroup(0,e.data.bindGroup),i.draw(3),i.end()}function P0(t,e){let{device:n}=t;e.data.bindGroup=n.createBindGroup({layout:e.data.bindGroupLayout,entries:[{binding:0,resource:e.refs.in.data.view},{binding:1,resource:e.refs.in.data.sampler}]})}var zi={type:"cobalt:fbTexture",onInit:async function(t,e={}){return D0(t,e)},onRun:function(t,e,n){},onDestroy:function(t,e){Ii(e)},onResize:function(t,e){F0(t,e)},onViewportPosition:function(t,e){}};async function D0(t,e){let{device:n}=t;e.options.format=e.options.format==="PREFERRED_TEXTURE_FORMAT"?Vt(t):e.options.format;let{format:r,label:i,mip_count:o,usage:a,viewportScale:f}=e.options;return ne(n,i,t.viewport.width*f,t.viewport.height*f,o,r,a)}function Ii(t){t.data.texture.destroy()}function F0(t,e){let{device:n}=t;Ii(e);let{width:r,height:i}=t.viewport,{options:o}=e,a=e.options.viewportScale;e.data=ne(n,o.label,r*a,i*a,o.mip_count,o.format,o.usage)}var ln=`
|
|
1
|
+
var ks=Object.create;var ln=Object.defineProperty;var Xs=Object.getOwnPropertyDescriptor;var Ys=Object.getOwnPropertyNames;var Zs=Object.getPrototypeOf,Hs=Object.prototype.hasOwnProperty;var xt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),hn=(e,t)=>{for(var n in t)ln(e,n,{get:t[n],enumerable:!0})},$s=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ys(t))!Hs.call(e,i)&&i!==n&&ln(e,i,{get:()=>t[i],enumerable:!(r=Xs(t,i))||r.enumerable});return e};var vi=(e,t,n)=>(n=e!=null?ks(Zs(e)):{},$s(t||!e||!e.__esModule?ln(n,"default",{value:e,enumerable:!0}):n,e));var je=xt((zl,Ri)=>{"use strict";function Du(e,t,n,r,i){for(var o=i+1;r<=i;){var a=r+i>>>1,f=e[a],h=n!==void 0?n(f,t):f-t;h>=0?(o=a,i=a-1):r=a+1}return o}function Fu(e,t,n,r,i){for(var o=i+1;r<=i;){var a=r+i>>>1,f=e[a],h=n!==void 0?n(f,t):f-t;h>0?(o=a,i=a-1):r=a+1}return o}function Au(e,t,n,r,i){for(var o=r-1;r<=i;){var a=r+i>>>1,f=e[a],h=n!==void 0?n(f,t):f-t;h<0?(o=a,r=a+1):i=a-1}return o}function Uu(e,t,n,r,i){for(var o=r-1;r<=i;){var a=r+i>>>1,f=e[a],h=n!==void 0?n(f,t):f-t;h<=0?(o=a,r=a+1):i=a-1}return o}function zu(e,t,n,r,i){for(;r<=i;){var o=r+i>>>1,a=e[o],f=n!==void 0?n(a,t):a-t;if(f===0)return o;f<=0?r=o+1:i=o-1}return-1}function Je(e,t,n,r,i,o){return typeof n=="function"?o(e,t,n,r===void 0?0:r|0,i===void 0?e.length-1:i|0):o(e,t,void 0,n===void 0?0:n|0,r===void 0?e.length-1:r|0)}Ri.exports={ge:function(e,t,n,r,i){return Je(e,t,n,r,i,Du)},gt:function(e,t,n,r,i){return Je(e,t,n,r,i,Fu)},lt:function(e,t,n,r,i){return Je(e,t,n,r,i,Au)},le:function(e,t,n,r,i){return Je(e,t,n,r,i,Uu)},eq:function(e,t,n,r,i){return Je(e,t,n,r,i,zu)}}});var _r=xt((Il,qi)=>{"use strict";qi.exports=Iu;var Oi=+(Math.pow(2,27)+1);function Iu(e,t,n){var r=e*t,i=Oi*e,o=i-e,a=i-o,f=e-a,h=Oi*t,v=h-t,d=h-v,D=t-d,m=r-a*d,C=m-f*d,R=C-a*D,N=f*D-R;return n?(n[0]=N,n[1]=r,n):[N,r]}});var dn=xt((El,Ni)=>{"use strict";Ni.exports=Lu;function Eu(e,t){var n=e+t,r=n-e,i=n-r,o=t-r,a=e-i,f=a+o;return f?[f,n]:[n]}function Lu(e,t){var n=e.length|0,r=t.length|0;if(n===1&&r===1)return Eu(e[0],t[0]);var i=n+r,o=new Array(i),a=0,f=0,h=0,v=Math.abs,d=e[f],D=v(d),m=t[h],C=v(m),R,N;D<C?(N=d,f+=1,f<n&&(d=e[f],D=v(d))):(N=m,h+=1,h<r&&(m=t[h],C=v(m))),f<n&&D<C||h>=r?(R=d,f+=1,f<n&&(d=e[f],D=v(d))):(R=m,h+=1,h<r&&(m=t[h],C=v(m)));for(var V=R+N,Y=V-R,K=N-Y,Q=K,j=V,Z,W,st,et,rt;f<n&&h<r;)D<C?(R=d,f+=1,f<n&&(d=e[f],D=v(d))):(R=m,h+=1,h<r&&(m=t[h],C=v(m))),N=Q,V=R+N,Y=V-R,K=N-Y,K&&(o[a++]=K),Z=j+V,W=Z-j,st=Z-W,et=V-W,rt=j-st,Q=rt+et,j=Z;for(;f<n;)R=d,N=Q,V=R+N,Y=V-R,K=N-Y,K&&(o[a++]=K),Z=j+V,W=Z-j,st=Z-W,et=V-W,rt=j-st,Q=rt+et,j=Z,f+=1,f<n&&(d=e[f]);for(;h<r;)R=m,N=Q,V=R+N,Y=V-R,K=N-Y,K&&(o[a++]=K),Z=j+V,W=Z-j,st=Z-W,et=V-W,rt=j-st,Q=rt+et,j=Z,h+=1,h<r&&(m=t[h]);return Q&&(o[a++]=Q),j&&(o[a++]=j),a||(o[a++]=0),o.length=a,o}});var Ci=xt((Ll,Vi)=>{"use strict";Vi.exports=Gu;function Gu(e,t,n){var r=e+t,i=r-e,o=r-i,a=t-i,f=e-o;return n?(n[0]=f+a,n[1]=r,n):[f+a,r]}});var xn=xt((Gl,mi)=>{"use strict";var wn=_r(),Ru=Ci();mi.exports=Ou;function Ou(e,t){var n=e.length;if(n===1){var r=wn(e[0],t);return r[0]?r:[r[1]]}var i=new Array(2*n),o=[.1,.1],a=[.1,.1],f=0;wn(e[0],t,o),o[0]&&(i[f++]=o[0]);for(var h=1;h<n;++h){wn(e[h],t,a);var v=o[1];Ru(v,a[0],o),o[0]&&(i[f++]=o[0]);var d=a[1],D=o[1],m=d+D,C=m-d,R=D-C;o[1]=m,R&&(i[f++]=R)}return o[1]&&(i[f++]=o[1]),f===0&&(i[f++]=0),i.length=f,i}});var Mn=xt((Rl,ki)=>{"use strict";ki.exports=Nu;function qu(e,t){var n=e+t,r=n-e,i=n-r,o=t-r,a=e-i,f=a+o;return f?[f,n]:[n]}function Nu(e,t){var n=e.length|0,r=t.length|0;if(n===1&&r===1)return qu(e[0],-t[0]);var i=n+r,o=new Array(i),a=0,f=0,h=0,v=Math.abs,d=e[f],D=v(d),m=-t[h],C=v(m),R,N;D<C?(N=d,f+=1,f<n&&(d=e[f],D=v(d))):(N=m,h+=1,h<r&&(m=-t[h],C=v(m))),f<n&&D<C||h>=r?(R=d,f+=1,f<n&&(d=e[f],D=v(d))):(R=m,h+=1,h<r&&(m=-t[h],C=v(m)));for(var V=R+N,Y=V-R,K=N-Y,Q=K,j=V,Z,W,st,et,rt;f<n&&h<r;)D<C?(R=d,f+=1,f<n&&(d=e[f],D=v(d))):(R=m,h+=1,h<r&&(m=-t[h],C=v(m))),N=Q,V=R+N,Y=V-R,K=N-Y,K&&(o[a++]=K),Z=j+V,W=Z-j,st=Z-W,et=V-W,rt=j-st,Q=rt+et,j=Z;for(;f<n;)R=d,N=Q,V=R+N,Y=V-R,K=N-Y,K&&(o[a++]=K),Z=j+V,W=Z-j,st=Z-W,et=V-W,rt=j-st,Q=rt+et,j=Z,f+=1,f<n&&(d=e[f]);for(;h<r;)R=m,N=Q,V=R+N,Y=V-R,K=N-Y,K&&(o[a++]=K),Z=j+V,W=Z-j,st=Z-W,et=V-W,rt=j-st,Q=rt+et,j=Z,h+=1,h<r&&(m=-t[h]);return Q&&(o[a++]=Q),j&&(o[a++]=j),a||(o[a++]=0),o.length=a,o}});var bn=xt((Ol,yn)=>{"use strict";var Vu=_r(),Cu=dn(),mu=xn(),ku=Mn(),Xi=5,Sr=11102230246251565e-32,Xu=(3+16*Sr)*Sr,Yu=(7+56*Sr)*Sr;function Zu(e,t,n,r){return function(o,a,f){var h=e(e(t(a[1],f[0]),t(-f[1],a[0])),e(t(o[1],a[0]),t(-a[1],o[0]))),v=e(t(o[1],f[0]),t(-f[1],o[0])),d=r(h,v);return d[d.length-1]}}function Hu(e,t,n,r){return function(o,a,f,h){var v=e(e(n(e(t(f[1],h[0]),t(-h[1],f[0])),a[2]),e(n(e(t(a[1],h[0]),t(-h[1],a[0])),-f[2]),n(e(t(a[1],f[0]),t(-f[1],a[0])),h[2]))),e(n(e(t(a[1],h[0]),t(-h[1],a[0])),o[2]),e(n(e(t(o[1],h[0]),t(-h[1],o[0])),-a[2]),n(e(t(o[1],a[0]),t(-a[1],o[0])),h[2])))),d=e(e(n(e(t(f[1],h[0]),t(-h[1],f[0])),o[2]),e(n(e(t(o[1],h[0]),t(-h[1],o[0])),-f[2]),n(e(t(o[1],f[0]),t(-f[1],o[0])),h[2]))),e(n(e(t(a[1],f[0]),t(-f[1],a[0])),o[2]),e(n(e(t(o[1],f[0]),t(-f[1],o[0])),-a[2]),n(e(t(o[1],a[0]),t(-a[1],o[0])),f[2])))),D=r(v,d);return D[D.length-1]}}function $u(e,t,n,r){return function(o,a,f,h,v){var d=e(e(e(n(e(n(e(t(h[1],v[0]),t(-v[1],h[0])),f[2]),e(n(e(t(f[1],v[0]),t(-v[1],f[0])),-h[2]),n(e(t(f[1],h[0]),t(-h[1],f[0])),v[2]))),a[3]),e(n(e(n(e(t(h[1],v[0]),t(-v[1],h[0])),a[2]),e(n(e(t(a[1],v[0]),t(-v[1],a[0])),-h[2]),n(e(t(a[1],h[0]),t(-h[1],a[0])),v[2]))),-f[3]),n(e(n(e(t(f[1],v[0]),t(-v[1],f[0])),a[2]),e(n(e(t(a[1],v[0]),t(-v[1],a[0])),-f[2]),n(e(t(a[1],f[0]),t(-f[1],a[0])),v[2]))),h[3]))),e(n(e(n(e(t(f[1],h[0]),t(-h[1],f[0])),a[2]),e(n(e(t(a[1],h[0]),t(-h[1],a[0])),-f[2]),n(e(t(a[1],f[0]),t(-f[1],a[0])),h[2]))),-v[3]),e(n(e(n(e(t(h[1],v[0]),t(-v[1],h[0])),a[2]),e(n(e(t(a[1],v[0]),t(-v[1],a[0])),-h[2]),n(e(t(a[1],h[0]),t(-h[1],a[0])),v[2]))),o[3]),n(e(n(e(t(h[1],v[0]),t(-v[1],h[0])),o[2]),e(n(e(t(o[1],v[0]),t(-v[1],o[0])),-h[2]),n(e(t(o[1],h[0]),t(-h[1],o[0])),v[2]))),-a[3])))),e(e(n(e(n(e(t(a[1],v[0]),t(-v[1],a[0])),o[2]),e(n(e(t(o[1],v[0]),t(-v[1],o[0])),-a[2]),n(e(t(o[1],a[0]),t(-a[1],o[0])),v[2]))),h[3]),e(n(e(n(e(t(a[1],h[0]),t(-h[1],a[0])),o[2]),e(n(e(t(o[1],h[0]),t(-h[1],o[0])),-a[2]),n(e(t(o[1],a[0]),t(-a[1],o[0])),h[2]))),-v[3]),n(e(n(e(t(f[1],h[0]),t(-h[1],f[0])),a[2]),e(n(e(t(a[1],h[0]),t(-h[1],a[0])),-f[2]),n(e(t(a[1],f[0]),t(-f[1],a[0])),h[2]))),o[3]))),e(n(e(n(e(t(f[1],h[0]),t(-h[1],f[0])),o[2]),e(n(e(t(o[1],h[0]),t(-h[1],o[0])),-f[2]),n(e(t(o[1],f[0]),t(-f[1],o[0])),h[2]))),-a[3]),e(n(e(n(e(t(a[1],h[0]),t(-h[1],a[0])),o[2]),e(n(e(t(o[1],h[0]),t(-h[1],o[0])),-a[2]),n(e(t(o[1],a[0]),t(-a[1],o[0])),h[2]))),f[3]),n(e(n(e(t(a[1],f[0]),t(-f[1],a[0])),o[2]),e(n(e(t(o[1],f[0]),t(-f[1],o[0])),-a[2]),n(e(t(o[1],a[0]),t(-a[1],o[0])),f[2]))),-h[3]))))),D=e(e(e(n(e(n(e(t(h[1],v[0]),t(-v[1],h[0])),f[2]),e(n(e(t(f[1],v[0]),t(-v[1],f[0])),-h[2]),n(e(t(f[1],h[0]),t(-h[1],f[0])),v[2]))),o[3]),n(e(n(e(t(h[1],v[0]),t(-v[1],h[0])),o[2]),e(n(e(t(o[1],v[0]),t(-v[1],o[0])),-h[2]),n(e(t(o[1],h[0]),t(-h[1],o[0])),v[2]))),-f[3])),e(n(e(n(e(t(f[1],v[0]),t(-v[1],f[0])),o[2]),e(n(e(t(o[1],v[0]),t(-v[1],o[0])),-f[2]),n(e(t(o[1],f[0]),t(-f[1],o[0])),v[2]))),h[3]),n(e(n(e(t(f[1],h[0]),t(-h[1],f[0])),o[2]),e(n(e(t(o[1],h[0]),t(-h[1],o[0])),-f[2]),n(e(t(o[1],f[0]),t(-f[1],o[0])),h[2]))),-v[3]))),e(e(n(e(n(e(t(f[1],v[0]),t(-v[1],f[0])),a[2]),e(n(e(t(a[1],v[0]),t(-v[1],a[0])),-f[2]),n(e(t(a[1],f[0]),t(-f[1],a[0])),v[2]))),o[3]),n(e(n(e(t(f[1],v[0]),t(-v[1],f[0])),o[2]),e(n(e(t(o[1],v[0]),t(-v[1],o[0])),-f[2]),n(e(t(o[1],f[0]),t(-f[1],o[0])),v[2]))),-a[3])),e(n(e(n(e(t(a[1],v[0]),t(-v[1],a[0])),o[2]),e(n(e(t(o[1],v[0]),t(-v[1],o[0])),-a[2]),n(e(t(o[1],a[0]),t(-a[1],o[0])),v[2]))),f[3]),n(e(n(e(t(a[1],f[0]),t(-f[1],a[0])),o[2]),e(n(e(t(o[1],f[0]),t(-f[1],o[0])),-a[2]),n(e(t(o[1],a[0]),t(-a[1],o[0])),f[2]))),-v[3])))),m=r(d,D);return m[m.length-1]}}function Tr(e){var t=e===3?Zu:e===4?Hu:$u;return t(Cu,Vu,mu,ku)}var Wu=Tr(3),Ku=Tr(4),De=[function(){return 0},function(){return 0},function(t,n){return n[0]-t[0]},function(t,n,r){var i=(t[1]-r[1])*(n[0]-r[0]),o=(t[0]-r[0])*(n[1]-r[1]),a=i-o,f;if(i>0){if(o<=0)return a;f=i+o}else if(i<0){if(o>=0)return a;f=-(i+o)}else return a;var h=Xu*f;return a>=h||a<=-h?a:Wu(t,n,r)},function(t,n,r,i){var o=t[0]-i[0],a=n[0]-i[0],f=r[0]-i[0],h=t[1]-i[1],v=n[1]-i[1],d=r[1]-i[1],D=t[2]-i[2],m=n[2]-i[2],C=r[2]-i[2],R=a*d,N=f*v,V=f*h,Y=o*d,K=o*v,Q=a*h,j=D*(R-N)+m*(V-Y)+C*(K-Q),Z=(Math.abs(R)+Math.abs(N))*Math.abs(D)+(Math.abs(V)+Math.abs(Y))*Math.abs(m)+(Math.abs(K)+Math.abs(Q))*Math.abs(C),W=Yu*Z;return j>W||-j>W?j:Ku(t,n,r,i)}];function Qu(e){var t=De[e.length];return t||(t=De[e.length]=Tr(e.length)),t.apply(void 0,e)}function Ju(e,t,n,r,i,o,a){return function(h,v,d,D,m){switch(arguments.length){case 0:case 1:return 0;case 2:return r(h,v);case 3:return i(h,v,d);case 4:return o(h,v,d,D);case 5:return a(h,v,d,D,m)}for(var C=new Array(arguments.length),R=0;R<arguments.length;++R)C[R]=arguments[R];return e(C)}}function ju(){for(;De.length<=Xi;)De.push(Tr(De.length));yn.exports=Ju.apply(void 0,[Qu].concat(De));for(var e=0;e<=Xi;++e)yn.exports[e]=De[e]}ju()});var Ki=xt((ql,Wi)=>{"use strict";var Br=je(),be=bn()[3],Sn=0,Yi=1,_n=2;Wi.exports=i0;function Hi(e,t,n,r,i){this.a=e,this.b=t,this.idx=n,this.lowerIds=r,this.upperIds=i}function tr(e,t,n,r){this.a=e,this.b=t,this.type=n,this.idx=r}function t0(e,t){var n=e.a[0]-t.a[0]||e.a[1]-t.a[1]||e.type-t.type;return n||e.type!==Sn&&(n=be(e.a,e.b,t.b),n)?n:e.idx-t.idx}function Zi(e,t){return be(e.a,e.b,t)}function e0(e,t,n,r,i){for(var o=Br.lt(t,r,Zi),a=Br.gt(t,r,Zi),f=o;f<a;++f){for(var h=t[f],v=h.lowerIds,D=v.length;D>1&&be(n[v[D-2]],n[v[D-1]],r)>0;)e.push([v[D-1],v[D-2],i]),D-=1;v.length=D,v.push(i);for(var d=h.upperIds,D=d.length;D>1&&be(n[d[D-2]],n[d[D-1]],r)<0;)e.push([d[D-2],d[D-1],i]),D-=1;d.length=D,d.push(i)}}function $i(e,t){var n;return e.a[0]<t.a[0]?n=be(e.a,e.b,t.a):n=be(t.b,t.a,e.a),n||(t.b[0]<e.b[0]?n=be(e.a,e.b,t.b):n=be(t.b,t.a,e.b),n||e.idx-t.idx)}function r0(e,t,n){var r=Br.le(e,n,$i),i=e[r],o=i.upperIds,a=o[o.length-1];i.upperIds=[a],e.splice(r+1,0,new Hi(n.a,n.b,n.idx,[a],o))}function n0(e,t,n){var r=n.a;n.a=n.b,n.b=r;var i=Br.eq(e,n,$i),o=e[i],a=e[i-1];a.upperIds=o.upperIds,e.splice(i,1)}function i0(e,t){for(var n=e.length,r=t.length,i=[],o=0;o<n;++o)i.push(new tr(e[o],null,Sn,o));for(var o=0;o<r;++o){var a=t[o],f=e[a[0]],h=e[a[1]];f[0]<h[0]?i.push(new tr(f,h,_n,o),new tr(h,f,Yi,o)):f[0]>h[0]&&i.push(new tr(h,f,_n,o),new tr(f,h,Yi,o))}i.sort(t0);for(var v=i[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),d=[new Hi([v,1],[v,0],-1,[],[],[],[])],D=[],o=0,m=i.length;o<m;++o){var C=i[o],R=C.type;R===Sn?e0(D,d,e,C.a,C.idx):R===_n?r0(d,e,C):n0(d,e,C)}return D}});var ji=xt((Nl,Ji)=>{"use strict";var o0=je();Ji.exports=a0;function Qi(e,t){this.stars=e,this.edges=t}var Fe=Qi.prototype;function Tn(e,t,n){for(var r=1,i=e.length;r<i;r+=2)if(e[r-1]===t&&e[r]===n){e[r-1]=e[i-2],e[r]=e[i-1],e.length=i-2;return}}Fe.isConstraint=(function(){var e=[0,0];function t(n,r){return n[0]-r[0]||n[1]-r[1]}return function(n,r){return e[0]=Math.min(n,r),e[1]=Math.max(n,r),o0.eq(this.edges,e,t)>=0}})();Fe.removeTriangle=function(e,t,n){var r=this.stars;Tn(r[e],t,n),Tn(r[t],n,e),Tn(r[n],e,t)};Fe.addTriangle=function(e,t,n){var r=this.stars;r[e].push(t,n),r[t].push(n,e),r[n].push(e,t)};Fe.opposite=function(e,t){for(var n=this.stars[t],r=1,i=n.length;r<i;r+=2)if(n[r]===e)return n[r-1];return-1};Fe.flip=function(e,t){var n=this.opposite(e,t),r=this.opposite(t,e);this.removeTriangle(e,t,n),this.removeTriangle(t,e,r),this.addTriangle(e,r,n),this.addTriangle(t,n,r)};Fe.edges=function(){for(var e=this.stars,t=[],n=0,r=e.length;n<r;++n)for(var i=e[n],o=0,a=i.length;o<a;o+=2)t.push([i[o],i[o+1]]);return t};Fe.cells=function(){for(var e=this.stars,t=[],n=0,r=e.length;n<r;++n)for(var i=e[n],o=0,a=i.length;o<a;o+=2){var f=i[o],h=i[o+1];n<Math.min(f,h)&&t.push([n,f,h])}return t};function a0(e,t){for(var n=new Array(e),r=0;r<e;++r)n[r]=[];return new Qi(n,t)}});var ro=xt((Vl,Bn)=>{"use strict";var s0=_r(),u0=dn(),f0=Mn(),c0=xn(),to=6;function eo(e){var t=e===3?p0:e===4?g0:e===5?d0:w0;return t(u0,f0,s0,c0)}function l0(){return 0}function h0(){return 0}function v0(){return 0}function p0(e,t,n,r){function i(o,a,f){var h=n(o[0],o[0]),v=r(h,a[0]),d=r(h,f[0]),D=n(a[0],a[0]),m=r(D,o[0]),C=r(D,f[0]),R=n(f[0],f[0]),N=r(R,o[0]),V=r(R,a[0]),Y=e(t(V,C),t(m,v)),K=t(N,d),Q=t(Y,K);return Q[Q.length-1]}return i}function g0(e,t,n,r){function i(o,a,f,h){var v=e(n(o[0],o[0]),n(o[1],o[1])),d=r(v,a[0]),D=r(v,f[0]),m=r(v,h[0]),C=e(n(a[0],a[0]),n(a[1],a[1])),R=r(C,o[0]),N=r(C,f[0]),V=r(C,h[0]),Y=e(n(f[0],f[0]),n(f[1],f[1])),K=r(Y,o[0]),Q=r(Y,a[0]),j=r(Y,h[0]),Z=e(n(h[0],h[0]),n(h[1],h[1])),W=r(Z,o[0]),st=r(Z,a[0]),et=r(Z,f[0]),rt=e(e(r(t(et,j),a[1]),e(r(t(st,V),-f[1]),r(t(Q,N),h[1]))),e(r(t(st,V),o[1]),e(r(t(W,m),-a[1]),r(t(R,d),h[1])))),F=e(e(r(t(et,j),o[1]),e(r(t(W,m),-f[1]),r(t(K,D),h[1]))),e(r(t(Q,N),o[1]),e(r(t(K,D),-a[1]),r(t(R,d),f[1])))),s=t(rt,F);return s[s.length-1]}return i}function d0(e,t,n,r){function i(o,a,f,h,v){var d=e(n(o[0],o[0]),e(n(o[1],o[1]),n(o[2],o[2]))),D=r(d,a[0]),m=r(d,f[0]),C=r(d,h[0]),R=r(d,v[0]),N=e(n(a[0],a[0]),e(n(a[1],a[1]),n(a[2],a[2]))),V=r(N,o[0]),Y=r(N,f[0]),K=r(N,h[0]),Q=r(N,v[0]),j=e(n(f[0],f[0]),e(n(f[1],f[1]),n(f[2],f[2]))),Z=r(j,o[0]),W=r(j,a[0]),st=r(j,h[0]),et=r(j,v[0]),rt=e(n(h[0],h[0]),e(n(h[1],h[1]),n(h[2],h[2]))),F=r(rt,o[0]),s=r(rt,a[0]),p=r(rt,f[0]),_=r(rt,v[0]),y=e(n(v[0],v[0]),e(n(v[1],v[1]),n(v[2],v[2]))),T=r(y,o[0]),E=r(y,a[0]),O=r(y,f[0]),P=r(y,h[0]),l=e(e(e(r(e(r(t(P,_),f[1]),e(r(t(O,et),-h[1]),r(t(p,st),v[1]))),a[2]),e(r(e(r(t(P,_),a[1]),e(r(t(E,Q),-h[1]),r(t(s,K),v[1]))),-f[2]),r(e(r(t(O,et),a[1]),e(r(t(E,Q),-f[1]),r(t(W,Y),v[1]))),h[2]))),e(r(e(r(t(p,st),a[1]),e(r(t(s,K),-f[1]),r(t(W,Y),h[1]))),-v[2]),e(r(e(r(t(P,_),a[1]),e(r(t(E,Q),-h[1]),r(t(s,K),v[1]))),o[2]),r(e(r(t(P,_),o[1]),e(r(t(T,R),-h[1]),r(t(F,C),v[1]))),-a[2])))),e(e(r(e(r(t(E,Q),o[1]),e(r(t(T,R),-a[1]),r(t(V,D),v[1]))),h[2]),e(r(e(r(t(s,K),o[1]),e(r(t(F,C),-a[1]),r(t(V,D),h[1]))),-v[2]),r(e(r(t(p,st),a[1]),e(r(t(s,K),-f[1]),r(t(W,Y),h[1]))),o[2]))),e(r(e(r(t(p,st),o[1]),e(r(t(F,C),-f[1]),r(t(Z,m),h[1]))),-a[2]),e(r(e(r(t(s,K),o[1]),e(r(t(F,C),-a[1]),r(t(V,D),h[1]))),f[2]),r(e(r(t(W,Y),o[1]),e(r(t(Z,m),-a[1]),r(t(V,D),f[1]))),-h[2]))))),U=e(e(e(r(e(r(t(P,_),f[1]),e(r(t(O,et),-h[1]),r(t(p,st),v[1]))),o[2]),r(e(r(t(P,_),o[1]),e(r(t(T,R),-h[1]),r(t(F,C),v[1]))),-f[2])),e(r(e(r(t(O,et),o[1]),e(r(t(T,R),-f[1]),r(t(Z,m),v[1]))),h[2]),r(e(r(t(p,st),o[1]),e(r(t(F,C),-f[1]),r(t(Z,m),h[1]))),-v[2]))),e(e(r(e(r(t(O,et),a[1]),e(r(t(E,Q),-f[1]),r(t(W,Y),v[1]))),o[2]),r(e(r(t(O,et),o[1]),e(r(t(T,R),-f[1]),r(t(Z,m),v[1]))),-a[2])),e(r(e(r(t(E,Q),o[1]),e(r(t(T,R),-a[1]),r(t(V,D),v[1]))),f[2]),r(e(r(t(W,Y),o[1]),e(r(t(Z,m),-a[1]),r(t(V,D),f[1]))),-v[2])))),ot=t(l,U);return ot[ot.length-1]}return i}function w0(e,t,n,r){function i(o,a,f,h,v,d){var D=e(e(n(o[0],o[0]),n(o[1],o[1])),e(n(o[2],o[2]),n(o[3],o[3]))),m=r(D,a[0]),C=r(D,f[0]),R=r(D,h[0]),N=r(D,v[0]),V=r(D,d[0]),Y=e(e(n(a[0],a[0]),n(a[1],a[1])),e(n(a[2],a[2]),n(a[3],a[3]))),K=r(Y,o[0]),Q=r(Y,f[0]),j=r(Y,h[0]),Z=r(Y,v[0]),W=r(Y,d[0]),st=e(e(n(f[0],f[0]),n(f[1],f[1])),e(n(f[2],f[2]),n(f[3],f[3]))),et=r(st,o[0]),rt=r(st,a[0]),F=r(st,h[0]),s=r(st,v[0]),p=r(st,d[0]),_=e(e(n(h[0],h[0]),n(h[1],h[1])),e(n(h[2],h[2]),n(h[3],h[3]))),y=r(_,o[0]),T=r(_,a[0]),E=r(_,f[0]),O=r(_,v[0]),P=r(_,d[0]),l=e(e(n(v[0],v[0]),n(v[1],v[1])),e(n(v[2],v[2]),n(v[3],v[3]))),U=r(l,o[0]),ot=r(l,a[0]),at=r(l,f[0]),ut=r(l,h[0]),ft=r(l,d[0]),Mt=e(e(n(d[0],d[0]),n(d[1],d[1])),e(n(d[2],d[2]),n(d[3],d[3]))),vt=r(Mt,o[0]),X=r(Mt,a[0]),$=r(Mt,f[0]),A=r(Mt,h[0]),c=r(Mt,v[0]),b=e(e(e(r(e(e(r(e(r(t(c,ft),h[1]),e(r(t(A,P),-v[1]),r(t(ut,O),d[1]))),f[2]),r(e(r(t(c,ft),f[1]),e(r(t($,p),-v[1]),r(t(at,s),d[1]))),-h[2])),e(r(e(r(t(A,P),f[1]),e(r(t($,p),-h[1]),r(t(E,F),d[1]))),v[2]),r(e(r(t(ut,O),f[1]),e(r(t(at,s),-h[1]),r(t(E,F),v[1]))),-d[2]))),a[3]),e(r(e(e(r(e(r(t(c,ft),h[1]),e(r(t(A,P),-v[1]),r(t(ut,O),d[1]))),a[2]),r(e(r(t(c,ft),a[1]),e(r(t(X,W),-v[1]),r(t(ot,Z),d[1]))),-h[2])),e(r(e(r(t(A,P),a[1]),e(r(t(X,W),-h[1]),r(t(T,j),d[1]))),v[2]),r(e(r(t(ut,O),a[1]),e(r(t(ot,Z),-h[1]),r(t(T,j),v[1]))),-d[2]))),-f[3]),r(e(e(r(e(r(t(c,ft),f[1]),e(r(t($,p),-v[1]),r(t(at,s),d[1]))),a[2]),r(e(r(t(c,ft),a[1]),e(r(t(X,W),-v[1]),r(t(ot,Z),d[1]))),-f[2])),e(r(e(r(t($,p),a[1]),e(r(t(X,W),-f[1]),r(t(rt,Q),d[1]))),v[2]),r(e(r(t(at,s),a[1]),e(r(t(ot,Z),-f[1]),r(t(rt,Q),v[1]))),-d[2]))),h[3]))),e(e(r(e(e(r(e(r(t(A,P),f[1]),e(r(t($,p),-h[1]),r(t(E,F),d[1]))),a[2]),r(e(r(t(A,P),a[1]),e(r(t(X,W),-h[1]),r(t(T,j),d[1]))),-f[2])),e(r(e(r(t($,p),a[1]),e(r(t(X,W),-f[1]),r(t(rt,Q),d[1]))),h[2]),r(e(r(t(E,F),a[1]),e(r(t(T,j),-f[1]),r(t(rt,Q),h[1]))),-d[2]))),-v[3]),r(e(e(r(e(r(t(ut,O),f[1]),e(r(t(at,s),-h[1]),r(t(E,F),v[1]))),a[2]),r(e(r(t(ut,O),a[1]),e(r(t(ot,Z),-h[1]),r(t(T,j),v[1]))),-f[2])),e(r(e(r(t(at,s),a[1]),e(r(t(ot,Z),-f[1]),r(t(rt,Q),v[1]))),h[2]),r(e(r(t(E,F),a[1]),e(r(t(T,j),-f[1]),r(t(rt,Q),h[1]))),-v[2]))),d[3])),e(r(e(e(r(e(r(t(c,ft),h[1]),e(r(t(A,P),-v[1]),r(t(ut,O),d[1]))),a[2]),r(e(r(t(c,ft),a[1]),e(r(t(X,W),-v[1]),r(t(ot,Z),d[1]))),-h[2])),e(r(e(r(t(A,P),a[1]),e(r(t(X,W),-h[1]),r(t(T,j),d[1]))),v[2]),r(e(r(t(ut,O),a[1]),e(r(t(ot,Z),-h[1]),r(t(T,j),v[1]))),-d[2]))),o[3]),r(e(e(r(e(r(t(c,ft),h[1]),e(r(t(A,P),-v[1]),r(t(ut,O),d[1]))),o[2]),r(e(r(t(c,ft),o[1]),e(r(t(vt,V),-v[1]),r(t(U,N),d[1]))),-h[2])),e(r(e(r(t(A,P),o[1]),e(r(t(vt,V),-h[1]),r(t(y,R),d[1]))),v[2]),r(e(r(t(ut,O),o[1]),e(r(t(U,N),-h[1]),r(t(y,R),v[1]))),-d[2]))),-a[3])))),e(e(e(r(e(e(r(e(r(t(c,ft),a[1]),e(r(t(X,W),-v[1]),r(t(ot,Z),d[1]))),o[2]),r(e(r(t(c,ft),o[1]),e(r(t(vt,V),-v[1]),r(t(U,N),d[1]))),-a[2])),e(r(e(r(t(X,W),o[1]),e(r(t(vt,V),-a[1]),r(t(K,m),d[1]))),v[2]),r(e(r(t(ot,Z),o[1]),e(r(t(U,N),-a[1]),r(t(K,m),v[1]))),-d[2]))),h[3]),r(e(e(r(e(r(t(A,P),a[1]),e(r(t(X,W),-h[1]),r(t(T,j),d[1]))),o[2]),r(e(r(t(A,P),o[1]),e(r(t(vt,V),-h[1]),r(t(y,R),d[1]))),-a[2])),e(r(e(r(t(X,W),o[1]),e(r(t(vt,V),-a[1]),r(t(K,m),d[1]))),h[2]),r(e(r(t(T,j),o[1]),e(r(t(y,R),-a[1]),r(t(K,m),h[1]))),-d[2]))),-v[3])),e(r(e(e(r(e(r(t(ut,O),a[1]),e(r(t(ot,Z),-h[1]),r(t(T,j),v[1]))),o[2]),r(e(r(t(ut,O),o[1]),e(r(t(U,N),-h[1]),r(t(y,R),v[1]))),-a[2])),e(r(e(r(t(ot,Z),o[1]),e(r(t(U,N),-a[1]),r(t(K,m),v[1]))),h[2]),r(e(r(t(T,j),o[1]),e(r(t(y,R),-a[1]),r(t(K,m),h[1]))),-v[2]))),d[3]),r(e(e(r(e(r(t(A,P),f[1]),e(r(t($,p),-h[1]),r(t(E,F),d[1]))),a[2]),r(e(r(t(A,P),a[1]),e(r(t(X,W),-h[1]),r(t(T,j),d[1]))),-f[2])),e(r(e(r(t($,p),a[1]),e(r(t(X,W),-f[1]),r(t(rt,Q),d[1]))),h[2]),r(e(r(t(E,F),a[1]),e(r(t(T,j),-f[1]),r(t(rt,Q),h[1]))),-d[2]))),o[3]))),e(e(r(e(e(r(e(r(t(A,P),f[1]),e(r(t($,p),-h[1]),r(t(E,F),d[1]))),o[2]),r(e(r(t(A,P),o[1]),e(r(t(vt,V),-h[1]),r(t(y,R),d[1]))),-f[2])),e(r(e(r(t($,p),o[1]),e(r(t(vt,V),-f[1]),r(t(et,C),d[1]))),h[2]),r(e(r(t(E,F),o[1]),e(r(t(y,R),-f[1]),r(t(et,C),h[1]))),-d[2]))),-a[3]),r(e(e(r(e(r(t(A,P),a[1]),e(r(t(X,W),-h[1]),r(t(T,j),d[1]))),o[2]),r(e(r(t(A,P),o[1]),e(r(t(vt,V),-h[1]),r(t(y,R),d[1]))),-a[2])),e(r(e(r(t(X,W),o[1]),e(r(t(vt,V),-a[1]),r(t(K,m),d[1]))),h[2]),r(e(r(t(T,j),o[1]),e(r(t(y,R),-a[1]),r(t(K,m),h[1]))),-d[2]))),f[3])),e(r(e(e(r(e(r(t($,p),a[1]),e(r(t(X,W),-f[1]),r(t(rt,Q),d[1]))),o[2]),r(e(r(t($,p),o[1]),e(r(t(vt,V),-f[1]),r(t(et,C),d[1]))),-a[2])),e(r(e(r(t(X,W),o[1]),e(r(t(vt,V),-a[1]),r(t(K,m),d[1]))),f[2]),r(e(r(t(rt,Q),o[1]),e(r(t(et,C),-a[1]),r(t(K,m),f[1]))),-d[2]))),-h[3]),r(e(e(r(e(r(t(E,F),a[1]),e(r(t(T,j),-f[1]),r(t(rt,Q),h[1]))),o[2]),r(e(r(t(E,F),o[1]),e(r(t(y,R),-f[1]),r(t(et,C),h[1]))),-a[2])),e(r(e(r(t(T,j),o[1]),e(r(t(y,R),-a[1]),r(t(K,m),h[1]))),f[2]),r(e(r(t(rt,Q),o[1]),e(r(t(et,C),-a[1]),r(t(K,m),f[1]))),-h[2]))),d[3]))))),w=e(e(e(r(e(e(r(e(r(t(c,ft),h[1]),e(r(t(A,P),-v[1]),r(t(ut,O),d[1]))),f[2]),r(e(r(t(c,ft),f[1]),e(r(t($,p),-v[1]),r(t(at,s),d[1]))),-h[2])),e(r(e(r(t(A,P),f[1]),e(r(t($,p),-h[1]),r(t(E,F),d[1]))),v[2]),r(e(r(t(ut,O),f[1]),e(r(t(at,s),-h[1]),r(t(E,F),v[1]))),-d[2]))),o[3]),e(r(e(e(r(e(r(t(c,ft),h[1]),e(r(t(A,P),-v[1]),r(t(ut,O),d[1]))),o[2]),r(e(r(t(c,ft),o[1]),e(r(t(vt,V),-v[1]),r(t(U,N),d[1]))),-h[2])),e(r(e(r(t(A,P),o[1]),e(r(t(vt,V),-h[1]),r(t(y,R),d[1]))),v[2]),r(e(r(t(ut,O),o[1]),e(r(t(U,N),-h[1]),r(t(y,R),v[1]))),-d[2]))),-f[3]),r(e(e(r(e(r(t(c,ft),f[1]),e(r(t($,p),-v[1]),r(t(at,s),d[1]))),o[2]),r(e(r(t(c,ft),o[1]),e(r(t(vt,V),-v[1]),r(t(U,N),d[1]))),-f[2])),e(r(e(r(t($,p),o[1]),e(r(t(vt,V),-f[1]),r(t(et,C),d[1]))),v[2]),r(e(r(t(at,s),o[1]),e(r(t(U,N),-f[1]),r(t(et,C),v[1]))),-d[2]))),h[3]))),e(e(r(e(e(r(e(r(t(A,P),f[1]),e(r(t($,p),-h[1]),r(t(E,F),d[1]))),o[2]),r(e(r(t(A,P),o[1]),e(r(t(vt,V),-h[1]),r(t(y,R),d[1]))),-f[2])),e(r(e(r(t($,p),o[1]),e(r(t(vt,V),-f[1]),r(t(et,C),d[1]))),h[2]),r(e(r(t(E,F),o[1]),e(r(t(y,R),-f[1]),r(t(et,C),h[1]))),-d[2]))),-v[3]),r(e(e(r(e(r(t(ut,O),f[1]),e(r(t(at,s),-h[1]),r(t(E,F),v[1]))),o[2]),r(e(r(t(ut,O),o[1]),e(r(t(U,N),-h[1]),r(t(y,R),v[1]))),-f[2])),e(r(e(r(t(at,s),o[1]),e(r(t(U,N),-f[1]),r(t(et,C),v[1]))),h[2]),r(e(r(t(E,F),o[1]),e(r(t(y,R),-f[1]),r(t(et,C),h[1]))),-v[2]))),d[3])),e(r(e(e(r(e(r(t(c,ft),f[1]),e(r(t($,p),-v[1]),r(t(at,s),d[1]))),a[2]),r(e(r(t(c,ft),a[1]),e(r(t(X,W),-v[1]),r(t(ot,Z),d[1]))),-f[2])),e(r(e(r(t($,p),a[1]),e(r(t(X,W),-f[1]),r(t(rt,Q),d[1]))),v[2]),r(e(r(t(at,s),a[1]),e(r(t(ot,Z),-f[1]),r(t(rt,Q),v[1]))),-d[2]))),o[3]),r(e(e(r(e(r(t(c,ft),f[1]),e(r(t($,p),-v[1]),r(t(at,s),d[1]))),o[2]),r(e(r(t(c,ft),o[1]),e(r(t(vt,V),-v[1]),r(t(U,N),d[1]))),-f[2])),e(r(e(r(t($,p),o[1]),e(r(t(vt,V),-f[1]),r(t(et,C),d[1]))),v[2]),r(e(r(t(at,s),o[1]),e(r(t(U,N),-f[1]),r(t(et,C),v[1]))),-d[2]))),-a[3])))),e(e(e(r(e(e(r(e(r(t(c,ft),a[1]),e(r(t(X,W),-v[1]),r(t(ot,Z),d[1]))),o[2]),r(e(r(t(c,ft),o[1]),e(r(t(vt,V),-v[1]),r(t(U,N),d[1]))),-a[2])),e(r(e(r(t(X,W),o[1]),e(r(t(vt,V),-a[1]),r(t(K,m),d[1]))),v[2]),r(e(r(t(ot,Z),o[1]),e(r(t(U,N),-a[1]),r(t(K,m),v[1]))),-d[2]))),f[3]),r(e(e(r(e(r(t($,p),a[1]),e(r(t(X,W),-f[1]),r(t(rt,Q),d[1]))),o[2]),r(e(r(t($,p),o[1]),e(r(t(vt,V),-f[1]),r(t(et,C),d[1]))),-a[2])),e(r(e(r(t(X,W),o[1]),e(r(t(vt,V),-a[1]),r(t(K,m),d[1]))),f[2]),r(e(r(t(rt,Q),o[1]),e(r(t(et,C),-a[1]),r(t(K,m),f[1]))),-d[2]))),-v[3])),e(r(e(e(r(e(r(t(at,s),a[1]),e(r(t(ot,Z),-f[1]),r(t(rt,Q),v[1]))),o[2]),r(e(r(t(at,s),o[1]),e(r(t(U,N),-f[1]),r(t(et,C),v[1]))),-a[2])),e(r(e(r(t(ot,Z),o[1]),e(r(t(U,N),-a[1]),r(t(K,m),v[1]))),f[2]),r(e(r(t(rt,Q),o[1]),e(r(t(et,C),-a[1]),r(t(K,m),f[1]))),-v[2]))),d[3]),r(e(e(r(e(r(t(ut,O),f[1]),e(r(t(at,s),-h[1]),r(t(E,F),v[1]))),a[2]),r(e(r(t(ut,O),a[1]),e(r(t(ot,Z),-h[1]),r(t(T,j),v[1]))),-f[2])),e(r(e(r(t(at,s),a[1]),e(r(t(ot,Z),-f[1]),r(t(rt,Q),v[1]))),h[2]),r(e(r(t(E,F),a[1]),e(r(t(T,j),-f[1]),r(t(rt,Q),h[1]))),-v[2]))),o[3]))),e(e(r(e(e(r(e(r(t(ut,O),f[1]),e(r(t(at,s),-h[1]),r(t(E,F),v[1]))),o[2]),r(e(r(t(ut,O),o[1]),e(r(t(U,N),-h[1]),r(t(y,R),v[1]))),-f[2])),e(r(e(r(t(at,s),o[1]),e(r(t(U,N),-f[1]),r(t(et,C),v[1]))),h[2]),r(e(r(t(E,F),o[1]),e(r(t(y,R),-f[1]),r(t(et,C),h[1]))),-v[2]))),-a[3]),r(e(e(r(e(r(t(ut,O),a[1]),e(r(t(ot,Z),-h[1]),r(t(T,j),v[1]))),o[2]),r(e(r(t(ut,O),o[1]),e(r(t(U,N),-h[1]),r(t(y,R),v[1]))),-a[2])),e(r(e(r(t(ot,Z),o[1]),e(r(t(U,N),-a[1]),r(t(K,m),v[1]))),h[2]),r(e(r(t(T,j),o[1]),e(r(t(y,R),-a[1]),r(t(K,m),h[1]))),-v[2]))),f[3])),e(r(e(e(r(e(r(t(at,s),a[1]),e(r(t(ot,Z),-f[1]),r(t(rt,Q),v[1]))),o[2]),r(e(r(t(at,s),o[1]),e(r(t(U,N),-f[1]),r(t(et,C),v[1]))),-a[2])),e(r(e(r(t(ot,Z),o[1]),e(r(t(U,N),-a[1]),r(t(K,m),v[1]))),f[2]),r(e(r(t(rt,Q),o[1]),e(r(t(et,C),-a[1]),r(t(K,m),f[1]))),-v[2]))),-h[3]),r(e(e(r(e(r(t(E,F),a[1]),e(r(t(T,j),-f[1]),r(t(rt,Q),h[1]))),o[2]),r(e(r(t(E,F),o[1]),e(r(t(y,R),-f[1]),r(t(et,C),h[1]))),-a[2])),e(r(e(r(t(T,j),o[1]),e(r(t(y,R),-a[1]),r(t(K,m),h[1]))),f[2]),r(e(r(t(rt,Q),o[1]),e(r(t(et,C),-a[1]),r(t(K,m),f[1]))),-h[2]))),v[3]))))),I=t(b,w);return I[I.length-1]}return i}var Ae=[l0,h0,v0];function x0(e){var t=Ae[e.length];return t||(t=Ae[e.length]=eo(e.length)),t.apply(void 0,e)}function M0(e,t,n,r,i,o,a,f){function h(v,d,D,m,C,R){switch(arguments.length){case 0:case 1:return 0;case 2:return r(v,d);case 3:return i(v,d,D);case 4:return o(v,d,D,m);case 5:return a(v,d,D,m,C);case 6:return f(v,d,D,m,C,R)}for(var N=new Array(arguments.length),V=0;V<arguments.length;++V)N[V]=arguments[V];return e(N)}return h}function y0(){for(;Ae.length<=to;)Ae.push(eo(Ae.length));Bn.exports=M0.apply(void 0,[x0].concat(Ae));for(var e=0;e<=to;++e)Bn.exports[e]=Ae[e]}y0()});var io=xt((ml,no)=>{"use strict";var Pn=ro()[4],Cl=je();no.exports=b0;function Pr(e,t,n,r,i,o){var a=t.opposite(r,i);if(!(a<0)){if(i<r){var f=r;r=i,i=f,f=o,o=a,a=f}t.isConstraint(r,i)||Pn(e[r],e[i],e[o],e[a])<0&&n.push(r,i)}}function b0(e,t){for(var n=[],r=e.length,i=t.stars,o=0;o<r;++o)for(var a=i[o],f=1;f<a.length;f+=2){var h=a[f];if(!(h<o)&&!t.isConstraint(o,h)){for(var v=a[f-1],d=-1,D=1;D<a.length;D+=2)if(a[D-1]===h){d=a[D];break}d<0||Pn(e[o],e[h],e[v],e[d])<0&&n.push(o,h)}}for(;n.length>0;){for(var h=n.pop(),o=n.pop(),v=-1,d=-1,a=i[o],m=1;m<a.length;m+=2){var C=a[m-1],R=a[m];C===h?d=R:R===h&&(v=C)}v<0||d<0||Pn(e[o],e[h],e[v],e[d])>=0||(t.flip(o,h),Pr(e,t,n,v,o,d),Pr(e,t,n,o,d,v),Pr(e,t,n,d,h,v),Pr(e,t,n,h,v,d))}}});var uo=xt((kl,so)=>{"use strict";var _0=je();so.exports=P0;function oo(e,t,n,r,i,o,a){this.cells=e,this.neighbor=t,this.flags=r,this.constraint=n,this.active=i,this.next=o,this.boundary=a}var S0=oo.prototype;function ao(e,t){return e[0]-t[0]||e[1]-t[1]||e[2]-t[2]}S0.locate=(function(){var e=[0,0,0];return function(t,n,r){var i=t,o=n,a=r;return n<r?n<t&&(i=n,o=r,a=t):r<t&&(i=r,o=t,a=n),i<0?-1:(e[0]=i,e[1]=o,e[2]=a,_0.eq(this.cells,e,ao))}})();function T0(e,t){for(var n=e.cells(),r=n.length,i=0;i<r;++i){var o=n[i],a=o[0],f=o[1],h=o[2];f<h?f<a&&(o[0]=f,o[1]=h,o[2]=a):h<a&&(o[0]=h,o[1]=a,o[2]=f)}n.sort(ao);for(var v=new Array(r),i=0;i<v.length;++i)v[i]=0;var d=[],D=[],m=new Array(3*r),C=new Array(3*r),R=null;t&&(R=[]);for(var N=new oo(n,m,C,v,d,D,R),i=0;i<r;++i)for(var o=n[i],V=0;V<3;++V){var a=o[V],f=o[(V+1)%3],Y=m[3*i+V]=N.locate(f,a,e.opposite(f,a)),K=C[3*i+V]=e.isConstraint(a,f);Y<0&&(K?D.push(i):(d.push(i),v[i]=1),t&&R.push([f,a,-1]))}return N}function B0(e,t,n){for(var r=0,i=0;i<e.length;++i)t[i]===n&&(e[r++]=e[i]);return e.length=r,e}function P0(e,t,n){var r=T0(e,n);if(t===0)return n?r.cells.concat(r.boundary):r.cells;for(var i=1,o=r.active,a=r.next,f=r.flags,h=r.cells,v=r.constraint,d=r.neighbor;o.length>0||a.length>0;){for(;o.length>0;){var D=o.pop();if(f[D]!==-i){f[D]=i;for(var m=h[D],C=0;C<3;++C){var R=d[3*D+C];R>=0&&f[R]===0&&(v[3*D+C]?a.push(R):(o.push(R),f[R]=i))}}}var N=a;a=o,o=N,a.length=0,i=-i}var V=B0(h,f,t);return n?V.concat(r.boundary):V}});var co=xt((Xl,fo)=>{"use strict";var D0=Ki(),F0=ji(),A0=io(),Dn=uo();fo.exports=E0;function U0(e){return[Math.min(e[0],e[1]),Math.max(e[0],e[1])]}function z0(e,t){return e[0]-t[0]||e[1]-t[1]}function I0(e){return e.map(U0).sort(z0)}function Dr(e,t,n){return t in e?e[t]:n}function E0(e,t,n){Array.isArray(t)?(n=n||{},t=t||[]):(n=t||{},t=[]);var r=!!Dr(n,"delaunay",!0),i=!!Dr(n,"interior",!0),o=!!Dr(n,"exterior",!0),a=!!Dr(n,"infinity",!1);if(!i&&!o||e.length===0)return[];var f=D0(e,t);if(r||i!==o||a){for(var h=F0(e.length,I0(t)),v=0;v<f.length;++v){var d=f[v];h.addTriangle(d[0],d[1],d[2])}return r&&A0(e,h),o?i?a?Dn(h,0,a):h.cells():Dn(h,1,a):Dn(h,-1)}else return f}});var vo=xt((Yl,ho)=>{"use strict";"use restrict";ho.exports=lo;function lo(e){this.roots=new Array(e),this.ranks=new Array(e);for(var t=0;t<e;++t)this.roots[t]=t,this.ranks[t]=0}var Fr=lo.prototype;Object.defineProperty(Fr,"length",{get:function(){return this.roots.length}});Fr.makeSet=function(){var e=this.roots.length;return this.roots.push(e),this.ranks.push(0),e};Fr.find=function(e){for(var t=e,n=this.roots;n[e]!==e;)e=n[e];for(;n[t]!==e;){var r=n[t];n[t]=e,t=r}return e};Fr.link=function(e,t){var n=this.find(e),r=this.find(t);if(n!==r){var i=this.ranks,o=this.roots,a=i[n],f=i[r];a<f?o[n]=r:f<a?o[r]=n:(o[r]=n,++i[n])}}});var rr=xt(kt=>{"use strict";"use restrict";var Fn=32;kt.INT_BITS=Fn;kt.INT_MAX=2147483647;kt.INT_MIN=-1<<Fn-1;kt.sign=function(e){return(e>0)-(e<0)};kt.abs=function(e){var t=e>>Fn-1;return(e^t)-t};kt.min=function(e,t){return t^(e^t)&-(e<t)};kt.max=function(e,t){return e^(e^t)&-(e<t)};kt.isPow2=function(e){return!(e&e-1)&&!!e};kt.log2=function(e){var t,n;return t=(e>65535)<<4,e>>>=t,n=(e>255)<<3,e>>>=n,t|=n,n=(e>15)<<2,e>>>=n,t|=n,n=(e>3)<<1,e>>>=n,t|=n,t|e>>1};kt.log10=function(e){return e>=1e9?9:e>=1e8?8:e>=1e7?7:e>=1e6?6:e>=1e5?5:e>=1e4?4:e>=1e3?3:e>=100?2:e>=10?1:0};kt.popCount=function(e){return e=e-(e>>>1&1431655765),e=(e&858993459)+(e>>>2&858993459),(e+(e>>>4)&252645135)*16843009>>>24};function po(e){var t=32;return e&=-e,e&&t--,e&65535&&(t-=16),e&16711935&&(t-=8),e&252645135&&(t-=4),e&858993459&&(t-=2),e&1431655765&&(t-=1),t}kt.countTrailingZeros=po;kt.nextPow2=function(e){return e+=e===0,--e,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e+1};kt.prevPow2=function(e){return e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e-(e>>>1)};kt.parity=function(e){return e^=e>>>16,e^=e>>>8,e^=e>>>4,e&=15,27030>>>e&1};var er=new Array(256);(function(e){for(var t=0;t<256;++t){var n=t,r=t,i=7;for(n>>>=1;n;n>>>=1)r<<=1,r|=n&1,--i;e[t]=r<<i&255}})(er);kt.reverse=function(e){return er[e&255]<<24|er[e>>>8&255]<<16|er[e>>>16&255]<<8|er[e>>>24&255]};kt.interleave2=function(e,t){return e&=65535,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t&=65535,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1};kt.deinterleave2=function(e,t){return e=e>>>t&1431655765,e=(e|e>>>1)&858993459,e=(e|e>>>2)&252645135,e=(e|e>>>4)&16711935,e=(e|e>>>16)&65535,e<<16>>16};kt.interleave3=function(e,t,n){return e&=1023,e=(e|e<<16)&4278190335,e=(e|e<<8)&251719695,e=(e|e<<4)&3272356035,e=(e|e<<2)&1227133513,t&=1023,t=(t|t<<16)&4278190335,t=(t|t<<8)&251719695,t=(t|t<<4)&3272356035,t=(t|t<<2)&1227133513,e|=t<<1,n&=1023,n=(n|n<<16)&4278190335,n=(n|n<<8)&251719695,n=(n|n<<4)&3272356035,n=(n|n<<2)&1227133513,e|n<<2};kt.deinterleave3=function(e,t){return e=e>>>t&1227133513,e=(e|e>>>2)&3272356035,e=(e|e>>>4)&251719695,e=(e|e>>>8)&4278190335,e=(e|e>>>16)&1023,e<<22>>22};kt.nextCombination=function(e){var t=e|e-1;return t+1|(~t&-~t)-1>>>po(e)+1}});var xo=xt((Hl,wo)=>{"use strict";function go(e,t,n){var r=e[n]|0;if(r<=0)return[];var i=new Array(r),o;if(n===e.length-1)for(o=0;o<r;++o)i[o]=t;else for(o=0;o<r;++o)i[o]=go(e,t,n+1);return i}function L0(e,t){var n,r;for(n=new Array(e),r=0;r<e;++r)n[r]=t;return n}function G0(e,t){switch(typeof t>"u"&&(t=0),typeof e){case"number":if(e>0)return L0(e|0,t);break;case"object":if(typeof e.length=="number")return go(e,t,0);break}return[]}wo.exports=G0});var zr=xt(Et=>{"use strict";var Ar=rr(),te=xo();globalThis.__TYPEDARRAY_POOL||(globalThis.__TYPEDARRAY_POOL={UINT8:te([32,0]),UINT16:te([32,0]),UINT32:te([32,0]),BIGUINT64:te([32,0]),INT8:te([32,0]),INT16:te([32,0]),INT32:te([32,0]),BIGINT64:te([32,0]),FLOAT:te([32,0]),DOUBLE:te([32,0]),DATA:te([32,0]),UINT8C:te([32,0])});var R0=typeof Uint8ClampedArray<"u",O0=typeof BigUint64Array<"u",q0=typeof BigInt64Array<"u",Qt=globalThis.__TYPEDARRAY_POOL;Qt.UINT8C||(Qt.UINT8C=te([32,0]));Qt.BIGUINT64||(Qt.BIGUINT64=te([32,0]));Qt.BIGINT64||(Qt.BIGINT64=te([32,0]));var Ur=Qt.DATA;Et.free=function(t){if(Object.prototype.toString.call(t)!=="[object ArrayBuffer]"&&(t=t.buffer),!!t){var n=t.length||t.byteLength,r=Ar.log2(n)|0;Ur[r].push(t)}};function Mo(e){if(e){var t=e.length||e.byteLength,n=Ar.log2(t);Ur[n].push(e)}}function N0(e){Mo(e.buffer)}Et.freeUint8=Et.freeUint16=Et.freeUint32=Et.freeBigUint64=Et.freeInt8=Et.freeInt16=Et.freeInt32=Et.freeBigInt64=Et.freeFloat32=Et.freeFloat=Et.freeFloat64=Et.freeDouble=Et.freeUint8Clamped=Et.freeDataView=N0;Et.freeArrayBuffer=Mo;Et.malloc=function(t,n){if(n===void 0||n==="arraybuffer")return ie(t);switch(n){case"uint8":return An(t);case"uint16":return yo(t);case"uint32":return bo(t);case"int8":return _o(t);case"int16":return So(t);case"int32":return To(t);case"float":case"float32":return Bo(t);case"double":case"float64":return Po(t);case"uint8_clamped":return Do(t);case"bigint64":return Ao(t);case"biguint64":return Fo(t);case"data":case"dataview":return Uo(t);default:return null}return null};function ie(t){var t=Ar.nextPow2(t),n=Ar.log2(t),r=Ur[n];return r.length>0?r.pop():new ArrayBuffer(t)}Et.mallocArrayBuffer=ie;function An(e){return new Uint8Array(ie(e),0,e)}Et.mallocUint8=An;function yo(e){return new Uint16Array(ie(2*e),0,e)}Et.mallocUint16=yo;function bo(e){return new Uint32Array(ie(4*e),0,e)}Et.mallocUint32=bo;function _o(e){return new Int8Array(ie(e),0,e)}Et.mallocInt8=_o;function So(e){return new Int16Array(ie(2*e),0,e)}Et.mallocInt16=So;function To(e){return new Int32Array(ie(4*e),0,e)}Et.mallocInt32=To;function Bo(e){return new Float32Array(ie(4*e),0,e)}Et.mallocFloat32=Et.mallocFloat=Bo;function Po(e){return new Float64Array(ie(8*e),0,e)}Et.mallocFloat64=Et.mallocDouble=Po;function Do(e){return R0?new Uint8ClampedArray(ie(e),0,e):An(e)}Et.mallocUint8Clamped=Do;function Fo(e){return O0?new BigUint64Array(ie(8*e),0,e):null}Et.mallocBigUint64=Fo;function Ao(e){return q0?new BigInt64Array(ie(8*e),0,e):null}Et.mallocBigInt64=Ao;function Uo(e){return new DataView(ie(e),0,e)}Et.mallocDataView=Uo;Et.clearCache=function(){for(var t=0;t<32;++t)Qt.UINT8[t].length=0,Qt.UINT16[t].length=0,Qt.UINT32[t].length=0,Qt.INT8[t].length=0,Qt.INT16[t].length=0,Qt.INT32[t].length=0,Qt.FLOAT[t].length=0,Qt.DOUBLE[t].length=0,Qt.BIGUINT64[t].length=0,Qt.BIGINT64[t].length=0,Qt.UINT8C[t].length=0,Ur[t].length=0}});var Go=xt((Wl,Lo)=>{"use strict";Lo.exports=V0;var Er=32;function V0(e,t){t<=4*Er?Lr(0,t-1,e):Gr(0,t-1,e)}function Lr(e,t,n){for(var r=2*(e+1),i=e+1;i<=t;++i){for(var o=n[r++],a=n[r++],f=i,h=r-2;f-- >e;){var v=n[h-2],d=n[h-1];if(v<o)break;if(v===o&&d<a)break;n[h]=v,n[h+1]=d,h-=2}n[h]=o,n[h+1]=a}}function zo(e,t,n){e*=2,t*=2;var r=n[e],i=n[e+1];n[e]=n[t],n[e+1]=n[t+1],n[t]=r,n[t+1]=i}function Io(e,t,n){e*=2,t*=2,n[e]=n[t],n[e+1]=n[t+1]}function C0(e,t,n,r){e*=2,t*=2,n*=2;var i=r[e],o=r[e+1];r[e]=r[t],r[e+1]=r[t+1],r[t]=r[n],r[t+1]=r[n+1],r[n]=i,r[n+1]=o}function Eo(e,t,n,r,i){e*=2,t*=2,i[e]=i[t],i[t]=n,i[e+1]=i[t+1],i[t+1]=r}function de(e,t,n){e*=2,t*=2;var r=n[e],i=n[t];return r<i?!1:r===i?n[e+1]>n[t+1]:!0}function Ir(e,t,n,r){e*=2;var i=r[e];return i<t?!0:i===t?r[e+1]<n:!1}function Gr(e,t,n){var r=(t-e+1)/6|0,i=e+r,o=t-r,a=e+t>>1,f=a-r,h=a+r,v=i,d=f,D=a,m=h,C=o,R=e+1,N=t-1,V=0;de(v,d,n)&&(V=v,v=d,d=V),de(m,C,n)&&(V=m,m=C,C=V),de(v,D,n)&&(V=v,v=D,D=V),de(d,D,n)&&(V=d,d=D,D=V),de(v,m,n)&&(V=v,v=m,m=V),de(D,m,n)&&(V=D,D=m,m=V),de(d,C,n)&&(V=d,d=C,C=V),de(d,D,n)&&(V=d,d=D,D=V),de(m,C,n)&&(V=m,m=C,C=V);for(var Y=n[2*d],K=n[2*d+1],Q=n[2*m],j=n[2*m+1],Z=2*v,W=2*D,st=2*C,et=2*i,rt=2*a,F=2*o,s=0;s<2;++s){var p=n[Z+s],_=n[W+s],y=n[st+s];n[et+s]=p,n[rt+s]=_,n[F+s]=y}Io(f,e,n),Io(h,t,n);for(var T=R;T<=N;++T)if(Ir(T,Y,K,n))T!==R&&zo(T,R,n),++R;else if(!Ir(T,Q,j,n))for(;;)if(Ir(N,Q,j,n)){Ir(N,Y,K,n)?(C0(T,R,N,n),++R,--N):(zo(T,N,n),--N);break}else{if(--N<T)break;continue}Eo(e,R-1,Y,K,n),Eo(t,N+1,Q,j,n),R-2-e<=Er?Lr(e,R-2,n):Gr(e,R-2,n),t-(N+2)<=Er?Lr(N+2,t,n):Gr(N+2,t,n),N-R<=Er?Lr(R,N,n):Gr(R,N,n)}});var Un=xt((Kl,Ro)=>{"use strict";Ro.exports={init:k0,sweepBipartite:X0,sweepComplete:Y0,scanBipartite:Z0,scanComplete:H0};var Yt=zr(),m0=rr(),Rr=Go(),se=1<<28,ze=1024,Jt=Yt.mallocInt32(ze),we=Yt.mallocInt32(ze),xe=Yt.mallocInt32(ze),Ue=Yt.mallocInt32(ze),ke=Yt.mallocInt32(ze),nr=Yt.mallocInt32(ze),St=Yt.mallocDouble(ze*8);function k0(e){var t=m0.nextPow2(e);Jt.length<t&&(Yt.free(Jt),Jt=Yt.mallocInt32(t)),we.length<t&&(Yt.free(we),we=Yt.mallocInt32(t)),xe.length<t&&(Yt.free(xe),xe=Yt.mallocInt32(t)),Ue.length<t&&(Yt.free(Ue),Ue=Yt.mallocInt32(t)),ke.length<t&&(Yt.free(ke),ke=Yt.mallocInt32(t)),nr.length<t&&(Yt.free(nr),nr=Yt.mallocInt32(t));var n=8*t;St.length<n&&(Yt.free(St),St=Yt.mallocDouble(n))}function Xe(e,t,n,r){var i=t[r],o=e[n-1];e[i]=o,t[o]=i}function Ye(e,t,n,r){e[n]=r,t[r]=n}function X0(e,t,n,r,i,o,a,f,h,v){for(var d=0,D=2*e,m=e-1,C=D-1,R=n;R<r;++R){var N=o[R],V=D*R;St[d++]=i[V+m],St[d++]=-(N+1),St[d++]=i[V+C],St[d++]=N}for(var R=a;R<f;++R){var N=v[R]+se,Y=D*R;St[d++]=h[Y+m],St[d++]=-N,St[d++]=h[Y+C],St[d++]=N}var K=d>>>1;Rr(St,K);for(var Q=0,j=0,R=0;R<K;++R){var Z=St[2*R+1]|0;if(Z>=se)Z=Z-se|0,Xe(xe,Ue,j--,Z);else if(Z>=0)Xe(Jt,we,Q--,Z);else if(Z<=-se){Z=-Z-se|0;for(var W=0;W<Q;++W){var st=t(Jt[W],Z);if(st!==void 0)return st}Ye(xe,Ue,j++,Z)}else{Z=-Z-1|0;for(var W=0;W<j;++W){var st=t(Z,xe[W]);if(st!==void 0)return st}Ye(Jt,we,Q++,Z)}}}function Y0(e,t,n,r,i,o,a,f,h,v){for(var d=0,D=2*e,m=e-1,C=D-1,R=n;R<r;++R){var N=o[R]+1<<1,V=D*R;St[d++]=i[V+m],St[d++]=-N,St[d++]=i[V+C],St[d++]=N}for(var R=a;R<f;++R){var N=v[R]+1<<1,Y=D*R;St[d++]=h[Y+m],St[d++]=-N|1,St[d++]=h[Y+C],St[d++]=N|1}var K=d>>>1;Rr(St,K);for(var Q=0,j=0,Z=0,R=0;R<K;++R){var W=St[2*R+1]|0,st=W&1;if(R<K-1&&W>>1===St[2*R+3]>>1&&(st=2,R+=1),W<0){for(var et=-(W>>1)-1,rt=0;rt<Z;++rt){var F=t(ke[rt],et);if(F!==void 0)return F}if(st!==0)for(var rt=0;rt<Q;++rt){var F=t(Jt[rt],et);if(F!==void 0)return F}if(st!==1)for(var rt=0;rt<j;++rt){var F=t(xe[rt],et);if(F!==void 0)return F}st===0?Ye(Jt,we,Q++,et):st===1?Ye(xe,Ue,j++,et):st===2&&Ye(ke,nr,Z++,et)}else{var et=(W>>1)-1;st===0?Xe(Jt,we,Q--,et):st===1?Xe(xe,Ue,j--,et):st===2&&Xe(ke,nr,Z--,et)}}}function Z0(e,t,n,r,i,o,a,f,h,v,d,D){var m=0,C=2*e,R=t,N=t+e,V=1,Y=1;r?Y=se:V=se;for(var K=i;K<o;++K){var Q=K+V,j=C*K;St[m++]=a[j+R],St[m++]=-Q,St[m++]=a[j+N],St[m++]=Q}for(var K=h;K<v;++K){var Q=K+Y,Z=C*K;St[m++]=d[Z+R],St[m++]=-Q}var W=m>>>1;Rr(St,W);for(var st=0,K=0;K<W;++K){var et=St[2*K+1]|0;if(et<0){var Q=-et,rt=!1;if(Q>=se?(rt=!r,Q-=se):(rt=!!r,Q-=1),rt)Ye(Jt,we,st++,Q);else{var F=D[Q],s=C*Q,p=d[s+t+1],_=d[s+t+1+e];t:for(var y=0;y<st;++y){var T=Jt[y],E=C*T;if(!(_<a[E+t+1]||a[E+t+1+e]<p)){for(var O=t+2;O<e;++O)if(d[s+O+e]<a[E+O]||a[E+O+e]<d[s+O])continue t;var P=f[T],l;if(r?l=n(F,P):l=n(P,F),l!==void 0)return l}}}}else Xe(Jt,we,st--,et-V)}}function H0(e,t,n,r,i,o,a,f,h,v,d){for(var D=0,m=2*e,C=t,R=t+e,N=r;N<i;++N){var V=N+se,Y=m*N;St[D++]=o[Y+C],St[D++]=-V,St[D++]=o[Y+R],St[D++]=V}for(var N=f;N<h;++N){var V=N+1,K=m*N;St[D++]=v[K+C],St[D++]=-V}var Q=D>>>1;Rr(St,Q);for(var j=0,N=0;N<Q;++N){var Z=St[2*N+1]|0;if(Z<0){var V=-Z;if(V>=se)Jt[j++]=V-se;else{V-=1;var W=d[V],st=m*V,et=v[st+t+1],rt=v[st+t+1+e];t:for(var F=0;F<j;++F){var s=Jt[F],p=a[s];if(p===W)break;var _=m*s;if(!(rt<o[_+t+1]||o[_+t+1+e]<et)){for(var y=t+2;y<e;++y)if(v[st+y+e]<o[_+y]||o[_+y+e]<v[st+y])continue t;var T=n(p,W);if(T!==void 0)return T}}}}else{for(var V=Z-se,F=j-1;F>=0;--F)if(Jt[F]===V){for(var y=F+1;y<j;++y)Jt[y-1]=Jt[y];break}--j}}}});var Co=xt(On=>{"use strict";var Ie="d",$e="ax",Oo="vv",zn="fp",ir="es",Or="rs",Gn="re",or="rb",qo="ri",Ze="rp",qr="bs",Rn="be",ar="bb",No="bi",He="bp",In="rv",En="Q",Ln=[Ie,$e,Oo,Or,Gn,or,qo,qr,Rn,ar,No];function $0(e,t,n){var r="bruteForce"+(e?"Red":"Blue")+(t?"Flip":"")+(n?"Full":""),i=["function ",r,"(",Ln.join(),"){","var ",ir,"=2*",Ie,";"],o="for(var i="+Or+","+Ze+"="+ir+"*"+Or+";i<"+Gn+";++i,"+Ze+"+="+ir+"){var x0="+or+"["+$e+"+"+Ze+"],x1="+or+"["+$e+"+"+Ze+"+"+Ie+"],xi="+qo+"[i];",a="for(var j="+qr+","+He+"="+ir+"*"+qr+";j<"+Rn+";++j,"+He+"+="+ir+"){var y0="+ar+"["+$e+"+"+He+"],"+(n?"y1="+ar+"["+$e+"+"+He+"+"+Ie+"],":"")+"yi="+No+"[j];";return e?i.push(o,En,":",a):i.push(a,En,":",o),n?i.push("if(y1<x0||x1<y0)continue;"):t?i.push("if(y0<=x0||x1<y0)continue;"):i.push("if(y0<x0||x1<y0)continue;"),i.push("for(var k="+$e+"+1;k<"+Ie+";++k){var r0="+or+"[k+"+Ze+"],r1="+or+"[k+"+Ie+"+"+Ze+"],b0="+ar+"[k+"+He+"],b1="+ar+"[k+"+Ie+"+"+He+"];if(r1<b0||b1<r0)continue "+En+";}var "+In+"="+Oo+"("),t?i.push("yi,xi"):i.push("xi,yi"),i.push(");if("+In+"!==void 0)return "+In+";}}}"),{name:r,code:i.join("")}}function Vo(e){var t="bruteForce"+(e?"Full":"Partial"),n=[],r=Ln.slice();e||r.splice(3,0,zn);var i=["function "+t+"("+r.join()+"){"];function o(h,v){var d=$0(h,v,e);n.push(d.code),i.push("return "+d.name+"("+Ln.join()+");")}i.push("if("+Gn+"-"+Or+">"+Rn+"-"+qr+"){"),e?(o(!0,!1),i.push("}else{"),o(!1,!1)):(i.push("if("+zn+"){"),o(!0,!0),i.push("}else{"),o(!0,!1),i.push("}}else{if("+zn+"){"),o(!1,!0),i.push("}else{"),o(!1,!1),i.push("}")),i.push("}}return "+t);var a=n.join("")+i.join(""),f=new Function(a);return f()}On.partial=Vo(!1);On.full=Vo(!0)});var qn=xt((Jl,mo)=>{"use strict";mo.exports=K0;var W0="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m";function K0(e,t){var n="abcdef".split("").concat(t),r=[];return e.indexOf("lo")>=0&&r.push("lo=e[k+n]"),e.indexOf("hi")>=0&&r.push("hi=e[k+o]"),n.push(W0.replace("_",r.join()).replace("$",e)),Function.apply(void 0,n)}});var Yo=xt((jl,Xo)=>{"use strict";Xo.exports=tf;var Q0=qn(),ko=Q0("lo<p0",["p0"]),J0=8;function j0(e,t,n,r,i,o){for(var a=2*e,f=a*(n+1)+t,h=n+1;h<r;++h,f+=a)for(var v=i[f],d=h,D=a*(h-1);d>n&&i[D+t]>v;--d,D-=a){for(var m=D,C=D+a,R=0;R<a;++R,++m,++C){var N=i[m];i[m]=i[C],i[C]=N}var V=o[d];o[d]=o[d-1],o[d-1]=V}}function tf(e,t,n,r,i,o){if(r<=n+1)return n;for(var a=n,f=r,h=r+n>>>1,v=2*e,d=h,D=i[v*h+t];a<f;){if(f-a<J0){j0(e,t,a,f,i,o),D=i[v*h+t];break}var m=f-a,C=Math.random()*m+a|0,R=i[v*C+t],N=Math.random()*m+a|0,V=i[v*N+t],Y=Math.random()*m+a|0,K=i[v*Y+t];R<=V?K>=V?(d=N,D=V):R>=K?(d=C,D=R):(d=Y,D=K):V>=K?(d=N,D=V):K>=R?(d=C,D=R):(d=Y,D=K);for(var Z=v*(f-1),W=v*d,Q=0;Q<v;++Q,++Z,++W){var j=i[Z];i[Z]=i[W],i[W]=j}var st=o[f-1];o[f-1]=o[d],o[d]=st,d=ko(e,t,a,f-1,i,o,D);for(var Z=v*(f-1),W=v*d,Q=0;Q<v;++Q,++Z,++W){var j=i[Z];i[Z]=i[W],i[W]=j}var st=o[f-1];if(o[f-1]=o[d],o[d]=st,h<d){for(f=d-1;a<f&&i[v*(f-1)+t]===D;)f-=1;f+=1}else if(d<h)for(a=d+1;a<f&&i[v*a+t]===D;)a+=1;else break}return ko(e,t,n,h,i,o,i[v*h+t])}});var Jo=xt((th,Qo)=>{"use strict";Qo.exports=pf;var We=zr(),Nn=rr(),Wo=Co(),ef=Wo.partial,rf=Wo.full,_e=Un(),nf=Yo(),Ke=qn(),Zo=128,of=1<<22,af=1<<22,sf=Ke("!(lo>=p0)&&!(p1>=hi)",["p0","p1"]),Ho=Ke("lo===p0",["p0"]),uf=Ke("lo<p0",["p0"]),ff=Ke("hi<=p0",["p0"]),$o=Ke("lo<=p0&&p0<=hi",["p0"]),cf=Ke("lo<p0&&p0<=hi",["p0"]),Vn=6,Cn=2,Ko=1024,ee=We.mallocInt32(Ko),Ee=We.mallocDouble(Ko);function lf(e,t){var n=8*Nn.log2(t+1)*(e+1)|0,r=Nn.nextPow2(Vn*n);ee.length<r&&(We.free(ee),ee=We.mallocInt32(r));var i=Nn.nextPow2(Cn*n);Ee.length<i&&(We.free(Ee),Ee=We.mallocDouble(i))}function ce(e,t,n,r,i,o,a,f,h){var v=Vn*e;ee[v]=t,ee[v+1]=n,ee[v+2]=r,ee[v+3]=i,ee[v+4]=o,ee[v+5]=a;var d=Cn*e;Ee[d]=f,Ee[d+1]=h}function hf(e,t,n,r,i,o,a,f,h,v,d){var D=2*e,m=h*D,C=v[m+t];t:for(var R=i,N=i*D;R<o;++R,N+=D){var V=a[N+t],Y=a[N+t+e];if(!(C<V||Y<C)&&!(r&&C===V)){for(var K=f[R],Q=t+1;Q<e;++Q){var V=a[N+Q],Y=a[N+Q+e],j=v[m+Q],Z=v[m+Q+e];if(Y<j||Z<V)continue t}var W;if(r?W=n(d,K):W=n(K,d),W!==void 0)return W}}}function vf(e,t,n,r,i,o,a,f,h,v){var d=2*e,D=f*d,m=h[D+t];t:for(var C=r,R=r*d;C<i;++C,R+=d){var N=a[C];if(N!==v){var V=o[R+t],Y=o[R+t+e];if(!(m<V||Y<m)){for(var K=t+1;K<e;++K){var V=o[R+K],Y=o[R+K+e],Q=h[D+K],j=h[D+K+e];if(Y<Q||j<V)continue t}var Z=n(N,v);if(Z!==void 0)return Z}}}}function pf(e,t,n,r,i,o,a,f,h){lf(e,r+a);var v=0,d=2*e,D;for(ce(v++,0,0,r,0,a,n?16:0,-1/0,1/0),n||ce(v++,0,0,a,0,r,1,-1/0,1/0);v>0;){v-=1;var m=v*Vn,C=ee[m],R=ee[m+1],N=ee[m+2],V=ee[m+3],Y=ee[m+4],K=ee[m+5],Q=v*Cn,j=Ee[Q],Z=Ee[Q+1],W=K&1,st=!!(K&16),et=i,rt=o,F=f,s=h;if(W&&(et=f,rt=h,F=i,s=o),!(K&2&&(N=uf(e,C,R,N,et,rt,Z),R>=N))&&!(K&4&&(R=ff(e,C,R,N,et,rt,j),R>=N))){var p=N-R,_=Y-V;if(st){if(e*p*(p+_)<af){if(D=_e.scanComplete(e,C,t,R,N,et,rt,V,Y,F,s),D!==void 0)return D;continue}}else if(e*Math.min(p,_)<Zo){if(D=ef(e,C,t,W,R,N,et,rt,V,Y,F,s),D!==void 0)return D;continue}else if(e*p*_<of){if(D=_e.scanBipartite(e,C,t,W,R,N,et,rt,V,Y,F,s),D!==void 0)return D;continue}var y=sf(e,C,R,N,et,rt,j,Z);if(R<y)if(e*(y-R)<Zo){if(D=rf(e,C+1,t,R,y,et,rt,V,Y,F,s),D!==void 0)return D}else if(C===e-2){if(W?D=_e.sweepBipartite(e,t,V,Y,F,s,R,y,et,rt):D=_e.sweepBipartite(e,t,R,y,et,rt,V,Y,F,s),D!==void 0)return D}else ce(v++,C+1,R,y,V,Y,W,-1/0,1/0),ce(v++,C+1,V,Y,R,y,W^1,-1/0,1/0);if(y<N){var T=nf(e,C,V,Y,F,s),E=F[d*T+C],O=Ho(e,C,T,Y,F,s,E);if(O<Y&&ce(v++,C,y,N,O,Y,(W|4)+(st?16:0),E,Z),V<T&&ce(v++,C,y,N,V,T,(W|2)+(st?16:0),j,E),T+1===O){if(st?D=vf(e,C,t,y,N,et,rt,T,F,s[T]):D=hf(e,C,t,W,y,N,et,rt,T,F,s[T]),D!==void 0)return D}else if(T<O){var P;if(st){if(P=$o(e,C,y,N,et,rt,E),y<P){var l=Ho(e,C,y,P,et,rt,E);if(C===e-2){if(y<l&&(D=_e.sweepComplete(e,t,y,l,et,rt,T,O,F,s),D!==void 0)||l<P&&(D=_e.sweepBipartite(e,t,l,P,et,rt,T,O,F,s),D!==void 0))return D}else y<l&&ce(v++,C+1,y,l,T,O,16,-1/0,1/0),l<P&&(ce(v++,C+1,l,P,T,O,0,-1/0,1/0),ce(v++,C+1,T,O,l,P,1,-1/0,1/0))}}else W?P=cf(e,C,y,N,et,rt,E):P=$o(e,C,y,N,et,rt,E),y<P&&(C===e-2?W?D=_e.sweepBipartite(e,t,T,O,F,s,y,P,et,rt):D=_e.sweepBipartite(e,t,y,P,et,rt,T,O,F,s):(ce(v++,C+1,y,P,T,O,W,-1/0,1/0),ce(v++,C+1,T,O,y,P,W^1,-1/0,1/0)))}}}}}});var ra=xt((eh,ea)=>{"use strict";ea.exports=Mf;var Se=zr(),Nr=Un(),gf=Jo();function df(e,t){for(var n=0;n<e;++n)if(!(t[n]<=t[n+e]))return!0;return!1}function jo(e,t,n,r){for(var i=0,o=0,a=0,f=e.length;a<f;++a){var h=e[a];if(!df(t,h)){for(var v=0;v<2*t;++v)n[i++]=h[v];r[o++]=a}}return o}function Vr(e,t,n,r){var i=e.length,o=t.length;if(!(i<=0||o<=0)){var a=e[0].length>>>1;if(!(a<=0)){var f,h=Se.mallocDouble(2*a*i),v=Se.mallocInt32(i);if(i=jo(e,a,h,v),i>0){if(a===1&&r)Nr.init(i),f=Nr.sweepComplete(a,n,0,i,h,v,0,i,h,v);else{var d=Se.mallocDouble(2*a*o),D=Se.mallocInt32(o);o=jo(t,a,d,D),o>0&&(Nr.init(i+o),a===1?f=Nr.sweepBipartite(a,n,0,i,h,v,0,o,d,D):f=gf(a,n,r,i,h,v,o,d,D),Se.free(d),Se.free(D))}Se.free(h),Se.free(v)}return f}}}var sr;function ta(e,t){sr.push([e,t])}function wf(e){return sr=[],Vr(e,e,ta,!0),sr}function xf(e,t){return sr=[],Vr(e,t,ta,!1),sr}function Mf(e,t,n){var r;switch(arguments.length){case 1:return wf(e);case 2:return typeof t=="function"?Vr(e,e,t,!0):xf(e,t);case 3:return Vr(e,t,n,!1);default:throw new Error("box-intersect: Invalid arguments")}}});var ia=xt((rh,na)=>{"use strict";na.exports=bf;var Cr=bn()[3];function yf(e,t,n,r){for(var i=0;i<2;++i){var o=e[i],a=t[i],f=Math.min(o,a),h=Math.max(o,a),v=n[i],d=r[i],D=Math.min(v,d),m=Math.max(v,d);if(m<f||h<D)return!1}return!0}function bf(e,t,n,r){var i=Cr(e,n,r),o=Cr(t,n,r);if(i>0&&o>0||i<0&&o<0)return!1;var a=Cr(n,e,t),f=Cr(r,e,t);return a>0&&f>0||a<0&&f<0?!1:i===0&&o===0&&a===0&&f===0?yf(e,t,n,r):!0}});var oa=xt(()=>{});var ur=xt((aa,mn)=>{(function(e,t){"use strict";function n(F,s){if(!F)throw new Error(s||"Assertion failed")}function r(F,s){F.super_=s;var p=function(){};p.prototype=s.prototype,F.prototype=new p,F.prototype.constructor=F}function i(F,s,p){if(i.isBN(F))return F;this.negative=0,this.words=null,this.length=0,this.red=null,F!==null&&((s==="le"||s==="be")&&(p=s,s=10),this._init(F||0,s||10,p||"be"))}typeof e=="object"?e.exports=i:t.BN=i,i.BN=i,i.wordSize=26;var o;try{typeof window<"u"&&typeof window.Buffer<"u"?o=window.Buffer:o=oa().Buffer}catch{}i.isBN=function(s){return s instanceof i?!0:s!==null&&typeof s=="object"&&s.constructor.wordSize===i.wordSize&&Array.isArray(s.words)},i.max=function(s,p){return s.cmp(p)>0?s:p},i.min=function(s,p){return s.cmp(p)<0?s:p},i.prototype._init=function(s,p,_){if(typeof s=="number")return this._initNumber(s,p,_);if(typeof s=="object")return this._initArray(s,p,_);p==="hex"&&(p=16),n(p===(p|0)&&p>=2&&p<=36),s=s.toString().replace(/\s+/g,"");var y=0;s[0]==="-"&&(y++,this.negative=1),y<s.length&&(p===16?this._parseHex(s,y,_):(this._parseBase(s,p,y),_==="le"&&this._initArray(this.toArray(),p,_)))},i.prototype._initNumber=function(s,p,_){s<0&&(this.negative=1,s=-s),s<67108864?(this.words=[s&67108863],this.length=1):s<4503599627370496?(this.words=[s&67108863,s/67108864&67108863],this.length=2):(n(s<9007199254740992),this.words=[s&67108863,s/67108864&67108863,1],this.length=3),_==="le"&&this._initArray(this.toArray(),p,_)},i.prototype._initArray=function(s,p,_){if(n(typeof s.length=="number"),s.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(s.length/3),this.words=new Array(this.length);for(var y=0;y<this.length;y++)this.words[y]=0;var T,E,O=0;if(_==="be")for(y=s.length-1,T=0;y>=0;y-=3)E=s[y]|s[y-1]<<8|s[y-2]<<16,this.words[T]|=E<<O&67108863,this.words[T+1]=E>>>26-O&67108863,O+=24,O>=26&&(O-=26,T++);else if(_==="le")for(y=0,T=0;y<s.length;y+=3)E=s[y]|s[y+1]<<8|s[y+2]<<16,this.words[T]|=E<<O&67108863,this.words[T+1]=E>>>26-O&67108863,O+=24,O>=26&&(O-=26,T++);return this.strip()};function a(F,s){var p=F.charCodeAt(s);return p>=65&&p<=70?p-55:p>=97&&p<=102?p-87:p-48&15}function f(F,s,p){var _=a(F,p);return p-1>=s&&(_|=a(F,p-1)<<4),_}i.prototype._parseHex=function(s,p,_){this.length=Math.ceil((s.length-p)/6),this.words=new Array(this.length);for(var y=0;y<this.length;y++)this.words[y]=0;var T=0,E=0,O;if(_==="be")for(y=s.length-1;y>=p;y-=2)O=f(s,p,y)<<T,this.words[E]|=O&67108863,T>=18?(T-=18,E+=1,this.words[E]|=O>>>26):T+=8;else{var P=s.length-p;for(y=P%2===0?p+1:p;y<s.length;y+=2)O=f(s,p,y)<<T,this.words[E]|=O&67108863,T>=18?(T-=18,E+=1,this.words[E]|=O>>>26):T+=8}this.strip()};function h(F,s,p,_){for(var y=0,T=Math.min(F.length,p),E=s;E<T;E++){var O=F.charCodeAt(E)-48;y*=_,O>=49?y+=O-49+10:O>=17?y+=O-17+10:y+=O}return y}i.prototype._parseBase=function(s,p,_){this.words=[0],this.length=1;for(var y=0,T=1;T<=67108863;T*=p)y++;y--,T=T/p|0;for(var E=s.length-_,O=E%y,P=Math.min(E,E-O)+_,l=0,U=_;U<P;U+=y)l=h(s,U,U+y,p),this.imuln(T),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l);if(O!==0){var ot=1;for(l=h(s,U,s.length,p),U=0;U<O;U++)ot*=p;this.imuln(ot),this.words[0]+l<67108864?this.words[0]+=l:this._iaddn(l)}this.strip()},i.prototype.copy=function(s){s.words=new Array(this.length);for(var p=0;p<this.length;p++)s.words[p]=this.words[p];s.length=this.length,s.negative=this.negative,s.red=this.red},i.prototype.clone=function(){var s=new i(null);return this.copy(s),s},i.prototype._expand=function(s){for(;this.length<s;)this.words[this.length++]=0;return this},i.prototype.strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},i.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},i.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var v=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],D=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];i.prototype.toString=function(s,p){s=s||10,p=p|0||1;var _;if(s===16||s==="hex"){_="";for(var y=0,T=0,E=0;E<this.length;E++){var O=this.words[E],P=((O<<y|T)&16777215).toString(16);T=O>>>24-y&16777215,y+=2,y>=26&&(y-=26,E--),T!==0||E!==this.length-1?_=v[6-P.length]+P+_:_=P+_}for(T!==0&&(_=T.toString(16)+_);_.length%p!==0;)_="0"+_;return this.negative!==0&&(_="-"+_),_}if(s===(s|0)&&s>=2&&s<=36){var l=d[s],U=D[s];_="";var ot=this.clone();for(ot.negative=0;!ot.isZero();){var at=ot.modn(U).toString(s);ot=ot.idivn(U),ot.isZero()?_=at+_:_=v[l-at.length]+at+_}for(this.isZero()&&(_="0"+_);_.length%p!==0;)_="0"+_;return this.negative!==0&&(_="-"+_),_}n(!1,"Base should be between 2 and 36")},i.prototype.toNumber=function(){var s=this.words[0];return this.length===2?s+=this.words[1]*67108864:this.length===3&&this.words[2]===1?s+=4503599627370496+this.words[1]*67108864:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-s:s},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toBuffer=function(s,p){return n(typeof o<"u"),this.toArrayLike(o,s,p)},i.prototype.toArray=function(s,p){return this.toArrayLike(Array,s,p)},i.prototype.toArrayLike=function(s,p,_){var y=this.byteLength(),T=_||Math.max(1,y);n(y<=T,"byte array longer than desired length"),n(T>0,"Requested array length <= 0"),this.strip();var E=p==="le",O=new s(T),P,l,U=this.clone();if(E){for(l=0;!U.isZero();l++)P=U.andln(255),U.iushrn(8),O[l]=P;for(;l<T;l++)O[l]=0}else{for(l=0;l<T-y;l++)O[l]=0;for(l=0;!U.isZero();l++)P=U.andln(255),U.iushrn(8),O[T-l-1]=P}return O},Math.clz32?i.prototype._countBits=function(s){return 32-Math.clz32(s)}:i.prototype._countBits=function(s){var p=s,_=0;return p>=4096&&(_+=13,p>>>=13),p>=64&&(_+=7,p>>>=7),p>=8&&(_+=4,p>>>=4),p>=2&&(_+=2,p>>>=2),_+p},i.prototype._zeroBits=function(s){if(s===0)return 26;var p=s,_=0;return(p&8191)===0&&(_+=13,p>>>=13),(p&127)===0&&(_+=7,p>>>=7),(p&15)===0&&(_+=4,p>>>=4),(p&3)===0&&(_+=2,p>>>=2),(p&1)===0&&_++,_},i.prototype.bitLength=function(){var s=this.words[this.length-1],p=this._countBits(s);return(this.length-1)*26+p};function m(F){for(var s=new Array(F.bitLength()),p=0;p<s.length;p++){var _=p/26|0,y=p%26;s[p]=(F.words[_]&1<<y)>>>y}return s}i.prototype.zeroBits=function(){if(this.isZero())return 0;for(var s=0,p=0;p<this.length;p++){var _=this._zeroBits(this.words[p]);if(s+=_,_!==26)break}return s},i.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},i.prototype.toTwos=function(s){return this.negative!==0?this.abs().inotn(s).iaddn(1):this.clone()},i.prototype.fromTwos=function(s){return this.testn(s-1)?this.notn(s).iaddn(1).ineg():this.clone()},i.prototype.isNeg=function(){return this.negative!==0},i.prototype.neg=function(){return this.clone().ineg()},i.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},i.prototype.iuor=function(s){for(;this.length<s.length;)this.words[this.length++]=0;for(var p=0;p<s.length;p++)this.words[p]=this.words[p]|s.words[p];return this.strip()},i.prototype.ior=function(s){return n((this.negative|s.negative)===0),this.iuor(s)},i.prototype.or=function(s){return this.length>s.length?this.clone().ior(s):s.clone().ior(this)},i.prototype.uor=function(s){return this.length>s.length?this.clone().iuor(s):s.clone().iuor(this)},i.prototype.iuand=function(s){var p;this.length>s.length?p=s:p=this;for(var _=0;_<p.length;_++)this.words[_]=this.words[_]&s.words[_];return this.length=p.length,this.strip()},i.prototype.iand=function(s){return n((this.negative|s.negative)===0),this.iuand(s)},i.prototype.and=function(s){return this.length>s.length?this.clone().iand(s):s.clone().iand(this)},i.prototype.uand=function(s){return this.length>s.length?this.clone().iuand(s):s.clone().iuand(this)},i.prototype.iuxor=function(s){var p,_;this.length>s.length?(p=this,_=s):(p=s,_=this);for(var y=0;y<_.length;y++)this.words[y]=p.words[y]^_.words[y];if(this!==p)for(;y<p.length;y++)this.words[y]=p.words[y];return this.length=p.length,this.strip()},i.prototype.ixor=function(s){return n((this.negative|s.negative)===0),this.iuxor(s)},i.prototype.xor=function(s){return this.length>s.length?this.clone().ixor(s):s.clone().ixor(this)},i.prototype.uxor=function(s){return this.length>s.length?this.clone().iuxor(s):s.clone().iuxor(this)},i.prototype.inotn=function(s){n(typeof s=="number"&&s>=0);var p=Math.ceil(s/26)|0,_=s%26;this._expand(p),_>0&&p--;for(var y=0;y<p;y++)this.words[y]=~this.words[y]&67108863;return _>0&&(this.words[y]=~this.words[y]&67108863>>26-_),this.strip()},i.prototype.notn=function(s){return this.clone().inotn(s)},i.prototype.setn=function(s,p){n(typeof s=="number"&&s>=0);var _=s/26|0,y=s%26;return this._expand(_+1),p?this.words[_]=this.words[_]|1<<y:this.words[_]=this.words[_]&~(1<<y),this.strip()},i.prototype.iadd=function(s){var p;if(this.negative!==0&&s.negative===0)return this.negative=0,p=this.isub(s),this.negative^=1,this._normSign();if(this.negative===0&&s.negative!==0)return s.negative=0,p=this.isub(s),s.negative=1,p._normSign();var _,y;this.length>s.length?(_=this,y=s):(_=s,y=this);for(var T=0,E=0;E<y.length;E++)p=(_.words[E]|0)+(y.words[E]|0)+T,this.words[E]=p&67108863,T=p>>>26;for(;T!==0&&E<_.length;E++)p=(_.words[E]|0)+T,this.words[E]=p&67108863,T=p>>>26;if(this.length=_.length,T!==0)this.words[this.length]=T,this.length++;else if(_!==this)for(;E<_.length;E++)this.words[E]=_.words[E];return this},i.prototype.add=function(s){var p;return s.negative!==0&&this.negative===0?(s.negative=0,p=this.sub(s),s.negative^=1,p):s.negative===0&&this.negative!==0?(this.negative=0,p=s.sub(this),this.negative=1,p):this.length>s.length?this.clone().iadd(s):s.clone().iadd(this)},i.prototype.isub=function(s){if(s.negative!==0){s.negative=0;var p=this.iadd(s);return s.negative=1,p._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(s),this.negative=1,this._normSign();var _=this.cmp(s);if(_===0)return this.negative=0,this.length=1,this.words[0]=0,this;var y,T;_>0?(y=this,T=s):(y=s,T=this);for(var E=0,O=0;O<T.length;O++)p=(y.words[O]|0)-(T.words[O]|0)+E,E=p>>26,this.words[O]=p&67108863;for(;E!==0&&O<y.length;O++)p=(y.words[O]|0)+E,E=p>>26,this.words[O]=p&67108863;if(E===0&&O<y.length&&y!==this)for(;O<y.length;O++)this.words[O]=y.words[O];return this.length=Math.max(this.length,O),y!==this&&(this.negative=1),this.strip()},i.prototype.sub=function(s){return this.clone().isub(s)};function C(F,s,p){p.negative=s.negative^F.negative;var _=F.length+s.length|0;p.length=_,_=_-1|0;var y=F.words[0]|0,T=s.words[0]|0,E=y*T,O=E&67108863,P=E/67108864|0;p.words[0]=O;for(var l=1;l<_;l++){for(var U=P>>>26,ot=P&67108863,at=Math.min(l,s.length-1),ut=Math.max(0,l-F.length+1);ut<=at;ut++){var ft=l-ut|0;y=F.words[ft]|0,T=s.words[ut]|0,E=y*T+ot,U+=E/67108864|0,ot=E&67108863}p.words[l]=ot|0,P=U|0}return P!==0?p.words[l]=P|0:p.length--,p.strip()}var R=function(s,p,_){var y=s.words,T=p.words,E=_.words,O=0,P,l,U,ot=y[0]|0,at=ot&8191,ut=ot>>>13,ft=y[1]|0,Mt=ft&8191,vt=ft>>>13,X=y[2]|0,$=X&8191,A=X>>>13,c=y[3]|0,b=c&8191,w=c>>>13,I=y[4]|0,G=I&8191,q=I>>>13,k=y[5]|0,u=k&8191,B=k>>>13,M=y[6]|0,x=M&8191,g=M>>>13,S=y[7]|0,L=S&8191,z=S>>>13,H=y[8]|0,J=H&8191,tt=H>>>13,ct=y[9]|0,nt=ct&8191,it=ct>>>13,pt=T[0]|0,ht=pt&8191,lt=pt>>>13,gt=T[1]|0,wt=gt&8191,dt=gt>>>13,mt=T[2]|0,yt=mt&8191,bt=mt>>>13,Zt=T[3]|0,Bt=Zt&8191,Pt=Zt>>>13,$t=T[4]|0,Dt=$t&8191,Ft=$t>>>13,Wt=T[5]|0,At=Wt&8191,Ut=Wt>>>13,Kt=T[6]|0,zt=Kt&8191,It=Kt>>>13,jt=T[7]|0,Gt=jt&8191,Rt=jt>>>13,Te=T[8]|0,Ot=Te&8191,qt=Te>>>13,Be=T[9]|0,Nt=Be&8191,Ct=Be>>>13;_.negative=s.negative^p.negative,_.length=19,P=Math.imul(at,ht),l=Math.imul(at,lt),l=l+Math.imul(ut,ht)|0,U=Math.imul(ut,lt);var qe=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(qe>>>26)|0,qe&=67108863,P=Math.imul(Mt,ht),l=Math.imul(Mt,lt),l=l+Math.imul(vt,ht)|0,U=Math.imul(vt,lt),P=P+Math.imul(at,wt)|0,l=l+Math.imul(at,dt)|0,l=l+Math.imul(ut,wt)|0,U=U+Math.imul(ut,dt)|0;var Ne=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,P=Math.imul($,ht),l=Math.imul($,lt),l=l+Math.imul(A,ht)|0,U=Math.imul(A,lt),P=P+Math.imul(Mt,wt)|0,l=l+Math.imul(Mt,dt)|0,l=l+Math.imul(vt,wt)|0,U=U+Math.imul(vt,dt)|0,P=P+Math.imul(at,yt)|0,l=l+Math.imul(at,bt)|0,l=l+Math.imul(ut,yt)|0,U=U+Math.imul(ut,bt)|0;var Ve=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(Ve>>>26)|0,Ve&=67108863,P=Math.imul(b,ht),l=Math.imul(b,lt),l=l+Math.imul(w,ht)|0,U=Math.imul(w,lt),P=P+Math.imul($,wt)|0,l=l+Math.imul($,dt)|0,l=l+Math.imul(A,wt)|0,U=U+Math.imul(A,dt)|0,P=P+Math.imul(Mt,yt)|0,l=l+Math.imul(Mt,bt)|0,l=l+Math.imul(vt,yt)|0,U=U+Math.imul(vt,bt)|0,P=P+Math.imul(at,Bt)|0,l=l+Math.imul(at,Pt)|0,l=l+Math.imul(ut,Bt)|0,U=U+Math.imul(ut,Pt)|0;var Ht=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(Ht>>>26)|0,Ht&=67108863,P=Math.imul(G,ht),l=Math.imul(G,lt),l=l+Math.imul(q,ht)|0,U=Math.imul(q,lt),P=P+Math.imul(b,wt)|0,l=l+Math.imul(b,dt)|0,l=l+Math.imul(w,wt)|0,U=U+Math.imul(w,dt)|0,P=P+Math.imul($,yt)|0,l=l+Math.imul($,bt)|0,l=l+Math.imul(A,yt)|0,U=U+Math.imul(A,bt)|0,P=P+Math.imul(Mt,Bt)|0,l=l+Math.imul(Mt,Pt)|0,l=l+Math.imul(vt,Bt)|0,U=U+Math.imul(vt,Pt)|0,P=P+Math.imul(at,Dt)|0,l=l+Math.imul(at,Ft)|0,l=l+Math.imul(ut,Dt)|0,U=U+Math.imul(ut,Ft)|0;var Wr=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,P=Math.imul(u,ht),l=Math.imul(u,lt),l=l+Math.imul(B,ht)|0,U=Math.imul(B,lt),P=P+Math.imul(G,wt)|0,l=l+Math.imul(G,dt)|0,l=l+Math.imul(q,wt)|0,U=U+Math.imul(q,dt)|0,P=P+Math.imul(b,yt)|0,l=l+Math.imul(b,bt)|0,l=l+Math.imul(w,yt)|0,U=U+Math.imul(w,bt)|0,P=P+Math.imul($,Bt)|0,l=l+Math.imul($,Pt)|0,l=l+Math.imul(A,Bt)|0,U=U+Math.imul(A,Pt)|0,P=P+Math.imul(Mt,Dt)|0,l=l+Math.imul(Mt,Ft)|0,l=l+Math.imul(vt,Dt)|0,U=U+Math.imul(vt,Ft)|0,P=P+Math.imul(at,At)|0,l=l+Math.imul(at,Ut)|0,l=l+Math.imul(ut,At)|0,U=U+Math.imul(ut,Ut)|0;var Kr=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(Kr>>>26)|0,Kr&=67108863,P=Math.imul(x,ht),l=Math.imul(x,lt),l=l+Math.imul(g,ht)|0,U=Math.imul(g,lt),P=P+Math.imul(u,wt)|0,l=l+Math.imul(u,dt)|0,l=l+Math.imul(B,wt)|0,U=U+Math.imul(B,dt)|0,P=P+Math.imul(G,yt)|0,l=l+Math.imul(G,bt)|0,l=l+Math.imul(q,yt)|0,U=U+Math.imul(q,bt)|0,P=P+Math.imul(b,Bt)|0,l=l+Math.imul(b,Pt)|0,l=l+Math.imul(w,Bt)|0,U=U+Math.imul(w,Pt)|0,P=P+Math.imul($,Dt)|0,l=l+Math.imul($,Ft)|0,l=l+Math.imul(A,Dt)|0,U=U+Math.imul(A,Ft)|0,P=P+Math.imul(Mt,At)|0,l=l+Math.imul(Mt,Ut)|0,l=l+Math.imul(vt,At)|0,U=U+Math.imul(vt,Ut)|0,P=P+Math.imul(at,zt)|0,l=l+Math.imul(at,It)|0,l=l+Math.imul(ut,zt)|0,U=U+Math.imul(ut,It)|0;var Qr=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(Qr>>>26)|0,Qr&=67108863,P=Math.imul(L,ht),l=Math.imul(L,lt),l=l+Math.imul(z,ht)|0,U=Math.imul(z,lt),P=P+Math.imul(x,wt)|0,l=l+Math.imul(x,dt)|0,l=l+Math.imul(g,wt)|0,U=U+Math.imul(g,dt)|0,P=P+Math.imul(u,yt)|0,l=l+Math.imul(u,bt)|0,l=l+Math.imul(B,yt)|0,U=U+Math.imul(B,bt)|0,P=P+Math.imul(G,Bt)|0,l=l+Math.imul(G,Pt)|0,l=l+Math.imul(q,Bt)|0,U=U+Math.imul(q,Pt)|0,P=P+Math.imul(b,Dt)|0,l=l+Math.imul(b,Ft)|0,l=l+Math.imul(w,Dt)|0,U=U+Math.imul(w,Ft)|0,P=P+Math.imul($,At)|0,l=l+Math.imul($,Ut)|0,l=l+Math.imul(A,At)|0,U=U+Math.imul(A,Ut)|0,P=P+Math.imul(Mt,zt)|0,l=l+Math.imul(Mt,It)|0,l=l+Math.imul(vt,zt)|0,U=U+Math.imul(vt,It)|0,P=P+Math.imul(at,Gt)|0,l=l+Math.imul(at,Rt)|0,l=l+Math.imul(ut,Gt)|0,U=U+Math.imul(ut,Rt)|0;var Jr=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(Jr>>>26)|0,Jr&=67108863,P=Math.imul(J,ht),l=Math.imul(J,lt),l=l+Math.imul(tt,ht)|0,U=Math.imul(tt,lt),P=P+Math.imul(L,wt)|0,l=l+Math.imul(L,dt)|0,l=l+Math.imul(z,wt)|0,U=U+Math.imul(z,dt)|0,P=P+Math.imul(x,yt)|0,l=l+Math.imul(x,bt)|0,l=l+Math.imul(g,yt)|0,U=U+Math.imul(g,bt)|0,P=P+Math.imul(u,Bt)|0,l=l+Math.imul(u,Pt)|0,l=l+Math.imul(B,Bt)|0,U=U+Math.imul(B,Pt)|0,P=P+Math.imul(G,Dt)|0,l=l+Math.imul(G,Ft)|0,l=l+Math.imul(q,Dt)|0,U=U+Math.imul(q,Ft)|0,P=P+Math.imul(b,At)|0,l=l+Math.imul(b,Ut)|0,l=l+Math.imul(w,At)|0,U=U+Math.imul(w,Ut)|0,P=P+Math.imul($,zt)|0,l=l+Math.imul($,It)|0,l=l+Math.imul(A,zt)|0,U=U+Math.imul(A,It)|0,P=P+Math.imul(Mt,Gt)|0,l=l+Math.imul(Mt,Rt)|0,l=l+Math.imul(vt,Gt)|0,U=U+Math.imul(vt,Rt)|0,P=P+Math.imul(at,Ot)|0,l=l+Math.imul(at,qt)|0,l=l+Math.imul(ut,Ot)|0,U=U+Math.imul(ut,qt)|0;var jr=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(jr>>>26)|0,jr&=67108863,P=Math.imul(nt,ht),l=Math.imul(nt,lt),l=l+Math.imul(it,ht)|0,U=Math.imul(it,lt),P=P+Math.imul(J,wt)|0,l=l+Math.imul(J,dt)|0,l=l+Math.imul(tt,wt)|0,U=U+Math.imul(tt,dt)|0,P=P+Math.imul(L,yt)|0,l=l+Math.imul(L,bt)|0,l=l+Math.imul(z,yt)|0,U=U+Math.imul(z,bt)|0,P=P+Math.imul(x,Bt)|0,l=l+Math.imul(x,Pt)|0,l=l+Math.imul(g,Bt)|0,U=U+Math.imul(g,Pt)|0,P=P+Math.imul(u,Dt)|0,l=l+Math.imul(u,Ft)|0,l=l+Math.imul(B,Dt)|0,U=U+Math.imul(B,Ft)|0,P=P+Math.imul(G,At)|0,l=l+Math.imul(G,Ut)|0,l=l+Math.imul(q,At)|0,U=U+Math.imul(q,Ut)|0,P=P+Math.imul(b,zt)|0,l=l+Math.imul(b,It)|0,l=l+Math.imul(w,zt)|0,U=U+Math.imul(w,It)|0,P=P+Math.imul($,Gt)|0,l=l+Math.imul($,Rt)|0,l=l+Math.imul(A,Gt)|0,U=U+Math.imul(A,Rt)|0,P=P+Math.imul(Mt,Ot)|0,l=l+Math.imul(Mt,qt)|0,l=l+Math.imul(vt,Ot)|0,U=U+Math.imul(vt,qt)|0,P=P+Math.imul(at,Nt)|0,l=l+Math.imul(at,Ct)|0,l=l+Math.imul(ut,Nt)|0,U=U+Math.imul(ut,Ct)|0;var tn=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(tn>>>26)|0,tn&=67108863,P=Math.imul(nt,wt),l=Math.imul(nt,dt),l=l+Math.imul(it,wt)|0,U=Math.imul(it,dt),P=P+Math.imul(J,yt)|0,l=l+Math.imul(J,bt)|0,l=l+Math.imul(tt,yt)|0,U=U+Math.imul(tt,bt)|0,P=P+Math.imul(L,Bt)|0,l=l+Math.imul(L,Pt)|0,l=l+Math.imul(z,Bt)|0,U=U+Math.imul(z,Pt)|0,P=P+Math.imul(x,Dt)|0,l=l+Math.imul(x,Ft)|0,l=l+Math.imul(g,Dt)|0,U=U+Math.imul(g,Ft)|0,P=P+Math.imul(u,At)|0,l=l+Math.imul(u,Ut)|0,l=l+Math.imul(B,At)|0,U=U+Math.imul(B,Ut)|0,P=P+Math.imul(G,zt)|0,l=l+Math.imul(G,It)|0,l=l+Math.imul(q,zt)|0,U=U+Math.imul(q,It)|0,P=P+Math.imul(b,Gt)|0,l=l+Math.imul(b,Rt)|0,l=l+Math.imul(w,Gt)|0,U=U+Math.imul(w,Rt)|0,P=P+Math.imul($,Ot)|0,l=l+Math.imul($,qt)|0,l=l+Math.imul(A,Ot)|0,U=U+Math.imul(A,qt)|0,P=P+Math.imul(Mt,Nt)|0,l=l+Math.imul(Mt,Ct)|0,l=l+Math.imul(vt,Nt)|0,U=U+Math.imul(vt,Ct)|0;var en=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(en>>>26)|0,en&=67108863,P=Math.imul(nt,yt),l=Math.imul(nt,bt),l=l+Math.imul(it,yt)|0,U=Math.imul(it,bt),P=P+Math.imul(J,Bt)|0,l=l+Math.imul(J,Pt)|0,l=l+Math.imul(tt,Bt)|0,U=U+Math.imul(tt,Pt)|0,P=P+Math.imul(L,Dt)|0,l=l+Math.imul(L,Ft)|0,l=l+Math.imul(z,Dt)|0,U=U+Math.imul(z,Ft)|0,P=P+Math.imul(x,At)|0,l=l+Math.imul(x,Ut)|0,l=l+Math.imul(g,At)|0,U=U+Math.imul(g,Ut)|0,P=P+Math.imul(u,zt)|0,l=l+Math.imul(u,It)|0,l=l+Math.imul(B,zt)|0,U=U+Math.imul(B,It)|0,P=P+Math.imul(G,Gt)|0,l=l+Math.imul(G,Rt)|0,l=l+Math.imul(q,Gt)|0,U=U+Math.imul(q,Rt)|0,P=P+Math.imul(b,Ot)|0,l=l+Math.imul(b,qt)|0,l=l+Math.imul(w,Ot)|0,U=U+Math.imul(w,qt)|0,P=P+Math.imul($,Nt)|0,l=l+Math.imul($,Ct)|0,l=l+Math.imul(A,Nt)|0,U=U+Math.imul(A,Ct)|0;var rn=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(rn>>>26)|0,rn&=67108863,P=Math.imul(nt,Bt),l=Math.imul(nt,Pt),l=l+Math.imul(it,Bt)|0,U=Math.imul(it,Pt),P=P+Math.imul(J,Dt)|0,l=l+Math.imul(J,Ft)|0,l=l+Math.imul(tt,Dt)|0,U=U+Math.imul(tt,Ft)|0,P=P+Math.imul(L,At)|0,l=l+Math.imul(L,Ut)|0,l=l+Math.imul(z,At)|0,U=U+Math.imul(z,Ut)|0,P=P+Math.imul(x,zt)|0,l=l+Math.imul(x,It)|0,l=l+Math.imul(g,zt)|0,U=U+Math.imul(g,It)|0,P=P+Math.imul(u,Gt)|0,l=l+Math.imul(u,Rt)|0,l=l+Math.imul(B,Gt)|0,U=U+Math.imul(B,Rt)|0,P=P+Math.imul(G,Ot)|0,l=l+Math.imul(G,qt)|0,l=l+Math.imul(q,Ot)|0,U=U+Math.imul(q,qt)|0,P=P+Math.imul(b,Nt)|0,l=l+Math.imul(b,Ct)|0,l=l+Math.imul(w,Nt)|0,U=U+Math.imul(w,Ct)|0;var nn=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(nn>>>26)|0,nn&=67108863,P=Math.imul(nt,Dt),l=Math.imul(nt,Ft),l=l+Math.imul(it,Dt)|0,U=Math.imul(it,Ft),P=P+Math.imul(J,At)|0,l=l+Math.imul(J,Ut)|0,l=l+Math.imul(tt,At)|0,U=U+Math.imul(tt,Ut)|0,P=P+Math.imul(L,zt)|0,l=l+Math.imul(L,It)|0,l=l+Math.imul(z,zt)|0,U=U+Math.imul(z,It)|0,P=P+Math.imul(x,Gt)|0,l=l+Math.imul(x,Rt)|0,l=l+Math.imul(g,Gt)|0,U=U+Math.imul(g,Rt)|0,P=P+Math.imul(u,Ot)|0,l=l+Math.imul(u,qt)|0,l=l+Math.imul(B,Ot)|0,U=U+Math.imul(B,qt)|0,P=P+Math.imul(G,Nt)|0,l=l+Math.imul(G,Ct)|0,l=l+Math.imul(q,Nt)|0,U=U+Math.imul(q,Ct)|0;var on=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(on>>>26)|0,on&=67108863,P=Math.imul(nt,At),l=Math.imul(nt,Ut),l=l+Math.imul(it,At)|0,U=Math.imul(it,Ut),P=P+Math.imul(J,zt)|0,l=l+Math.imul(J,It)|0,l=l+Math.imul(tt,zt)|0,U=U+Math.imul(tt,It)|0,P=P+Math.imul(L,Gt)|0,l=l+Math.imul(L,Rt)|0,l=l+Math.imul(z,Gt)|0,U=U+Math.imul(z,Rt)|0,P=P+Math.imul(x,Ot)|0,l=l+Math.imul(x,qt)|0,l=l+Math.imul(g,Ot)|0,U=U+Math.imul(g,qt)|0,P=P+Math.imul(u,Nt)|0,l=l+Math.imul(u,Ct)|0,l=l+Math.imul(B,Nt)|0,U=U+Math.imul(B,Ct)|0;var an=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(an>>>26)|0,an&=67108863,P=Math.imul(nt,zt),l=Math.imul(nt,It),l=l+Math.imul(it,zt)|0,U=Math.imul(it,It),P=P+Math.imul(J,Gt)|0,l=l+Math.imul(J,Rt)|0,l=l+Math.imul(tt,Gt)|0,U=U+Math.imul(tt,Rt)|0,P=P+Math.imul(L,Ot)|0,l=l+Math.imul(L,qt)|0,l=l+Math.imul(z,Ot)|0,U=U+Math.imul(z,qt)|0,P=P+Math.imul(x,Nt)|0,l=l+Math.imul(x,Ct)|0,l=l+Math.imul(g,Nt)|0,U=U+Math.imul(g,Ct)|0;var sn=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(sn>>>26)|0,sn&=67108863,P=Math.imul(nt,Gt),l=Math.imul(nt,Rt),l=l+Math.imul(it,Gt)|0,U=Math.imul(it,Rt),P=P+Math.imul(J,Ot)|0,l=l+Math.imul(J,qt)|0,l=l+Math.imul(tt,Ot)|0,U=U+Math.imul(tt,qt)|0,P=P+Math.imul(L,Nt)|0,l=l+Math.imul(L,Ct)|0,l=l+Math.imul(z,Nt)|0,U=U+Math.imul(z,Ct)|0;var un=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(un>>>26)|0,un&=67108863,P=Math.imul(nt,Ot),l=Math.imul(nt,qt),l=l+Math.imul(it,Ot)|0,U=Math.imul(it,qt),P=P+Math.imul(J,Nt)|0,l=l+Math.imul(J,Ct)|0,l=l+Math.imul(tt,Nt)|0,U=U+Math.imul(tt,Ct)|0;var fn=(O+P|0)+((l&8191)<<13)|0;O=(U+(l>>>13)|0)+(fn>>>26)|0,fn&=67108863,P=Math.imul(nt,Nt),l=Math.imul(nt,Ct),l=l+Math.imul(it,Nt)|0,U=Math.imul(it,Ct);var cn=(O+P|0)+((l&8191)<<13)|0;return O=(U+(l>>>13)|0)+(cn>>>26)|0,cn&=67108863,E[0]=qe,E[1]=Ne,E[2]=Ve,E[3]=Ht,E[4]=Wr,E[5]=Kr,E[6]=Qr,E[7]=Jr,E[8]=jr,E[9]=tn,E[10]=en,E[11]=rn,E[12]=nn,E[13]=on,E[14]=an,E[15]=sn,E[16]=un,E[17]=fn,E[18]=cn,O!==0&&(E[19]=O,_.length++),_};Math.imul||(R=C);function N(F,s,p){p.negative=s.negative^F.negative,p.length=F.length+s.length;for(var _=0,y=0,T=0;T<p.length-1;T++){var E=y;y=0;for(var O=_&67108863,P=Math.min(T,s.length-1),l=Math.max(0,T-F.length+1);l<=P;l++){var U=T-l,ot=F.words[U]|0,at=s.words[l]|0,ut=ot*at,ft=ut&67108863;E=E+(ut/67108864|0)|0,ft=ft+O|0,O=ft&67108863,E=E+(ft>>>26)|0,y+=E>>>26,E&=67108863}p.words[T]=O,_=E,E=y}return _!==0?p.words[T]=_:p.length--,p.strip()}function V(F,s,p){var _=new Y;return _.mulp(F,s,p)}i.prototype.mulTo=function(s,p){var _,y=this.length+s.length;return this.length===10&&s.length===10?_=R(this,s,p):y<63?_=C(this,s,p):y<1024?_=N(this,s,p):_=V(this,s,p),_};function Y(F,s){this.x=F,this.y=s}Y.prototype.makeRBT=function(s){for(var p=new Array(s),_=i.prototype._countBits(s)-1,y=0;y<s;y++)p[y]=this.revBin(y,_,s);return p},Y.prototype.revBin=function(s,p,_){if(s===0||s===_-1)return s;for(var y=0,T=0;T<p;T++)y|=(s&1)<<p-T-1,s>>=1;return y},Y.prototype.permute=function(s,p,_,y,T,E){for(var O=0;O<E;O++)y[O]=p[s[O]],T[O]=_[s[O]]},Y.prototype.transform=function(s,p,_,y,T,E){this.permute(E,s,p,_,y,T);for(var O=1;O<T;O<<=1)for(var P=O<<1,l=Math.cos(2*Math.PI/P),U=Math.sin(2*Math.PI/P),ot=0;ot<T;ot+=P)for(var at=l,ut=U,ft=0;ft<O;ft++){var Mt=_[ot+ft],vt=y[ot+ft],X=_[ot+ft+O],$=y[ot+ft+O],A=at*X-ut*$;$=at*$+ut*X,X=A,_[ot+ft]=Mt+X,y[ot+ft]=vt+$,_[ot+ft+O]=Mt-X,y[ot+ft+O]=vt-$,ft!==P&&(A=l*at-U*ut,ut=l*ut+U*at,at=A)}},Y.prototype.guessLen13b=function(s,p){var _=Math.max(p,s)|1,y=_&1,T=0;for(_=_/2|0;_;_=_>>>1)T++;return 1<<T+1+y},Y.prototype.conjugate=function(s,p,_){if(!(_<=1))for(var y=0;y<_/2;y++){var T=s[y];s[y]=s[_-y-1],s[_-y-1]=T,T=p[y],p[y]=-p[_-y-1],p[_-y-1]=-T}},Y.prototype.normalize13b=function(s,p){for(var _=0,y=0;y<p/2;y++){var T=Math.round(s[2*y+1]/p)*8192+Math.round(s[2*y]/p)+_;s[y]=T&67108863,T<67108864?_=0:_=T/67108864|0}return s},Y.prototype.convert13b=function(s,p,_,y){for(var T=0,E=0;E<p;E++)T=T+(s[E]|0),_[2*E]=T&8191,T=T>>>13,_[2*E+1]=T&8191,T=T>>>13;for(E=2*p;E<y;++E)_[E]=0;n(T===0),n((T&-8192)===0)},Y.prototype.stub=function(s){for(var p=new Array(s),_=0;_<s;_++)p[_]=0;return p},Y.prototype.mulp=function(s,p,_){var y=2*this.guessLen13b(s.length,p.length),T=this.makeRBT(y),E=this.stub(y),O=new Array(y),P=new Array(y),l=new Array(y),U=new Array(y),ot=new Array(y),at=new Array(y),ut=_.words;ut.length=y,this.convert13b(s.words,s.length,O,y),this.convert13b(p.words,p.length,U,y),this.transform(O,E,P,l,y,T),this.transform(U,E,ot,at,y,T);for(var ft=0;ft<y;ft++){var Mt=P[ft]*ot[ft]-l[ft]*at[ft];l[ft]=P[ft]*at[ft]+l[ft]*ot[ft],P[ft]=Mt}return this.conjugate(P,l,y),this.transform(P,l,ut,E,y,T),this.conjugate(ut,E,y),this.normalize13b(ut,y),_.negative=s.negative^p.negative,_.length=s.length+p.length,_.strip()},i.prototype.mul=function(s){var p=new i(null);return p.words=new Array(this.length+s.length),this.mulTo(s,p)},i.prototype.mulf=function(s){var p=new i(null);return p.words=new Array(this.length+s.length),V(this,s,p)},i.prototype.imul=function(s){return this.clone().mulTo(s,this)},i.prototype.imuln=function(s){n(typeof s=="number"),n(s<67108864);for(var p=0,_=0;_<this.length;_++){var y=(this.words[_]|0)*s,T=(y&67108863)+(p&67108863);p>>=26,p+=y/67108864|0,p+=T>>>26,this.words[_]=T&67108863}return p!==0&&(this.words[_]=p,this.length++),this.length=s===0?1:this.length,this},i.prototype.muln=function(s){return this.clone().imuln(s)},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.imul(this.clone())},i.prototype.pow=function(s){var p=m(s);if(p.length===0)return new i(1);for(var _=this,y=0;y<p.length&&p[y]===0;y++,_=_.sqr());if(++y<p.length)for(var T=_.sqr();y<p.length;y++,T=T.sqr())p[y]!==0&&(_=_.mul(T));return _},i.prototype.iushln=function(s){n(typeof s=="number"&&s>=0);var p=s%26,_=(s-p)/26,y=67108863>>>26-p<<26-p,T;if(p!==0){var E=0;for(T=0;T<this.length;T++){var O=this.words[T]&y,P=(this.words[T]|0)-O<<p;this.words[T]=P|E,E=O>>>26-p}E&&(this.words[T]=E,this.length++)}if(_!==0){for(T=this.length-1;T>=0;T--)this.words[T+_]=this.words[T];for(T=0;T<_;T++)this.words[T]=0;this.length+=_}return this.strip()},i.prototype.ishln=function(s){return n(this.negative===0),this.iushln(s)},i.prototype.iushrn=function(s,p,_){n(typeof s=="number"&&s>=0);var y;p?y=(p-p%26)/26:y=0;var T=s%26,E=Math.min((s-T)/26,this.length),O=67108863^67108863>>>T<<T,P=_;if(y-=E,y=Math.max(0,y),P){for(var l=0;l<E;l++)P.words[l]=this.words[l];P.length=E}if(E!==0)if(this.length>E)for(this.length-=E,l=0;l<this.length;l++)this.words[l]=this.words[l+E];else this.words[0]=0,this.length=1;var U=0;for(l=this.length-1;l>=0&&(U!==0||l>=y);l--){var ot=this.words[l]|0;this.words[l]=U<<26-T|ot>>>T,U=ot&O}return P&&U!==0&&(P.words[P.length++]=U),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.ishrn=function(s,p,_){return n(this.negative===0),this.iushrn(s,p,_)},i.prototype.shln=function(s){return this.clone().ishln(s)},i.prototype.ushln=function(s){return this.clone().iushln(s)},i.prototype.shrn=function(s){return this.clone().ishrn(s)},i.prototype.ushrn=function(s){return this.clone().iushrn(s)},i.prototype.testn=function(s){n(typeof s=="number"&&s>=0);var p=s%26,_=(s-p)/26,y=1<<p;if(this.length<=_)return!1;var T=this.words[_];return!!(T&y)},i.prototype.imaskn=function(s){n(typeof s=="number"&&s>=0);var p=s%26,_=(s-p)/26;if(n(this.negative===0,"imaskn works only with positive numbers"),this.length<=_)return this;if(p!==0&&_++,this.length=Math.min(_,this.length),p!==0){var y=67108863^67108863>>>p<<p;this.words[this.length-1]&=y}return this.length===0&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.maskn=function(s){return this.clone().imaskn(s)},i.prototype.iaddn=function(s){return n(typeof s=="number"),n(s<67108864),s<0?this.isubn(-s):this.negative!==0?this.length===1&&(this.words[0]|0)<s?(this.words[0]=s-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(s),this.negative=1,this):this._iaddn(s)},i.prototype._iaddn=function(s){this.words[0]+=s;for(var p=0;p<this.length&&this.words[p]>=67108864;p++)this.words[p]-=67108864,p===this.length-1?this.words[p+1]=1:this.words[p+1]++;return this.length=Math.max(this.length,p+1),this},i.prototype.isubn=function(s){if(n(typeof s=="number"),n(s<67108864),s<0)return this.iaddn(-s);if(this.negative!==0)return this.negative=0,this.iaddn(s),this.negative=1,this;if(this.words[0]-=s,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var p=0;p<this.length&&this.words[p]<0;p++)this.words[p]+=67108864,this.words[p+1]-=1;return this.strip()},i.prototype.addn=function(s){return this.clone().iaddn(s)},i.prototype.subn=function(s){return this.clone().isubn(s)},i.prototype.iabs=function(){return this.negative=0,this},i.prototype.abs=function(){return this.clone().iabs()},i.prototype._ishlnsubmul=function(s,p,_){var y=s.length+_,T;this._expand(y);var E,O=0;for(T=0;T<s.length;T++){E=(this.words[T+_]|0)+O;var P=(s.words[T]|0)*p;E-=P&67108863,O=(E>>26)-(P/67108864|0),this.words[T+_]=E&67108863}for(;T<this.length-_;T++)E=(this.words[T+_]|0)+O,O=E>>26,this.words[T+_]=E&67108863;if(O===0)return this.strip();for(n(O===-1),O=0,T=0;T<this.length;T++)E=-(this.words[T]|0)+O,O=E>>26,this.words[T]=E&67108863;return this.negative=1,this.strip()},i.prototype._wordDiv=function(s,p){var _=this.length-s.length,y=this.clone(),T=s,E=T.words[T.length-1]|0,O=this._countBits(E);_=26-O,_!==0&&(T=T.ushln(_),y.iushln(_),E=T.words[T.length-1]|0);var P=y.length-T.length,l;if(p!=="mod"){l=new i(null),l.length=P+1,l.words=new Array(l.length);for(var U=0;U<l.length;U++)l.words[U]=0}var ot=y.clone()._ishlnsubmul(T,1,P);ot.negative===0&&(y=ot,l&&(l.words[P]=1));for(var at=P-1;at>=0;at--){var ut=(y.words[T.length+at]|0)*67108864+(y.words[T.length+at-1]|0);for(ut=Math.min(ut/E|0,67108863),y._ishlnsubmul(T,ut,at);y.negative!==0;)ut--,y.negative=0,y._ishlnsubmul(T,1,at),y.isZero()||(y.negative^=1);l&&(l.words[at]=ut)}return l&&l.strip(),y.strip(),p!=="div"&&_!==0&&y.iushrn(_),{div:l||null,mod:y}},i.prototype.divmod=function(s,p,_){if(n(!s.isZero()),this.isZero())return{div:new i(0),mod:new i(0)};var y,T,E;return this.negative!==0&&s.negative===0?(E=this.neg().divmod(s,p),p!=="mod"&&(y=E.div.neg()),p!=="div"&&(T=E.mod.neg(),_&&T.negative!==0&&T.iadd(s)),{div:y,mod:T}):this.negative===0&&s.negative!==0?(E=this.divmod(s.neg(),p),p!=="mod"&&(y=E.div.neg()),{div:y,mod:E.mod}):(this.negative&s.negative)!==0?(E=this.neg().divmod(s.neg(),p),p!=="div"&&(T=E.mod.neg(),_&&T.negative!==0&&T.isub(s)),{div:E.div,mod:T}):s.length>this.length||this.cmp(s)<0?{div:new i(0),mod:this}:s.length===1?p==="div"?{div:this.divn(s.words[0]),mod:null}:p==="mod"?{div:null,mod:new i(this.modn(s.words[0]))}:{div:this.divn(s.words[0]),mod:new i(this.modn(s.words[0]))}:this._wordDiv(s,p)},i.prototype.div=function(s){return this.divmod(s,"div",!1).div},i.prototype.mod=function(s){return this.divmod(s,"mod",!1).mod},i.prototype.umod=function(s){return this.divmod(s,"mod",!0).mod},i.prototype.divRound=function(s){var p=this.divmod(s);if(p.mod.isZero())return p.div;var _=p.div.negative!==0?p.mod.isub(s):p.mod,y=s.ushrn(1),T=s.andln(1),E=_.cmp(y);return E<0||T===1&&E===0?p.div:p.div.negative!==0?p.div.isubn(1):p.div.iaddn(1)},i.prototype.modn=function(s){n(s<=67108863);for(var p=(1<<26)%s,_=0,y=this.length-1;y>=0;y--)_=(p*_+(this.words[y]|0))%s;return _},i.prototype.idivn=function(s){n(s<=67108863);for(var p=0,_=this.length-1;_>=0;_--){var y=(this.words[_]|0)+p*67108864;this.words[_]=y/s|0,p=y%s}return this.strip()},i.prototype.divn=function(s){return this.clone().idivn(s)},i.prototype.egcd=function(s){n(s.negative===0),n(!s.isZero());var p=this,_=s.clone();p.negative!==0?p=p.umod(s):p=p.clone();for(var y=new i(1),T=new i(0),E=new i(0),O=new i(1),P=0;p.isEven()&&_.isEven();)p.iushrn(1),_.iushrn(1),++P;for(var l=_.clone(),U=p.clone();!p.isZero();){for(var ot=0,at=1;(p.words[0]&at)===0&&ot<26;++ot,at<<=1);if(ot>0)for(p.iushrn(ot);ot-- >0;)(y.isOdd()||T.isOdd())&&(y.iadd(l),T.isub(U)),y.iushrn(1),T.iushrn(1);for(var ut=0,ft=1;(_.words[0]&ft)===0&&ut<26;++ut,ft<<=1);if(ut>0)for(_.iushrn(ut);ut-- >0;)(E.isOdd()||O.isOdd())&&(E.iadd(l),O.isub(U)),E.iushrn(1),O.iushrn(1);p.cmp(_)>=0?(p.isub(_),y.isub(E),T.isub(O)):(_.isub(p),E.isub(y),O.isub(T))}return{a:E,b:O,gcd:_.iushln(P)}},i.prototype._invmp=function(s){n(s.negative===0),n(!s.isZero());var p=this,_=s.clone();p.negative!==0?p=p.umod(s):p=p.clone();for(var y=new i(1),T=new i(0),E=_.clone();p.cmpn(1)>0&&_.cmpn(1)>0;){for(var O=0,P=1;(p.words[0]&P)===0&&O<26;++O,P<<=1);if(O>0)for(p.iushrn(O);O-- >0;)y.isOdd()&&y.iadd(E),y.iushrn(1);for(var l=0,U=1;(_.words[0]&U)===0&&l<26;++l,U<<=1);if(l>0)for(_.iushrn(l);l-- >0;)T.isOdd()&&T.iadd(E),T.iushrn(1);p.cmp(_)>=0?(p.isub(_),y.isub(T)):(_.isub(p),T.isub(y))}var ot;return p.cmpn(1)===0?ot=y:ot=T,ot.cmpn(0)<0&&ot.iadd(s),ot},i.prototype.gcd=function(s){if(this.isZero())return s.abs();if(s.isZero())return this.abs();var p=this.clone(),_=s.clone();p.negative=0,_.negative=0;for(var y=0;p.isEven()&&_.isEven();y++)p.iushrn(1),_.iushrn(1);do{for(;p.isEven();)p.iushrn(1);for(;_.isEven();)_.iushrn(1);var T=p.cmp(_);if(T<0){var E=p;p=_,_=E}else if(T===0||_.cmpn(1)===0)break;p.isub(_)}while(!0);return _.iushln(y)},i.prototype.invm=function(s){return this.egcd(s).a.umod(s)},i.prototype.isEven=function(){return(this.words[0]&1)===0},i.prototype.isOdd=function(){return(this.words[0]&1)===1},i.prototype.andln=function(s){return this.words[0]&s},i.prototype.bincn=function(s){n(typeof s=="number");var p=s%26,_=(s-p)/26,y=1<<p;if(this.length<=_)return this._expand(_+1),this.words[_]|=y,this;for(var T=y,E=_;T!==0&&E<this.length;E++){var O=this.words[E]|0;O+=T,T=O>>>26,O&=67108863,this.words[E]=O}return T!==0&&(this.words[E]=T,this.length++),this},i.prototype.isZero=function(){return this.length===1&&this.words[0]===0},i.prototype.cmpn=function(s){var p=s<0;if(this.negative!==0&&!p)return-1;if(this.negative===0&&p)return 1;this.strip();var _;if(this.length>1)_=1;else{p&&(s=-s),n(s<=67108863,"Number is too big");var y=this.words[0]|0;_=y===s?0:y<s?-1:1}return this.negative!==0?-_|0:_},i.prototype.cmp=function(s){if(this.negative!==0&&s.negative===0)return-1;if(this.negative===0&&s.negative!==0)return 1;var p=this.ucmp(s);return this.negative!==0?-p|0:p},i.prototype.ucmp=function(s){if(this.length>s.length)return 1;if(this.length<s.length)return-1;for(var p=0,_=this.length-1;_>=0;_--){var y=this.words[_]|0,T=s.words[_]|0;if(y!==T){y<T?p=-1:y>T&&(p=1);break}}return p},i.prototype.gtn=function(s){return this.cmpn(s)===1},i.prototype.gt=function(s){return this.cmp(s)===1},i.prototype.gten=function(s){return this.cmpn(s)>=0},i.prototype.gte=function(s){return this.cmp(s)>=0},i.prototype.ltn=function(s){return this.cmpn(s)===-1},i.prototype.lt=function(s){return this.cmp(s)===-1},i.prototype.lten=function(s){return this.cmpn(s)<=0},i.prototype.lte=function(s){return this.cmp(s)<=0},i.prototype.eqn=function(s){return this.cmpn(s)===0},i.prototype.eq=function(s){return this.cmp(s)===0},i.red=function(s){return new et(s)},i.prototype.toRed=function(s){return n(!this.red,"Already a number in reduction context"),n(this.negative===0,"red works only with positives"),s.convertTo(this)._forceRed(s)},i.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},i.prototype._forceRed=function(s){return this.red=s,this},i.prototype.forceRed=function(s){return n(!this.red,"Already a number in reduction context"),this._forceRed(s)},i.prototype.redAdd=function(s){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,s)},i.prototype.redIAdd=function(s){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,s)},i.prototype.redSub=function(s){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,s)},i.prototype.redISub=function(s){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,s)},i.prototype.redShl=function(s){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,s)},i.prototype.redMul=function(s){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,s),this.red.mul(this,s)},i.prototype.redIMul=function(s){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,s),this.red.imul(this,s)},i.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(s){return n(this.red&&!s.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,s)};var K={k256:null,p224:null,p192:null,p25519:null};function Q(F,s){this.name=F,this.p=new i(s,16),this.n=this.p.bitLength(),this.k=new i(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}Q.prototype._tmp=function(){var s=new i(null);return s.words=new Array(Math.ceil(this.n/13)),s},Q.prototype.ireduce=function(s){var p=s,_;do this.split(p,this.tmp),p=this.imulK(p),p=p.iadd(this.tmp),_=p.bitLength();while(_>this.n);var y=_<this.n?-1:p.ucmp(this.p);return y===0?(p.words[0]=0,p.length=1):y>0?p.isub(this.p):p.strip!==void 0?p.strip():p._strip(),p},Q.prototype.split=function(s,p){s.iushrn(this.n,0,p)},Q.prototype.imulK=function(s){return s.imul(this.k)};function j(){Q.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}r(j,Q),j.prototype.split=function(s,p){for(var _=4194303,y=Math.min(s.length,9),T=0;T<y;T++)p.words[T]=s.words[T];if(p.length=y,s.length<=9){s.words[0]=0,s.length=1;return}var E=s.words[9];for(p.words[p.length++]=E&_,T=10;T<s.length;T++){var O=s.words[T]|0;s.words[T-10]=(O&_)<<4|E>>>22,E=O}E>>>=22,s.words[T-10]=E,E===0&&s.length>10?s.length-=10:s.length-=9},j.prototype.imulK=function(s){s.words[s.length]=0,s.words[s.length+1]=0,s.length+=2;for(var p=0,_=0;_<s.length;_++){var y=s.words[_]|0;p+=y*977,s.words[_]=p&67108863,p=y*64+(p/67108864|0)}return s.words[s.length-1]===0&&(s.length--,s.words[s.length-1]===0&&s.length--),s};function Z(){Q.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}r(Z,Q);function W(){Q.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}r(W,Q);function st(){Q.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}r(st,Q),st.prototype.imulK=function(s){for(var p=0,_=0;_<s.length;_++){var y=(s.words[_]|0)*19+p,T=y&67108863;y>>>=26,s.words[_]=T,p=y}return p!==0&&(s.words[s.length++]=p),s},i._prime=function(s){if(K[s])return K[s];var p;if(s==="k256")p=new j;else if(s==="p224")p=new Z;else if(s==="p192")p=new W;else if(s==="p25519")p=new st;else throw new Error("Unknown prime "+s);return K[s]=p,p};function et(F){if(typeof F=="string"){var s=i._prime(F);this.m=s.p,this.prime=s}else n(F.gtn(1),"modulus must be greater than 1"),this.m=F,this.prime=null}et.prototype._verify1=function(s){n(s.negative===0,"red works only with positives"),n(s.red,"red works only with red numbers")},et.prototype._verify2=function(s,p){n((s.negative|p.negative)===0,"red works only with positives"),n(s.red&&s.red===p.red,"red works only with red numbers")},et.prototype.imod=function(s){return this.prime?this.prime.ireduce(s)._forceRed(this):s.umod(this.m)._forceRed(this)},et.prototype.neg=function(s){return s.isZero()?s.clone():this.m.sub(s)._forceRed(this)},et.prototype.add=function(s,p){this._verify2(s,p);var _=s.add(p);return _.cmp(this.m)>=0&&_.isub(this.m),_._forceRed(this)},et.prototype.iadd=function(s,p){this._verify2(s,p);var _=s.iadd(p);return _.cmp(this.m)>=0&&_.isub(this.m),_},et.prototype.sub=function(s,p){this._verify2(s,p);var _=s.sub(p);return _.cmpn(0)<0&&_.iadd(this.m),_._forceRed(this)},et.prototype.isub=function(s,p){this._verify2(s,p);var _=s.isub(p);return _.cmpn(0)<0&&_.iadd(this.m),_},et.prototype.shl=function(s,p){return this._verify1(s),this.imod(s.ushln(p))},et.prototype.imul=function(s,p){return this._verify2(s,p),this.imod(s.imul(p))},et.prototype.mul=function(s,p){return this._verify2(s,p),this.imod(s.mul(p))},et.prototype.isqr=function(s){return this.imul(s,s.clone())},et.prototype.sqr=function(s){return this.mul(s,s)},et.prototype.sqrt=function(s){if(s.isZero())return s.clone();var p=this.m.andln(3);if(n(p%2===1),p===3){var _=this.m.add(new i(1)).iushrn(2);return this.pow(s,_)}for(var y=this.m.subn(1),T=0;!y.isZero()&&y.andln(1)===0;)T++,y.iushrn(1);n(!y.isZero());var E=new i(1).toRed(this),O=E.redNeg(),P=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new i(2*l*l).toRed(this);this.pow(l,P).cmp(O)!==0;)l.redIAdd(O);for(var U=this.pow(l,y),ot=this.pow(s,y.addn(1).iushrn(1)),at=this.pow(s,y),ut=T;at.cmp(E)!==0;){for(var ft=at,Mt=0;ft.cmp(E)!==0;Mt++)ft=ft.redSqr();n(Mt<ut);var vt=this.pow(U,new i(1).iushln(ut-Mt-1));ot=ot.redMul(vt),U=vt.redSqr(),at=at.redMul(U),ut=Mt}return ot},et.prototype.invm=function(s){var p=s._invmp(this.m);return p.negative!==0?(p.negative=0,this.imod(p).redNeg()):this.imod(p)},et.prototype.pow=function(s,p){if(p.isZero())return new i(1).toRed(this);if(p.cmpn(1)===0)return s.clone();var _=4,y=new Array(1<<_);y[0]=new i(1).toRed(this),y[1]=s;for(var T=2;T<y.length;T++)y[T]=this.mul(y[T-1],s);var E=y[0],O=0,P=0,l=p.bitLength()%26;for(l===0&&(l=26),T=p.length-1;T>=0;T--){for(var U=p.words[T],ot=l-1;ot>=0;ot--){var at=U>>ot&1;if(E!==y[0]&&(E=this.sqr(E)),at===0&&O===0){P=0;continue}O<<=1,O|=at,P++,!(P!==_&&(T!==0||ot!==0))&&(E=this.mul(E,y[O]),P=0,O=0)}l=26}return E},et.prototype.convertTo=function(s){var p=s.umod(this.m);return p===s?p.clone():p},et.prototype.convertFrom=function(s){var p=s.clone();return p.red=null,p},i.mont=function(s){return new rt(s)};function rt(F){et.call(this,F),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new i(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}r(rt,et),rt.prototype.convertTo=function(s){return this.imod(s.ushln(this.shift))},rt.prototype.convertFrom=function(s){var p=this.imod(s.mul(this.rinv));return p.red=null,p},rt.prototype.imul=function(s,p){if(s.isZero()||p.isZero())return s.words[0]=0,s.length=1,s;var _=s.imul(p),y=_.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),T=_.isub(y).iushrn(this.shift),E=T;return T.cmp(this.m)>=0?E=T.isub(this.m):T.cmpn(0)<0&&(E=T.iadd(this.m)),E._forceRed(this)},rt.prototype.mul=function(s,p){if(s.isZero()||p.isZero())return new i(0)._forceRed(this);var _=s.mul(p),y=_.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),T=_.isub(y).iushrn(this.shift),E=T;return T.cmp(this.m)>=0?E=T.isub(this.m):T.cmpn(0)<0&&(E=T.iadd(this.m)),E._forceRed(this)},rt.prototype.invm=function(s){var p=this.imod(s._invmp(this.m).mul(this.r2));return p._forceRed(this)}})(typeof mn>"u"||mn,aa)});var kn=xt((ah,sa)=>{"use strict";var oh=ur();sa.exports=_f;function _f(e){return e&&typeof e=="object"&&!!e.words}});var ca=xt((sh,fa)=>{"use strict";var ua=kn();fa.exports=Sf;function Sf(e){return Array.isArray(e)&&e.length===2&&ua(e[0])&&ua(e[1])}});var mr=xt((uh,Xt)=>{var Xn=!1;if(typeof Float64Array<"u")if(le=new Float64Array(1),re=new Uint32Array(le.buffer),le[0]=1,Xn=!0,re[1]===1072693248){let e=function(r,i){return re[0]=r,re[1]=i,le[0]},t=function(r){return le[0]=r,re[0]},n=function(r){return le[0]=r,re[1]};Tf=e,Bf=t,Pf=n,Xt.exports=function(i){return le[0]=i,[re[0],re[1]]},Xt.exports.pack=e,Xt.exports.lo=t,Xt.exports.hi=n}else if(re[0]===1072693248){let e=function(r,i){return re[1]=r,re[0]=i,le[0]},t=function(r){return le[0]=r,re[1]},n=function(r){return le[0]=r,re[0]};Df=e,Ff=t,Af=n,Xt.exports=function(i){return le[0]=i,[re[1],re[0]]},Xt.exports.pack=e,Xt.exports.lo=t,Xt.exports.hi=n}else Xn=!1;var le,re,Tf,Bf,Pf,Df,Ff,Af;if(!Xn){let e=function(r,i){return he.writeUInt32LE(r,0,!0),he.writeUInt32LE(i,4,!0),he.readDoubleLE(0,!0)},t=function(r){return he.writeDoubleLE(r,0,!0),he.readUInt32LE(0,!0)},n=function(r){return he.writeDoubleLE(r,0,!0),he.readUInt32LE(4,!0)};Uf=e,zf=t,If=n,he=new Buffer(8),Xt.exports=function(i){return he.writeDoubleLE(i,0,!0),[he.readUInt32LE(0,!0),he.readUInt32LE(4,!0)]},Xt.exports.pack=e,Xt.exports.lo=t,Xt.exports.hi=n}var he,Uf,zf,If;Xt.exports.sign=function(e){return Xt.exports.hi(e)>>>31};Xt.exports.exponent=function(e){var t=Xt.exports.hi(e);return(t<<1>>>21)-1023};Xt.exports.fraction=function(e){var t=Xt.exports.lo(e),n=Xt.exports.hi(e),r=n&(1<<20)-1;return n&2146435072&&(r+=1<<20),[t,r]};Xt.exports.denormalized=function(e){var t=Xt.exports.hi(e);return!(t&2146435072)}});var Yn=xt((fh,ha)=>{"use strict";var la=ur(),Ef=mr();ha.exports=Lf;function Lf(e){var t=Ef.exponent(e);return t<52?new la(e):new la(e*Math.pow(2,52-t)).ushln(t-52)}});var pa=xt((ch,va)=>{"use strict";var Gf=ur();va.exports=Rf;function Rf(e){return new Gf(e)}});var kr=xt((lh,ga)=>{"use strict";var Of=ur();ga.exports=qf;function qf(e){return e.cmp(new Of(0))}});var Qe=xt((hh,wa)=>{"use strict";var Xr=Yn(),da=kr();wa.exports=Nf;function Nf(e,t){var n=da(e),r=da(t);if(n===0)return[Xr(0),Xr(1)];if(r===0)return[Xr(0),Xr(0)];r<0&&(e=e.neg(),t=t.neg());var i=e.gcd(t);return i.cmpn(1)?[e.div(i),t.div(i)]:[e,t]}});var Zn=xt((vh,xa)=>{"use strict";var Vf=Qe();xa.exports=Cf;function Cf(e,t){return Vf(e[0].mul(t[1]),e[1].mul(t[0]))}});var Yr=xt((ph,Sa)=>{"use strict";var Ma=ca(),ya=kn(),Le=Yn(),ba=pa(),mf=Qe(),kf=Zn();Sa.exports=_a;function _a(e,t){if(Ma(e))return t?kf(e,_a(t)):[e[0].clone(),e[1].clone()];var n=0,r,i;if(ya(e))r=e.clone();else if(typeof e=="string")r=ba(e);else{if(e===0)return[Le(0),Le(1)];if(e===Math.floor(e))r=Le(e);else{for(;e!==Math.floor(e);)e=e*Math.pow(2,256),n-=256;r=Le(e)}}if(Ma(t))r.mul(t[1]),i=t[0].clone();else if(ya(t))i=t.clone();else if(typeof t=="string")i=ba(t);else if(!t)i=Le(1);else if(t===Math.floor(t))i=Le(t);else{for(;t!==Math.floor(t);)t=t*Math.pow(2,256),n+=256;i=Le(t)}return n>0?r=r.ushln(n):n<0&&(i=i.ushln(-n)),mf(r,i)}});var Ba=xt((gh,Ta)=>{"use strict";Ta.exports=Xf;function Xf(e,t){return e[0].mul(t[1]).cmp(t[0].mul(e[1]))}});var Da=xt((dh,Pa)=>{"use strict";var Yf=kr();Pa.exports=Zf;function Zf(e){var t=e.length,n=e.words,r=0;if(t===1)r=n[0];else if(t===2)r=n[0]+n[1]*67108864;else for(var i=0;i<t;i++){var o=n[i];r+=o*Math.pow(67108864,i)}return Yf(e)*r}});var za=xt((wh,Ua)=>{"use strict";var Fa=mr(),Aa=rr().countTrailingZeros;Ua.exports=Hf;function Hf(e){var t=Aa(Fa.lo(e));if(t<32)return t;var n=Aa(Fa.hi(e));return n>20?52:n+32}});var Ea=xt((xh,Ia)=>{"use strict";var Hn=Da(),$f=za();Ia.exports=Wf;function Wf(e){var t=e[0],n=e[1];if(t.cmpn(0)===0)return 0;var r=t.abs().divmod(n.abs()),i=r.div,o=Hn(i),a=r.mod,f=t.negative!==n.negative?-1:1;if(a.cmpn(0)===0)return f*o;if(o){var h=$f(o)+4,v=Hn(a.ushln(h).divRound(n));return f*(o+v*Math.pow(2,-h))}else{var d=n.bitLength()-a.bitLength()+53,v=Hn(a.ushln(d).divRound(n));return d<1023?f*v*Math.pow(2,-d):(v*=Math.pow(2,-1023),f*v*Math.pow(2,1023-d))}}});var Ga=xt((Mh,La)=>{"use strict";La.exports=Qf;var Kf=Yr();function Qf(e){for(var t=new Array(e.length),n=0;n<e.length;++n)t[n]=Kf(e[n]);return t}});var Na=xt((yh,qa)=>{"use strict";var $n=mr(),Ra=Math.pow(2,-1074),Oa=-1>>>0;qa.exports=Jf;function Jf(e,t){if(isNaN(e)||isNaN(t))return NaN;if(e===t)return e;if(e===0)return t<0?-Ra:Ra;var n=$n.hi(e),r=$n.lo(e);return t>e==e>0?r===Oa?(n+=1,r=0):r+=1:r===0?(r=Oa,n-=1):r-=1,$n.pack(r,n)}});var Wn=xt((bh,Va)=>{"use strict";var jf=Qe();Va.exports=tc;function tc(e,t){return jf(e[0].mul(t[0]),e[1].mul(t[1]))}});var Kn=xt((_h,Ca)=>{"use strict";var ec=Qe();Ca.exports=rc;function rc(e,t){return ec(e[0].mul(t[1]).sub(e[1].mul(t[0])),e[1].mul(t[1]))}});var Xa=xt((Sh,ka)=>{"use strict";var ma=kr();ka.exports=nc;function nc(e){return ma(e[0])*ma(e[1])}});var Za=xt((Th,Ya)=>{"use strict";var ic=Kn();Ya.exports=oc;function oc(e,t){for(var n=e.length,r=new Array(n),i=0;i<n;++i)r[i]=ic(e[i],t[i]);return r}});var $a=xt((Bh,Ha)=>{"use strict";var ac=Qe();Ha.exports=sc;function sc(e,t){return ac(e[0].mul(t[1]).add(t[0].mul(e[1])),e[1].mul(t[1]))}});var Ka=xt((Ph,Wa)=>{"use strict";var uc=$a();Wa.exports=fc;function fc(e,t){for(var n=e.length,r=new Array(n),i=0;i<n;++i)r[i]=uc(e[i],t[i]);return r}});var Ja=xt((Dh,Qa)=>{"use strict";var cc=Yr(),lc=Wn();Qa.exports=hc;function hc(e,t){for(var n=cc(t),r=e.length,i=new Array(r),o=0;o<r;++o)i[o]=lc(e[o],n);return i}});var rs=xt((Fh,es)=>{"use strict";es.exports=xc;var ja=Wn(),vc=Zn(),pc=Kn(),gc=Xa(),Qn=Za(),dc=Ka(),wc=Ja();function ts(e,t){return pc(ja(e[0],t[1]),ja(e[1],t[0]))}function xc(e,t,n,r){var i=Qn(t,e),o=Qn(r,n),a=ts(i,o);if(gc(a)===0)return null;var f=Qn(e,n),h=ts(o,f),v=vc(h,a),d=wc(i,v),D=dc(e,d);return D}});var ls=xt((Ah,cs)=>{"use strict";cs.exports=Ac;var Mc=vo(),jn=ra(),as=ia(),ns=Yr(),is=Ba(),Jn=Ea(),Zr=Ga(),oe=Na(),yc=rs();function os(e){var t=Jn(e);return[oe(t,-1/0),oe(t,1/0)]}function bc(e,t){for(var n=new Array(t.length),r=0;r<t.length;++r){var i=t[r],o=e[i[0]],a=e[i[1]];n[r]=[oe(Math.min(o[0],a[0]),-1/0),oe(Math.min(o[1],a[1]),-1/0),oe(Math.max(o[0],a[0]),1/0),oe(Math.max(o[1],a[1]),1/0)]}return n}function ss(e){for(var t=new Array(e.length),n=0;n<e.length;++n){var r=e[n];t[n]=[oe(r[0],-1/0),oe(r[1],-1/0),oe(r[0],1/0),oe(r[1],1/0)]}return t}function _c(e,t,n){var r=[];return jn(n,function(i,o){var a=t[i],f=t[o];if(!(a[0]===f[0]||a[0]===f[1]||a[1]===f[0]||a[1]===f[1])){var h=e[a[0]],v=e[a[1]],d=e[f[0]],D=e[f[1]];as(h,v,d,D)&&r.push([i,o])}}),r}function Sc(e,t,n,r){var i=[];return jn(n,r,function(o,a){var f=t[o];if(!(f[0]===a||f[1]===a)){var h=e[a],v=e[f[0]],d=e[f[1]];as(v,d,h,h)&&i.push([o,a])}}),i}function Tc(e,t,n,r,i){var o,a,f=e.map(function(et){return[ns(et[0]),ns(et[1])]});for(o=0;o<n.length;++o){var h=n[o];a=h[0];var v=h[1],d=t[a],D=t[v],m=yc(Zr(e[d[0]]),Zr(e[d[1]]),Zr(e[D[0]]),Zr(e[D[1]]));if(m){var C=e.length;e.push([Jn(m[0]),Jn(m[1])]),f.push(m),r.push([a,C],[v,C])}}for(r.sort(function(et,rt){if(et[0]!==rt[0])return et[0]-rt[0];var F=f[et[1]],s=f[rt[1]];return is(F[0],s[0])||is(F[1],s[1])}),o=r.length-1;o>=0;--o){var R=r[o];a=R[0];var N=t[a],V=N[0],Y=N[1],K=e[V],Q=e[Y];if((K[0]-Q[0]||K[1]-Q[1])<0){var j=V;V=Y,Y=j}N[0]=V;var Z=N[1]=R[1],W;for(i&&(W=N[2]);o>0&&r[o-1][0]===a;){var R=r[--o],st=R[1];i?t.push([Z,st,W]):t.push([Z,st]),Z=st}i?t.push([Z,Y,W]):t.push([Z,Y])}return f}function us(e,t,n){for(var r=t.length,i=new Mc(r),o=[],a=0;a<t.length;++a){var f=t[a],h=os(f[0]),v=os(f[1]);o.push([oe(h[0],-1/0),oe(v[0],-1/0),oe(h[1],1/0),oe(v[1],1/0)])}jn(o,function(R,N){i.link(R,N)});for(var d=!0,D=new Array(r),a=0;a<r;++a){var m=i.find(a);m!==a&&(d=!1,e[m]=[Math.min(e[a][0],e[m][0]),Math.min(e[a][1],e[m][1])])}if(d)return null;for(var C=0,a=0;a<r;++a){var m=i.find(a);m===a?(D[a]=C,e[C++]=e[a]):D[a]=-1}e.length=C;for(var a=0;a<r;++a)D[a]<0&&(D[a]=D[i.find(a)]);return D}function Bc(e,t){return e[0]-t[0]||e[1]-t[1]}function Pc(e,t){var n=e[0]-t[0]||e[1]-t[1];return n||(e[2]<t[2]?-1:e[2]>t[2]?1:0)}function fs(e,t,n){if(e.length!==0){if(t)for(var r=0;r<e.length;++r){var i=e[r],o=t[i[0]],a=t[i[1]];i[0]=Math.min(o,a),i[1]=Math.max(o,a)}else for(var r=0;r<e.length;++r){var i=e[r],o=i[0],a=i[1];i[0]=Math.min(o,a),i[1]=Math.max(o,a)}n?e.sort(Pc):e.sort(Bc);for(var f=1,r=1;r<e.length;++r){var h=e[r-1],v=e[r];v[0]===h[0]&&v[1]===h[1]&&(!n||v[2]===h[2])||(e[f++]=v)}e.length=f}}function Dc(e,t,n){var r=us(e,[],ss(e));return fs(t,r,n),!!r}function Fc(e,t,n){var r=bc(e,t),i=_c(e,t,r),o=ss(e),a=Sc(e,t,r,o),f=Tc(e,t,i,a,n),h=us(e,f,o);return fs(t,h,n),h?!0:i.length>0||a.length>0}function Ac(e,t,n){var r;if(n){r=t;for(var i=new Array(t.length),o=0;o<t.length;++o){var a=t[o];i[o]=[a[0],a[1],n[o]]}t=i}for(var f=Dc(e,t,!!n);Fc(e,t,!!n);)f=!0;if(n&&f){r.length=0,n.length=0;for(var o=0;o<t.length;++o){var a=t[o];r.push([a[0],a[1]]),n.push(a[2])}}return f}});function ne(e,t,n,r,i,o,a,f="linear"){let h=e.createTexture({label:t,size:{width:n,height:r},format:o,usage:a,mipLevelCount:i,sampleCount:1,dimension:"2d"}),v=h.createView(),d=[];for(let m=0;m<i;m++)d.push(h.createView({label:t,format:o,dimension:"2d",aspect:"all",baseMipLevel:m,mipLevelCount:1,baseArrayLayer:0,arrayLayerCount:1}));let D=e.createSampler({label:`${t} sampler`,addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:f,minFilter:f,mipmapFilter:f});return{size:{width:n,height:r},texture:h,view:v,mip_view:d,sampler:D}}function Vt(e){return e.canvas?navigator.gpu?.getPreferredCanvasFormat():e.context.getPreferredFormat()}function ve(e,t,n,r){r=r||Vt(e);let i=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,a=ne(e.device,t,n.width,n.height,1,r,i);e.device.queue.writeTexture({texture:a.texture},n.data,{bytesPerRow:4*n.width},{width:n.width,height:n.height});let f={addressModeU:"repeat",addressModeV:"repeat",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",maxAnisotropy:1};return a.sampler=e.device.createSampler(f),a}async function pe(e,t,n,r){let o=await(await fetch(n)).blob();r=r||Vt(e);let a=await createImageBitmap(o),f=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,v=ne(e.device,t,a.width,a.height,1,r,f);e.device.queue.copyExternalImageToTexture({source:a},{texture:v.texture},{width:a.width,height:a.height});let d={addressModeU:"repeat",addressModeV:"repeat",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",maxAnisotropy:1};return v.sampler=e.device.createSampler(d),v}var pi="const BLOOM_MIP_COUNT:i32=7;const MODE_PREFILTER:u32=0u;const MODE_DOWNSAMPLE:u32=1u;const MODE_UPSAMPLE_FIRST:u32=2u;const MODE_UPSAMPLE:u32=3u;const EPSILON:f32=1.0e-4;struct bloom_param{parameters:vec4<f32>,combine_constant:f32,doop:u32,ferp:u32,}struct mode_lod_param{mode_lod:u32,}@group(0)@binding(0)var output_texture:texture_storage_2d<rgba16float,write>;@group(0)@binding(1)var input_texture:texture_2d<f32>;@group(0)@binding(2)var bloom_texture:texture_2d<f32>;@group(0)@binding(3)var samp:sampler;@group(0)@binding(4)var<uniform> param:bloom_param;@group(0)@binding(5)var<uniform> pc:mode_lod_param;fn QuadraticThreshold(color:vec4<f32>,threshold:f32,curve:vec3<f32>)->vec4<f32>{let brightness=max(max(color.r,color.g),color.b);var rq:f32=clamp(brightness-curve.x,0.0,curve.y);rq=curve.z*(rq*rq);let ret_color=color*max(rq,brightness-threshold)/max(brightness,EPSILON);return ret_color;}fn Prefilter(color:vec4<f32>,uv:vec2<f32>)->vec4<f32>{let clamp_value=20.0;var c=min(vec4<f32>(clamp_value),color);c=QuadraticThreshold(color,param.parameters.x,param.parameters.yzw);return c;}fn DownsampleBox13(tex:texture_2d<f32>,lod:f32,uv:vec2<f32>,tex_size:vec2<f32>)->vec3<f32>{let A=textureSampleLevel(tex,samp,uv,lod).rgb;let texel_size=tex_size*0.5;let B=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-1.0,-1.0),lod).rgb;let C=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-1.0,1.0),lod).rgb;let D=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(1.0,1.0),lod).rgb;let E=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(1.0,-1.0),lod).rgb;let F=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,-2.0),lod).rgb;let G=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,0.0),lod).rgb;let H=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(0.0,2.0),lod).rgb;let I=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,2.0),lod).rgb;let J=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,2.0),lod).rgb;let K=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(2.0,0.0),lod).rgb;let L=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(-2.0,-2.0),lod).rgb;let M=textureSampleLevel(tex,samp,uv+texel_size*vec2<f32>(0.0,-2.0),lod).rgb;var result:vec3<f32>=vec3<f32>(0.0);result=result+(B+C+D+E)*0.5;result=result+(F+G+A+M)*0.125;result=result+(G+H+I+A)*0.125;result=result+(A+I+J+K)*0.125;result=result+(M+A+K+L)*0.125;result=result*0.25;return result;}fn UpsampleTent9(tex:texture_2d<f32>,lod:f32,uv:vec2<f32>,texel_size:vec2<f32>,radius:f32)->vec3<f32>{let offset=texel_size.xyxy*vec4<f32>(1.0,1.0,-1.0,0.0)*radius;var result:vec3<f32>=textureSampleLevel(tex,samp,uv,lod).rgb*4.0;result=result+textureSampleLevel(tex,samp,uv-offset.xy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv-offset.wy,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv-offset.zy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv+offset.zw,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.xw,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.zy,lod).rgb;result=result+textureSampleLevel(tex,samp,uv+offset.wy,lod).rgb*2.0;result=result+textureSampleLevel(tex,samp,uv+offset.xy,lod).rgb;return result*(1.0/16.0);}fn combine(ex_color:vec3<f32>,color_to_add:vec3<f32>,combine_constant:f32)->vec3<f32>{let existing_color=ex_color+(-color_to_add);let blended_color=(combine_constant*existing_color)+color_to_add;return blended_color;}@compute @workgroup_size(8,4,1)fn cs_main(@builtin(global_invocation_id)global_invocation_id:vec3<u32>){let mode=pc.mode_lod>>16u;let lod=pc.mode_lod&65535u;let imgSize=textureDimensions(output_texture);if(global_invocation_id.x<u32(imgSize.x)&&global_invocation_id.y<u32(imgSize.y)){var texCoords:vec2<f32>=vec2<f32>(f32(global_invocation_id.x)/f32(imgSize.x),f32(global_invocation_id.y)/f32(imgSize.y));texCoords=texCoords+(1.0/vec2<f32>(imgSize))*0.5;let texSize=vec2<f32>(textureDimensions(input_texture,i32(lod)));var color:vec4<f32>=vec4<f32>(1.0);if(mode==MODE_PREFILTER){color=vec4<f32>(DownsampleBox13(input_texture,f32(lod),texCoords,1.0/texSize),1.0);color=Prefilter(color,texCoords);}else if(mode==MODE_DOWNSAMPLE){color=vec4<f32>(DownsampleBox13(input_texture,f32(lod),texCoords,1.0/texSize),1.0);}else if(mode==MODE_UPSAMPLE_FIRST){let bloomTexSize=textureDimensions(input_texture,i32(lod)+1);let sampleScale=1.0;let upsampledTexture=UpsampleTent9(input_texture,f32(lod)+1.0,texCoords,1.0/vec2<f32>(bloomTexSize),sampleScale);let existing=textureSampleLevel(input_texture,samp,texCoords,f32(lod)).rgb;color=vec4<f32>(combine(existing,upsampledTexture,param.combine_constant),1.0);}else if(mode==MODE_UPSAMPLE){let bloomTexSize=textureDimensions(bloom_texture,i32(lod)+1);let sampleScale=1.0;let upsampledTexture=UpsampleTent9(bloom_texture,f32(lod)+1.0,texCoords,1.0/vec2<f32>(bloomTexSize),sampleScale);let existing=textureSampleLevel(input_texture,samp,texCoords,f32(lod)).rgb;color=vec4<f32>(combine(existing,upsampledTexture,param.combine_constant),1.0);}textureStore(output_texture,vec2<i32>(global_invocation_id.xy),color);}}";var ue=7,Ws=0,gi=1,Ks=2,di=3,wi={type:"cobalt:bloom",onInit:async function(e,t={}){return Qs(e,t)},onRun:function(e,t,n){Js(e,t,n)},onDestroy:function(e,t){Mi(t)},onResize:function(e,t){js(e,t)},onViewportPosition:function(e,t){}};function Qs(e,t){let{device:n}=e,r=e.viewport.width,i=e.viewport.height,o={compute_pipeline:null,bind_group:[],bind_group_layout:[],bind_groups_textures:[],buffers:[]},a=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,storageTexture:{access:"write-only",format:"rgba16float",viewDimension:"2d"}},{binding:1,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}},{binding:2,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d",multisampled:!1}},{binding:3,visibility:GPUShaderStage.COMPUTE,sampler:{}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}}]});o.bind_group_layout.push(a),o.bind_groups_textures.push(ne(n,"bloom downsampler image 0",r/2,i/2,ue,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),o.bind_groups_textures.push(ne(n,"bloom downsampler image 1",r/2,i/2,ue,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),o.bind_groups_textures.push(t.refs.bloom.data);let f=n.createPipelineLayout({bindGroupLayouts:o.bind_group_layout}),h=n.createComputePipeline({layout:f,compute:{module:n.createShaderModule({code:pi}),entryPoint:"cs_main"}});return xi(e,o,t),o.compute_pipeline=h,o}function xi(e,t,n){let{refs:r}=n,{device:i}=e,o=n.options.bloom_threshold??.1,a=n.options.bloom_knee??.2,f=n.options.bloom_combine_constant??.68,h=new Float32Array([o,o-a,a*2,.25/a,f,0,0,0]),v=i.createBuffer({label:"bloom static parameters buffer",size:h.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});t.buffers.push(v),new Float32Array(v.getMappedRange()).set(h),v.unmap(),t.bind_group.length=0,t.params_buf=v,t.bind_group.push(Ce(i,t,t.bind_groups_textures[0].mip_view[0],r.emissive.data.view,r.hdr.data.view,r.hdr.data.sampler,v,Ws<<16|0));for(let D=1;D<ue;D++)t.bind_group.push(Ce(i,t,t.bind_groups_textures[1].mip_view[D],t.bind_groups_textures[0].view,r.hdr.data.view,r.hdr.data.sampler,v,gi<<16|D-1)),t.bind_group.push(Ce(i,t,t.bind_groups_textures[0].mip_view[D],t.bind_groups_textures[1].view,r.hdr.data.view,r.hdr.data.sampler,v,gi<<16|D));t.bind_group.push(Ce(i,t,t.bind_groups_textures[2].mip_view[ue-1],t.bind_groups_textures[0].view,r.hdr.data.view,r.hdr.data.sampler,v,Ks<<16|ue-2));let d=!0;for(let D=ue-2;D>=0;D--)d?(t.bind_group.push(Ce(i,t,t.bind_groups_textures[1].mip_view[D],t.bind_groups_textures[0].view,t.bind_groups_textures[2].view,r.hdr.data.sampler,v,di<<16|D)),d=!1):(t.bind_group.push(Ce(i,t,t.bind_groups_textures[2].mip_view[D],t.bind_groups_textures[0].view,t.bind_groups_textures[1].view,r.hdr.data.sampler,v,di<<16|D)),d=!0)}function Ce(e,t,n,r,i,o,a,f){let h=new Uint32Array([f]),v=e.createBuffer({label:"bloom static mode_lod buffer",size:h.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});return t.buffers.push(v),new Uint32Array(v.getMappedRange()).set(h),v.unmap(),e.createBindGroup({label:"bloom bind group layout",layout:t.bind_group_layout[0],entries:[{binding:0,resource:n},{binding:1,resource:r},{binding:2,resource:i},{binding:3,resource:o},{binding:4,resource:{buffer:a}},{binding:5,resource:{buffer:v}}]})}function Js(e,t,n){let r=t.data,i=0,o=1,a=2,f=3,h=0,v=n.beginComputePass({label:"bloom Compute Pass"});v.setPipeline(r.compute_pipeline),v.setBindGroup(0,r.bind_group[h]),h+=1;let d=lr(0,r.bind_groups_textures[0]);v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1);for(let D=1;D<ue;D++)d=lr(D,r.bind_groups_textures[0]),v.setBindGroup(0,r.bind_group[h]),h+=1,v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1),v.setBindGroup(0,r.bind_group[h]),h+=1,v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1);v.setBindGroup(0,r.bind_group[h]),h+=1,d=lr(ue-1,r.bind_groups_textures[2]),v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1);for(let D=ue-2;D>=0;D--)d=lr(D,r.bind_groups_textures[2]),v.setBindGroup(0,r.bind_group[h]),h+=1,v.dispatchWorkgroups(d.width/8+1,d.height/4+1,1);v.end()}function lr(e,t){let n=t.size.width,r=t.size.height;for(let i=0;i<e;i++)n/=2,r/=2;return{width:n,height:r,depthOrArrayLayers:1}}function js(e,t){let{device:n}=e,r=t.data;Mi(t),r.bind_groups_textures.push(ne(n,"bloom downsampler image 0",e.viewport.width/2,e.viewport.height/2,ue,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),r.bind_groups_textures.push(ne(n,"bloom downsampler image 1",e.viewport.width/2,e.viewport.height/2,ue,"rgba16float",GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING)),r.bind_groups_textures.push(t.refs.bloom.data),xi(e,r,t)}function Mi(e){for(let t of e.data.bind_groups_textures)t.texture.destroy();for(let t of e.data.buffers)t.destroy();e.data.buffers.length=0,e.data.bind_groups_textures.length=0}var yi="struct DisplacementParameters{offset:vec2<f32>,scale:f32,};@group(0)@binding(0)var<uniform> uniforms:DisplacementParameters;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var colorSampler:sampler;@group(0)@binding(3)var noiseTexture:texture_2d<f32>;@group(0)@binding(4)var noiseSampler:sampler;@group(0)@binding(5)var displacementTexture:texture_2d<f32>;struct VertexIn{@builtin(vertex_index)vertexIndex:u32,};struct VertexOut{@builtin(position)position:vec4<f32>,@location(0)uv:vec2<f32>,};@vertex fn main_vertex(in:VertexIn)->VertexOut{const corners=array<vec2<f32>,4>(vec2<f32>(-1,-1),vec2<f32>(1,-1),vec2<f32>(-1,1),vec2<f32>(1,1),);let screenPosition=corners[in.vertexIndex];var out:VertexOut;out.position=vec4<f32>(screenPosition,0,1);out.uv=(0.5+0.5*screenPosition*vec2<f32>(1,-1));return out;}struct FragmentOut{@location(0)color:vec4<f32>,};@fragment fn main_fragment(in:VertexOut)->FragmentOut{let noiseTextureDimensions=vec2<f32>(textureDimensions(noiseTexture,0));let noiseUv=in.uv+uniforms.offset/noiseTextureDimensions;var noise=textureSample(noiseTexture,noiseSampler,noiseUv).rg;noise-=0.5;noise*=uniforms.scale/noiseTextureDimensions;let displacement=textureSample(displacementTexture,colorSampler,in.uv).r;noise*=displacement;let colorUv=in.uv+noise;var out:FragmentOut;out.color=textureSample(colorTexture,colorSampler,colorUv);return out;}";var hr=class{device;targetFormat;renderPipeline;colorSampler;noiseSampler;displacementParametersBuffer;renderBundle=null;colorTextureView;noiseMapTextureView;displacementTextureView;constructor(t){this.device=t.device,this.targetFormat=t.targetFormat,this.colorTextureView=t.colorTextureView,this.noiseMapTextureView=t.noiseMapTextureView,this.displacementTextureView=t.displacementTextureView,this.displacementParametersBuffer=t.displacementParametersBuffer;let n=this.device.createShaderModule({label:"DisplacementComposition shader module",code:yi});this.renderPipeline=this.device.createRenderPipeline({label:"DisplacementComposition renderpipeline",layout:"auto",vertex:{module:n,entryPoint:"main_vertex"},fragment:{module:n,entryPoint:"main_fragment",targets:[{format:t.targetFormat}]},primitive:{cullMode:"none",topology:"triangle-strip"}}),this.noiseSampler=this.device.createSampler({label:"DisplacementComposition noisesampler",addressModeU:"repeat",addressModeV:"repeat",addressModeW:"repeat",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"}),this.colorSampler=this.device.createSampler({label:"DisplacementComposition colorSampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"linear",minFilter:"linear",mipmapFilter:"linear"})}getRenderBundle(){return this.renderBundle||(this.renderBundle=this.buildRenderBundle()),this.renderBundle}destroy(){}setColorTextureView(t){this.colorTextureView=t,this.renderBundle=null}setNoiseMapTextureView(t){this.noiseMapTextureView=t,this.renderBundle=null}setDisplacementTextureView(t){this.displacementTextureView=t,this.renderBundle=null}buildRenderBundle(){let t=this.device.createBindGroup({label:"DisplacementComposition bindgroup 0",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.displacementParametersBuffer.bufferGpu}},{binding:1,resource:this.colorTextureView},{binding:2,resource:this.colorSampler},{binding:3,resource:this.noiseMapTextureView},{binding:4,resource:this.noiseSampler},{binding:5,resource:this.displacementTextureView}]}),n=this.device.createRenderBundleEncoder({label:"DisplacementComposition renderbundle encoder",colorFormats:[this.targetFormat]});return n.setPipeline(this.renderPipeline),n.setBindGroup(0,t),n.draw(4),n.finish({label:"DisplacementComposition renderbundle"})}};var vr=class{device;bufferGpu;needsUpdate=!0;constructor(t){this.device=t.device,this.bufferGpu=this.device.createBuffer({label:"DisplacementParametersBuffer buffer",size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.setParameters(t.initialParameters)}setParameters(t){this.device.queue.writeBuffer(this.bufferGpu,0,new Float32Array([t.offsetX,t.offsetY,t.scale]))}destroy(){this.bufferGpu.destroy()}};var bi="struct TransformData{mvpMatrix:mat4x4<f32>,};@group(0)@binding(0)var<uniform> transformUBO:TransformData;struct VertexIn{@location(0)position:vec2<f32>,};struct VertexOut{@builtin(position)position:vec4<f32>,};@vertex fn main_vertex(in:VertexIn)->VertexOut{var output:VertexOut;output.position=transformUBO.mvpMatrix*vec4<f32>(in.position,0.0,1.0);return output;}struct FragmentOut{@location(0)color:vec4<f32>,};@fragment fn main_fragment()->FragmentOut{var out:FragmentOut;out.color=vec4<f32>(1.0,1.0,1.0,1.0);return out;}";function tu(e,t){return class extends e{constructor(...n){super(...n),t(this)}}}var eu=tu(Array,e=>e.fill(0)),_t=1e-6;function ru(e){function t(G=0,q=0){let k=new e(2);return G!==void 0&&(k[0]=G,q!==void 0&&(k[1]=q)),k}let n=t;function r(G,q,k){let u=k??new e(2);return u[0]=G,u[1]=q,u}function i(G,q){let k=q??new e(2);return k[0]=Math.ceil(G[0]),k[1]=Math.ceil(G[1]),k}function o(G,q){let k=q??new e(2);return k[0]=Math.floor(G[0]),k[1]=Math.floor(G[1]),k}function a(G,q){let k=q??new e(2);return k[0]=Math.round(G[0]),k[1]=Math.round(G[1]),k}function f(G,q=0,k=1,u){let B=u??new e(2);return B[0]=Math.min(k,Math.max(q,G[0])),B[1]=Math.min(k,Math.max(q,G[1])),B}function h(G,q,k){let u=k??new e(2);return u[0]=G[0]+q[0],u[1]=G[1]+q[1],u}function v(G,q,k,u){let B=u??new e(2);return B[0]=G[0]+q[0]*k,B[1]=G[1]+q[1]*k,B}function d(G,q){let k=G[0],u=G[1],B=q[0],M=q[1],x=Math.sqrt(k*k+u*u),g=Math.sqrt(B*B+M*M),S=x*g,L=S&&rt(G,q)/S;return Math.acos(L)}function D(G,q,k){let u=k??new e(2);return u[0]=G[0]-q[0],u[1]=G[1]-q[1],u}let m=D;function C(G,q){return Math.abs(G[0]-q[0])<_t&&Math.abs(G[1]-q[1])<_t}function R(G,q){return G[0]===q[0]&&G[1]===q[1]}function N(G,q,k,u){let B=u??new e(2);return B[0]=G[0]+k*(q[0]-G[0]),B[1]=G[1]+k*(q[1]-G[1]),B}function V(G,q,k,u){let B=u??new e(2);return B[0]=G[0]+k[0]*(q[0]-G[0]),B[1]=G[1]+k[1]*(q[1]-G[1]),B}function Y(G,q,k){let u=k??new e(2);return u[0]=Math.max(G[0],q[0]),u[1]=Math.max(G[1],q[1]),u}function K(G,q,k){let u=k??new e(2);return u[0]=Math.min(G[0],q[0]),u[1]=Math.min(G[1],q[1]),u}function Q(G,q,k){let u=k??new e(2);return u[0]=G[0]*q,u[1]=G[1]*q,u}let j=Q;function Z(G,q,k){let u=k??new e(2);return u[0]=G[0]/q,u[1]=G[1]/q,u}function W(G,q){let k=q??new e(2);return k[0]=1/G[0],k[1]=1/G[1],k}let st=W;function et(G,q,k){let u=k??new e(3),B=G[0]*q[1]-G[1]*q[0];return u[0]=0,u[1]=0,u[2]=B,u}function rt(G,q){return G[0]*q[0]+G[1]*q[1]}function F(G){let q=G[0],k=G[1];return Math.sqrt(q*q+k*k)}let s=F;function p(G){let q=G[0],k=G[1];return q*q+k*k}let _=p;function y(G,q){let k=G[0]-q[0],u=G[1]-q[1];return Math.sqrt(k*k+u*u)}let T=y;function E(G,q){let k=G[0]-q[0],u=G[1]-q[1];return k*k+u*u}let O=E;function P(G,q){let k=q??new e(2),u=G[0],B=G[1],M=u*u+B*B,x=M>0?1/Math.sqrt(M):1;return k[0]=u*x,k[1]=B*x,k}function l(G,q){let k=q??new e(2);return k[0]=-G[0],k[1]=-G[1],k}function U(G,q){let k=q??new e(2);return k[0]=G[0],k[1]=G[1],k}let ot=U;function at(G,q,k){let u=k??new e(2);return u[0]=G[0]*q[0],u[1]=G[1]*q[1],u}let ut=at;function ft(G,q,k){let u=k??new e(2);return u[0]=G[0]/q[0],u[1]=G[1]/q[1],u}let Mt=ft;function vt(G=1,q){let k=q??new e(2),u=Math.random()*2*Math.PI;return k[0]=Math.cos(u)*G,k[1]=Math.sin(u)*G,k}function X(G){let q=G??new e(2);return q[0]=0,q[1]=0,q}function $(G,q,k){let u=k??new e(2),B=G[0],M=G[1];return u[0]=B*q[0]+M*q[4]+q[12],u[1]=B*q[1]+M*q[5]+q[13],u}function A(G,q,k){let u=k??new e(2),B=G[0],M=G[1];return u[0]=q[0]*B+q[4]*M+q[8],u[1]=q[1]*B+q[5]*M+q[9],u}function c(G,q,k,u){let B=u??new e(2),M=G[0]-q[0],x=G[1]-q[1],g=Math.sin(k),S=Math.cos(k);return B[0]=M*S-x*g+q[0],B[1]=M*g+x*S+q[1],B}function b(G,q,k){let u=k??new e(2);return P(G,u),Q(u,q,u)}function w(G,q,k){let u=k??new e(2);return F(G)>q?b(G,q,u):U(G,u)}function I(G,q,k){let u=k??new e(2);return N(G,q,.5,u)}return{create:t,fromValues:n,set:r,ceil:i,floor:o,round:a,clamp:f,add:h,addScaled:v,angle:d,subtract:D,sub:m,equalsApproximately:C,equals:R,lerp:N,lerpV:V,max:Y,min:K,mulScalar:Q,scale:j,divScalar:Z,inverse:W,invert:st,cross:et,dot:rt,length:F,len:s,lengthSq:p,lenSq:_,distance:y,dist:T,distanceSq:E,distSq:O,normalize:P,negate:l,copy:U,clone:ot,multiply:at,mul:ut,divide:ft,div:Mt,random:vt,zero:X,transformMat4:$,transformMat3:A,rotate:c,setLength:b,truncate:w,midpoint:I}}var _i=new Map;function Fi(e){let t=_i.get(e);return t||(t=ru(e),_i.set(e,t)),t}function nu(e){function t(g,S,L){let z=new e(3);return g!==void 0&&(z[0]=g,S!==void 0&&(z[1]=S,L!==void 0&&(z[2]=L))),z}let n=t;function r(g,S,L,z){let H=z??new e(3);return H[0]=g,H[1]=S,H[2]=L,H}function i(g,S){let L=S??new e(3);return L[0]=Math.ceil(g[0]),L[1]=Math.ceil(g[1]),L[2]=Math.ceil(g[2]),L}function o(g,S){let L=S??new e(3);return L[0]=Math.floor(g[0]),L[1]=Math.floor(g[1]),L[2]=Math.floor(g[2]),L}function a(g,S){let L=S??new e(3);return L[0]=Math.round(g[0]),L[1]=Math.round(g[1]),L[2]=Math.round(g[2]),L}function f(g,S=0,L=1,z){let H=z??new e(3);return H[0]=Math.min(L,Math.max(S,g[0])),H[1]=Math.min(L,Math.max(S,g[1])),H[2]=Math.min(L,Math.max(S,g[2])),H}function h(g,S,L){let z=L??new e(3);return z[0]=g[0]+S[0],z[1]=g[1]+S[1],z[2]=g[2]+S[2],z}function v(g,S,L,z){let H=z??new e(3);return H[0]=g[0]+S[0]*L,H[1]=g[1]+S[1]*L,H[2]=g[2]+S[2]*L,H}function d(g,S){let L=g[0],z=g[1],H=g[2],J=S[0],tt=S[1],ct=S[2],nt=Math.sqrt(L*L+z*z+H*H),it=Math.sqrt(J*J+tt*tt+ct*ct),pt=nt*it,ht=pt&&rt(g,S)/pt;return Math.acos(ht)}function D(g,S,L){let z=L??new e(3);return z[0]=g[0]-S[0],z[1]=g[1]-S[1],z[2]=g[2]-S[2],z}let m=D;function C(g,S){return Math.abs(g[0]-S[0])<_t&&Math.abs(g[1]-S[1])<_t&&Math.abs(g[2]-S[2])<_t}function R(g,S){return g[0]===S[0]&&g[1]===S[1]&&g[2]===S[2]}function N(g,S,L,z){let H=z??new e(3);return H[0]=g[0]+L*(S[0]-g[0]),H[1]=g[1]+L*(S[1]-g[1]),H[2]=g[2]+L*(S[2]-g[2]),H}function V(g,S,L,z){let H=z??new e(3);return H[0]=g[0]+L[0]*(S[0]-g[0]),H[1]=g[1]+L[1]*(S[1]-g[1]),H[2]=g[2]+L[2]*(S[2]-g[2]),H}function Y(g,S,L){let z=L??new e(3);return z[0]=Math.max(g[0],S[0]),z[1]=Math.max(g[1],S[1]),z[2]=Math.max(g[2],S[2]),z}function K(g,S,L){let z=L??new e(3);return z[0]=Math.min(g[0],S[0]),z[1]=Math.min(g[1],S[1]),z[2]=Math.min(g[2],S[2]),z}function Q(g,S,L){let z=L??new e(3);return z[0]=g[0]*S,z[1]=g[1]*S,z[2]=g[2]*S,z}let j=Q;function Z(g,S,L){let z=L??new e(3);return z[0]=g[0]/S,z[1]=g[1]/S,z[2]=g[2]/S,z}function W(g,S){let L=S??new e(3);return L[0]=1/g[0],L[1]=1/g[1],L[2]=1/g[2],L}let st=W;function et(g,S,L){let z=L??new e(3),H=g[2]*S[0]-g[0]*S[2],J=g[0]*S[1]-g[1]*S[0];return z[0]=g[1]*S[2]-g[2]*S[1],z[1]=H,z[2]=J,z}function rt(g,S){return g[0]*S[0]+g[1]*S[1]+g[2]*S[2]}function F(g){let S=g[0],L=g[1],z=g[2];return Math.sqrt(S*S+L*L+z*z)}let s=F;function p(g){let S=g[0],L=g[1],z=g[2];return S*S+L*L+z*z}let _=p;function y(g,S){let L=g[0]-S[0],z=g[1]-S[1],H=g[2]-S[2];return Math.sqrt(L*L+z*z+H*H)}let T=y;function E(g,S){let L=g[0]-S[0],z=g[1]-S[1],H=g[2]-S[2];return L*L+z*z+H*H}let O=E;function P(g,S){let L=S??new e(3),z=g[0],H=g[1],J=g[2],tt=z*z+H*H+J*J,ct=tt>0?1/Math.sqrt(tt):1;return L[0]=z*ct,L[1]=H*ct,L[2]=J*ct,L}function l(g,S){let L=S??new e(3);return L[0]=-g[0],L[1]=-g[1],L[2]=-g[2],L}function U(g,S){let L=S??new e(3);return L[0]=g[0],L[1]=g[1],L[2]=g[2],L}let ot=U;function at(g,S,L){let z=L??new e(3);return z[0]=g[0]*S[0],z[1]=g[1]*S[1],z[2]=g[2]*S[2],z}let ut=at;function ft(g,S,L){let z=L??new e(3);return z[0]=g[0]/S[0],z[1]=g[1]/S[1],z[2]=g[2]/S[2],z}let Mt=ft;function vt(g=1,S){let L=S??new e(3),z=Math.random()*2*Math.PI,H=Math.random()*2-1,J=Math.sqrt(1-H*H)*g;return L[0]=Math.cos(z)*J,L[1]=Math.sin(z)*J,L[2]=H*g,L}function X(g){let S=g??new e(3);return S[0]=0,S[1]=0,S[2]=0,S}function $(g,S,L){let z=L??new e(3),H=g[0],J=g[1],tt=g[2],ct=S[3]*H+S[7]*J+S[11]*tt+S[15]||1;return z[0]=(S[0]*H+S[4]*J+S[8]*tt+S[12])/ct,z[1]=(S[1]*H+S[5]*J+S[9]*tt+S[13])/ct,z[2]=(S[2]*H+S[6]*J+S[10]*tt+S[14])/ct,z}function A(g,S,L){let z=L??new e(3),H=g[0],J=g[1],tt=g[2];return z[0]=H*S[0]+J*S[4]+tt*S[8],z[1]=H*S[1]+J*S[5]+tt*S[9],z[2]=H*S[2]+J*S[6]+tt*S[10],z}function c(g,S,L){let z=L??new e(3),H=g[0],J=g[1],tt=g[2];return z[0]=H*S[0]+J*S[4]+tt*S[8],z[1]=H*S[1]+J*S[5]+tt*S[9],z[2]=H*S[2]+J*S[6]+tt*S[10],z}function b(g,S,L){let z=L??new e(3),H=S[0],J=S[1],tt=S[2],ct=S[3]*2,nt=g[0],it=g[1],pt=g[2],ht=J*pt-tt*it,lt=tt*nt-H*pt,gt=H*it-J*nt;return z[0]=nt+ht*ct+(J*gt-tt*lt)*2,z[1]=it+lt*ct+(tt*ht-H*gt)*2,z[2]=pt+gt*ct+(H*lt-J*ht)*2,z}function w(g,S){let L=S??new e(3);return L[0]=g[12],L[1]=g[13],L[2]=g[14],L}function I(g,S,L){let z=L??new e(3),H=S*4;return z[0]=g[H+0],z[1]=g[H+1],z[2]=g[H+2],z}function G(g,S){let L=S??new e(3),z=g[0],H=g[1],J=g[2],tt=g[4],ct=g[5],nt=g[6],it=g[8],pt=g[9],ht=g[10];return L[0]=Math.sqrt(z*z+H*H+J*J),L[1]=Math.sqrt(tt*tt+ct*ct+nt*nt),L[2]=Math.sqrt(it*it+pt*pt+ht*ht),L}function q(g,S,L,z){let H=z??new e(3),J=[],tt=[];return J[0]=g[0]-S[0],J[1]=g[1]-S[1],J[2]=g[2]-S[2],tt[0]=J[0],tt[1]=J[1]*Math.cos(L)-J[2]*Math.sin(L),tt[2]=J[1]*Math.sin(L)+J[2]*Math.cos(L),H[0]=tt[0]+S[0],H[1]=tt[1]+S[1],H[2]=tt[2]+S[2],H}function k(g,S,L,z){let H=z??new e(3),J=[],tt=[];return J[0]=g[0]-S[0],J[1]=g[1]-S[1],J[2]=g[2]-S[2],tt[0]=J[2]*Math.sin(L)+J[0]*Math.cos(L),tt[1]=J[1],tt[2]=J[2]*Math.cos(L)-J[0]*Math.sin(L),H[0]=tt[0]+S[0],H[1]=tt[1]+S[1],H[2]=tt[2]+S[2],H}function u(g,S,L,z){let H=z??new e(3),J=[],tt=[];return J[0]=g[0]-S[0],J[1]=g[1]-S[1],J[2]=g[2]-S[2],tt[0]=J[0]*Math.cos(L)-J[1]*Math.sin(L),tt[1]=J[0]*Math.sin(L)+J[1]*Math.cos(L),tt[2]=J[2],H[0]=tt[0]+S[0],H[1]=tt[1]+S[1],H[2]=tt[2]+S[2],H}function B(g,S,L){let z=L??new e(3);return P(g,z),Q(z,S,z)}function M(g,S,L){let z=L??new e(3);return F(g)>S?B(g,S,z):U(g,z)}function x(g,S,L){let z=L??new e(3);return N(g,S,.5,z)}return{create:t,fromValues:n,set:r,ceil:i,floor:o,round:a,clamp:f,add:h,addScaled:v,angle:d,subtract:D,sub:m,equalsApproximately:C,equals:R,lerp:N,lerpV:V,max:Y,min:K,mulScalar:Q,scale:j,divScalar:Z,inverse:W,invert:st,cross:et,dot:rt,length:F,len:s,lengthSq:p,lenSq:_,distance:y,dist:T,distanceSq:E,distSq:O,normalize:P,negate:l,copy:U,clone:ot,multiply:at,mul:ut,divide:ft,div:Mt,random:vt,zero:X,transformMat4:$,transformMat4Upper3x3:A,transformMat3:c,transformQuat:b,getTranslation:w,getAxis:I,getScaling:G,rotateX:q,rotateY:k,rotateZ:u,setLength:B,truncate:M,midpoint:x}}var Si=new Map;function pr(e){let t=Si.get(e);return t||(t=nu(e),Si.set(e,t)),t}function iu(e){let t=Fi(e),n=pr(e);function r(c,b,w,I,G,q,k,u,B){let M=new e(12);return M[3]=0,M[7]=0,M[11]=0,c!==void 0&&(M[0]=c,b!==void 0&&(M[1]=b,w!==void 0&&(M[2]=w,I!==void 0&&(M[4]=I,G!==void 0&&(M[5]=G,q!==void 0&&(M[6]=q,k!==void 0&&(M[8]=k,u!==void 0&&(M[9]=u,B!==void 0&&(M[10]=B))))))))),M}function i(c,b,w,I,G,q,k,u,B,M){let x=M??new e(12);return x[0]=c,x[1]=b,x[2]=w,x[3]=0,x[4]=I,x[5]=G,x[6]=q,x[7]=0,x[8]=k,x[9]=u,x[10]=B,x[11]=0,x}function o(c,b){let w=b??new e(12);return w[0]=c[0],w[1]=c[1],w[2]=c[2],w[3]=0,w[4]=c[4],w[5]=c[5],w[6]=c[6],w[7]=0,w[8]=c[8],w[9]=c[9],w[10]=c[10],w[11]=0,w}function a(c,b){let w=b??new e(12),I=c[0],G=c[1],q=c[2],k=c[3],u=I+I,B=G+G,M=q+q,x=I*u,g=G*u,S=G*B,L=q*u,z=q*B,H=q*M,J=k*u,tt=k*B,ct=k*M;return w[0]=1-S-H,w[1]=g+ct,w[2]=L-tt,w[3]=0,w[4]=g-ct,w[5]=1-x-H,w[6]=z+J,w[7]=0,w[8]=L+tt,w[9]=z-J,w[10]=1-x-S,w[11]=0,w}function f(c,b){let w=b??new e(12);return w[0]=-c[0],w[1]=-c[1],w[2]=-c[2],w[4]=-c[4],w[5]=-c[5],w[6]=-c[6],w[8]=-c[8],w[9]=-c[9],w[10]=-c[10],w}function h(c,b,w){let I=w??new e(12);return I[0]=c[0]*b,I[1]=c[1]*b,I[2]=c[2]*b,I[4]=c[4]*b,I[5]=c[5]*b,I[6]=c[6]*b,I[8]=c[8]*b,I[9]=c[9]*b,I[10]=c[10]*b,I}let v=h;function d(c,b,w){let I=w??new e(12);return I[0]=c[0]+b[0],I[1]=c[1]+b[1],I[2]=c[2]+b[2],I[4]=c[4]+b[4],I[5]=c[5]+b[5],I[6]=c[6]+b[6],I[8]=c[8]+b[8],I[9]=c[9]+b[9],I[10]=c[10]+b[10],I}function D(c,b){let w=b??new e(12);return w[0]=c[0],w[1]=c[1],w[2]=c[2],w[4]=c[4],w[5]=c[5],w[6]=c[6],w[8]=c[8],w[9]=c[9],w[10]=c[10],w}let m=D;function C(c,b){return Math.abs(c[0]-b[0])<_t&&Math.abs(c[1]-b[1])<_t&&Math.abs(c[2]-b[2])<_t&&Math.abs(c[4]-b[4])<_t&&Math.abs(c[5]-b[5])<_t&&Math.abs(c[6]-b[6])<_t&&Math.abs(c[8]-b[8])<_t&&Math.abs(c[9]-b[9])<_t&&Math.abs(c[10]-b[10])<_t}function R(c,b){return c[0]===b[0]&&c[1]===b[1]&&c[2]===b[2]&&c[4]===b[4]&&c[5]===b[5]&&c[6]===b[6]&&c[8]===b[8]&&c[9]===b[9]&&c[10]===b[10]}function N(c){let b=c??new e(12);return b[0]=1,b[1]=0,b[2]=0,b[4]=0,b[5]=1,b[6]=0,b[8]=0,b[9]=0,b[10]=1,b}function V(c,b){let w=b??new e(12);if(w===c){let S;return S=c[1],c[1]=c[4],c[4]=S,S=c[2],c[2]=c[8],c[8]=S,S=c[6],c[6]=c[9],c[9]=S,w}let I=c[0],G=c[1],q=c[2],k=c[4],u=c[5],B=c[6],M=c[8],x=c[9],g=c[10];return w[0]=I,w[1]=k,w[2]=M,w[4]=G,w[5]=u,w[6]=x,w[8]=q,w[9]=B,w[10]=g,w}function Y(c,b){let w=b??new e(12),I=c[0],G=c[1],q=c[2],k=c[4],u=c[5],B=c[6],M=c[8],x=c[9],g=c[10],S=g*u-B*x,L=-g*k+B*M,z=x*k-u*M,H=1/(I*S+G*L+q*z);return w[0]=S*H,w[1]=(-g*G+q*x)*H,w[2]=(B*G-q*u)*H,w[4]=L*H,w[5]=(g*I-q*M)*H,w[6]=(-B*I+q*k)*H,w[8]=z*H,w[9]=(-x*I+G*M)*H,w[10]=(u*I-G*k)*H,w}function K(c){let b=c[0],w=c[1],I=c[2],G=c[4],q=c[5],k=c[6],u=c[8],B=c[9],M=c[10];return b*(q*M-B*k)-G*(w*M-B*I)+u*(w*k-q*I)}let Q=Y;function j(c,b,w){let I=w??new e(12),G=c[0],q=c[1],k=c[2],u=c[4],B=c[5],M=c[6],x=c[8],g=c[9],S=c[10],L=b[0],z=b[1],H=b[2],J=b[4],tt=b[5],ct=b[6],nt=b[8],it=b[9],pt=b[10];return I[0]=G*L+u*z+x*H,I[1]=q*L+B*z+g*H,I[2]=k*L+M*z+S*H,I[4]=G*J+u*tt+x*ct,I[5]=q*J+B*tt+g*ct,I[6]=k*J+M*tt+S*ct,I[8]=G*nt+u*it+x*pt,I[9]=q*nt+B*it+g*pt,I[10]=k*nt+M*it+S*pt,I}let Z=j;function W(c,b,w){let I=w??N();return c!==I&&(I[0]=c[0],I[1]=c[1],I[2]=c[2],I[4]=c[4],I[5]=c[5],I[6]=c[6]),I[8]=b[0],I[9]=b[1],I[10]=1,I}function st(c,b){let w=b??t.create();return w[0]=c[8],w[1]=c[9],w}function et(c,b,w){let I=w??t.create(),G=b*4;return I[0]=c[G+0],I[1]=c[G+1],I}function rt(c,b,w,I){let G=I===c?c:D(c,I),q=w*4;return G[q+0]=b[0],G[q+1]=b[1],G}function F(c,b){let w=b??t.create(),I=c[0],G=c[1],q=c[4],k=c[5];return w[0]=Math.sqrt(I*I+G*G),w[1]=Math.sqrt(q*q+k*k),w}function s(c,b){let w=b??n.create(),I=c[0],G=c[1],q=c[2],k=c[4],u=c[5],B=c[6],M=c[8],x=c[9],g=c[10];return w[0]=Math.sqrt(I*I+G*G+q*q),w[1]=Math.sqrt(k*k+u*u+B*B),w[2]=Math.sqrt(M*M+x*x+g*g),w}function p(c,b){let w=b??new e(12);return w[0]=1,w[1]=0,w[2]=0,w[4]=0,w[5]=1,w[6]=0,w[8]=c[0],w[9]=c[1],w[10]=1,w}function _(c,b,w){let I=w??new e(12),G=b[0],q=b[1],k=c[0],u=c[1],B=c[2],M=c[4],x=c[5],g=c[6],S=c[8],L=c[9],z=c[10];return c!==I&&(I[0]=k,I[1]=u,I[2]=B,I[4]=M,I[5]=x,I[6]=g),I[8]=k*G+M*q+S,I[9]=u*G+x*q+L,I[10]=B*G+g*q+z,I}function y(c,b){let w=b??new e(12),I=Math.cos(c),G=Math.sin(c);return w[0]=I,w[1]=G,w[2]=0,w[4]=-G,w[5]=I,w[6]=0,w[8]=0,w[9]=0,w[10]=1,w}function T(c,b,w){let I=w??new e(12),G=c[0],q=c[1],k=c[2],u=c[4],B=c[5],M=c[6],x=Math.cos(b),g=Math.sin(b);return I[0]=x*G+g*u,I[1]=x*q+g*B,I[2]=x*k+g*M,I[4]=x*u-g*G,I[5]=x*B-g*q,I[6]=x*M-g*k,c!==I&&(I[8]=c[8],I[9]=c[9],I[10]=c[10]),I}function E(c,b){let w=b??new e(12),I=Math.cos(c),G=Math.sin(c);return w[0]=1,w[1]=0,w[2]=0,w[4]=0,w[5]=I,w[6]=G,w[8]=0,w[9]=-G,w[10]=I,w}function O(c,b,w){let I=w??new e(12),G=c[4],q=c[5],k=c[6],u=c[8],B=c[9],M=c[10],x=Math.cos(b),g=Math.sin(b);return I[4]=x*G+g*u,I[5]=x*q+g*B,I[6]=x*k+g*M,I[8]=x*u-g*G,I[9]=x*B-g*q,I[10]=x*M-g*k,c!==I&&(I[0]=c[0],I[1]=c[1],I[2]=c[2]),I}function P(c,b){let w=b??new e(12),I=Math.cos(c),G=Math.sin(c);return w[0]=I,w[1]=0,w[2]=-G,w[4]=0,w[5]=1,w[6]=0,w[8]=G,w[9]=0,w[10]=I,w}function l(c,b,w){let I=w??new e(12),G=c[0],q=c[1],k=c[2],u=c[8],B=c[9],M=c[10],x=Math.cos(b),g=Math.sin(b);return I[0]=x*G-g*u,I[1]=x*q-g*B,I[2]=x*k-g*M,I[8]=x*u+g*G,I[9]=x*B+g*q,I[10]=x*M+g*k,c!==I&&(I[4]=c[4],I[5]=c[5],I[6]=c[6]),I}let U=y,ot=T;function at(c,b){let w=b??new e(12);return w[0]=c[0],w[1]=0,w[2]=0,w[4]=0,w[5]=c[1],w[6]=0,w[8]=0,w[9]=0,w[10]=1,w}function ut(c,b,w){let I=w??new e(12),G=b[0],q=b[1];return I[0]=G*c[0],I[1]=G*c[1],I[2]=G*c[2],I[4]=q*c[4],I[5]=q*c[5],I[6]=q*c[6],c!==I&&(I[8]=c[8],I[9]=c[9],I[10]=c[10]),I}function ft(c,b){let w=b??new e(12);return w[0]=c[0],w[1]=0,w[2]=0,w[4]=0,w[5]=c[1],w[6]=0,w[8]=0,w[9]=0,w[10]=c[2],w}function Mt(c,b,w){let I=w??new e(12),G=b[0],q=b[1],k=b[2];return I[0]=G*c[0],I[1]=G*c[1],I[2]=G*c[2],I[4]=q*c[4],I[5]=q*c[5],I[6]=q*c[6],I[8]=k*c[8],I[9]=k*c[9],I[10]=k*c[10],I}function vt(c,b){let w=b??new e(12);return w[0]=c,w[1]=0,w[2]=0,w[4]=0,w[5]=c,w[6]=0,w[8]=0,w[9]=0,w[10]=1,w}function X(c,b,w){let I=w??new e(12);return I[0]=b*c[0],I[1]=b*c[1],I[2]=b*c[2],I[4]=b*c[4],I[5]=b*c[5],I[6]=b*c[6],c!==I&&(I[8]=c[8],I[9]=c[9],I[10]=c[10]),I}function $(c,b){let w=b??new e(12);return w[0]=c,w[1]=0,w[2]=0,w[4]=0,w[5]=c,w[6]=0,w[8]=0,w[9]=0,w[10]=c,w}function A(c,b,w){let I=w??new e(12);return I[0]=b*c[0],I[1]=b*c[1],I[2]=b*c[2],I[4]=b*c[4],I[5]=b*c[5],I[6]=b*c[6],I[8]=b*c[8],I[9]=b*c[9],I[10]=b*c[10],I}return{add:d,clone:m,copy:D,create:r,determinant:K,equals:R,equalsApproximately:C,fromMat4:o,fromQuat:a,get3DScaling:s,getAxis:et,getScaling:F,getTranslation:st,identity:N,inverse:Y,invert:Q,mul:Z,mulScalar:v,multiply:j,multiplyScalar:h,negate:f,rotate:T,rotateX:O,rotateY:l,rotateZ:ot,rotation:y,rotationX:E,rotationY:P,rotationZ:U,scale:ut,scale3D:Mt,scaling:at,scaling3D:ft,set:i,setAxis:rt,setTranslation:W,translate:_,translation:p,transpose:V,uniformScale:X,uniformScale3D:A,uniformScaling:vt,uniformScaling3D:$}}var Ti=new Map;function ou(e){let t=Ti.get(e);return t||(t=iu(e),Ti.set(e,t)),t}function au(e){let t=pr(e);function n(u,B,M,x,g,S,L,z,H,J,tt,ct,nt,it,pt,ht){let lt=new e(16);return u!==void 0&&(lt[0]=u,B!==void 0&&(lt[1]=B,M!==void 0&&(lt[2]=M,x!==void 0&&(lt[3]=x,g!==void 0&&(lt[4]=g,S!==void 0&&(lt[5]=S,L!==void 0&&(lt[6]=L,z!==void 0&&(lt[7]=z,H!==void 0&&(lt[8]=H,J!==void 0&&(lt[9]=J,tt!==void 0&&(lt[10]=tt,ct!==void 0&&(lt[11]=ct,nt!==void 0&&(lt[12]=nt,it!==void 0&&(lt[13]=it,pt!==void 0&&(lt[14]=pt,ht!==void 0&&(lt[15]=ht)))))))))))))))),lt}function r(u,B,M,x,g,S,L,z,H,J,tt,ct,nt,it,pt,ht,lt){let gt=lt??new e(16);return gt[0]=u,gt[1]=B,gt[2]=M,gt[3]=x,gt[4]=g,gt[5]=S,gt[6]=L,gt[7]=z,gt[8]=H,gt[9]=J,gt[10]=tt,gt[11]=ct,gt[12]=nt,gt[13]=it,gt[14]=pt,gt[15]=ht,gt}function i(u,B){let M=B??new e(16);return M[0]=u[0],M[1]=u[1],M[2]=u[2],M[3]=0,M[4]=u[4],M[5]=u[5],M[6]=u[6],M[7]=0,M[8]=u[8],M[9]=u[9],M[10]=u[10],M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function o(u,B){let M=B??new e(16),x=u[0],g=u[1],S=u[2],L=u[3],z=x+x,H=g+g,J=S+S,tt=x*z,ct=g*z,nt=g*H,it=S*z,pt=S*H,ht=S*J,lt=L*z,gt=L*H,wt=L*J;return M[0]=1-nt-ht,M[1]=ct+wt,M[2]=it-gt,M[3]=0,M[4]=ct-wt,M[5]=1-tt-ht,M[6]=pt+lt,M[7]=0,M[8]=it+gt,M[9]=pt-lt,M[10]=1-tt-nt,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function a(u,B){let M=B??new e(16);return M[0]=-u[0],M[1]=-u[1],M[2]=-u[2],M[3]=-u[3],M[4]=-u[4],M[5]=-u[5],M[6]=-u[6],M[7]=-u[7],M[8]=-u[8],M[9]=-u[9],M[10]=-u[10],M[11]=-u[11],M[12]=-u[12],M[13]=-u[13],M[14]=-u[14],M[15]=-u[15],M}function f(u,B,M){let x=M??new e(16);return x[0]=u[0]+B[0],x[1]=u[1]+B[1],x[2]=u[2]+B[2],x[3]=u[3]+B[3],x[4]=u[4]+B[4],x[5]=u[5]+B[5],x[6]=u[6]+B[6],x[7]=u[7]+B[7],x[8]=u[8]+B[8],x[9]=u[9]+B[9],x[10]=u[10]+B[10],x[11]=u[11]+B[11],x[12]=u[12]+B[12],x[13]=u[13]+B[13],x[14]=u[14]+B[14],x[15]=u[15]+B[15],x}function h(u,B,M){let x=M??new e(16);return x[0]=u[0]*B,x[1]=u[1]*B,x[2]=u[2]*B,x[3]=u[3]*B,x[4]=u[4]*B,x[5]=u[5]*B,x[6]=u[6]*B,x[7]=u[7]*B,x[8]=u[8]*B,x[9]=u[9]*B,x[10]=u[10]*B,x[11]=u[11]*B,x[12]=u[12]*B,x[13]=u[13]*B,x[14]=u[14]*B,x[15]=u[15]*B,x}let v=h;function d(u,B){let M=B??new e(16);return M[0]=u[0],M[1]=u[1],M[2]=u[2],M[3]=u[3],M[4]=u[4],M[5]=u[5],M[6]=u[6],M[7]=u[7],M[8]=u[8],M[9]=u[9],M[10]=u[10],M[11]=u[11],M[12]=u[12],M[13]=u[13],M[14]=u[14],M[15]=u[15],M}let D=d;function m(u,B){return Math.abs(u[0]-B[0])<_t&&Math.abs(u[1]-B[1])<_t&&Math.abs(u[2]-B[2])<_t&&Math.abs(u[3]-B[3])<_t&&Math.abs(u[4]-B[4])<_t&&Math.abs(u[5]-B[5])<_t&&Math.abs(u[6]-B[6])<_t&&Math.abs(u[7]-B[7])<_t&&Math.abs(u[8]-B[8])<_t&&Math.abs(u[9]-B[9])<_t&&Math.abs(u[10]-B[10])<_t&&Math.abs(u[11]-B[11])<_t&&Math.abs(u[12]-B[12])<_t&&Math.abs(u[13]-B[13])<_t&&Math.abs(u[14]-B[14])<_t&&Math.abs(u[15]-B[15])<_t}function C(u,B){return u[0]===B[0]&&u[1]===B[1]&&u[2]===B[2]&&u[3]===B[3]&&u[4]===B[4]&&u[5]===B[5]&&u[6]===B[6]&&u[7]===B[7]&&u[8]===B[8]&&u[9]===B[9]&&u[10]===B[10]&&u[11]===B[11]&&u[12]===B[12]&&u[13]===B[13]&&u[14]===B[14]&&u[15]===B[15]}function R(u){let B=u??new e(16);return B[0]=1,B[1]=0,B[2]=0,B[3]=0,B[4]=0,B[5]=1,B[6]=0,B[7]=0,B[8]=0,B[9]=0,B[10]=1,B[11]=0,B[12]=0,B[13]=0,B[14]=0,B[15]=1,B}function N(u,B){let M=B??new e(16);if(M===u){let dt;return dt=u[1],u[1]=u[4],u[4]=dt,dt=u[2],u[2]=u[8],u[8]=dt,dt=u[3],u[3]=u[12],u[12]=dt,dt=u[6],u[6]=u[9],u[9]=dt,dt=u[7],u[7]=u[13],u[13]=dt,dt=u[11],u[11]=u[14],u[14]=dt,M}let x=u[0],g=u[1],S=u[2],L=u[3],z=u[4],H=u[5],J=u[6],tt=u[7],ct=u[8],nt=u[9],it=u[10],pt=u[11],ht=u[12],lt=u[13],gt=u[14],wt=u[15];return M[0]=x,M[1]=z,M[2]=ct,M[3]=ht,M[4]=g,M[5]=H,M[6]=nt,M[7]=lt,M[8]=S,M[9]=J,M[10]=it,M[11]=gt,M[12]=L,M[13]=tt,M[14]=pt,M[15]=wt,M}function V(u,B){let M=B??new e(16),x=u[0],g=u[1],S=u[2],L=u[3],z=u[4],H=u[5],J=u[6],tt=u[7],ct=u[8],nt=u[9],it=u[10],pt=u[11],ht=u[12],lt=u[13],gt=u[14],wt=u[15],dt=it*wt,mt=gt*pt,yt=J*wt,bt=gt*tt,Zt=J*pt,Bt=it*tt,Pt=S*wt,$t=gt*L,Dt=S*pt,Ft=it*L,Wt=S*tt,At=J*L,Ut=ct*lt,Kt=ht*nt,zt=z*lt,It=ht*H,jt=z*nt,Gt=ct*H,Rt=x*lt,Te=ht*g,Ot=x*nt,qt=ct*g,Be=x*H,Nt=z*g,Ct=dt*H+bt*nt+Zt*lt-(mt*H+yt*nt+Bt*lt),qe=mt*g+Pt*nt+Ft*lt-(dt*g+$t*nt+Dt*lt),Ne=yt*g+$t*H+Wt*lt-(bt*g+Pt*H+At*lt),Ve=Bt*g+Dt*H+At*nt-(Zt*g+Ft*H+Wt*nt),Ht=1/(x*Ct+z*qe+ct*Ne+ht*Ve);return M[0]=Ht*Ct,M[1]=Ht*qe,M[2]=Ht*Ne,M[3]=Ht*Ve,M[4]=Ht*(mt*z+yt*ct+Bt*ht-(dt*z+bt*ct+Zt*ht)),M[5]=Ht*(dt*x+$t*ct+Dt*ht-(mt*x+Pt*ct+Ft*ht)),M[6]=Ht*(bt*x+Pt*z+At*ht-(yt*x+$t*z+Wt*ht)),M[7]=Ht*(Zt*x+Ft*z+Wt*ct-(Bt*x+Dt*z+At*ct)),M[8]=Ht*(Ut*tt+It*pt+jt*wt-(Kt*tt+zt*pt+Gt*wt)),M[9]=Ht*(Kt*L+Rt*pt+qt*wt-(Ut*L+Te*pt+Ot*wt)),M[10]=Ht*(zt*L+Te*tt+Be*wt-(It*L+Rt*tt+Nt*wt)),M[11]=Ht*(Gt*L+Ot*tt+Nt*pt-(jt*L+qt*tt+Be*pt)),M[12]=Ht*(zt*it+Gt*gt+Kt*J-(jt*gt+Ut*J+It*it)),M[13]=Ht*(Ot*gt+Ut*S+Te*it-(Rt*it+qt*gt+Kt*S)),M[14]=Ht*(Rt*J+Nt*gt+It*S-(Be*gt+zt*S+Te*J)),M[15]=Ht*(Be*it+jt*S+qt*J-(Ot*J+Nt*it+Gt*S)),M}function Y(u){let B=u[0],M=u[1],x=u[2],g=u[3],S=u[4],L=u[5],z=u[6],H=u[7],J=u[8],tt=u[9],ct=u[10],nt=u[11],it=u[12],pt=u[13],ht=u[14],lt=u[15],gt=ct*lt,wt=ht*nt,dt=z*lt,mt=ht*H,yt=z*nt,bt=ct*H,Zt=x*lt,Bt=ht*g,Pt=x*nt,$t=ct*g,Dt=x*H,Ft=z*g,Wt=gt*L+mt*tt+yt*pt-(wt*L+dt*tt+bt*pt),At=wt*M+Zt*tt+$t*pt-(gt*M+Bt*tt+Pt*pt),Ut=dt*M+Bt*L+Dt*pt-(mt*M+Zt*L+Ft*pt),Kt=bt*M+Pt*L+Ft*tt-(yt*M+$t*L+Dt*tt);return B*Wt+S*At+J*Ut+it*Kt}let K=V;function Q(u,B,M){let x=M??new e(16),g=u[0],S=u[1],L=u[2],z=u[3],H=u[4],J=u[5],tt=u[6],ct=u[7],nt=u[8],it=u[9],pt=u[10],ht=u[11],lt=u[12],gt=u[13],wt=u[14],dt=u[15],mt=B[0],yt=B[1],bt=B[2],Zt=B[3],Bt=B[4],Pt=B[5],$t=B[6],Dt=B[7],Ft=B[8],Wt=B[9],At=B[10],Ut=B[11],Kt=B[12],zt=B[13],It=B[14],jt=B[15];return x[0]=g*mt+H*yt+nt*bt+lt*Zt,x[1]=S*mt+J*yt+it*bt+gt*Zt,x[2]=L*mt+tt*yt+pt*bt+wt*Zt,x[3]=z*mt+ct*yt+ht*bt+dt*Zt,x[4]=g*Bt+H*Pt+nt*$t+lt*Dt,x[5]=S*Bt+J*Pt+it*$t+gt*Dt,x[6]=L*Bt+tt*Pt+pt*$t+wt*Dt,x[7]=z*Bt+ct*Pt+ht*$t+dt*Dt,x[8]=g*Ft+H*Wt+nt*At+lt*Ut,x[9]=S*Ft+J*Wt+it*At+gt*Ut,x[10]=L*Ft+tt*Wt+pt*At+wt*Ut,x[11]=z*Ft+ct*Wt+ht*At+dt*Ut,x[12]=g*Kt+H*zt+nt*It+lt*jt,x[13]=S*Kt+J*zt+it*It+gt*jt,x[14]=L*Kt+tt*zt+pt*It+wt*jt,x[15]=z*Kt+ct*zt+ht*It+dt*jt,x}let j=Q;function Z(u,B,M){let x=M??R();return u!==x&&(x[0]=u[0],x[1]=u[1],x[2]=u[2],x[3]=u[3],x[4]=u[4],x[5]=u[5],x[6]=u[6],x[7]=u[7],x[8]=u[8],x[9]=u[9],x[10]=u[10],x[11]=u[11]),x[12]=B[0],x[13]=B[1],x[14]=B[2],x[15]=1,x}function W(u,B){let M=B??t.create();return M[0]=u[12],M[1]=u[13],M[2]=u[14],M}function st(u,B,M){let x=M??t.create(),g=B*4;return x[0]=u[g+0],x[1]=u[g+1],x[2]=u[g+2],x}function et(u,B,M,x){let g=x===u?x:d(u,x),S=M*4;return g[S+0]=B[0],g[S+1]=B[1],g[S+2]=B[2],g}function rt(u,B){let M=B??t.create(),x=u[0],g=u[1],S=u[2],L=u[4],z=u[5],H=u[6],J=u[8],tt=u[9],ct=u[10];return M[0]=Math.sqrt(x*x+g*g+S*S),M[1]=Math.sqrt(L*L+z*z+H*H),M[2]=Math.sqrt(J*J+tt*tt+ct*ct),M}function F(u,B,M,x,g){let S=g??new e(16),L=Math.tan(Math.PI*.5-.5*u);if(S[0]=L/B,S[1]=0,S[2]=0,S[3]=0,S[4]=0,S[5]=L,S[6]=0,S[7]=0,S[8]=0,S[9]=0,S[11]=-1,S[12]=0,S[13]=0,S[15]=0,Number.isFinite(x)){let z=1/(M-x);S[10]=x*z,S[14]=x*M*z}else S[10]=-1,S[14]=-M;return S}function s(u,B,M,x=1/0,g){let S=g??new e(16),L=1/Math.tan(u*.5);if(S[0]=L/B,S[1]=0,S[2]=0,S[3]=0,S[4]=0,S[5]=L,S[6]=0,S[7]=0,S[8]=0,S[9]=0,S[11]=-1,S[12]=0,S[13]=0,S[15]=0,x===1/0)S[10]=0,S[14]=M;else{let z=1/(x-M);S[10]=M*z,S[14]=x*M*z}return S}function p(u,B,M,x,g,S,L){let z=L??new e(16);return z[0]=2/(B-u),z[1]=0,z[2]=0,z[3]=0,z[4]=0,z[5]=2/(x-M),z[6]=0,z[7]=0,z[8]=0,z[9]=0,z[10]=1/(g-S),z[11]=0,z[12]=(B+u)/(u-B),z[13]=(x+M)/(M-x),z[14]=g/(g-S),z[15]=1,z}function _(u,B,M,x,g,S,L){let z=L??new e(16),H=B-u,J=x-M,tt=g-S;return z[0]=2*g/H,z[1]=0,z[2]=0,z[3]=0,z[4]=0,z[5]=2*g/J,z[6]=0,z[7]=0,z[8]=(u+B)/H,z[9]=(x+M)/J,z[10]=S/tt,z[11]=-1,z[12]=0,z[13]=0,z[14]=g*S/tt,z[15]=0,z}function y(u,B,M,x,g,S=1/0,L){let z=L??new e(16),H=B-u,J=x-M;if(z[0]=2*g/H,z[1]=0,z[2]=0,z[3]=0,z[4]=0,z[5]=2*g/J,z[6]=0,z[7]=0,z[8]=(u+B)/H,z[9]=(x+M)/J,z[11]=-1,z[12]=0,z[13]=0,z[15]=0,S===1/0)z[10]=0,z[14]=g;else{let tt=1/(S-g);z[10]=g*tt,z[14]=S*g*tt}return z}let T=t.create(),E=t.create(),O=t.create();function P(u,B,M,x){let g=x??new e(16);return t.normalize(t.subtract(B,u,O),O),t.normalize(t.cross(M,O,T),T),t.normalize(t.cross(O,T,E),E),g[0]=T[0],g[1]=T[1],g[2]=T[2],g[3]=0,g[4]=E[0],g[5]=E[1],g[6]=E[2],g[7]=0,g[8]=O[0],g[9]=O[1],g[10]=O[2],g[11]=0,g[12]=u[0],g[13]=u[1],g[14]=u[2],g[15]=1,g}function l(u,B,M,x){let g=x??new e(16);return t.normalize(t.subtract(u,B,O),O),t.normalize(t.cross(M,O,T),T),t.normalize(t.cross(O,T,E),E),g[0]=T[0],g[1]=T[1],g[2]=T[2],g[3]=0,g[4]=E[0],g[5]=E[1],g[6]=E[2],g[7]=0,g[8]=O[0],g[9]=O[1],g[10]=O[2],g[11]=0,g[12]=u[0],g[13]=u[1],g[14]=u[2],g[15]=1,g}function U(u,B,M,x){let g=x??new e(16);return t.normalize(t.subtract(u,B,O),O),t.normalize(t.cross(M,O,T),T),t.normalize(t.cross(O,T,E),E),g[0]=T[0],g[1]=E[0],g[2]=O[0],g[3]=0,g[4]=T[1],g[5]=E[1],g[6]=O[1],g[7]=0,g[8]=T[2],g[9]=E[2],g[10]=O[2],g[11]=0,g[12]=-(T[0]*u[0]+T[1]*u[1]+T[2]*u[2]),g[13]=-(E[0]*u[0]+E[1]*u[1]+E[2]*u[2]),g[14]=-(O[0]*u[0]+O[1]*u[1]+O[2]*u[2]),g[15]=1,g}function ot(u,B){let M=B??new e(16);return M[0]=1,M[1]=0,M[2]=0,M[3]=0,M[4]=0,M[5]=1,M[6]=0,M[7]=0,M[8]=0,M[9]=0,M[10]=1,M[11]=0,M[12]=u[0],M[13]=u[1],M[14]=u[2],M[15]=1,M}function at(u,B,M){let x=M??new e(16),g=B[0],S=B[1],L=B[2],z=u[0],H=u[1],J=u[2],tt=u[3],ct=u[4],nt=u[5],it=u[6],pt=u[7],ht=u[8],lt=u[9],gt=u[10],wt=u[11],dt=u[12],mt=u[13],yt=u[14],bt=u[15];return u!==x&&(x[0]=z,x[1]=H,x[2]=J,x[3]=tt,x[4]=ct,x[5]=nt,x[6]=it,x[7]=pt,x[8]=ht,x[9]=lt,x[10]=gt,x[11]=wt),x[12]=z*g+ct*S+ht*L+dt,x[13]=H*g+nt*S+lt*L+mt,x[14]=J*g+it*S+gt*L+yt,x[15]=tt*g+pt*S+wt*L+bt,x}function ut(u,B){let M=B??new e(16),x=Math.cos(u),g=Math.sin(u);return M[0]=1,M[1]=0,M[2]=0,M[3]=0,M[4]=0,M[5]=x,M[6]=g,M[7]=0,M[8]=0,M[9]=-g,M[10]=x,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function ft(u,B,M){let x=M??new e(16),g=u[4],S=u[5],L=u[6],z=u[7],H=u[8],J=u[9],tt=u[10],ct=u[11],nt=Math.cos(B),it=Math.sin(B);return x[4]=nt*g+it*H,x[5]=nt*S+it*J,x[6]=nt*L+it*tt,x[7]=nt*z+it*ct,x[8]=nt*H-it*g,x[9]=nt*J-it*S,x[10]=nt*tt-it*L,x[11]=nt*ct-it*z,u!==x&&(x[0]=u[0],x[1]=u[1],x[2]=u[2],x[3]=u[3],x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}function Mt(u,B){let M=B??new e(16),x=Math.cos(u),g=Math.sin(u);return M[0]=x,M[1]=0,M[2]=-g,M[3]=0,M[4]=0,M[5]=1,M[6]=0,M[7]=0,M[8]=g,M[9]=0,M[10]=x,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function vt(u,B,M){let x=M??new e(16),g=u[0],S=u[1],L=u[2],z=u[3],H=u[8],J=u[9],tt=u[10],ct=u[11],nt=Math.cos(B),it=Math.sin(B);return x[0]=nt*g-it*H,x[1]=nt*S-it*J,x[2]=nt*L-it*tt,x[3]=nt*z-it*ct,x[8]=nt*H+it*g,x[9]=nt*J+it*S,x[10]=nt*tt+it*L,x[11]=nt*ct+it*z,u!==x&&(x[4]=u[4],x[5]=u[5],x[6]=u[6],x[7]=u[7],x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}function X(u,B){let M=B??new e(16),x=Math.cos(u),g=Math.sin(u);return M[0]=x,M[1]=g,M[2]=0,M[3]=0,M[4]=-g,M[5]=x,M[6]=0,M[7]=0,M[8]=0,M[9]=0,M[10]=1,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function $(u,B,M){let x=M??new e(16),g=u[0],S=u[1],L=u[2],z=u[3],H=u[4],J=u[5],tt=u[6],ct=u[7],nt=Math.cos(B),it=Math.sin(B);return x[0]=nt*g+it*H,x[1]=nt*S+it*J,x[2]=nt*L+it*tt,x[3]=nt*z+it*ct,x[4]=nt*H-it*g,x[5]=nt*J-it*S,x[6]=nt*tt-it*L,x[7]=nt*ct-it*z,u!==x&&(x[8]=u[8],x[9]=u[9],x[10]=u[10],x[11]=u[11],x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}function A(u,B,M){let x=M??new e(16),g=u[0],S=u[1],L=u[2],z=Math.sqrt(g*g+S*S+L*L);g/=z,S/=z,L/=z;let H=g*g,J=S*S,tt=L*L,ct=Math.cos(B),nt=Math.sin(B),it=1-ct;return x[0]=H+(1-H)*ct,x[1]=g*S*it+L*nt,x[2]=g*L*it-S*nt,x[3]=0,x[4]=g*S*it-L*nt,x[5]=J+(1-J)*ct,x[6]=S*L*it+g*nt,x[7]=0,x[8]=g*L*it+S*nt,x[9]=S*L*it-g*nt,x[10]=tt+(1-tt)*ct,x[11]=0,x[12]=0,x[13]=0,x[14]=0,x[15]=1,x}let c=A;function b(u,B,M,x){let g=x??new e(16),S=B[0],L=B[1],z=B[2],H=Math.sqrt(S*S+L*L+z*z);S/=H,L/=H,z/=H;let J=S*S,tt=L*L,ct=z*z,nt=Math.cos(M),it=Math.sin(M),pt=1-nt,ht=J+(1-J)*nt,lt=S*L*pt+z*it,gt=S*z*pt-L*it,wt=S*L*pt-z*it,dt=tt+(1-tt)*nt,mt=L*z*pt+S*it,yt=S*z*pt+L*it,bt=L*z*pt-S*it,Zt=ct+(1-ct)*nt,Bt=u[0],Pt=u[1],$t=u[2],Dt=u[3],Ft=u[4],Wt=u[5],At=u[6],Ut=u[7],Kt=u[8],zt=u[9],It=u[10],jt=u[11];return g[0]=ht*Bt+lt*Ft+gt*Kt,g[1]=ht*Pt+lt*Wt+gt*zt,g[2]=ht*$t+lt*At+gt*It,g[3]=ht*Dt+lt*Ut+gt*jt,g[4]=wt*Bt+dt*Ft+mt*Kt,g[5]=wt*Pt+dt*Wt+mt*zt,g[6]=wt*$t+dt*At+mt*It,g[7]=wt*Dt+dt*Ut+mt*jt,g[8]=yt*Bt+bt*Ft+Zt*Kt,g[9]=yt*Pt+bt*Wt+Zt*zt,g[10]=yt*$t+bt*At+Zt*It,g[11]=yt*Dt+bt*Ut+Zt*jt,u!==g&&(g[12]=u[12],g[13]=u[13],g[14]=u[14],g[15]=u[15]),g}let w=b;function I(u,B){let M=B??new e(16);return M[0]=u[0],M[1]=0,M[2]=0,M[3]=0,M[4]=0,M[5]=u[1],M[6]=0,M[7]=0,M[8]=0,M[9]=0,M[10]=u[2],M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function G(u,B,M){let x=M??new e(16),g=B[0],S=B[1],L=B[2];return x[0]=g*u[0],x[1]=g*u[1],x[2]=g*u[2],x[3]=g*u[3],x[4]=S*u[4],x[5]=S*u[5],x[6]=S*u[6],x[7]=S*u[7],x[8]=L*u[8],x[9]=L*u[9],x[10]=L*u[10],x[11]=L*u[11],u!==x&&(x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}function q(u,B){let M=B??new e(16);return M[0]=u,M[1]=0,M[2]=0,M[3]=0,M[4]=0,M[5]=u,M[6]=0,M[7]=0,M[8]=0,M[9]=0,M[10]=u,M[11]=0,M[12]=0,M[13]=0,M[14]=0,M[15]=1,M}function k(u,B,M){let x=M??new e(16);return x[0]=B*u[0],x[1]=B*u[1],x[2]=B*u[2],x[3]=B*u[3],x[4]=B*u[4],x[5]=B*u[5],x[6]=B*u[6],x[7]=B*u[7],x[8]=B*u[8],x[9]=B*u[9],x[10]=B*u[10],x[11]=B*u[11],u!==x&&(x[12]=u[12],x[13]=u[13],x[14]=u[14],x[15]=u[15]),x}return{add:f,aim:P,axisRotate:b,axisRotation:A,cameraAim:l,clone:D,copy:d,create:n,determinant:Y,equals:C,equalsApproximately:m,fromMat3:i,fromQuat:o,frustum:_,frustumReverseZ:y,getAxis:st,getScaling:rt,getTranslation:W,identity:R,inverse:V,invert:K,lookAt:U,mul:j,mulScalar:v,multiply:Q,multiplyScalar:h,negate:a,ortho:p,perspective:F,perspectiveReverseZ:s,rotate:w,rotateX:ft,rotateY:vt,rotateZ:$,rotation:c,rotationX:ut,rotationY:Mt,rotationZ:X,scale:G,scaling:I,set:r,setAxis:et,setTranslation:Z,translate:at,translation:ot,transpose:N,uniformScale:k,uniformScaling:q}}var Bi=new Map;function su(e){let t=Bi.get(e);return t||(t=au(e),Bi.set(e,t)),t}function uu(e){let t=pr(e);function n(X,$,A,c){let b=new e(4);return X!==void 0&&(b[0]=X,$!==void 0&&(b[1]=$,A!==void 0&&(b[2]=A,c!==void 0&&(b[3]=c)))),b}let r=n;function i(X,$,A,c,b){let w=b??new e(4);return w[0]=X,w[1]=$,w[2]=A,w[3]=c,w}function o(X,$,A){let c=A??new e(4),b=$*.5,w=Math.sin(b);return c[0]=w*X[0],c[1]=w*X[1],c[2]=w*X[2],c[3]=Math.cos(b),c}function a(X,$){let A=$??t.create(3),c=Math.acos(X[3])*2,b=Math.sin(c*.5);return b>_t?(A[0]=X[0]/b,A[1]=X[1]/b,A[2]=X[2]/b):(A[0]=1,A[1]=0,A[2]=0),{angle:c,axis:A}}function f(X,$){let A=F(X,$);return Math.acos(2*A*A-1)}function h(X,$,A){let c=A??new e(4),b=X[0],w=X[1],I=X[2],G=X[3],q=$[0],k=$[1],u=$[2],B=$[3];return c[0]=b*B+G*q+w*u-I*k,c[1]=w*B+G*k+I*q-b*u,c[2]=I*B+G*u+b*k-w*q,c[3]=G*B-b*q-w*k-I*u,c}let v=h;function d(X,$,A){let c=A??new e(4),b=$*.5,w=X[0],I=X[1],G=X[2],q=X[3],k=Math.sin(b),u=Math.cos(b);return c[0]=w*u+q*k,c[1]=I*u+G*k,c[2]=G*u-I*k,c[3]=q*u-w*k,c}function D(X,$,A){let c=A??new e(4),b=$*.5,w=X[0],I=X[1],G=X[2],q=X[3],k=Math.sin(b),u=Math.cos(b);return c[0]=w*u-G*k,c[1]=I*u+q*k,c[2]=G*u+w*k,c[3]=q*u-I*k,c}function m(X,$,A){let c=A??new e(4),b=$*.5,w=X[0],I=X[1],G=X[2],q=X[3],k=Math.sin(b),u=Math.cos(b);return c[0]=w*u+I*k,c[1]=I*u-w*k,c[2]=G*u+q*k,c[3]=q*u-G*k,c}function C(X,$,A,c){let b=c??new e(4),w=X[0],I=X[1],G=X[2],q=X[3],k=$[0],u=$[1],B=$[2],M=$[3],x=w*k+I*u+G*B+q*M;x<0&&(x=-x,k=-k,u=-u,B=-B,M=-M);let g,S;if(1-x>_t){let L=Math.acos(x),z=Math.sin(L);g=Math.sin((1-A)*L)/z,S=Math.sin(A*L)/z}else g=1-A,S=A;return b[0]=g*w+S*k,b[1]=g*I+S*u,b[2]=g*G+S*B,b[3]=g*q+S*M,b}function R(X,$){let A=$??new e(4),c=X[0],b=X[1],w=X[2],I=X[3],G=c*c+b*b+w*w+I*I,q=G?1/G:0;return A[0]=-c*q,A[1]=-b*q,A[2]=-w*q,A[3]=I*q,A}function N(X,$){let A=$??new e(4);return A[0]=-X[0],A[1]=-X[1],A[2]=-X[2],A[3]=X[3],A}function V(X,$){let A=$??new e(4),c=X[0]+X[5]+X[10];if(c>0){let b=Math.sqrt(c+1);A[3]=.5*b;let w=.5/b;A[0]=(X[6]-X[9])*w,A[1]=(X[8]-X[2])*w,A[2]=(X[1]-X[4])*w}else{let b=0;X[5]>X[0]&&(b=1),X[10]>X[b*4+b]&&(b=2);let w=(b+1)%3,I=(b+2)%3,G=Math.sqrt(X[b*4+b]-X[w*4+w]-X[I*4+I]+1);A[b]=.5*G;let q=.5/G;A[3]=(X[w*4+I]-X[I*4+w])*q,A[w]=(X[w*4+b]+X[b*4+w])*q,A[I]=(X[I*4+b]+X[b*4+I])*q}return A}function Y(X,$,A,c,b){let w=b??new e(4),I=X*.5,G=$*.5,q=A*.5,k=Math.sin(I),u=Math.cos(I),B=Math.sin(G),M=Math.cos(G),x=Math.sin(q),g=Math.cos(q);switch(c){case"xyz":w[0]=k*M*g+u*B*x,w[1]=u*B*g-k*M*x,w[2]=u*M*x+k*B*g,w[3]=u*M*g-k*B*x;break;case"xzy":w[0]=k*M*g-u*B*x,w[1]=u*B*g-k*M*x,w[2]=u*M*x+k*B*g,w[3]=u*M*g+k*B*x;break;case"yxz":w[0]=k*M*g+u*B*x,w[1]=u*B*g-k*M*x,w[2]=u*M*x-k*B*g,w[3]=u*M*g+k*B*x;break;case"yzx":w[0]=k*M*g+u*B*x,w[1]=u*B*g+k*M*x,w[2]=u*M*x-k*B*g,w[3]=u*M*g-k*B*x;break;case"zxy":w[0]=k*M*g-u*B*x,w[1]=u*B*g+k*M*x,w[2]=u*M*x+k*B*g,w[3]=u*M*g-k*B*x;break;case"zyx":w[0]=k*M*g-u*B*x,w[1]=u*B*g+k*M*x,w[2]=u*M*x-k*B*g,w[3]=u*M*g+k*B*x;break;default:throw new Error(`Unknown rotation order: ${c}`)}return w}function K(X,$){let A=$??new e(4);return A[0]=X[0],A[1]=X[1],A[2]=X[2],A[3]=X[3],A}let Q=K;function j(X,$,A){let c=A??new e(4);return c[0]=X[0]+$[0],c[1]=X[1]+$[1],c[2]=X[2]+$[2],c[3]=X[3]+$[3],c}function Z(X,$,A){let c=A??new e(4);return c[0]=X[0]-$[0],c[1]=X[1]-$[1],c[2]=X[2]-$[2],c[3]=X[3]-$[3],c}let W=Z;function st(X,$,A){let c=A??new e(4);return c[0]=X[0]*$,c[1]=X[1]*$,c[2]=X[2]*$,c[3]=X[3]*$,c}let et=st;function rt(X,$,A){let c=A??new e(4);return c[0]=X[0]/$,c[1]=X[1]/$,c[2]=X[2]/$,c[3]=X[3]/$,c}function F(X,$){return X[0]*$[0]+X[1]*$[1]+X[2]*$[2]+X[3]*$[3]}function s(X,$,A,c){let b=c??new e(4);return b[0]=X[0]+A*($[0]-X[0]),b[1]=X[1]+A*($[1]-X[1]),b[2]=X[2]+A*($[2]-X[2]),b[3]=X[3]+A*($[3]-X[3]),b}function p(X){let $=X[0],A=X[1],c=X[2],b=X[3];return Math.sqrt($*$+A*A+c*c+b*b)}let _=p;function y(X){let $=X[0],A=X[1],c=X[2],b=X[3];return $*$+A*A+c*c+b*b}let T=y;function E(X,$){let A=$??new e(4),c=X[0],b=X[1],w=X[2],I=X[3],G=Math.sqrt(c*c+b*b+w*w+I*I);return G>1e-5?(A[0]=c/G,A[1]=b/G,A[2]=w/G,A[3]=I/G):(A[0]=0,A[1]=0,A[2]=0,A[3]=1),A}function O(X,$){return Math.abs(X[0]-$[0])<_t&&Math.abs(X[1]-$[1])<_t&&Math.abs(X[2]-$[2])<_t&&Math.abs(X[3]-$[3])<_t}function P(X,$){return X[0]===$[0]&&X[1]===$[1]&&X[2]===$[2]&&X[3]===$[3]}function l(X){let $=X??new e(4);return $[0]=0,$[1]=0,$[2]=0,$[3]=1,$}let U=t.create(),ot=t.create(),at=t.create();function ut(X,$,A){let c=A??new e(4),b=t.dot(X,$);return b<-.999999?(t.cross(ot,X,U),t.len(U)<1e-6&&t.cross(at,X,U),t.normalize(U,U),o(U,Math.PI,c),c):b>.999999?(c[0]=0,c[1]=0,c[2]=0,c[3]=1,c):(t.cross(X,$,U),c[0]=U[0],c[1]=U[1],c[2]=U[2],c[3]=1+b,E(c,c))}let ft=new e(4),Mt=new e(4);function vt(X,$,A,c,b,w){let I=w??new e(4);return C(X,c,b,ft),C($,A,b,Mt),C(ft,Mt,2*b*(1-b),I),I}return{create:n,fromValues:r,set:i,fromAxisAngle:o,toAxisAngle:a,angle:f,multiply:h,mul:v,rotateX:d,rotateY:D,rotateZ:m,slerp:C,inverse:R,conjugate:N,fromMat:V,fromEuler:Y,copy:K,clone:Q,add:j,subtract:Z,sub:W,mulScalar:st,scale:et,divScalar:rt,dot:F,lerp:s,length:p,len:_,lengthSq:y,lenSq:T,normalize:E,equalsApproximately:O,equals:P,identity:l,rotationTo:ut,sqlerp:vt}}var Pi=new Map;function fu(e){let t=Pi.get(e);return t||(t=uu(e),Pi.set(e,t)),t}function cu(e){function t(A,c,b,w){let I=new e(4);return A!==void 0&&(I[0]=A,c!==void 0&&(I[1]=c,b!==void 0&&(I[2]=b,w!==void 0&&(I[3]=w)))),I}let n=t;function r(A,c,b,w,I){let G=I??new e(4);return G[0]=A,G[1]=c,G[2]=b,G[3]=w,G}function i(A,c){let b=c??new e(4);return b[0]=Math.ceil(A[0]),b[1]=Math.ceil(A[1]),b[2]=Math.ceil(A[2]),b[3]=Math.ceil(A[3]),b}function o(A,c){let b=c??new e(4);return b[0]=Math.floor(A[0]),b[1]=Math.floor(A[1]),b[2]=Math.floor(A[2]),b[3]=Math.floor(A[3]),b}function a(A,c){let b=c??new e(4);return b[0]=Math.round(A[0]),b[1]=Math.round(A[1]),b[2]=Math.round(A[2]),b[3]=Math.round(A[3]),b}function f(A,c=0,b=1,w){let I=w??new e(4);return I[0]=Math.min(b,Math.max(c,A[0])),I[1]=Math.min(b,Math.max(c,A[1])),I[2]=Math.min(b,Math.max(c,A[2])),I[3]=Math.min(b,Math.max(c,A[3])),I}function h(A,c,b){let w=b??new e(4);return w[0]=A[0]+c[0],w[1]=A[1]+c[1],w[2]=A[2]+c[2],w[3]=A[3]+c[3],w}function v(A,c,b,w){let I=w??new e(4);return I[0]=A[0]+c[0]*b,I[1]=A[1]+c[1]*b,I[2]=A[2]+c[2]*b,I[3]=A[3]+c[3]*b,I}function d(A,c,b){let w=b??new e(4);return w[0]=A[0]-c[0],w[1]=A[1]-c[1],w[2]=A[2]-c[2],w[3]=A[3]-c[3],w}let D=d;function m(A,c){return Math.abs(A[0]-c[0])<_t&&Math.abs(A[1]-c[1])<_t&&Math.abs(A[2]-c[2])<_t&&Math.abs(A[3]-c[3])<_t}function C(A,c){return A[0]===c[0]&&A[1]===c[1]&&A[2]===c[2]&&A[3]===c[3]}function R(A,c,b,w){let I=w??new e(4);return I[0]=A[0]+b*(c[0]-A[0]),I[1]=A[1]+b*(c[1]-A[1]),I[2]=A[2]+b*(c[2]-A[2]),I[3]=A[3]+b*(c[3]-A[3]),I}function N(A,c,b,w){let I=w??new e(4);return I[0]=A[0]+b[0]*(c[0]-A[0]),I[1]=A[1]+b[1]*(c[1]-A[1]),I[2]=A[2]+b[2]*(c[2]-A[2]),I[3]=A[3]+b[3]*(c[3]-A[3]),I}function V(A,c,b){let w=b??new e(4);return w[0]=Math.max(A[0],c[0]),w[1]=Math.max(A[1],c[1]),w[2]=Math.max(A[2],c[2]),w[3]=Math.max(A[3],c[3]),w}function Y(A,c,b){let w=b??new e(4);return w[0]=Math.min(A[0],c[0]),w[1]=Math.min(A[1],c[1]),w[2]=Math.min(A[2],c[2]),w[3]=Math.min(A[3],c[3]),w}function K(A,c,b){let w=b??new e(4);return w[0]=A[0]*c,w[1]=A[1]*c,w[2]=A[2]*c,w[3]=A[3]*c,w}let Q=K;function j(A,c,b){let w=b??new e(4);return w[0]=A[0]/c,w[1]=A[1]/c,w[2]=A[2]/c,w[3]=A[3]/c,w}function Z(A,c){let b=c??new e(4);return b[0]=1/A[0],b[1]=1/A[1],b[2]=1/A[2],b[3]=1/A[3],b}let W=Z;function st(A,c){return A[0]*c[0]+A[1]*c[1]+A[2]*c[2]+A[3]*c[3]}function et(A){let c=A[0],b=A[1],w=A[2],I=A[3];return Math.sqrt(c*c+b*b+w*w+I*I)}let rt=et;function F(A){let c=A[0],b=A[1],w=A[2],I=A[3];return c*c+b*b+w*w+I*I}let s=F;function p(A,c){let b=A[0]-c[0],w=A[1]-c[1],I=A[2]-c[2],G=A[3]-c[3];return Math.sqrt(b*b+w*w+I*I+G*G)}let _=p;function y(A,c){let b=A[0]-c[0],w=A[1]-c[1],I=A[2]-c[2],G=A[3]-c[3];return b*b+w*w+I*I+G*G}let T=y;function E(A,c){let b=c??new e(4),w=A[0],I=A[1],G=A[2],q=A[3],k=w*w+I*I+G*G+q*q,u=k>0?1/Math.sqrt(k):1;return b[0]=w*u,b[1]=I*u,b[2]=G*u,b[3]=q*u,b}function O(A,c){let b=c??new e(4);return b[0]=-A[0],b[1]=-A[1],b[2]=-A[2],b[3]=-A[3],b}function P(A,c){let b=c??new e(4);return b[0]=A[0],b[1]=A[1],b[2]=A[2],b[3]=A[3],b}let l=P;function U(A,c,b){let w=b??new e(4);return w[0]=A[0]*c[0],w[1]=A[1]*c[1],w[2]=A[2]*c[2],w[3]=A[3]*c[3],w}let ot=U;function at(A,c,b){let w=b??new e(4);return w[0]=A[0]/c[0],w[1]=A[1]/c[1],w[2]=A[2]/c[2],w[3]=A[3]/c[3],w}let ut=at;function ft(A){let c=A??new e(4);return c[0]=0,c[1]=0,c[2]=0,c[3]=0,c}function Mt(A,c,b){let w=b??new e(4),I=A[0],G=A[1],q=A[2],k=A[3];return w[0]=c[0]*I+c[4]*G+c[8]*q+c[12]*k,w[1]=c[1]*I+c[5]*G+c[9]*q+c[13]*k,w[2]=c[2]*I+c[6]*G+c[10]*q+c[14]*k,w[3]=c[3]*I+c[7]*G+c[11]*q+c[15]*k,w}function vt(A,c,b){let w=b??new e(4);return E(A,w),K(w,c,w)}function X(A,c,b){let w=b??new e(4);return et(A)>c?vt(A,c,w):P(A,w)}function $(A,c,b){let w=b??new e(4);return R(A,c,.5,w)}return{create:t,fromValues:n,set:r,ceil:i,floor:o,round:a,clamp:f,add:h,addScaled:v,subtract:d,sub:D,equalsApproximately:m,equals:C,lerp:R,lerpV:N,max:V,min:Y,mulScalar:K,scale:Q,divScalar:j,inverse:Z,invert:W,dot:st,length:et,len:rt,lengthSq:F,lenSq:s,distance:p,dist:_,distanceSq:y,distSq:T,normalize:E,negate:O,copy:P,clone:l,multiply:U,mul:ot,divide:at,div:ut,zero:ft,transformMat4:Mt,setLength:vt,truncate:X,midpoint:$}}var Di=new Map;function lu(e){let t=Di.get(e);return t||(t=cu(e),Di.set(e,t)),t}function vn(e,t,n,r,i,o){return{mat3:ou(e),mat4:su(t),quat:fu(n),vec2:Fi(r),vec3:pr(i),vec4:lu(o)}}var{mat3:ye,mat4:Tt,quat:z1,vec2:Lt,vec3:fe,vec4:me}=vn(Float32Array,Float32Array,Float32Array,Float32Array,Float32Array,Float32Array),{mat3:I1,mat4:E1,quat:L1,vec2:G1,vec3:R1,vec4:O1}=vn(Float64Array,Float64Array,Float64Array,Float64Array,Float64Array,Float64Array),{mat3:q1,mat4:N1,quat:V1,vec2:C1,vec3:m1,vec4:k1}=vn(eu,Array,Array,Array,Array,Array);var gr=class{device;format="r8unorm";downsizeFactor;multisample;textureSimple;textureMultisampled=null;renderPipeline;bindgroup;uniformsBuffer;trianglesBuffer;constructor(t){this.device=t.device,this.downsizeFactor=t.blurFactor,this.multisample=this.downsizeFactor>1?4:1,[this.textureSimple,this.textureMultisampled]=this.createTextures(t.width,t.height),this.trianglesBuffer=t.trianglesBuffer;let n=this.device.createShaderModule({label:"DisplacementTexture shader module",code:bi});this.renderPipeline=this.device.createRenderPipeline({label:"DisplacementTexture renderpipeline",layout:"auto",vertex:{module:n,entryPoint:"main_vertex",buffers:[{attributes:[{shaderLocation:0,offset:0,format:"float32x2"}],arrayStride:2*Float32Array.BYTES_PER_ELEMENT,stepMode:"vertex"}]},fragment:{module:n,entryPoint:"main_fragment",targets:[{format:this.format}]},primitive:{cullMode:"none",topology:"triangle-list"},multisample:{count:this.multisample}}),this.uniformsBuffer=this.device.createBuffer({label:"DisplacementTexture uniforms buffer",size:64,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),this.bindgroup=this.device.createBindGroup({label:"DisplacementTexture bindgroup",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.uniformsBuffer}}]})}update(t){let n=this.textureMultisampled??this.textureSimple,r={view:n.view,clearValue:[0,0,0,1],loadOp:"clear",storeOp:"store"};this.textureMultisampled&&(r.resolveTarget=this.textureSimple.view);let i=t.beginRenderPass({label:"DisplacementTexture render to texture renderpass",colorAttachments:[r]}),[o,a]=[n.texture.width,n.texture.height];i.setViewport(0,0,o,a,0,1),i.setScissorRect(0,0,o,a),i.setPipeline(this.renderPipeline),i.setBindGroup(0,this.bindgroup),i.setVertexBuffer(0,this.trianglesBuffer.bufferGpu),i.draw(3*this.trianglesBuffer.spriteCount),i.end()}resize(t,n){this.textureSimple.texture.destroy(),this.textureMultisampled?.texture.destroy(),[this.textureSimple,this.textureMultisampled]=this.createTextures(t,n)}setViewport(t){let n=[1,1,1],r=0,i=[1,1,0],o=Tt.identity();Tt.multiply(Tt.scaling(n),o,o),Tt.multiply(Tt.rotationZ(r),o,o),Tt.multiply(Tt.translation(i),o,o);let a=Tt.translation([-t.position[0],-t.position[1],0]),f=t.width/t.zoom,h=t.height/t.zoom,v=Tt.ortho(0,f,h,0,-10,10),d=Tt.identity();Tt.multiply(a,o,d),Tt.multiply(v,d,d),this.device.queue.writeBuffer(this.uniformsBuffer,0,d)}getView(){return this.textureSimple.view}destroy(){this.textureSimple.texture.destroy(),this.textureMultisampled?.texture.destroy(),this.uniformsBuffer.destroy()}createTextures(t,n){let r=this.device.createTexture({label:"DisplacementTexture texture",size:[Math.ceil(t/this.downsizeFactor),Math.ceil(n/this.downsizeFactor)],format:this.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT}),i={texture:r,view:r.createView({label:"DisplacementTexture texture view"})},o=null;if(this.multisample>1){let a=this.device.createTexture({label:"DisplacementTexture texture multisampled",size:[r.width,r.height],format:r.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT,sampleCount:this.multisample});o={texture:a,view:a.createView({label:"DisplacementTexture texture multisampled view"})}}return[i,o]}};function Pe(){return Math.ceil(Math.random()*(Number.MAX_SAFE_INTEGER-10))}var dr=class{device;floatsPerSprite=6;bufferGpu;bufferNeedsUpdate=!1;sprites=new Map;get spriteCount(){return this.sprites.size}constructor(t){this.device=t.device,this.bufferGpu=this.device.createBuffer({size:t.maxSpriteCount*this.floatsPerSprite*Float32Array.BYTES_PER_ELEMENT,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}destroy(){this.bufferGpu.destroy}update(){if(this.bufferNeedsUpdate){let t=[];for(let r of this.sprites.values())t.push(...r);let n=new Float32Array(t);this.device.queue.writeBuffer(this.bufferGpu,0,n)}}addTriangle(t){let n=Pe();if(this.sprites.has(n))throw new Error(`Duplicate triangle "${n}".`);let r=this.buildTriangleData(t);return this.sprites.set(n,r),this.bufferNeedsUpdate=!0,n}removeTriangle(t){if(!this.sprites.has(t))throw new Error(`Unknown triangle "${t}".`);this.sprites.delete(t),this.bufferNeedsUpdate=!0}setTriangle(t,n){if(!this.sprites.has(t))throw new Error(`Unknown triangle "${t}".`);let r=this.buildTriangleData(n);this.sprites.set(t,r),this.bufferNeedsUpdate=!0}buildTriangleData(t){return[t[0][0],t[0][1],t[1][0],t[1][1],t[2][0],t[2][1]]}};var Ui={type:"cobalt:displacement",onInit:async function(e,t={}){return hu(e,t)},onRun:function(e,t,n){vu(e,t,n)},onDestroy:function(e,t){pu(t)},onResize:function(e,t){t.data.displacementTexture.resize(e.viewport.width,e.viewport.height),t.data.displacementComposition.setColorTextureView(t.refs.color.data.view),t.data.displacementComposition.setNoiseMapTextureView(t.refs.map.view),t.data.displacementComposition.setDisplacementTextureView(t.data.displacementTexture.getView())},onViewportPosition:function(e,t){t.data.displacementTexture.setViewport(e.viewport)},customFunctions:{addTriangle:function(e,t,n){return t.data.trianglesBuffer.addTriangle(n)},removeTriangle:function(e,t,n){t.data.trianglesBuffer.removeTriangle(n)},setPosition:function(e,t,n,r){t.data.trianglesBuffer.setTriangle(n,r)}}};async function hu(e,t){let{device:n}=e,r=new vr({device:n,initialParameters:{offsetX:t.options.offseyX??0,offsetY:t.options.offseyY??0,scale:t.options.scale??20}}),i=256,o=new dr({device:n,maxSpriteCount:i}),a=new gr({device:n,width:e.viewport.width,height:e.viewport.height,blurFactor:8,trianglesBuffer:o}),f=new hr({device:n,targetFormat:Vt(e),colorTextureView:t.refs.color.data.view,noiseMapTextureView:t.refs.map.view,displacementTextureView:a.getView(),displacementParametersBuffer:r});return{displacementParameters:r,displacementTexture:a,displacementComposition:f,trianglesBuffer:o}}function vu(e,t,n){if(t.data.trianglesBuffer.spriteCount===0)return;t.data.trianglesBuffer.update(),t.data.displacementTexture.update(n);let i=n.beginRenderPass({label:"displacement",colorAttachments:[{view:t.refs.out,clearValue:e.clearValue,loadOp:"load",storeOp:"store"}]});i.executeBundles([t.data.displacementComposition.getRenderBundle()]),i.end()}function pu(e){e.data.trianglesBuffer.destroy(),e.data.trianglesBuffer=null,e.data.displacementParameters.destroy(),e.data.displacementParameters=null,e.data.displacementTexture.destroy(),e.data.displacementTexture=null,e.data.displacementComposition.destroy(),e.data.displacementComposition=null}var pn="@binding(0)@group(0)var tileTexture:texture_2d<f32>;@binding(1)@group(0)var tileSampler:sampler;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>};const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vs_main(@builtin(vertex_index)VertexIndex:u32)->Fragment{var output:Fragment;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.TexCoord=vec2<f32>(uvs[VertexIndex]);return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>)->@location(0)vec4<f32>{var col=textureSample(tileTexture,tileSampler,TexCoord);return vec4<f32>(col.rgb,1.0);}";var zi={type:"cobalt:fbBlit",onInit:async function(e,t={}){return gu(e,t)},onRun:function(e,t,n){du(e,t,n)},onDestroy:function(e,t){},onResize:function(e,t){wu(e,t)},onViewportPosition:function(e,t){}};async function gu(e,t){let{device:n}=e,r=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),i=n.createBindGroup({layout:r,entries:[{binding:0,resource:t.refs.in.data.view},{binding:1,resource:t.refs.in.data.sampler}]}),o=n.createPipelineLayout({bindGroupLayouts:[r]}),a=n.createRenderPipeline({label:"fb-blit",vertex:{module:n.createShaderModule({code:pn}),entryPoint:"vs_main",buffers:[]},fragment:{module:n.createShaderModule({code:pn}),entryPoint:"fs_main",targets:[{format:Vt(e),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:o});return{bindGroupLayout:r,bindGroup:i,pipeline:a}}function du(e,t,n){let{device:r}=e,i=n.beginRenderPass({label:"fb-blit",colorAttachments:[{view:t.refs.out,clearValue:e.clearValue,loadOp:"load",storeOp:"store"}]});i.setPipeline(t.data.pipeline),i.setBindGroup(0,t.data.bindGroup),i.draw(3),i.end()}function wu(e,t){let{device:n}=e;t.data.bindGroup=n.createBindGroup({layout:t.data.bindGroupLayout,entries:[{binding:0,resource:t.refs.in.data.view},{binding:1,resource:t.refs.in.data.sampler}]})}var Ii={type:"cobalt:fbTexture",onInit:async function(e,t={}){return xu(e,t)},onRun:function(e,t,n){},onDestroy:function(e,t){Ei(t)},onResize:function(e,t){Mu(e,t)},onViewportPosition:function(e,t){}};async function xu(e,t){let{device:n}=e;t.options.format=t.options.format==="PREFERRED_TEXTURE_FORMAT"?Vt(e):t.options.format;let{format:r,label:i,mip_count:o,usage:a,viewportScale:f}=t.options;return ne(n,i,e.viewport.width*f,e.viewport.height*f,o,r,a,t.options.filter)}function Ei(e){e.data.texture.destroy()}function Mu(e,t){let{device:n}=e;Ei(t);let{width:r,height:i}=e.viewport,{options:o}=t,a=t.options.viewportScale;t.data=ne(n,o.label,r*a,i*a,o.mip_count,o.format,o.usage)}var ae=class e{static structs={definition:`
|
|
2
2
|
struct Light { // align(16) size(48)
|
|
3
3
|
color: vec3<f32>, // offset(0) align(16) size(12)
|
|
4
4
|
radius: f32, // offset(12) align(4) size(4)
|
|
@@ -13,66 +13,8 @@ struct LightsBuffer { // align(16)
|
|
|
13
13
|
// padding
|
|
14
14
|
lights: array<Light>, // offset(16) align(16)
|
|
15
15
|
};
|
|
16
|
-
`,
|
|
17
|
-
|
|
18
|
-
@builtin(instance_index) lightIndex: u32,
|
|
19
|
-
@location(0) position: vec3<f32>,
|
|
20
|
-
@location(1) lightSize: f32,
|
|
21
|
-
@location(2) lightPosition: vec2<f32>,
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
struct VertexOut {
|
|
25
|
-
@builtin(position) position: vec4<f32>,
|
|
26
|
-
@location(0) color: vec4<f32>,
|
|
27
|
-
@location(1) localPosition: vec2<f32>,
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const cellsGridSizeU = vec2<u32>(${n.gridSize.x}, ${n.gridSize.y});
|
|
31
|
-
const cellsGridSizeF = vec2<f32>(${n.gridSize.x}, ${n.gridSize.y});
|
|
32
|
-
|
|
33
|
-
@vertex
|
|
34
|
-
fn main_vertex(in: VertexIn) -> VertexOut {
|
|
35
|
-
let worldPosition = in.lightPosition + (in.position.xy - in.lightPosition) * (1.0 + 10000.0 * in.position.z);
|
|
36
|
-
|
|
37
|
-
let scaling = f32(${r});
|
|
38
|
-
|
|
39
|
-
let cellIndex = in.lightIndex / 4u;
|
|
40
|
-
let indexInCell = in.lightIndex % 4u;
|
|
41
|
-
|
|
42
|
-
let cellIdU = vec2<u32>(
|
|
43
|
-
cellIndex % cellsGridSizeU.x,
|
|
44
|
-
cellIndex / cellsGridSizeU.x,
|
|
45
|
-
);
|
|
46
|
-
let cellIdF = vec2<f32>(cellIdU);
|
|
47
|
-
|
|
48
|
-
var out: VertexOut;
|
|
49
|
-
out.localPosition = (worldPosition - in.lightPosition) / scaling;
|
|
50
|
-
out.position = vec4<f32>(
|
|
51
|
-
(out.localPosition - (cellsGridSizeF - 1.0) + 2.0 * cellIdF) / cellsGridSizeF,
|
|
52
|
-
0.0,
|
|
53
|
-
1.0,
|
|
54
|
-
);
|
|
55
|
-
out.color = vec4<f32>(
|
|
56
|
-
vec4<u32>(indexInCell) != vec4<u32>(0u, 1u, 2u, 3u),
|
|
57
|
-
);
|
|
58
|
-
return out;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
struct FragmentOut {
|
|
62
|
-
@location(0) color: vec4<f32>,
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
@fragment
|
|
66
|
-
fn main_fragment(in: VertexOut) -> FragmentOut {
|
|
67
|
-
if (in.localPosition.x < -1.0 || in.localPosition.x > 1.0 || in.localPosition.y <= -1.0 || in.localPosition.y > 1.0) {
|
|
68
|
-
discard;
|
|
69
|
-
}
|
|
70
|
-
var out: FragmentOut;
|
|
71
|
-
out.color = in.color;
|
|
72
|
-
return out;
|
|
73
|
-
}
|
|
74
|
-
`}),a=t.createRenderPipeline({label:"LightsTextureMask renderpipeline",layout:"auto",vertex:{module:o,entryPoint:"main_vertex",buffers:[{attributes:[{shaderLocation:0,offset:0,format:"float32x3"}],arrayStride:3*Float32Array.BYTES_PER_ELEMENT,stepMode:"vertex"},{attributes:[{shaderLocation:1,offset:ye.light.radius.offset,format:"float32"},{shaderLocation:2,offset:ye.light.position.offset,format:"float32x2"}],arrayStride:ye.lightsBuffer.lights.stride,stepMode:"instance"}]},fragment:{module:o,entryPoint:"main_fragment",targets:[{format:n.format,blend:{color:{operation:"min",srcFactor:"one",dstFactor:"one"},alpha:{operation:"min",srcFactor:"one",dstFactor:"one"}}}]},primitive:{cullMode:"none",topology:"triangle-list"},multisample:{count:n.sampleCount}}),f=new ArrayBuffer(20),h=t.createBuffer({label:"LightsTextureMask indirect buffer",size:20,usage:GPUBufferUsage.INDIRECT|GPUBufferUsage.COPY_DST}),v={label:"LightsTextureMask renderbundle encoder",colorFormats:[n.format],sampleCount:n.sampleCount},d={maskPipeline:a,maskRenderBundleDescriptor:v,maskRenderBundle:null,maskIndirectBufferCpu:f,maskIndirectBufferGpu:h,maskObstacles:null,lightsBufferGpu:e};return vn(t,d),d.maskRenderBundle=Vi(t,d),d}function Oi(t,e,n){let r=[],i=[];for(let D of n){let C=r.length/3;r.push(...D[0],0,...D[1],0,...D[0],1,...D[1],1),i.push(C+0,C+1,C+3,C+0,C+3,C+2)}let o=!1,a=new Float32Array(r),f=e.maskObstacles?.positionsBufferGpu;(!f||f.size<a.byteLength)&&(f?.destroy(),f=t.createBuffer({label:"LightsTextureMask positions buffer",size:a.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o=!0),t.queue.writeBuffer(f,0,a);let h=new Uint16Array(i),v=e.maskObstacles?.indexBufferGpu;(!v||v.size<h.byteLength)&&(v?.destroy(),v=t.createBuffer({label:"LightsTextureMask index buffer",size:h.byteLength,usage:GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST}),o=!0),t.queue.writeBuffer(v,0,h),e.maskObstacles={positionsBufferGpu:f,indexBufferGpu:v};let d=new Uint32Array(e.maskIndirectBufferCpu);d[0]!==i.length&&(d[0]=i.length,vn(t,e)),o&&(e.maskRenderBundle=Vi(t,e))}function qi(t,e,n){let r=new Uint32Array(e.maskIndirectBufferCpu);r[1]!==n&&(r[1]=n,vn(t,e))}function Ni(t){t.maskIndirectBufferGpu.destroy(),t.maskObstacles?.positionsBufferGpu.destroy(),t.maskObstacles?.indexBufferGpu.destroy()}function Vi(t,e){let n=t.createRenderBundleEncoder(e.maskRenderBundleDescriptor);return e.maskObstacles&&(n.setPipeline(e.maskPipeline),n.setVertexBuffer(0,e.maskObstacles.positionsBufferGpu),n.setVertexBuffer(1,e.lightsBufferGpu,ye.lightsBuffer.lights.offset),n.setIndexBuffer(e.maskObstacles.indexBufferGpu,"uint16"),n.drawIndexedIndirect(e.maskIndirectBufferGpu,0)),n.finish({label:"LightsTextureMask renderbundle"})}function vn(t,e){t.queue.writeBuffer(e.maskIndirectBufferGpu,0,e.maskIndirectBufferCpu)}function U0(t,e,n){e.data.lights=n,e.data.lightsBufferNeedsUpdate=!0}function A0(t,e,n){e.data.ambientLight=[...n]}function z0(t,e,n){Oi(t.device,e.data,n),e.data.lightsTextureNeedsUpdate=!0}var ki={type:"cobalt:light",onInit:async function(t,e){return I0(t,e)},onRun:function(t,e,n){E0(t,e,n)},onDestroy:function(t,e){G0(e)},onResize:function(t,e){L0(t,e)},onViewportPosition:function(t,e){let{viewport:n}=t;e.data.viewportTopLeft=[...n.position],e.data.invViewProjectionMatrix=wr(e.data.viewportWidth,e.data.viewportHeight,e.data.viewportZoom,e.data.viewportTopLeft)},customFunctions:{...pn}};async function I0(t,e){let{device:n}=t,r=256,i=256,o=Vt(t),a=i,f="nearest",h=Gi(n,r),v=r/4,d={x:Math.ceil(Math.sqrt(v)),y:0};d.y=Math.ceil(v/d.x);let D={width:d.x*a,height:d.y*a},C=n.createTexture({label:"LightsTexture texture",size:[D.width,D.height],format:o,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT}),k={label:"lights-renderer render to texture renderpass",colorAttachments:[{view:C.createView(),clearValue:[0,0,0,1],loadOp:"load",storeOp:"store"}]},R={gridSize:d,format:o,sampleCount:1},q=n.createShaderModule({label:"LightsTextureInitializer shader module",code:`
|
|
75
|
-
${ln}
|
|
16
|
+
`,light:{radius:{offset:12},position:{offset:16}},lightsBuffer:{lights:{offset:16,stride:48}}};device;maxLightsCount;currentLightsCount=0;buffer;get gpuBuffer(){return this.buffer.bufferGpu}constructor(t,n){this.device=t,this.maxLightsCount=n;let r=new ArrayBuffer(e.computeBufferBytesLength(n)),i=t.createBuffer({label:"LightsBuffer buffer",size:r.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.VERTEX});this.buffer={bufferCpu:r,bufferGpu:i},this.setLights([])}setLights(t){if(t.length>this.maxLightsCount)throw new Error(`Too many lights "${t.length}", max is "${this.maxLightsCount}".`);let n=e.computeBufferBytesLength(t.length);new Uint32Array(this.buffer.bufferCpu,0,1).set([t.length]),t.forEach((r,i)=>{new Float32Array(this.buffer.bufferCpu,e.structs.lightsBuffer.lights.offset+e.structs.lightsBuffer.lights.stride*i,9).set([...r.color,r.radius,...r.position,r.intensity,r.attenuationLinear,r.attenuationExp])}),this.device.queue.writeBuffer(this.buffer.bufferGpu,0,this.buffer.bufferCpu,0,n),this.currentLightsCount=t.length}get lightsCount(){return this.currentLightsCount}destroy(){this.buffer.bufferGpu.destroy()}static computeBufferBytesLength(t){return e.structs.lightsBuffer.lights.offset+e.structs.lightsBuffer.lights.stride*t}};var wr=class{lightsBuffer;renderPipeline;bindgroup;renderBundle;constructor(t,n,r,i){this.lightsBuffer=n;let o=t.createShaderModule({label:"LightsTextureInitializer shader module",code:`
|
|
17
|
+
${ae.structs.definition}
|
|
76
18
|
|
|
77
19
|
@group(0) @binding(0) var<storage,read> lightsBuffer: LightsBuffer;
|
|
78
20
|
|
|
@@ -85,8 +27,8 @@ struct VertexOut {
|
|
|
85
27
|
@location(0) uv: vec2<f32>,
|
|
86
28
|
};
|
|
87
29
|
|
|
88
|
-
const cellsGridSizeU = vec2<u32>(${
|
|
89
|
-
const cellsGridSizeF = vec2<f32>(${
|
|
30
|
+
const cellsGridSizeU = vec2<u32>(${r.gridSize.x}, ${r.gridSize.y});
|
|
31
|
+
const cellsGridSizeF = vec2<f32>(${r.gridSize.x}, ${r.gridSize.y});
|
|
90
32
|
|
|
91
33
|
@vertex
|
|
92
34
|
fn main_vertex(in: VertexIn) -> VertexOut {
|
|
@@ -116,54 +58,138 @@ struct LightProperties {
|
|
|
116
58
|
};
|
|
117
59
|
|
|
118
60
|
fn get_light_properties(lightId: u32) -> LightProperties {
|
|
119
|
-
var
|
|
61
|
+
var lightProperties: LightProperties;
|
|
120
62
|
if (lightId < lightsBuffer.count) {
|
|
121
63
|
let light = lightsBuffer.lights[lightId];
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
64
|
+
lightProperties.radius = light.radius;
|
|
65
|
+
lightProperties.intensity = 1.0;
|
|
66
|
+
lightProperties.attenuationLinear = light.attenuationLinear;
|
|
67
|
+
lightProperties.attenuationExp = light.attenuationExp;
|
|
68
|
+
} else {
|
|
69
|
+
lightProperties.radius = 0.0;
|
|
70
|
+
lightProperties.intensity = 0.0;
|
|
71
|
+
lightProperties.attenuationLinear = 0.0;
|
|
72
|
+
lightProperties.attenuationExp = 0.0;
|
|
126
73
|
}
|
|
127
|
-
return
|
|
74
|
+
return lightProperties;
|
|
128
75
|
}
|
|
129
76
|
|
|
130
77
|
@fragment
|
|
131
78
|
fn main_fragment(in: VertexOut) -> FragmentOut {
|
|
132
79
|
let cellId = vec2<u32>(in.uv);
|
|
80
|
+
|
|
133
81
|
let lightIdFrom = 4u * (cellId.x + cellId.y * cellsGridSizeU.x);
|
|
134
|
-
let
|
|
82
|
+
let lightProperties = array<LightProperties, 4>(
|
|
135
83
|
get_light_properties(lightIdFrom + 0u),
|
|
136
84
|
get_light_properties(lightIdFrom + 1u),
|
|
137
85
|
get_light_properties(lightIdFrom + 2u),
|
|
138
86
|
get_light_properties(lightIdFrom + 3u),
|
|
139
87
|
);
|
|
140
88
|
|
|
89
|
+
let sizes = vec4<f32>(
|
|
90
|
+
lightProperties[0].radius,
|
|
91
|
+
lightProperties[1].radius,
|
|
92
|
+
lightProperties[2].radius,
|
|
93
|
+
lightProperties[3].radius,
|
|
94
|
+
);
|
|
95
|
+
|
|
141
96
|
let localUv = fract(in.uv);
|
|
142
97
|
let fromCenter = 2.0 * localUv - 1.0;
|
|
143
|
-
let
|
|
144
|
-
let
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
98
|
+
let uvDistanceFromCenter = distance(vec2<f32>(0,0), fromCenter);
|
|
99
|
+
let distancesFromCenter = vec4<f32>(uvDistanceFromCenter / sizes * f32(${i}));
|
|
100
|
+
|
|
101
|
+
let intensities = vec4<f32>(
|
|
102
|
+
lightProperties[0].intensity * (1.0 + 1.0 * step(uvDistanceFromCenter, 0.01)),
|
|
103
|
+
lightProperties[1].intensity * (1.0 + 1.0 * step(uvDistanceFromCenter, 0.01)),
|
|
104
|
+
lightProperties[2].intensity * (1.0 + 1.0 * step(uvDistanceFromCenter, 0.01)),
|
|
105
|
+
lightProperties[3].intensity * (1.0 + 1.0 * step(uvDistanceFromCenter, 0.01)),
|
|
106
|
+
);
|
|
107
|
+
let attenuationsLinear = vec4<f32>(
|
|
108
|
+
lightProperties[0].attenuationLinear,
|
|
109
|
+
lightProperties[1].attenuationLinear,
|
|
110
|
+
lightProperties[2].attenuationLinear,
|
|
111
|
+
lightProperties[3].attenuationLinear,
|
|
112
|
+
);
|
|
113
|
+
let attenuationsExp = vec4<f32>(
|
|
114
|
+
lightProperties[0].attenuationExp,
|
|
115
|
+
lightProperties[1].attenuationExp,
|
|
116
|
+
lightProperties[2].attenuationExp,
|
|
117
|
+
lightProperties[3].attenuationExp,
|
|
118
|
+
);
|
|
151
119
|
|
|
152
|
-
var lightIntensities = intensities / (1.0 +
|
|
153
|
-
lightIntensities *= cos(
|
|
154
|
-
lightIntensities *= step(
|
|
120
|
+
var lightIntensities = intensities / (1.0 + distancesFromCenter * (attenuationsLinear + distancesFromCenter * attenuationsExp)); // base intensity equation
|
|
121
|
+
lightIntensities *= cos(distancesFromCenter * ${Math.PI/2}); // soft limit;
|
|
122
|
+
lightIntensities *= step(distancesFromCenter, vec4<f32>(1.0)); // hard limit
|
|
155
123
|
|
|
156
124
|
var out: FragmentOut;
|
|
157
125
|
out.color = lightIntensities;
|
|
158
126
|
return out;
|
|
159
127
|
}
|
|
160
|
-
|
|
128
|
+
`});this.renderPipeline=t.createRenderPipeline({label:"LightsTextureInitializer renderpipeline",layout:"auto",vertex:{module:o,entryPoint:"main_vertex"},fragment:{module:o,entryPoint:"main_fragment",targets:[{format:r.format}]},primitive:{cullMode:"none",topology:"triangle-strip"},multisample:{count:r.sampleCount}}),this.bindgroup=t.createBindGroup({label:"LightsTextureInitializer bindgroup 0",layout:this.renderPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.lightsBuffer.gpuBuffer}}]});let a=t.createRenderBundleEncoder({label:"LightsTextureInitializer renderbundle encoder",colorFormats:[r.format],sampleCount:r.sampleCount});a.setPipeline(this.renderPipeline),a.setBindGroup(0,this.bindgroup),a.draw(4),this.renderBundle=a.finish({label:"LightsTextureInitializer renderbundle"})}getRenderBundle(){return this.renderBundle}destroy(){}};var xr=class{device;renderPipeline;renderBundleEncoderDescriptor;renderBundle;lightsBuffer;indirectDrawing;obstacles=null;constructor(t,n,r,i){this.device=t,this.lightsBuffer=n;let o=!0,a=t.createShaderModule({label:"LightsTextureMask shader module",code:`
|
|
129
|
+
struct VertexIn {
|
|
130
|
+
@builtin(instance_index) lightIndex: u32,
|
|
131
|
+
@location(0) position: vec3<f32>,
|
|
132
|
+
@location(1) lightSize: f32,
|
|
133
|
+
@location(2) lightPosition: vec2<f32>,
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
struct VertexOut {
|
|
137
|
+
@builtin(position) position: vec4<f32>,
|
|
138
|
+
@location(0) color: vec4<f32>,
|
|
139
|
+
@location(1) localPosition: vec2<f32>,
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const cellsGridSizeU = vec2<u32>(${r.gridSize.x}, ${r.gridSize.y});
|
|
143
|
+
const cellsGridSizeF = vec2<f32>(${r.gridSize.x}, ${r.gridSize.y});
|
|
144
|
+
|
|
145
|
+
@vertex
|
|
146
|
+
fn main_vertex(in: VertexIn) -> VertexOut {
|
|
147
|
+
let worldPosition = in.lightPosition + (in.position.xy - in.lightPosition) * (1.0 + 10000.0 * in.position.z);
|
|
148
|
+
|
|
149
|
+
let scaling = f32(${i});
|
|
150
|
+
|
|
151
|
+
let cellIndex = in.lightIndex / 4u;
|
|
152
|
+
let indexInCell = in.lightIndex % 4u;
|
|
153
|
+
|
|
154
|
+
let cellIdU = vec2<u32>(
|
|
155
|
+
cellIndex % cellsGridSizeU.x,
|
|
156
|
+
cellIndex / cellsGridSizeU.x,
|
|
157
|
+
);
|
|
158
|
+
let cellIdF = vec2<f32>(cellIdU);
|
|
159
|
+
|
|
160
|
+
var out: VertexOut;
|
|
161
|
+
out.localPosition = (worldPosition - in.lightPosition) / scaling;
|
|
162
|
+
out.position = vec4<f32>(
|
|
163
|
+
(out.localPosition - (cellsGridSizeF - 1.0) + 2.0 * cellIdF) / cellsGridSizeF,
|
|
164
|
+
0.0,
|
|
165
|
+
1.0,
|
|
166
|
+
);
|
|
167
|
+
out.color = vec4<f32>(
|
|
168
|
+
vec4<u32>(indexInCell) != vec4<u32>(0u, 1u, 2u, 3u),
|
|
169
|
+
);
|
|
170
|
+
return out;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
struct FragmentOut {
|
|
174
|
+
@location(0) color: vec4<f32>,
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
@fragment
|
|
178
|
+
fn main_fragment(in: VertexOut) -> FragmentOut {
|
|
179
|
+
if (in.localPosition.x < -1.0 || in.localPosition.x > 1.0 || in.localPosition.y <= -1.0 || in.localPosition.y > 1.0) {
|
|
180
|
+
discard;
|
|
181
|
+
}
|
|
182
|
+
var out: FragmentOut;
|
|
183
|
+
out.color = in.color;
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
`});this.renderPipeline=t.createRenderPipeline({label:"LightsTextureMask renderpipeline",layout:"auto",vertex:{module:a,entryPoint:"main_vertex",buffers:[{attributes:[{shaderLocation:0,offset:0,format:"float32x3"}],arrayStride:3*Float32Array.BYTES_PER_ELEMENT,stepMode:"vertex"},{attributes:[{shaderLocation:1,offset:ae.structs.light.radius.offset,format:"float32"},{shaderLocation:2,offset:ae.structs.light.position.offset,format:"float32x2"}],arrayStride:ae.structs.lightsBuffer.lights.stride,stepMode:"instance"}]},fragment:{module:a,entryPoint:"main_fragment",targets:[{format:r.format,blend:{color:{operation:"min",srcFactor:"one",dstFactor:"one"},alpha:{operation:"min",srcFactor:"one",dstFactor:"one"}}}]},primitive:{cullMode:o?"none":"back",topology:"triangle-list"},multisample:{count:r.sampleCount}}),this.indirectDrawing={bufferCpu:new ArrayBuffer(20),bufferGpu:t.createBuffer({label:"LightsTextureMask indirect buffer",size:20,usage:GPUBufferUsage.INDIRECT|GPUBufferUsage.COPY_DST})},this.uploadIndirectDrawingBuffer(),this.renderBundleEncoderDescriptor={label:"LightsTextureMask renderbundle encoder",colorFormats:[r.format],sampleCount:r.sampleCount},this.renderBundle=this.buildRenderBundle()}getRenderBundle(){return this.renderBundle}setObstacles(t){let n=[],r=[];for(let v of t){let d=n.length/3;n.push(...v[0],0,...v[1],0,...v[0],1,...v[1],1),r.push(d+0,d+1,d+3,d+0,d+3,d+2)}let i=!1,o=new Float32Array(n),a=this.obstacles?.positionsBufferGpu;(!a||a.size<o.byteLength)&&(a?.destroy(),a=this.device.createBuffer({label:"LightsTextureMask positions buffer",size:o.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),i=!0),this.device.queue.writeBuffer(a,0,o);let f=new Uint16Array(r),h=this.obstacles?.indexBufferGpu;(!h||h.size<f.byteLength)&&(h?.destroy(),h=this.device.createBuffer({label:"LightsTextureMask index buffer",size:f.byteLength,usage:GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST}),i=!0),this.device.queue.writeBuffer(h,0,f),this.obstacles={positionsBufferGpu:a,indexBufferGpu:h},this.setIndirectIndexCount(r.length),i&&(this.renderBundle=this.buildRenderBundle())}setLightsCount(t){this.setIndirectInstanceCount(t)}destroy(){this.indirectDrawing.bufferGpu.destroy(),this.obstacles?.positionsBufferGpu.destroy(),this.obstacles?.indexBufferGpu.destroy()}setIndirectIndexCount(t){let n=new Uint32Array(this.indirectDrawing.bufferCpu);n[0]!==t&&(n[0]=t,this.uploadIndirectDrawingBuffer())}setIndirectInstanceCount(t){let n=new Uint32Array(this.indirectDrawing.bufferCpu);n[1]!==t&&(n[1]=t,this.uploadIndirectDrawingBuffer())}buildRenderBundle(){let t=this.device.createRenderBundleEncoder(this.renderBundleEncoderDescriptor);return this.obstacles&&(t.setPipeline(this.renderPipeline),t.setVertexBuffer(0,this.obstacles.positionsBufferGpu),t.setVertexBuffer(1,this.lightsBuffer.gpuBuffer,ae.structs.lightsBuffer.lights.offset),t.setIndexBuffer(this.obstacles.indexBufferGpu,"uint16"),t.drawIndexedIndirect(this.indirectDrawing.bufferGpu,0)),t.finish({label:"LightsTextureMask renderbundle"})}uploadIndirectDrawingBuffer(){this.device.queue.writeBuffer(this.indirectDrawing.bufferGpu,0,this.indirectDrawing.bufferCpu)}};var Mr=class{lightsBuffer;texture;gridSize;textureMultisampled=null;textureRenderpassDescriptor;textureInitializer;textureMask;constructor(t,n,r){this.lightsBuffer=n;let i=this.lightsBuffer.maxLightsCount/4,o={x:Math.ceil(Math.sqrt(i)),y:0};o.y=Math.ceil(i/o.x),this.gridSize=o;let a={width:o.x*r.resolutionPerLight,height:o.y*r.resolutionPerLight},f=r.textureFormat;this.texture=t.createTexture({label:"LightsTextureMask texture",size:[a.width,a.height],format:f,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT}),r.antialiased&&(this.textureMultisampled=t.createTexture({label:"LightsTextureMask texture multisampled",size:[a.width,a.height],format:f,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.RENDER_ATTACHMENT,sampleCount:4}));let v={view:(this.textureMultisampled??this.texture).createView(),clearValue:[0,0,0,1],loadOp:"load",storeOp:"store"};r.antialiased&&(v.resolveTarget=this.texture.createView()),this.textureRenderpassDescriptor={label:"lights-renderer render to texture renderpass",colorAttachments:[v]};let d={gridSize:o,format:f,sampleCount:this.textureMultisampled?.sampleCount??1};this.textureInitializer=new wr(t,n,d,r.maxLightSize),this.textureMask=new xr(t,n,d,r.maxLightSize)}update(t){this.textureMask.setLightsCount(this.lightsBuffer.lightsCount);let n=t.beginRenderPass(this.textureRenderpassDescriptor),[r,i]=[this.texture.width,this.texture.height];n.setViewport(0,0,r,i,0,1),n.setScissorRect(0,0,r,i),n.executeBundles([this.textureInitializer.getRenderBundle(),this.textureMask.getRenderBundle()]),n.end()}setObstacles(t){this.textureMask.setObstacles(t)}destroy(){this.texture.destroy(),this.textureMultisampled?.destroy(),this.textureInitializer.destroy(),this.textureMask.destroy()}};var yr=class{device;ambientLight=[.2,.2,.2];targetTexture;renderPipeline;uniformsBufferGpu;bindgroup0;bindgroup1;renderBundle;lightsBuffer;lightsTexture;constructor(t){this.device=t.device,this.targetTexture=t.targetTexture,this.lightsBuffer=t.lightsBuffer,this.lightsTexture=new Mr(t.device,t.lightsBuffer,t.lightsTextureProperties),this.uniformsBufferGpu=t.device.createBuffer({label:"LightsRenderer uniforms buffer",size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});let n=t.device.createShaderModule({label:"LightsRenderer shader module",code:`
|
|
161
187
|
struct Uniforms { // align(16) size(80)
|
|
162
188
|
invertViewMatrix: mat4x4<f32>, // offset(0) align(16) size(64)
|
|
163
189
|
ambientLight: vec3<f32>, // offset(64) align(16) size(12)
|
|
164
190
|
};
|
|
165
191
|
|
|
166
|
-
${
|
|
192
|
+
${ae.structs.definition}
|
|
167
193
|
|
|
168
194
|
@group(0) @binding(0) var<uniform> uniforms: Uniforms;
|
|
169
195
|
@group(0) @binding(1) var<storage,read> lightsBuffer: LightsBuffer;
|
|
@@ -204,8 +230,8 @@ struct FragmentOut {
|
|
|
204
230
|
@location(0) color: vec4<f32>,
|
|
205
231
|
};
|
|
206
232
|
|
|
207
|
-
const cellsGridSizeU = vec2<u32>(${
|
|
208
|
-
const cellsGridSizeF = vec2<f32>(${
|
|
233
|
+
const cellsGridSizeU = vec2<u32>(${this.lightsTexture.gridSize.x}, ${this.lightsTexture.gridSize.y});
|
|
234
|
+
const cellsGridSizeF = vec2<f32>(${this.lightsTexture.gridSize.x}, ${this.lightsTexture.gridSize.y});
|
|
209
235
|
|
|
210
236
|
fn sampleLightBaseIntensity(lightId: u32, localUv: vec2<f32>) -> f32 {
|
|
211
237
|
let cellIndex = lightId / 4u;
|
|
@@ -224,19 +250,19 @@ fn sampleLightBaseIntensity(lightId: u32, localUv: vec2<f32>) -> f32 {
|
|
|
224
250
|
);
|
|
225
251
|
return dot(sample, channel);
|
|
226
252
|
}
|
|
227
|
-
|
|
253
|
+
|
|
228
254
|
fn compute_lights(worldPosition: vec2<f32>) -> vec3<f32> {
|
|
229
255
|
var color = vec3<f32>(uniforms.ambientLight);
|
|
230
256
|
|
|
231
|
-
const maxUvDistance = f32(${1-2/
|
|
257
|
+
const maxUvDistance = f32(${1-2/t.lightsTextureProperties.resolutionPerLight});
|
|
232
258
|
|
|
233
259
|
let lightsCount = lightsBuffer.count;
|
|
234
260
|
for (var iLight = 0u; iLight < lightsCount; iLight++) {
|
|
235
261
|
let light = lightsBuffer.lights[iLight];
|
|
236
|
-
let lightSize = f32(${
|
|
262
|
+
let lightSize = f32(${t.lightsTextureProperties.resolutionPerLight});
|
|
237
263
|
let relativePosition = (worldPosition - light.position) / lightSize;
|
|
238
264
|
if (max(abs(relativePosition.x), abs(relativePosition.y)) < maxUvDistance) {
|
|
239
|
-
let localUv = 0.5 + 0.5 * relativePosition;
|
|
265
|
+
let localUv = 0.5 + 0.5 * relativePosition;
|
|
240
266
|
let lightIntensity = light.intensity * sampleLightBaseIntensity(iLight, localUv);
|
|
241
267
|
color += lightIntensity * light.color;
|
|
242
268
|
}
|
|
@@ -247,7 +273,7 @@ fn compute_lights(worldPosition: vec2<f32>) -> vec3<f32> {
|
|
|
247
273
|
|
|
248
274
|
@fragment
|
|
249
275
|
fn main_fragment(in: VertexOut) -> FragmentOut {
|
|
250
|
-
let light =
|
|
276
|
+
let light = compute_lights(in.worldPosition);
|
|
251
277
|
let albedo = textureSample(albedoTexture, albedoSampler, in.uv);
|
|
252
278
|
let color = albedo.rgb * light;
|
|
253
279
|
|
|
@@ -255,4 +281,4 @@ fn main_fragment(in: VertexOut) -> FragmentOut {
|
|
|
255
281
|
out.color = vec4<f32>(color, 1.0);
|
|
256
282
|
return out;
|
|
257
283
|
}
|
|
258
|
-
`}),tt=n.createRenderPipeline({label:"LightsRenderer renderpipeline",layout:"auto",vertex:{module:at,entryPoint:"main_vertex"},fragment:{module:at,entryPoint:"main_fragment",targets:[{format:H}]},primitive:{cullMode:"none",topology:"triangle-strip"}}),rt=n.createBindGroup({label:"LightsRenderer bindgroup 0",layout:tt.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:W}},{binding:1,resource:{buffer:h.lightsBufferGpu}},{binding:2,resource:C.createView({label:"LightsRenderer lightsTexture view"})},{binding:3,resource:n.createSampler({label:"LightsRenderer sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:f,minFilter:f})}]}),F=Ci(n,tt,{view:e.refs.in.data.view,sampler:e.refs.in.data.sampler}),s=[...t.viewport.position],p=wr(t.viewport.width,t.viewport.height,t.viewport.zoom,s),b={...h,lightsTexture:C,lightsTextureRenderpassDescriptor:k,gridSize:d,initializerPipeline:V,initializerBindgroup:X,initializerRenderBundle:Q,...j,rendererTargetFormat:H,rendererPipeline:tt,rendererUniformsBufferGpu:W,rendererBindgroup0:rt,rendererBindgroup1:F,rendererRenderBundle:null,invViewProjectionMatrix:p,viewportWidth:t.viewport.width,viewportHeight:t.viewport.height,viewportZoom:t.viewport.zoom,viewportTopLeft:s,lights:[],ambientLight:[.2,.2,.2],lightsBufferNeedsUpdate:!0,lightsTextureNeedsUpdate:!0};return b.rendererRenderBundle=mi(n,b),b}function E0(t,e,n){let r=e.data,{device:i}=t;r.lightsBufferNeedsUpdate&&(hn(i,r,r.lights),r.lightsBufferNeedsUpdate=!1,r.lightsTextureNeedsUpdate=!0),r.lightsTextureNeedsUpdate&&(R0(i,r,n),r.lightsTextureNeedsUpdate=!1),r.viewportZoom=t.viewport.zoom,r.invViewProjectionMatrix=wr(r.viewportWidth,r.viewportHeight,r.viewportZoom,r.viewportTopLeft);let o=new ArrayBuffer(80);new Float32Array(o,0,16).set(r.invViewProjectionMatrix),new Float32Array(o,64,3).set(r.ambientLight),i.queue.writeBuffer(r.rendererUniformsBufferGpu,0,o);let a=n.beginRenderPass({label:"light",colorAttachments:[{view:e.refs.out.data.view,clearValue:t.clearValue,loadOp:"load",storeOp:"store"}]});a.executeBundles([r.rendererRenderBundle]),a.end()}function G0(t){let e=t.data;Li(e),e.lightsTexture.destroy(),e.rendererUniformsBufferGpu.destroy(),Ni(e)}function L0(t,e){let n=e.data,{device:r}=t;n.viewportWidth=t.viewport.width,n.viewportHeight=t.viewport.height,n.invViewProjectionMatrix=wr(n.viewportWidth,n.viewportHeight,n.viewportZoom,n.viewportTopLeft),n.rendererBindgroup1=Ci(r,n.rendererPipeline,{view:e.refs.in.data.view,sampler:e.refs.in.data.sampler}),n.rendererRenderBundle=mi(r,n)}function R0(t,e,n){qi(t,e,e.lightsCount);let r=n.beginRenderPass(e.lightsTextureRenderpassDescriptor),i=e.lightsTexture.width,o=e.lightsTexture.height;r.setViewport(0,0,i,o,0,1),r.setScissorRect(0,0,i,o),r.executeBundles([e.initializerRenderBundle,e.maskRenderBundle]),r.end()}function Ci(t,e,n){return t.createBindGroup({label:"LightsRenderer bindgroup 1",layout:e.getBindGroupLayout(1),entries:[{binding:0,resource:n.view},{binding:1,resource:n.sampler}]})}function wr(t,e,n,r){let i=Tt.identity();return Tt.multiply(Tt.scaling([1,-1,0]),i,i),Tt.multiply(Tt.translation([1,1,0]),i,i),Tt.multiply(Tt.scaling([.5*t/n,.5*e/n,0]),i,i),Tt.multiply(Tt.translation([r[0],r[1],0]),i,i),i}function mi(t,e){let n=t.createRenderBundleEncoder({label:"LightsRenderer renderbundle encoder",colorFormats:[e.rendererTargetFormat]});return n.setPipeline(e.rendererPipeline),n.setBindGroup(0,e.rendererBindgroup0),n.setBindGroup(1,e.rendererBindgroup1),n.draw(4),n.finish({label:"LightsRenderer renderbundle"})}function pe(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var Yi="struct TransformData{view:mat4x4<f32>,projection:mat4x4<f32>};@binding(0)@group(0)var<uniform> transformUBO:TransformData;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)Color:vec4<f32>,};@vertex fn vs_main(@location(0)vertexPosition:vec2<f32>,@location(1)vertexColor:vec4<f32>)->Fragment{var sx:f32=1.0;var sy:f32=1.0;var sz:f32=1.0;var rot:f32=0.0;var tx:f32=1.0;var ty:f32=1.0;var tz:f32=0;var s=sin(rot);var c=cos(rot);var scaleM:mat4x4<f32>=mat4x4<f32>(sx,0.0,0.0,0.0,0.0,sy,0.0,0.0,0.0,0.0,sz,0.0,0,0,0,1.0);var modelM:mat4x4<f32>=mat4x4<f32>(c,s,0.0,0.0,-s,c,0.0,0.0,0.0,0.0,1.0,0.0,tx,ty,tz,1.0)*scaleM;var output:Fragment;output.Position=transformUBO.projection*transformUBO.view*modelM*vec4<f32>(vertexPosition,0.0,1.0);output.Color=vertexColor;return output;}@fragment fn fs_main(@location(0)Color:vec4<f32>)->@location(0)vec4<f32>{return Color;}";var bs=hi(yo(),1);var _s=hi(ys(),1);function jn(t,e){if(!Array.isArray(t))throw new Error("poly-to-pslg: Error, invalid polygon");if(t.length===0)return{points:[],edges:[]};e=e||{};var n=!0;"nested"in e?n=!!e.nested:t[0].length===2&&typeof t[0][0]=="number"&&(n=!1),n||(t=[t]);for(var r=[],i=[],o=0;o<t.length;++o)for(var a=t[o],f=r.length,h=0;h<a.length;++h)r.push(a[h]),i.push([f+h,f+(h+1)%a.length]);var v="clean"in e?!0:!!e.clean;return v&&(0,_s.default)(r,i),{points:r,edges:i}}var Ss={line:Le,save:function(t,e){e.data.transforms.push(Me.clone(e.data.transforms.at(-1)))},restore:function(t,e){e.data.transforms.length>1&&e.data.transforms.pop()},translate:function(t,e,n){let r=e.data.transforms.at(-1);Me.translate(r,n,r)},rotate:function(t,e,n){let r=e.data.transforms.at(-1);Me.rotate(r,n,r)},scale:function(t,e,n){let r=e.data.transforms.at(-1);Me.scale(r,n,r)},strokePath:function(t,e,n,r,i=1){for(let o of n)Le(t,e,o[0],o[1],r,i)},filledPath:function(t,e,n,r){let i=jn(n),o=(0,bs.default)(i.points,i.edges,{exterior:!1}),a=e.data.transforms.at(-1),f=e.data.vertexCount*6,h=e.data.vertexCount*6,v=o.length*3*6;e.data.vertices=mr(Float32Array,e.data.vertices,h,v);let d=Gt.create();for(let D of o)Gt.transformMat3(n[D[0]],a,d),e.data.vertices[f+0]=d[0],e.data.vertices[f+1]=d[1],e.data.vertices[f+2]=r[0],e.data.vertices[f+3]=r[1],e.data.vertices[f+4]=r[2],e.data.vertices[f+5]=r[3],Gt.transformMat3(n[D[1]],a,d),e.data.vertices[f+6]=d[0],e.data.vertices[f+7]=d[1],e.data.vertices[f+8]=r[0],e.data.vertices[f+9]=r[1],e.data.vertices[f+10]=r[2],e.data.vertices[f+11]=r[3],Gt.transformMat3(n[D[2]],a,d),e.data.vertices[f+12]=d[0],e.data.vertices[f+13]=d[1],e.data.vertices[f+14]=r[0],e.data.vertices[f+15]=r[1],e.data.vertices[f+16]=r[2],e.data.vertices[f+17]=r[3],f+=18;e.data.vertexCount+=3*o.length,e.data.dirty=!0},ellipse:function(t,e,n,r,i,o,a,f=1){let[h,v]=n,d=2*Math.PI/o;for(let D=0;D<o;D++){let C=D*d,k=(D+1)*d,R=h+r*Math.cos(C),q=v+i*Math.sin(C),V=h+r*Math.cos(k),X=v+i*Math.sin(k);Le(t,e,[R,q],[V,X],a,f)}},filledEllipse:function(t,e,n,r,i,o,a){let[f,h]=n,v=2*Math.PI/o,d=e.data.vertexCount*6,D=o*3*6;e.data.vertices=mr(Float32Array,e.data.vertices,d,D);let C=e.data.transforms.at(-1);for(let k=0;k<o;k++){let R=k*v,q=(k+1)*v,V=f+r*Math.cos(R),X=h+i*Math.sin(R),$=f+r*Math.cos(q),Q=h+i*Math.sin(q),H=e.data.vertexCount*6+k*18,W=Gt.transformMat3([f,h],C);e.data.vertices[H+0]=W[0],e.data.vertices[H+1]=W[1],e.data.vertices[H+2]=a[0],e.data.vertices[H+3]=a[1],e.data.vertices[H+4]=a[2],e.data.vertices[H+5]=a[3],Gt.transformMat3([V,X],C,W),e.data.vertices[H+6]=W[0],e.data.vertices[H+7]=W[1],e.data.vertices[H+8]=a[0],e.data.vertices[H+9]=a[1],e.data.vertices[H+10]=a[2],e.data.vertices[H+11]=a[3],Gt.transformMat3([$,Q],C,W),e.data.vertices[H+12]=W[0],e.data.vertices[H+13]=W[1],e.data.vertices[H+14]=a[0],e.data.vertices[H+15]=a[1],e.data.vertices[H+16]=a[2],e.data.vertices[H+17]=a[3]}e.data.vertexCount+=3*o,e.data.dirty=!0},box:function(t,e,n,r,i,o,a=1){let[f,h]=n,v=r/2,d=i/2,D=[f-v,h-d],C=[f+v,h-d],k=[f-v,h+d],R=[f+v,h+d];Le(t,e,D,C,o,a),Le(t,e,k,R,o,a),Le(t,e,D,k,o,a),Le(t,e,C,R,o,a)},filledBox:function(t,e,n,r,i,o){let[a,f]=n,h=r/2,v=i/2,d=e.data.transforms.at(-1),D=Gt.transformMat3([a-h,f-v],d),C=Gt.transformMat3([a+h,f-v],d),k=Gt.transformMat3([a-h,f+v],d),R=Gt.transformMat3([a+h,f+v],d),q=e.data.vertexCount*6,V=36;e.data.vertices=mr(Float32Array,e.data.vertices,q,V);let X=e.data.vertexCount*6;e.data.vertices[X+0]=D[0],e.data.vertices[X+1]=D[1],e.data.vertices[X+2]=o[0],e.data.vertices[X+3]=o[1],e.data.vertices[X+4]=o[2],e.data.vertices[X+5]=o[3],e.data.vertices[X+6]=k[0],e.data.vertices[X+7]=k[1],e.data.vertices[X+8]=o[0],e.data.vertices[X+9]=o[1],e.data.vertices[X+10]=o[2],e.data.vertices[X+11]=o[3],e.data.vertices[X+12]=C[0],e.data.vertices[X+13]=C[1],e.data.vertices[X+14]=o[0],e.data.vertices[X+15]=o[1],e.data.vertices[X+16]=o[2],e.data.vertices[X+17]=o[3],e.data.vertices[X+18]=k[0],e.data.vertices[X+19]=k[1],e.data.vertices[X+20]=o[0],e.data.vertices[X+21]=o[1],e.data.vertices[X+22]=o[2],e.data.vertices[X+23]=o[3],e.data.vertices[X+24]=R[0],e.data.vertices[X+25]=R[1],e.data.vertices[X+26]=o[0],e.data.vertices[X+27]=o[1],e.data.vertices[X+28]=o[2],e.data.vertices[X+29]=o[3],e.data.vertices[X+30]=C[0],e.data.vertices[X+31]=C[1],e.data.vertices[X+32]=o[0],e.data.vertices[X+33]=o[1],e.data.vertices[X+34]=o[2],e.data.vertices[X+35]=o[3],e.data.vertexCount+=6,e.data.dirty=!0},clear:function(t,e){e.data.vertexCount=0,e.data.transforms.length=1,Me.identity(e.data.transforms[0]),e.data.dirty=!0}};function Le(t,e,n,r,i,o=1){let a=e.data.transforms.at(-1);n=Gt.transformMat3(n,a),r=Gt.transformMat3(r,a);let f=Gt.sub(r,n),h=Gt.normalize(f),v=Vc(h),d=o/2,D=e.data.vertexCount*6,C=e.data.vertexCount*6,k=36;e.data.vertices=mr(Float32Array,e.data.vertices,C,k),e.data.vertices[D+0]=n[0]+v[0]*d,e.data.vertices[D+1]=n[1]+v[1]*d,e.data.vertices[D+2]=i[0],e.data.vertices[D+3]=i[1],e.data.vertices[D+4]=i[2],e.data.vertices[D+5]=i[3],e.data.vertices[D+6]=n[0]-v[0]*d,e.data.vertices[D+7]=n[1]-v[1]*d,e.data.vertices[D+8]=i[0],e.data.vertices[D+9]=i[1],e.data.vertices[D+10]=i[2],e.data.vertices[D+11]=i[3],e.data.vertices[D+12]=r[0]+v[0]*d,e.data.vertices[D+13]=r[1]+v[1]*d,e.data.vertices[D+14]=i[0],e.data.vertices[D+15]=i[1],e.data.vertices[D+16]=i[2],e.data.vertices[D+17]=i[3],e.data.vertices[D+18]=n[0]-v[0]*d,e.data.vertices[D+19]=n[1]-v[1]*d,e.data.vertices[D+20]=i[0],e.data.vertices[D+21]=i[1],e.data.vertices[D+22]=i[2],e.data.vertices[D+23]=i[3],e.data.vertices[D+24]=r[0]+v[0]*d,e.data.vertices[D+25]=r[1]+v[1]*d,e.data.vertices[D+26]=i[0],e.data.vertices[D+27]=i[1],e.data.vertices[D+28]=i[2],e.data.vertices[D+29]=i[3],e.data.vertices[D+30]=r[0]-v[0]*d,e.data.vertices[D+31]=r[1]-v[1]*d,e.data.vertices[D+32]=i[0],e.data.vertices[D+33]=i[1],e.data.vertices[D+34]=i[2],e.data.vertices[D+35]=i[3],e.data.vertexCount+=6,e.data.dirty=!0}function mr(t,e,n,r){if(n+r<=e.length)return e;let i=e.length*2,o=16*1024*1024/e.BYTES_PER_ELEMENT;if(i>o)throw new Error("vertices exceed max array size");let a=new t(i);return a.set(e),a}function Vc(t){return[-t[1],t[0]]}var Ts=ue.create(0,0,0),Bs=Tt.identity(),Ps=Tt.identity(),Fs={type:"cobalt:primitives",onInit:async function(t,e={}){return kc(t,e)},onRun:function(t,e,n){Cc(t,e,n)},onDestroy:function(t,e){mc(e)},onResize:function(t,e){Ds(t,e)},onViewportPosition:function(t,e){Ds(t,e)},customFunctions:Ss};async function kc(t,e){let{device:n}=t,r=new Float32Array(1024),i=n.createBuffer({size:r.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o=n.createBuffer({size:128,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a=n.createShaderModule({code:Yi}),f=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{}}]}),h=n.createPipelineLayout({bindGroupLayouts:[f]}),v=n.createBindGroup({layout:f,entries:[{binding:0,resource:{buffer:o}}]}),d=n.createRenderPipeline({label:"primitives",layout:h,vertex:{module:a,entryPoint:"vs_main",buffers:[{arrayStride:6*Float32Array.BYTES_PER_ELEMENT,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,format:"float32x4",offset:8}]}]},fragment:{module:a,entryPoint:"fs_main",targets:[{format:Vt(t),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"}});return{uniformBuffer:o,vertexBuffer:i,pipeline:d,bindGroup:v,vertexCount:0,dirty:!1,vertices:r,transforms:[Me.identity()]}}function Cc(t,e,n){if(e.data.vertexCount===0)return;let{device:r}=t;if(e.data.dirty){e.data.dirty=!1;let a=6*Float32Array.BYTES_PER_ELEMENT;e.data.vertices.buffer.byteLength>e.data.vertexBuffer.size&&(e.data.vertexBuffer.destroy(),e.data.vertexBuffer=r.createBuffer({size:e.data.vertices.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}));let f=e.data.vertexCount*a;if(f>e.data.vertexBuffer.size){console.error("too many primitives, bailing");return}t.device.queue.writeBuffer(e.data.vertexBuffer,0,e.data.vertices.buffer,0,f)}let i=e.options.loadOp||"load",o=n.beginRenderPass({label:"primitives",colorAttachments:[{view:e.refs.color,clearValue:t.clearValue,loadOp:i,storeOp:"store"}]});o.setPipeline(e.data.pipeline),o.setBindGroup(0,e.data.bindGroup),o.setVertexBuffer(0,e.data.vertexBuffer),o.draw(e.data.vertexCount),o.end()}function mc(t){t.data.vertexBuffer.destroy(),t.data.vertexBuffer=null,t.data.uniformBuffer.destroy(),t.data.uniformBuffer=null,t.data.transforms.length=0}function Ds(t,e){let{device:n}=t,r=t.viewport.width/t.viewport.zoom,i=t.viewport.height/t.viewport.zoom;Tt.ortho(0,r,i,0,-10,10,Bs),ue.set(-t.viewport.position[0]-1,-t.viewport.position[1]-1,0,Ts),Tt.translation(Ts,Ps),n.queue.writeBuffer(e.data.uniformBuffer,0,Ps.buffer),n.queue.writeBuffer(e.data.uniformBuffer,64,Bs.buffer)}var ti="struct BloomComposite{bloom_intensity:f32,bloom_combine_constant:f32,}@group(0)@binding(0)var mySampler:sampler;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var emissiveTexture:texture_2d<f32>;@group(0)@binding(3)var<uniform> composite_parameter:BloomComposite;struct VertexOutput{@builtin(position)Position:vec4<f32>,@location(0)fragUV:vec2<f32>,}const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vert_main(@builtin(vertex_index)VertexIndex:u32)->VertexOutput{var output:VertexOutput;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.fragUV=vec2<f32>(uvs[VertexIndex]);return output;}fn GTTonemap_point(x:f32)->f32{let m:f32=0.22;let a:f32=1.0;let c:f32=1.33;let P:f32=1.0;let l:f32=0.4;let l0:f32=((P-m)*l)/a;let S0:f32=m+l0;let S1:f32=m+a*l0;let C2:f32=(a*P)/(P-S1);let L:f32=m+a*(x-m);let T:f32=m*pow(x/m,c);let S:f32=P-(P-S1)*exp(-C2*(x-S0)/P);let w0:f32=1.0-smoothstep(0.0,m,x);var w2:f32=1.0;if(x<m+l){w2=0.0;}let w1:f32=1.0-w0-w2;return f32(T*w0+L*w1+S*w2);}fn GTTonemap(x:vec3<f32>)->vec3<f32>{return vec3<f32>(GTTonemap_point(x.r),GTTonemap_point(x.g),GTTonemap_point(x.b));}fn aces(x:vec3<f32>)->vec3<f32>{let a:f32=2.51;let b:f32=0.03;let c:f32=2.43;let d:f32=0.59;let e:f32=0.14;return clamp((x*(a*x+b))/(x*(c*x+d)+e),vec3<f32>(0.0),vec3<f32>(1.0));}@fragment fn frag_main(@location(0)fragUV:vec2<f32>)->@location(0)vec4<f32>{let hdr_color=textureSample(colorTexture,mySampler,fragUV);let bloom_color=textureSample(emissiveTexture,mySampler,fragUV);let combined_color=((bloom_color*composite_parameter.bloom_intensity)*composite_parameter.bloom_combine_constant);let mapped_color=GTTonemap(combined_color.rgb);let gamma_corrected_color=pow(mapped_color,vec3<f32>(1.0/2.2));return vec4<f32>(gamma_corrected_color+hdr_color.rgb,1.0);}";var Us={type:"cobalt:composite",onInit:async function(t,e={}){return Yc(t,e)},onRun:function(t,e,n){Xc(t,e,n)},onDestroy:function(t,e){},onResize:function(t,e){Hc(t,e)},onViewportPosition:function(t,e){}};function Yc(t,e){let{options:n,refs:r}=e,{device:i}=t,o=Vt(t),a=n.bloom_intensity??40,f=n.bloom_combine_constant??.68,h=new Float32Array([a,f]),v=i.createBuffer({label:"scene composite params buffer",size:h.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});new Float32Array(v.getMappedRange()).set(h),v.unmap();let d=i.createRenderPipeline({label:"scene-composite",layout:"auto",vertex:{module:i.createShaderModule({code:ti}),entryPoint:"vert_main"},fragment:{module:i.createShaderModule({code:ti}),entryPoint:"frag_main",targets:[{format:o}]},primitive:{topology:"triangle-list"}});return{bindGroup:i.createBindGroup({layout:d.getBindGroupLayout(0),entries:[{binding:0,resource:r.hdr.data.sampler},{binding:1,resource:r.hdr.data.view},{binding:2,resource:r.bloom.data.mip_view[0]},{binding:3,resource:{buffer:v}}]}),pipeline:d,params_buf:v}}function Xc(t,e,n){let r=n.beginRenderPass({label:"scene-composite",colorAttachments:[{view:e.refs.combined.data.view,clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),{pipeline:i,bindGroup:o}=e.data;r.setPipeline(i),r.setBindGroup(0,o),r.draw(3),r.end()}function Hc(t,e){let{pipeline:n,params_buf:r}=e.data,{device:i}=t;e.data.bindGroup=i.createBindGroup({layout:n.getBindGroupLayout(0),entries:[{binding:0,resource:e.refs.hdr.data.sampler},{binding:1,resource:e.refs.hdr.data.view},{binding:2,resource:e.refs.bloom.data.mip_view[0]},{binding:3,resource:{buffer:r}}]})}var ei={};un(ei,{addSprite:()=>Zc,clear:()=>Wc,removeSprite:()=>$c,setSpriteName:()=>Kc,setSpriteOpacity:()=>jc,setSpritePosition:()=>Qc,setSpriteRotation:()=>t1,setSpriteScale:()=>e1,setSpriteTint:()=>Jc});function Zc(t,e,n,r,i,o,a,f){let{idByName:h}=e.refs.spritesheet.data;return e.data.sprites.push({position:Gt.clone(r),sizeX:1,sizeY:1,scale:Gt.clone(i),rotation:f,opacity:a,tint:Ce.clone(o),spriteID:h.get(n),id:Pe()}),e.data.sprites.at(-1).id}function $c(t,e,n){let r=e.data.sprites;for(let i=0;i<r.length;i++)if(r[i].id===n){r[i]=r[r.length-1],r.pop();return}}function Wc(t,e){e.data.sprites.length=0}function Kc(t,e,n,r){let i=e.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){i[a].spriteID=e.refs.spritesheet.data.idByName.get(r);return}}function Qc(t,e,n,r){let i=e.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){Gt.copy(r,i[a].position);return}}function Jc(t,e,n,r){let i=e.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){Ce.copy(r,i[a].tint);return}}function jc(t,e,n,r){let i=e.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){i[a].opacity=r;return}}function t1(t,e,n,r){let i=e.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){i[a].rotation=r;return}}function e1(t,e,n,r){let i=e.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){Gt.copy(r,i[a].scale);return}}var As="struct ViewParams{view:mat4x4<f32>,proj:mat4x4<f32>};@group(0)@binding(0)var<uniform> uView:ViewParams;@group(0)@binding(1)var uSampler:sampler;@group(0)@binding(2)var uTex:texture_2d<f32>;struct SpriteDesc{uvOrigin:vec2<f32>,uvSpan:vec2<f32>,frameSize:vec2<f32>,centerOffset:vec2<f32>,};@group(0)@binding(3)var<storage,read>Sprites:array<SpriteDesc>;struct VSOut{@builtin(position)pos:vec4<f32>,@location(0)uv:vec2<f32>,@location(1)tint:vec4<f32>,@location(2)opacity:f32,};const corners=array<vec2<f32>,4>(vec2<f32>(-0.5,-0.5),vec2<f32>(0.5,-0.5),vec2<f32>(-0.5,0.5),vec2<f32>(0.5,0.5),);const uvBase=array<vec2<f32>,4>(vec2<f32>(0.0,0.0),vec2<f32>(1.0,0.0),vec2<f32>(0.0,1.0),vec2<f32>(1.0,1.0),);@vertex fn vs_main(@builtin(vertex_index)vid:u32,@location(0)i_pos:vec2<f32>,@location(1)i_size:vec2<f32>,@location(2)i_scale:vec2<f32>,@location(3)i_tint:vec4<f32>,@location(4)i_spriteId:u32,@location(5)i_opacity:f32,@location(6)i_rotation:f32)->VSOut{let rot=i_rotation;let c=cos(rot);let s=sin(rot);let d=Sprites[i_spriteId];let corner=corners[vid];let sizePx=d.frameSize*i_size*i_scale;var local=corner*sizePx;local+=d.centerOffset*i_scale;let rotated=vec2<f32>(local.x*c-local.y*s,local.x*s+local.y*c);let world=vec4<f32>(rotated+i_pos,0.0,1.0);var out:VSOut;out.pos=uView.proj*uView.view*world;out.uv=d.uvOrigin+d.uvSpan*uvBase[vid];out.tint=i_tint;out.opacity=i_opacity;return out;}@fragment fn fs_main(in:VSOut)->@location(0)vec4<f32>{let texel=textureSample(uTex,uSampler,in.uv);return vec4<f32>(texel.rgb*(1.0-in.tint.a)+(in.tint.rgb*in.tint.a),texel.a*in.opacity);}";var ri=ue.create(0,0,0),zs=Tt.identity(),Is=Tt.identity(),Re=64,ni=0,ii=8,oi=16,fr=24,Gs=40,Ls=44,Rs=48,Os={type:"cobalt:sprite",onInit:async function(t,e={}){return r1(t,e)},onRun:function(t,e,n){i1(t,e,n)},onDestroy:function(t,e){try{e.data.instanceBuf?.destroy()}catch{}try{e.data.spriteBuf?.destroy()}catch{}try{e.data.uniformBuffer?.destroy()}catch{}e.data.pipeline=null,e.data.bindGroup=null,e.data.bindGroupLayout=null,e.data.instanceStaging=null,e.data.instanceView=null,e.data.sprites.length=0,e.data.visible.length=0},onResize:function(t,e){Es(t,e)},onViewportPosition:function(t,e){Es(t,e)},customFunctions:{...ei}};async function r1(t,e){let{device:n}=t,{descs:r,names:i}=e.refs.spritesheet.data.spritesheet,o=n.createBuffer({size:128,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a=32,f=new ArrayBuffer(a*r.length),h=new Float32Array(f);for(let j=0;j<r.length;j++){let H=r[j],W=j*8;h[W+0]=H.UvOrigin[0],h[W+1]=H.UvOrigin[1],h[W+2]=H.UvSpan[0],h[W+3]=H.UvSpan[1],h[W+4]=H.FrameSize[0],h[W+5]=H.FrameSize[1],h[W+6]=H.CenterOffset[0],h[W+7]=H.CenterOffset[1]}let v=n.createBuffer({label:"sprite desc table",size:Math.max(16,f.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});n.queue.writeBuffer(v,0,f);let d=1024,D=n.createBuffer({label:"sprite instances",size:Re*d,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),C=new ArrayBuffer(Re*d),k=new DataView(C),R=n.createShaderModule({code:As}),q=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}}]}),V=n.createPipelineLayout({bindGroupLayouts:[q]}),X={arrayStride:Re,stepMode:"instance",attributes:[{shaderLocation:0,offset:ni,format:"float32x2"},{shaderLocation:1,offset:ii,format:"float32x2"},{shaderLocation:2,offset:oi,format:"float32x2"},{shaderLocation:3,offset:fr,format:"float32x4"},{shaderLocation:4,offset:Gs,format:"uint32"},{shaderLocation:5,offset:Ls,format:"float32"},{shaderLocation:6,offset:Rs,format:"float32"}]},$=n.createRenderPipeline({layout:V,vertex:{module:R,entryPoint:"vs_main",buffers:[X]},fragment:{module:R,entryPoint:"fs_main",targets:[{format:Vt(t),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-strip",cullMode:"none"},multisample:{count:1}}),Q=n.createBindGroup({layout:q,entries:[{binding:0,resource:{buffer:o}},{binding:1,resource:e.refs.spritesheet.data.colorTexture.sampler},{binding:2,resource:e.refs.spritesheet.data.colorTexture.view},{binding:3,resource:{buffer:v}}]});return{sprites:[],visible:[],visibleCount:0,viewRect:{x:0,y:0,w:0,h:0},spriteBuf:v,uniformBuffer:o,instanceCap:d,instanceView:k,instanceBuf:D,instanceStaging:C,pipeline:$,bindGroup:Q}}function n1(t,e,n){let{instanceCap:r}=e.data;if(n<=r)return;let i=r;for(i===0&&(i=1024);i<n;)i*=2;e.data.instanceBuf.destroy(),e.data.instanceBuf=t.device.createBuffer({size:Re*i,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),e.data.instanceStaging=new ArrayBuffer(Re*i),e.data.instanceView=new DataView(e.data.instanceStaging),e.data.instanceCap=i}function i1(t,e,n){let{device:r,context:i}=t,{instanceView:o,instanceBuf:a,instanceStaging:f,pipeline:h,bindGroup:v}=e.data,{descs:d}=e.refs.spritesheet.data.spritesheet,D=e.data.viewRect;D.x=t.viewport.position[0],D.y=t.viewport.position[1],D.w=t.viewport.width,D.h=t.viewport.height,e.data.visibleCount=0;for(let R of e.data.sprites){let q=d[R.spriteID];if(q){if(!e.options.isScreenSpace){let V=q.FrameSize[0]*R.sizeX*R.scale[0]*.5,X=q.FrameSize[1]*R.sizeY*R.scale[1]*.5,$=Math.hypot(V,X),Q=R.position[0],j=R.position[1];if(Q+$<D.x||Q-$>D.x+D.w||j+$<D.y||j-$>D.y+D.h)continue}e.data.visible[e.data.visibleCount]=R,e.data.visibleCount++}}n1(t,e,e.data.visibleCount);for(let R=0;R<e.data.visibleCount;R++){let q=R*Re,V=e.data.visible[R],X=V.tint;o.setFloat32(q+ni+0,V.position[0],!0),o.setFloat32(q+ni+4,V.position[1],!0),o.setFloat32(q+ii+0,V.sizeX,!0),o.setFloat32(q+ii+4,V.sizeY,!0),o.setFloat32(q+oi+0,V.scale[0],!0),o.setFloat32(q+oi+4,V.scale[1],!0),o.setFloat32(q+fr+0,X[0],!0),o.setFloat32(q+fr+4,X[1],!0),o.setFloat32(q+fr+8,X[2],!0),o.setFloat32(q+fr+12,X[3],!0),o.setUint32(q+Gs,V.spriteID>>>0,!0),o.setFloat32(q+Ls,V.opacity,!0),o.setFloat32(q+Rs,V.rotation,!0)}r.queue.writeBuffer(a,0,f,0,e.data.visibleCount*Re);let C=e.options.loadOp||"load",k=n.beginRenderPass({label:"sprite renderpass",colorAttachments:[{view:e.refs.color,clearValue:t.clearValue,loadOp:C,storeOp:"store"}]});k.setPipeline(h),k.setBindGroup(0,v),k.setVertexBuffer(0,a),e.data.visibleCount&&k.draw(4,e.data.visibleCount,0,0),k.end()}function Es(t,e){let{device:n,viewport:r}=t,i=r.width/r.zoom,o=r.height/r.zoom;Tt.ortho(0,i,o,0,-10,10,zs),e.options.isScreenSpace?ue.set(0,0,0,ri):ue.set(-pe(r.position[0]),-pe(r.position[1]),0,ri),Tt.translation(ri,Is),n.queue.writeBuffer(e.data.uniformBuffer,0,Is.buffer),n.queue.writeBuffer(e.data.uniformBuffer,64,zs.buffer)}var ai={};un(ai,{addSprite:()=>o1,clear:()=>s1,removeSprite:()=>a1,setSpriteName:()=>u1,setSpriteOpacity:()=>l1,setSpritePosition:()=>f1,setSpriteRotation:()=>h1,setSpriteScale:()=>v1,setSpriteTint:()=>c1});function o1(t,e,n,r,i,o,a,f){let{idByName:h}=e.refs.spritesheet.data;return e.data.sprites.push({position:Gt.clone(r),sizeX:1,sizeY:1,scale:Gt.clone(i),rotation:f,opacity:a,tint:Ce.clone(o),spriteID:h.get(n),id:Pe()}),e.data.sprites.at(-1).id}function a1(t,e,n){let r=e.data.sprites;for(let i=0;i<r.length;i++)if(r[i].id===n){r[i]=r[r.length-1],r.pop();return}}function s1(t,e){e.data.sprites.length=0}function u1(t,e,n,r){let i=e.data.sprites.find(a=>a.id===n);if(!i)return;let{idByName:o}=e.refs.spritesheet.data;i.spriteID=o.get(r)}function f1(t,e,n,r){let i=e.data.sprites.find(o=>o.id===n);i&&Gt.copy(r,i.position)}function c1(t,e,n,r){let i=e.data.sprites.find(o=>o.id===n);i&&Ce.copy(r,i.tint)}function l1(t,e,n,r){let i=e.data.sprites.find(o=>o.id===n);i&&(i.opacity=r)}function h1(t,e,n,r){let i=e.data.sprites.find(o=>o.id===n);i&&(i.rotation=r)}function v1(t,e,n,r){let i=e.data.sprites.find(o=>o.id===n);i&&Gt.copy(r,i.scale)}var qs="struct ViewParams{view:mat4x4<f32>,proj:mat4x4<f32>};@group(0)@binding(0)var<uniform> uView:ViewParams;@group(0)@binding(1)var uSampler:sampler;@group(0)@binding(2)var uTex:texture_2d<f32>;struct SpriteDesc{uvOrigin:vec2<f32>,uvSpan:vec2<f32>,frameSize:vec2<f32>,centerOffset:vec2<f32>,};@group(0)@binding(3)var<storage,read>Sprites:array<SpriteDesc>;@group(0)@binding(4)var emissiveTexture:texture_2d<f32>;struct VSOut{@builtin(position)pos:vec4<f32>,@location(0)uv:vec2<f32>,@location(1)tint:vec4<f32>,@location(2)opacity:f32,};const corners=array<vec2<f32>,4>(vec2<f32>(-0.5,-0.5),vec2<f32>(0.5,-0.5),vec2<f32>(-0.5,0.5),vec2<f32>(0.5,0.5),);const uvBase=array<vec2<f32>,4>(vec2<f32>(0.0,0.0),vec2<f32>(1.0,0.0),vec2<f32>(0.0,1.0),vec2<f32>(1.0,1.0),);struct GBufferOutput{@location(0)color:vec4<f32>,@location(1)emissive:vec4<f32>,}@vertex fn vs_main(@builtin(vertex_index)vid:u32,@location(0)i_pos:vec2<f32>,@location(1)i_size:vec2<f32>,@location(2)i_scale:vec2<f32>,@location(3)i_tint:vec4<f32>,@location(4)i_spriteId:u32,@location(5)i_opacity:f32,@location(6)i_rotation:f32)->VSOut{let rot=i_rotation;let c=cos(rot);let s=sin(rot);let d=Sprites[i_spriteId];let corner=corners[vid];let sizePx=d.frameSize*i_size*i_scale;var local=corner*sizePx;local+=d.centerOffset*i_scale;let rotated=vec2<f32>(local.x*c-local.y*s,local.x*s+local.y*c);let world=vec4<f32>(rotated+i_pos,0.0,1.0);var out:VSOut;out.pos=uView.proj*uView.view*world;out.uv=d.uvOrigin+d.uvSpan*uvBase[vid];out.tint=i_tint;out.opacity=i_opacity;return out;}@fragment fn fs_main(in:VSOut)->GBufferOutput{var output:GBufferOutput;let texel=textureSample(uTex,uSampler,in.uv);output.color=vec4<f32>(texel.rgb*(1.0-in.tint.a)+(in.tint.rgb*in.tint.a),texel.a*in.opacity);let emissive=textureSample(emissiveTexture,uSampler,in.uv);output.emissive=vec4(emissive.rgb,1.0)*emissive.a;return output;}";var si=ue.create(0,0,0),Ns=Tt.identity(),Vs=Tt.identity(),Oe=64,ui=0,fi=8,ci=16,cr=24,Cs=40,ms=44,Ys=48,Xs={type:"cobalt:spriteHDR",onInit:async function(t,e={}){return p1(t,e)},onRun:function(t,e,n){d1(t,e,n)},onDestroy:function(t,e){try{e.data.instanceBuf?.destroy()}catch{}try{e.data.spriteBuf?.destroy()}catch{}try{e.data.uniformBuffer?.destroy()}catch{}e.data.pipeline=null,e.data.bindGroup=null,e.data.bindGroupLayout=null,e.data.instanceStaging=null,e.data.instanceView=null,e.data.sprites.length=0,e.data.visible.length=0},onResize:function(t,e){ks(t,e)},onViewportPosition:function(t,e){ks(t,e)},customFunctions:{...ai}};async function p1(t,e){let{device:n}=t,{descs:r,names:i}=e.refs.spritesheet.data.spritesheet,o=n.createBuffer({size:128,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a=32,f=new ArrayBuffer(a*r.length),h=new Float32Array(f);for(let H=0;H<r.length;H++){let W=r[H],at=H*8;h[at+0]=W.UvOrigin[0],h[at+1]=W.UvOrigin[1],h[at+2]=W.UvSpan[0],h[at+3]=W.UvSpan[1],h[at+4]=W.FrameSize[0],h[at+5]=W.FrameSize[1],h[at+6]=W.CenterOffset[0],h[at+7]=W.CenterOffset[1]}let v=n.createBuffer({label:"spriteHDR desc table",size:Math.max(16,f.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});n.queue.writeBuffer(v,0,f);let d=1024,D=n.createBuffer({label:"spriteHDR instances",size:Oe*d,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),C=new ArrayBuffer(Oe*d),k=new DataView(C),R=n.createShaderModule({code:qs}),q=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}]}),V=n.createPipelineLayout({bindGroupLayouts:[q]}),X={arrayStride:Oe,stepMode:"instance",attributes:[{shaderLocation:0,offset:ui,format:"float32x2"},{shaderLocation:1,offset:fi,format:"float32x2"},{shaderLocation:2,offset:ci,format:"float32x2"},{shaderLocation:3,offset:cr,format:"float32x4"},{shaderLocation:4,offset:Cs,format:"uint32"},{shaderLocation:5,offset:ms,format:"float32"},{shaderLocation:6,offset:Ys,format:"float32"}]},$=n.createRenderPipeline({layout:V,vertex:{module:R,entryPoint:"vs_main",buffers:[X]},fragment:{module:R,entryPoint:"fs_main",targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}},{format:"rgba16float"}]},primitive:{topology:"triangle-strip",cullMode:"none"},multisample:{count:1}}),Q=q,j=n.createBindGroup({layout:q,entries:[{binding:0,resource:{buffer:o}},{binding:1,resource:e.refs.spritesheet.data.colorTexture.sampler},{binding:2,resource:e.refs.spritesheet.data.colorTexture.view},{binding:3,resource:{buffer:v}},{binding:4,resource:e.refs.spritesheet.data.emissiveTexture.view}]});return{sprites:[],visible:[],visibleCount:0,viewRect:{x:0,y:0,w:0,h:0},spriteBuf:v,uniformBuffer:o,instanceCap:d,instanceView:k,instanceBuf:D,instanceStaging:C,pipeline:$,bindGroup:j}}function g1(t,e,n){let{instanceCap:r}=e.data;if(n<=r)return;let i=r;for(i===0&&(i=1024);i<n;)i*=2;e.data.instanceBuf.destroy(),e.data.instanceBuf=t.device.createBuffer({size:Oe*i,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),e.data.instanceStaging=new ArrayBuffer(Oe*i),e.data.instanceView=new DataView(e.data.instanceStaging),e.data.instanceCap=i}function d1(t,e,n){let{device:r,context:i}=t,{instanceView:o,instanceBuf:a,instanceStaging:f,pipeline:h,bindGroup:v}=e.data,{descs:d}=e.refs.spritesheet.data.spritesheet,D=e.data.viewRect;D.x=t.viewport.position[0],D.y=t.viewport.position[1],D.w=t.viewport.width,D.h=t.viewport.height,e.data.visibleCount=0;for(let R of e.data.sprites){let q=d[R.spriteID];if(q){if(!e.options.isScreenSpace){let V=q.FrameSize[0]*R.sizeX*R.scale[0]*.5,X=q.FrameSize[1]*R.sizeY*R.scale[1]*.5,$=Math.hypot(V,X),Q=R.position[0],j=R.position[1];if(Q+$<D.x||Q-$>D.x+D.w||j+$<D.y||j-$>D.y+D.h)continue}e.data.visible[e.data.visibleCount]=R,e.data.visibleCount++}}g1(t,e,e.data.visibleCount);for(let R=0;R<e.data.visibleCount;R++){let q=R*Oe,V=e.data.visible[R],X=V.tint;o.setFloat32(q+ui+0,V.position[0],!0),o.setFloat32(q+ui+4,V.position[1],!0),o.setFloat32(q+fi+0,V.sizeX,!0),o.setFloat32(q+fi+4,V.sizeY,!0),o.setFloat32(q+ci+0,V.scale[0],!0),o.setFloat32(q+ci+4,V.scale[1],!0),o.setFloat32(q+cr+0,X[0],!0),o.setFloat32(q+cr+4,X[1],!0),o.setFloat32(q+cr+8,X[2],!0),o.setFloat32(q+cr+12,X[3],!0),o.setUint32(q+Cs,V.spriteID>>>0,!0),o.setFloat32(q+ms,V.opacity,!0),o.setFloat32(q+Ys,V.rotation,!0)}r.queue.writeBuffer(a,0,f,0,e.data.visibleCount*Oe);let C=e.options.loadOp||"load",k=n.beginRenderPass({label:"spriteHDR renderpass",colorAttachments:[{view:e.refs.color.data.view,clearValue:t.clearValue,loadOp:C,storeOp:"store"},{view:e.refs.emissive.data.view,clearValue:t.clearValue,loadOp:"clear",storeOp:"store"}]});k.setPipeline(h),k.setBindGroup(0,v),k.setVertexBuffer(0,a),e.data.visibleCount&&k.draw(4,e.data.visibleCount,0,0),k.end()}function ks(t,e){let{device:n,viewport:r}=t,i=r.width/r.zoom,o=r.height/r.zoom;Tt.ortho(0,i,o,0,-10,10,Ns),e.options.isScreenSpace?ue.set(0,0,0,si):ue.set(-pe(r.position[0]),-pe(r.position[1]),0,si),Tt.translation(si,Vs),n.queue.writeBuffer(e.data.uniformBuffer,0,Vs.buffer),n.queue.writeBuffer(e.data.uniformBuffer,64,Ns.buffer)}function Yr(t){let e=t.meta.size.w,n=t.meta.size.h,r=Object.keys(t.frames).sort(),i=new Array(r.length);for(let o=0;o<r.length;o++){let a=t.frames[r[o]],f=a.frame.x,h=a.frame.y,v=a.frame.w,d=a.frame.h,D=f/e,C=h/n,k=v/e,R=d/n,q=a.sourceSize.w,V=a.sourceSize.h,X=a.spriteSourceSize.x,$=a.spriteSourceSize.y,Q=X+v*.5-q*.5,j=$+d*.5-V*.5;i[o]={UvOrigin:[D,C],UvSpan:[k,R],FrameSize:[v,d],CenterOffset:[Q,j]}}return{descs:i,names:r}}var Hs={type:"cobalt:spritesheet",onInit:async function(t,e={}){return w1(t,e)},onRun:function(t,e,n){},onDestroy:function(t,e){x1(e)},onResize:function(t,e){},onViewportPosition:function(t,e){}};async function w1(t,e){let{canvas:n,device:r}=t,i,o,a,f=e.options.format||"rgba8unorm";n?(i=await fetch(e.options.spriteSheetJsonUrl),i=await i.json(),i=Yr(i),o=await ve(t,"sprite",e.options.colorTextureUrl,f),a=await ve(t,"emissive sprite",e.options.emissiveTextureUrl,f),n.style.imageRendering="pixelated"):(i=Yr(e.options.spriteSheetJson),o=await he(t,"sprite",e.options.colorTexture,f),a=await he(t,"emissive sprite",e.options.emissiveTexture,f));let h=new Map(i.names.map((v,d)=>[v,d]));return{colorTexture:o,emissiveTexture:a,spritesheet:i,idByName:h}}function x1(t){t.data.colorTexture.texture.destroy(),t.data.emissiveTexture.texture.destroy()}var li="struct TransformData{viewOffset:vec2<f32>,viewportSize:vec2<f32>,inverseAtlasTextureSize:vec2<f32>,tileSize:f32,inverseTileSize:f32,};struct TileScroll{scrollScale:vec2<f32>};const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@binding(0)@group(0)var<uniform> myScroll:TileScroll;@binding(1)@group(0)var tileTexture:texture_2d<f32>;@binding(2)@group(0)var tileSampler:sampler;@binding(0)@group(1)var<uniform> transformUBO:TransformData;@binding(1)@group(1)var atlasTexture:texture_2d<f32>;@binding(2)@group(1)var atlasSampler:sampler;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>};@vertex fn vs_main(@builtin(instance_index)i_id:u32,@builtin(vertex_index)VertexIndex:u32)->Fragment{var vertexPosition=vec2<f32>(positions[VertexIndex]);var vertexTexCoord=vec2<f32>(uvs[VertexIndex]);var output:Fragment;let inverseTileTextureSize=1/vec2<f32>(textureDimensions(tileTexture,0));var scrollScale=myScroll.scrollScale;var viewOffset:vec2<f32>=transformUBO.viewOffset*scrollScale;let PixelCoord=(vertexTexCoord*transformUBO.viewportSize)+viewOffset;output.TexCoord=PixelCoord/transformUBO.tileSize;output.Position=vec4<f32>(vertexPosition,0.0,1.0);return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>)->@location(0)vec4<f32>{var tilemapCoord=floor(TexCoord);var u_tilemapSize=vec2<f32>(textureDimensions(tileTexture,0));var tileFoo=fract((tilemapCoord+vec2<f32>(0.5,0.5))/u_tilemapSize);var tile=floor(textureSample(tileTexture,tileSampler,tileFoo)*255.0);if(tile.x==255&&tile.y==255){discard;}var u_tilesetSize=vec2<f32>(textureDimensions(atlasTexture,0))/transformUBO.tileSize;let u_tileUVMinBounds=vec2<f32>(0.5/transformUBO.tileSize,0.5/transformUBO.tileSize);let u_tileUVMaxBounds=vec2<f32>((transformUBO.tileSize-0.5)/transformUBO.tileSize,(transformUBO.tileSize-0.5)/transformUBO.tileSize);var texcoord=clamp(fract(TexCoord),u_tileUVMinBounds,u_tileUVMaxBounds);var tileCoord=(tile.xy+texcoord)/u_tilesetSize;var color=textureSample(atlasTexture,atlasSampler,tileCoord);if(color.a<=0.1){discard;}return color;}";var xe=new Float32Array(8),$s={type:"cobalt:tileAtlas",onInit:async function(t,e={}){return M1(t,e)},onRun:function(t,e,n){},onDestroy:function(t,e){y1(e)},onResize:function(t,e){Zs(t,e)},onViewportPosition:function(t,e){Zs(t,e)}};async function M1(t,e){let{canvas:n,device:r}=t,i=e.options.format||"rgba8unorm",o;n?o=await ve(t,"tile atlas",e.options.textureUrl,i):o=await he(t,"tile atlas",e.options.texture,i);let a=r.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),f=r.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),h=r.createBindGroup({layout:f,entries:[{binding:0,resource:{buffer:a}},{binding:1,resource:o.view},{binding:2,resource:o.sampler}]}),v=r.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{}},{binding:1,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),d=r.createPipelineLayout({bindGroupLayouts:[v,f]});return{pipeline:r.createRenderPipeline({label:"tileatlas",vertex:{module:r.createShaderModule({code:li}),entryPoint:"vs_main",buffers:[]},fragment:{module:r.createShaderModule({code:li}),entryPoint:"fs_main",targets:[{format:e.options.outputFormat||Vt(t),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:d}),uniformBuffer:a,atlasBindGroup:h,atlasMaterial:o,tileBindGroupLayout:v,tileSize:e.options.tileSize,tileScale:e.options.tileScale}}function y1(t){t.data.atlasMaterial.texture.destroy(),t.data.atlasMaterial.texture=void 0}function Zs(t,e){xe[0]=pe(t.viewport.position[0]),xe[1]=pe(t.viewport.position[1]);let n=e.data,{tileScale:r,tileSize:i}=n,o=t.viewport.width/t.viewport.zoom,a=t.viewport.height/t.viewport.zoom;xe[2]=o/r,xe[3]=a/r,xe[4]=1/n.atlasMaterial.texture.width,xe[5]=1/n.atlasMaterial.texture.height,xe[6]=i,xe[7]=1/i,t.device.queue.writeBuffer(n.uniformBuffer,0,xe,0,8)}var Ks={type:"cobalt:tileHDR",onInit:async function(t,e={}){return _1(t,e)},onRun:function(t,e,n){b1(t,e,n)},onDestroy:function(t,e){Ws(e)},onResize:function(t,e){},onViewportPosition:function(t,e){},customFunctions:{setTexture:async function(t,e,n){let{canvas:r,device:i}=t;Ws(e);let o=e.options.format||Vt(t),a;r?(e.options.textureUrl=n,a=await ve(t,"tile map",n,o)):a=await he(t,"tile map",n,o);let f=i.createBindGroup({layout:e.refs.tileAtlas.data.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:e.data.uniformBuffer}},{binding:1,resource:a.view},{binding:2,resource:a.sampler}]});e.data.bindGroup=f,e.data.material=a}}};async function _1(t,e){let{canvas:n,device:r}=t,i,o=e.options.format||Vt(t);n?i=await ve(t,"tile map",e.options.textureUrl,o):i=await he(t,"tile map",e.options.texture,o);let a=new Float32Array([e.options.scrollScale,e.options.scrollScale]),f=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,h={size:a.byteLength,usage:f,mappedAtCreation:!0},v=r.createBuffer(h);return new Float32Array(v.getMappedRange()).set(a),v.unmap(),{bindGroup:r.createBindGroup({layout:e.refs.tileAtlas.data.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:v}},{binding:1,resource:i.view},{binding:2,resource:i.sampler}]}),material:i,uniformBuffer:v,scrollScale:e.options.scrollScale}}function b1(t,e,n){if(!e.data.material.texture)return;let{device:r}=t,i=e.options.loadOp||"load",o=n.beginRenderPass({label:"tile",colorAttachments:[{view:e.refs.out.data?.view||e.refs.out,clearValue:t.clearValue,loadOp:i,storeOp:"store"}]}),a=e.refs.tileAtlas.data;o.setPipeline(a.pipeline),o.setBindGroup(0,e.data.bindGroup),o.setBindGroup(1,a.atlasBindGroup),o.draw(3),o.end()}function Ws(t){t.data.material.texture.destroy(),t.data.material.texture=void 0}async function Ov(t,e,n){let r,i,o,a;return t.sdlWindow&&t.gpu?(i=t.gpu,r=await(await i.create(["verbose=1","enable-dawn-features=allow_unsafe_apis"]).requestAdapter()).requestDevice({requiredFeatures:["texture-component-swizzle"]}),o=i.renderGPUDeviceToWindow({device:r,window:t.sdlWindow}),global.GPUBufferUsage=i.GPUBufferUsage,global.GPUShaderStage=i.GPUShaderStage,global.GPUTextureUsage=i.GPUTextureUsage):(a=t,r=await(await navigator.gpu?.requestAdapter({powerPreference:"high-performance"}))?.requestDevice(),i=navigator.gpu,o=a.getContext("webgpu"),o.configure({device:r,format:navigator.gpu?.getPreferredCanvasFormat(),alphaMode:"opaque"})),{nodeDefs:{"cobalt:tileAtlas":$s,"cobalt:spritesheet":Hs,"cobalt:fbTexture":zi,"cobalt:sprite":Os,"cobalt:bloom":di,"cobalt:composite":Us,"cobalt:spriteHDR":Xs,"cobalt:tileHDR":Ks,"cobalt:displacement":Ui,"cobalt:fbBlit":Ai,"cobalt:primitives":Fs,"cobalt:light":ki},nodes:[],defaultTextureViewRefs:[],canvas:a,device:r,context:o,gpu:i,clearValue:{r:0,g:0,b:0,a:1},viewport:{width:e,height:n,zoom:1,position:[0,0]}}}function qv(t,e){if(!e?.type)throw new Error("Can't define a new node missing a type.");t.nodeDefs[e.type]=e}async function Nv(t,e){let n=t.nodeDefs[e?.type];if(!n)throw new Error("Can't initialize a new node missing a type.");let r={type:e.type,refs:e.refs||{},options:e.options||{},data:{},enabled:!0};for(let o in r.refs)r.refs[o]==="FRAME_TEXTURE_VIEW"&&(t.defaultTextureViewRefs.push({node:r,refName:o}),r.refs[o]=Qs(t));r.data=await n.onInit(t,r);let i=n.customFunctions||{};for(let o in i)r[o]=function(...a){return i[o](t,r,...a)};return t.nodes.push(r),r}function Vv(t){let{device:e,context:n}=t,r=e.createCommandEncoder(),i=Qs(t);for(let o of t.defaultTextureViewRefs)o.node.refs[o.refName]=i;for(let o of t.nodes){if(!o.enabled)continue;t.nodeDefs[o.type].onRun(t,o,r)}e.queue.submit([r.finish()]),t.canvas||t.context.swap()}function kv(t){for(let e of t.nodes)t.nodeDefs[e.type].onDestroy(t,e);t.nodes.length=0,t.defaultTextureViewRefs.length=0}function Cv(t,e,n){t.viewport.width=e,t.viewport.height=n;for(let r of t.nodes)t.nodeDefs[r.type].onResize(t,r)}function mv(t,e){t.viewport.position[0]=e[0]-t.viewport.width/2/t.viewport.zoom,t.viewport.position[1]=e[1]-t.viewport.height/2/t.viewport.zoom;for(let n of t.nodes)t.nodeDefs[n.type].onViewportPosition(t,n)}function Qs(t){return t.canvas?t.context.getCurrentTexture().createView():t.context.getCurrentTextureView()}export{ne as createTexture,he as createTextureFromBuffer,ve as createTextureFromUrl,qv as defineNode,Vv as draw,Qs as getCurrentTextureView,Vt as getPreferredFormat,Ov as init,Nv as initNode,kv as reset,Cv as setViewportDimensions,mv as setViewportPosition};
|
|
284
|
+
`});this.renderPipeline=t.device.createRenderPipeline({label:"LightsRenderer renderpipeline",layout:"auto",vertex:{module:n,entryPoint:"main_vertex"},fragment:{module:n,entryPoint:"main_fragment",targets:[{format:this.targetTexture.format}]},primitive:{cullMode:"none",topology:"triangle-strip"}});let r=this.renderPipeline.getBindGroupLayout(0);this.bindgroup0=t.device.createBindGroup({label:"LightsRenderer bindgroup 0",layout:r,entries:[{binding:0,resource:{buffer:this.uniformsBufferGpu}},{binding:1,resource:{buffer:this.lightsBuffer.gpuBuffer}},{binding:2,resource:this.lightsTexture.texture.createView({label:"LightsRenderer lightsTexture view"})},{binding:3,resource:t.device.createSampler({label:"LightsRenderer sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:t.lightsTextureProperties.filtering,minFilter:t.lightsTextureProperties.filtering})}]}),this.bindgroup1=this.buildBindgroup1(t.albedo),this.renderBundle=this.buildRenderBundle()}computeLightsTexture(t){this.lightsTexture.update(t)}render(t,n){let r=new ArrayBuffer(80);new Float32Array(r,0,16).set(n),new Float32Array(r,64,3).set(this.ambientLight),this.device.queue.writeBuffer(this.uniformsBufferGpu,0,r),t.executeBundles([this.renderBundle])}setAlbedo(t){this.bindgroup1=this.buildBindgroup1(t),this.renderBundle=this.buildRenderBundle()}setAmbientLight(t){this.ambientLight=[...t]}setObstacles(t){this.lightsTexture.setObstacles(t)}destroy(){this.uniformsBufferGpu.destroy(),this.lightsTexture.destroy()}buildBindgroup1(t){return this.device.createBindGroup({label:"LightsRenderer bindgroup 1",layout:this.renderPipeline.getBindGroupLayout(1),entries:[{binding:0,resource:t.view},{binding:1,resource:t.sampler}]})}buildRenderBundle(){let t=this.device.createRenderBundleEncoder({label:"LightsRenderer renderbundle encoder",colorFormats:[this.targetTexture.format]});return t.setPipeline(this.renderPipeline),t.setBindGroup(0,this.bindgroup0),t.setBindGroup(1,this.bindgroup1),t.draw(4),t.finish({label:"LightsRenderer renderbundle"})}};var gn={};hn(gn,{setAmbientLight:()=>bu,setLights:()=>yu,setOccluders:()=>_u});function yu(e,t,n){t.data.lights=n,t.data.lightsBufferNeedsUpdate=!0}function bu(e,t,n){t.data.lightsRenderer.setAmbientLight(n)}function _u(e,t,n){t.data.lightsRenderer.setObstacles(n),t.data.lightsTextureNeedsUpdate=!0}var br=class{invViewProjectionMatrix=Tt.identity();viewportSize={width:1,height:1};topLeft=[0,0];zoom=1;constructor(t){this.setViewportSize(t.viewportSize.width,t.viewportSize.height);let n=t.center??this.topLeft;this.setTopLeft(...n);let r=t.zoom??1;this.setZoom(r)}get invertViewProjectionMatrix(){return this.invViewProjectionMatrix}setViewportSize(t,n){this.viewportSize.width=t,this.viewportSize.height=n,this.updateMatrices()}setTopLeft(t,n){this.topLeft[0]=t,this.topLeft[1]=n,this.updateMatrices()}setZoom(t){this.zoom=t,this.updateMatrices()}updateMatrices(){Tt.identity(this.invViewProjectionMatrix),Tt.multiply(Tt.scaling([1,-1,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),Tt.multiply(Tt.translation([1,1,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),Tt.multiply(Tt.scaling([.5*this.viewportSize.width/this.zoom,.5*this.viewportSize.height/this.zoom,0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix),Tt.multiply(Tt.translation([this.topLeft[0],this.topLeft[1],0]),this.invViewProjectionMatrix,this.invViewProjectionMatrix)}};var Li={type:"cobalt:light",onInit:async function(e,t={}){return Su(e,t)},onRun:function(e,t,n){Tu(e,t,n)},onDestroy:function(e,t){Bu(t)},onResize:function(e,t){Pu(e,t)},onViewportPosition:function(e,t){t.data.viewport.setTopLeft(...e.viewport.position)},customFunctions:{...gn}};async function Su(e,t){let{device:n}=e,r=256,i=256,o=new ae(n,r),a=new br({viewportSize:{width:e.viewport.width,height:e.viewport.height},center:e.viewport.position,zoom:e.viewport.zoom}),f=new yr({device:n,albedo:{view:t.refs.in.data.view,sampler:t.refs.in.data.sampler},targetTexture:t.refs.out.data.texture,lightsBuffer:o,lightsTextureProperties:{resolutionPerLight:i,maxLightSize:i,antialiased:!1,filtering:"nearest",textureFormat:Vt(e)}});return{lightsBuffer:o,lightsBufferNeedsUpdate:!0,lightsTextureNeedsUpdate:!0,lightsRenderer:f,viewport:a,lights:[]}}function Tu(e,t,n){t.data.lightsBufferNeedsUpdate&&(t.data.lightsBuffer.setLights(t.data.lights),t.data.lightsBufferNeedsUpdate=!1,t.data.lightsTextureNeedsUpdate=!0);let r=t.data.lightsRenderer;t.data.lightsTextureNeedsUpdate&&(r.computeLightsTexture(n),t.data.lightsTextureNeedsUpdate=!1);let i=n.beginRenderPass({label:"light",colorAttachments:[{view:t.refs.out.data.view,clearValue:e.clearValue,loadOp:"load",storeOp:"store"}]});t.data.viewport.setZoom(e.viewport.zoom);let o=t.data.viewport.invertViewProjectionMatrix;r.render(i,o),i.end()}function Bu(e){e.data.lightsBuffer.destroy(),e.data.lightsRenderer.destroy()}function Pu(e,t){t.data.lightsRenderer.setAlbedo({view:t.refs.in.data.view,sampler:t.refs.in.data.sampler}),t.data.viewport.setViewportSize(e.viewport.width,e.viewport.height)}function ge(e){return e>=0?Math.round(e):e%.5===0?Math.floor(e):Math.round(e)}var Gi="struct TransformData{view:mat4x4<f32>,projection:mat4x4<f32>};@binding(0)@group(0)var<uniform> transformUBO:TransformData;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)Color:vec4<f32>,};@vertex fn vs_main(@location(0)vertexPosition:vec2<f32>,@location(1)vertexColor:vec4<f32>)->Fragment{var sx:f32=1.0;var sy:f32=1.0;var sz:f32=1.0;var rot:f32=0.0;var tx:f32=1.0;var ty:f32=1.0;var tz:f32=0;var s=sin(rot);var c=cos(rot);var scaleM:mat4x4<f32>=mat4x4<f32>(sx,0.0,0.0,0.0,0.0,sy,0.0,0.0,0.0,0.0,sz,0.0,0,0,0,1.0);var modelM:mat4x4<f32>=mat4x4<f32>(c,s,0.0,0.0,-s,c,0.0,0.0,0.0,0.0,1.0,0.0,tx,ty,tz,1.0)*scaleM;var output:Fragment;output.Position=transformUBO.projection*transformUBO.view*modelM*vec4<f32>(vertexPosition,0.0,1.0);output.Color=vertexColor;return output;}@fragment fn fs_main(@location(0)Color:vec4<f32>)->@location(0)vec4<f32>{return Color;}";var vs=vi(co(),1);var hs=vi(ls(),1);function ti(e,t){if(!Array.isArray(e))throw new Error("poly-to-pslg: Error, invalid polygon");if(e.length===0)return{points:[],edges:[]};t=t||{};var n=!0;"nested"in t?n=!!t.nested:e[0].length===2&&typeof e[0][0]=="number"&&(n=!1),n||(e=[e]);for(var r=[],i=[],o=0;o<e.length;++o)for(var a=e[o],f=r.length,h=0;h<a.length;++h)r.push(a[h]),i.push([f+h,f+(h+1)%a.length]);var v="clean"in t?!0:!!t.clean;return v&&(0,hs.default)(r,i),{points:r,edges:i}}var ps={line:Ge,save:function(e,t){t.data.transforms.push(ye.clone(t.data.transforms.at(-1)))},restore:function(e,t){t.data.transforms.length>1&&t.data.transforms.pop()},translate:function(e,t,n){let r=t.data.transforms.at(-1);ye.translate(r,n,r)},rotate:function(e,t,n){let r=t.data.transforms.at(-1);ye.rotate(r,n,r)},scale:function(e,t,n){let r=t.data.transforms.at(-1);ye.scale(r,n,r)},strokePath:function(e,t,n,r,i=1){for(let o of n)Ge(e,t,o[0],o[1],r,i)},filledPath:function(e,t,n,r){let i=ti(n),o=(0,vs.default)(i.points,i.edges,{exterior:!1}),a=t.data.transforms.at(-1),f=t.data.vertexCount*6,h=t.data.vertexCount*6,v=o.length*3*6;t.data.vertices=Hr(Float32Array,t.data.vertices,h,v);let d=Lt.create();for(let D of o)Lt.transformMat3(n[D[0]],a,d),t.data.vertices[f+0]=d[0],t.data.vertices[f+1]=d[1],t.data.vertices[f+2]=r[0],t.data.vertices[f+3]=r[1],t.data.vertices[f+4]=r[2],t.data.vertices[f+5]=r[3],Lt.transformMat3(n[D[1]],a,d),t.data.vertices[f+6]=d[0],t.data.vertices[f+7]=d[1],t.data.vertices[f+8]=r[0],t.data.vertices[f+9]=r[1],t.data.vertices[f+10]=r[2],t.data.vertices[f+11]=r[3],Lt.transformMat3(n[D[2]],a,d),t.data.vertices[f+12]=d[0],t.data.vertices[f+13]=d[1],t.data.vertices[f+14]=r[0],t.data.vertices[f+15]=r[1],t.data.vertices[f+16]=r[2],t.data.vertices[f+17]=r[3],f+=18;t.data.vertexCount+=3*o.length,t.data.dirty=!0},ellipse:function(e,t,n,r,i,o,a,f=1){let[h,v]=n,d=2*Math.PI/o;for(let D=0;D<o;D++){let m=D*d,C=(D+1)*d,R=h+r*Math.cos(m),N=v+i*Math.sin(m),V=h+r*Math.cos(C),Y=v+i*Math.sin(C);Ge(e,t,[R,N],[V,Y],a,f)}},filledEllipse:function(e,t,n,r,i,o,a){let[f,h]=n,v=2*Math.PI/o,d=t.data.vertexCount*6,D=o*3*6;t.data.vertices=Hr(Float32Array,t.data.vertices,d,D);let m=t.data.transforms.at(-1);for(let C=0;C<o;C++){let R=C*v,N=(C+1)*v,V=f+r*Math.cos(R),Y=h+i*Math.sin(R),K=f+r*Math.cos(N),Q=h+i*Math.sin(N),Z=t.data.vertexCount*6+C*18,W=Lt.transformMat3([f,h],m);t.data.vertices[Z+0]=W[0],t.data.vertices[Z+1]=W[1],t.data.vertices[Z+2]=a[0],t.data.vertices[Z+3]=a[1],t.data.vertices[Z+4]=a[2],t.data.vertices[Z+5]=a[3],Lt.transformMat3([V,Y],m,W),t.data.vertices[Z+6]=W[0],t.data.vertices[Z+7]=W[1],t.data.vertices[Z+8]=a[0],t.data.vertices[Z+9]=a[1],t.data.vertices[Z+10]=a[2],t.data.vertices[Z+11]=a[3],Lt.transformMat3([K,Q],m,W),t.data.vertices[Z+12]=W[0],t.data.vertices[Z+13]=W[1],t.data.vertices[Z+14]=a[0],t.data.vertices[Z+15]=a[1],t.data.vertices[Z+16]=a[2],t.data.vertices[Z+17]=a[3]}t.data.vertexCount+=3*o,t.data.dirty=!0},box:function(e,t,n,r,i,o,a=1){let[f,h]=n,v=r/2,d=i/2,D=[f-v,h-d],m=[f+v,h-d],C=[f-v,h+d],R=[f+v,h+d];Ge(e,t,D,m,o,a),Ge(e,t,C,R,o,a),Ge(e,t,D,C,o,a),Ge(e,t,m,R,o,a)},filledBox:function(e,t,n,r,i,o){let[a,f]=n,h=r/2,v=i/2,d=t.data.transforms.at(-1),D=Lt.transformMat3([a-h,f-v],d),m=Lt.transformMat3([a+h,f-v],d),C=Lt.transformMat3([a-h,f+v],d),R=Lt.transformMat3([a+h,f+v],d),N=t.data.vertexCount*6,V=36;t.data.vertices=Hr(Float32Array,t.data.vertices,N,V);let Y=t.data.vertexCount*6;t.data.vertices[Y+0]=D[0],t.data.vertices[Y+1]=D[1],t.data.vertices[Y+2]=o[0],t.data.vertices[Y+3]=o[1],t.data.vertices[Y+4]=o[2],t.data.vertices[Y+5]=o[3],t.data.vertices[Y+6]=C[0],t.data.vertices[Y+7]=C[1],t.data.vertices[Y+8]=o[0],t.data.vertices[Y+9]=o[1],t.data.vertices[Y+10]=o[2],t.data.vertices[Y+11]=o[3],t.data.vertices[Y+12]=m[0],t.data.vertices[Y+13]=m[1],t.data.vertices[Y+14]=o[0],t.data.vertices[Y+15]=o[1],t.data.vertices[Y+16]=o[2],t.data.vertices[Y+17]=o[3],t.data.vertices[Y+18]=C[0],t.data.vertices[Y+19]=C[1],t.data.vertices[Y+20]=o[0],t.data.vertices[Y+21]=o[1],t.data.vertices[Y+22]=o[2],t.data.vertices[Y+23]=o[3],t.data.vertices[Y+24]=R[0],t.data.vertices[Y+25]=R[1],t.data.vertices[Y+26]=o[0],t.data.vertices[Y+27]=o[1],t.data.vertices[Y+28]=o[2],t.data.vertices[Y+29]=o[3],t.data.vertices[Y+30]=m[0],t.data.vertices[Y+31]=m[1],t.data.vertices[Y+32]=o[0],t.data.vertices[Y+33]=o[1],t.data.vertices[Y+34]=o[2],t.data.vertices[Y+35]=o[3],t.data.vertexCount+=6,t.data.dirty=!0},clear:function(e,t){t.data.vertexCount=0,t.data.transforms.length=1,ye.identity(t.data.transforms[0]),t.data.dirty=!0}};function Ge(e,t,n,r,i,o=1){let a=t.data.transforms.at(-1);n=Lt.transformMat3(n,a),r=Lt.transformMat3(r,a);let f=Lt.sub(r,n),h=Lt.normalize(f),v=Uc(h),d=o/2,D=t.data.vertexCount*6,m=t.data.vertexCount*6,C=36;t.data.vertices=Hr(Float32Array,t.data.vertices,m,C),t.data.vertices[D+0]=n[0]+v[0]*d,t.data.vertices[D+1]=n[1]+v[1]*d,t.data.vertices[D+2]=i[0],t.data.vertices[D+3]=i[1],t.data.vertices[D+4]=i[2],t.data.vertices[D+5]=i[3],t.data.vertices[D+6]=n[0]-v[0]*d,t.data.vertices[D+7]=n[1]-v[1]*d,t.data.vertices[D+8]=i[0],t.data.vertices[D+9]=i[1],t.data.vertices[D+10]=i[2],t.data.vertices[D+11]=i[3],t.data.vertices[D+12]=r[0]+v[0]*d,t.data.vertices[D+13]=r[1]+v[1]*d,t.data.vertices[D+14]=i[0],t.data.vertices[D+15]=i[1],t.data.vertices[D+16]=i[2],t.data.vertices[D+17]=i[3],t.data.vertices[D+18]=n[0]-v[0]*d,t.data.vertices[D+19]=n[1]-v[1]*d,t.data.vertices[D+20]=i[0],t.data.vertices[D+21]=i[1],t.data.vertices[D+22]=i[2],t.data.vertices[D+23]=i[3],t.data.vertices[D+24]=r[0]+v[0]*d,t.data.vertices[D+25]=r[1]+v[1]*d,t.data.vertices[D+26]=i[0],t.data.vertices[D+27]=i[1],t.data.vertices[D+28]=i[2],t.data.vertices[D+29]=i[3],t.data.vertices[D+30]=r[0]-v[0]*d,t.data.vertices[D+31]=r[1]-v[1]*d,t.data.vertices[D+32]=i[0],t.data.vertices[D+33]=i[1],t.data.vertices[D+34]=i[2],t.data.vertices[D+35]=i[3],t.data.vertexCount+=6,t.data.dirty=!0}function Hr(e,t,n,r){if(n+r<=t.length)return t;let i=t.length*2,o=16*1024*1024/t.BYTES_PER_ELEMENT;if(i>o)throw new Error("vertices exceed max array size");let a=new e(i);return a.set(t),a}function Uc(e){return[-e[1],e[0]]}var gs=fe.create(0,0,0),ds=Tt.identity(),ws=Tt.identity(),Ms={type:"cobalt:primitives",onInit:async function(e,t={}){return zc(e,t)},onRun:function(e,t,n){Ic(e,t,n)},onDestroy:function(e,t){Ec(t)},onResize:function(e,t){xs(e,t)},onViewportPosition:function(e,t){xs(e,t)},customFunctions:ps};async function zc(e,t){let{device:n}=e,r=new Float32Array(1024),i=n.createBuffer({size:r.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o=n.createBuffer({size:128,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a=n.createShaderModule({code:Gi}),f=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{}}]}),h=n.createPipelineLayout({bindGroupLayouts:[f]}),v=n.createBindGroup({layout:f,entries:[{binding:0,resource:{buffer:o}}]}),d=n.createRenderPipeline({label:"primitives",layout:h,vertex:{module:a,entryPoint:"vs_main",buffers:[{arrayStride:6*Float32Array.BYTES_PER_ELEMENT,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,format:"float32x4",offset:8}]}]},fragment:{module:a,entryPoint:"fs_main",targets:[{format:Vt(e),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"}});return{uniformBuffer:o,vertexBuffer:i,pipeline:d,bindGroup:v,vertexCount:0,dirty:!1,vertices:r,transforms:[ye.identity()]}}function Ic(e,t,n){if(t.data.vertexCount===0)return;let{device:r}=e;if(t.data.dirty){t.data.dirty=!1;let a=6*Float32Array.BYTES_PER_ELEMENT;t.data.vertices.buffer.byteLength>t.data.vertexBuffer.size&&(t.data.vertexBuffer.destroy(),t.data.vertexBuffer=r.createBuffer({size:t.data.vertices.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}));let f=t.data.vertexCount*a;if(f>t.data.vertexBuffer.size){console.error("too many primitives, bailing");return}e.device.queue.writeBuffer(t.data.vertexBuffer,0,t.data.vertices.buffer,0,f)}let i=t.options.loadOp||"load",o=n.beginRenderPass({label:"primitives",colorAttachments:[{view:t.refs.color,clearValue:e.clearValue,loadOp:i,storeOp:"store"}]});o.setPipeline(t.data.pipeline),o.setBindGroup(0,t.data.bindGroup),o.setVertexBuffer(0,t.data.vertexBuffer),o.draw(t.data.vertexCount),o.end()}function Ec(e){e.data.vertexBuffer.destroy(),e.data.vertexBuffer=null,e.data.uniformBuffer.destroy(),e.data.uniformBuffer=null,e.data.transforms.length=0}function xs(e,t){let{device:n}=e,r=e.viewport.width/e.viewport.zoom,i=e.viewport.height/e.viewport.zoom;Tt.ortho(0,r,i,0,-10,10,ds),fe.set(-e.viewport.position[0]-1,-e.viewport.position[1]-1,0,gs),Tt.translation(gs,ws),n.queue.writeBuffer(t.data.uniformBuffer,0,ws.buffer),n.queue.writeBuffer(t.data.uniformBuffer,64,ds.buffer)}var ei="struct BloomComposite{bloom_intensity:f32,bloom_combine_constant:f32,}@group(0)@binding(0)var mySampler:sampler;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var emissiveTexture:texture_2d<f32>;@group(0)@binding(3)var<uniform> composite_parameter:BloomComposite;struct VertexOutput{@builtin(position)Position:vec4<f32>,@location(0)fragUV:vec2<f32>,}const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vert_main(@builtin(vertex_index)VertexIndex:u32)->VertexOutput{var output:VertexOutput;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.fragUV=vec2<f32>(uvs[VertexIndex]);return output;}fn GTTonemap_point(x:f32)->f32{let m:f32=0.22;let a:f32=1.0;let c:f32=1.33;let P:f32=1.0;let l:f32=0.4;let l0:f32=((P-m)*l)/a;let S0:f32=m+l0;let S1:f32=m+a*l0;let C2:f32=(a*P)/(P-S1);let L:f32=m+a*(x-m);let T:f32=m*pow(x/m,c);let S:f32=P-(P-S1)*exp(-C2*(x-S0)/P);let w0:f32=1.0-smoothstep(0.0,m,x);var w2:f32=1.0;if(x<m+l){w2=0.0;}let w1:f32=1.0-w0-w2;return f32(T*w0+L*w1+S*w2);}fn GTTonemap(x:vec3<f32>)->vec3<f32>{return vec3<f32>(GTTonemap_point(x.r),GTTonemap_point(x.g),GTTonemap_point(x.b));}fn aces(x:vec3<f32>)->vec3<f32>{let a:f32=2.51;let b:f32=0.03;let c:f32=2.43;let d:f32=0.59;let e:f32=0.14;return clamp((x*(a*x+b))/(x*(c*x+d)+e),vec3<f32>(0.0),vec3<f32>(1.0));}@fragment fn frag_main(@location(0)fragUV:vec2<f32>)->@location(0)vec4<f32>{let hdr_color=textureSample(colorTexture,mySampler,fragUV);let bloom_color=textureSample(emissiveTexture,mySampler,fragUV);let combined_color=((bloom_color*composite_parameter.bloom_intensity)*composite_parameter.bloom_combine_constant);let mapped_color=GTTonemap(combined_color.rgb);let gamma_corrected_color=pow(mapped_color,vec3<f32>(1.0/2.2));return vec4<f32>(gamma_corrected_color+hdr_color.rgb,1.0);}";var ys={type:"cobalt:composite",onInit:async function(e,t={}){return Lc(e,t)},onRun:function(e,t,n){Gc(e,t,n)},onDestroy:function(e,t){},onResize:function(e,t){Rc(e,t)},onViewportPosition:function(e,t){}};function Lc(e,t){let{options:n,refs:r}=t,{device:i}=e,o=Vt(e),a=n.bloom_intensity??40,f=n.bloom_combine_constant??.68,h=new Float32Array([a,f]),v=i.createBuffer({label:"scene composite params buffer",size:h.byteLength,mappedAtCreation:!0,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});new Float32Array(v.getMappedRange()).set(h),v.unmap();let d=i.createRenderPipeline({label:"scene-composite",layout:"auto",vertex:{module:i.createShaderModule({code:ei}),entryPoint:"vert_main"},fragment:{module:i.createShaderModule({code:ei}),entryPoint:"frag_main",targets:[{format:o}]},primitive:{topology:"triangle-list"}});return{bindGroup:i.createBindGroup({layout:d.getBindGroupLayout(0),entries:[{binding:0,resource:r.hdr.data.sampler},{binding:1,resource:r.hdr.data.view},{binding:2,resource:r.bloom.data.mip_view[0]},{binding:3,resource:{buffer:v}}]}),pipeline:d,params_buf:v}}function Gc(e,t,n){let r=n.beginRenderPass({label:"scene-composite",colorAttachments:[{view:t.refs.combined.data.view,clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]}),{pipeline:i,bindGroup:o}=t.data;r.setPipeline(i),r.setBindGroup(0,o),r.draw(3),r.end()}function Rc(e,t){let{pipeline:n,params_buf:r}=t.data,{device:i}=e;t.data.bindGroup=i.createBindGroup({layout:n.getBindGroupLayout(0),entries:[{binding:0,resource:t.refs.hdr.data.sampler},{binding:1,resource:t.refs.hdr.data.view},{binding:2,resource:t.refs.bloom.data.mip_view[0]},{binding:3,resource:{buffer:r}}]})}var ri={};hn(ri,{addSprite:()=>Oc,clear:()=>Nc,removeSprite:()=>qc,setSpriteName:()=>Vc,setSpriteOpacity:()=>kc,setSpritePosition:()=>Cc,setSpriteRotation:()=>Xc,setSpriteScale:()=>Yc,setSpriteTint:()=>mc});function Oc(e,t,n,r,i,o,a,f){let{idByName:h}=t.refs.spritesheet.data;return t.data.sprites.push({position:Lt.clone(r),sizeX:1,sizeY:1,scale:Lt.clone(i),rotation:f,opacity:a,tint:me.clone(o),spriteID:h.get(n),id:Pe()}),t.data.sprites.at(-1).id}function qc(e,t,n){let r=t.data.sprites;for(let i=0;i<r.length;i++)if(r[i].id===n){r[i]=r[r.length-1],r.pop();return}}function Nc(e,t){t.data.sprites.length=0}function Vc(e,t,n,r){let i=t.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){i[a].spriteID=t.refs.spritesheet.data.idByName.get(r);return}}function Cc(e,t,n,r){let i=t.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){Lt.copy(r,i[a].position);return}}function mc(e,t,n,r){let i=t.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){me.copy(r,i[a].tint);return}}function kc(e,t,n,r){let i=t.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){i[a].opacity=r;return}}function Xc(e,t,n,r){let i=t.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){i[a].rotation=r;return}}function Yc(e,t,n,r){let i=t.data.sprites,o=i.length;for(let a=0;a<o;a++)if(i[a].id===n){Lt.copy(r,i[a].scale);return}}var bs="struct ViewParams{view:mat4x4<f32>,proj:mat4x4<f32>};@group(0)@binding(0)var<uniform> uView:ViewParams;@group(0)@binding(1)var uSampler:sampler;@group(0)@binding(2)var uTex:texture_2d<f32>;struct SpriteDesc{uvOrigin:vec2<f32>,uvSpan:vec2<f32>,frameSize:vec2<f32>,centerOffset:vec2<f32>,};@group(0)@binding(3)var<storage,read>Sprites:array<SpriteDesc>;struct VSOut{@builtin(position)pos:vec4<f32>,@location(0)uv:vec2<f32>,@location(1)tint:vec4<f32>,@location(2)opacity:f32,};const corners=array<vec2<f32>,4>(vec2<f32>(-0.5,-0.5),vec2<f32>(0.5,-0.5),vec2<f32>(-0.5,0.5),vec2<f32>(0.5,0.5),);const uvBase=array<vec2<f32>,4>(vec2<f32>(0.0,0.0),vec2<f32>(1.0,0.0),vec2<f32>(0.0,1.0),vec2<f32>(1.0,1.0),);@vertex fn vs_main(@builtin(vertex_index)vid:u32,@location(0)i_pos:vec2<f32>,@location(1)i_size:vec2<f32>,@location(2)i_scale:vec2<f32>,@location(3)i_tint:vec4<f32>,@location(4)i_spriteId:u32,@location(5)i_opacity:f32,@location(6)i_rotation:f32)->VSOut{let rot=i_rotation;let c=cos(rot);let s=sin(rot);let d=Sprites[i_spriteId];let corner=corners[vid];let sizePx=d.frameSize*i_size*i_scale;var local=corner*sizePx;local+=d.centerOffset*i_scale;let rotated=vec2<f32>(local.x*c-local.y*s,local.x*s+local.y*c);let world=vec4<f32>(rotated+i_pos,0.0,1.0);var out:VSOut;out.pos=uView.proj*uView.view*world;out.uv=d.uvOrigin+d.uvSpan*uvBase[vid];out.tint=i_tint;out.opacity=i_opacity;return out;}@fragment fn fs_main(in:VSOut)->@location(0)vec4<f32>{let texel=textureSample(uTex,uSampler,in.uv);return vec4<f32>(texel.rgb*(1.0-in.tint.a)+(in.tint.rgb*in.tint.a),texel.a*in.opacity);}";var ni=fe.create(0,0,0),_s=Tt.identity(),Ss=Tt.identity(),Re=64,ii=0,oi=8,ai=16,fr=24,Bs=40,Ps=44,Ds=48,Fs={type:"cobalt:sprite",onInit:async function(e,t={}){return Zc(e,t)},onRun:function(e,t,n){$c(e,t,n)},onDestroy:function(e,t){try{t.data.instanceBuf?.destroy()}catch{}try{t.data.spriteBuf?.destroy()}catch{}try{t.data.uniformBuffer?.destroy()}catch{}t.data.pipeline=null,t.data.bindGroup=null,t.data.bindGroupLayout=null,t.data.instanceStaging=null,t.data.instanceView=null,t.data.sprites.length=0,t.data.visible.length=0},onResize:function(e,t){Ts(e,t)},onViewportPosition:function(e,t){Ts(e,t)},customFunctions:{...ri}};async function Zc(e,t){let{device:n}=e,{descs:r,names:i}=t.refs.spritesheet.data.spritesheet,o=n.createBuffer({size:128,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a=32,f=new ArrayBuffer(a*r.length),h=new Float32Array(f);for(let j=0;j<r.length;j++){let Z=r[j],W=j*8;h[W+0]=Z.UvOrigin[0],h[W+1]=Z.UvOrigin[1],h[W+2]=Z.UvSpan[0],h[W+3]=Z.UvSpan[1],h[W+4]=Z.FrameSize[0],h[W+5]=Z.FrameSize[1],h[W+6]=Z.CenterOffset[0],h[W+7]=Z.CenterOffset[1]}let v=n.createBuffer({label:"sprite desc table",size:Math.max(16,f.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});n.queue.writeBuffer(v,0,f);let d=1024,D=n.createBuffer({label:"sprite instances",size:Re*d,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),m=new ArrayBuffer(Re*d),C=new DataView(m),R=n.createShaderModule({code:bs}),N=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}}]}),V=n.createPipelineLayout({bindGroupLayouts:[N]}),Y={arrayStride:Re,stepMode:"instance",attributes:[{shaderLocation:0,offset:ii,format:"float32x2"},{shaderLocation:1,offset:oi,format:"float32x2"},{shaderLocation:2,offset:ai,format:"float32x2"},{shaderLocation:3,offset:fr,format:"float32x4"},{shaderLocation:4,offset:Bs,format:"uint32"},{shaderLocation:5,offset:Ps,format:"float32"},{shaderLocation:6,offset:Ds,format:"float32"}]},K=n.createRenderPipeline({layout:V,vertex:{module:R,entryPoint:"vs_main",buffers:[Y]},fragment:{module:R,entryPoint:"fs_main",targets:[{format:t.refs.color.data?.texture?.format||Vt(e),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-strip",cullMode:"none"},multisample:{count:1}}),Q=n.createBindGroup({layout:N,entries:[{binding:0,resource:{buffer:o}},{binding:1,resource:t.refs.spritesheet.data.colorTexture.sampler},{binding:2,resource:t.refs.spritesheet.data.colorTexture.view},{binding:3,resource:{buffer:v}}]});return{sprites:[],visible:[],visibleCount:0,viewRect:{x:0,y:0,w:0,h:0},spriteBuf:v,uniformBuffer:o,instanceCap:d,instanceView:C,instanceBuf:D,instanceStaging:m,pipeline:K,bindGroup:Q}}function Hc(e,t,n){let{instanceCap:r}=t.data;if(n<=r)return;let i=r;for(i===0&&(i=1024);i<n;)i*=2;t.data.instanceBuf.destroy(),t.data.instanceBuf=e.device.createBuffer({size:Re*i,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.data.instanceStaging=new ArrayBuffer(Re*i),t.data.instanceView=new DataView(t.data.instanceStaging),t.data.instanceCap=i}function $c(e,t,n){let{device:r,context:i}=e,{instanceView:o,instanceBuf:a,instanceStaging:f,pipeline:h,bindGroup:v}=t.data,{descs:d}=t.refs.spritesheet.data.spritesheet,D=t.data.viewRect;D.x=e.viewport.position[0],D.y=e.viewport.position[1],D.w=e.viewport.width,D.h=e.viewport.height,t.data.visibleCount=0;for(let R of t.data.sprites){let N=d[R.spriteID];if(N){if(!t.options.isScreenSpace){let V=N.FrameSize[0]*R.sizeX*R.scale[0]*.5,Y=N.FrameSize[1]*R.sizeY*R.scale[1]*.5,K=Math.hypot(V,Y),Q=R.position[0],j=R.position[1];if(Q+K<D.x||Q-K>D.x+D.w||j+K<D.y||j-K>D.y+D.h)continue}t.data.visible[t.data.visibleCount]=R,t.data.visibleCount++}}Hc(e,t,t.data.visibleCount);for(let R=0;R<t.data.visibleCount;R++){let N=R*Re,V=t.data.visible[R],Y=V.tint;o.setFloat32(N+ii+0,V.position[0],!0),o.setFloat32(N+ii+4,V.position[1],!0),o.setFloat32(N+oi+0,V.sizeX,!0),o.setFloat32(N+oi+4,V.sizeY,!0),o.setFloat32(N+ai+0,V.scale[0],!0),o.setFloat32(N+ai+4,V.scale[1],!0),o.setFloat32(N+fr+0,Y[0],!0),o.setFloat32(N+fr+4,Y[1],!0),o.setFloat32(N+fr+8,Y[2],!0),o.setFloat32(N+fr+12,Y[3],!0),o.setUint32(N+Bs,V.spriteID>>>0,!0),o.setFloat32(N+Ps,V.opacity,!0),o.setFloat32(N+Ds,V.rotation,!0)}r.queue.writeBuffer(a,0,f,0,t.data.visibleCount*Re);let m=t.options.loadOp||"load",C=n.beginRenderPass({label:"sprite renderpass",colorAttachments:[{view:t.refs.color.data?.view||t.refs.color,clearValue:e.clearValue,loadOp:m,storeOp:"store"}]});C.setPipeline(h),C.setBindGroup(0,v),C.setVertexBuffer(0,a),t.data.visibleCount&&C.draw(4,t.data.visibleCount,0,0),C.end()}function Ts(e,t){let{device:n,viewport:r}=e,i=r.width/r.zoom,o=r.height/r.zoom;Tt.ortho(0,i,o,0,-10,10,_s),t.options.isScreenSpace?fe.set(0,0,0,ni):fe.set(-ge(r.position[0]),-ge(r.position[1]),0,ni),Tt.translation(ni,Ss),n.queue.writeBuffer(t.data.uniformBuffer,0,Ss.buffer),n.queue.writeBuffer(t.data.uniformBuffer,64,_s.buffer)}var si={};hn(si,{addSprite:()=>Wc,clear:()=>Qc,removeSprite:()=>Kc,setSpriteName:()=>Jc,setSpriteOpacity:()=>e1,setSpritePosition:()=>jc,setSpriteRotation:()=>r1,setSpriteScale:()=>n1,setSpriteTint:()=>t1});function Wc(e,t,n,r,i,o,a,f){let{idByName:h}=t.refs.spritesheet.data;return t.data.sprites.push({position:Lt.clone(r),sizeX:1,sizeY:1,scale:Lt.clone(i),rotation:f,opacity:a,tint:me.clone(o),spriteID:h.get(n),id:Pe()}),t.data.sprites.at(-1).id}function Kc(e,t,n){let r=t.data.sprites;for(let i=0;i<r.length;i++)if(r[i].id===n){r[i]=r[r.length-1],r.pop();return}}function Qc(e,t){t.data.sprites.length=0}function Jc(e,t,n,r){let i=t.data.sprites.find(a=>a.id===n);if(!i)return;let{idByName:o}=t.refs.spritesheet.data;i.spriteID=o.get(r)}function jc(e,t,n,r){let i=t.data.sprites.find(o=>o.id===n);i&&Lt.copy(r,i.position)}function t1(e,t,n,r){let i=t.data.sprites.find(o=>o.id===n);i&&me.copy(r,i.tint)}function e1(e,t,n,r){let i=t.data.sprites.find(o=>o.id===n);i&&(i.opacity=r)}function r1(e,t,n,r){let i=t.data.sprites.find(o=>o.id===n);i&&(i.rotation=r)}function n1(e,t,n,r){let i=t.data.sprites.find(o=>o.id===n);i&&Lt.copy(r,i.scale)}var As="struct ViewParams{view:mat4x4<f32>,proj:mat4x4<f32>};@group(0)@binding(0)var<uniform> uView:ViewParams;@group(0)@binding(1)var uSampler:sampler;@group(0)@binding(2)var uTex:texture_2d<f32>;struct SpriteDesc{uvOrigin:vec2<f32>,uvSpan:vec2<f32>,frameSize:vec2<f32>,centerOffset:vec2<f32>,};@group(0)@binding(3)var<storage,read>Sprites:array<SpriteDesc>;@group(0)@binding(4)var emissiveTexture:texture_2d<f32>;struct VSOut{@builtin(position)pos:vec4<f32>,@location(0)uv:vec2<f32>,@location(1)tint:vec4<f32>,@location(2)opacity:f32,};const corners=array<vec2<f32>,4>(vec2<f32>(-0.5,-0.5),vec2<f32>(0.5,-0.5),vec2<f32>(-0.5,0.5),vec2<f32>(0.5,0.5),);const uvBase=array<vec2<f32>,4>(vec2<f32>(0.0,0.0),vec2<f32>(1.0,0.0),vec2<f32>(0.0,1.0),vec2<f32>(1.0,1.0),);struct GBufferOutput{@location(0)color:vec4<f32>,@location(1)emissive:vec4<f32>,}@vertex fn vs_main(@builtin(vertex_index)vid:u32,@location(0)i_pos:vec2<f32>,@location(1)i_size:vec2<f32>,@location(2)i_scale:vec2<f32>,@location(3)i_tint:vec4<f32>,@location(4)i_spriteId:u32,@location(5)i_opacity:f32,@location(6)i_rotation:f32)->VSOut{let rot=i_rotation;let c=cos(rot);let s=sin(rot);let d=Sprites[i_spriteId];let corner=corners[vid];let sizePx=d.frameSize*i_size*i_scale;var local=corner*sizePx;local+=d.centerOffset*i_scale;let rotated=vec2<f32>(local.x*c-local.y*s,local.x*s+local.y*c);let world=vec4<f32>(rotated+i_pos,0.0,1.0);var out:VSOut;out.pos=uView.proj*uView.view*world;out.uv=d.uvOrigin+d.uvSpan*uvBase[vid];out.tint=i_tint;out.opacity=i_opacity;return out;}@fragment fn fs_main(in:VSOut)->GBufferOutput{var output:GBufferOutput;let texel=textureSample(uTex,uSampler,in.uv);output.color=vec4<f32>(texel.rgb*(1.0-in.tint.a)+(in.tint.rgb*in.tint.a),texel.a*in.opacity);let emissive=textureSample(emissiveTexture,uSampler,in.uv);output.emissive=vec4(emissive.rgb,1.0)*emissive.a;return output;}";var ui=fe.create(0,0,0),Us=Tt.identity(),zs=Tt.identity(),Oe=64,fi=0,ci=8,li=16,cr=24,Es=40,Ls=44,Gs=48,Rs={type:"cobalt:spriteHDR",onInit:async function(e,t={}){return i1(e,t)},onRun:function(e,t,n){a1(e,t,n)},onDestroy:function(e,t){try{t.data.instanceBuf?.destroy()}catch{}try{t.data.spriteBuf?.destroy()}catch{}try{t.data.uniformBuffer?.destroy()}catch{}t.data.pipeline=null,t.data.bindGroup=null,t.data.bindGroupLayout=null,t.data.instanceStaging=null,t.data.instanceView=null,t.data.sprites.length=0,t.data.visible.length=0},onResize:function(e,t){Is(e,t)},onViewportPosition:function(e,t){Is(e,t)},customFunctions:{...si}};async function i1(e,t){let{device:n}=e,{descs:r,names:i}=t.refs.spritesheet.data.spritesheet,o=n.createBuffer({size:128,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),a=32,f=new ArrayBuffer(a*r.length),h=new Float32Array(f);for(let Z=0;Z<r.length;Z++){let W=r[Z],st=Z*8;h[st+0]=W.UvOrigin[0],h[st+1]=W.UvOrigin[1],h[st+2]=W.UvSpan[0],h[st+3]=W.UvSpan[1],h[st+4]=W.FrameSize[0],h[st+5]=W.FrameSize[1],h[st+6]=W.CenterOffset[0],h[st+7]=W.CenterOffset[1]}let v=n.createBuffer({label:"spriteHDR desc table",size:Math.max(16,f.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});n.queue.writeBuffer(v,0,f);let d=1024,D=n.createBuffer({label:"spriteHDR instances",size:Oe*d,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),m=new ArrayBuffer(Oe*d),C=new DataView(m),R=n.createShaderModule({code:As}),N=n.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.VERTEX,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}}]}),V=n.createPipelineLayout({bindGroupLayouts:[N]}),Y={arrayStride:Oe,stepMode:"instance",attributes:[{shaderLocation:0,offset:fi,format:"float32x2"},{shaderLocation:1,offset:ci,format:"float32x2"},{shaderLocation:2,offset:li,format:"float32x2"},{shaderLocation:3,offset:cr,format:"float32x4"},{shaderLocation:4,offset:Es,format:"uint32"},{shaderLocation:5,offset:Ls,format:"float32"},{shaderLocation:6,offset:Gs,format:"float32"}]},K=n.createRenderPipeline({layout:V,vertex:{module:R,entryPoint:"vs_main",buffers:[Y]},fragment:{module:R,entryPoint:"fs_main",targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}},{format:"rgba16float"}]},primitive:{topology:"triangle-strip",cullMode:"none"},multisample:{count:1}}),Q=N,j=n.createBindGroup({layout:N,entries:[{binding:0,resource:{buffer:o}},{binding:1,resource:t.refs.spritesheet.data.colorTexture.sampler},{binding:2,resource:t.refs.spritesheet.data.colorTexture.view},{binding:3,resource:{buffer:v}},{binding:4,resource:t.refs.spritesheet.data.emissiveTexture.view}]});return{sprites:[],visible:[],visibleCount:0,viewRect:{x:0,y:0,w:0,h:0},spriteBuf:v,uniformBuffer:o,instanceCap:d,instanceView:C,instanceBuf:D,instanceStaging:m,pipeline:K,bindGroup:j}}function o1(e,t,n){let{instanceCap:r}=t.data;if(n<=r)return;let i=r;for(i===0&&(i=1024);i<n;)i*=2;t.data.instanceBuf.destroy(),t.data.instanceBuf=e.device.createBuffer({size:Oe*i,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.data.instanceStaging=new ArrayBuffer(Oe*i),t.data.instanceView=new DataView(t.data.instanceStaging),t.data.instanceCap=i}function a1(e,t,n){let{device:r,context:i}=e,{instanceView:o,instanceBuf:a,instanceStaging:f,pipeline:h,bindGroup:v}=t.data,{descs:d}=t.refs.spritesheet.data.spritesheet,D=t.data.viewRect;D.x=e.viewport.position[0],D.y=e.viewport.position[1],D.w=e.viewport.width,D.h=e.viewport.height,t.data.visibleCount=0;for(let R of t.data.sprites){let N=d[R.spriteID];if(N){if(!t.options.isScreenSpace){let V=N.FrameSize[0]*R.sizeX*R.scale[0]*.5,Y=N.FrameSize[1]*R.sizeY*R.scale[1]*.5,K=Math.hypot(V,Y),Q=R.position[0],j=R.position[1];if(Q+K<D.x||Q-K>D.x+D.w||j+K<D.y||j-K>D.y+D.h)continue}t.data.visible[t.data.visibleCount]=R,t.data.visibleCount++}}o1(e,t,t.data.visibleCount);for(let R=0;R<t.data.visibleCount;R++){let N=R*Oe,V=t.data.visible[R],Y=V.tint;o.setFloat32(N+fi+0,V.position[0],!0),o.setFloat32(N+fi+4,V.position[1],!0),o.setFloat32(N+ci+0,V.sizeX,!0),o.setFloat32(N+ci+4,V.sizeY,!0),o.setFloat32(N+li+0,V.scale[0],!0),o.setFloat32(N+li+4,V.scale[1],!0),o.setFloat32(N+cr+0,Y[0],!0),o.setFloat32(N+cr+4,Y[1],!0),o.setFloat32(N+cr+8,Y[2],!0),o.setFloat32(N+cr+12,Y[3],!0),o.setUint32(N+Es,V.spriteID>>>0,!0),o.setFloat32(N+Ls,V.opacity,!0),o.setFloat32(N+Gs,V.rotation,!0)}r.queue.writeBuffer(a,0,f,0,t.data.visibleCount*Oe);let m=t.options.loadOp||"load",C=n.beginRenderPass({label:"spriteHDR renderpass",colorAttachments:[{view:t.refs.color.data.view,clearValue:e.clearValue,loadOp:m,storeOp:"store"},{view:t.refs.emissive.data.view,clearValue:e.clearValue,loadOp:"clear",storeOp:"store"}]});C.setPipeline(h),C.setBindGroup(0,v),C.setVertexBuffer(0,a),t.data.visibleCount&&C.draw(4,t.data.visibleCount,0,0),C.end()}function Is(e,t){let{device:n,viewport:r}=e,i=r.width/r.zoom,o=r.height/r.zoom;Tt.ortho(0,i,o,0,-10,10,Us),t.options.isScreenSpace?fe.set(0,0,0,ui):fe.set(-ge(r.position[0]),-ge(r.position[1]),0,ui),Tt.translation(ui,zs),n.queue.writeBuffer(t.data.uniformBuffer,0,zs.buffer),n.queue.writeBuffer(t.data.uniformBuffer,64,Us.buffer)}function $r(e){let t=e.meta.size.w,n=e.meta.size.h,r=Object.keys(e.frames).sort(),i=new Array(r.length);for(let o=0;o<r.length;o++){let a=e.frames[r[o]],f=a.frame.x,h=a.frame.y,v=a.frame.w,d=a.frame.h,D=f/t,m=h/n,C=v/t,R=d/n,N=a.sourceSize.w,V=a.sourceSize.h,Y=a.spriteSourceSize.x,K=a.spriteSourceSize.y,Q=Y+v*.5-N*.5,j=K+d*.5-V*.5;i[o]={UvOrigin:[D,m],UvSpan:[C,R],FrameSize:[v,d],CenterOffset:[Q,j]}}return{descs:i,names:r}}var Os={type:"cobalt:spritesheet",onInit:async function(e,t={}){return s1(e,t)},onRun:function(e,t,n){},onDestroy:function(e,t){u1(t)},onResize:function(e,t){},onViewportPosition:function(e,t){}};async function s1(e,t){let{canvas:n,device:r}=e,i,o,a,f=t.options.format||"rgba8unorm";n?(i=await fetch(t.options.spriteSheetJsonUrl),i=await i.json(),i=$r(i),o=await pe(e,"sprite",t.options.colorTextureUrl,f),t.options.emissiveTextureUrl&&(a=await pe(e,"emissive sprite",t.options.emissiveTextureUrl,f)),n.style.imageRendering="pixelated"):(i=$r(t.options.spriteSheetJson),o=await ve(e,"sprite",t.options.colorTexture,f),t.options.emissiveTexture&&(a=await ve(e,"emissive sprite",t.options.emissiveTexture,f)));let h=new Map(i.names.map((v,d)=>[v,d]));return{colorTexture:o,emissiveTexture:a,spritesheet:i,idByName:h}}function u1(e){e.data.colorTexture.texture.destroy(),e.data.emissiveTexture&&e.data.emissiveTexture.texture.destroy()}var hi="struct TransformData{viewOffset:vec2<f32>,viewportSize:vec2<f32>,inverseAtlasTextureSize:vec2<f32>,tileSize:f32,inverseTileSize:f32,};struct TileScroll{scrollScale:vec2<f32>};const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@binding(0)@group(0)var<uniform> myScroll:TileScroll;@binding(1)@group(0)var tileTexture:texture_2d<f32>;@binding(2)@group(0)var tileSampler:sampler;@binding(0)@group(1)var<uniform> transformUBO:TransformData;@binding(1)@group(1)var atlasTexture:texture_2d<f32>;@binding(2)@group(1)var atlasSampler:sampler;struct Fragment{@builtin(position)Position:vec4<f32>,@location(0)TexCoord:vec2<f32>};@vertex fn vs_main(@builtin(instance_index)i_id:u32,@builtin(vertex_index)VertexIndex:u32)->Fragment{var vertexPosition=vec2<f32>(positions[VertexIndex]);var vertexTexCoord=vec2<f32>(uvs[VertexIndex]);var output:Fragment;let inverseTileTextureSize=1/vec2<f32>(textureDimensions(tileTexture,0));var scrollScale=myScroll.scrollScale;var viewOffset:vec2<f32>=transformUBO.viewOffset*scrollScale;let PixelCoord=(vertexTexCoord*transformUBO.viewportSize)+viewOffset;output.TexCoord=PixelCoord/transformUBO.tileSize;output.Position=vec4<f32>(vertexPosition,0.0,1.0);return output;}@fragment fn fs_main(@location(0)TexCoord:vec2<f32>)->@location(0)vec4<f32>{var tilemapCoord=floor(TexCoord);var u_tilemapSize=vec2<f32>(textureDimensions(tileTexture,0));var tileFoo=fract((tilemapCoord+vec2<f32>(0.5,0.5))/u_tilemapSize);var tile=floor(textureSample(tileTexture,tileSampler,tileFoo)*255.0);if(tile.x==255&&tile.y==255){discard;}var u_tilesetSize=vec2<f32>(textureDimensions(atlasTexture,0))/transformUBO.tileSize;let u_tileUVMinBounds=vec2<f32>(0.5/transformUBO.tileSize,0.5/transformUBO.tileSize);let u_tileUVMaxBounds=vec2<f32>((transformUBO.tileSize-0.5)/transformUBO.tileSize,(transformUBO.tileSize-0.5)/transformUBO.tileSize);var texcoord=clamp(fract(TexCoord),u_tileUVMinBounds,u_tileUVMaxBounds);var tileCoord=(tile.xy+texcoord)/u_tilesetSize;var color=textureSample(atlasTexture,atlasSampler,tileCoord);if(color.a<=0.1){discard;}return color;}";var Me=new Float32Array(8),Ns={type:"cobalt:tileAtlas",onInit:async function(e,t={}){return f1(e,t)},onRun:function(e,t,n){},onDestroy:function(e,t){c1(t)},onResize:function(e,t){qs(e,t)},onViewportPosition:function(e,t){qs(e,t)}};async function f1(e,t){let{canvas:n,device:r}=e,i=t.options.format||"rgba8unorm",o;n?o=await pe(e,"tile atlas",t.options.textureUrl,i):o=await ve(e,"tile atlas",t.options.texture,i);let a=r.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),f=r.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),h=r.createBindGroup({layout:f,entries:[{binding:0,resource:{buffer:a}},{binding:1,resource:o.view},{binding:2,resource:o.sampler}]}),v=r.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{}},{binding:1,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,texture:{}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{}}]}),d=r.createPipelineLayout({bindGroupLayouts:[v,f]});return{pipeline:r.createRenderPipeline({label:"tileatlas",vertex:{module:r.createShaderModule({code:hi}),entryPoint:"vs_main",buffers:[]},fragment:{module:r.createShaderModule({code:hi}),entryPoint:"fs_main",targets:[{format:t.options.outputFormat||Vt(e),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcFactor:"zero",dstFactor:"one"}}}]},primitive:{topology:"triangle-list"},layout:d}),uniformBuffer:a,atlasBindGroup:h,atlasMaterial:o,tileBindGroupLayout:v,tileSize:t.options.tileSize,tileScale:t.options.tileScale}}function c1(e){e.data.atlasMaterial.texture.destroy(),e.data.atlasMaterial.texture=void 0}function qs(e,t){Me[0]=ge(e.viewport.position[0]),Me[1]=ge(e.viewport.position[1]);let n=t.data,{tileScale:r,tileSize:i}=n,o=e.viewport.width/e.viewport.zoom,a=e.viewport.height/e.viewport.zoom;Me[2]=o/r,Me[3]=a/r,Me[4]=1/n.atlasMaterial.texture.width,Me[5]=1/n.atlasMaterial.texture.height,Me[6]=i,Me[7]=1/i,e.device.queue.writeBuffer(n.uniformBuffer,0,Me,0,8)}var Cs={type:"cobalt:tile",onInit:async function(e,t={}){return l1(e,t)},onRun:function(e,t,n){h1(e,t,n)},onDestroy:function(e,t){Vs(t)},onResize:function(e,t){},onViewportPosition:function(e,t){},customFunctions:{setTexture:async function(e,t,n){let{canvas:r,device:i}=e;Vs(t);let o=t.options.format||Vt(e),a;r?(t.options.textureUrl=n,a=await pe(e,"tile map",n,o)):a=await ve(e,"tile map",n,o);let f=i.createBindGroup({layout:t.refs.tileAtlas.data.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:t.data.uniformBuffer}},{binding:1,resource:a.view},{binding:2,resource:a.sampler}]});t.data.bindGroup=f,t.data.material=a}}};async function l1(e,t){let{canvas:n,device:r}=e,i,o=t.options.format||Vt(e);n?i=await pe(e,"tile map",t.options.textureUrl,o):i=await ve(e,"tile map",t.options.texture,o);let a=new Float32Array([t.options.scrollScale,t.options.scrollScale]),f=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,h={size:a.byteLength,usage:f,mappedAtCreation:!0},v=r.createBuffer(h);return new Float32Array(v.getMappedRange()).set(a),v.unmap(),{bindGroup:r.createBindGroup({layout:t.refs.tileAtlas.data.tileBindGroupLayout,entries:[{binding:0,resource:{buffer:v}},{binding:1,resource:i.view},{binding:2,resource:i.sampler}]}),material:i,uniformBuffer:v,scrollScale:t.options.scrollScale}}function h1(e,t,n){if(!t.data.material.texture)return;let{device:r}=e,i=t.options.loadOp||"load",o=n.beginRenderPass({label:"tile",colorAttachments:[{view:t.refs.out.data?.view||t.refs.out,clearValue:e.clearValue,loadOp:i,storeOp:"store"}]}),a=t.refs.tileAtlas.data;o.setPipeline(a.pipeline),o.setBindGroup(0,t.data.bindGroup),o.setBindGroup(1,a.atlasBindGroup),o.draw(3),o.end()}function Vs(e){e.data.material.texture.destroy(),e.data.material.texture=void 0}async function Ov(e,t,n){let r,i,o,a;return e.sdlWindow&&e.gpu?(i=e.gpu,r=await(await i.create(["verbose=1","enable-dawn-features=allow_unsafe_apis"]).requestAdapter()).requestDevice({requiredFeatures:["texture-component-swizzle"]}),o=i.renderGPUDeviceToWindow({device:r,window:e.sdlWindow}),global.GPUBufferUsage=i.GPUBufferUsage,global.GPUShaderStage=i.GPUShaderStage,global.GPUTextureUsage=i.GPUTextureUsage):(a=e,r=await(await navigator.gpu?.requestAdapter({powerPreference:"high-performance"}))?.requestDevice(),i=navigator.gpu,o=a.getContext("webgpu"),o.configure({device:r,format:navigator.gpu?.getPreferredCanvasFormat(),alphaMode:"opaque"})),{nodeDefs:{"cobalt:tileAtlas":Ns,"cobalt:spritesheet":Os,"cobalt:fbTexture":Ii,"cobalt:sprite":Fs,"cobalt:bloom":wi,"cobalt:composite":ys,"cobalt:spriteHDR":Rs,"cobalt:tile":Cs,"cobalt:displacement":Ui,"cobalt:fbBlit":zi,"cobalt:primitives":Ms,"cobalt:light":Li},nodes:[],defaultTextureViewRefs:[],canvas:a,device:r,context:o,gpu:i,clearValue:{r:0,g:0,b:0,a:1},viewport:{width:t,height:n,zoom:1,position:[0,0]}}}function qv(e,t){if(!t?.type)throw new Error("Can't define a new node missing a type.");e.nodeDefs[t.type]=t}async function Nv(e,t){let n=e.nodeDefs[t?.type];if(!n)throw new Error("Can't initialize a new node missing a type.");let r={type:t.type,refs:t.refs||{},options:t.options||{},data:{},enabled:!0};for(let o in r.refs)r.refs[o]==="FRAME_TEXTURE_VIEW"&&(e.defaultTextureViewRefs.push({node:r,refName:o}),r.refs[o]=ms(e));r.data=await n.onInit(e,r);let i=n.customFunctions||{};for(let o in i)r[o]=function(...a){return i[o](e,r,...a)};return e.nodes.push(r),r}function Vv(e){let{device:t,context:n}=e,r=t.createCommandEncoder(),i=ms(e);for(let o of e.defaultTextureViewRefs)o.node.refs[o.refName]=i;for(let o of e.nodes){if(!o.enabled)continue;e.nodeDefs[o.type].onRun(e,o,r)}t.queue.submit([r.finish()]),e.canvas||e.context.swap()}function Cv(e){for(let t of e.nodes)e.nodeDefs[t.type].onDestroy(e,t);e.nodes.length=0,e.defaultTextureViewRefs.length=0}function mv(e,t,n){e.viewport.width=t,e.viewport.height=n;for(let r of e.nodes)e.nodeDefs[r.type].onResize(e,r)}function kv(e,t){e.viewport.position[0]=t[0]-e.viewport.width/2/e.viewport.zoom,e.viewport.position[1]=t[1]-e.viewport.height/2/e.viewport.zoom;for(let n of e.nodes)e.nodeDefs[n.type].onViewportPosition(e,n)}function ms(e){return e.canvas?e.context.getCurrentTexture().createView():e.context.getCurrentTextureView()}export{ne as createTexture,ve as createTextureFromBuffer,pe as createTextureFromUrl,qv as defineNode,Vv as draw,ms as getCurrentTextureView,Vt as getPreferredFormat,Ov as init,Nv as initNode,Cv as reset,mv as setViewportDimensions,kv as setViewportPosition};
|