1"use strict";(self.webpackChunk_eightshift_redesign=self.webpackChunk_eightshift_redesign||[]).push([[26815],{26815(e,t,i){let r,a,o,l,h,c,d,p,f,m,g,v,y,x,b,w,S,_,A,M,C,E,T,P,D,O,I,R,L,B,z,F,N,U,k,V,j,G,W,H,q,X,Y,Q,Z,K,J,$,ee,et,ei,er,es,ea,en,eo,el,eh,ec,ed,eu,ep,ef,em,eg,ev,ey,ex,eb,ew,eS,e_,eA,eM,eC,eE,eT,eP,eD,eO,eI,eR,eL,eB,ez,eF,eN,eU,ek,eV,ej,eG,eW,eH,eq,eX,eY,eQ,eZ,eK,eJ,e$,e0,e1,e2,e3,e4,e5,e6,e8,e9,e7,te,tt,ti,tr,ts,ta,tn,to,tl,th,tc,td,tu,tp,tf,tm,tg,tv,ty,tx,tb,tw,tS,t_,tA,tM;i.d(t,{Application:()=>FR});var tC,tE,tT=Object.create,tP=Object.defineProperty,tD=Object.getOwnPropertyDescriptor,tO=Object.getOwnPropertyNames,tI=Object.getPrototypeOf,tR=Object.prototype.hasOwnProperty,tL=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),tB=(e,t,i)=>(i=null!=e?tT(tI(e)):{},((e,t,i,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of tO(t))tR.call(e,a)||a===i||tP(e,a,{get:()=>t[a],enumerable:!(r=tD(t,a))||r.enumerable});return e})(!t&&e&&e.__esModule?i:tP(i,"default",{value:e,enumerable:!0}),e)),tz=(e,t,i)=>{let r;return(r="symbol"!=typeof t?t+"":t)in e?tP(e,r,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[r]=i,i},tF=tL((e,t)=>{var i;i=function(){return e.importState=function(t){var i=new e;return i.importState(t),i},e;function e(){return function(e){var t,i,r=0,a=0,o=0,l=1;0==e.length&&(e=[+new Date]);var h=(t=0xefc8249d,(i=function(e){e=e.toString();for(var i=0;i<e.length;i++){var r=.02519603282416938*(t+=e.charCodeAt(i));t=r>>>0,r-=t,r*=t,t=r>>>0,r-=t,t+=0x100000000*r}return(t>>>0)*23283064365386963e-26}).version="Mash 0.9",i);r=h(" "),a=h(" "),o=h(" ");for(var c=0;c<e.length;c++)(r-=h(e[c]))<0&&(r+=1),(a-=h(e[c]))<0&&(a+=1),(o-=h(e[c]))<0&&(o+=1);h=null;var d=function(){var e=2091639*r+23283064365386963e-26*l;return r=a,a=o,o=e-(l=0|e)};return d.next=d,d.uint32=function(){return 0x100000000*d()},d.fract53=function(){return d()+(2097152*d()|0)*11102230246251565e-32},d.version="Alea 0.9",d.args=e,d.exportState=function(){return[r,a,o,l]},d.importState=function(e){r=+e[0]||0,a=+e[1]||0,o=+e[2]||0,l=+e[3]||0},d}(Array.prototype.slice.call(arguments))}},"object"==typeof e?t.exports=i():"function"==typeof define&&define.amd?define(i):e.Alea=i()}),tN=tL((e,t)=>{var i,r;i=e,r=function(e){e.SVD=function(e,t,i,r,a){if(t=void 0===t||t,i=void 0===i||i,a=1e-64/(r=r||2220446049250313e-31),!e)throw TypeError("Matrix a is not defined");var o,l,h,c,d,p,f,m,g,v,y,x,b=e[0].length,w=e.length;if(w<b)throw TypeError("Invalid matrix: m < n");for(var S=[],_=[],A=[],M="f"===t?w:b,C=v=f=0;C<w;C++)_[C]=Array(M).fill(0);for(C=0;C<b;C++)A[C]=Array(b).fill(0);var E,T=Array(b).fill(0);for(C=0;C<w;C++)for(o=0;o<b;o++)_[C][o]=e[C][o];for(C=0;C<b;C++){for(S[C]=f,g=0,h=C+1,o=C;o<w;o++)g+=Math.pow(_[o][C],2);if(g<a)f=0;else for(m=(p=_[C][C])*(f=p<0?Math.sqrt(g):-Math.sqrt(g))-g,_[C][C]=p-f,o=h;o<b;o++){for(g=0,l=C;l<w;l++)g+=_[l][C]*_[l][o];for(p=g/m,l=C;l<w;l++)_[l][o]=_[l][o]+p*_[l][C]}for(T[C]=f,g=0,o=h;o<b;o++)g+=Math.pow(_[C][o],2);if(g<a)f=0;else{for(m=(p=_[C][C+1])*(f=p<0?Math.sqrt(g):-Math.sqrt(g))-g,_[C][C+1]=p-f,o=h;o<b;o++)S[o]=_[C][o]/m;for(o=h;o<w;o++){for(g=0,l=h;l<b;l++)g+=_[o][l]*_[C][l];for(l=h;l<b;l++)_[o][l]=_[o][l]+g*S[l]}}v<(y=Math.abs(T[C])+Math.abs(S[C]))&&(v=y)}if(i)for(C=b-1;0<=C;C--){if(0!==f){for(m=_[C][C+1]*f,o=h;o<b;o++)A[o][C]=_[C][o]/m;for(o=h;o<b;o++){for(g=0,l=h;l<b;l++)g+=_[C][l]*A[l][o];for(l=h;l<b;l++)A[l][o]=A[l][o]+g*A[l][C]}}for(o=h;o<b;o++)A[C][o]=0,A[o][C]=0;A[C][C]=1,f=S[C],h=C}if(t){if("f"===t)for(C=b;C<w;C++){for(o=b;o<w;o++)_[C][o]=0;_[C][C]=1}for(C=b-1;0<=C;C--){for(h=C+1,f=T[C],o=h;o<M;o++)_[C][o]=0;if(0!==f){for(m=_[C][C]*f,o=h;o<M;o++){for(g=0,l=h;l<w;l++)g+=_[l][C]*_[l][o];for(p=g/m,l=C;l<w;l++)_[l][o]=_[l][o]+p*_[l][C]}for(o=C;o<w;o++)_[o][C]=_[o][C]/f}else for(o=C;o<w;o++)_[o][C]=0;_[C][C]=_[C][C]+1}}for(r*=v,l=b-1;0<=l;l--)for(var P=0;P<50;P++){for(E=!1,h=l;0<=h;h--){if(Math.abs(S[h])<=r){E=!0;break}if(Math.abs(T[h-1])<=r)break}if(!E){for(d=0,c=h-(g=1),C=h;C<l+1&&(p=g*S[C],S[C]=d*S[C],!(Math.abs(p)<=r));C++)if(f=T[C],T[C]=Math.sqrt(p*p+f*f),d=f/(m=T[C]),g=-p/m,t)for(o=0;o<w;o++)y=_[o][c],x=_[o][C],_[o][c]=y*d+x*g,_[o][C]=-y*g+x*d}if(x=T[l],h===l){if(x<0&&(T[l]=-x,i))for(o=0;o<b;o++)A[o][l]=-A[o][l];break}for(v=T[h],f=Math.sqrt((p=(((y=T[l-1])-x)*(y+x)+((f=S[l-1])-(m=S[l]))*(f+m))/(2*m*y))*p+1),p=((v-x)*(v+x)+m*(y/(p<0?p-f:p+f)-m))/v,C=h+(g=d=1);C<l+1;C++){if(f=S[C],y=T[C],m=g*f,f*=d,x=Math.sqrt(p*p+m*m),p=v*(d=p/(S[C-1]=x))+f*(g=m/x),f=-v*g+f*d,m=y*g,y*=d,i)for(o=0;o<b;o++)v=A[o][C-1],x=A[o][C],A[o][C-1]=v*d+x*g,A[o][C]=-v*g+x*d;if(x=Math.sqrt(p*p+m*m),p=(d=p/(T[C-1]=x))*f+(g=m/x)*y,v=-g*f+d*y,t)for(o=0;o<w;o++)y=_[o][C-1],x=_[o][C],_[o][C-1]=y*d+x*g,_[o][C]=-y*g+x*d}S[h]=0,S[l]=p,T[l]=v}for(C=0;C<b;C++)T[C]<r&&(T[C]=0);return{u:_,q:T,v:A}}
1,e.VERSION="1.1.1",Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof e&&"u">typeof t?r(e):"function"==typeof define&&define.amd?define(["exports"],r):r((i="u">typeof globalThis?globalThis:i||self).SVDJS={})}),tU=tL((e,t)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)},t.exports=e.default}),tk=tL((e,t)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()},t.exports=e.default}),tV=tL((e,t)=>{function i(e,t,r,a){this.message=e,this.expected=t,this.found=r,this.location=a,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,i)}function r(){this.constructor=i}r.prototype=Error.prototype,i.prototype=new r,i.buildMessage=function(e,t){var i={literal:function(e){return'"'+a(e.text)+'"'},class:function(e){var t,i="";for(t=0;t<e.parts.length;t++)i+=e.parts[t]instanceof Array?o(e.parts[t][0])+"-"+o(e.parts[t][1]):o(e.parts[t]);return"["+(e.inverted?"^":"")+i+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function r(e){return e.charCodeAt(0).toString(16).toUpperCase()}function a(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+r(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+r(e)})}function o(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+r(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+r(e)})}return"Expected "+function(e){var t,r,a,o=Array(e.length);for(r=0;r<e.length;r++)o[r]=i[(t=e[r]).type](t);if(o.sort(),o.length>0){for(r=1,a=1;r<o.length;r++)o[r-1]!==o[r]&&(o[a]=o[r],a++);o.length=a}switch(o.length){case 1:return o[0];case 2:return o[0]+" or "+o[1];default:return o.slice(0,-1).join(", ")+", or "+o[o.length-1]}}(e)+" but "+(t?'"'+a(t)+'"':"end of input")+" found."},t.exports={SyntaxError:i,parse:function(e,t){t=void 0!==t?t:{};var r,a,o,l,h={},c={svg_path:en},d=en,p=function(e){if(!e)return[];for(var t=[],i=0;i<e.length;i++)t=t.concat.apply(t,e[i]);var r=t[0];return r&&"m"==r.code&&(delete r.relative,r.code="M"),t},f=function(e,t){var i=e,r=t;if(!r)return[i];for(var a=[i],o=0,l=r.length;o<l;o++)a[o+1]=r[o][1];return a},m=/^[Mm]/,g=ei(["M","m"],!1,!1),v=function(e,t,i){var r=eT(e,[t]);return i&&(r=r.concat(eT("M"==e?"L":"l",i[1]))),r},y=/^[Zz]/,x=ei(["Z","z"],!1,!1),b=/^[Ll]/,w=ei(["L","l"],!1,!1),S=function(e,t){return eT(e,t)},_=/^[Hh]/,A=ei(["H","h"],!1,!1),M=/^[Vv]/,C=ei(["V","v"],!1,!1),E=/^[Cc]/,T=ei(["C","c"],!1,!1),P=/^[Ss]/,D=ei(["S","s"],!1,!1),O=/^[Qq]/,I=ei(["Q","q"],!1,!1),R=/^[Tt]/,L=ei(["T","t"],!1,!1),B=/^[Aa]/,z=ei(["A","a"],!1,!1),F=/^[01]/,N=ei(["0","1"],!1,!1),U=function(){return""},k=et(",",!1),V=function(e){return e.join("")},j=et(".",!1),G=/^[eE]/,W=ei(["e","E"],!1,!1),H=/^[+\-]/,q=ei(["+","-"],!1,!1),X=/^[0-9]/,Y=ei([["0","9"]],!1,!1),Q=/^[ \t\n\r]/,Z=ei([" "," ",` 2`,`\r`],!1,!1),K=0,J=[{line:1,column:1}],$=0,ee=[];if("startRule"in t){if(!(t.startRule in c))throw Error("Can't start parsing from rule \""+t.startRule+'".');d=c[t.startRule]}function et(e,t){return{type:"literal",text:e,ignoreCase:t}}function ei(e,t,i){return{type:"class",parts:e,inverted:t,ignoreCase:i}}function er(t){var i,r=J[t];if(r)return r;for(i=t-1;!J[i];)i--;for(r={line:(r=J[i]).line,column:r.column};i<t;)10===e.charCodeAt(i)?(r.line++,r.column=1):r.column++,i++;return J[t]=r,r}function es(e,t){var i=er(e),r=er(t);return{start:{offset:e,line:i.line,column:i.column},end:{offset:t,line:r.line,column:r.column}}}function ea(e){K<$||(K>$&&($=K,ee=[]),ee.push(e))}function en(){var e,t,i,r,a;for(e=K,t=[],i=eM();i!==h;)t.push(i),i=eM();if(t!==h)if((i=function(){var e,t,i,r,a,o;if(e=K,(t=eo())!==h){for(i=[],r=K,a=[],o=eM();o!==h;)a.push(o),o=eM();for(a!==h&&(o=eo())!==h?r=a=[a,o]:(K=r,r=h);r!==h;){for(i.push(r),r=K,a=[],o=eM();o!==h;)a.push(o),o=eM();a!==h&&(o=eo())!==h?r=a=[a,o]:(K=r,r=h)}i!==h?e=t=f(t,i):(K=e,e=h)}else K=e,e=h;return e}())===h&&(i=null),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h?e=t=p(i):(K=e,e=h)}else K=e,e=h;else K=e,e=h;return e}function eo(){var t,i,r,a,o,l;if(t=K,(i=function(){var t,i,r,a,o,l,c;
2if(t=K,m.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(g)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=em())!==h?(o=K,(l=ex())===h&&(l=null),l!==h&&(c=eh())!==h?o=l=[l,c]:(K=o,o=h),o===h&&(o=null),o!==h?t=i=v(i,a,o):(K=t,t=h)):(K=t,t=h)}else K=t,t=h;return t}())!==h){for(r=[],a=K,o=[],l=eM();l!==h;)o.push(l),l=eM();for(o!==h&&(l=el())!==h?a=o=[o,l]:(K=a,a=h);a!==h;){for(r.push(a),a=K,o=[],l=eM();l!==h;)o.push(l),l=eM();o!==h&&(l=el())!==h?a=o=[o,l]:(K=a,a=h)}r!==h?t=i=f(i,r):(K=t,t=h)}else K=t,t=h;return t}function el(){var t,i;return y.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(x)),i!==h&&(i=eT("Z")),(t=i)===h&&(t=function(){var t,i,r,a;if(t=K,b.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(w)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=eh())!==h?t=i=S(i,a):(K=t,t=h)}else K=t,t=h;return t}())===h&&(t=function(){var t,i,r,a;if(t=K,_.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(A)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=ec())!==h?t=i=eT(i,a.map(function(e){return{x:e}})):(K=t,t=h)}else K=t,t=h;return t}())===h&&(t=function(){var t,i,r,a;if(t=K,M.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(C)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=ec())!==h?t=i=eT(i,a.map(function(e){return{y:e}})):(K=t,t=h)}else K=t,t=h;return t}())===h&&(t=function(){var t,i,r,a;if(t=K,E.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(T)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=function(){var e,t,i,r,a,o;if(e=K,(t=ed())!==h){for(i=[],r=K,(a=ex())===h&&(a=null),a!==h&&(o=ed())!==h?r=a=[a,o]:(K=r,r=h);r!==h;)i.push(r),r=K,(a=ex())===h&&(a=null),a!==h&&(o=ed())!==h?r=a=[a,o]:(K=r,r=h);i!==h?e=t=f(t,i):(K=e,e=h)}else K=e,e=h;return e}())!==h?t=i=S(i,a):(K=t,t=h)}else K=t,t=h;return t}())===h&&(t=function(){var t,i,r,a;if(t=K,P.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(D)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=function(){var e,t,i,r,a,o;if(e=K,(t=eu())!==h){for(i=[],r=K,(a=ex())===h&&(a=null),a!==h&&(o=eu())!==h?r=a=[a,o]:(K=r,r=h);r!==h;)i.push(r),r=K,(a=ex())===h&&(a=null),a!==h&&(o=eu())!==h?r=a=[a,o]:(K=r,r=h);i!==h?e=t=f(t,i):(K=e,e=h)}else K=e,e=h;return e}())!==h?t=i=S(i,a):(K=t,t=h)}else K=t,t=h;return t}())===h&&(t=function(){var t,i,r,a;if(t=K,O.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(I)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=function(){var e,t,i,r,a,o;if(e=K,(t=ep())!==h){for(i=[],r=K,(a=ex())===h&&(a=null),a!==h&&(o=ep())!==h?r=a=[a,o]:(K=r,r=h);r!==h;)i.push(r),r=K,(a=ex())===h&&(a=null),a!==h&&(o=ep())!==h?r=a=[a,o]:(K=r,r=h);i!==h?e=t=f(t,i):(K=e,e=h)}else K=e,e=h;return e}())!==h?t=i=S(i,a):(K=t,t=h)}else K=t,t=h;return t}())===h&&(t=function(){var t,i,r,a;if(t=K,R.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(L)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=function(){var e,t,i,r,a,o;if(e=K,(t=em())!==h){for(i=[],r=K,(a=ex())===h&&(a=null),a!==h&&(o=em())!==h?r=a=[a,o]:(K=r,r=h);r!==h;)i.push(r),r=K,(a=ex())===h&&(a=null),a!==h&&(o=em())!==h?r=a=[a,o]:(K=r,r=h);i!==h?e=t=f(t,i):(K=e,e=h)}else K=e,e=h;return e}())!==h?t=i=S(i,a):(K=t,t=h)}else K=t,t=h;return t}())===h&&(t=function(){var t,i,r,a;if(t=K,B.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(z)),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h&&(a=function(){var e,t,i,r,a,o;if(e=K,(t=ef())!==h){for(i=[],r=K,(a=ex())===h&&(a=null),a!==h&&(o=ef())!==h?r=a=[a,o]:(K=r,r=h);r!==h;)i.push(r),r=K,(a=ex())===h&&(a=null),a!==h&&(o=ef())!==h?r=a=[a,o]:(K=r,r=h);i!==h?e=t=f(t,i):(K=e,e=h)}else K=e,e=h;return e}())!==h?t=i=S(i,a):(K=t,t=h)}else K=t,t=h;return t}()),t}function eh(){var e,t,i,r,a,o;if(e=K,(t=em())!==h){for(i=[],r=K,(a=ex())===h&&(a=null),a!==h&&(o=em())!==h?r=a=[a,o]:(K=r,r=h);r!==h;)i.push(r),r=K,(a=ex())===h&&(a=null),a!==h&&(o=em())!==h?r=a=[a,o]:(K=r,r=h);i!==h?e=t=f(t,i):(K=e,e=h)}else K=e,e=h;return e}function ec(){var e,t,i,r,a,o;if(e=K,(t=ev())!==h){for(i=[],r=K,(a=ex())===h&&(a=null),a!==h&&(o=ev())!==h?r=a=[a,o]:(K=r,r=h);r!==h;)i.push(r),r=K,(a=ex())===h&&(a=null),a!==h&&(o=ev())!==h?r=a=[a,o]:(K=r,r=h);i!==h?e=t=f(t,i):(K=e,e=h)}else K=e,e=h;return e}function ed(){var e,t,i,r,a,o,l,c,d;return e=K,(t=em())!==h?((i=ex())===h&&(i=null),i!==h&&(r=em())!==h?((a=ex())===h&&(a=null),a!==h&&(o=em())!==h?(l=t,c=r,d=o,e=t={x1:l.x,y1:l.y,x2:c.x,y2:c.y,x:d.x,y:d.y}):(K=e,e=h)):(K=e,e=h)):(K=e,e=h),e}function eu(){var e,t,i,r,a,o;return e=K,(t=em())!==h?((i=ex())===h&&(i=null),i!==h&&(r=em())!==h?(a=t,o=r,e=t={x2:a.x,y2:a.y,x:o.x,y:o.y}):(K=e,e=h)):(K=e,e=h),e}function ep(){var e,t,i,r,a,o;return e=K,(t=em())!==h?((i=ex())===h&&(i=null),i!==h&&(r=em())!==h?(a=t,o=r,e=t={x1:a.x,y1:a.y,x:o.x,y:o.y}):(K=e,e=h)):(K=e,e=h),e}function ef(){var e,t,i,r,a,o,l,c,d,p,f,m;return e=K,(t=eg())!==h?((i=ex())===h&&(i=null),i!==h&&(r=eg())!==h?((a=ex())===h&&(a=null),a!==h&&(o=ev())!==h&&ex()!==h&&(l=ey())!==h?((c=ex())===h&&(c=null),c!==h&&(d=ey())!==h?((p=ex())===h&&(p=null),p!==h&&(f=em())!==h?e=t={rx:t,ry:r,xAxisRotation:o,largeArc:l,sweep:d,x:(m=f).x,y:m.y}:(K=e,e=h)):(K=e,e=h)):(K=e,e=h)):(K=e,e=h)):(K=e,e=h),e}function em(){var e,t,i,r;return e=K,(t=ev())!==h?((i=ex())===h&&(i=null),i!==h&&(r=ev())!==h?e=t={x:t,y:r}:(K=e,e=h)):(K=e,e=h),e}function eg(){var e;return(e=ew())===h&&(e=eA()),e!==h&&(e*=1),e}function ev(){var e,t,i;return e=K,(t=e_())===h&&(t=null),t!==h&&(i=ew())!==h?e=t=[t,i]:(K=e,e=h),e===h&&
2(e=K,(t=e_())===h&&(t=null),t!==h&&(i=eA())!==h?e=t=[t,i]:(K=e,e=h)),e!==h&&(e=+e.join("")),e}function ey(){var t;return F.test(e.charAt(K))?(t=e.charAt(K),K++):(t=h,ea(N)),t!==h&&(t="1"==t),t}function ex(){var e,t,i,r,a;if(e=K,t=[],(i=eM())!==h)for(;i!==h;)t.push(i),i=eM();else t=h;if(t!==h)if((i=eb())===h&&(i=null),i!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h?e=t=[t,i,r]:(K=e,e=h)}else K=e,e=h;else K=e,e=h;if(e===h){if(e=K,t=K,(i=eb())!==h){for(r=[],a=eM();a!==h;)r.push(a),a=eM();r!==h?t=i=[i,r]:(K=t,t=h)}else K=t,t=h;t!==h&&(t=U()),e=t}return e}function eb(){var t;return 44===e.charCodeAt(K)?(t=",",K++):(t=h,ea(k)),t}function ew(){var t,i,r,a,o,l,c;return t=K,(a=K,(o=eA())===h&&(o=null),o!==h?(46===e.charCodeAt(K)?(l=".",K++):(l=h,ea(j)),l!==h&&(c=eA())!==h?a=o=[o,l,c]:(K=a,a=h)):(K=a,a=h),a===h&&(a=K,(o=eA())!==h?(46===e.charCodeAt(K)?(l=".",K++):(l=h,ea(j)),l!==h?a=o=[o,l]:(K=a,a=h)):(K=a,a=h)),a!==h&&(a=V(a)),(i=a)!==h)?((r=eS())===h&&(r=null),r!==h?t=i=[i,r]:(K=t,t=h)):(K=t,t=h),t===h&&(t=K,(i=eA())!==h&&(r=eS())!==h?t=i=[i,r]:(K=t,t=h)),t!==h&&(t=V(t)),t}function eS(){var t,i,r,a;return t=K,G.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(W)),i!==h?((r=e_())===h&&(r=null),r!==h&&(a=eA())!==h?t=i=[i,r,a]:(K=t,t=h)):(K=t,t=h),t!==h&&(t=V(t)),t}function e_(){var t;return H.test(e.charAt(K))?(t=e.charAt(K),K++):(t=h,ea(q)),t}function eA(){var t,i;if(t=[],X.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(Y)),i!==h)for(;i!==h;)t.push(i),X.test(e.charAt(K))?(i=e.charAt(K),K++):(i=h,ea(Y));else t=h;return t!==h&&(t=t.join("")),t}function eM(){var t;return Q.test(e.charAt(K))?(t=e.charAt(K),K++):(t=h,ea(Z)),t!==h&&(t=U()),t}var eC={m:"moveto",l:"lineto",h:"horizontal lineto",v:"vertical lineto",c:"curveto",s:"smooth curveto",q:"quadratic curveto",t:"smooth quadratic curveto",a:"elliptical arc",z:"closepath"};for(var eE in eC)eC[eE.toUpperCase()]=eC[eE];function eT(e,t){t||(t=[{}]);for(var i=t.length;i--;){var r={code:e,command:eC[e]};for(var a in e==e.toLowerCase()&&(r.relative=!0),t[i])r[a]=t[i][a];t[i]=r}return t}if((l=d())!==h&&K===e.length)return l;throw l!==h&&K<e.length&&ea({type:"end"}),r=ee,a=$<e.length?e.charAt($):null,o=$<e.length?es($,$+1):es($,$),new i(i.buildMessage(r,a),r,a,o)}}}),tj=tL((e,t)=>{var i=tV().parse;i.parseSVG=i,i.makeAbsolute=function(e){var t,i={x:0,y:0},r={x:"x0",y:"y0",x1:"x0",y1:"y0",x2:"x0",y2:"y0"};return e.forEach(function(e){for(var a in"moveto"===e.command&&(t=e),e.x0=i.x,e.y0=i.y,r)a in e&&(e[a]+=e.relative?e[r[a]]:0);"x"in e||(e.x=i.x),"y"in e||(e.y=i.y),e.relative=!1,e.code=e.code.toUpperCase(),"closepath"==e.command&&(e.x=t.x,e.y=t.y),i=e}),e},t.exports=i}),tG=tL((e,t)=>{t.exports=function(e,t){for(var i=e.split("."),r=t.split("."),a=0;a<3;a++){var o=Number(i[a]),l=Number(r[a]);if(o>l)return 1;if(l>o)return -1;if(!isNaN(o)&&isNaN(l))return 1;if(isNaN(o)&&!isNaN(l))return -1}return 0}}),tW="srgb",tH="srgb-linear",tq="300 es",tX=class{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let i=this._listeners;void 0===i[e]&&(i[e]=[]),-1===i[e].indexOf(t)&&i[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let i=this._listeners;return void 0!==i[e]&&-1!==i[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let i=this._listeners[e];if(void 0!==i){let e=i.indexOf(t);-1!==e&&i.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let i=t.slice(0);for(let t=0,r=i.length;t<r;t++)i[t].call(this,e);e.target=null}}},tY=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],tQ=1234567,tZ=Math.PI/180,tK=180/Math.PI;function tJ(){let e=0xffffffff*Math.random()|0,t=0xffffffff*Math.random()|0,i=0xffffffff*Math.random()|0,r=0xffffffff*Math.random()|0;return(tY[255&e]+tY[e>>8&255]+tY[e>>16&255]+tY[e>>24&255]+"-"+tY[255&t]+tY[t>>8&255]+"-"+tY[t>>16&15|64]+tY[t>>24&255]+"-"+tY[63&i|128]+tY[i>>8&255]+"-"+tY[i>>16&255]+tY[i>>24&255]+tY[255&r]+tY[r>>8&255]+tY[r>>16&255]+tY[r>>24&255]).toLowerCase()}function t$(e,t,i){return Math.max(t,Math.min(i,e))}function t0(e,t){return(e%t+t)%t}function t1(e,t,i){return(1-i)*e+i*t}function t2(e){return(e&e-1)==0&&0!==e}function t3(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))}function t4(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}function t5(e,t){switch(t.constructor){case Float32Array:return e;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error("Invalid component type.")}}function t6(e,t){switch(t.constructor){case Float32Array:return e;case Uint16Array:return Math.round(65535*e);case Uint8Array:return Math.round(255*e);case Int16Array:return Math.round(32767*e);case Int8Array:return Math.round(127*e);default:throw Error("Invalid component type.")}}var t8=Object.freeze({__proto__:null,DEG2RAD:tZ,RAD2DEG:tK,ceilPowerOfTwo:t3,clamp:t$,damp:function(e,t,i,r){return t1(e,t,1-Math.exp(-i*r))},degToRad:function(e){return e*tZ},denormalize:t5,euclideanModulo:t0,floorPowerOfTwo:t4,generateUUID:tJ,inverseLerp:function(e,t,i){return e!==t?(i-e)/(t-e):0},isPowerOfTwo:t2,lerp:t1,mapLinear:function(e,t,i,r,a){return r+(e-t)*(a-r)/(i-t)},normalize:t6,pingpong:function(e,t=1){return t-Math.abs(t0(e,2*t)-t)},radToDeg:function(e){return e*tK},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},seededRandom:function(e){void 0!==e&&(tQ=e);let t=tQ+=0x6d2b79f5;return t=Math.imul(t^t>>>15,1|t),(((t^=t+Math.imul(t^t>>>7,61|t))^t>>>14)>>>0)/0x100000000},setQuaternionFromProperEuler:function(e,t,i,r,a){let o=Math.cos,l=Math.sin,h=o(i/2),c=l(i/2),d=o((t
vendor: 7,198 bytes, line 2
2+r)/2),p=l((t+r)/2),f=o((t-r)/2),m=l((t-r)/2),g=o((r-t)/2),v=l((r-t)/2);switch(a){case"XYX":e.set(h*p,c*f,c*m,h*d);break;case"YZY":e.set(c*m,h*p,c*f,h*d);break;case"ZXZ":e.set(c*f,c*m,h*p,h*d);break;case"XZX":e.set(h*p,c*v,c*g,h*d);break;case"YXY":e.set(c*g,h*p,c*v,h*d);break;case"ZYZ":e.set(c*v,c*g,h*p,h*d)}},smootherstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*e*(e*(6*e-15)+10)},smoothstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*(3-2*e)}}),t9=class{constructor(e=0,t=0){t9.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,i=this.y,r=e.elements;return this.x=r[0]*t+r[3]*i+r[6],this.y=r[1]*t+r[4]*i+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let i=Math.cos(t),r=Math.sin(t),a=this.x-e.x,o=this.y-e.y;return this.x=a*i-o*r+e.x,this.y=a*r+o*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},t7=class{constructor(){t7.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1]}set(e,t,i,r,a,o,l,h,c){let d=this.elements;return d[0]=e,d[1]=r,d[2]=l,d[3]=t,d[4]=a,d[5]=h,d[6]=i,d[7]=o,d[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,a=this.elements,o=i[0],l=i[3],h=i[6],c=i[1],d=i[4],p=i[7],f=i[2],m=i[5],g=i[8],v=r[0],y=r[3],x=r[6],b=r[1],w=r[4],S=r[7],_=r[2],A=r[5],M=r[8];return a[0]=o*v+l*b+h*_,a[3]=o*y+l*w+h*A,a[6]=o*x+l*S+h*M,a[1]=c*v+d*b+p*_,a[4]=c*y+d*w+p*A,a[7]=c*x+d*S+p*M,a[2]=f*v+m*b+g*_,a[5]=f*y+m*w+g*A,a[8]=f*x+m*S+g*M,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[1],r=e[2],a=e[3],o=e[4],l=e[5],h=e[6],c=e[7],d=e[8];return t*o*d-t*l*c-i*a*d+i*l*h+r*a*c-r*o*h}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],a=e[3],o=e[4],l=e[5],h=e[6],c=e[7],d=e[8],p=d*o-l*c,f=l*h-d*a,m=c*a-o*h,g=t*p+i*f+r*m;if(0===g)return this.set(0,0,0,0,0,0,0,0,0);let v=1/g;return e[0]=p*v,e[1]=(r*c-d*i)*v,e[2]=(l*i-r*o)*v,e[3]=f*v,e[4]=(d*t-r*h)*v,e[5]=(r*a-l*t)*v,e[6]=m*v,e[7]=(i*h-c*t)*v,e[8]=(o*t-i*a)*v,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,r,a,o,l){let h=Math.cos(a),c=Math.sin(a);return this.set(i*h,i*c,-i*(h*o+c*l)+o+e,-r*c,r*h,-r*(-c*o+h*l)+l+t,0,0,1),this}scale(e,t){return this.premultiply(ie.makeScale(e,t)),this}rotate(e){return this.premultiply(ie.makeRotation(-e)),this}translate(e,t){return this.premultiply(ie.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,i=e.elements;for(let e=0;e<9;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}},ie=new t7;function it(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}var ii={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function ir(e,t){return new ii[e](t)}function is(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function ia(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}
2function io(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}var il={[tW]:{[tH]:ia},[tH]:{[tW]:io}},ih={legacyMode:!0,get workingColorSpace(){return tH},set workingColorSpace(n){},convert:function(e,t,i){if(this.legacyMode||t===i||!t||!i)return e;if(il[t]&&void 0!==il[t][i]){let r=il[t][i];return e.r=r(e.r),e.g=r(e.g),e.b=r(e.b),e}throw Error("Unsupported color space conversion.")},fromWorkingColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},toWorkingColorSpace:function(e,t){return this.convert(e,t,this.workingColorSpace)}},ic={aliceblue:0xf0f8ff,antiquewhite:0xfaebd7,aqua:65535,aquamarine:8388564,azure:0xf0ffff,beige:0xf5f5dc,bisque:0xffe4c4,black:0,blanchedalmond:0xffebcd,blue:255,blueviolet:9055202,brown:0xa52a2a,burlywood:0xdeb887,cadetblue:6266528,chartreuse:8388352,chocolate:0xd2691e,coral:0xff7f50,cornflowerblue:6591981,cornsilk:0xfff8dc,crimson:0xdc143c,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:0xb8860b,darkgray:0xa9a9a9,darkgreen:25600,darkgrey:0xa9a9a9,darkkhaki:0xbdb76b,darkmagenta:9109643,darkolivegreen:5597999,darkorange:0xff8c00,darkorchid:0x9932cc,darkred:9109504,darksalmon:0xe9967a,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:0xff1493,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:0xb22222,floralwhite:0xfffaf0,forestgreen:2263842,fuchsia:0xff00ff,gainsboro:0xdcdcdc,ghostwhite:0xf8f8ff,gold:0xffd700,goldenrod:0xdaa520,gray:8421504,green:32768,greenyellow:0xadff2f,grey:8421504,honeydew:0xf0fff0,hotpink:0xff69b4,indianred:0xcd5c5c,indigo:4915330,ivory:0xfffff0,khaki:0xf0e68c,lavender:0xe6e6fa,lavenderblush:0xfff0f5,lawngreen:8190976,lemonchiffon:0xfffacd,lightblue:0xadd8e6,lightcoral:0xf08080,lightcyan:0xe0ffff,lightgoldenrodyellow:0xfafad2,lightgray:0xd3d3d3,lightgreen:9498256,lightgrey:0xd3d3d3,lightpink:0xffb6c1,lightsalmon:0xffa07a,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:0xb0c4de,lightyellow:0xffffe0,lime:65280,limegreen:3329330,linen:0xfaf0e6,magenta:0xff00ff,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:0xba55d3,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:0xc71585,midnightblue:1644912,mintcream:0xf5fffa,mistyrose:0xffe4e1,moccasin:0xffe4b5,navajowhite:0xffdead,navy:128,oldlace:0xfdf5e6,olive:8421376,olivedrab:7048739,orange:0xffa500,orangered:0xff4500,orchid:0xda70d6,palegoldenrod:0xeee8aa,palegreen:0x98fb98,paleturquoise:0xafeeee,palevioletred:0xdb7093,papayawhip:0xffefd5,peachpuff:0xffdab9,peru:0xcd853f,pink:0xffc0cb,plum:0xdda0dd,powderblue:0xb0e0e6,purple:8388736,rebeccapurple:6697881,red:0xff0000,rosybrown:0xbc8f8f,royalblue:4286945,saddlebrown:9127187,salmon:0xfa8072,sandybrown:0xf4a460,seagreen:3050327,seashell:0xfff5ee,sienna:0xa0522d,silver:0xc0c0c0,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:0xfffafa,springgreen:65407,steelblue:4620980,tan:0xd2b48c,teal:32896,thistle:0xd8bfd8,tomato:0xff6347,turquoise:4251856,violet:0xee82ee,wheat:0xf5deb3,white:0xffffff,whitesmoke:0xf5f5f5,yellow:0xffff00,yellowgreen:0x9acd32},id={r:0,g:0,b:0},iu={h:0,s:0,l:0},ip={h:0,s:0,l:0};function im(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(t-e)*6*i:i<.5?t:i<2/3?e+(t-e)*6*(2/3-i):e}function ig(e,t){return t.r=e.r,t.g=e.g,t.b=e.b,t}var iv=class{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,void 0===t&&void 0===i?this.set(e):this.setRGB(e,t,i)}set(e){return e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=tW){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,ih.toWorkingColorSpace(this,t),this}setRGB(e,t,i,r=ih.workingColorSpace){return this.r=e,this.g=t,this.b=i,ih.toWorkingColorSpace(this,r),this}setHSL(e,t,i,r=ih.workingColorSpace){if(e=t0(e,1),t=t$(t,0,1),i=t$(i,0,1),0===t)this.r=this.g=this.b=i;else{let r=i<=.5?i*(1+t):i+t-i*t,a=2*i-r;this.r=im(a,r,e+1/3),this.g=im(a,r,e),this.b=im(a,r,e-1/3)}return ih.toWorkingColorSpace(this,r),this}setStyle(e,t=tW){let i;function r(e){void 0!==e&&parseFloat(e)}if(i=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(e)){let e,a=i[1],o=i[2];switch(a){case"rgb":case"rgba":if(e=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return this.r=Math.min(255,parseInt(e[1],10))/255,this.g=Math.min(255,parseInt(e[2],10))/255,this.b=Math.min(255,parseInt(e[3],10))/255,ih.toWorkingColorSpace(this,t),r(e[4]),this;if(e=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return this.r=Math.min(100,parseInt(e[1],10))/100,this.g=Math.min(100,parseInt(e[2],10))/100,this.b=Math.min(100,parseInt(e[3],10))/100,ih.toWorkingColorSpace(this,t),r(e[4]),this;break;case"hsl":case"hsla":if(e=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o)){let i=parseFloat(e[1])/360,a=parseFloat(e[2])/100,o=parseFloat(e[3])/100;return r(e[4]),this.setHSL(i,a,o,t)}}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){let e=i[1],r=e.length;if(3===r)return this.r=parseInt(e.charAt(0)+e.charAt(0),16)/255,this.g=parseInt(e.charAt(1)+e.charAt(1),16)/255,this.b=parseInt(e.charAt(2)+e.charAt(2),16)/255,ih.toWorkingColorSpace(this,t),this;if(6===r)return this.r=parseInt(e.charAt(0)+e.charAt(1),16)/255,this.g=parseInt(e.charAt(2)+e.charAt(3),16)/255,this.b=parseInt(e.charAt(4)+e.charAt(5),16)/255,ih.toWorkingColorSpace(this,t),this}return e&&e.length>0?this.setColorName(e,t):this}setColorName(e,t=tW){let i=ic[e.toLowerCase()];return void 0!==i&&this.setHex(i,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=ia(e.r),this.g=ia(e.g),this.b=ia(e.b),this}copyLinearToSRGB(e){return this.r=io(e.r),this.g=io(e.g),this.b=io(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=tW){return ih.fromWorkingColorSpace(ig(this,id),e),t$(255*id.r,0,255)<<16^t$(255*id.g,0,255)<<8^t$(255*id.b,0,255)}getHexString(e=tW){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=ih.workingColorSpace){ih.fromWorkingColorSpace(ig(this,id),t);let i=id.r,r=id.g,a=id.b,o=Math.max(i,r,a),l=Math.min(i,r,a),h,c,d=(l+o)/2;if(l===o)h=0,c=0;else{let e=o-l;
2switch(c=d<=.5?e/(o+l):e/(2-o-l),o){case i:h=(r-a)/e+6*(r<a);break;case r:h=(a-i)/e+2;break;case a:h=(i-r)/e+4}h/=6}return e.h=h,e.s=c,e.l=d,e}getRGB(e,t=ih.workingColorSpace){return ih.fromWorkingColorSpace(ig(this,id),t),e.r=id.r,e.g=id.g,e.b=id.b,e}getStyle(e=tW){return ih.fromWorkingColorSpace(ig(this,id),e),e!==tW?`color(${e} ${id.r} ${id.g} ${id.b})`:`rgb(${255*id.r|0},${255*id.g|0},${255*id.b|0})`}offsetHSL(e,t,i){return this.getHSL(iu),iu.h+=e,iu.s+=t,iu.l+=i,this.setHSL(iu.h,iu.s,iu.l),this}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,i){return this.r=e.r+(t.r-e.r)*i,this.g=e.g+(t.g-e.g)*i,this.b=e.b+(t.b-e.b)*i,this}lerpHSL(e,t){this.getHSL(iu),e.getHSL(ip);let i=t1(iu.h,ip.h,t),r=t1(iu.s,ip.s,t),a=t1(iu.l,ip.l,t);return this.setHSL(i,r,a),this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}};iv.NAMES=ic;var iy,ix=class{static getDataURL(e){let t;if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;if(e instanceof HTMLCanvasElement)t=e;else{void 0===iy&&(iy=is("canvas")),iy.width=e.width,iy.height=e.height;let i=iy.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),t=iy}return t.width>2048||t.height>2048?t.toDataURL("image/jpeg",.6):t.toDataURL("image/png")}static sRGBToLinear(e){if("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap){let t=is("canvas");t.width=e.width,t.height=e.height;let i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);let r=i.getImageData(0,0,e.width,e.height),a=r.data;for(let e=0;e<a.length;e++)a[e]=255*ia(a[e]/255);return i.putImageData(r,0,0),t}if(!e.data)return e;{let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(255*ia(t[e]/255
2)):t[e]=ia(t[e]);return{data:t,width:e.width,height:e.height}}}},ib=class{constructor(e=null){this.isSource=!0,this.uuid=tJ(),this.data=e,this.version=0}set needsUpdate(e){!0===e&&this.version++}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.images[this.uuid])return e.images[this.uuid];let i={uuid:this.uuid,url:""},r=this.data;if(null!==r){let e;if(Array.isArray(r)){e=[];for(let t=0,i=r.length;t<i;t++)r[t].isDataTexture?e.push(iw(r[t].image)):e.push(iw(r[t]))}else e=iw(r);i.url=e}return t||(e.images[this.uuid]=i),i}};function iw(e){return"u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap?ix.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:{}}var iS=0,i_=class extends tX{constructor(e=i_.DEFAULT_IMAGE,t=i_.DEFAULT_MAPPING,i=1001,r=1001,a=1006,o=1008,l=1023,h=1009,c=i_.DEFAULT_ANISOTROPY,d=3e3){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:iS++}),this.uuid=tJ(),this.name="",this.source=new ib(e),this.mipmaps=[],this.mapping=t,this.wrapS=i,this.wrapT=r,this.magFilter=a,this.minFilter=o,this.anisotropy=c,this.format=l,this.internalFormat=null,this.type=h,this.offset=new t9(0,0),this.repeat=new t9(1,1),this.center=new t9(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new t7,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=d,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.encoding=e.encoding,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){let t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];let i={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(300!==this.mapping)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case 1e3:e.x=e.x-Math.floor(e.x);break;case 1001:e.x=e.x<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case 1e3:e.y=e.y-Math.floor(e.y);break;case 1001:e.y=e.y<0?0:1;break;case 1002:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&(this.version++,this.source.needsUpdate=!0)}};i_.DEFAULT_IMAGE=null,i_.DEFAULT_MAPPING=300,i_.DEFAULT_ANISOTROPY=1;var iA=class{constructor(e=0,t=0,i=0,r=1){iA.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,r){return this.x=e,this.y=t,this.z=i,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}
2sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,a=this.w,o=e.elements;return this.x=o[0]*t+o[4]*i+o[8]*r+o[12]*a,this.y=o[1]*t+o[5]*i+o[9]*r+o[13]*a,this.z=o[2]*t+o[6]*i+o[10]*r+o[14]*a,this.w=o[3]*t+o[7]*i+o[11]*r+o[15]*a,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,r,a,o=e.elements,l=o[0],h=o[4],c=o[8],d=o[1],p=o[5],f=o[9],m=o[2],g=o[6],v=o[10];if(.01>Math.abs(h-d)&&.01>Math.abs(c-m)&&.01>Math.abs(f-g)){if(.1>Math.abs(h+d)&&.1>Math.abs(c+m)&&.1>Math.abs(f+g)&&.1>Math.abs(l+p+v-3))return this.set(1,0,0,0),this;t=Math.PI;let e=(l+1)/2,o=(p+1)/2,y=(v+1)/2,x=(h+d)/4,b=(c+m)/4,w=(f+g)/4;return e>o&&e>y?e<.01?(i=0,r=.707106781,a=.707106781):(r=x/(i=Math.sqrt(e)),a=b/i):o>y?o<.01?(i=.707106781,r=0,a=.707106781):(i=x/(r=Math.sqrt(o)),a=w/r):y<.01?(i=.707106781,r=.707106781,a=0):(i=b/(a=Math.sqrt(y)),r=w/a),this.set(i,r,a,t),this}let y=Math.sqrt((g-f)*(g-f)+(c-m)*(c-m)+(d-h)*(d-h));return .001>Math.abs(y)&&(y=1),this.x=(g-f)/y,this.y=(c-m)/y,this.z=(d-h)/y,this.w=Math.acos((l+p+v-1)/2),this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},iM=class extends tX{constructor(e=1,t=1,i={}
2){super(),this.isWebGLRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new iA(0,0,e,t),this.scissorTest=!1,this.viewport=new iA(0,0,e,t),this.texture=new i_({width:e,height:t,depth:1},i.mapping,i.wrapS,i.wrapT,i.magFilter,i.minFilter,i.format,i.type,i.anisotropy,i.encoding),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=void 0!==i.generateMipmaps&&i.generateMipmaps,this.texture.internalFormat=void 0!==i.internalFormat?i.internalFormat:null,this.texture.minFilter=void 0!==i.minFilter?i.minFilter:1006,this.depthBuffer=void 0===i.depthBuffer||i.depthBuffer,this.stencilBuffer=void 0!==i.stencilBuffer&&i.stencilBuffer,this.depthTexture=void 0!==i.depthTexture?i.depthTexture:null,this.samples=void 0!==i.samples?i.samples:0}setSize(e,t,i=1){(this.width!==e||this.height!==t||this.depth!==i)&&(this.width=e,this.height=t,this.depth=i,this.texture.image.width=e,this.texture.image.height=t,this.texture.image.depth=i,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.texture.isRenderTargetTexture=!0;let t=Object.assign({},e.texture.image);return this.texture.source=new ib(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}},iC=class extends i_{constructor(e=null,t=1,i=1,r=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:i,depth:r},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},iE=class extends i_{constructor(e=null,t=1,i=1,r=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:i,depth:r},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},iT=class extends iM{constructor(e=1,t=1,i=1,r={}){super(e,t,r),this.isWebGLMultipleRenderTargets=!0;let a=this.texture;this.texture=[];for(let e=0;e<i;e++)this.texture[e]=a.clone(),this.texture[e].isRenderTargetTexture=!0}setSize(e,t,i=1){if(this.width!==e||this.height!==t||this.depth!==i){this.width=e,this.height=t,this.depth=i;for(let r=0,a=this.texture.length;r<a;r++)this.texture[r].image.width=e,this.texture[r].image.height=t,this.texture[r].image.depth=i;this.dispose()}return this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t),this}copy(e){this.dispose(),this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.texture.length=0;for(let t=0,i=e.texture.length;t<i;t++)this.texture[t]=e.texture[t].clone(),this.texture[t].isRenderTargetTexture=!0;return this}},iP=class{constructor(e=0,t=0,i=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=r}static slerpFlat(e,t,i,r,a,o,l){let h=i[r+0],c=i[r+1],d=i[r+2],p=i[r+3],f=a[o+0],m=a[o+1],g=a[o+2],v=a[o+3];if(0===l){e[t+0]=h,e[t+1]=c,e[t+2]=d,e[t+3]=p;return}if(1===l){e[t+0]=f,e[t+1]=m,e[t+2]=g,e[t+3]=v;return}if(p!==v||h!==f||c!==m||d!==g){let e=1-l,t=h*f+c*m+d*g+p*v,i=t>=0?1:-1,r=1-t*t;if(r>Number.EPSILON){let a=Math.sqrt(r),o=Math.atan2(a,t*i);e=Math.sin(e*o)/a,l=Math.sin(l*o)/a}let a=l*i;if(h=h*e+f*a,c=c*e+m*a,d=d*e+g*a,p=p*e+v*a,e===1-l){let e=1/Math.sqrt(h*h+c*c+d*d+p*p);h*=e,c*=e,d*=e,p*=e}}e[t]=h,e[t+1]=c,e[t+2]=d,e[t+3]=p}static multiplyQuaternionsFlat(e,t,i,r,a,o){let l=i[r],h=i[r+1],c=i[r+2],d=i[r+3],p=a[o],f=a[o+1],m=a[o+2],g=a[o+3];return e[t]=l*g+d*p+h*m-c*f,e[t+1]=h*g+d*f+c*p-l*m,e[t+2]=c*g+d*m+l*f-h*p,e[t+3]=d*g-l*p-h*f-c*m,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,r){return this._x=e,this._y=t,this._z=i,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t){let i=e._x,r=e._y,a=e._z,o=e._order,l=Math.cos,h=Math.sin,c=l(i/2),d=l(r/2),p=l(a/2),f=h(i/2),m=h(r/2),g=h(a/2);switch(o){case"XYZ":this._x=f*d*p+c*m*g,this._y=c*m*p-f*d*g,this._z=c*d*g+f*m*p,this._w=c*d*p-f*m*g;break;case"YXZ":this._x=f*d*p+c*m*g,this._y=c*m*p-f*d*g,this._z=c*d*g-f*m*p,this._w=c*d*p+f*m*g;break;case"ZXY":this._x=f*d*p-c*m*g,this._y=c*m*p+f*d*g,this._z=c*d*g+f*m*p,this._w=c*d*p-f*m*g;break;case"ZYX":this._x=f*d*p-c*m*g,this._y=c*m*p+f*d*g,this._z=c*d*g-f*m*p,this._w=c*d*p+f*m*g;break;case"YZX":this._x=f*d*p+c*m*g,this._y=c*m*p+f*d*g,this._z=c*d*g-f*m*p,this._w=c*d*p-f*m*g;break;case"XZY":this._x=f*d*p-c*m*g,this._y=c*m*p-f*d*g,this._z=c*d*g+f*m*p,this._w=c*d*p+f*m*g}return!1!==t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let i=t/2,r=Math.sin(i);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,i=t[0],r=t[4],a=t[8],o=t[1],l=t[5],h=t[9],c=t[2],d=t[6],p=t[10],f=i+l+p;if(f>0){let e=.5/Math.sqrt(f+1);this._w=.25/e,this._x=(d-h)*e,this._y=(a-c)*e,this._z=(o-r)*e}else if(i>l&&i>p){let e=2*Math.sqrt(1+i-l-p);this._w=(d-h)/e,this._x=.25*e,this._y=(r+o)/e,this._z=(a+c)/e}else if(l>p){let e=2*Math.sqrt(1+l-i-p);this._w=(a-c)/e,this._x=(r+o)/e,this._y=.25*e,this._z=(h+d)/e}else{let e=2*Math.sqrt(1+p-i-l);this._w=(o-r)/e,this._x=(a+c)/e,this._y=(h+d)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<Number.EPSILON?(i=0,Math.abs(e.x)>
vendor: 12,050 bytes, line 2
2Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0):(this._x=0,this._y=-e.z,this._z=e.y)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x),this._w=i,this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(t$(this.dot(e),-1,1)))}rotateTowards(e,t){let i=this.angleTo(e);if(0===i)return this;let r=Math.min(1,t/i);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let i=e._x,r=e._y,a=e._z,o=e._w,l=t._x,h=t._y,c=t._z,d=t._w;return this._x=i*d+o*l+r*c-a*h,this._y=r*d+o*h+a*l-i*c,this._z=a*d+o*c+i*h-r*l,this._w=o*d-i*l-r*h-a*c,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);let i=this._x,r=this._y,a=this._z,o=this._w,l=o*e._w+i*e._x+r*e._y+a*e._z;if(l<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,l=-l):this.copy(e),l>=1)return this._w=o,this._x=i,this._y=r,this._z=a,this;let h=1-l*l;if(h<=Number.EPSILON){let e=1-t;return this._w=e*o+t*this._w,this._x=e*i+t*this._x,this._y=e*r+t*this._y,this._z=e*a+t*this._z,this.normalize(),this._onChangeCallback(),this}let c=Math.sqrt(h),d=Math.atan2(c,l),p=Math.sin((1-t)*d)/c,f=Math.sin(t*d)/c;return this._w=o*p+this._w*f,this._x=i*p+this._x*f,this._y=r*p+this._y*f,this._z=a*p+this._z*f,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){let e=Math.random(),t=Math.sqrt(1-e),i=Math.sqrt(e),r=2*Math.PI*Math.random(),a=2*Math.PI*Math.random();return this.set(t*Math.cos(r),i*Math.sin(a),i*Math.cos(a),t*Math.sin(r))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},iD=class{constructor(e=0,t=0,i=0){iD.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return void 0===i&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(iI.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(iI.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,i=this.y,r=this.z,a=e.elements;return this.x=a[0]*t+a[3]*i+a[6]*r,this.y=a[1]*t+a[4]*i+a[7]*r,this.z=a[2]*t+a[5]*i+a[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,i=this.y,r=this.z,a=e.elements,o=1/(a[3]*t+a[7]*i+a[11]*r+a[15]);return this.x=(a[0]*t+a[4]*i+a[8]*r+a[12])*o,this.y=(a[1]*t+a[5]*i+a[9]*r+a[13])*o,this.z=(a[2]*t+a[6]*i+a[10]*r+a[14])*o,this}applyQuaternion(e){let t=this.x,i=this.y,r=this.z,a=e.x,o=e.y,l=e.z,h=e.w,c=h*t+o*r-l*i,d=h*i+l*t-a*r,p=h*r+a*i-o*t,f=-a*t-o*i-l*r;return this.x=c*h+-(f*a)+-(d*l)- -(p*o),this.y=d*h+-(f*o)+-(p*a)- -(c*l),this.z=p*h+-(f*l)+-(c*o)- -(d*a),this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,i=this.y,r=this.z,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*r,this.y=a[1]*t+a[5]*i+a[9]*r,this.z=a[2]*t+a[6]*i+a[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){let i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let i=e.x,r=e.y,a=e.z,o=t.x,l=t.y,h=t.z;return this.x=r*h-a*l,this.y=a*o-i*h,this.z=i*l-r*o,this}projectOnVector(e){let t=e.lengthSq();if(0===t)return this.set(0,0,0);let i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return iO.copy(this).projectOnVector(e),this.sub(iO)}reflect(e){return this.sub(iO.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());return 0===t?Math.PI/2:Math.acos(t$(this.dot(e)/t,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,i=this.y-e.y,r=this.z-e.z;return t*t+i*i+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){let r=Math.sin(t)*e;return this.x=r*Math.sin(i),this.y=Math.cos(t)*e,this.z=r*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=(Math.random()-.5)*2,t=Math.random()*Math.PI*2,i=Math.sqrt(1-e**2);return this.x=i*Math.cos(t),this.y=i*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},iO=new iD,iI=new iP,iR=class{constructor(e=new iD(1/0,1/0,1/0),t=new iD(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){let t=1/0,i=1/0,r=1/0,a=-1/0,o=-1/0,l=-1/0;for(let h=0,c=e.length;h<c;h+=3){let c=e[h],d=e[h+1],p=e[h+2];c<t&&(t=c),d<i&&(i=d),p<r&&(r=p),c>a&&(a=c),d>o&&(o=d),p>l&&(l=p)}return this.min.set(t,i,r),this.max.set(a,o,l),this}setFromBufferAttribute(e){let t=1/0,i=1/0,r=1/0,a=-1/0,o=-1/0,l=-1/0;for(let h=0,c=e.count;h<c;h++){let c=e.getX(h),d=e.getY(h),p=e.getZ(h);c<t&&(t=c),d<i&&(i=d),p<r&&(r=p),c>a&&(a=c),d>o&&(o=d),p>l&&(l=p)}return this.min.set(t,i,r),this.max.set(a,o,l),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t<i;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let i=iB.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let i=e.geometry;if(void 0!==i)if(t&&null!=i.attributes&&void 0!==i.attributes.position){let t=i.attributes.position;for(let i=0,r=t.count;i<r;i++)iB.fromBufferAttribute(t,i).applyMatrix4(e.matrixWorld),this.expandByPoint(iB)}else null===i.boundingBox&&i.computeBoundingBox(),iz.copy(i.boundingBox),iz.applyMatrix4(e.matrixWorld),this.union(iz);let r=e.children;for(let e=0,i=r.length;e<i;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z)}intersectsSphere(e){return this.clampPoint(e.center,iB),iB.distanceToSquared(e.center)<=e.radius*e.radiu
2s}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(iG),iW.subVectors(this.max,iG),iF.subVectors(e.a,iG),iN.subVectors(e.b,iG),iU.subVectors(e.c,iG),ik.subVectors(iN,iF),iV.subVectors(iU,iN),ij.subVectors(iF,iU);let t=[0,-ik.z,ik.y,0,-iV.z,iV.y,0,-ij.z,ij.y,ik.z,0,-ik.x,iV.z,0,-iV.x,ij.z,0,-ij.x,-ik.y,ik.x,0,-iV.y,iV.x,0,-ij.y,ij.x,0];return!!iX(t,iF,iN,iU,iW)&&!!iX(t=[1,0,0,0,1,0,0,0,1],iF,iN,iU,iW)&&(iH.crossVectors(ik,iV),iX(t=[iH.x,iH.y,iH.z],iF,iN,iU,iW))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return iB.copy(e).clamp(this.min,this.max).sub(e).length()}getBoundingSphere(e){return this.getCenter(e.center),e.radius=.5*this.getSize(iB).length(),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(iL[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),iL[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),iL[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),iL[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),iL[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),iL[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),iL[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),iL[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(iL)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},iL=[new iD,new iD,new iD,new iD,new iD,new iD,new iD,new iD],iB=new iD,iz=new iR,iF=new iD,iN=new iD,iU=new iD,ik=new iD,iV=new iD,ij=new iD,iG=new iD,iW=new iD,iH=new iD,iq=new iD;function iX(e,t,i,r,a){for(let o=0,l=e.length-3;o<=l;o+=3){iq.fromArray(e,o);let l=a.x*Math.abs(iq.x)+a.y*Math.abs(iq.y)+a.z*Math.abs(iq.z),h=t.dot(iq),c=i.dot(iq),d=r.dot(iq);if(Math.max(-Math.max(h,c,d),Math.min(h,c,d))>l)return!1}return!0}var iY=new iR,iQ=new iD,iZ=new iD,iK=class{constructor(e=new iD,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let i=this.center;void 0!==t?i.copy(t):iY.setFromPoints(e).getCenter(i);let r=0;for(let t=0,a=e.length;t<a;t++)r=Math.max(r,i.distanceToSquared(e[t]));return this.radius=Math.sqrt(r),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let i=this.center.distanceToSquared(e);return t.copy(e),i>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?e.makeEmpty():(e.set(this.center,this.center),e.expandByScalar(this.radius)),e}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;iQ.subVectors(e,this.center);let t=iQ.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),i=(e-this.radius)*.5;this.center.addScaledVector(iQ,i/e),this.radius+=i}return this}union(e){return e.isEmpty()||(this.isEmpty()?this.copy(e):!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(iZ.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(iQ.copy(e.center).add(iZ)),this.expandByPoint(iQ.copy(e.center).sub(iZ)))),this}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}},iJ=new iD,i$=new iD,i0=new iD,i1=new iD,i2=new iD,i3=new iD,i4=new iD,i5=class{constructor(e=new iD,t=new iD(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.direction).multiplyScalar(e).add(this.origin)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,iJ)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.direction).multiplyScalar(i).add(this.origin)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=iJ.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(iJ.copy(this.direction).multiplyScalar(t).add(this.origin),iJ.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){i$.copy(e).add(t).multiplyScalar(.5),i0.copy(t).sub(e).normalize(),i1.copy(this.origin).sub(i$);let a=.5*e.distanceTo(t),o=-this.direction.dot(i0),l=i1.dot(this.direction),h=-i1.dot(i0),c=i1.lengthSq(),d=Math.abs(1-o*o),p,f,m,g;if(d>0)if(p=o*h-l,f=o*l-h,g=a*d,p>=0)if(f>=-g)if(f<=g){let e=1/d;p*=e,f*=e,m=p*(p+o*f+2*l)+f*(o*p+f+2*h)+c}else m=-(p=Math.max(0,-(o*(f=a)+l)))*p+f*(f+2*h)+c;else m=-(p=Math.max(0,-(o*(f=-a)+l)))*p+f*(f+2*h)+c;else f<=-g?(f=(p=Math.max(0,-(-o*a+l)))>0?-a:Math.min(Math.max(-a,-h),a),m=-p*p+f*(f+2*h)+c):f<=g?(p=0,m=(f=Math.min(Math.max(-a,-h),a))*(f+2*h)+c):(f=(p=Math.max(0,-(o*a+l)))>0?a:Math.min(Math.max(-a,-h),a),m=-p*p+f*(f+2*h)+c);else f=o>0?-a:a,m=-(p=Math.max(0,-(o*f+l)))*p+f*(f+2*h)+c;
vendor: 4,217 bytes, line 2
2return i&&i.copy(this.direction).multiplyScalar(p).add(this.origin),r&&r.copy(i0).multiplyScalar(f).add(i$),m}intersectSphere(e,t){iJ.subVectors(e.center,this.origin);let i=iJ.dot(this.direction),r=iJ.dot(iJ)-i*i,a=e.radius*e.radius;if(r>a)return null;let o=Math.sqrt(a-r),l=i-o,h=i+o;return l<0&&h<0?null:l<0?this.at(h,t):this.at(l,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;let i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){let i=this.distanceToPlane(e);return null===i?null:this.at(i,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return 0===t||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,r,a,o,l,h,c=1/this.direction.x,d=1/this.direction.y,p=1/this.direction.z,f=this.origin;return c>=0?(i=(e.min.x-f.x)*c,r=(e.max.x-f.x)*c):(i=(e.max.x-f.x)*c,r=(e.min.x-f.x)*c),d>=0?(a=(e.min.y-f.y)*d,o=(e.max.y-f.y)*d):(a=(e.max.y-f.y)*d,o=(e.min.y-f.y)*d),i>o||a>r||((a>i||isNaN(i))&&(i=a),(o<r||isNaN(r))&&(r=o),p>=0?(l=(e.min.z-f.z)*p,h=(e.max.z-f.z)*p):(l=(e.max.z-f.z)*p,h=(e.min.z-f.z)*p),i>h||l>r)||((l>i||i!=i)&&(i=l),(h<r||r!=r)&&(r=h),r<0)?null:this.at(i>=0?i:r,t)}intersectsBox(e){return null!==this.intersectBox(e,iJ)}intersectTriangle(e,t,i,r,a){i2.subVectors(t,e),i3.subVectors(i,e),i4.crossVectors(i2,i3);let o=this.direction.dot(i4),l;if(o>0){if(r)return null;l=1}else{if(!(o<0))return null;l=-1,o=-o}i1.subVectors(this.origin,e);let h=l*this.direction.dot(i3.crossVectors(i1,i3));if(h<0)return null;let c=l*this.direction.dot(i2.cross(i1));if(c<0||h+c>o)return null;let d=-l*i1.dot(i4);return d<0?null:this.at(d/o,a)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},i6=class{constructor(){i6.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}set(e,t,i,r,a,o,l,h,c,d,p,f,m,g,v,y){let x=this.elements;return x[0]=e,x[4]=t,x[8]=i,x[12]=r,x[1]=a,x[5]=o,x[9]=l,x[13]=h,x[2]=c,x[6]=d,x[10]=p,x[14]=f,x[3]=m,x[7]=g,x[11]=v,x[15]=y,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new i6().fromArray(this.elements)}copy(e){let t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){let t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){let t=this.elements,i=e.elements,r=1/i8.setFromMatrixColumn(e,0).length(),a=1/i8.setFromMatrixColumn(e,1).length(),o=1/i8.setFromMatrixColumn(e,2).length();return t[0]=i[0]*r,t[1]=i[1]*r,t[2]=i[2]*r,t[3]=0,t[4]=i[4]*a,t[5]=i[5]*a,t[6]=i[6]*a,t[7]=0,t[8]=i[8]*o,t[9]=i[9]*o,t[10]=i[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,i=e.x,r=e.y,a=e.z,o=Math.cos(i),l=Math.sin(i),h=Math.cos(r),c=Math.sin(r),d=Math.cos(a),p=Math.sin(a);if("XYZ"===e.order){let e=o*d,i=o*p,r=l*d,a=l*p;t[0]=h*d,t[4]=-h*p,t[8]=c,t[1]=i+r*c,t[5]=e-a*c,t[9]=-l*h,t[2]=a-e*c,t[6]=r+i*c,t[10]=o*h}else if("YXZ"===e.order){let e=h*d,i=h*p,r=c*d,a=c*p;t[0]=e+a*l,t[4]=r*l-i,t[8]=o*c,t[1]=o*p,t[5]=o*d,t[9]=-l,t[2]=i*l-r,t[6]=a+e*l,t[10]=o*h}else if("ZXY"===e.order){let e=h*d,i=h*p,r=c*d,a=c*p;t[0]=e-a*l,t[4]=-o*p,t[8]=r+i*l,t[1]=i+r*l,t[5]=o*d,t[9]=a-e*l,t[2]=-o*c,t[6]=l,t[10]=o*h}else if("ZYX"===e.order){let e=o*d,i=o*p,r=l*d,a=l*p;t[0]=h*d,t[4]=r*c-i,t[8]=e*c+a,t[1]=h*p,t[5]=a*c+e,t[9]=i*c-r,t[2]=-c,t[6]=l*h,t[10]=o*h}else if("YZX"===e.order){let e=o*h,i=o*c,r=l*h,a=l*c;t[0]=h*d,t[4]=a-e*p,t[8]=r*p+i,t[1]=p,t[5]=o*d,t[9]=-l*d,t[2]=-c*d,t[6]=i*p+r,t[10]=e-a*p}
2else if("XZY"===e.order){let e=o*h,i=o*c,r=l*h,a=l*c;t[0]=h*d,t[4]=-p,t[8]=c*d,t[1]=e*p+a,t[5]=o*d,t[9]=i*p-r,t[2]=r*p-i,t[6]=l*d,t[10]=a*p+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(i7,e,re)}lookAt(e,t,i){let r=this.elements;return rr.subVectors(e,t),0===rr.lengthSq()&&(rr.z=1),rr.normalize(),rt.crossVectors(i,rr),0===rt.lengthSq()&&(1===Math.abs(i.z)?rr.x+=1e-4:rr.z+=1e-4,rr.normalize(),rt.crossVectors(i,rr)),rt.normalize(),ri.crossVectors(rr,rt),r[0]=rt.x,r[4]=ri.x,r[8]=rr.x,r[1]=rt.y,r[5]=ri.y,r[9]=rr.y,r[2]=rt.z,r[6]=ri.z,r[10]=rr.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let i=e.elements,r=t.elements,a=this.elements,o=i[0],l=i[4],h=i[8],c=i[12],d=i[1],p=i[5],f=i[9],m=i[13],g=i[2],v=i[6],y=i[10],x=i[14],b=i[3],w=i[7],S=i[11],_=i[15],A=r[0],M=r[4],C=r[8],E=r[12],T=r[1],P=r[5],D=r[9],O=r[13],I=r[2],R=r[6],L=r[10],B=r[14],z=r[3],F=r[7],N=r[11],U=r[15];return a[0]=o*A+l*T+h*I+c*z,a[4]=o*M+l*P+h*R+c*F,a[8]=o*C+l*D+h*L+c*N,a[12]=o*E+l*O+h*B+c*U,a[1]=d*A+p*T+f*I+m*z,a[5]=d*M+p*P+f*R+m*F,a[9]=d*C+p*D+f*L+m*N,a[13]=d*E+p*O+f*B+m*U,a[2]=g*A+v*T+y*I+x*z,a[6]=g*M+v*P+y*R+x*F,a[10]=g*C+v*D+y*L+x*N,a[14]=g*E+v*O+y*B+x*U,a[3]=b*A+w*T+S*I+_*z,a[7]=b*M+w*P+S*R+_*F,a[11]=b*C+w*D+S*L+_*N,a[15]=b*E+w*O+S*B+_*U,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],i=e[4],r=e[8],a=e[12],o=e[1],l=e[5],h=e[9],c=e[13],d=e[2],p=e[6],f=e[10],m=e[14];return e[3]*(a*h*p-r*c*p-a*l*f+i*c*f+r*l*m-i*h*m)+e[7]*(t*h*m-t*c*f+a*o*f-r*o*m+r*c*d-a*h*d)+e[11]*(t*c*p-t*l*m-a*o*p+i*o*m+a*l*d-i*c*d)+e[15]*(-r*l*d-t*h*p+t*l*f+r*o*p-i*o*f+i*h*d)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=i),this}invert(){let e=this.elements,t=e[0],i=e[1],r=e[2],a=e[3],o=e[4],l=e[5],h=e[6],c=e[7],d=e[8],p=e[9],f=e[10],m=e[11],g=e[12],v=e[13],y=e[14],x=e[15],b=p*y*c-v*f*c+v*h*m-l*y*m-p*h*x+l*f*x,w=g*f*c-d*y*c-g*h*m+o*y*m+d*h*x-o*f*x,S=d*v*c-g*p*c+g*l*m-o*v*m-d*l*x+o*p*x,_=g*p*h-d*v*h-g*l*f+o*v*f+d*l*y-o*p*y,A=t*b+i*w+r*S+a*_;if(0===A)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let M=1/A;return e[0]=b*M,e[1]=(v*f*a-p*y*a-v*r*m+i*y*m+p*r*x-i*f*x)*M,e[2]=(l*y*a-v*h*a+v*r*c-i*y*c-l*r*x+i*h*x)*M,e[3]=(p*h*a-l*f*a-p*r*c+i*f*c+l*r*m-i*h*m)*M,e[4]=w*M,e[5]=(d*y*a-g*f*a+g*r*m-t*y*m-d*r*x+t*f*x)*M,e[6]=(g*h*a-o*y*a-g*r*c+t*y*c+o*r*x-t*h*x)*M,e[7]=(o*f*a-d*h*a+d*r*c-t*f*c-o*r*m+t*h*m)*M,e[8]=S*M,e[9]=(g*p*a-d*v*a-g*i*m+t*v*m+d*i*x-t*p*x)*M,e[10]=(o*v*a-g*l*a+g*i*c-t*v*c-o*i*x+t*l*x)*M,e[11]=(d*l*a-o*p*a-d*i*c+t*p*c+o*i*m-t*l*m)*M,e[12]=_*M,e[13]=(d*v*r-g*p*r+g*i*f-t*v*f-d*i*y+t*p*y)*M,e[14]=(g*l*r-o*v*r-g*i*h+t*v*h+o*i*y-t*l*y)*M,e[15]=(o*p*r-d*l*r+d*i*h-t*p*h-o*i*f+t*l*f)*M,this}scale(e){let t=this.elements,i=e.x,r=e.y,a=e.z;return t[0]*=i,t[4]*=r,t[8]*=a,t[1]*=i,t[5]*=r,t[9]*=a,t[2]*=i,t[6]*=r,t[10]*=a,t[3]*=i,t[7]*=r,t[11]*=a,this}getMaxScaleOnAxis(){let e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))}makeTranslation(e,t,i){return this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let i=Math.cos(t),r=Math.sin(t),a=1-i,o=e.x,l=e.y,h=e.z,c=a*o,d=a*l;return this.set(c*o+i,c*l-r*h,c*h+r*l,0,c*l+r*h,d*l+i,d*h-r*o,0,c*h-r*l,d*h+r*o,a*h*h+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,r,a,o){return this.set(1,i,a,0,e,1,o,0,t,r,1,0,0,0,0,1),this}compose(e,t,i){let r=this.elements,a=t._x,o=t._y,l=t._z,h=t._w,c=a+a,d=o+o,p=l+l,f=a*c,m=a*d,g=a*p,v=o*d,y=o*p,x=l*p,b=h*c,w=h*d,S=h*p,_=i.x,A=i.y,M=i.z;return r[0]=(1-(v+x))*_,r[1]=(m+S)*_,r[2]=(g-w)*_,r[3]=0,r[4]=(m-S)*A,r[5]=(1-(f+x))*A,r[6]=(y+b)*A,r[7]=0,r[8]=(g+w)*M,r[9]=(y-b)*M,r[10]=(1-(f+v))*M,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,i){let r=this.elements,a=i8.set(r[0],r[1],r[2]).length(),o=i8.set(r[4],r[5],r[6]).length(),l=i8.set(r[8],r[9],r[10]).length();0>this.determinant()&&(a=-a),e.x=r[12],e.y=r[13],e.z=r[14],i9.copy(this);let h=1/a,c=1/o,d=1/l;return i9.elements[0]*=h,i9.elements[1]*=h,i9.elements[2]*=h,i9.elements[4]*=c,i9.elements[5]*=c,i9.elements[6]*=c,i9.elements[8]*=d,i9.elements[9]*=d,i9.elements[10]*=d,t.setFromRotationMatrix(i9),i.x=a,i.y=o,i.z=l,this}makePerspective(e,t,i,r,a,o){let l=this.elements;return l[0]=2*a/(t-e),l[4]=0,l[8]=(t+e)/(t-e),l[12]=0,l[1]=0,l[5]=2*a/(i-r),l[9]=(i+r)/(i-r),l[13]=0,l[2]=0,l[6]=0,l[10
2]=-(o+a)/(o-a),l[14]=-2*o*a/(o-a),l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(e,t,i,r,a,o){let l=this.elements,h=1/(t-e),c=1/(i-r),d=1/(o-a);return l[0]=2*h,l[4]=0,l[8]=0,l[12]=-((t+e)*h),l[1]=0,l[5]=2*c,l[9]=0,l[13]=-((i+r)*c),l[2]=0,l[6]=0,l[10]=-2*d,l[14]=-((o+a)*d),l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(e){let t=this.elements,i=e.elements;for(let e=0;e<16;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){let i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}},i8=new iD,i9=new i6,i7=new iD(0,0,0),re=new iD(1,1,1),rt=new iD,ri=new iD,rr=new iD,rs=new i6,ra=new iP,rn=class{constructor(e=0,t=0,i=0,r=rn.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=r}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,r=this._order){return this._x=e,this._y=t,this._z=i,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){let r=e.elements,a=r[0],o=r[4],l=r[8],h=r[1],c=r[5],d=r[9],p=r[2],f=r[6],m=r[10];switch(t){case"XYZ":this._y=Math.asin(t$(l,-1,1)),.9999999>Math.abs(l)?(this._x=Math.atan2(-d,m),this._z=Math.atan2(-o,a)):(this._x=Math.atan2(f,c),this._z=0);break;case"YXZ":this._x=Math.asin(-t$(d,-1,1)),.9999999>Math.abs(d)?(this._y=Math.atan2(l,m),this._z=Math.atan2(h,c)):(this._y=Math.atan2(-p,a),this._z=0);break;case"ZXY":this._x=Math.asin(t$(f,-1,1)),.9999999>Math.abs(f)?(this._y=Math.atan2(-p,m),this._z=Math.atan2(-o,c)):(this._y=0,this._z=Math.atan2(h,a));break;case"ZYX":this._y=Math.asin(-t$(p,-1,1)),.9999999>Math.abs(p)?(this._x=Math.atan2(f,m),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-o,c));break;case"YZX":this._z=Math.asin(t$(h,-1,1)),.9999999>Math.abs(h)?(this._x=Math.atan2(-d,c),this._y=Math.atan2(-p,a)):(this._x=0,this._y=Math.atan2(l,m));break;case"XZY":this._z=Math.asin(-t$(o,-1,1)),.9999999>Math.abs(o)?(this._x=Math.atan2(f,c),this._y=Math.atan2(l,a)):(this._x=Math.atan2(-d,m),this._y=0)}return this._order=t,!0===i&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return rs.makeRotationFromQuaternion(e),this.setFromRotationMatrix(rs,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return ra.setFromEuler(this),this.setFromQuaternion(ra,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};rn.DEFAULT_ORDER="XYZ";var ro=class{constructor(){this.mask=1}set(e){this.mask=1<<e>>>0}enable(e){this.mask|=1<<e}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e}disable(e){this.mask&=~(1<<e)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!=0}isEnabled(e){return(this.mask&1<<e)!=0}},rl=0,rh=new iD,rc=new iP,rd=new i6,ru=new iD,rp=new iD,rf=new iD,rm=new iP,rg=new iD(1,0,0),rv=new iD(0,1,0),ry=new iD(0,0,1),rx={type:"added"},rb={type:"removed"},rw=class extends tX{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:rl++}),this.uuid=tJ(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=rw.DEFAULT_UP.clone();let e=new iD,t=new rn,i=new iP,r=new iD(1,1,1);t._onChange(function(){i.setFromEuler(t,!1)}),i._onChange(function(){t.setFromQuaternion(i,void 0,!1)}),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:e},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:r},modelViewMatrix:{value:new i6},normalMatrix:{value:new t7}}),this.matrix=new i6,this.matrixWorld=new i6,this.matrixAutoUpdate=rw.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.matrixWorldAutoUpdate=rw.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.layers=new ro,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}
2setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return rc.setFromAxisAngle(e,t),this.quaternion.multiply(rc),this}rotateOnWorldAxis(e,t){return rc.setFromAxisAngle(e,t),this.quaternion.premultiply(rc),this}rotateX(e){return this.rotateOnAxis(rg,e)}rotateY(e){return this.rotateOnAxis(rv,e)}rotateZ(e){return this.rotateOnAxis(ry,e)}translateOnAxis(e,t){return rh.copy(e).applyQuaternion(this.quaternion),this.position.add(rh.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(rg,e)}translateY(e){return this.translateOnAxis(rv,e)}translateZ(e){return this.translateOnAxis(ry,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(rd.copy(this.matrixWorld).invert())}lookAt(e,t,i){e.isVector3?ru.copy(e):ru.set(e,t,i);let r=this.parent;this.updateWorldMatrix(!0,!1),rp.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?rd.lookAt(rp,ru,this.up):rd.lookAt(ru,rp,this.up),this.quaternion.setFromRotationMatrix(rd),r&&(rd.extractRotation(r.matrixWorld),rc.setFromRotationMatrix(rd),this.quaternion.premultiply(rc.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this||e&&e.isObject3D&&(null!==e.parent&&e.parent.remove(e),e.parent=this,this.children.push(e),e.dispatchEvent(rx)),this}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return -1!==t&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(rb)),this}removeFromParent(){let e=this.parent;return null!==e&&e.remove(this),this}clear(){for(let e=0;e<this.children.length;e++){let t=this.children[e];t.parent=null,t.dispatchEvent(rb)}return this.children.length=0,this}attach(e){return this.updateWorldMatrix(!0,!1),rd.copy(this.matrixWorld).invert(),null!==e.parent&&(e.parent.updateWorldMatrix(!0,!1),rd.multiply(e.parent.matrixWorld)),e.applyMatrix4(rd),this.add(e),e.updateWorldMatrix(!1,!0),this}getObjectById(e){return this.getObjectByProperty("id",e)}getObjectByName(e){return this.getObjectByProperty("name",e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let i=0,r=this.children.length;i<r;i++){let r=this.children[i].getObjectByProperty(e,t);if(void 0!==r)return r}}getObjectsByProperty(e,t){let i=[];this[e]===t&&i.push(this);for(let r=0,a=this.children.length;r<a;r++){let a=this.children[r].getObjectsByProperty(e,t);a.length>0&&(i=i.concat(a))}return i}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(rp,e,rf),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(rp,rm,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let i=0,r=t.length;i<r;i++)t[i].traverse(e)}traverseVisible(e){if(!1===this.visible)return;e(this);let t=this.children;for(let i=0,r=t.length;i<r;i++)t[i].traverseVisible(e)}traverseAncestors(e){let t=this.parent;null!==t&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let i=0,r=t.length;i<r;i++){let r=t[i];(!0===r.matrixWorldAutoUpdate||!0===e)&&r.updateMatrixWorld(e)}}updateWorldMatrix(e,t){let i=this.parent;if(!0===e&&null!==i&&!0===i.matrixWorldAutoUpdate&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix
vendor: 5,035 bytes, line 2
2),!0===t){let e=this.children;for(let t=0,i=e.length;t<i;t++){let i=e[t];!0===i.matrixWorldAutoUpdate&&i.updateWorldMatrix(!1,!0)}}}toJSON(e){let t=void 0===e||"string"==typeof e,i={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});let r={};function a(t,i){return void 0===t[i.uuid]&&(t[i.uuid]=i.toJSON(e)),i.uuid}if(r.uuid=this.uuid,r.type=this.type,""!==this.name&&(r.name=this.name),!0===this.castShadow&&(r.castShadow=!0),!0===this.receiveShadow&&(r.receiveShadow=!0),!1===this.visible&&(r.visible=!1),!1===this.frustumCulled&&(r.frustumCulled=!1),0!==this.renderOrder&&(r.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(r.matrixAutoUpdate=!1),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(r.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=a(e.geometries,this.geometry);let t=this.geometry.parameters;if(void 0!==t&&void 0!==t.shapes){let i=t.shapes;if(Array.isArray(i))for(let t=0,r=i.length;t<r;t++){let r=i[t];a(e.shapes,r)}else a(e.shapes,i)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(a(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){let t=[];for(let i=0,r=this.material.length;i<r;i++)t.push(a(e.materials,this.material[i]));r.material=t}else r.material=a(e.materials,this.material);if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let i=this.animations[t];r.animations.push(a(e.animations,i))}}if(t){let t=o(e.geometries),r=o(e.materials),a=o(e.textures),l=o(e.images),h=o(e.shapes),c=o(e.skeletons),d=o(e.animations),p=o(e.nodes);t.length>0&&(i.geometries=t),r.length>0&&(i.materials=r),a.length>0&&(i.textures=a),l.length>0&&(i.images=l),h.length>0&&(i.shapes=h),c.length>0&&(i.skeletons=c),d.length>0&&(i.animations=d),p.length>0&&(i.nodes=p)}return i.object=r,i;function o(e){let t=[];for(let i in e){let r=e[i];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t<e.children.length;t++){let i=e.children[t];this.add(i.clone())}return this}};rw.DEFAULT_UP=new iD(0,1,0),rw.DEFAULT_MATRIX_AUTO_UPDATE=!0,rw.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var rS=new iD,r_=new iD,rA=new iD,rM=new iD,rC=new iD,rE=new iD,rT=new iD,rP=new iD,rD=new iD,rO=new iD,rI=class{constructor(e=new iD,t=new iD,i=new iD){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,r){r.subVectors(i,t),rS.subVectors(e,t),r.cross(rS);let a=r.lengthSq();return a>0?r.multiplyScalar(1/Math.sqrt(a)):r.set(0,0,0)}static getBarycoord(e,t,i,r,a){rS.subVectors(r,t),r_.subVectors(i,t),rA.subVectors(e,t);let o=rS.dot(rS),l=rS.dot(r_),h=rS.dot(rA),c=r_.dot(r_),d=r_.dot(rA),p=o*c-l*l;if(0===p)return a.set(-2,-1,-1);let f=1/p,m=(c*h-l*d)*f,g=(o*d-l*h)*f;return a.set(1-m-g,g,m)}static containsPoint(e,t,i,r){return this.getBarycoord(e,t,i,r,rM),rM.x>=0&&rM.y>=0&&rM.x+rM.y<=1}static getUV(e,t,i,r,a,o,l,h){return this.getBarycoord(e,t,i,r,rM),h.set(0,0),h.addScaledVector(a,rM.x),h.addScaledVector(o,rM.y),h.addScaledVector(l,rM.z),h}static isFrontFacing(e,t,i,r){return rS.subVectors(i,t),r_.subVectors(e,t),0>rS.cross(r_).dot(r)}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,r){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,i,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}
vendor: 14,993 bytes, line 2
2getArea(){return rS.subVectors(this.c,this.b),r_.subVectors(this.a,this.b),.5*rS.cross(r_).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return rI.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return rI.getBarycoord(e,this.a,this.b,this.c,t)}getUV(e,t,i,r,a){return rI.getUV(e,this.a,this.b,this.c,t,i,r,a)}containsPoint(e){return rI.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return rI.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let i=this.a,r=this.b,a=this.c,o,l;rC.subVectors(r,i),rE.subVectors(a,i),rP.subVectors(e,i);let h=rC.dot(rP),c=rE.dot(rP);if(h<=0&&c<=0)return t.copy(i);rD.subVectors(e,r);let d=rC.dot(rD),p=rE.dot(rD);if(d>=0&&p<=d)return t.copy(r);let f=h*p-d*c;if(f<=0&&h>=0&&d<=0)return o=h/(h-d),t.copy(i).addScaledVector(rC,o);rO.subVectors(e,a);let m=rC.dot(rO),g=rE.dot(rO);if(g>=0&&m<=g)return t.copy(a);let v=m*c-h*g;if(v<=0&&c>=0&&g<=0)return l=c/(c-g),t.copy(i).addScaledVector(rE,l);let y=d*g-m*p;if(y<=0&&p-d>=0&&m-g>=0)return rT.subVectors(a,r),l=(p-d)/(p-d+(m-g)),t.copy(r).addScaledVector(rT,l);let x=1/(y+v+f);return o=v*x,l=f*x,t.copy(i).addScaledVector(rC,o).addScaledVector(rE,l)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},rR=0,rL=class extends tX{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:rR++}),this.uuid=tJ(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(let t in e){let i=e[t];if(void 0===i)continue;let r=this[t];void 0!==r&&(r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[t]=i)}}toJSON(e){let t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});let i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function r(e){let t=[];for(let i in e){let r=e[i];delete r.metadata,t.push(r)}return t}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),0!==this.side&&(i.side=this.side),this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(i.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=this.premultipliedAlpha),!0===this.forceSinglePass&&(i.forceSinglePass=this.forceSinglePass),!0===this.wireframe&&(i.wireframe=this.wireframe),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=this.flatShading),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),t){let t=r(e.textures),a=r(e.images);t.length>0&&(i.textures=t),a.length>0&&(i.images=a)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,i=null;if(null!==t){let e=t.length;i=Array(e);for(let r=0;r!==e;++r)i[r]=t[r].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}},rB=class extends rL{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new iv(0xffffff),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},rz=new iD,rF=new t9,rN=class{constructor(e,t,i=!1){if(Array.isArray(e))throw TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=i,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let r=0,a=this.itemSize;r<a;r++)this.array[e+r]=t.array[i+r];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(2===this.itemSize)for(let t=0,i=this.count;t<i;t++)rF.fromBufferAttribute(this,t),rF.applyMatrix3(e),this.setXY(t,rF.x,rF.y);else if(3===this.itemSize)for(let t=0,i=this.count;t<i;t++)rz.fromBufferAttribute(this,t),rz.applyMatrix3(e),this.setXYZ(t,rz.x,rz.y,rz.z);return this}applyMatrix4(e){for(let t=0,i=this.count;t<i;t++)rz.fromBufferAttribute(this,t),rz.applyMatrix4(e),this.setXYZ(t,rz.x,rz.y,rz.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t<i;t++)rz.fromBufferAttribute(this,t),rz.applyNormalMatrix(e),this.setXYZ(t,rz.x,rz.y,rz.z);return this}transformDirection(e){for(let t=0,i=this.count;t<i;t++)rz.fromBufferAttribute(this,t),rz.transformDirection(e),this.setXYZ(t,rz.x,rz.y,rz.z);return this}set(e,t=0){return this.array.set(e,t),this}getX(e){let t=this.array[e*this.itemSize];return this.normalized&&(t=t5(t,this.array)),t}setX(e,t){return this.normalized&&(t=t6(t,this.array)),this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];return this.normalized&&(t=t5(t,this.array)),t}setY(e,t){return this.normalized&&(t=t6(t,this.array)),this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];return this.normalized&&(t=t5(t,this.array)),t}setZ(e,t){return this.normalized&&(t=t6(t,this.array)),this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];return this.normalized&&(t=t5(t,this.array)),t}setW(e,t){return this.normalized&&(t=t6(t,this.array)),this.array[e*this.itemSize+3]=t,this}setXY(e,t,i){return e*=this.itemSize,this.normalized&&(t=t6(t,this.array),i=t6(i,this.array)),this.array[e+0]=t,this.array[e+1]=i,this}setXYZ(e,t,i,r){return e*=this.itemSize,this.normalized&&(t=t6(t,this.array),i=t6(i,this.array),r=t6(r,this.array)),this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=r,this}setXYZW(e,t,i,r,a){return e*=this.itemSize,this.normalized&&(t=t6(t,this.array),i=t6(i,this.array),r=t6(r,this.array),a=t6(a,this.array)),this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=r,this.array[e+3]=a,this}
2onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return""!==this.name&&(e.name=this.name),35044!==this.usage&&(e.usage=this.usage),(0!==this.updateRange.offset||-1!==this.updateRange.count)&&(e.updateRange=this.updateRange),e}copyColorsArray(){}copyVector2sArray(){}copyVector3sArray(){}copyVector4sArray(){}},rU=class extends rN{constructor(e,t,i){super(new Uint16Array(e),t,i)}},rk=class extends rN{constructor(e,t,i){super(new Uint32Array(e),t,i)}},rV=class extends rN{constructor(e,t,i){super(new Float32Array(e),t,i)}},rj=0,rG=new i6,rW=new rw,rH=new iD,rq=new iR,rX=new iR,rY=new iD,rQ=class extends tX{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:rj++}),this.uuid=tJ(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(it(e)?rk:rU)(e,1):this.index=e,this}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return void 0!==this.attributes[e]}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;void 0!==t&&(t.applyMatrix4(e),t.needsUpdate=!0);let i=this.attributes.normal;if(void 0!==i){let t=new t7().getNormalMatrix(e);i.applyNormalMatrix(t),i.needsUpdate=!0}let r=this.attributes.tangent;return void 0!==r&&(r.transformDirection(e),r.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(e){return rG.makeRotationFromQuaternion(e),this.applyMatrix4(rG),this}rotateX(e){return rG.makeRotationX(e),this.applyMatrix4(rG),this}rotateY(e){return rG.makeRotationY(e),this.applyMatrix4(rG),this}rotateZ(e){return rG.makeRotationZ(e),this.applyMatrix4(rG),this}translate(e,t,i){return rG.makeTranslation(e,t,i),this.applyMatrix4(rG),this}scale(e,t,i){return rG.makeScale(e,t,i),this.applyMatrix4(rG),this}lookAt(e){return rW.lookAt(e),rW.updateMatrix(),this.applyMatrix4(rW.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(rH).negate(),this.translate(rH.x,rH.y,rH.z),this}setFromPoints(e){let t=[];for(let i=0,r=e.length;i<r;i++){let r=e[i];t.push(r.x,r.y,r.z||0)}return this.setAttribute("position",new rV(t,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new iR);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute)return void this.boundingBox.set(new iD(-1/0,-1/0,-1/0),new iD(1/0,1/0,1/0));if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,i=t.length;e<i;e++){let i=t[e];rq.setFromBufferAttribute(i),this.morphTargetsRelative?(rY.addVectors(this.boundingBox.min,rq.min),this.boundingBox.expandByPoint(rY),rY.addVectors(this.boundingBox.max,rq.max),this.boundingBox.expandByPoint(rY)):(this.boundingBox.expandByPoint(rq.min),this.boundingBox.expandByPoint(rq.max))}}else this.boundingBox.makeEmpty();isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new iK);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute)return void this.boundingSphere.set(new iD,1/0);if(e){let i=this.boundingSphere.center;if(rq.setFromBufferAttribute(e),t)for(let e=0,i=t.length;e<i;e++){let i=t[e];rX.setFromBufferAttribute(i),this.morphTargetsRelative?(rY.addVectors(rq.min,rX.min),rq.expandByPoint(rY),rY.addVectors(rq.max,rX.max),rq.expandByPoint(rY)):(rq.expandByPoint(rX.min),rq.expandByPoint(rX.max))}rq.getCenter(i);let r=0;for(let t=0,a=e.count;t<a;
2t++)rY.fromBufferAttribute(e,t),r=Math.max(r,i.distanceToSquared(rY));if(t)for(let a=0,o=t.length;a<o;a++){let o=t[a],l=this.morphTargetsRelative;for(let t=0,a=o.count;t<a;t++)rY.fromBufferAttribute(o,t),l&&(rH.fromBufferAttribute(e,t),rY.add(rH)),r=Math.max(r,i.distanceToSquared(rY))}this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)}}computeTangents(){let e=this.index,t=this.attributes;if(null===e||void 0===t.position||void 0===t.normal||void 0===t.uv)return;let i=e.array,r=t.position.array,a=t.normal.array,o=t.uv.array,l=r.length/3;!1===this.hasAttribute("tangent")&&this.setAttribute("tangent",new rN(new Float32Array(4*l),4));let h=this.getAttribute("tangent").array,c=[],d=[];for(let e=0;e<l;e++)c[e]=new iD,d[e]=new iD;let p=new iD,f=new iD,m=new iD,g=new t9,v=new t9,y=new t9,x=new iD,b=new iD,w=this.groups;0===w.length&&(w=[{start:0,count:i.length}]);for(let e=0,t=w.length;e<t;++e){let t=w[e],a=t.start,l=t.count;for(let e=a,t=a+l;e<t;e+=3)!function(e,t,i){p.fromArray(r,3*e),f.fromArray(r,3*t),m.fromArray(r,3*i),g.fromArray(o,2*e),v.fromArray(o,2*t),y.fromArray(o,2*i),f.sub(p),m.sub(p),v.sub(g),y.sub(g);let a=1/(v.x*y.y-y.x*v.y);isFinite(a)&&(x.copy(f).multiplyScalar(y.y).addScaledVector(m,-v.y).multiplyScalar(a),b.copy(m).multiplyScalar(v.x).addScaledVector(f,-y.x).multiplyScalar(a),c[e].add(x),c[t].add(x),c[i].add(x),d[e].add(b),d[t].add(b),d[i].add(b))}(i[e+0],i[e+1],i[e+2])}let S=new iD,_=new iD,A=new iD,M=new iD;function C(e){A.fromArray(a,3*e),M.copy(A);let t=c[e];S.copy(t),S.sub(A.multiplyScalar(A.dot(t))).normalize(),_.crossVectors(M,t);let i=0>_.dot(d[e])?-1:1;h[4*e]=S.x,h[4*e+1]=S.y,h[4*e+2]=S.z,h[4*e+3]=i}for(let e=0,t=w.length;e<t;++e){let t=w[e],r=t.start,a=t.count;for(let e=r,t=r+a;e<t;e+=3)C(i[e+0]),C(i[e+1]),C(i[e+2])}}computeVertexNormals(){let e=this.index,t=this.getAttribute("position");if(void 0!==t){let i=this.getAttribute("normal");if(void 0===i)i=new rN(new Float32Array(3*t.count),3),this.setAttribute("normal",i);else for(let e=0,t=i.count;e<t;e++)i.setXYZ(e,0,0,0);let r=new iD,a=new iD,o=new iD,l=new iD,h=new iD,c=new iD,d=new iD,p=new iD;if(e)for(let f=0,m=e.count;f<m;f+=3){let m=e.getX(f+0),g=e.getX(f+1),v=e.getX(f+2);r.fromBufferAttribute(t,m),a.fromBufferAttribute(t,g),o.fromBufferAttribute(t,v),d.subVectors(o,a),p.subVectors(r,a),d.cross(p),l.fromBufferAttribute(i,m),h.fromBufferAttribute(i,g),c.fromBufferAttribute(i,v),l.add(d),h.add(d),c.add(d),i.setXYZ(m,l.x,l.y,l.z),i.setXYZ(g,h.x,h.y,h.z),i.setXYZ(v,c.x,c.y,c.z)}else for(let e=0,l=t.count;e<l;e+=3)r.fromBufferAttribute(t,e+0),a.fromBufferAttribute(t,e+1),o.fromBufferAttribute(t,e+2),d.subVectors(o,a),p.subVectors(r,a),d.cross(p),i.setXYZ(e+0,d.x,d.y,d.z),i.setXYZ(e+1,d.x,d.y,d.z),i.setXYZ(e+2,d.x,d.y,d.z);this.normalizeNormals(),i.needsUpdate=!0}}merge(){return this}normalizeNormals(){let e=this.attributes.normal;for(let t=0,i=e.count;t<i;t++)rY.fromBufferAttribute(e,t),rY.normalize(),e.setXYZ(t,rY.x,rY.y,rY.z)}toNonIndexed(){function e(e,t){let i=e.array,r=e.itemSize,a=e.normalized,o=new i.constructor(t.length*r),l=0,h=0;for(let a=0,c=t.length;a<c;a++){l=e.isInterleavedBufferAttribute?t[a]*e.data.stride+e.offset:t[a]*r;for(let e=0;e<r;e++)o[h++]=i[l++]}return new rN(o,r,a)}if(null===this.index)return this;let t=new rQ,i=this.index.array,r=this.attributes;for(let a in r){let o=e(r[a],i);t.setAttribute(a,o)}let a=this.morphAttributes;for(let r in a){let o=[],l=a[r];for(let t=0,r=l.length;t<r;t++){let r=e(l[t],i);o.push(r)}t.morphAttributes[r]=o}t.morphTargetsRelative=this.morphTargetsRelative;let o=this.groups;for(let e=0,i=o.length;e<i;e++){let i=o[e];t.addGroup(i.start,i.count,i.materialIndex)}return t}toJSON(){let e={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),Object.keys(this.userData).length>0&&(e.userData=this.userData),void 0!==this.parameters){let t=this.parameters;for(let i in t)void 0!==t[i]&&(e[i]=t[i]);return e}e.data={attributes:{}};let t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let i=this.attributes;for(let t in i){let r=i[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},a=!1;for(let t in this.morphAttributes){let i=this.morphAttributes[t],o=[];for(let t=0,r=i.length;t<r;t++){let r=i[t];o.push(r.toJSON(e.data))}o.length>0&&(r[t]=o,a=!0)}a&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let o=this.groups;o.length>0&&(e.data.groups=JSON.parse(JSON.stringify(o)));let l=this.boundingSphere;return null!==l&&(e.data.boundingSphere={center:l.center.toArray(),radius:l.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let i=e.index;null!==i&&this.setIndex(i.clone(t));let r=e.attributes;for(let e in r){let i=r[e];this.setAttribute(e,i.clone(t))}let a=e.morphAttributes;for(let e in a){let i=[],r=a[e];for(let e=0,a=r.length;e<a;e++)i.push(r[e].clone(t));this.morphAttributes[e]=i}this.morphTargetsRelative=e.morphTargetsRelative;let o=e.groups;for(let e=0,t=o.length;e<t;
2e++){let t=o[e];this.addGroup(t.start,t.count,t.materialIndex)}let l=e.boundingBox;null!==l&&(this.boundingBox=l.clone());let h=e.boundingSphere;return null!==h&&(this.boundingSphere=h.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,void 0!==e.parameters&&(this.parameters=Object.assign({},e.parameters)),this}dispose(){this.dispatchEvent({type:"dispose"})}},rZ=new i6,rK=new i5,rJ=new iK,r$=new iD,r0=new iD,r1=new iD,r2=new iD,r3=new iD,r4=new t9,r5=new t9,r6=new t9,r8=new iD,r9=new iD,r7=class extends rw{constructor(e=new rQ,t=new rB){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),void 0!==e.morphTargetInfluences&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),void 0!==e.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let i=e[t[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=i.length;e<t;e++){let t=i[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}getVertexPosition(e,t){let i=this.geometry,r=i.attributes.position,a=i.morphAttributes.position,o=i.morphTargetsRelative;t.fromBufferAttribute(r,e);let l=this.morphTargetInfluences;if(a&&l){r3.set(0,0,0);for(let i=0,r=a.length;i<r;i++){let r=l[i],h=a[i];0!==r&&(r2.fromBufferAttribute(h,e),o?r3.addScaledVector(r2,r):r3.addScaledVector(r2.sub(t),r))}t.add(r3)}return this.isSkinnedMesh&&this.boneTransform(e,t),t}raycast(e,t){let i=this.geometry,r=this.material,a=this.matrixWorld;if(void 0===r||(null===i.boundingSphere&&i.computeBoundingSphere(),rJ.copy(i.boundingSphere),rJ.applyMatrix4(a),!1===e.ray.intersectsSphere(rJ))||(rZ.copy(a).invert(),rK.copy(e.ray).applyMatrix4(rZ),null!==i.boundingBox&&!1===rK.intersectsBox(i.boundingBox)))return;let o,l=i.index,h=i.attributes.position,c=i.attributes.uv,d=i.attributes.uv2,p=i.groups,f=i.drawRange;if(null!==l)if(Array.isArray(r))for(let i=0,a=p.length;i<a;i++){let a=p[i],h=r[a.materialIndex],m=Math.max(a.start,f.start),g=Math.min(l.count,Math.min(a.start+a.count,f.start+f.count));for(let i=m;i<g;i+=3)(o=se(this,h,e,rK,c,d,l.getX(i),l.getX(i+1),l.getX(i+2)))&&(o.faceIndex=Math.floor(i/3),o.face.materialIndex=a.materialIndex,t.push(o))}else{let i=Math.max(0,f.start),a=Math.min(l.count,f.start+f.count);for(let h=i;h<a;h+=3)(o=se(this,r,e,rK,c,d,l.getX(h),l.getX(h+1),l.getX(h+2)))&&(o.faceIndex=Math.floor(h/3),t.push(o))}else if(void 0!==h)if(Array.isArray(r))for(let i=0,a=p.length;i<a;i++){let a=p[i],l=r[a.materialIndex],m=Math.max(a.start,f.start),g=Math.min(h.count,Math.min(a.start+a.count,f.start+f.count));for(let i=m;i<g;i+=3)(o=se(this,l,e,rK,c,d,i,i+1,i+2))&&(o.faceIndex=Math.floor(i/3),o.face.materialIndex=a.materialIndex,t.push(o))}else{let i=Math.max(0,f.start),a=Math.min(h.count,f.start+f.count);for(let l=i;l<a;l+=3)(o=se(this,r,e,rK,c,d,l,l+1,l+2))&&(o.faceIndex=Math.floor(l/3),t.push(o))}}};function se(e,t,i,r,a,o,l,h,c){e.getVertexPosition(l,r$),e.getVertexPosition(h,r0),e.getVertexPosition(c,r1);let d=function(e,t,i,r,a,o,l,h){if(null===(1===t.side?r.intersectTriangle(l,o,a,!0,h):r.intersectTriangle(a,o,l,0===t.side,h)))return null;r9.copy(h),r9.applyMatrix4(e.matrixWorld);let c=i.ray.origin.distanceTo(r9);return c<i.near||c>i.far?null:{distance:c,point:r9.clone(),object:e}}(e,t,i,r,r$,r0,r1,r8);if(d){a&&(r4.fromBufferAttribute(a,l),r5.fromBufferAttribute(a,h),r6.fromBufferAttribute(a,c),d.uv=rI.getUV(r8,r$,r0,r1,r4,r5,r6,new t9)),o&&(r4.fromBufferAttribute(o,l),r5.fromBufferAttribute(o,h),r6.fromBufferAttribute(o,c),d.uv2=rI.getUV(r8,r$,r0,r1,r4,r5,r6,new t9));let e={a:l,b:h,c:c,normal:new iD,materialIndex:0};rI.getNormal(r$,r0,r1,e.normal),d.face=e}return d}var st=class extends rQ{constructor(e=1,t=1,i=1,r=1,a=1,o=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:r,heightSegments:a,depthSegments:o};let l=this;r=Math.floor(r),a=Math.floor(a);let h=[],c=[],d=[],p=[],f=0,m=0;function g(e,t,i,r,a,o,g,v,y,x,b){let w=o/y,S=g/x,_=o/2,A=g/2,M=v/2,C=y+1,E=x+1,T=0,P=0,D=new iD;for(let o=0;o<E;o++){let l=o*S-A;for(let h=0;h<C;h++){let f=h*w-_;D[e]=f*r,D[t]=l*a,D[i]=M,c.push(D.x,D.y,D.z),D[e]=0,D[t]=0,D[i]=v>0?1:-1,d.push(D.x,D.y,D.z),p.push(h/y),p.push(1-o/x),T+=1}}for(let e=0;e<x;e++)for(let t=0;t<y;t++){let i=f+t+C*e,r=f+t+C*(e+1),a=f+(t+1)+C*(e+1),o=f+(t+1)+C*e;h.push(i,r,o),h.push(r,a,o),P+=6}l.addGroup(m,P,b),m+=P,f+=T}g("z","y","x",-1,-1,i,t,e,o=Math.floor(o),a,0),g("z","y","x",1,-1,i,t,-e,o,a,1),g("x","z","y",1,1,e,i,t,r,o,2),g("x","z","y",1,-1,e,i,-t,r,o,3),g("x","y","z",1,-1,e,t,i,r,a,4),g("x","y","z",-1,-1,e,t,-i,r,a,5),this.setIndex(h),this.setAttribute("position",new rV(c,3)),this.setAttribute("normal",new rV(d,3)),this.setAttribute("uv",new rV(p,2))}static fromJSON(e){return new st(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}};function si(e){let t={};for(let i in e)for(let r in t[i]={},e[i]){let a=e[i][r];a&&(a.isColor||a.isMatrix3||a.isMatrix4||a.isVector2||a.isVector3||a.isVector4||a.isTexture||a.isQuaternion)?t[i][r]=a.clone():Array.isArray(a)?t[i][r]=a.slice():t[i][r]=a}return t}function sr(e){let t={};for(let i=0;i<e.length;i++){let r=si(e[i]);for(let e in r)t[e]=r[e]}return t}function ss(e){return null===e.getRenderTarget()&&3001===e.outputEncoding?tW:tH}var sa=`void main() { 3 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 4}`,sn=`void main() { 5 gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 ); 6}`,so=class extends rL{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=sa,this.fragmentShader=sn,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==e&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=si(e.uniforms),this.uniformsGroups=function(e){let t=[];for(let i=0;i<e.length;i++)t.push(e[i].clone());return t}(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){let t=super.toJSON(e);for(let i in t.glslVersion=this.glslVersion,t.uniforms={},this.uniforms){let r=this.uniforms[i].value;r&&r.isTexture?t.uniforms[i]={type:"t",value:r.toJSON(e).uuid}:r&&r.isColor?t.uniforms[i]={type:"c",value:r.getHex()}:r&&r.isVector2?t.uniforms[i]={type:"v2",value:r.toArray()}:r&&r.isVector3?t.uniforms[i]={type:"v3",value:r.toArray()}:r&&r.isVector4?t.uniforms[i]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?t.uniforms[i]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?t.uniforms[i]={type:"m4",value:r.toArray()}:t.uniforms[i]={value:r}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader;let i={};for(let e in this.extensions)!0===this.extensions[e]&&(i[e]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}},sl=class extends rw{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new i6,this.projectionMatrix=new i6,this.projectionMatrixInverse=new i6}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}},sh=class extends sl{constructor(e=50,t=1,i=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=2*tK*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(.5*tZ*this.fov);return .5*this.getFilmHeight()/e}
6getEffectiveFOV(){return 2*tK*Math.atan(Math.tan(.5*tZ*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,i,r,a,o){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=r,this.view.width=a,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(.5*tZ*this.fov)/this.zoom,i=2*t,r=this.aspect*i,a=-.5*r,o=this.view;if(null!==this.view&&this.view.enabled){let e=o.fullWidth,l=o.fullHeight;a+=o.offsetX*r/e,t-=o.offsetY*i/l,r*=o.width/e,i*=o.height/l}let l=this.filmOffset;0!==l&&(a+=e*l/this.getFilmWidth()),this.projectionMatrix.makePerspective(a,a+r,t,t-i,e,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},sc=class extends rw{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i;let r=new sh(-90,1,e,t);r.layers=this.layers,r.up.set(0,1,0),r.lookAt(1,0,0),this.add(r);let a=new sh(-90,1,e,t);a.layers=this.layers,a.up.set(0,1,0),a.lookAt(-1,0,0),this.add(a);let o=new sh(-90,1,e,t);o.layers=this.layers,o.up.set(0,0,-1),o.lookAt(0,1,0),this.add(o);let l=new sh(-90,1,e,t);l.layers=this.layers,l.up.set(0,0,1),l.lookAt(0,-1,0),this.add(l);let h=new sh(-90,1,e,t);h.layers=this.layers,h.up.set(0,1,0),h.lookAt(0,0,1),this.add(h);let c=new sh(-90,1,e,t);c.layers=this.layers,c.up.set(0,1,0),c.lookAt(0,0,-1),this.add(c)}update(e,t){null===this.parent&&this.updateMatrixWorld();let i=this.renderTarget,[r,a,o,l,h,c]=this.children,d=e.getRenderTarget(),p=e.toneMapping,f=e.xr.enabled;e.toneMapping=0,e.xr.enabled=!1;let m=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0),e.render(t,r),e.setRenderTarget(i,1),e.render(t,a),e.setRenderTarget(i,2),e.render(t,o),e.setRenderTarget(i,3),e.render(t,l),e.setRenderTarget(i,4),e.render(t,h),i.texture.generateMipmaps=m,e.setRenderTarget(i,5),e.render(t,c),e.setRenderTarget(d),e.toneMapping=p,e.xr.enabled=f,i.texture.needsPMREMUpdate=!0}},sd=class extends i_{constructor(e,t,i,r,a,o,l,h,c,d){super(e=void 0!==e?e:[],t=void 0!==t?t:301,i,r,a,o,l,h,c,d),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},su=class extends iM{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let i={width:e,height:e,depth:1};this.texture=new sd([i,i,i,i,i,i],t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:1006}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.encoding=t.encoding,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let i={uniforms:{tEquirect:{value:null}},vertexShader:` 7 8 varying vec3 vWorldDirection; 9 10 vec3 transformDirection( in vec3 dir, in mat4 matrix ) { 11 12 return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); 13 14 } 15 16 void main() { 17 18 vWorldDirection = transformDirection( position, modelMatrix ); 19 20 #include <begin_vertex> 21 #include <project_vertex> 22 23 } 24 `,fragmentShader:` 25 26 uniform sampler2D tEquirect; 27 28 varying vec3 vWorldDirection; 29 30 #include <common> 31 32 void main() { 33 34 vec3 direction = normalize( vWorldDirection ); 35 36 vec2 sampleUV = equirectUv( direction ); 37 38 gl_FragColor = texture2D( tEquirect, sampleUV ); 39 40 } 41 `},r=new st(5,5,5),a=new so({name:"CubemapFromEquirect",uniforms:si(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:1,blending:0});a.uniforms.tEquirect.value=t;let o=new r7(r,a),l=t.minFilter;return 1008===t.minFilter&&(t.minFilter=1006),new sc(1,10,this).update(e,o),t.minFilter=l,o.geometry.dispose(),o.material.dispose(),this}clear(e,t,i,r){let a=e.getRenderTarget();for(let a=0;a<6;a++)e.setRenderTarget(this,a),e.clear(t,i,r);e.setRenderTarget(a)}},sp=new iD,sf=new iD,sm=new t7,sg=class{constructor(e=new iD(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,r){return this.normal.set(e,t,i),this.constant=r,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}
41setFromCoplanarPoints(e,t,i){let r=sp.subVectors(i,t).cross(sf.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(r,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)}intersectLine(e,t){let i=e.delta(sp),r=this.normal.dot(i);if(0===r)return 0===this.distanceToPoint(e.start)?t.copy(e.start):null;let a=-(e.start.dot(this.normal)+this.constant)/r;return a<0||a>1?null:t.copy(i).multiplyScalar(a).add(e.start)}intersectsLine(e){let t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let i=t||sm.getNormalMatrix(e),r=this.coplanarPoint(sp).applyMatrix4(e),a=this.normal.applyMatrix3(i).normalize();return this.constant=-r.dot(a),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},sv=new iK,sy=new iD,sx=class{constructor(e=new sg,t=new sg,i=new sg,r=new sg,a=new sg,o=new sg){this.planes=[e,t,i,r,a,o]}set(e,t,i,r,a,o){let l=this.planes;return l[0].copy(e),l[1].copy(t),l[2].copy(i),l[3].copy(r),l[4].copy(a),l[5].copy(o),this}copy(e){let t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e){let t=this.planes,i=e.elements,r=i[0],a=i[1],o=i[2],l=i[3],h=i[4],c=i[5],d=i[6],p=i[7],f=i[8],m=i[9],g=i[10],v=i[11],y=i[12],x=i[13],b=i[14],w=i[15];return t[0].setComponents(l-r,p-h,v-f,w-y).normalize(),t[1].setComponents(l+r,p+h,v+f,w+y).normalize(),t[2].setComponents(l+a,p+c,v+m,w+x).normalize(),t[3].setComponents(l-a,p-c,v-m,w-x).normalize(),t[4].setComponents(l-o,p-d,v-g,w-b).normalize(),t[5].setComponents(l+o,p+d,v+g,w+b).normalize(),this}intersectsObject(e){let t=e.geometry;return null===t.boundingSphere&&t.computeBoundingSphere(),sv.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(sv)}intersectsSprite(e){return sv.center.set(0,0,0),sv.radius=.7071067811865476,sv.applyMatrix4(e.matrixWorld),this.intersectsSphere(sv)}intersectsSphere(e){let t=this.planes,i=e.center,r=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(i)<r)return!1;return!0}intersectsBox(e){let t=this.planes;for(let i=0;i<6;i++){let r=t[i];if(sy.x=r.normal.x>0?e.max.x:e.min.x,sy.y=r.normal.y>0?e.max.y:e.min.y,sy.z=r.normal.z>0?e.max.z:e.min.z,0>r.distanceToPoint(sy))return!1}return!0}containsPoint(e){let t=this.planes;for(let i=0;i<6;i++)if(0>t[i].distanceToPoint(e))return!1;return!0}clone(){return new this.constructor().copy(this)}};function sb(){let e=null,t=!1,i=null,r=null;function a(t,o){i(t,o),r=e.requestAnimationFrame(a)}return{start:function(){!0!==t&&null!==i&&(r=e.requestAnimationFrame(a),t=!0)},stop:function(){e.cancelAnimationFrame(r),t=!1},setAnimationLoop:function(e){i=e},setContext:function(t){e=t}}}function sw(e,t){let i=t.isWebGL2,r=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),r.get(e)},remove:function(t){t.isInterleavedBufferAttribute&&(t=t.data);let i=r.get(t);i&&(e.deleteBuffer(i.buffer),r.delete(t))},update:function(t,a){var o,l;let h,c;if(t.isGLBufferAttribute){let e=r.get(t);(!e||e.version<t.version)&&r.set(t,{buffer:t.buffer,type:t.type,bytesPerElement:t.elementSize,version:t.version});return}t.isInterleavedBufferAttribute&&(t=t.data);let d=r.get(t);void 0===d?r.set(t,function(t,r){let a,o=t.array,l=t.usage,h=e.createBuffer();if(e.bindBuffer(r,h),e.bufferData(r,o,l),t.onUploadCallback(),o instanceof Float32Array)a=5126;else if(o instanceof Uint16Array)if(t.isFloat16BufferAttribute)if(i)a=5131;else throw Error("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.");else a=5123;else if(o instanceof Int16Array)a=5122;else if(o instanceof Uint32Array)a=5125;else if(o instanceof Int32Array)a=5124;else if(o instanceof Int8Array)a=5120;else if(o instanceof Uint8Array)a=5121;else if(o instanceof Uint8ClampedArray)a=5121;else throw Error("THREE.WebGLAttributes: Unsupported buffer data format: "+o);return{buffer:h,type:a,bytesPerElement:o.BYTES_PER_ELEMENT,version:t.version}}(t,a)):d.version<t.version&&(o=d.buffer,h=(l=t).array,c=l.updateRange,e.bindBuffer(a,o),-1===c.count?e.bufferSubData(a,0,h):(i?e.bufferSubData(a,c.offset*h.BYTES_PER_ELEMENT,h,c.offset,c.c
41ount):e.bufferSubData(a,c.offset*h.BYTES_PER_ELEMENT,h.subarray(c.offset,c.offset+c.count)),c.count=-1),l.onUploadCallback(),d.version=t.version)}}}var sS=class extends rQ{constructor(e=1,t=1,i=1,r=1){super(),this.type="PlaneGeometry",this.parameters={width:e,height:t,widthSegments:i,heightSegments:r};let a=e/2,o=t/2,l=Math.floor(i),h=Math.floor(r),c=l+1,d=h+1,p=e/l,f=t/h,m=[],g=[],v=[],y=[];for(let e=0;e<d;e++){let t=e*f-o;for(let i=0;i<c;i++){let r=i*p-a;g.push(r,-t,0),v.push(0,0,1),y.push(i/l),y.push(1-e/h)}}for(let e=0;e<h;e++)for(let t=0;t<l;t++){let i=t+c*e,r=t+c*(e+1),a=t+1+c*(e+1),o=t+1+c*e;m.push(i,r,o),m.push(r,a,o)}this.setIndex(m),this.setAttribute("position",new rV(g,3)),this.setAttribute("normal",new rV(v,3)),this.setAttribute("uv",new rV(y,2))}static fromJSON(e){return new sS(e.width,e.height,e.widthSegments,e.heightSegments)}},s_={alphamap_fragment:`#ifdef USE_ALPHAMAP 42 diffuseColor.a *= texture2D( alphaMap, vUv ).g; 43#endif`,alphamap_pars_fragment:`#ifdef USE_ALPHAMAP 44 uniform sampler2D alphaMap; 45#endif`,alphatest_fragment:`#ifdef USE_ALPHATEST 46 if ( diffuseColor.a < alphaTest ) discard; 47#endif`,alphatest_pars_fragment:`#ifdef USE_ALPHATEST 48 uniform float alphaTest; 49#endif`,aomap_fragment:`#ifdef USE_AOMAP 50 float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0; 51 reflectedLight.indirectDiffuse *= ambientOcclusion; 52 #if defined( USE_ENVMAP ) && defined( STANDARD ) 53 float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) ); 54 reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); 55 #endif 56#endif`,aomap_pars_fragment:`#ifdef USE_AOMAP 57 uniform sampler2D aoMap; 58 uniform float aoMapIntensity; 59#endif`,begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:`vec3 objectNormal = vec3( normal ); 60#ifdef USE_TANGENT 61 vec3 objectTangent = vec3( tangent.xyz ); 62#endif`,bsdfs:`vec3 BRDF_Lambert( const in vec3 diffuseColor ) { 63 return RECIPROCAL_PI * diffuseColor; 64} 65vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { 66 float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); 67 return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); 68} 69float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { 70 float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); 71 return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); 72} 73vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { 74 float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); 75 float x2 = x * x; 76 float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); 77 return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); 78} 79float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { 80 float a2 = pow2( alpha ); 81 float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); 82 float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); 83 return 0.5 / max( gv + gl, EPSILON ); 84} 85float D_GGX( const in float alpha, const in float dotNH ) { 86 float a2 = pow2( alpha ); 87 float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; 88 return RECIPROCAL_PI * a2 / pow2( denom ); 89} 90vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) { 91 float alpha = pow2( roughness ); 92 vec3 halfDir = normalize( lightDir + viewDir ); 93 float dotNL = saturate( dot( normal, lightDir ) ); 94 float dotNV = saturate( dot( normal, viewDir ) ); 95 float dotNH = saturate( dot( normal, halfDir ) ); 96 float dotVH = saturate( dot( viewDir, halfDir ) ); 97 vec3 F = F_Schlick( f0, f90, dotVH ); 98 float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); 99 float D = D_GGX( alpha, dotNH ); 100 return F * ( V * D ); 101} 102#ifdef USE_IRIDESCENCE 103 vec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) { 104 float alpha = pow2( roughness ); 105 vec3 halfDir = normalize( lightDir + viewDir ); 106 float dotNL = saturate( dot( normal, lightDir ) );
107 float dotNV = saturate( dot( normal, viewDir ) ); 108 float dotNH = saturate( dot( normal, halfDir ) ); 109 float dotVH = saturate( dot( viewDir, halfDir ) ); 110 vec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence ); 111 float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); 112 float D = D_GGX( alpha, dotNH ); 113 return F * ( V * D ); 114 } 115#endif 116vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { 117 const float LUT_SIZE = 64.0; 118 const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; 119 const float LUT_BIAS = 0.5 / LUT_SIZE; 120 float dotNV = saturate( dot( N, V ) ); 121 vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); 122 uv = uv * LUT_SCALE + LUT_BIAS; 123 return uv; 124} 125float LTC_ClippedSphereFormFactor( const in vec3 f ) { 126 float l = length( f ); 127 return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); 128} 129vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { 130 float x = dot( v1, v2 ); 131 float y = abs( x ); 132 float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; 133 float b = 3.4175940 + ( 4.1616724 + y ) * y; 134 float v = a / b; 135 float theta_sintheta = ( x >
135 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; 136 return cross( v1, v2 ) * theta_sintheta; 137} 138vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { 139 vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; 140 vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; 141 vec3 lightNormal = cross( v1, v2 ); 142 if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); 143 vec3 T1, T2; 144 T1 = normalize( V - N * dot( V, N ) ); 145 T2 = - cross( N, T1 ); 146 mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) ); 147 vec3 coords[ 4 ]; 148 coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); 149 coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); 150 coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); 151 coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); 152 coords[ 0 ] = normalize( coords[ 0 ] ); 153 coords[ 1 ] = normalize( coords[ 1 ] ); 154 coords[ 2 ] = normalize( coords[ 2 ] ); 155 coords[ 3 ] = normalize( coords[ 3 ] ); 156 vec3 vectorFormFactor = vec3( 0.0 ); 157 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); 158 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); 159 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); 160 vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); 161 float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); 162 return vec3( result ); 163} 164float G_BlinnPhong_Implicit( ) { 165 return 0.25; 166} 167float D_BlinnPhong( const in float shininess, const in float dotNH ) { 168 return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess ); 169} 170vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) { 171 vec3 halfDir = normalize( lightDir + viewDir ); 172 float dotNH = saturate( dot( normal, halfDir ) ); 173 float dotVH = saturate( dot( viewDir, halfDir ) ); 174 vec3 F = F_Schlick( specularColor, 1.0, dotVH ); 175 float G = G_BlinnPhong_Implicit( ); 176 float D = D_BlinnPhong( shininess, dotNH ); 177 return F * ( G * D ); 178} 179#if defined( USE_SHEEN ) 180float D_Charlie( float roughness, float dotNH ) { 181 float alpha = pow2( roughness ); 182 float invAlpha = 1.0 / alpha; 183 float cos2h = dotNH * dotNH; 184 float sin2h = max( 1.0 - cos2h, 0.0078125 ); 185 return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); 186} 187float V_Neubelt( float dotNV, float dotNL ) { 188 return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); 189} 190vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { 191 vec3 halfDir = normalize( lightDir + viewDir ); 192 float dotNL = saturate( dot( normal, lightDir ) ); 193 float dotNV = saturate( dot( normal, viewDir ) ); 194 float dotNH = saturate( dot( normal, halfDir ) ); 195 float D = D_Charlie( sheenRoughness, dotNH ); 196 float V = V_Neubelt( dotNV, dotNL ); 197 return sheenColor * ( D * V ); 198} 199#endif`,iridescence_fragment:`#ifdef USE_IRIDESCENCE 200 const mat3 XYZ_TO_REC709 = mat3( 201 3.2404542, -0.9692660, 0.0556434, 202 -1.5371385, 1.8760108, -0.2040259, 203 -0.4985314, 0.0415560, 1.0572252 204 ); 205 vec3 Fresnel0ToIor( vec3 fresnel0 ) { 206 vec3 sqrtF0 = sqrt( fresnel0 ); 207 return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 ); 208 } 209 vec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) { 210 return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) ); 211 } 212 float IorToFresnel0( float transmittedIor, float incidentIor ) { 213 return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor )); 214 } 215 vec3 evalSensitivity( float OPD, vec3 shift ) { 216 float phase = 2.0 * PI * OPD * 1.0e-9; 217 vec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 ); 218 vec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 ); 219 vec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 ); 220 vec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var ); 221 xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) ); 222 xyz /= 1.0685e-7; 223 vec3 rgb = XYZ_TO_REC709 * xyz; 224 return rgb; 225 } 226 vec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) { 227 vec3 I; 228 float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) ); 229 float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) ); 230 float cosTheta2Sq = 1.0 - sinTheta2Sq; 231 if ( cosTheta2Sq < 0.0 ) { 232 return vec3( 1.0 ); 233 } 234 float cosTheta2 = sqrt( cosTheta2Sq ); 235 float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );
236 float R12 = F_Schlick( R0, 1.0, cosTheta1 ); 237 float R21 = R12; 238 float T121 = 1.0 - R12; 239 float phi12 = 0.0; 240 if ( iridescenceIOR < outsideIOR ) phi12 = PI; 241 float phi21 = PI - phi12; 242 vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR ); 243 vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 ); 244 vec3 phi23 = vec3( 0.0 ); 245 if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI; 246 if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI; 247 if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI; 248 float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2; 249 vec3 phi = vec3( phi21 ) + phi23; 250 vec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 ); 251 vec3 r123 = sqrt( R123 ); 252 vec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 ); 253 vec3 C0 = R12 + Rs; 254 I = C0; 255 vec3 Cm = Rs - T121; 256 for ( int m = 1; m <= 2; ++ m ) { 257 Cm *= r123; 258 vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi ); 259 I += Cm * Sm; 260 } 261 return max( I, vec3( 0.0 ) ); 262 } 263#endif`,bumpmap_pars_fragment:`#ifdef USE_BUMPMAP 264 uniform sampler2D bumpMap; 265 uniform float bumpScale; 266 vec2 dHdxy_fwd() { 267 vec2 dSTdx = dFdx( vUv ); 268 vec2 dSTdy = dFdy( vUv ); 269 float Hll = bumpScale * texture2D( bumpMap, vUv ).x; 270 float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll; 271 float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll; 272 return vec2( dBx, dBy ); 273 } 274 vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) { 275 vec3 vSigmaX = dFdx( surf_pos.xyz ); 276 vec3 vSigmaY = dFdy( surf_pos.xyz ); 277 vec3 vN = surf_norm; 278 vec3 R1 = cross( vSigmaY, vN ); 279 vec3 R2 = cross( vN, vSigmaX ); 280 float fDet = dot( vSigmaX, R1 ) * faceDirection; 281 vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); 282 return normalize( abs( fDet ) * surf_norm - vGrad ); 283 } 284#endif`,clipping_planes_fragment:`#if NUM_CLIPPING_PLANES > 0 285 vec4 plane; 286 #pragma unroll_loop_start 287 for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { 288 plane = clippingPlanes[ i ]; 289 if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; 290 } 291 #pragma unroll_loop_end 292 #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES 293 bool clipped = true; 294 #pragma unroll_loop_start 295 for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { 296 plane = clippingPlanes[ i ]; 297 clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; 298 } 299 #pragma unroll_loop_end 300 if ( clipped ) discard; 301 #endif 302#endif`,clipping_planes_pars_fragment:`#if NUM_CLIPPING_PLANES > 0 303 varying vec3 vClipPosition; 304 uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; 305#endif`,clipping_planes_pars_vertex:`#if NUM_CLIPPING_PLANES > 0 306 varying vec3 vClipPosition; 307#endif`,clipping_planes_vertex:`#if NUM_CLIPPING_PLANES > 0 308 vClipPosition = - mvPosition.xyz; 309#endif`,color_fragment:`#if defined( USE_COLOR_ALPHA ) 310 diffuseColor *= vColor; 311#elif defined( USE_COLOR ) 312 diffuseColor.rgb *= vColor; 313#endif`,color_pars_fragment:`#if defined( USE_COLOR_ALPHA ) 314 varying vec4 vColor; 315#elif defined( USE_COLOR ) 316 varying vec3 vColor; 317#endif`,color_pars_vertex:`#if defined( USE_COLOR_ALPHA ) 318 varying vec4 vColor; 319#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) 320 varying vec3 vColor; 321#endif`,color_vertex:`#if defined( USE_COLOR_ALPHA ) 322 vColor = vec4( 1.0 ); 323#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) 324 vColor = vec3( 1.0 ); 325#endif 326#ifdef USE_COLOR 327 vColor *= color; 328#endif 329#ifdef USE_INSTANCING_COLOR 330 vColor.xyz *= instanceColor.xyz; 331#endif`,common:`#define PI 3.141592653589793 332#define PI2 6.283185307179586 333#define PI_HALF 1.5707963267948966 334#define RECIPROCAL_PI 0.3183098861837907 335#define RECIPROCAL_PI2 0.15915494309189535 336#define EPSILON 1e-6 337#ifndef saturate 338#define saturate( a ) clamp( a, 0.0, 1.0 ) 339#endif 340#define whiteComplement( a ) ( 1.0 - saturate( a ) ) 341float pow2( const in float x ) { return x*x; } 342vec3 pow2( const in vec3 x ) { return x*x; } 343float pow3( const in float x ) { return x*x*x; } 344float pow4( const in float x ) { float x2 = x*x; return x2*x2; } 345float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } 346float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } 347highp float rand( const in vec2 uv ) { 348 const highp float a = 12.9898, b = 78.233, c = 43758.5453; 349 highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); 350 return fract( sin( sn ) * c ); 351} 352#ifdef HIGH_PRECISION 353 float precisionSafeLength( vec3 v ) { return length( v ); } 354#else 355 float precisionSafeLength( vec3 v ) { 356 float maxComponent = max3( abs( v ) ); 357 return length( v / maxComponent ) * maxComponent; 358 } 359#endif 360struct IncidentLight { 361 vec3 color; 362 vec3 direction; 363 bool visible; 364}; 365struct ReflectedLight { 366 vec3 directDiffuse; 367 vec3 directSpecular; 368 vec3 indirectDiffuse; 369 vec3 indirectSpecular; 370}; 371struct GeometricContext { 372 vec3 position; 373 vec3 normal; 374 vec3 viewDir; 375#ifdef USE_CLEARCOAT 376 vec3 clearcoatNormal; 377#endif 378}; 379vec3 transformDirection( in vec3 dir, in mat4 matrix ) { 380 return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); 381} 382vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { 383 return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); 384} 385mat3 transposeMat3( const in mat3 m ) { 386 mat3 tmp; 387 tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); 388 tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); 389 tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); 390 return tmp; 391} 392float luminance( const in vec3 rgb ) { 393 const vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 ); 394 return dot( weights, rgb ); 395} 396bool isPerspectiveMatrix( mat4 m ) { 397 return m[ 2 ][ 3 ] == - 1.0; 398} 399vec2 equirectUv( in vec3 dir ) { 400 float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; 401 float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; 402 return vec2( u, v ); 403}`,cube_uv_reflection_fragment:`#ifdef ENVMAP_TYPE_CUBE_UV 404 #define cubeUV_minMipLevel 4.0 405 #define cubeUV_minTileSize 16.0 406 float getFace( vec3 direction ) { 407 vec3 absDirection = abs( direction ); 408 float face = - 1.0; 409 if ( absDirection.x > absDirection.z ) { 410 if ( absDirection.x > absDirection.y ) 411 face = direction.x > 0.0 ? 0.0 : 3.0; 412 else 413 face = direction.y > 0.0 ? 1.0 : 4.0; 414 } else { 415 if ( absDirection.z > absDirection.y ) 416 face = direction.z > 0.0 ? 2.0 : 5.0; 417 else 418 face = direction.y > 0.0 ? 1.0 : 4.0; 419 } 420 return face; 421 } 422 vec2 getUV( vec3 direction, float face ) { 423 vec2 uv; 424 if ( face == 0.0 ) { 425 uv = vec2( direction.z, direction.y ) / abs( direction.x ); 426 } else if ( face == 1.0 ) { 427 uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); 428 } else if ( face == 2.0 ) { 429 uv = vec2( - direction.x, direction.y ) / abs( direction.z ); 430 } else if ( face == 3.0 ) { 431 uv = vec2( - direction.z, direction.y ) / abs( direction.x ); 432 } else if ( face == 4.0 ) { 433 uv = vec2( - direction.x, direction.z ) / abs( direction.y ); 434 } else { 435 uv = vec2( direction.x, direction.y ) / abs( direction.z ); 436 } 437 return 0.5 * ( uv + 1.0 ); 438 } 439 vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { 440 float face = getFace( direction ); 441 float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); 442 mipInt = max( mipInt, cubeUV_minMipLevel ); 443 float faceSize = exp2( mipInt );
444 highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; 445 if ( face > 2.0 ) { 446 uv.y += faceSize; 447 face -= 3.0; 448 } 449 uv.x += face * faceSize; 450 uv.x += filterInt * 3.0 * cubeUV_minTileSize; 451 uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); 452 uv.x *= CUBEUV_TEXEL_WIDTH; 453 uv.y *= CUBEUV_TEXEL_HEIGHT; 454 #ifdef texture2DGradEXT 455 return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; 456 #else 457 return texture2D( envMap, uv ).rgb; 458 #endif 459 } 460 #define cubeUV_r0 1.0 461 #define cubeUV_v0 0.339 462 #define cubeUV_m0 - 2.0 463 #define cubeUV_r1 0.8 464 #define cubeUV_v1 0.276 465 #define cubeUV_m1 - 1.0 466 #define cubeUV_r4 0.4 467 #define cubeUV_v4 0.046 468 #define cubeUV_m4 2.0 469 #define cubeUV_r5 0.305 470 #define cubeUV_v5 0.016 471 #define cubeUV_m5 3.0 472 #define cubeUV_r6 0.21 473 #define cubeUV_v6 0.0038 474 #define cubeUV_m6 4.0 475 float roughnessToMip( float roughness ) { 476 float mip = 0.0; 477 if ( roughness >= cubeUV_r1 ) { 478 mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; 479 } else if ( roughness >= cubeUV_r4 ) { 480 mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; 481 } else if ( roughness >= cubeUV_r5 ) { 482 mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; 483 } else if ( roughness >= cubeUV_r6 ) { 484 mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; 485 } else { 486 mip = - 2.0 * log2( 1.16 * roughness ); } 487 return mip; 488 } 489 vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { 490 float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); 491 float mipF = fract( mip ); 492 float mipInt = floor( mip ); 493 vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); 494 if ( mipF == 0.0 ) { 495 return vec4( color0, 1.0 ); 496 } else { 497 vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); 498 return vec4( mix( color0, color1, mipF ), 1.0 ); 499 } 500 } 501#endif`,defaultnormal_vertex:`vec3 transformedNormal = objectNormal; 502#ifdef USE_INSTANCING 503 mat3 m = mat3( instanceMatrix ); 504 transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); 505 transformedNormal = m * transformedNormal; 506#endif 507transformedNormal = normalMatrix * transformedNormal; 508#ifdef FLIP_SIDED 509 transformedNormal = - transformedNormal; 510#endif 511#ifdef USE_TANGENT 512 vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; 513 #ifdef FLIP_SIDED 514 transformedTangent = - transformedTangent; 515 #endif 516#endif`,displacementmap_pars_vertex:`#ifdef USE_DISPLACEMENTMAP 517 uniform sampler2D displacementMap; 518 uniform float displacementScale; 519 uniform float displacementBias; 520#endif`,displacementmap_vertex:`#ifdef USE_DISPLACEMENTMAP 521 transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias ); 522#endif`,emissivemap_fragment:`#ifdef USE_EMISSIVEMAP 523 vec4 emissiveColor = texture2D( emissiveMap, vUv ); 524 totalEmissiveRadiance *= emissiveColor.rgb; 525#endif`,emissivemap_pars_fragment:`#ifdef USE_EMISSIVEMAP 526 uniform sampler2D emissiveMap; 527#endif`,encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:`vec4 LinearToLinear( in vec4 value ) { 528 return value; 529} 530vec4 LinearTosRGB( in vec4 value ) { 531 return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); 532}`,envmap_fragment:`#ifdef USE_ENVMAP 533 #ifdef ENV_WORLDPOS 534 vec3 cameraToFrag; 535 if ( isOrthographic ) { 536 cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 537 } else { 538 cameraToFrag = normalize( vWorldPosition - cameraPosition ); 539 } 540 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 541 #ifdef ENVMAP_MODE_REFLECTION 542 vec3 reflectVec = reflect( cameraToFrag, worldNormal ); 543 #else 544 vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); 545 #endif 546 #else 547 vec3 reflectVec = vReflect; 548 #endif 549 #ifdef ENVMAP_TYPE_CUBE 550 vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) ); 551 #else 552 vec4 envColor = vec4( 0.0 ); 553 #endif 554 #ifdef ENVMAP_BLENDING_MULTIPLY 555 outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); 556 #elif defined( ENVMAP_BLENDING_MIX ) 557 outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); 558 #elif defined( ENVMAP_BLENDING_ADD ) 559 outgoingLight += envColor.xyz * specularStrength * reflectivity; 560 #endif 561#endif`,envmap_common_pars_fragment:`#ifdef USE_ENVMAP 562 uniform float envMapIntensity; 563 uniform float flipEnvMap; 564 #ifdef ENVMAP_TYPE_CUBE 565 uniform samplerCube envMap; 566 #else 567 uniform sampler2D envMap; 568 #endif 569 570#endif`,envmap_pars_fragment:`#ifdef USE_ENVMAP 571 uniform float reflectivity; 572 #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) 573 #define ENV_WORLDPOS 574 #endif 575 #ifdef ENV_WORLDPOS 576 varying vec3 vWorldPosition; 577 uniform float refractionRatio; 578 #else 579 varying vec3 vReflect; 580 #endif 581#endif`,envmap_pars_vertex:`#ifdef USE_ENVMAP 582 #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) 583 #define ENV_WORLDPOS 584 #endif 585 #ifdef ENV_WORLDPOS 586 587 varying vec3 vWorldPosition; 588 #else 589 varying vec3 vReflect; 590 uniform float refractionRatio; 591 #endif 592#endif`,envmap_physical_pars_fragment:`#if defined( USE_ENVMAP ) 593 vec3 getIBLIrradiance( const in vec3 normal ) { 594 #if defined( ENVMAP_TYPE_CUBE_UV ) 595 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 596 vec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 ); 597 return PI * envMapColor.rgb * envMapIntensity; 598 #else 599 return vec3( 0.0 ); 600 #endif 601 } 602 vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { 603 #if defined( ENVMAP_TYPE_CUBE_UV ) 604 vec3 reflectVec = reflect( - viewDir, normal ); 605 reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); 606 reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); 607 vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness ); 608 return envMapColor.rgb * envMapIntensity; 609 #else 610 return vec3( 0.0 ); 611 #endif 612 } 613#endif`,envmap_vertex:`#ifdef USE_ENVMAP 614 #ifdef ENV_WORLDPOS 615 vWorldPosition = worldPosition.xyz; 616 #else 617 vec3 cameraToVertex; 618 if ( isOrthographic ) { 619 cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 620 } else {
621 cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); 622 } 623 vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); 624 #ifdef ENVMAP_MODE_REFLECTION 625 vReflect = reflect( cameraToVertex, worldNormal ); 626 #else 627 vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); 628 #endif 629 #endif 630#endif`,fog_vertex:`#ifdef USE_FOG 631 vFogDepth = - mvPosition.z; 632#endif`,fog_pars_vertex:`#ifdef USE_FOG 633 varying float vFogDepth; 634#endif`,fog_fragment:`#ifdef USE_FOG 635 #ifdef FOG_EXP2 636 float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); 637 #else 638 float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); 639 #endif 640 gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); 641#endif`,fog_pars_fragment:`#ifdef USE_FOG 642 uniform vec3 fogColor; 643 varying float vFogDepth; 644 #ifdef FOG_EXP2 645 uniform float fogDensity; 646 #else 647 uniform float fogNear; 648 uniform float fogFar; 649 #endif 650#endif`,gradientmap_pars_fragment:`#ifdef USE_GRADIENTMAP 651 uniform sampler2D gradientMap; 652#endif 653vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { 654 float dotNL = dot( normal, lightDirection ); 655 vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); 656 #ifdef USE_GRADIENTMAP 657 return vec3( texture2D( gradientMap, coord ).r ); 658 #else 659 vec2 fw = fwidth( coord ) * 0.5; 660 return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); 661 #endif 662}`,lightmap_fragment:`#ifdef USE_LIGHTMAP 663 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 664 vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; 665 reflectedLight.indirectDiffuse += lightMapIrradiance; 666#endif`,lightmap_pars_fragment:`#ifdef USE_LIGHTMAP 667 uniform sampler2D lightMap; 668 uniform float lightMapIntensity; 669#endif`,lights_lambert_fragment:`LambertMaterial material; 670material.diffuseColor = diffuseColor.rgb; 671material.specularStrength = specularStrength;`,lights_lambert_pars_fragment:`varying vec3 vViewPosition; 672struct LambertMaterial { 673 vec3 diffuseColor; 674 float specularStrength; 675}; 676void RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { 677 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 678 vec3 irradiance = dotNL * directLight.color; 679 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 680} 681void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { 682 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 683} 684#define RE_Direct RE_Direct_Lambert 685#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,lights_pars_begin:`uniform bool receiveShadow; 686uniform vec3 ambientLightColor; 687uniform vec3 lightProbe[ 9 ]; 688vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { 689 float x = normal.x, y = normal.y, z = normal.z; 690 vec3 result = shCoefficients[ 0 ] * 0.886227; 691 result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; 692 result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; 693 result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; 694 result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; 695 result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; 696 result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); 697 result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; 698 result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); 699 return result; 700} 701vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { 702 vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); 703 vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); 704 return irradiance; 705} 706vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { 707 vec3 irradiance = ambientLightColor; 708 return irradiance; 709} 710float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { 711 #if defined ( PHYSICALLY_CORRECT_LIGHTS ) 712 float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); 713 if ( cutoffDistance > 0.0 ) { 714 distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); 715 } 716 return distanceFalloff; 717 #else 718 if ( cutoffDistance > 0.0 && decayExponent > 0.0 ) { 719 return pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent ); 720 } 721 return 1.0; 722 #endif 723} 724float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { 725 return smoothstep( coneCosine, penumbraCosine, angleCosine ); 726} 727#if NUM_DIR_LIGHTS > 0 728 struct DirectionalLight { 729 vec3 direction; 730 vec3 color; 731 }; 732 uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; 733 void getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) { 734 light.color = directionalLight.color; 735 light.direction = directionalLight.direction; 736 light.visible = true; 737 } 738#endif 739#if NUM_POINT_LIGHTS > 0 740 struct PointLight { 741 vec3 position; 742 vec3 color; 743 float distance; 744 float decay; 745 }; 746 uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; 747 void getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) { 748 vec3 lVector = pointLight.position - geometry.position; 749 light.direction = normalize( lVector ); 750 float lightDistance = length( lVector ); 751 light.color = pointLight.color; 752 light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); 753 light.visible = ( light.color != vec3( 0.0 ) ); 754 } 755#endif
756#if NUM_SPOT_LIGHTS > 0 757 struct SpotLight { 758 vec3 position; 759 vec3 direction; 760 vec3 color; 761 float distance; 762 float decay; 763 float coneCos; 764 float penumbraCos; 765 }; 766 uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; 767 void getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) { 768 vec3 lVector = spotLight.position - geometry.position; 769 light.direction = normalize( lVector ); 770 float angleCos = dot( light.direction, spotLight.direction ); 771 float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); 772 if ( spotAttenuation > 0.0 ) { 773 float lightDistance = length( lVector ); 774 light.color = spotLight.color * spotAttenuation; 775 light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); 776 light.visible = ( light.color != vec3( 0.0 ) ); 777 } else { 778 light.color = vec3( 0.0 ); 779 light.visible = false; 780 } 781 } 782#endif 783#if NUM_RECT_AREA_LIGHTS > 0 784 struct RectAreaLight { 785 vec3 color; 786 vec3 position; 787 vec3 halfWidth; 788 vec3 halfHeight; 789 }; 790 uniform sampler2D ltc_1; uniform sampler2D ltc_2; 791 uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; 792#endif 793#if NUM_HEMI_LIGHTS > 0 794 struct HemisphereLight { 795 vec3 direction; 796 vec3 skyColor; 797 vec3 groundColor; 798 }; 799 uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; 800 vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { 801 float dotNL = dot( normal, hemiLight.direction ); 802 float hemiDiffuseWeight = 0.5 * dotNL + 0.5; 803 vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); 804 return irradiance; 805 } 806#endif`,lights_toon_fragment:`ToonMaterial material; 807material.diffuseColor = diffuseColor.rgb;`,lights_toon_pars_fragment:`varying vec3 vViewPosition; 808struct ToonMaterial { 809 vec3 diffuseColor; 810}; 811void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 812 vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color; 813 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 814} 815void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 816 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 817} 818#define RE_Direct RE_Direct_Toon 819#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,lights_phong_fragment:`BlinnPhongMaterial material; 820material.diffuseColor = diffuseColor.rgb; 821material.specularColor = specular; 822material.specularShininess = shininess; 823material.specularStrength = specularStrength;`,lights_phong_pars_fragment:`varying vec3 vViewPosition; 824struct BlinnPhongMaterial { 825 vec3 diffuseColor; 826 vec3 specularColor; 827 float specularShininess; 828 float specularStrength; 829}; 830void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { 831 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 832 vec3 irradiance = dotNL * directLight.color; 833 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 834 reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; 835} 836void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { 837 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 838} 839#define RE_Direct RE_Direct_BlinnPhong 840#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,lights_physical_fragment:`PhysicalMaterial material; 841material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); 842vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) ); 843float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); 844material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; 845material.roughness = min( material.roughness, 1.0 ); 846#ifdef IOR 847 material.ior = ior; 848 #ifdef SPECULAR 849 float specularIntensityFactor = specularIntensity; 850 vec3 specularColorFactor = specularColor; 851 #ifdef USE_SPECULARINTENSITYMAP 852 specularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a; 853 #endif 854 #ifdef USE_SPECULARCOLORMAP 855 specularColorFactor *= texture2D( specularColorMap, vUv ).rgb; 856 #endif 857 material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); 858 #else 859 float specularIntensityFactor = 1.0; 860 vec3 specularColorFactor = vec3( 1.0 ); 861 material.specularF90 = 1.0; 862 #endif 863 material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); 864#else 865 material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); 866 material.specularF90 = 1.0; 867#endif 868#ifdef USE_CLEARCOAT 869 material.clearcoat = clearcoat; 870 material.clearcoatRoughness = clearcoatRoughness; 871 material.clearcoatF0 = vec3( 0.04 ); 872 material.clearcoatF90 = 1.0; 873 #ifdef USE_CLEARCOATMAP 874 material.clearcoat *= texture2D( clearcoatMap, vUv ).x; 875 #endif 876 #ifdef USE_CLEARCOAT_ROUGHNESSMAP 877 material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y; 878 #endif 879 material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); 880 material.clearcoatRoughness += geometryRoughness; 881 material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); 882#endif
883#ifdef USE_IRIDESCENCE 884 material.iridescence = iridescence; 885 material.iridescenceIOR = iridescenceIOR; 886 #ifdef USE_IRIDESCENCEMAP 887 material.iridescence *= texture2D( iridescenceMap, vUv ).r; 888 #endif 889 #ifdef USE_IRIDESCENCE_THICKNESSMAP 890 material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum; 891 #else 892 material.iridescenceThickness = iridescenceThicknessMaximum; 893 #endif 894#endif 895#ifdef USE_SHEEN 896 material.sheenColor = sheenColor; 897 #ifdef USE_SHEENCOLORMAP 898 material.sheenColor *= texture2D( sheenColorMap, vUv ).rgb; 899 #endif 900 material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); 901 #ifdef USE_SHEENROUGHNESSMAP 902 material.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a; 903 #endif 904#endif`,lights_physical_pars_fragment:`struct PhysicalMaterial { 905 vec3 diffuseColor; 906 float roughness; 907 vec3 specularColor; 908 float specularF90; 909 #ifdef USE_CLEARCOAT 910 float clearcoat; 911 float clearcoatRoughness; 912 vec3 clearcoatF0; 913 float clearcoatF90; 914 #endif 915 #ifdef USE_IRIDESCENCE 916 float iridescence; 917 float iridescenceIOR; 918 float iridescenceThickness; 919 vec3 iridescenceFresnel; 920 vec3 iridescenceF0; 921 #endif 922 #ifdef USE_SHEEN 923 vec3 sheenColor; 924 float sheenRoughness; 925 #endif 926 #ifdef IOR 927 float ior; 928 #endif 929 #ifdef USE_TRANSMISSION 930 float transmission; 931 float transmissionAlpha; 932 float thickness; 933 float attenuationDistance; 934 vec3 attenuationColor; 935 #endif 936}; 937vec3 clearcoatSpecular = vec3( 0.0 ); 938vec3 sheenSpecular = vec3( 0.0 ); 939float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { 940 float dotNV = saturate( dot( normal, viewDir ) ); 941 float r2 = roughness * roughness; 942 float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; 943 float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; 944 float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); 945 return saturate( DG * RECIPROCAL_PI ); 946} 947vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { 948 float dotNV = saturate( dot( normal, viewDir ) ); 949 const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); 950 const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 ); 951 vec4 r = roughness * c0 + c1; 952 float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; 953 vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw; 954 return fab; 955} 956vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { 957 vec2 fab = DFGApprox( normal, viewDir, roughness ); 958 return specularColor * fab.x + specularF90 * fab.y; 959} 960#ifdef USE_IRIDESCENCE 961void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { 962#else 963void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { 964#endif 965 vec2 fab = DFGApprox( normal, viewDir, roughness ); 966 #ifdef USE_IRIDESCENCE 967 vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); 968 #else 969 vec3 Fr = specularColor; 970 #endif 971 vec3 FssEss = Fr * fab.x + specularF90 * fab.y; 972 float Ess = fab.x + fab.y; 973 float Ems = 1.0 - Ess; 974 vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); 975 singleScatter += FssEss; 976 multiScatter += Fms * Ems; 977} 978#if NUM_RECT_AREA_LIGHTS > 0 979 void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { 980 vec3 normal = geometry.normal; 981 vec3 viewDir = geometry.viewDir; 982 vec3 position = geometry.position; 983 vec3 lightPos = rectAreaLight.position; 984 vec3 halfWidth = rectAreaLight.halfWidth; 985 vec3 halfHeight = rectAreaLight.halfHeight; 986 vec3 lightColor = rectAreaLight.color; 987 float roughness = material.roughness; 988 vec3 rectCoords[ 4 ]; 989 rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; 990 rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; 991 rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; 992 vec2 uv = LTC_Uv( normal, viewDir, roughness ); 993 vec4 t1 = texture2D( ltc_1, uv ); 994 vec4 t2 = texture2D( ltc_2, uv ); 995 mat3 mInv = mat3( 996 vec3( t1.x, 0, t1.y ), 997 vec3( 0, 1, 0 ), 998 vec3( t1.z, 0, t1.w ) 999 ); 1000 vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y ); 1001 reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); 1002 reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); 1003 } 1004#endif 1005void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
1006 float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); 1007 vec3 irradiance = dotNL * directLight.color; 1008 #ifdef USE_CLEARCOAT 1009 float dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) ); 1010 vec3 ccIrradiance = dotNLcc * directLight.color; 1011 clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); 1012 #endif 1013 #ifdef USE_SHEEN 1014 sheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness ); 1015 #endif 1016 #ifdef USE_IRIDESCENCE 1017 reflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness ); 1018 #else 1019 reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness ); 1020 #endif 1021 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 1022} 1023void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { 1024 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 1025} 1026void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { 1027 #ifdef USE_CLEARCOAT 1028 clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); 1029 #endif 1030 #ifdef USE_SHEEN 1031 sheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness ); 1032 #endif 1033 vec3 singleScattering = vec3( 0.0 ); 1034 vec3 multiScattering = vec3( 0.0 ); 1035 vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; 1036 #ifdef USE_IRIDESCENCE 1037 computeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering ); 1038 #else 1039 computeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering ); 1040 #endif 1041 vec3 totalScattering = singleScattering + multiScattering; 1042 vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); 1043 reflectedLight.indirectSpecular += radiance * singleScattering; 1044 reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; 1045 reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; 1046} 1047#define RE_Direct RE_Direct_Physical 1048#define RE_Direct_RectArea RE_Direct_RectArea_Physical 1049#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical 1050#define RE_IndirectSpecular RE_IndirectSpecular_Physical 1051float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { 1052 return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); 1053}`,lights_fragment_begin:` 1054GeometricContext geometry; 1055geometry.position = - vViewPosition; 1056geometry.normal = normal; 1057geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); 1058#ifdef USE_CLEARCOAT 1059 geometry.clearcoatNormal = clearcoatNormal; 1060#endif 1061#ifdef USE_IRIDESCENCE 1062 float dotNVi = saturate( dot( normal, geometry.viewDir ) ); 1063 if ( material.iridescenceThickness == 0.0 ) { 1064 material.iridescence = 0.0; 1065 } else { 1066 material.iridescence = saturate( material.iridescence ); 1067 } 1068 if ( material.iridescence > 0.0 ) { 1069 material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); 1070 material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); 1071 } 1072#endif 1073IncidentLight directLight; 1074#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) 1075 PointLight pointLight; 1076 #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 1077 PointLightShadow pointLightShadow; 1078 #endif 1079 #pragma unroll_loop_start 1080 for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { 1081 pointLight = pointLights[ i ]; 1082 getPointLightInfo( pointLight, geometry, directLight ); 1083 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) 1084 pointLightShadow = pointLightShadows[ i ]; 1085 directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; 1086 #endif 1087 RE_Direct( directLight, geometry, material, reflectedLight ); 1088 } 1089 #pragma unroll_loop_end 1090#endif
1091#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) 1092 SpotLight spotLight; 1093 vec4 spotColor; 1094 vec3 spotLightCoord; 1095 bool inSpotLightMap; 1096 #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 1097 SpotLightShadow spotLightShadow; 1098 #endif 1099 #pragma unroll_loop_start 1100 for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { 1101 spotLight = spotLights[ i ]; 1102 getSpotLightInfo( spotLight, geometry, directLight ); 1103 #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) 1104 #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX 1105 #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1106 #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS 1107 #else 1108 #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) 1109 #endif 1110 #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) 1111 spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; 1112 inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); 1113 spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); 1114 directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; 1115 #endif 1116 #undef SPOT_LIGHT_MAP_INDEX 1117 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1118 spotLightShadow = spotLightShadows[ i ]; 1119 directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; 1120 #endif 1121 RE_Direct( directLight, geometry, material, reflectedLight ); 1122 } 1123 #pragma unroll_loop_end 1124#endif 1125#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) 1126 DirectionalLight directionalLight; 1127 #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 1128 DirectionalLightShadow directionalLightShadow; 1129 #endif 1130 #pragma unroll_loop_start 1131 for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { 1132 directionalLight = directionalLights[ i ]; 1133 getDirectionalLightInfo( directionalLight, geometry, directLight ); 1134 #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) 1135 directionalLightShadow = directionalLightShadows[ i ]; 1136 directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; 1137 #endif 1138 RE_Direct( directLight, geometry, material, reflectedLight ); 1139 } 1140 #pragma unroll_loop_end 1141#endif 1142#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) 1143 RectAreaLight rectAreaLight; 1144 #pragma unroll_loop_start 1145 for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { 1146 rectAreaLight = rectAreaLights[ i ]; 1147 RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight ); 1148 } 1149 #pragma unroll_loop_end 1150#endif 1151#if defined( RE_IndirectDiffuse ) 1152 vec3 iblIrradiance = vec3( 0.0 ); 1153 vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); 1154 irradiance += getLightProbeIrradiance( lightProbe, geometry.normal ); 1155 #if ( NUM_HEMI_LIGHTS > 0 ) 1156 #pragma unroll_loop_start 1157 for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { 1158 irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal ); 1159 } 1160 #pragma unroll_loop_end 1161 #endif 1162#endif 1163#if defined( RE_IndirectSpecular ) 1164 vec3 radiance = vec3( 0.0 ); 1165 vec3 clearcoatRadiance = vec3( 0.0 ); 1166#endif`,lights_fragment_maps:`#if defined( RE_IndirectDiffuse ) 1167 #ifdef USE_LIGHTMAP 1168 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 1169 vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; 1170 irradiance += lightMapIrradiance; 1171 #endif 1172 #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV ) 1173 iblIrradiance += getIBLIrradiance( geometry.normal ); 1174 #endif 1175#endif 1176#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) 1177 radiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness ); 1178 #ifdef USE_CLEARCOAT 1179 clearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness ); 1180 #endif 1181#endif`,lights_fragment_end:`#if defined( RE_IndirectDiffuse ) 1182 RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight ); 1183#endif 1184#if defined( RE_IndirectSpecular ) 1185 RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight ); 1186#endif`,logdepthbuf_fragment:`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT ) 1187 gl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; 1188#endif`,logdepthbuf_pars_fragment:`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT ) 1189 uniform float logDepthBufFC; 1190 varying float vFragDepth; 1191 varying float vIsPerspective; 1192#endif`,logdepthbuf_pars_vertex:`#ifdef USE_LOGDEPTHBUF 1193 #ifdef USE_LOGDEPTHBUF_EXT 1194 varying float vFragDepth; 1195 varying float vIsPerspective; 1196 #else 1197 uniform float logDepthBufFC; 1198 #endif 1199#endif`,logdepthbuf_vertex:`#ifdef USE_LOGDEPTHBUF 1200 #ifdef USE_LOGDEPTHBUF_EXT 1201 vFragDepth = 1.0 + gl_Position.w; 1202 vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); 1203 #else 1204 if ( isPerspectiveMatrix( projectionMatrix ) ) { 1205 gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0; 1206 gl_Position.z *= gl_Position.w; 1207 } 1208 #endif 1209#endif`,map_fragment:`#ifdef USE_MAP 1210 vec4 sampledDiffuseColor = texture2D( map, vUv ); 1211 #ifdef DECODE_VIDEO_TEXTURE 1212 sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); 1213 #endif 1214 diffuseColor *= sampledDiffuseColor; 1215#endif`,map_pars_fragment:`#ifdef USE_MAP 1216 uniform sampler2D map; 1217#endif`,map_particle_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) 1218 vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; 1219#endif 1220#ifdef USE_MAP 1221 diffuseColor *= texture2D( map, uv ); 1222#endif 1223#ifdef USE_ALPHAMAP 1224 diffuseColor.a *= texture2D( alphaMap, uv ).g; 1225#endif`,map_particle_pars_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) 1226 uniform mat3 uvTransform; 1227#endif 1228#ifdef USE_MAP 1229 uniform sampler2D map; 1230#endif 1231#ifdef USE_ALPHAMAP 1232 uniform sampler2D alphaMap; 1233#endif`,metalnessmap_fragment:`float metalnessFactor = metalness; 1234#ifdef USE_METALNESSMAP 1235 vec4 texelMetalness = texture2D( metalnessMap, vUv ); 1236 metalnessFactor *= texelMetalness.b; 1237#endif`,metalnessmap_pars_fragment:`#ifdef USE_METALNESSMAP 1238 uniform sampler2D metalnessMap; 1239#endif`,morphcolor_vertex:`#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE ) 1240 vColor *= morphTargetBaseInfluence; 1241 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1242 #if defined( USE_COLOR_ALPHA ) 1243 if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; 1244 #elif defined( USE_COLOR ) 1245 if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; 1246 #endif 1247 } 1248#endif`,morphnormal_vertex:`#ifdef USE_MORPHNORMALS 1249 objectNormal *= morphTargetBaseInfluence; 1250 #ifdef MORPHTARGETS_TEXTURE 1251 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1252 if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; 1253 } 1254 #else 1255 objectNormal += morphNormal0 * morphTargetInfluences[ 0 ]; 1256 objectNormal += morphNormal1 * morphTargetInfluences[ 1 ]; 1257 objectNormal += morphNormal2 * morphTargetInfluences[ 2 ]; 1258 objectNormal += morphNormal3 * morphTargetInfluences[ 3 ]; 1259 #endif 1260#endif`,morphtarget_pars_vertex:`#ifdef USE_MORPHTARGETS 1261 uniform float morphTargetBaseInfluence; 1262 #ifdef MORPHTARGETS_TEXTURE 1263 uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; 1264 uniform sampler2DArray morphTargetsTexture; 1265 uniform ivec2 morphTargetsTextureSize; 1266 vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { 1267 int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; 1268 int y = texelIndex / morphTargetsTextureSize.x; 1269 int x = texelIndex - y * morphTargetsTextureSize.x; 1270 ivec3 morphUV = ivec3( x, y, morphTargetIndex ); 1271 return texelFetch( morphTargetsTexture, morphUV, 0 ); 1272 } 1273 #else 1274 #ifndef USE_MORPHNORMALS 1275 uniform float morphTargetInfluences[ 8 ]; 1276 #else 1277 uniform float morphTargetInfluences[ 4 ]; 1278 #endif 1279 #endif 1280#endif`,morphtarget_vertex:`#ifdef USE_MORPHTARGETS 1281 transformed *= morphTargetBaseInfluence; 1282 #ifdef MORPHTARGETS_TEXTURE 1283 for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { 1284 if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; 1285 } 1286 #else 1287 transformed += morphTarget0 * morphTargetInfluences[ 0 ]; 1288 transformed += morphTarget1 * morphTargetInfluences[ 1 ]; 1289 transformed += morphTarget2 * morphTargetInfluences[ 2 ]; 1290 transformed += morphTarget3 * morphTargetInfluences[ 3 ]; 1291 #ifndef USE_MORPHNORMALS 1292 transformed += morphTarget4 * morphTargetInfluences[ 4 ]; 1293 transformed += morphTarget5 * morphTargetInfluences[ 5 ]; 1294 transformed += morphTarget6 * morphTargetInfluences[ 6 ]; 1295 transformed += morphTarget7 * morphTargetInfluences[ 7 ]; 1296 #endif 1297 #endif 1298#endif`,normal_fragment_begin:`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; 1299#ifdef FLAT_SHADED 1300 vec3 fdx = dFdx( vViewPosition ); 1301 vec3 fdy = dFdy( vViewPosition ); 1302 vec3 normal = normalize( cross( fdx, fdy ) ); 1303#else 1304 vec3 normal = normalize( vNormal ); 1305 #ifdef DOUBLE_SIDED 1306 normal = normal * faceDirection; 1307 #endif 1308 #ifdef USE_TANGENT 1309 vec3 tangent = normalize( vTangent ); 1310 vec3 bitangent = normalize( vBitangent ); 1311 #ifdef DOUBLE_SIDED 1312 tangent = tangent * faceDirection; 1313 bitangent = bitangent * faceDirection; 1314 #endif 1315 #if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP ) 1316 mat3 vTBN = mat3( tangent, bitangent, normal ); 1317 #endif 1318 #endif 1319#endif 1320vec3 geometryNormal = normal;`,normal_fragment_maps:`#ifdef OBJECTSPACE_NORMALMAP 1321 normal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; 1322 #ifdef FLIP_SIDED 1323 normal = - normal; 1324 #endif 1325 #ifdef DOUBLE_SIDED 1326 normal = normal * faceDirection; 1327 #endif 1328 normal = normalize( normalMatrix * normal ); 1329#elif defined( TANGENTSPACE_NORMALMAP ) 1330 vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; 1331 mapN.xy *= normalScale; 1332 #ifdef USE_TANGENT 1333 normal = normalize( vTBN * mapN ); 1334 #else
1335 normal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection ); 1336 #endif 1337#elif defined( USE_BUMPMAP ) 1338 normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); 1339#endif`,normal_pars_fragment:`#ifndef FLAT_SHADED 1340 varying vec3 vNormal; 1341 #ifdef USE_TANGENT 1342 varying vec3 vTangent; 1343 varying vec3 vBitangent; 1344 #endif 1345#endif`,normal_pars_vertex:`#ifndef FLAT_SHADED 1346 varying vec3 vNormal; 1347 #ifdef USE_TANGENT 1348 varying vec3 vTangent; 1349 varying vec3 vBitangent; 1350 #endif 1351#endif`,normal_vertex:`#ifndef FLAT_SHADED 1352 vNormal = normalize( transformedNormal ); 1353 #ifdef USE_TANGENT 1354 vTangent = normalize( transformedTangent ); 1355 vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); 1356 #endif 1357#endif`,normalmap_pars_fragment:`#ifdef USE_NORMALMAP 1358 uniform sampler2D normalMap; 1359 uniform vec2 normalScale; 1360#endif 1361#ifdef OBJECTSPACE_NORMALMAP 1362 uniform mat3 normalMatrix; 1363#endif 1364#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) ) 1365 vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) { 1366 vec3 q0 = dFdx( eye_pos.xyz ); 1367 vec3 q1 = dFdy( eye_pos.xyz ); 1368 vec2 st0 = dFdx( vUv.st ); 1369 vec2 st1 = dFdy( vUv.st ); 1370 vec3 N = surf_norm; 1371 vec3 q1perp = cross( q1, N ); 1372 vec3 q0perp = cross( N, q0 ); 1373 vec3 T = q1perp * st0.x + q0perp * st1.x; 1374 vec3 B = q1perp * st0.y + q0perp * st1.y; 1375 float det = max( dot( T, T ), dot( B, B ) ); 1376 float scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det ); 1377 return normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z ); 1378 } 1379#endif`,clearcoat_normal_fragment_begin:`#ifdef USE_CLEARCOAT 1380 vec3 clearcoatNormal = geometryNormal; 1381#endif`,clearcoat_normal_fragment_maps:`#ifdef USE_CLEARCOAT_NORMALMAP 1382 vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0; 1383 clearcoatMapN.xy *= clearcoatNormalScale; 1384 #ifdef USE_TANGENT 1385 clearcoatNormal = normalize( vTBN * clearcoatMapN ); 1386 #else 1387 clearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection ); 1388 #endif 1389#endif`,clearcoat_pars_fragment:`#ifdef USE_CLEARCOATMAP 1390 uniform sampler2D clearcoatMap; 1391#endif 1392#ifdef USE_CLEARCOAT_ROUGHNESSMAP 1393 uniform sampler2D clearcoatRoughnessMap; 1394#endif 1395#ifdef USE_CLEARCOAT_NORMALMAP 1396 uniform sampler2D clearcoatNormalMap; 1397 uniform vec2 clearcoatNormalScale; 1398#endif`,iridescence_pars_fragment:`#ifdef USE_IRIDESCENCEMAP 1399 uniform sampler2D iridescenceMap; 1400#endif 1401#ifdef USE_IRIDESCENCE_THICKNESSMAP 1402 uniform sampler2D iridescenceThicknessMap; 1403#endif`,output_fragment:`#ifdef OPAQUE 1404diffuseColor.a = 1.0; 1405#endif 1406#ifdef USE_TRANSMISSION 1407diffuseColor.a *= material.transmissionAlpha + 0.1; 1408#endif 1409gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,packing:`vec3 packNormalToRGB( const in vec3 normal ) { 1410 return normalize( normal ) * 0.5 + 0.5; 1411} 1412vec3 unpackRGBToNormal( const in vec3 rgb ) { 1413 return 2.0 * rgb.xyz - 1.0; 1414} 1415const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.; 1416const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. ); 1417const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. ); 1418const float ShiftRight8 = 1. / 256.; 1419vec4 packDepthToRGBA( const in float v ) { 1420 vec4 r = vec4( fract( v * PackFactors ), v ); 1421 r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale; 1422} 1423float unpackRGBAToDepth( const in vec4 v ) { 1424 return dot( v, UnpackFactors ); 1425} 1426vec2 packDepthToRG( in highp float v ) { 1427 return packDepthToRGBA( v ).yx; 1428} 1429float unpackRGToDepth( const in highp vec2 v ) { 1430 return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) ); 1431} 1432vec4 pack2HalfToRGBA( vec2 v ) { 1433 vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); 1434 return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); 1435} 1436vec2 unpackRGBATo2Half( vec4 v ) { 1437 return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); 1438} 1439float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { 1440 return ( viewZ + near ) / ( near - far ); 1441} 1442float orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) { 1443 return linearClipZ * ( near - far ) - near; 1444} 1445float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { 1446 return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); 1447} 1448float perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) { 1449 return ( near * far ) / ( ( far - near ) * invClipZ - far ); 1450}`,premultiplied_alpha_fragment:`#ifdef PREMULTIPLIED_ALPHA 1451 gl_FragColor.rgb *= gl_FragColor.a; 1452#endif`,project_vertex:`vec4 mvPosition = vec4( transformed, 1.0 ); 1453#ifdef USE_INSTANCING 1454 mvPosition = instanceMatrix * mvPosition; 1455#endif 1456mvPosition = modelViewMatrix * mvPosition; 1457gl_Position = projectionMatrix * mvPosition;`,dithering_fragment:`#ifdef DITHERING 1458 gl_FragColor.rgb = dithering( gl_FragColor.rgb ); 1459#endif`,dithering_pars_fragment:`#ifdef DITHERING 1460 vec3 dithering( vec3 color ) { 1461 float grid_position = rand( gl_FragCoord.xy ); 1462 vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); 1463 dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); 1464 return color + dither_shift_RGB; 1465 } 1466#endif`,roughnessmap_fragment:`float roughnessFactor = roughness; 1467#ifdef USE_ROUGHNESSMAP 1468 vec4 texelRoughness = texture2D( roughnessMap, vUv ); 1469 roughnessFactor *= texelRoughness.g; 1470#endif`,roughnessmap_pars_fragment:`#ifdef USE_ROUGHNESSMAP 1471 uniform sampler2D roughnessMap;
1472#endif`,shadowmap_pars_fragment:`#if NUM_SPOT_LIGHT_COORDS > 0 1473 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; 1474#endif 1475#if NUM_SPOT_LIGHT_MAPS > 0 1476 uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; 1477#endif 1478#ifdef USE_SHADOWMAP 1479 #if NUM_DIR_LIGHT_SHADOWS > 0 1480 uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; 1481 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 1482 struct DirectionalLightShadow { 1483 float shadowBias; 1484 float shadowNormalBias; 1485 float shadowRadius; 1486 vec2 shadowMapSize; 1487 }; 1488 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 1489 #endif 1490 #if NUM_SPOT_LIGHT_SHADOWS > 0 1491 uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; 1492 struct SpotLightShadow { 1493 float shadowBias; 1494 float shadowNormalBias; 1495 float shadowRadius; 1496 vec2 shadowMapSize; 1497 }; 1498 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 1499 #endif 1500 #if NUM_POINT_LIGHT_SHADOWS > 0 1501 uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; 1502 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 1503 struct PointLightShadow { 1504 float shadowBias; 1505 float shadowNormalBias; 1506 float shadowRadius; 1507 vec2 shadowMapSize; 1508 float shadowCameraNear; 1509 float shadowCameraFar; 1510 }; 1511 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 1512 #endif 1513 float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { 1514 return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); 1515 } 1516 vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { 1517 return unpackRGBATo2Half( texture2D( shadow, uv ) ); 1518 } 1519 float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ 1520 float occlusion = 1.0; 1521 vec2 distribution = texture2DDistribution( shadow, uv ); 1522 float hard_shadow = step( compare , distribution.x ); 1523 if (hard_shadow != 1.0 ) { 1524 float distance = compare - distribution.x ; 1525 float variance = max( 0.00000, distribution.y * distribution.y ); 1526 float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); 1527 } 1528 return occlusion; 1529 } 1530 float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) { 1531 float shadow = 1.0; 1532 shadowCoord.xyz /= shadowCoord.w; 1533 shadowCoord.z += shadowBias; 1534 bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; 1535 bool frustumTest = inFrustum && shadowCoord.z <= 1.0; 1536 if ( frustumTest ) { 1537 #if defined( SHADOWMAP_TYPE_PCF ) 1538 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 1539 float dx0 = - texelSize.x * shadowRadius; 1540 float dy0 = - texelSize.y * shadowRadius; 1541 float dx1 = + texelSize.x * shadowRadius; 1542 float dy1 = + texelSize.y * shadowRadius; 1543 float dx2 = dx0 / 2.0; 1544 float dy2 = dy0 / 2.0; 1545 float dx3 = dx1 / 2.0; 1546 float dy3 = dy1 / 2.0; 1547 shadow = ( 1548 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) + 1549 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) + 1550 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) + 1551 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) + 1552 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) + 1553 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) + 1554 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) + 1555 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) + 1556 texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) + 1557 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) + 1558 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) + 1559 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) + 1560 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) + 1561 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) + 1562 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) + 1563 texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) + 1564 texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ) 1565 ) * ( 1.0 / 17.0 ); 1566 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 1567 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 1568 float dx = texelSize.x; 1569 float dy = texelSize.y; 1570 vec2 uv = shadowCoord.xy;
1571 vec2 f = fract( uv * shadowMapSize + 0.5 ); 1572 uv -= f * texelSize; 1573 shadow = ( 1574 texture2DCompare( shadowMap, uv, shadowCoord.z ) + 1575 texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + 1576 texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + 1577 texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + 1578 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), 1579 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), 1580 f.x ) + 1581 mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), 1582 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), 1583 f.x ) + 1584 mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), 1585 texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), 1586 f.y ) + 1587 mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), 1588 texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), 1589 f.y ) + 1590 mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), 1591 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), 1592 f.x ), 1593 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), 1594 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), 1595 f.x ), 1596 f.y ) 1597 ) * ( 1.0 / 9.0 ); 1598 #elif defined( SHADOWMAP_TYPE_VSM ) 1599 shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); 1600 #else 1601 shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); 1602 #endif 1603 } 1604 return shadow; 1605 } 1606 vec2 cubeToUV( vec3 v, float texelSizeY ) { 1607 vec3 absV = abs( v ); 1608 float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); 1609 absV *= scaleToCube; 1610 v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); 1611 vec2 planar = v.xy; 1612 float almostATexel = 1.5 * texelSizeY; 1613 float almostOne = 1.0 - almostATexel; 1614 if ( absV.z >= almostOne ) { 1615 if ( v.z > 0.0 ) 1616 planar.x = 4.0 - v.x; 1617 } else if ( absV.x >= almostOne ) { 1618 float signX = sign( v.x ); 1619 planar.x = v.z * signX + 2.0 * signX; 1620 } else if ( absV.y >= almostOne ) { 1621 float signY = sign( v.y ); 1622 planar.x = v.x + 2.0 * signY + 2.0; 1623 planar.y = v.z * signY - 2.0; 1624 } 1625 return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); 1626 } 1627 float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { 1628 vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); 1629 vec3 lightToPosition = shadowCoord.xyz; 1630 float dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias; 1631 vec3 bd3D = normalize( lightToPosition ); 1632 #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM ) 1633 vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y; 1634 return ( 1635 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) + 1636 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) + 1637 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) + 1638 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) + 1639 texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) + 1640 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) + 1641 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) + 1642 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) + 1643 texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp ) 1644 ) * ( 1.0 / 9.0 ); 1645 #else 1646 return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ); 1647 #endif 1648 } 1649#endif`,shadowmap_pars_vertex:`#if NUM_SPOT_LIGHT_COORDS > 0 1650 uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; 1651 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; 1652#endif 1653#ifdef USE_SHADOWMAP 1654 #if NUM_DIR_LIGHT_SHADOWS > 0 1655 uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; 1656 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 1657 struct DirectionalLightShadow { 1658 float shadowBias; 1659 float shadowNormalBias; 1660 float shadowRadius; 1661 vec2 shadowMapSize; 1662 }; 1663 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 1664 #endif
1665 #if NUM_SPOT_LIGHT_SHADOWS > 0 1666 struct SpotLightShadow { 1667 float shadowBias; 1668 float shadowNormalBias; 1669 float shadowRadius; 1670 vec2 shadowMapSize; 1671 }; 1672 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 1673 #endif 1674 #if NUM_POINT_LIGHT_SHADOWS > 0 1675 uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; 1676 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 1677 struct PointLightShadow { 1678 float shadowBias; 1679 float shadowNormalBias; 1680 float shadowRadius; 1681 vec2 shadowMapSize; 1682 float shadowCameraNear; 1683 float shadowCameraFar; 1684 }; 1685 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 1686 #endif 1687#endif`,shadowmap_vertex:`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) 1688 vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); 1689 vec4 shadowWorldPosition; 1690#endif 1691#if defined( USE_SHADOWMAP ) 1692 #if NUM_DIR_LIGHT_SHADOWS > 0 1693 #pragma unroll_loop_start 1694 for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { 1695 shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); 1696 vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; 1697 } 1698 #pragma unroll_loop_end 1699 #endif 1700 #if NUM_POINT_LIGHT_SHADOWS > 0 1701 #pragma unroll_loop_start 1702 for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { 1703 shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); 1704 vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; 1705 } 1706 #pragma unroll_loop_end 1707 #endif 1708#endif 1709#if NUM_SPOT_LIGHT_COORDS > 0 1710 #pragma unroll_loop_start 1711 for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { 1712 shadowWorldPosition = worldPosition; 1713 #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) 1714 shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; 1715 #endif 1716 vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; 1717 } 1718 #pragma unroll_loop_end 1719#endif`,shadowmask_pars_fragment:`float getShadowMask() { 1720 float shadow = 1.0; 1721 #ifdef USE_SHADOWMAP 1722 #if NUM_DIR_LIGHT_SHADOWS > 0 1723 DirectionalLightShadow directionalLight; 1724 #pragma unroll_loop_start 1725 for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { 1726 directionalLight = directionalLightShadows[ i ]; 1727 shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; 1728 } 1729 #pragma unroll_loop_end 1730 #endif 1731 #if NUM_SPOT_LIGHT_SHADOWS > 0 1732 SpotLightShadow spotLight; 1733 #pragma unroll_loop_start 1734 for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { 1735 spotLight = spotLightShadows[ i ]; 1736 shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; 1737 } 1738 #pragma unroll_loop_end 1739 #endif 1740 #if NUM_POINT_LIGHT_SHADOWS > 0 1741 PointLightShadow pointLight; 1742 #pragma unroll_loop_start 1743 for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { 1744 pointLight = pointLightShadows[ i ]; 1745 shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; 1746 } 1747 #pragma unroll_loop_end 1748 #endif 1749 #endif 1750 return shadow; 1751}`,skinbase_vertex:`#ifdef USE_SKINNING 1752 mat4 boneMatX = getBoneMatrix( skinIndex.x ); 1753 mat4 boneMatY = getBoneMatrix( skinIndex.y ); 1754 mat4 boneMatZ = getBoneMatrix( skinIndex.z ); 1755 mat4 boneMatW = getBoneMatrix( skinIndex.w ); 1756#endif`,skinning_pars_vertex:`#ifdef USE_SKINNING 1757 uniform mat4 bindMatrix; 1758 uniform mat4 bindMatrixInverse; 1759 uniform highp sampler2D boneTexture; 1760 uniform int boneTextureSize; 1761 mat4 getBoneMatrix( const in float i ) { 1762 float j = i * 4.0; 1763 float x = mod( j, float( boneTextureSize ) ); 1764 float y = floor( j / float( boneTextureSize ) ); 1765 float dx = 1.0 / float( boneTextureSize ); 1766 float dy = 1.0 / float( boneTextureSize ); 1767 y = dy * ( y + 0.5 ); 1768 vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) ); 1769 vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) ); 1770 vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) ); 1771 vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) ); 1772 mat4 bone = mat4( v1, v2, v3, v4 ); 1773 return bone; 1774 } 1775#endif`,skinning_vertex:`#ifdef USE_SKINNING 1776 vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); 1777 vec4 skinned = vec4( 0.0 ); 1778 skinned += boneMatX * skinVertex * skinWeight.x; 1779 skinned += boneMatY * skinVertex * skinWeight.y; 1780 skinned += boneMatZ * skinVertex * skinWeight.z; 1781 skinned += boneMatW * skinVertex * skinWeight.w; 1782 transformed = ( bindMatrixInverse * skinned ).xyz; 1783#endif`,skinnormal_vertex:`#ifdef USE_SKINNING 1784 mat4 skinMatrix = mat4( 0.0 ); 1785 skinMatrix += skinWeight.x * boneMatX; 1786 skinMatrix += skinWeight.y * boneMatY; 1787 skinMatrix += skinWeight.z * boneMatZ; 1788 skinMatrix += skinWeight.w * boneMatW; 1789 skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; 1790 objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; 1791 #ifdef USE_TANGENT 1792 objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; 1793 #endif 1794#endif`,specularmap_fragment:`float specularStrength; 1795#ifdef USE_SPECULARMAP 1796 vec4 texelSpecular = texture2D( specularMap, vUv ); 1797 specularStrength = texelSpecular.r; 1798#else 1799 specularStrength = 1.0; 1800#endif`,specularmap_pars_fragment:`#ifdef USE_SPECULARMAP 1801 uniform sampler2D specularMap; 1802#endif`,tonemapping_fragment:`#if defined( TONE_MAPPING ) 1803 gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); 1804#endif`,tonemapping_pars_fragment:`#ifndef saturate 1805#define saturate( a ) clamp( a, 0.0, 1.0 ) 1806#endif 1807uniform float toneMappingExposure; 1808vec3 LinearToneMapping( vec3 color ) { 1809 return toneMappingExposure * color; 1810} 1811vec3 ReinhardToneMapping( vec3 color ) { 1812 color *= toneMappingExposure; 1813 return saturate( color / ( vec3( 1.0 ) + color ) ); 1814} 1815vec3 OptimizedCineonToneMapping( vec3 color ) { 1816 color *= toneMappingExposure; 1817 color = max( vec3( 0.0 ), color - 0.004 ); 1818 return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); 1819} 1820vec3 RRTAndODTFit( vec3 v ) { 1821 vec3 a = v * ( v + 0.0245786 ) - 0.000090537; 1822 vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; 1823 return a / b; 1824} 1825vec3 ACESFilmicToneMapping( vec3 color ) { 1826 const mat3 ACESInputMat = mat3( 1827 vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), 1828 vec3( 0.04823, 0.01566, 0.83777 ) 1829 ); 1830 const mat3 ACESOutputMat = mat3( 1831 vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), 1832 vec3( -0.07367, -0.00605, 1.07602 ) 1833 ); 1834 color *= toneMappingExposure / 0.6; 1835 color = ACESInputMat * color; 1836 color = RRTAndODTFit( color ); 1837 color = ACESOutputMat * color; 1838 return saturate( color ); 1839} 1840vec3 CustomToneMapping( vec3 color ) { return color; }`,transmission_fragment:`#ifdef USE_TRANSMISSION 1841 material.transmission = transmission; 1842 material.transmissionAlpha = 1.0; 1843 material.thickness = thickness; 1844 material.attenuationDistance = attenuationDistance; 1845 material.attenuationColor = attenuationColor; 1846 #ifdef USE_TRANSMISSIONMAP 1847 material.transmission *= texture2D( transmissionMap, vUv ).r; 1848 #endif 1849 #ifdef USE_THICKNESSMAP 1850 material.thickness *= texture2D( thicknessMap, vUv ).g;
1851 #endif 1852 vec3 pos = vWorldPosition; 1853 vec3 v = normalize( cameraPosition - pos ); 1854 vec3 n = inverseTransformDirection( normal, viewMatrix ); 1855 vec4 transmission = getIBLVolumeRefraction( 1856 n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, 1857 pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness, 1858 material.attenuationColor, material.attenuationDistance ); 1859 material.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission ); 1860 totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission ); 1861#endif`,transmission_pars_fragment:`#ifdef USE_TRANSMISSION 1862 uniform float transmission; 1863 uniform float thickness; 1864 uniform float attenuationDistance; 1865 uniform vec3 attenuationColor; 1866 #ifdef USE_TRANSMISSIONMAP 1867 uniform sampler2D transmissionMap; 1868 #endif 1869 #ifdef USE_THICKNESSMAP 1870 uniform sampler2D thicknessMap; 1871 #endif 1872 uniform vec2 transmissionSamplerSize; 1873 uniform sampler2D transmissionSamplerMap; 1874 uniform mat4 modelMatrix; 1875 uniform mat4 projectionMatrix; 1876 varying vec3 vWorldPosition; 1877 vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { 1878 vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); 1879 vec3 modelScale; 1880 modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); 1881 modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); 1882 modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); 1883 return normalize( refractionVector ) * thickness * modelScale; 1884 } 1885 float applyIorToRoughness( const in float roughness, const in float ior ) { 1886 return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); 1887 } 1888 vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { 1889 float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); 1890 #ifdef texture2DLodEXT 1891 return texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod ); 1892 #else 1893 return texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod ); 1894 #endif 1895 } 1896 vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { 1897 if ( isinf( attenuationDistance ) ) { 1898 return radiance; 1899 } else { 1900 vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; 1901 vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance * radiance; 1902 } 1903 } 1904 vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, 1905 const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, 1906 const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness, 1907 const in vec3 attenuationColor, const in float attenuationDistance ) { 1908 vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); 1909 vec3 refractedRayExit = position + transmissionRay; 1910 vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); 1911 vec2 refractionCoords = ndcPos.xy / ndcPos.w; 1912 refractionCoords += 1.0; 1913 refractionCoords /= 2.0; 1914 vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); 1915 vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance ); 1916 vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); 1917 return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a ); 1918 } 1919#endif`,uv_pars_fragment:`#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) ) 1920 varying vec2 vUv; 1921#endif`,uv_pars_vertex:`#ifdef USE_UV 1922 #ifdef UVS_VERTEX_ONLY 1923 vec2 vUv; 1924 #else 1925 varying vec2 vUv; 1926 #endif 1927 uniform mat3 uvTransform; 1928#endif`,uv_vertex:`#ifdef USE_UV 1929 vUv = ( uvTransform * vec3( uv, 1 ) ).xy; 1930#endif`,uv2_pars_fragment:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1931 varying vec2 vUv2; 1932#endif`,uv2_pars_vertex:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1933 attribute vec2 uv2; 1934 varying vec2 vUv2; 1935 uniform mat3 uv2Transform; 1936#endif`,uv2_vertex:`#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP ) 1937 vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy; 1938#endif`,worldpos_vertex:`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_L
1938IGHT_COORDS > 0 1939 vec4 worldPosition = vec4( transformed, 1.0 ); 1940 #ifdef USE_INSTANCING 1941 worldPosition = instanceMatrix * worldPosition; 1942 #endif 1943 worldPosition = modelMatrix * worldPosition; 1944#endif`,background_vert:`varying vec2 vUv; 1945uniform mat3 uvTransform; 1946void main() { 1947 vUv = ( uvTransform * vec3( uv, 1 ) ).xy; 1948 gl_Position = vec4( position.xy, 1.0, 1.0 ); 1949}`,background_frag:`uniform sampler2D t2D; 1950uniform float backgroundIntensity; 1951varying vec2 vUv; 1952void main() { 1953 vec4 texColor = texture2D( t2D, vUv ); 1954 #ifdef DECODE_VIDEO_TEXTURE 1955 texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w ); 1956 #endif 1957 texColor.rgb *= backgroundIntensity; 1958 gl_FragColor = texColor; 1959 #include <tonemapping_fragment> 1960 #include <encodings_fragment> 1961}`,backgroundCube_vert:`varying vec3 vWorldDirection; 1962#include <common> 1963void main() { 1964 vWorldDirection = transformDirection( position, modelMatrix ); 1965 #include <begin_vertex> 1966 #include <project_vertex> 1967 gl_Position.z = gl_Position.w; 1968}`,backgroundCube_frag:`#ifdef ENVMAP_TYPE_CUBE 1969 uniform samplerCube envMap; 1970#elif defined( ENVMAP_TYPE_CUBE_UV ) 1971 uniform sampler2D envMap; 1972#endif 1973uniform float flipEnvMap; 1974uniform float backgroundBlurriness; 1975uniform float backgroundIntensity; 1976varying vec3 vWorldDirection; 1977#include <cube_uv_reflection_fragment> 1978void main() { 1979 #ifdef ENVMAP_TYPE_CUBE 1980 vec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) ); 1981 #elif defined( ENVMAP_TYPE_CUBE_UV ) 1982 vec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness ); 1983 #else 1984 vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); 1985 #endif 1986 texColor.rgb *= backgroundIntensity; 1987 gl_FragColor = texColor; 1988 #include <tonemapping_fragment> 1989 #include <encodings_fragment> 1990}`,cube_vert:`varying vec3 vWorldDirection; 1991#include <common> 1992void main() { 1993 vWorldDirection = transformDirection( position, modelMatrix ); 1994 #include <begin_vertex> 1995 #include <project_vertex> 1996 gl_Position.z = gl_Position.w; 1997}`,cube_frag:`uniform samplerCube tCube; 1998uniform float tFlip; 1999uniform float opacity; 2000varying vec3 vWorldDirection; 2001void main() { 2002 vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); 2003 gl_FragColor = texColor; 2004 gl_FragColor.a *= opacity; 2005 #include <tonemapping_fragment> 2006 #include <encodings_fragment> 2007}`,depth_vert:`#include <common> 2008#include <uv_pars_vertex> 2009#include <displacementmap_pars_vertex> 2010#include <morphtarget_pars_vertex> 2011#include <skinning_pars_vertex> 2012#include <logdepthbuf_pars_vertex> 2013#include <clipping_planes_pars_vertex> 2014varying vec2 vHighPrecisionZW; 2015void main() { 2016 #include <uv_vertex> 2017 #include <skinbase_vertex> 2018 #ifdef USE_DISPLACEMENTMAP 2019 #include <beginnormal_vertex> 2020 #include <morphnormal_vertex> 2021 #include <skinnormal_vertex> 2022 #endif 2023 #include <begin_vertex> 2024 #include <morphtarget_vertex> 2025 #include <skinning_vertex> 2026 #include <displacementmap_vertex> 2027 #include <project_vertex> 2028 #include <logdepthbuf_vertex> 2029 #include <clipping_planes_vertex> 2030 vHighPrecisionZW = gl_Position.zw; 2031}`,depth_frag:`#if DEPTH_PACKING == 3200 2032 uniform float opacity; 2033#endif 2034#include <common> 2035#include <packing> 2036#include <uv_pars_fragment> 2037#include <map_pars_fragment> 2038#include <alphamap_pars_fragment> 2039#include <alphatest_pars_fragment> 2040#include <logdepthbuf_pars_fragment> 2041#include <clipping_planes_pars_fragment> 2042varying vec2 vHighPrecisionZW; 2043void main() { 2044 #include <clipping_planes_fragment> 2045 vec4 diffuseColor = vec4( 1.0 ); 2046 #if DEPTH_PACKING == 3200 2047 diffuseColor.a = opacity; 2048 #endif 2049 #include <map_fragment> 2050 #include <alphamap_fragment> 2051 #include <alphatest_fragment> 2052 #include <logdepthbuf_fragment> 2053 float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; 2054 #if DEPTH_PACKING == 3200 2055 gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); 2056 #elif DEPTH_PACKING == 3201 2057 gl_FragColor = packDepthToRGBA( fragCoordZ ); 2058 #endif 2059}`,distanceRGBA_vert:`#define DISTANCE 2060varying vec3 vWorldPosition; 2061#include <common> 2062#include <uv_pars_vertex> 2063#include <displacementmap_pars_vertex> 2064#include <morphtarget_pars_vertex> 2065#include <skinning_pars_vertex> 2066#include <clipping_planes_pars_vertex> 2067void main() { 2068 #include <uv_vertex> 2069 #include <skinbase_vertex> 2070 #ifdef USE_DISPLACEMENTMAP 2071 #include <beginnormal_vertex> 2072 #include <morphnormal_vertex> 2073 #include <skinnormal_vertex> 2074 #endif 2075 #include <begin_vertex> 2076 #include <morphtarget_vertex> 2077 #include <skinning_vertex> 2078 #include <displacementmap_vertex> 2079 #include <project_vertex> 2080 #include <worldpos_vertex> 2081 #include <clipping_planes_vertex> 2082 vWorldPosition = worldPosition.xyz; 2083}`,distanceRGBA_frag:`#define DISTANCE 2084uniform vec3 referencePosition; 2085uniform float nearDistance; 2086uniform float farDistance; 2087varying vec3 vWorldPosition; 2088#include <common> 2089#include <packing> 2090#include <uv_pars_fragment> 2091#include <map_pars_fragment> 2092#include <alphamap_pars_fragment> 2093#include <alphatest_pars_fragment> 2094#include <clipping_planes_pars_fragment> 2095void main () { 2096 #include <clipping_planes_fragment> 2097 vec4 diffuseColor = vec4( 1.0 ); 2098 #include <map_fragment> 2099 #include <alphamap_fragment> 2100 #include <alphatest_fragment> 2101 float dist = length( vWorldPosition - referencePosition ); 2102 dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); 2103 dist = saturate( dist ); 2104 gl_FragColor = packDepthToRGBA( dist ); 2105}`,equirect_vert:`varying vec3 vWorldDirection; 2106#include <common> 2107void main() { 2108 vWorldDirection = transformDirection( position, modelMatrix ); 2109 #include <begin_vertex> 2110 #include <project_vertex> 2111}`,equirect_frag:`uniform sampler2D tEquirect; 2112varying vec3 vWorldDirection; 2113#include <common> 2114void main() { 2115 vec3 direction = normalize( vWorldDirection ); 2116 vec2 sampleUV = equirectUv( direction ); 2117 gl_FragColor = texture2D( tEquirect, sampleUV ); 2118 #include <tonemapping_fragment> 2119 #include <encodings_fragment> 2120}`,linedashed_vert:`uniform float scale; 2121attribute float lineDistance; 2122varying float vLineDistance; 2123#include <common> 2124#include <color_pars_vertex> 2125#include <fog_pars_vertex> 2126#include <morphtarget_pars_vertex> 2127#include <logdepthbuf_pars_vertex> 2128#include <clipping_planes_pars_vertex> 2129void main() { 2130 vLineDistance = scale * lineDistance; 2131 #include <color_vertex> 2132 #include <morphcolor_vertex> 2133 #include <begin_vertex> 2134 #include <morphtarget_vertex> 2135 #include <project_vertex> 2136 #include <logdepthbuf_vertex> 2137 #include <clipping_planes_vertex> 2138 #include <fog_vertex> 2139}`,linedashed_frag:`uniform vec3 diffuse; 2140uniform float opacity; 2141uniform float dashSize; 2142uniform float totalSize; 2143varying float vLineDistance; 2144#include <common> 2145#include <color_pars_fragment> 2146#include <fog_pars_fragment> 2147#include <logdepthbuf_pars_fragment> 2148#include <clipping_planes_pars_fragment> 2149void main() { 2150 #include <clipping_planes_fragment> 2151 if ( mod( vLineDistance, totalSize ) > dashSize ) { 2152 discard; 2153 } 2154 vec3 outgoingLight = vec3( 0.0 ); 2155 vec4 diffuseColor = vec4( diffuse, opacity ); 2156 #include <logdepthbuf_fragment> 2157 #include <color_fragment> 2158 outgoingLight = diffuseColor.rgb; 2159 #include <output_fragment> 2160 #include <tonemapping_fragment> 2161 #include <encodings_fragment> 2162 #include <fog_fragment> 2163 #include <premultiplied_alpha_fragment> 2164}`,meshbasic_vert:`#include <common> 2165#include <uv_pars_vertex> 2166#include <uv2_pars_vertex> 2167#include <envmap_pars_vertex> 2168#include <color_pars_vertex> 2169#include <fog_pars_vertex> 2170#include <morphtarget_pars_vertex> 2171#include <skinning_pars_vertex> 2172#include <logdepthbuf_pars_vertex> 2173#include <clipping_planes_pars_vertex> 2174void main() { 2175 #include <uv_vertex> 2176 #include <uv2_vertex> 2177 #include <color_vertex> 2178 #include <morphcolor_vertex> 2179 #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) 2180 #include <beginnormal_vertex> 2181 #include <morphnormal_vertex> 2182 #include <skinbase_vertex> 2183 #include <skinnormal_vertex> 2184 #include <defaultnormal_vertex> 2185 #endif 2186 #include <begin_vertex> 2187 #include <morphtarget_vertex> 2188 #include <skinning_vertex> 2189 #include <project_vertex> 2190 #include <logdepthbuf_vertex> 2191 #include <clipping_planes_vertex> 2192 #include <worldpos_vertex> 2193 #include <envmap_vertex> 2194 #include <fog_vertex> 2195}`,meshbasic_frag:`uniform vec3 diffuse; 2196uniform float opacity; 2197#ifndef FLAT_SHADED 2198 varying vec3 vNormal; 2199#endif 2200#include <common> 2201#include <dithering_pars_fragment> 2202#include <color_pars_fragment> 2203#include <uv_pars_fragment> 2204#include <uv2_pars_fragment> 2205#include <map_pars_fragment> 2206#include <alphamap_pars_fragment> 2207#include <alphatest_pars_fragment> 2208#include <aomap_pars_fragment> 2209#include <lightmap_pars_fragment> 2210#include <envmap_common_pars_fragment> 2211#include <envmap_pars_fragment> 2212#include <fog_pars_fragment> 2213#include <specularmap_pars_fragment> 2214#include <logdepthbuf_pars_fragment> 2215#include <clipping_planes_pars_fragment> 2216void main() { 2217 #include <clipping_planes_fragment> 2218 vec4 diffuseColor = vec4( diffuse, opacity ); 2219 #include <logdepthbuf_fragment> 2220 #include <map_fragment> 2221 #include <color_fragment> 2222 #include <alphamap_fragment> 2223 #include <alphatest_fragment> 2224 #include <specularmap_fragment> 2225 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2226 #ifdef USE_LIGHTMAP 2227 vec4 lightMapTexel = texture2D( lightMap, vUv2 ); 2228 reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; 2229 #else 2230 reflectedLight.indirectDiffuse += vec3( 1.0 ); 2231 #endif 2232 #include <aomap_fragment> 2233 reflectedLight.indirectDiffuse *= diffuseColor.rgb; 2234 vec3 outgoingLight = reflectedLight.indirectDiffuse; 2235 #include <envmap_fragment> 2236 #include <output_fragment> 2237 #include <tonemapping_fragment> 2238 #include <encodings_fragment> 2239 #include <fog_fragment> 2240 #include <premultiplied_alpha_fragment> 2241 #include <dithering_fragment> 2242}`,meshlambert_vert:`#define LAMBERT 2243varying vec3 vViewPosition; 2244#include <common> 2245#include <uv_pars_vertex> 2246#include <uv2_pars_vertex> 2247#include <displacementmap_pars_vertex> 2248#include <envmap_pars_vertex> 2249#include <color_pars_vertex> 2250#include <fog_pars_vertex> 2251#include <normal_pars_vertex> 2252#include <morphtarget_pars_vertex> 2253#include <skinning_pars_vertex> 2254#include <shadowmap_pars_vertex> 2255#include <logdepthbuf_pars_vertex> 2256#include <clipping_planes_pars_vertex> 2257void main() { 2258 #include <uv_vertex> 2259 #include <uv2_vertex> 2260 #include <color_vertex> 2261 #include <morphcolor_vertex> 2262 #include <beginnormal_vertex> 2263 #include <morphnormal_vertex> 2264 #include <skinbase_vertex> 2265 #include <skinnormal_vertex> 2266 #include <defaultnormal_vertex> 2267 #include <normal_vertex> 2268 #include <begin_vertex> 2269 #include <morphtarget_vertex> 2270 #include <skinning_vertex> 2271 #include <displacementmap_vertex> 2272 #include <project_vertex> 2273 #include <logdepthbuf_vertex> 2274 #include <clipping_planes_vertex> 2275 vViewPosition = - mvPosition.xyz; 2276 #include <worldpos_vertex> 2277 #include <envmap_vertex> 2278 #include <shadowmap_vertex> 2279 #include <fog_vertex> 2280}`,meshlambert_frag:`#define LAMBERT 2281uniform vec3 diffuse; 2282uniform vec3 emissive; 2283uniform float opacity; 2284#include <common> 2285#include <packing> 2286#include <dithering_pars_fragment> 2287#include <color_pars_fragment> 2288#include <uv_pars_fragment> 2289#include <uv2_pars_fragment> 2290#include <map_pars_fragment> 2291#include <alphamap_pars_fragment> 2292#include <alphatest_pars_fragment> 2293#include <aomap_pars_fragment> 2294#include <lightmap_pars_fragment> 2295#include <emissivemap_pars_fragment> 2296#include <envmap_common_pars_fragment> 2297#include <envmap_pars_fragment> 2298#include <fog_pars_fragment> 2299#include <bsdfs> 2300#include <lights_pars_begin> 2301#include <normal_pars_fragment> 2302#include <lights_lambert_pars_fragment> 2303#include <shadowmap_pars_fragment> 2304#include <bumpmap_pars_fragment> 2305#include <normalmap_pars_fragment> 2306#include <specularmap_pars_fragment> 2307#include <logdepthbuf_pars_fragment> 2308#include <clipping_planes_pars_fragment> 2309void main() { 2310 #include <clipping_planes_fragment> 2311 vec4 diffuseColor = vec4( diffuse, opacity ); 2312 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2313 vec3 totalEmissiveRadiance = emissive; 2314 #include <logdepthbuf_fragment> 2315 #include <map_fragment> 2316 #include <color_fragment> 2317 #include <alphamap_fragment> 2318 #include <alphatest_fragment> 2319 #include <specularmap_fragment> 2320 #include <normal_fragment_begin> 2321 #include <normal_fragment_maps> 2322 #include <emissivemap_fragment> 2323 #include <lights_lambert_fragment> 2324 #include <lights_fragment_begin> 2325 #include <lights_fragment_maps> 2326 #include <lights_fragment_end> 2327 #include <aomap_fragment> 2328 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; 2329 #include <envmap_fragment> 2330 #include <output_fragment> 2331 #include <tonemapping_fragment> 2332 #include <encodings_fragment> 2333 #include <fog_fragment> 2334 #include <premultiplied_alpha_fragment> 2335 #include <dithering_fragment> 2336}`,meshmatcap_vert:`#define MATCAP 2337varying vec3 vViewPosition; 2338#include <common> 2339#include <uv_pars_vertex> 2340#include <color_pars_vertex> 2341#include <displacementmap_pars_vertex> 2342#include <fog_pars_vertex> 2343#include <normal_pars_vertex> 2344#include <morphtarget_pars_vertex> 2345#include <skinning_pars_vertex> 2346#include <logdepthbuf_pars_vertex> 2347#include <clipping_planes_pars_vertex> 2348void main() { 2349 #include <uv_vertex> 2350 #include <color_vertex> 2351 #include <morphcolor_vertex> 2352 #include <beginnormal_vertex> 2353 #include <morphnormal_vertex> 2354 #include <skinbase_vertex> 2355 #include <skinnormal_vertex> 2356 #include <defaultnormal_vertex> 2357 #include <normal_vertex> 2358 #include <begin_vertex> 2359 #include <morphtarget_vertex> 2360 #include <skinning_vertex> 2361 #include <displacementmap_vertex> 2362 #include <project_vertex> 2363 #include <logdepthbuf_vertex> 2364 #include <clipping_planes_vertex> 2365 #include <fog_vertex> 2366 vViewPosition = - mvPosition.xyz; 2367}`,meshmatcap_frag:`#define MATCAP 2368uniform vec3 diffuse; 2369uniform float opacity; 2370uniform sampler2D matcap; 2371varying vec3 vViewPosition; 2372#include <common> 2373#include <dithering_pars_fragment> 2374#include <color_pars_fragment> 2375#include <uv_pars_fragment> 2376#include <map_pars_fragment> 2377#include <alphamap_pars_fragment> 2378#include <alphatest_pars_fragment> 2379#include <fog_pars_fragment> 2380#include <normal_pars_fragment> 2381#include <bumpmap_pars_fragment> 2382#include <normalmap_pars_fragment> 2383#include <logdepthbuf_pars_fragment> 2384#include <clipping_planes_pars_fragment> 2385void main() { 2386 #include <clipping_planes_fragment> 2387 vec4 diffuseColor = vec4( diffuse, opacity ); 2388 #include <logdepthbuf_fragment> 2389 #include <map_fragment> 2390 #include <color_fragment> 2391 #include <alphamap_fragment> 2392 #include <alphatest_fragment> 2393 #include <normal_fragment_begin> 2394 #include <normal_fragment_maps> 2395 vec3 viewDir = normalize( vViewPosition ); 2396 vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); 2397 vec3 y = cross( viewDir, x ); 2398 vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; 2399 #ifdef USE_MATCAP
2400 vec4 matcapColor = texture2D( matcap, uv ); 2401 #else 2402 vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); 2403 #endif 2404 vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; 2405 #include <output_fragment> 2406 #include <tonemapping_fragment> 2407 #include <encodings_fragment> 2408 #include <fog_fragment> 2409 #include <premultiplied_alpha_fragment> 2410 #include <dithering_fragment> 2411}`,meshnormal_vert:`#define NORMAL 2412#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2413 varying vec3 vViewPosition; 2414#endif 2415#include <common> 2416#include <uv_pars_vertex> 2417#include <displacementmap_pars_vertex> 2418#include <normal_pars_vertex> 2419#include <morphtarget_pars_vertex> 2420#include <skinning_pars_vertex> 2421#include <logdepthbuf_pars_vertex> 2422#include <clipping_planes_pars_vertex> 2423void main() { 2424 #include <uv_vertex> 2425 #include <beginnormal_vertex> 2426 #include <morphnormal_vertex> 2427 #include <skinbase_vertex> 2428 #include <skinnormal_vertex> 2429 #include <defaultnormal_vertex> 2430 #include <normal_vertex> 2431 #include <begin_vertex> 2432 #include <morphtarget_vertex> 2433 #include <skinning_vertex> 2434 #include <displacementmap_vertex> 2435 #include <project_vertex> 2436 #include <logdepthbuf_vertex> 2437 #include <clipping_planes_vertex> 2438#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2439 vViewPosition = - mvPosition.xyz; 2440#endif 2441}`,meshnormal_frag:`#define NORMAL 2442uniform float opacity; 2443#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) 2444 varying vec3 vViewPosition; 2445#endif 2446#include <packing> 2447#include <uv_pars_fragment> 2448#include <normal_pars_fragment> 2449#include <bumpmap_pars_fragment> 2450#include <normalmap_pars_fragment> 2451#include <logdepthbuf_pars_fragment> 2452#include <clipping_planes_pars_fragment> 2453void main() { 2454 #include <clipping_planes_fragment> 2455 #include <logdepthbuf_fragment> 2456 #include <normal_fragment_begin> 2457 #include <normal_fragment_maps> 2458 gl_FragColor = vec4( packNormalToRGB( normal ), opacity ); 2459 #ifdef OPAQUE 2460 gl_FragColor.a = 1.0; 2461 #endif 2462}`,meshphong_vert:`#define PHONG 2463varying vec3 vViewPosition; 2464#include <common> 2465#include <uv_pars_vertex> 2466#include <uv2_pars_vertex> 2467#include <displacementmap_pars_vertex> 2468#include <envmap_pars_vertex> 2469#include <color_pars_vertex> 2470#include <fog_pars_vertex> 2471#include <normal_pars_vertex> 2472#include <morphtarget_pars_vertex> 2473#include <skinning_pars_vertex> 2474#include <shadowmap_pars_vertex> 2475#include <logdepthbuf_pars_vertex> 2476#include <clipping_planes_pars_vertex> 2477void main() { 2478 #include <uv_vertex> 2479 #include <uv2_vertex> 2480 #include <color_vertex> 2481 #include <morphcolor_vertex> 2482 #include <beginnormal_vertex> 2483 #include <morphnormal_vertex> 2484 #include <skinbase_vertex> 2485 #include <skinnormal_vertex> 2486 #include <defaultnormal_vertex> 2487 #include <normal_vertex> 2488 #include <begin_vertex> 2489 #include <morphtarget_vertex> 2490 #include <skinning_vertex> 2491 #include <displacementmap_vertex> 2492 #include <project_vertex> 2493 #include <logdepthbuf_vertex> 2494 #include <clipping_planes_vertex> 2495 vViewPosition = - mvPosition.xyz; 2496 #include <worldpos_vertex> 2497 #include <envmap_vertex> 2498 #include <shadowmap_vertex> 2499 #include <fog_vertex> 2500}`,meshphong_frag:`#define PHONG 2501uniform vec3 diffuse; 2502uniform vec3 emissive; 2503uniform vec3 specular; 2504uniform float shininess; 2505uniform float opacity; 2506#include <common> 2507#include <packing> 2508#include <dithering_pars_fragment> 2509#include <color_pars_fragment> 2510#include <uv_pars_fragment> 2511#include <uv2_pars_fragment> 2512#include <map_pars_fragment> 2513#include <alphamap_pars_fragment> 2514#include <alphatest_pars_fragment> 2515#include <aomap_pars_fragment> 2516#include <lightmap_pars_fragment> 2517#include <emissivemap_pars_fragment> 2518#include <envmap_common_pars_fragment> 2519#include <envmap_pars_fragment> 2520#include <fog_pars_fragment> 2521#include <bsdfs> 2522#include <lights_pars_begin> 2523#include <normal_pars_fragment> 2524#include <lights_phong_pars_fragment> 2525#include <shadowmap_pars_fragment> 2526#include <bumpmap_pars_fragment> 2527#include <normalmap_pars_fragment> 2528#include <specularmap_pars_fragment> 2529#include <logdepthbuf_pars_fragment> 2530#include <clipping_planes_pars_fragment> 2531void main() { 2532 #include <clipping_planes_fragment> 2533 vec4 diffuseColor = vec4( diffuse, opacity ); 2534 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2535 vec3 totalEmissiveRadiance = emissive; 2536 #include <logdepthbuf_fragment> 2537 #include <map_fragment> 2538 #include <color_fragment> 2539 #include <alphamap_fragment> 2540 #include <alphatest_fragment> 2541 #include <specularmap_fragment> 2542 #include <normal_fragment_begin> 2543 #include <normal_fragment_maps> 2544 #include <emissivemap_fragment> 2545 #include <lights_phong_fragment> 2546 #include <lights_fragment_begin> 2547 #include <lights_fragment_maps> 2548 #include <lights_fragment_end> 2549 #include <aomap_fragment> 2550 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; 2551 #include <envmap_fragment> 2552 #include <output_fragment> 2553 #include <tonemapping_fragment> 2554 #include <encodings_fragment> 2555 #include <fog_fragment> 2556 #include <premultiplied_alpha_fragment> 2557 #include <dithering_fragment> 2558}`,meshphysical_vert:`#define STANDARD 2559varying vec3 vViewPosition; 2560#ifdef USE_TRANSMISSION 2561 varying vec3 vWorldPosition; 2562#endif 2563#include <common> 2564#include <uv_pars_vertex> 2565#include <uv2_pars_vertex> 2566#include <displacementmap_pars_vertex> 2567#include <color_pars_vertex> 2568#include <fog_pars_vertex> 2569#include <normal_pars_vertex> 2570#include <morphtarget_pars_vertex> 2571#include <skinning_pars_vertex> 2572#include <shadowmap_pars_vertex> 2573#include <logdepthbuf_pars_vertex> 2574#include <clipping_planes_pars_vertex> 2575void main() { 2576 #include <uv_vertex> 2577 #include <uv2_vertex> 2578 #include <color_vertex> 2579 #include <morphcolor_vertex> 2580 #include <beginnormal_vertex> 2581 #include <morphnormal_vertex> 2582 #include <skinbase_vertex> 2583 #include <skinnormal_vertex> 2584 #include <defaultnormal_vertex> 2585 #include <normal_vertex> 2586 #include <begin_vertex> 2587 #include <morphtarget_vertex> 2588 #include <skinning_vertex> 2589 #include <displacementmap_vertex> 2590 #include <project_vertex> 2591 #include <logdepthbuf_vertex> 2592 #include <clipping_planes_vertex> 2593 vViewPosition = - mvPosition.xyz; 2594 #include <worldpos_vertex> 2595 #include <shadowmap_vertex> 2596 #include <fog_vertex> 2597#ifdef USE_TRANSMISSION 2598 vWorldPosition = worldPosition.xyz; 2599#endif 2600}`,meshphysical_frag:`#define STANDARD 2601#ifdef PHYSICAL 2602 #define IOR 2603 #define SPECULAR 2604#endif 2605uniform vec3 diffuse; 2606uniform vec3 emissive; 2607uniform float roughness; 2608uniform float metalness; 2609uniform float opacity; 2610#ifdef IOR 2611 uniform float ior; 2612#endif 2613#ifdef SPECULAR 2614 uniform float specularIntensity; 2615 uniform vec3 specularColor; 2616 #ifdef USE_SPECULARINTENSITYMAP 2617 uniform sampler2D specularIntensityMap; 2618 #endif 2619 #ifdef USE_SPECULARCOLORMAP 2620 uniform sampler2D specularColorMap; 2621 #endif 2622#endif 2623#ifdef USE_CLEARCOAT 2624 uniform float clearcoat; 2625 uniform float clearcoatRoughness; 2626#endif
2627#ifdef USE_IRIDESCENCE 2628 uniform float iridescence; 2629 uniform float iridescenceIOR; 2630 uniform float iridescenceThicknessMinimum; 2631 uniform float iridescenceThicknessMaximum; 2632#endif 2633#ifdef USE_SHEEN 2634 uniform vec3 sheenColor; 2635 uniform float sheenRoughness; 2636 #ifdef USE_SHEENCOLORMAP 2637 uniform sampler2D sheenColorMap; 2638 #endif 2639 #ifdef USE_SHEENROUGHNESSMAP 2640 uniform sampler2D sheenRoughnessMap; 2641 #endif 2642#endif 2643varying vec3 vViewPosition; 2644#include <common> 2645#include <packing> 2646#include <dithering_pars_fragment> 2647#include <color_pars_fragment> 2648#include <uv_pars_fragment> 2649#include <uv2_pars_fragment> 2650#include <map_pars_fragment> 2651#include <alphamap_pars_fragment> 2652#include <alphatest_pars_fragment> 2653#include <aomap_pars_fragment> 2654#include <lightmap_pars_fragment> 2655#include <emissivemap_pars_fragment> 2656#include <bsdfs> 2657#include <iridescence_fragment> 2658#include <cube_uv_reflection_fragment> 2659#include <envmap_common_pars_fragment> 2660#include <envmap_physical_pars_fragment> 2661#include <fog_pars_fragment> 2662#include <lights_pars_begin> 2663#include <normal_pars_fragment> 2664#include <lights_physical_pars_fragment> 2665#include <transmission_pars_fragment> 2666#include <shadowmap_pars_fragment> 2667#include <bumpmap_pars_fragment> 2668#include <normalmap_pars_fragment> 2669#include <clearcoat_pars_fragment> 2670#include <iridescence_pars_fragment> 2671#include <roughnessmap_pars_fragment> 2672#include <metalnessmap_pars_fragment> 2673#include <logdepthbuf_pars_fragment> 2674#include <clipping_planes_pars_fragment> 2675void main() { 2676 #include <clipping_planes_fragment> 2677 vec4 diffuseColor = vec4( diffuse, opacity ); 2678 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2679 vec3 totalEmissiveRadiance = emissive; 2680 #include <logdepthbuf_fragment> 2681 #include <map_fragment> 2682 #include <color_fragment> 2683 #include <alphamap_fragment> 2684 #include <alphatest_fragment> 2685 #include <roughnessmap_fragment> 2686 #include <metalnessmap_fragment> 2687 #include <normal_fragment_begin> 2688 #include <normal_fragment_maps> 2689 #include <clearcoat_normal_fragment_begin> 2690 #include <clearcoat_normal_fragment_maps> 2691 #include <emissivemap_fragment> 2692 #include <lights_physical_fragment> 2693 #include <lights_fragment_begin> 2694 #include <lights_fragment_maps> 2695 #include <lights_fragment_end> 2696 #include <aomap_fragment> 2697 vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; 2698 vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; 2699 #include <transmission_fragment> 2700 vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; 2701 #ifdef USE_SHEEN 2702 float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); 2703 outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; 2704 #endif 2705 #ifdef USE_CLEARCOAT 2706 float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); 2707 vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); 2708 outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; 2709 #endif 2710 #include <output_fragment> 2711 #include <tonemapping_fragment> 2712 #include <encodings_fragment> 2713 #include <fog_fragment> 2714 #include <premultiplied_alpha_fragment> 2715 #include <dithering_fragment> 2716}`,meshtoon_vert:`#define TOON 2717varying vec3 vViewPosition; 2718#include <common> 2719#include <uv_pars_vertex> 2720#include <uv2_pars_vertex> 2721#include <displacementmap_pars_vertex> 2722#include <color_pars_vertex> 2723#include <fog_pars_vertex> 2724#include <normal_pars_vertex> 2725#include <morphtarget_pars_vertex> 2726#include <skinning_pars_vertex> 2727#include <shadowmap_pars_vertex> 2728#include <logdepthbuf_pars_vertex> 2729#include <clipping_planes_pars_vertex> 2730void main() { 2731 #include <uv_vertex> 2732 #include <uv2_vertex> 2733 #include <color_vertex> 2734 #include <morphcolor_vertex> 2735 #include <beginnormal_vertex> 2736 #include <morphnormal_vertex> 2737 #include <skinbase_vertex> 2738 #include <skinnormal_vertex> 2739 #include <defaultnormal_vertex> 2740 #include <normal_vertex> 2741 #include <begin_vertex> 2742 #include <morphtarget_vertex> 2743 #include <skinning_vertex> 2744 #include <displacementmap_vertex> 2745 #include <project_vertex> 2746 #include <logdepthbuf_vertex> 2747 #include <clipping_planes_vertex> 2748 vViewPosition = - mvPosition.xyz; 2749 #include <worldpos_vertex> 2750 #include <shadowmap_vertex> 2751 #include <fog_vertex> 2752}`,meshtoon_frag:`#define TOON 2753uniform vec3 diffuse; 2754uniform vec3 emissive; 2755uniform float opacity; 2756#include <common> 2757#include <packing> 2758#include <dithering_pars_fragment> 2759#include <color_pars_fragment> 2760#include <uv_pars_fragment> 2761#include <uv2_pars_fragment> 2762#include <map_pars_fragment> 2763#include <alphamap_pars_fragment> 2764#include <alphatest_pars_fragment> 2765#include <aomap_pars_fragment> 2766#include <lightmap_pars_fragment> 2767#include <emissivemap_pars_fragment> 2768#include <gradientmap_pars_fragment> 2769#include <fog_pars_fragment> 2770#include <bsdfs> 2771#include <lights_pars_begin> 2772#include <normal_pars_fragment> 2773#include <lights_toon_pars_fragment> 2774#include <shadowmap_pars_fragment> 2775#include <bumpmap_pars_fragment> 2776#include <normalmap_pars_fragment> 2777#include <logdepthbuf_pars_fragment> 2778#include <clipping_planes_pars_fragment> 2779void main() { 2780 #include <clipping_planes_fragment> 2781 vec4 diffuseColor = vec4( diffuse, opacity ); 2782 ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); 2783 vec3 totalEmissiveRadiance = emissive; 2784 #include <logdepthbuf_fragment> 2785 #include <map_fragment> 2786 #include <color_fragment> 2787 #include <alphamap_fragment> 2788 #include <alphatest_fragment> 2789 #include <normal_fragment_begin> 2790 #include <normal_fragment_maps> 2791 #include <emissivemap_fragment> 2792 #include <lights_toon_fragment> 2793 #include <lights_fragment_begin> 2794 #include <lights_fragment_maps> 2795 #include <lights_fragment_end> 2796 #include <aomap_fragment> 2797 vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; 2798 #include <output_fragment> 2799 #include <tonemapping_fragment> 2800 #include <encodings_fragment> 2801 #include <fog_fragment> 2802 #include <premultiplied_alpha_fragment> 2803 #include <dithering_fragment> 2804}`,points_vert:`uniform float size; 2805uniform float scale; 2806#include <common> 2807#include <color_pars_vertex> 2808#include <fog_pars_vertex> 2809#include <morphtarget_pars_vertex> 2810#include <logdepthbuf_pars_vertex> 2811#include <clipping_planes_pars_vertex> 2812void main() { 2813 #include <color_vertex> 2814 #include <morphcolor_vertex> 2815 #include <begin_vertex> 2816 #include <morphtarget_vertex> 2817 #include <project_vertex> 2818 gl_PointSize = size; 2819 #ifdef USE_SIZEATTENUATION 2820 bool isPerspective = isPerspectiveMatrix( projectionMatrix ); 2821 if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); 2822 #endif 2823 #include <logdepthbuf_vertex> 2824 #include <clipping_planes_vertex> 2825 #include <worldpos_vertex> 2826 #include <fog_vertex> 2827}`,points_frag:`uniform vec3 diffuse; 2828uniform float opacity; 2829#include <common> 2830#include <color_pars_fragment> 2831#include <map_particle_pars_fragment> 2832#include <alphatest_pars_fragment> 2833#include <fog_pars_fragment> 2834#include <logdepthbuf_pars_fragment> 2835#include <clipping_planes_pars_fragment> 2836void main() { 2837 #include <clipping_planes_fragment> 2838 vec3 outgoingLight = vec3( 0.0 ); 2839 vec4 diffuseColor = vec4( diffuse, opacity ); 2840 #include <logdepthbuf_fragment> 2841 #include <map_particle_fragment> 2842 #include <color_fragment> 2843 #include <alphatest_fragment> 2844 outgoingLight = diffuseColor.rgb; 2845 #include <output_fragment> 2846 #include <tonemapping_fragment> 2847 #include <encodings_fragment> 2848 #include <fog_fragment> 2849 #include <premultiplied_alpha_fragment> 2850}`,shadow_vert:`#include <common> 2851#include <fog_pars_vertex> 2852#include <morphtarget_pars_vertex> 2853#include <skinning_pars_vertex> 2854#include <shadowmap_pars_vertex> 2855void main() { 2856 #include <beginnormal_vertex> 2857 #include <morphnormal_vertex> 2858 #include <skinbase_vertex> 2859 #include <skinnormal_vertex> 2860 #include <defaultnormal_vertex> 2861 #include <begin_vertex> 2862 #include <morphtarget_vertex> 2863 #include <skinning_vertex> 2864 #include <project_vertex> 2865 #include <worldpos_vertex> 2866 #include <shadowmap_vertex> 2867 #include <fog_vertex> 2868}`,shadow_frag:`uniform vec3 color; 2869uniform float opacity; 2870#include <common> 2871#include <packing> 2872#include <fog_pars_fragment> 2873#include <bsdfs> 2874#include <lights_pars_begin> 2875#include <shadowmap_pars_fragment> 2876#include <shadowmask_pars_fragment> 2877void main() { 2878 gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); 2879 #include <tonemapping_fragment> 2880 #include <encodings_fragment> 2881 #include <fog_fragment> 2882}`,sprite_vert:`uniform float rotation; 2883uniform vec2 center; 2884#include <common> 2885#include <uv_pars_vertex> 2886#include <fog_pars_vertex> 2887#include <logdepthbuf_pars_vertex> 2888#include <clipping_planes_pars_vertex> 2889void main() { 2890 #include <uv_vertex> 2891 vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); 2892 vec2 scale; 2893 scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); 2894 scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); 2895 #ifndef USE_SIZEATTENUATION 2896 bool isPerspective = isPerspectiveMatrix( projectionMatrix ); 2897 if ( isPerspective ) scale *= - mvPosition.z; 2898 #endif 2899 vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; 2900 vec2 rotatedPosition; 2901 rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; 2902 rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; 2903 mvPosition.xy += rotatedPosition; 2904 gl_Position = projectionMatrix * mvPosition; 2905 #include <logdepthbuf_vertex> 2906 #include <clipping_planes_vertex> 2907 #include <fog_vertex> 2908}`,sprite_frag:`uniform vec3 diffuse; 2909uniform float opacity; 2910#include <common> 2911#include <uv_pars_fragment> 2912#include <map_pars_fragment> 2913#include <alphamap_pars_fragment> 2914#include <alphatest_pars_fragment> 2915#include <fog_pars_fragment> 2916#include <logdepthbuf_pars_fragment> 2917#include <clipping_planes_pars_fragment> 2918void main() { 2919 #include <clipping_planes_fragment> 2920 vec3 outgoingLight = vec3( 0.0 ); 2921 vec4 diffuseColor = vec4( diffuse, opacity ); 2922 #include <logdepthbuf_fragment> 2923 #include <map_fragment> 2924 #include <alphamap_fragment> 2925 #include <alphatest_fragment> 2926 outgoingLight = diffuseColor.rgb; 2927 #include <output_fragment> 2928 #include <tonemapping_fragment> 2929 #include <encodings_fragment> 2930 #include <fog_fragment> 2931}`},sA={common:{diffuse:{value:new iv(0xffffff)},opacity:{value:1},map:{value:null},uvTransform:{value:new t7},uv2Transform:{value:new t7},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new t9(1,1)}}
vendor: 3,498 bytes, line 2931
2931,displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new iv(0xffffff)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new iv(0xffffff)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new t7}},sprite:{diffuse:{value:new iv(0xffffff)},opacity:{value:1},center:{value:new t9(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new t7}}},sM={basic:{uniforms:sr([sA.common,sA.specularmap,sA.envmap,sA.aomap,sA.lightmap,sA.fog]),vertexShader:s_.meshbasic_vert,fragmentShader:s_.meshbasic_frag},lambert:{uniforms:sr([sA.common,sA.specularmap,sA.envmap,sA.aomap,sA.lightmap,sA.emissivemap,sA.bumpmap,sA.normalmap,sA.displacementmap,sA.fog,sA.lights,{emissive:{value:new iv(0)}}]),vertexShader:s_.meshlambert_vert,fragmentShader:s_.meshlambert_frag},phong:{uniforms:sr([sA.common,sA.specularmap,sA.envmap,sA.aomap,sA.lightmap,sA.emissivemap,sA.bumpmap,sA.normalmap,sA.displacementmap,sA.fog,sA.lights,{emissive:{value:new iv(0)},specular:{value:new iv(1118481)},shininess:{value:30}}]),vertexShader:s_.meshphong_vert,fragmentShader:s_.meshphong_frag},standard:{uniforms:sr([sA.common,sA.envmap,sA.aomap,sA.lightmap,sA.emissivemap,sA.bumpmap,sA.normalmap,sA.displacementmap,sA.roughnessmap,sA.metalnessmap,sA.fog,sA.lights,{emissive:{value:new iv(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:s_.meshphysical_vert,fragmentShader:s_.meshphysical_frag},toon:{uniforms:sr([sA.common,sA.aomap,sA.lightmap,sA.emissivemap,sA.bumpmap,sA.normalmap,sA.displacementmap,sA.gradientmap,sA.fog,sA.lights,{emissive:{value:new iv(0)}}]),vertexShader:s_.meshtoon_vert,fragmentShader:s_.meshtoon_frag},matcap:{uniforms:sr([sA.common,sA.bumpmap,sA.normalmap,sA.displacementmap,sA.fog,{matcap:{value:null}}]),vertexShader:s_.meshmatcap_vert,fragmentShader:s_.meshmatcap_frag},points:{uniforms:sr([sA.points,sA.fog]),vertexShader:s_.points_vert,fragmentShader:s_.points_frag},dashed:{uniforms:sr([sA.common,sA.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:s_.linedashed_vert,fragmentShader:s_.linedashed_frag}
2931,depth:{uniforms:sr([sA.common,sA.displacementmap]),vertexShader:s_.depth_vert,fragmentShader:s_.depth_frag},normal:{uniforms:sr([sA.common,sA.bumpmap,sA.normalmap,sA.displacementmap,{opacity:{value:1}}]),vertexShader:s_.meshnormal_vert,fragmentShader:s_.meshnormal_frag},sprite:{uniforms:sr([sA.sprite,sA.fog]),vertexShader:s_.sprite_vert,fragmentShader:s_.sprite_frag},background:{uniforms:{uvTransform:{value:new t7},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:s_.background_vert,fragmentShader:s_.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:s_.backgroundCube_vert,fragmentShader:s_.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:s_.cube_vert,fragmentShader:s_.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:s_.equirect_vert,fragmentShader:s_.equirect_frag},distanceRGBA:{uniforms:sr([sA.common,sA.displacementmap,{referencePosition:{value:new iD},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:s_.distanceRGBA_vert,fragmentShader:s_.distanceRGBA_frag},shadow:{uniforms:sr([sA.lights,sA.fog,{color:{value:new iv(0)},opacity:{value:1}}]),vertexShader:s_.shadow_vert,fragmentShader:s_.shadow_frag}};sM.physical={uniforms:sr([sM.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new t9(1,1)},clearcoatNormalMap:{value:null},iridescence:{value:0},iridescenceMap:{value:null},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},sheen:{value:0},sheenColor:{value:new iv(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new t9},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new iv(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new iv(1,1,1)},specularColorMap:{value:null}}]),vertexShader:s_.meshphysical_vert,fragmentShader:s_.meshphysical_frag};var sC={r:0,b:0,g:0};function sE(e,t,i,r,a,o,l){let h=new iv(0),c=+(!0!==o),d,p,f=null,m=0,g=null;function v(t,i){t.getRGB(sC,ss(e)),r.buffers.color.setClear(sC.r,sC.g,sC.b,i,l)}return{getClearColor:function(){return h},setClearColor:function(e,t=1){h.set(e),v(h,c=t)},getClearAlpha:function(){return c},setClearAlpha:function(e){v(h,c=e)},render:function(r,o){let l=!1,y=!0===o.isScene?o.background:null;y&&y.isTexture&&(y=(o.backgroundBlurriness>0?i:t).get(y));let x=e.xr,b=x.getSession&&x.getSession();b&&"additive"===b.environmentBlendMode&&(y=null),null===y?v(h,c):y&&y.isColor&&(v(y,1),l=!0),(e.autoClear||l)&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),y&&(y.isCubeTexture||306===y.mapping)?(void 0===p&&((p=new r7(new st(1,1,1),new so({name:"BackgroundCubeMaterial",uniforms:si(sM.backgroundCube.uniforms),vertexShader:sM.backgroundCube.vertexShader,fragmentShader:sM.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),p.geometry.deleteAttribute("uv"),p.onBeforeRender=function(e,t,i){this.matrixWorld.copyPosition(i.matrixWorld)},Object.defineProperty(p.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),a.update(p)),p.material.uniforms.envMap.value=y,p.material.uniforms.flipEnvMap.value=y.isCubeTexture&&!1===y.isRenderTargetTexture?-1:1,p.material.uniforms.backgroundBlurriness.value=o.backgroundBlurriness,p.material.uniforms.backgroundIntensity.value=o.backgroundIntensity,p.material.toneMapped=3001!==y.encoding,(f!==y||m!==y.version||g!==e.toneMapping)&&(p.material.needsUpdate=!0,f=y,m=y.version,g=e.toneMapping),p.layers.enableAll(),r.unshift(p,p.geometry,p.material,0,0,null)):y&&y.isTexture&&(void 0===d&&((d=new r7(new sS(2,2),new so({name:"BackgroundMaterial",uniforms:si(sM.background.uniforms),vertexShader:sM.background.vertexShader,fragmentShader:sM.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(d.material,"map",{get:function(){return this.uniforms.t2D.value}}),a.update(d)),d.material.uniforms.t2D.value=y,d.material.uniforms.backgroundIntensity.value=o.backgroundIntensity,d.material.toneMapped=3001!==y.encoding,!0===y.matrixAutoUpdate&&y.updateMatrix(),d.material.uniforms.uvTransform.value.copy(y.matrix
2931),(f!==y||m!==y.version||g!==e.toneMapping)&&(d.material.needsUpdate=!0,f=y,m=y.version,g=e.toneMapping),d.layers.enableAll(),r.unshift(d,d.geometry,d.material,0,0,null))}}}function sT(e,t,i,r){let a=e.getParameter(34921),o=r.isWebGL2?null:t.get("OES_vertex_array_object"),l=r.isWebGL2||null!==o,h={},c=g(null),d=c,p=!1;function f(t){return r.isWebGL2?e.bindVertexArray(t):o.bindVertexArrayOES(t)}function m(t){return r.isWebGL2?e.deleteVertexArray(t):o.deleteVertexArrayOES(t)}function g(e){let t=[],i=[],r=[];for(let e=0;e<a;e++)t[e]=0,i[e]=0,r[e]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:t,enabledAttributes:i,attributeDivisors:r,object:e,attributes:{},index:null}}function v(){let e=d.newAttributes;for(let t=0,i=e.length;t<i;t++)e[t]=0}function y(e){x(e,0)}function x(i,a){let o=d.newAttributes,l=d.enabledAttributes,h=d.attributeDivisors;o[i]=1,0===l[i]&&(e.enableVertexAttribArray(i),l[i]=1),h[i]!==a&&((r.isWebGL2?e:t.get("ANGLE_instanced_arrays"))[r.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](i,a),h[i]=a)}function b(){let t=d.newAttributes,i=d.enabledAttributes;for(let r=0,a=i.length;r<a;r++)i[r]!==t[r]&&(e.disableVertexAttribArray(r),i[r]=0)}function w(t,i,a,o,l,h){!0===r.isWebGL2&&(5124===a||5125===a)?e.vertexAttribIPointer(t,i,a,l,h):e.vertexAttribPointer(t,i,a,o,l,h)}function S(){_(),p=!0,d!==c&&f((d=c).object)}function _(){c.geometry=null,c.program=null,c.wireframe=!1}return{setup:function(a,c,m,S,_){let A=!1;if(l){var M,C;let t,i,l,p,v=(M=S,C=m,t=!0===c.wireframe,void 0===(i=h[M.id])&&(i={},h[M.id]=i),void 0===(l=i[C.id])&&(l={},i[C.id]=l),void 0===(p=l[t])&&(p=g(r.isWebGL2?e.createVertexArray():o.createVertexArrayOES()),l[t]=p),p);d!==v&&f((d=v).object),(A=function(e,t,i,r){let a=d.attributes,o=t.attributes,l=0,h=i.getAttributes();for(let t in h)if(h[t].location>=0){let i=a[t],r=o[t];if(void 0===r&&("instanceMatrix"===t&&e.instanceMatrix&&(r=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(r=e.instanceColor)),void 0===i||i.attribute!==r||r&&i.data!==r.data)return!0;l++}return d.attributesNum!==l||d.index!==r}(a,S,m,_))&&function(e,t,i,r){let a={},o=t.attributes,l=0,h=i.getAttributes();for(let t in h)if(h[t].location>=0){let i=o[t];void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor));let r={};r.attribute=i,i&&i.data&&(r.data=i.data),a[t]=r,l++}d.attributes=a,d.attributesNum=l,d.index=r}(a,S,m,_)}else{let e=!0===c.wireframe;(d.geometry!==S.id||d.program!==m.id||d.wireframe!==e)&&(d.geometry=S.id,d.program=m.id,d.wireframe=e,A=!0)}null!==_&&i.update(_,34963),(A||p)&&(p=!1,function(a,o,l,h){if(!1===r.isWebGL2&&(a.isInstancedMesh||h.isInstancedBufferGeometry)&&null===t.get("ANGLE_instanced_arrays"))return;v();let c=h.attributes,d=l.getAttributes(),p=o.defaultAttributeValues;for(let t in d){let r=d[t];if(r.location>=0){let o=c[t];if(void 0===o&&("instanceMatrix"===t&&a.instanceMatrix&&(o=a.instanceMatrix),"instanceColor"===t&&a.instanceColor&&(o=a.instanceColor)),void 0!==o){let t=o.normalized,l=o.itemSize,c=i.get(o);if(void 0===c)continue;let d=c.buffer,p=c.type,f=c.bytesPerElement;if(o.isInterleavedBufferAttribute){let i=o.data,c=i.stride,m=o.offset;if(i.isInstancedInterleavedBuffer){for(let e=0;e<r.locationSize;e++)x(r.location+e,i.meshPerAttribute);!0!==a.isInstancedMesh&&void 0===h._maxInstanceCount&&(h._maxInstanceCount=i.meshPerAttribute*i.count)}else for(let e=0;e<r.locationSize;e++)y(r.location+e);e.bindBuffer(34962,d);for(let e=0;e<r.locationSize;e++)w(r.location+e,l/r.locationSize,p,t,c*f,(m+l/r.locationSize*e)*f)}else{if(o.isInstancedBufferAttribute){for(let e=0;e<r.locationSize;e++)x(r.location+e,o.meshPerAttribute);!0!==a.isInstancedMesh&&void 0===h._maxInstanceCount&&(h._maxInstanceCount=o.meshPerAttribute*o.count)}else for(let e=0;e<r.locationSize;e++)y(r.location+e);e.bindBuffer(34962,d);for(let e=0;e<r.locationSize;e++)w(r.location+e,l/r.locationSize,p,t,l*f,l/r.locationSize*e*f)}}else if(void 0!==p){let i=p[t];if(void 0!==i)switch(i.length){case 2:e.vertexAttrib2fv(r.location,i);break;case 3:e.vertexAttrib3fv(r.location,i);break;case 4:e.vertexAttrib4fv(r.location,i);break;default:e.vertexAttrib1fv(r.location,i)}}}}b()}(a,c,m,S),null!==_&&e.bindBuffer(34963,i.get(_).buffer))},reset:S,resetDefaultState:_,dispose:function(){for(let e in S(),h){let t=h[e];for(let e in t){let i=t[e];for(let e in i)m(i[e].object),delete i[e];delete t[e]}delete h[e]}},releaseStatesOfGeometry:function(e){if(void 0===h[e.id])return;let t=h[e.id];for(let e in t){let i=t[e];for(let e in i)m(i[e].object),delete i[e];delete t[e]}delete h[e.id]},releaseStatesOfProgram:function(e){for(let t in h){let i=h[t];if(void 0===i[e.id])continue;let r=i[e.id];for(let e in r)m(r[e].object),delete r[e];delete i[e.id]}},initAttributes:v,enableAttribute:y,disableUnusedAttributes:b}}function sP(e,t,i,r){let a=r.isWebGL2,o;this.setMode=function(e){o=e},this.render=function(t,r){e.drawArrays(o,t,r),i.update(r,o,1)},this.renderInstances=function(r,l,h){let c,d;if(0!==h){if(a)c=e,d="drawArraysInstanced";else if(c=t.get("ANGLE_instanced_arrays"),d="drawArraysInstancedANGLE",
2931null===c)return;c[d](o,r,l,h),i.update(l,o,h)}}}function sD(e,t,i){let r;function a(t){if("highp"===t){if(e.getShaderPrecisionFormat(35633,36338).precision>0&&e.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(35633,36337).precision>0&&e.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}let o="u">typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext,l=void 0!==i.precision?i.precision:"highp",h=a(l);h!==l&&(l=h);let c=o||t.has("WEBGL_draw_buffers"),d=!0===i.logarithmicDepthBuffer,p=e.getParameter(34930),f=e.getParameter(35660),m=e.getParameter(3379),g=e.getParameter(34076),v=e.getParameter(34921),y=e.getParameter(36347),x=e.getParameter(36348),b=e.getParameter(36349),w=f>0,S=o||t.has("OES_texture_float"),_=o?e.getParameter(36183):0;return{isWebGL2:o,drawBuffers:c,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){let i=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:a,precision:l,logarithmicDepthBuffer:d,maxTextures:p,maxVertexTextures:f,maxTextureSize:m,maxCubemapSize:g,maxAttributes:v,maxVertexUniforms:y,maxVaryings:x,maxFragmentUniforms:b,vertexTextures:w,floatFragmentTextures:S,floatVertexTextures:w&&S,maxSamples:_}}function sO(e){let t=this,i=null,r=0,a=!1,o=!1,l=new sg,h=new t7,c={value:null,needsUpdate:!1};function d(e,i,r,a){let o=null!==e?e.length:0,d=null;if(0!==o){if(d=c.value,!0!==a||null===d){let t=r+4*o,a=i.matrixWorldInverse;h.getNormalMatrix(a),(null===d||d.length<t)&&(d=new Float32Array(t));for(let t=0,i=r;t!==o;++t,i+=4)l.copy(e[t]).applyMatrix4(a,h),l.normal.toArray(d,i),d[i+3]=l.constant}c.value=d,c.needsUpdate=!0}return t.numPlanes=o,t.numIntersection=0,d}this.uniform=c,this.numPlanes=0,this.numIntersection=0,this.init=function(e,t){let i=0!==e.length||t||0!==r||a;return a=t,r=e.length,i},this.beginShadows=function(){o=!0,d(null)},this.endShadows=function(){o=!1},this.setGlobalState=function(e,t){i=d(e,t,0)},this.setState=function(l,h,p){let f=l.clippingPlanes,m=l.clipIntersection,g=l.clipShadows,v=e.get(l);if(a&&null!==f&&0!==f.length&&(!o||g)){let e=o?0:r,t=4*e,a=v.clippingState||null;c.value=a,a=d(f,h,t,p);for(let e=0;e!==t;++e)a[e]=i[e];v.clippingState=a,this.numIntersection=m?this.numPlanes:0,this.numPlanes+=e}else o?d(null):(c.value!==i&&(c.value=i,c.needsUpdate=r>0),t.numPlanes=r,t.numIntersection=0)}}function sI(e){let t=new WeakMap;function i(e,t){return 303===t?e.mapping=301:304===t&&(e.mapping=302),e}function r(e){let i=e.target;i.removeEventListener("dispose",r);let a=t.get(i);void 0!==a&&(t.delete(i),a.dispose())}return{get:function(a){if(a&&a.isTexture&&!1===a.isRenderTargetTexture){let o=a.mapping;if(303===o||304===o)if(t.has(a))return i(t.get(a).texture,a.mapping);else{let o=a.image;if(!o||!(o.height>0))return null;{let l=new su(o.height/2);return l.fromEquirectangularTexture(e,a),t.set(a,l),a.addEventListener("dispose",r),i(l.texture,a.mapping)}}}return a},dispose:function(){t=new WeakMap}}}var sR=class extends sl{constructor(e=-1,t=1,i=1,r=-1,a=.1,o=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=r,this.near=a,this.far=o,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=null===e.view?null:Object.assign({},e.view),this}setViewOffset(e,t,i,r,a,o){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=r,this.view.width=a,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,r=(this.top+this.bottom)/2,a=i-e,o=i+e,l=r+t,h=r-t;if(null!==this.view&&this.view.enabled){let e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;a+=e*this.view.offsetX,o=a+e*this.view.width,l-=t*this.view.offsetY,h=l-t*this.view.height}
2931this.projectionMatrix.makeOrthographic(a,o,l,h,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}},sL=[.125,.215,.35,.446,.526,.582],sB=new sR,sz=new iv,sF=null,sN=(1+Math.sqrt(5))/2,sU=1/sN,sk=[new iD(1,1,1),new iD(-1,1,1),new iD(1,1,-1),new iD(-1,1,-1),new iD(0,sN,sU),new iD(0,sN,-sU),new iD(sU,0,sN),new iD(-sU,0,sN),new iD(sN,sU,0),new iD(-sN,sU,0)],sV=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,r=100){sF=this._renderer.getRenderTarget(),this._setSize(256);let a=this._allocateTargets();return a.depthBuffer=!0,this._sceneToCubeUV(e,i,r,a),t>0&&this._blur(a,0,0,t),this._applyPMREM(a),this._cleanup(a),a}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=sH(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=sW(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;e<this._lodPlanes.length;e++)this._lodPlanes[e].dispose()}_cleanup(e){this._renderer.setRenderTarget(sF),e.scissorTest=!1,sG(e,0,0,e.width,e.height)}_fromTexture(e,t){301===e.mapping||302===e.mapping?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4),sF=this._renderer.getRenderTarget();let i=t||this._allocateTargets();return this._textureToCubeUV(e,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){let e=3*Math.max(this._cubeSize,112),t=4*this._cubeSize,i={magFilter:1006,minFilter:1006,generateMipmaps:!1,type:1016,format:1023,encoding:3e3,depthBuffer:!1},r=sj(e,t,i);if(null===this._pingPongRenderTarget||this._pingPongRenderTarget.width!==e||this._pingPongRenderTarget.height!==t){var a;null!==this._pingPongRenderTarget&&this._dispose(),this._pingPongRenderTarget=sj(e,t,i);let{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=function(e){let t=[],i=[],r=[],a=e,o=e-4+1+sL.length;for(let l=0;l<o;l++){let o=Math.pow(2,a);i.push(o);let h=1/o;l>e-4?h=sL[l-e+4-1]:0===l&&(h=0),r.push(h);let c=1/(o-2),d=-c,p=1+c,f=[d,d,p,d,p,p,d,d,p,p,d,p],m=new Float32Array(108),g=new Float32Array(72),v=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,i=e>2?0:-1,r=[t,i,0,t+2/3,i,0,t+2/3,i+1,0,t,i,0,t+2/3,i+1,0,t,i+1,0];m.set(r,18*e),g.set(f,12*e);let a=[e,e,e,e,e,e];v.set(a,6*e)}let y=new rQ;y.setAttribute("position",new rN(m,3)),y.setAttribute("uv",new rN(g,2)),y.setAttribute("faceIndex",new rN(v,1)),t.push(y),a>4&&a--}return{lodPlanes:t,sizeLods:i,sigmas:r}}(r)),this._blurMaterial=(a=r,new so({name:"SphericalGaussianBlur",defines:{n:20,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${a}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:new Float32Array(20)},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:new iD(0,1,0)}},vertexShader:sq(),fragmentShader:` 2932 2933 precision mediump float; 2934 precision mediump int; 2935 2936 varying vec3 vOutputDirection; 2937 2938 uniform sampler2D envMap; 2939 uniform int samples; 2940 uniform float weights[ n ]; 2941 uniform bool latitudinal; 2942 uniform float dTheta; 2943 uniform float mipInt; 2944 uniform vec3 poleAxis; 2945 2946 #define ENVMAP_TYPE_CUBE_UV 2947 #include <cube_uv_reflection_fragment> 2948 2949 vec3 getSample( float theta, vec3 axis ) { 2950 2951 float cosTheta = cos( theta ); 2952 // Rodrigues' axis-angle rotation 2953 vec3 sampleDirection = vOutputDirection * cosTheta 2954 + cross( axis, vOutputDirection ) * sin( theta ) 2955 + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); 2956 2957 return bilinearCubeUV( envMap, sampleDirection, mipInt ); 2958 2959 } 2960 2961 void main() { 2962 2963 vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); 2964 2965 if ( all( equal( axis, vec3( 0.0 ) ) ) ) { 2966 2967 axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); 2968 2969 } 2970 2971 axis = normalize( axis ); 2972 2973 gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); 2974 gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); 2975 2976 for ( int i = 1; i < n; i++ ) { 2977 2978 if ( i >= samples ) { 2979 2980 break; 2981 2982 } 2983 2984 float theta = dTheta * float( i ); 2985 gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); 2986 gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); 2987 2988 } 2989 2990 } 2991 `,blending:0,depthTest:!1,depthWrite:!1}))}return r}_compileMaterial(e){let t=new r7(this._lodPlanes[0],e);this._renderer.compile(t,sB)}_sceneToCubeUV(e,t,i,r){let a=new sh(90,1,t,i),o=[1,-1,1,1,1,1],l=[1,1,1,-1,-1,-1],h=this._renderer,c=h.autoClear,d=h.toneMapping;h.getClearColor(sz),h.toneMapping=0,h.autoClear=!1;
2991let p=new rB({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),f=new r7(new st,p),m=!1,g=e.background;g?g.isColor&&(p.color.copy(g),e.background=null,m=!0):(p.color.copy(sz),m=!0);for(let t=0;t<6;t++){let i=t%3;0===i?(a.up.set(0,o[t],0),a.lookAt(l[t],0,0)):1===i?(a.up.set(0,0,o[t]),a.lookAt(0,l[t],0)):(a.up.set(0,o[t],0),a.lookAt(0,0,l[t]));let c=this._cubeSize;sG(r,i*c,t>2?c:0,c,c),h.setRenderTarget(r),m&&h.render(f,a),h.render(e,a)}f.geometry.dispose(),f.material.dispose(),h.toneMapping=d,h.autoClear=c,e.background=g}_textureToCubeUV(e,t){let i=this._renderer,r=301===e.mapping||302===e.mapping;r?(null===this._cubemapMaterial&&(this._cubemapMaterial=sH()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=sW());let a=r?this._cubemapMaterial:this._equirectMaterial,o=new r7(this._lodPlanes[0],a);a.uniforms.envMap.value=e;let l=this._cubeSize;sG(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(o,sB)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;for(let t=1;t<this._lodPlanes.length;t++){let i=Math.sqrt(this._sigmas[t]*this._sigmas[t]-this._sigmas[t-1]*this._sigmas[t-1]),r=sk[(t-1)%sk.length];this._blur(e,t-1,t,i,r)}t.autoClear=i}_blur(e,t,i,r,a){let o=this._pingPongRenderTarget;this._halfBlur(e,o,t,i,r,"latitudinal",a),this._halfBlur(o,e,i,i,r,"longitudinal",a)}_halfBlur(e,t,i,r,a,o,l){let h=this._renderer,c=this._blurMaterial,d=new r7(this._lodPlanes[r],c),p=c.uniforms,f=this._sizeLods[i]-1,m=isFinite(a)?Math.PI/(2*f):2*Math.PI/39,g=a/m,v=isFinite(a)?1+Math.floor(3*g):20,y=[],x=0;for(let e=0;e<20;++e){let t=e/g,i=Math.exp(-t*t/2);y.push(i),0===e?x+=i:e<v&&(x+=2*i)}for(let e=0;e<y.length;e++)y[e]=y[e]/x;p.envMap.value=e.texture,p.samples.value=v,p.weights.value=y,p.latitudinal.value="latitudinal"===o,l&&(p.poleAxis.value=l);let{_lodMax:b}=this;p.dTheta.value=m,p.mipInt.value=b-i;let w=this._sizeLods[r],S=4*(this._cubeSize-w);sG(t,3*w*(r>b-4?r-b+4:0),S,3*w,2*w),h.setRenderTarget(t),h.render(d,sB)}};function sj(e,t,i){let r=new iM(e,t,i);return r.texture.mapping=306,r.texture.name="PMREM.cubeUv",r.scissorTest=!0,r}function sG(e,t,i,r,a){e.viewport.set(t,i,r,a),e.scissor.set(t,i,r,a)}function sW(){return new so({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:sq(),fragmentShader:` 2992 2993 precision mediump float; 2994 precision mediump int; 2995 2996 varying vec3 vOutputDirection; 2997 2998 uniform sampler2D envMap; 2999 3000 #include <common> 3001 3002 void main() { 3003 3004 vec3 outputDirection = normalize( vOutputDirection ); 3005 vec2 uv = equirectUv( outputDirection ); 3006 3007 gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); 3008 3009 } 3010 `,blending:0,depthTest:!1,depthWrite:!1})}function sH(){return new so({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:sq(),fragmentShader:` 3011 3012 precision mediump float; 3013 precision mediump int; 3014 3015 uniform float flipEnvMap; 3016 3017 varying vec3 vOutputDirection; 3018 3019 uniform samplerCube envMap; 3020 3021 void main() { 3022 3023 gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); 3024 3025 } 3026 `,blending:0,depthTest:!1,depthWrite:!1})}function sq(){return` 3027 3028 precision mediump float; 3029 precision mediump int; 3030 3031 attribute float faceIndex; 3032 3033 varying vec3 vOutputDirection; 3034 3035 // RH coordinate system; PMREM face-indexing convention 3036 vec3 getDirection( vec2 uv, float face ) { 3037 3038 uv = 2.0 * uv - 1.0; 3039 3040 vec3 direction = vec3( uv, 1.0 ); 3041 3042 if ( face == 0.0 ) { 3043 3044 direction = direction.zyx; // ( 1, v, u ) pos x 3045 3046 } else if ( face == 1.0 ) { 3047 3048 direction = direction.xzy; 3049 direction.xz *= -1.0; // ( -u, 1, -v ) pos y 3050 3051 } else if ( face == 2.0 ) { 3052 3053 direction.x *= -1.0; // ( -u, v, 1 ) pos z 3054 3055 } else if ( face == 3.0 ) { 3056 3057 direction = direction.zyx; 3058 direction.xz *= -1.0; // ( -1, v, -u ) neg x 3059 3060 } else if ( face == 4.0 ) { 3061 3062 direction = direction.xzy; 3063 direction.xy *= -1.0; // ( -u, -1, v ) neg y 3064 3065 } else if ( face == 5.0 ) { 3066 3067 direction.z *= -1.0; // ( u, v, -1 ) neg z 3068 3069 } 3070 3071 return direction; 3072 3073 } 3074 3075 void main() { 3076 3077 vOutputDirection = getDirection( uv, faceIndex ); 3078 gl_Position = vec4( position, 1.0 ); 3079 3080 } 3081 `}function sX(e){let t=new WeakMap,i=null;function r(e){let i=e.target;i.removeEventListener("dispose",r);let a=t.get(i);void 0!==a&&(t.delete(i),a.dispose())}
3081return{get:function(a){if(a&&a.isTexture){let o=a.mapping,l=303===o||304===o,h=301===o||302===o;if(l||h)if(a.isRenderTargetTexture&&!0===a.needsPMREMUpdate){a.needsPMREMUpdate=!1;let r=t.get(a);return null===i&&(i=new sV(e)),r=l?i.fromEquirectangular(a,r):i.fromCubemap(a,r),t.set(a,r),r.texture}else{if(t.has(a))return t.get(a).texture;{let o=a.image;if(!(l&&o&&o.height>0||h&&o&&function(e){let t=0;for(let i=0;i<6;i++)void 0!==e[i]&&t++;return 6===t}(o)))return null;{null===i&&(i=new sV(e));let o=l?i.fromEquirectangular(a):i.fromCubemap(a);return t.set(a,o),a.addEventListener("dispose",r),o.texture}}}}return a},dispose:function(){t=new WeakMap,null!==i&&(i.dispose(),i=null)}}}function sY(e){let t={};function i(i){let r;if(void 0!==t[i])return t[i];switch(i){case"WEBGL_depth_texture":r=e.getExtension("WEBGL_depth_texture")||e.getExtension("MOZ_WEBGL_depth_texture")||e.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=e.getExtension("EXT_texture_filter_anisotropic")||e.getExtension("MOZ_EXT_texture_filter_anisotropic")||e.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=e.getExtension("WEBGL_compressed_texture_s3tc")||e.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=e.getExtension("WEBGL_compressed_texture_pvrtc")||e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:r=e.getExtension(i)}return t[i]=r,r}return{has:function(e){return null!==i(e)},init:function(e){e.isWebGL2?i("EXT_color_buffer_float"):(i("WEBGL_depth_texture"),i("OES_texture_float"),i("OES_texture_half_float"),i("OES_texture_half_float_linear"),i("OES_standard_derivatives"),i("OES_element_index_uint"),i("OES_vertex_array_object"),i("ANGLE_instanced_arrays")),i("OES_texture_float_linear"),i("EXT_color_buffer_half_float"),i("WEBGL_multisampled_render_to_texture")},get:function(e){let t=i(e);return t}}}function sQ(e,t,i,r){let a={},o=new WeakMap;function l(e){let h=e.target;for(let e in null!==h.index&&t.remove(h.index),h.attributes)t.remove(h.attributes[e]);h.removeEventListener("dispose",l),delete a[h.id];let c=o.get(h);c&&(t.remove(c),o.delete(h)),r.releaseStatesOfGeometry(h),!0===h.isInstancedBufferGeometry&&delete h._maxInstanceCount,i.memory.geometries--}function h(e){let i=[],r=e.index,a=e.attributes.position,l=0;if(null!==r){let e=r.array;l=r.version;for(let t=0,r=e.length;t<r;t+=3){let r=e[t+0],a=e[t+1],o=e[t+2];i.push(r,a,a,o,o,r)}}else{let e=a.array;l=a.version;for(let t=0,r=e.length/3-1;t<r;t+=3){let e=t+0,r=t+1,a=t+2;i.push(e,r,r,a,a,e)}}let h=new(it(i)?rk:rU)(i,1);h.version=l;let c=o.get(e);c&&t.remove(c),o.set(e,h)}return{get:function(e,t){return!0===a[t.id]||(t.addEventListener("dispose",l),a[t.id]=!0,i.memory.geometries++),t},update:function(e){let i=e.attributes;for(let e in i)t.update(i[e],34962);let r=e.morphAttributes;for(let e in r){let i=r[e];for(let e=0,r=i.length;e<r;e++)t.update(i[e],34962)}},getWireframeAttribute:function(e){let t=o.get(e);if(t){let i=e.index;null!==i&&t.version<i.version&&h(e)}else h(e);return o.get(e)}}}function sZ(e,t,i,r){let a,o,l=r.isWebGL2,h;this.setMode=function(e){h=e},this.setIndex=function(e){a=e.type,o=e.bytesPerElement},this.render=function(t,r){e.drawElements(h,r,a,t*o),i.update(r,h,1)},this.renderInstances=function(r,c,d){let p,f;if(0!==d){if(l)p=e,f="drawElementsInstanced";else if(p=t.get("ANGLE_instanced_arrays"),f="drawElementsInstancedANGLE",null===p)return;p[f](h,c,a,r*o,d),i.update(c,h,d)}}}function sK(e){let t={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:t,programs:null,autoReset:!0,reset:function(){t.frame++,t.calls=0,t.triangles=0,t.points=0,t.lines=0},update:function(e,i,r){switch(t.calls++,i){case 4:t.triangles+=e/3*r;break;case 1:t.lines+=e/2*r;break;case 3:t.lines+=r*(e-1);break;case 2:t.lines+=r*e;break;case 0:t.points+=r*e}}}}function sJ(e,t){return e[0]-t[0]}function s$(e,t){return Math.abs(t[1])-Math.abs(e[1])}function s0(e,t,i){let r={},a=new Float32Array(8),o=new WeakMap,l=new iA,h=[];for(let e=0;e<8;e++)h[e]=[e,0];return{update:function(c,d,p,f){let m=c.morphTargetInfluences;if(!0===t.isWebGL2){let r=d.morphAttributes.position||d.morphAttributes.normal||d.morphAttributes.color,a=void 0!==r?r.length:0,h=o.get(d);
3081if(void 0===h||h.count!==a){let e=function(){b.dispose(),o.delete(d),d.removeEventListener("dispose",e)};void 0!==h&&h.texture.dispose();let i=void 0!==d.morphAttributes.position,r=void 0!==d.morphAttributes.normal,c=void 0!==d.morphAttributes.color,p=d.morphAttributes.position||[],f=d.morphAttributes.normal||[],m=d.morphAttributes.color||[],g=0;!0===i&&(g=1),!0===r&&(g=2),!0===c&&(g=3);let v=d.attributes.position.count*g,y=1;v>t.maxTextureSize&&(y=Math.ceil(v/t.maxTextureSize),v=t.maxTextureSize);let x=new Float32Array(v*y*4*a),b=new iC(x,v,y,a);b.type=1015,b.needsUpdate=!0;let w=4*g;for(let e=0;e<a;e++){let t=p[e],a=f[e],o=m[e],h=v*y*4*e;for(let e=0;e<t.count;e++){let d=e*w;!0===i&&(l.fromBufferAttribute(t,e),x[h+d+0]=l.x,x[h+d+1]=l.y,x[h+d+2]=l.z,x[h+d+3]=0),!0===r&&(l.fromBufferAttribute(a,e),x[h+d+4]=l.x,x[h+d+5]=l.y,x[h+d+6]=l.z,x[h+d+7]=0),!0===c&&(l.fromBufferAttribute(o,e),x[h+d+8]=l.x,x[h+d+9]=l.y,x[h+d+10]=l.z,x[h+d+11]=4===o.itemSize?l.w:1)}}h={count:a,texture:b,size:new t9(v,y)},o.set(d,h),d.addEventListener("dispose",e)}let c=0;for(let e=0;e<m.length;e++)c+=m[e];let p=d.morphTargetsRelative?1:1-c;f.getUniforms().setValue(e,"morphTargetBaseInfluence",p),f.getUniforms().setValue(e,"morphTargetInfluences",m),f.getUniforms().setValue(e,"morphTargetsTexture",h.texture,i),f.getUniforms().setValue(e,"morphTargetsTextureSize",h.size)}else{let t=void 0===m?0:m.length,i=r[d.id];if(void 0===i||i.length!==t){i=[];for(let e=0;e<t;e++)i[e]=[e,0];r[d.id]=i}for(let e=0;e<t;e++){let t=i[e];t[0]=e,t[1]=m[e]}i.sort(s$);for(let e=0;e<8;e++)e<t&&i[e][1]?(h[e][0]=i[e][0],h[e][1]=i[e][1]):(h[e][0]=Number.MAX_SAFE_INTEGER,h[e][1]=0);h.sort(sJ);let o=d.morphAttributes.position,l=d.morphAttributes.normal,c=0;for(let e=0;e<8;e++){let t=h[e],i=t[0],r=t[1];i!==Number.MAX_SAFE_INTEGER&&r?(o&&d.getAttribute("morphTarget"+e)!==o[i]&&d.setAttribute("morphTarget"+e,o[i]),l&&d.getAttribute("morphNormal"+e)!==l[i]&&d.setAttribute("morphNormal"+e,l[i]),a[e]=r,c+=r):(o&&!0===d.hasAttribute("morphTarget"+e)&&d.deleteAttribute("morphTarget"+e),l&&!0===d.hasAttribute("morphNormal"+e)&&d.deleteAttribute("morphNormal"+e),a[e]=0)}let p=d.morphTargetsRelative?1:1-c;f.getUniforms().setValue(e,"morphTargetBaseInfluence",p),f.getUniforms().setValue(e,"morphTargetInfluences",a)}}}}function s1(e,t,i,r){let a=new WeakMap;function o(e){let t=e.target;t.removeEventListener("dispose",o),i.remove(t.instanceMatrix),null!==t.instanceColor&&i.remove(t.instanceColor)}return{update:function(e){let l=r.render.frame,h=e.geometry,c=t.get(e,h);return a.get(c)!==l&&(t.update(c),a.set(c,l)),e.isInstancedMesh&&(!1===e.hasEventListener("dispose",o)&&e.addEventListener("dispose",o),i.update(e.instanceMatrix,34962),null!==e.instanceColor&&i.update(e.instanceColor,34962)),c},dispose:function(){a=new WeakMap}}}var s2=new i_,s3=new iC,s4=new iE,s5=new sd,s6=[],s8=[],s9=new Float32Array(16),s7=new Float32Array(9),ae=new Float32Array(4);function at(e,t,i){let r=e[0];if(null==r||r<=0||r>0)return e;let a=t*i,o=s6[a];if(void 0===o&&(o=new Float32Array(a),s6[a]=o),0!==t){r.toArray(o,0);for(let r=1,a=0;r!==t;++r)a+=i,e[r].toArray(o,a)}return o}function ai(e,t){if(e.length!==t.length)return!1;for(let i=0,r=e.length;i<r;i++)if(e[i]!==t[i])return!1;return!0}function ar(e,t){for(let i=0,r=t.length;i<r;i++)e[i]=t[i]}function as(e,t){let i=s8[t];void 0===i&&(i=new Int32Array(t),s8[t]=i);for(let r=0;r!==t;++r)i[r]=e.allocateTextureUnit();return i}function aa(e,t){let i=this.cache;i[0]!==t&&(e.uniform1f(this.addr,t),i[0]=t)}function an(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2f(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(ai(i,t))return;e.uniform2fv(this.addr,t),ar(i,t)}}function ao(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3f(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else if(void 0!==t.r)(i[0]!==t.r||i[1]!==t.g||i[2]!==t.b)&&(e.uniform3f(this.addr,t.r,t.g,t.b),i[0]=t.r,i[1]=t.g,i[2]=t.b);else{if(ai(i,t))return;e.uniform3fv(this.addr,t),ar(i,t)}}function al(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4f(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(ai(i,t))return;e.uniform4fv(this.addr,t),ar(i,t)}}function ah(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(ai(i,t))return;e.uniformMatrix2fv(this.addr,!1,t),ar(i,t)}else{if(ai(i,r))return;ae.set(r),e.uniformMatrix2fv(this.addr,!1,ae),ar(i,r)}}function ac(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(ai(i,t))return;e.uniformMatrix3fv(this.addr,!1,t),ar(i,t)}else{if(ai(i,r))return;s7.set(r),e.uniformMatrix3fv(this.addr,!1,s7),ar(i,r)}}function ad(e,t){let i=this.cache,r=t.elements;if(void 0===r){if(ai(i,t))return;e.uniformMatrix4fv(this.addr,!1,t),ar(i,t)}else{if(ai(i,r))return;s9.set(r),e.uniformMatrix4fv(this.addr,!1,s9),ar(i,r)}}function au(e,t){let i=this.cache;i[0]!==t&&(e.uniform1i(this.addr,t),i[0]=t)}function ap(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2i(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(ai(i,t))return;e.uniform2iv(this.addr,t),ar(i,t)}}function af(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3i(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else{if(ai(i,t))return;e.uniform3iv(this.addr,t),ar(i,t)}}function am(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4i(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(ai(i,t))return;e.uniform4iv(this.addr,t),ar(i,t)}}function ag(e,t){let i=this.cache;i[0]!==t&&(e.uniform1ui(this.addr,t),i[0]=t)}function av(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y)&&(e.uniform2ui(this.addr,t.x,t.y),i[0]=t.x,i[1]=t.y);else{if(ai(i,t))return;e.uniform2uiv(this.addr,t),ar(i,t)}}function ay(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z)&&(e.uniform3ui(this.addr,t.x,t.y,t.z),i[0]=t.x,i[1]=t.y,i[2]=t.z);else{if(ai(i,t))return;e.uniform3uiv(this.addr,t),ar(i,t)}}function ax(e,t){let i=this.cache;if(void 0!==t.x)(i[0]!==t.x||i[1]!==t.y||i[2]!==t.z||i[3]!==t.w)&&(e.uniform4ui(this.addr,t.x,t.y,t.z,t.w),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=t.w);else{if(ai(i,t))return;e.uniform4uiv(this.addr,t),ar(i,t)}}function ab(e,t,i){let r=this.cache,a=i.allocateTextureUnit();r[0]!==a&&(e.uniform1i(this.addr,a),r[0]=a),i.setTexture2D(t||s2,a)}function aw(e,t,i){let r=this.cache,a=i.allocateTextureUnit();r[0]!==a&&(e.uniform1i(this.addr,a),r[0]=a),i.setTexture3D(t||s4,a)}function aS(e,t,i){let r=this.cache,a=i.allocateTextureUnit();r[0]!==a&&(e.uniform1i(this.addr,a),r[0]=a),i.setTextureCube(t||s5,a)}function a_(e,t,i){let r=this.cache,a=i.allocateTextureUnit();r[0]!==a&&(e.uniform1i(this.addr,a),r[0]=a),i.setTexture2DArray(t||s3,a)}function aA(e,t){e.uniform1fv(this.addr,t)}function aM(e,t){let i=at(t,this.size,2);e.uniform2fv(this.addr,i)}function aC(e,t){let i=at(t,this.size,3);e.uniform3fv(this.addr,i)}function aE(e,t){let i=at(t,this.size,4);e.uniform4fv(this.addr,i)}function aT(e,t){let i=at(t,this.size,4);e.uniformMatrix2fv(this.addr,!1,i)}function aP(e,t){let i=at(t,this.size,9);e.uniformMatrix3fv(this.addr,!1,i)}function aD(e,t){let i=at(t,this.size,16);e.uniformMatrix4fv(this.addr,!1,i)}function aO(e,t){e.uniform1iv(this.addr,t)}function aI(e,t){e.uniform2iv(this.addr,t)}function aR(e,t){e.uniform3iv(this.addr,t)}function aL(e,t){e.uniform4iv(this.addr,t)}function aB(e,t){e.uniform1uiv(this.addr,t)}function az(e,t){e.uniform2uiv(this.addr,t)}function aF(e,t){e.uniform3uiv(this.addr,t)}function aN(e,t){e.uniform4uiv(this.addr,t)}function aU(e,t,i){let r=this.cache,a=t.length,o=as(i,a);ai(r,o)||(e.uniform1iv(this.addr,o),ar(r,o));for(let e=0;e!==a;++e)i.setTexture2D(t[e]||s2,o[e])}function ak(e,t,i){let r=this.cache,a=t.length,o=as(i,a);ai(r,o)||(e.uniform1iv(this.addr,o),ar(r,o));for(let e=0;e!==a;++e)i.setTexture3D(t[e]||s4,o[e])}function aV(e,t,i){let r=this.cache,a=t.length,o=as(i,a);ai(r,o)||(e.uniform1iv(this.addr,o),ar(r,o));for(let e=0;e!==a;++e)i.setTextureCube(t[e]||s5,o[e])}function aj(e,t,i){let r=this.cache,a=t.length,o=as(i,a);ai(r,o)||(e.uniform1iv(this.addr,o),ar(r,o));for(let e=0;e!==a;++e)i.setTexture2DArray(t[e]||s3,o[e])}var aG=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.setValue=function(e){switch(e){case 5126:return aa;case 35664:return an;case 35665:return ao;case 35666:return al;case 35674:return ah;case 35675:return ac;case 35676:return ad;case 5124:case 35670:return au;case 35667:case 35671:return ap;case 35668:case 35672:return af;
3081case 35669:case 35673:return am;case 5125:return ag;case 36294:return av;case 36295:return ay;case 36296:return ax;case 35678:case 36198:case 36298:case 36306:case 35682:return ab;case 35679:case 36299:case 36307:return aw;case 35680:case 36300:case 36308:case 36293:return aS;case 36289:case 36303:case 36311:case 36292:return a_}}(t.type)}},aW=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.size=t.size,this.setValue=function(e){switch(e){case 5126:return aA;case 35664:return aM;case 35665:return aC;case 35666:return aE;case 35674:return aT;case 35675:return aP;case 35676:return aD;case 5124:case 35670:return aO;case 35667:case 35671:return aI;case 35668:case 35672:return aR;case 35669:case 35673:return aL;case 5125:return aB;case 36294:return az;case 36295:return aF;case 36296:return aN;case 35678:case 36198:case 36298:case 36306:case 35682:return aU;case 35679:case 36299:case 36307:return ak;case 35680:case 36300:case 36308:case 36293:return aV;case 36289:case 36303:case 36311:case 36292:return aj}}(t.type)}},aH=class{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,i){if(void 0===t)return;let r=this.seq;for(let a=0,o=r.length;a!==o;++a){let o=r[a];o.setValue(e,t[o.id],i)}}},aq=/(\w+)(\])?(\[|\.)?/g;function aX(e,t){e.seq.push(t),e.map[t.id]=t}var aY=class{constructor(e,t){this.seq=[],this.map={};let i=e.getProgramParameter(t,35718);for(let r=0;r<i;++r){let i=e.getActiveUniform(t,r),a=e.getUniformLocation(t,i.name);!function(e,t,i){let r=e.name,a=r.length;for(aq.lastIndex=0;;){let o=aq.exec(r),l=aq.lastIndex,h=o[1],c="]"===o[2],d=o[3];if(c&&(h|=0),void 0===d||"["===d&&l+2===a){aX(i,void 0===d?new aG(h,e,t):new aW(h,e,t));break}{let e=i.map[h];void 0===e&&aX(i,e=new aH(h)),i=e}}}(i,a,this)}}setValue(e,t,i,r){let a=this.map[t];void 0!==a&&a.setValue(e,i,r)}setOptional(e,t,i){let r=t[i];void 0!==r&&this.setValue(e,i,r)}static upload(e,t,i,r){for(let a=0,o=t.length;a!==o;++a){let o=t[a],l=i[o.id];!1!==l.needsUpdate&&o.setValue(e,l.value,r)}}static seqWithValue(e,t){let i=[];for(let r=0,a=e.length;r!==a;++r){let a=e[r];a.id in t&&i.push(a)}return i}};function aQ(e,t,i){let r=e.createShader(t);return e.shaderSource(r,i),e.compileShader(r),r}var aZ=0;function aK(e,t,i){let r=e.getShaderParameter(t,35713),a=e.getShaderInfoLog(t).trim();if(r&&""===a)return"";let o=/ERROR: 0:(\d+)/.exec(a);if(!o)return a;{let r=parseInt(o[1]);return i.toUpperCase()+` 3082 3083`+a+` 3084 3085`+function(e,t){let i=e.split(` 3086`),r=[],a=Math.max(t-6,0),o=Math.min(t+6,i.length);for(let e=a;e<o;e++){let a=e+1;r.push(`${a===t?">":" "} ${a}: ${i[e]}`)}return r.join(` 3087`)}(e.getShaderSource(t),r)}}function aJ(e){return""!==e}function a$(e,t){let i=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,i).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function a0(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}var a1=/^[ \t]*#include +<([\w\d./]+)>/gm;function a2(e){return e.replace(a1,a3)}function a3(e,t){let i=s_[t];if(void 0===i)throw Error("Can not resolve #include <"+t+">");return a2(i)}var a4=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function a5(e){return e.replace(a4,a6)}function a6(e,t,i,r){let a="";for(let e=parseInt(t);e<parseInt(i);e++)a+=r.replace(/\[\s*i\s*\]/g,"[ "+e+" ]").replace(/UNROLLED_LOOP_INDEX/g,e);return a}function a8(e){let t="precision "+e.precision+` float; 3088precision `+e.precision+" int;";return"highp"===e.precision?t+=` 3089#define HIGH_PRECISION`:"mediump"===e.precision?t+=` 3090#define MEDIUM_PRECISION`:"lowp"===e.precision&&(t+=` 3091#define LOW_PRECISION`),t}function a9(e,t,i,r){let a,o,l,h,c,d=e.getContext(),p=i.defines,f=i.vertexShader,m=i.fragmentShader,g=(a="SHADOWMAP_TYPE_BASIC",1===i.shadowMapType?a="SHADOWMAP_TYPE_PCF":2===i.shadowMapType?a="SHADOWMAP_TYPE_PCF_SOFT":3===i.shadowMapType&&(a="SHADOWMAP_TYPE_VSM"),a),v=function(e){let t="ENVMAP_TYPE_CUBE";if(e.envMap)switch(e.envMapMode){case 301:case 302:t="ENVMAP_TYPE_CUBE";break;case 306:t="ENVMAP_TYPE_CUBE_UV"}return t}(i),y=(o="ENVMAP_MODE_REFLECTION",i.envMap&&302===i.envMapMode&&(o="ENVMAP_MODE_REFRACTION"),o),x=function(e){let t="ENVMAP_BLENDING_NONE";if(e.envMap)switch(e.combine){case 0:t="ENVMAP_BLENDING_MULTIPLY";break;case 1:t="ENVMAP_BLENDING_MIX";break;case 2:t="ENVMAP_BLENDING_ADD"}return t}(i),b=function(e){let t=e.envMapCubeUVHeight;if(null===t)return null;let i=Math.log2(t)-2;return{texelWidth:1/(3*Math.max(Math.pow(2,i),112)),texelHeight:1/t,maxMip:i}}
3091(i),w=i.isWebGL2?"":[i.extensionDerivatives||i.envMapCubeUVHeight||i.bumpMap||i.tangentSpaceNormalMap||i.clearcoatNormalMap||i.flatShading||"physical"===i.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(i.extensionFragDepth||i.logarithmicDepthBuffer)&&i.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",i.extensionDrawBuffers&&i.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(i.extensionShaderTextureLOD||i.envMap||i.transmission)&&i.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(aJ).join(` 3092`),S=function(e){let t=[];for(let i in e){let r=e[i];!1!==r&&t.push("#define "+i+" "+r)}return t.join(` 3093`)}(p),_=d.createProgram(),A,M,C=i.glslVersion?"#version "+i.glslVersion+` 3094`:"";i.isRawShaderMaterial?((A=[S].filter(aJ).join(` 3095`)).length>0&&(A+=` 3096`),(M=[w,S].filter(aJ).join(` 3097`)).length>0&&(M+=` 3098`)):(A=[a8(i),"#define SHADER_NAME "+i.shaderName,S,i.instancing?"#define USE_INSTANCING":"",i.instancingColor?"#define USE_INSTANCING_COLOR":"",i.supportsVertexTextures?"#define VERTEX_TEXTURES":"",i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+y:"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.displacementMap&&i.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.flatShading?"#define FLAT_SHADED":"",i.skinning?"#define USE_SKINNING":"",i.morphTargets?"#define USE_MORPHTARGETS":"",i.morphNormals&&!1===i.flatShading?"#define USE_MORPHNORMALS":"",i.morphColors&&i.isWebGL2?"#define USE_MORPHCOLORS":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+i.morphTextureStride:"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_COUNT "+i.morphTargetsCount:"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+g:"",i.sizeAttenuation?"#define USE_SIZEATTENUATION":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )"," attribute vec3 morphTarget0;"," attribute vec3 morphTarget1;"," attribute vec3 morphTarget2;"," attribute vec3 morphTarget3;"," #ifdef USE_MORPHNORMALS"," attribute vec3 morphNormal0;"," attribute vec3 morphNormal1;"," attribute vec3 morphNormal2;"," attribute vec3 morphNormal3;"," #else"," attribute vec3 morphTarget4;"," attribute vec3 morphTarget5;"," attribute vec3 morphTarget6;"," attribute vec3 morphTarget7;"," #endif","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` 3099`].filter(aJ).join(` 3100`),M=[w,a8(i),"#define SHADER_NAME "+i.shaderName,S,i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.matcap?"#define USE_MATCAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+v:"",i.envMap?"#define "+y:"",i.envMap?"#define "+x:"",b?"#define CUBEUV_TEXEL_WIDTH "+b.texelWidth:"",b?"#define CUBEUV_TEXEL_HEIGHT "+b.texelHeight:"",b?"#define CUBEUV_MAX_MIP "+b.max
3100Mip+".0":"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoat?"#define USE_CLEARCOAT":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescence?"#define USE_IRIDESCENCE":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.alphaTest?"#define USE_ALPHATEST":"",i.sheen?"#define USE_SHEEN":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors||i.instancingColor?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.gradientMap?"#define USE_GRADIENTMAP":"",i.flatShading?"#define FLAT_SHADED":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+g:"",i.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",i.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==i.toneMapping?"#define TONE_MAPPING":"",0!==i.toneMapping?s_.tonemapping_pars_fragment:"",0!==i.toneMapping?function(e,t){let i;switch(t){case 1:default:i="Linear";break;case 2:i="Reinhard";break;case 3:i="OptimizedCineon";break;case 4:i="ACESFilmic";break;case 5:i="Custom"}return"vec3 "+e+"( vec3 color ) { return "+i+"ToneMapping( color ); }"}("toneMapping",i.toneMapping):"",i.dithering?"#define DITHERING":"",i.opaque?"#define OPAQUE":"",s_.encodings_pars_fragment,"vec4 linearToOutputTexel( vec4 value ) { return LinearTo"+(l=function(e){switch(e){case 3e3:default:return["Linear","( value )"];case 3001:return["sRGB","( value )"]}}(i.outputEncoding))[0]+l[1]+"; }",i.useDepthPacking?"#define DEPTH_PACKING "+i.depthPacking:"",` 3101`].filter(aJ).join(` 3102`)),f=a0(f=a$(f=a2(f),i),i),m=a0(m=a$(m=a2(m),i),i),f=a5(f),m=a5(m),i.isWebGL2&&!0!==i.isRawShaderMaterial&&(C=`#version 300 es 3103`,A=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join(` 3104`)+` 3105`+A,M=["#define varying in",i.glslVersion===tq?"":"layout(location = 0) out highp vec4 pc_fragColor;",i.glslVersion===tq?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` 3106`)+` 3107`+M);let E=C+A+f,T=C+M+m,P=aQ(d,35633,E),D=aQ(d,35632,T);if(d.attachShader(_,P),d.attachShader(_,D),void 0!==i.index0AttributeName?d.bindAttribLocation(_,0,i.index0AttributeName):!0===i.morphTargets&&d.bindAttribLocation(_,0,"position"),d.linkProgram(_),e.debug.checkShaderErrors){let e=d.getProgramInfoLog(_).trim(),t=d.getShaderInfoLog(P).trim(),i=d.getShaderInfoLog(D).trim(),r
3107=!0,a=!0;!1===d.getProgramParameter(_,35714)?(r=!1,aK(d,P,"vertex"),aK(d,D,"fragment")):""!==e||(""===t||""===i)&&(a=!1),a&&(this.diagnostics={runnable:r,programLog:e,vertexShader:{log:t,prefix:A},fragmentShader:{log:i,prefix:M}})}return d.deleteShader(P),d.deleteShader(D),this.getUniforms=function(){return void 0===h&&(h=new aY(d,_)),h},this.getAttributes=function(){return void 0===c&&(c=function(e,t){let i={},r=e.getProgramParameter(t,35721);for(let a=0;a<r;a++){let r=e.getActiveAttrib(t,a),o=r.name,l=1;35674===r.type&&(l=2),35675===r.type&&(l=3),35676===r.type&&(l=4),i[o]={type:r.type,location:e.getAttribLocation(t,o),locationSize:l}}return i}(d,_)),c},this.destroy=function(){r.releaseStatesOfProgram(this),d.deleteProgram(_),this.program=void 0},this.name=i.shaderName,this.id=aZ++,this.cacheKey=t,this.usedTimes=1,this.program=_,this.vertexShader=P,this.fragmentShader=D,this}var a7=0,ne=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,i=e.fragmentShader,r=this._getShaderStage(t),a=this._getShaderStage(i),o=this._getShaderCacheForMaterial(e);return!1===o.has(r)&&(o.add(r),r.usedTimes++),!1===o.has(a)&&(o.add(a),a.usedTimes++),this}remove(e){for(let t of this.materialCache.get(e))t.usedTimes--,0===t.usedTimes&&this.shaderCache.delete(t.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,i=t.get(e);return void 0===i&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){let t=this.shaderCache,i=t.get(e);return void 0===i&&(i=new nt(e),t.set(e,i)),i}},nt=class{constructor(e){this.id=a7++,this.code=e,this.usedTimes=0}};function ni(e,t,i,r,a,o,l){let h=new ro,c=new ne,d=[],p=a.isWebGL2,f=a.logarithmicDepthBuffer,m=a.vertexTextures,g=a.precision,v={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};return{getParameters:function(o,h,d,y,x){let b,w,S,_,A=y.fog,M=x.geometry,C=o.isMeshStandardMaterial?y.environment:null,E=(o.isMeshStandardMaterial?i:t).get(o.envMap||C),T=E&&306===E.mapping?E.image.height:null,P=v[o.type];null!==o.precision&&(g=a.getMaxPrecision(o.precision),o.precision);let D=M.morphAttributes.position||M.morphAttributes.normal||M.morphAttributes.color,O=void 0!==D?D.length:0,I=0;if(void 0!==M.morphAttributes.position&&(I=1),void 0!==M.morphAttributes.normal&&(I=2),void 0!==M.morphAttributes.color&&(I=3),P){let e=sM[P];b=e.vertexShader,w=e.fragmentShader}else b=o.vertexShader,w=o.fragmentShader,c.update(o),S=c.getVertexShaderID(o),_=c.getFragmentShaderID(o);let R=e.getRenderTarget(),L=o.alphaTest>0,B=o.clearcoat>0,z=o.iridescence>0;return{isWebGL2:p,shaderID:P,shaderName:o.type,vertexShader:b,fragmentShader:w,defines:o.defines,customVertexShaderID:S,customFragmentShaderID:_,isRawShaderMaterial:!0===o.isRawShaderMaterial,glslVersion:o.glslVersion,precision:g,instancing:!0===x.isInstancedMesh,instancingColor:!0===x.isInstancedMesh&&null!==x.instanceColor,supportsVertexTextures:m,outputEncoding:null===R?e.outputEncoding:!0===R.isXRRenderTarget?R.texture.encoding:3e3,map:!!o.map,matcap:!!o.matcap,envMap:!!E,envMapMode:E&&E.mapping,envMapCubeUVHeight:T,lightMap:!!o.lightMap,aoMap:!!o.aoMap,emissiveMap:!!o.emissiveMap,bumpMap:!!o.bumpMap,normalMap:!!o.normalMap,objectSpaceNormalMap:1===o.normalMapType,tangentSpaceNormalMap:0===o.normalMapType,decodeVideoTexture:!!o.map&&!0===o.map.isVideoTexture&&3001===o.map.encoding,clearcoat:B,clearcoatMap:B&&!!o.clearcoatMap,clearcoatRoughnessMap:B&&!!o.clearcoatRoughnessMap,clearcoatNormalMap:B&&!!o.clearcoatNormalMap,iridescence:z,iridescenceMap:z&&!!o.iridescenceMap,iridescenceThicknessMap:z&&!!o.iridescenceThicknessMap,displacementMap:!!o.displacementMap,roughnessMap:!!o.roughnessMap,metalnessMap:!!o.metalnessMap,specularMap:!!o.specularMap,specularIntensityMap:!!o.specularIntensityMap,specularColorMap:!!o.specularColorMap,opaque:!1===o.transparent&&1===o.blending,alphaMap:!!o.alphaMap,alphaTest:L,gradientMap:!!o.gradientMap,sheen:o.sheen>0,sheenColorMap:!!o.sheenColorMap,sheenRoughnessMap:!!o.sheenRoughnessMap,transmission:o.transmission>0,transmissionMap:!!o.transmissionMap,thicknessMap:!!o.thicknessMap,combine:o.combine,vertexTangents:!!o.normalMap&&!!M.attributes.tangent,vertexColors:o.vertexColors,vertexAlphas:!0===o.vertexColors&&!!M.attributes.color&&4===M.attributes.color.itemSize,vertexUvs:!!o.map||!!o.bumpMap||!!o.normalMap||!!o.specularMap||!!o.alphaMap||!!o.emissiveMap||!!o.roughnessMap||!!o.metalnessMap||!!o.clearcoatMap||!!o.clearcoatRoughnessMap||!!o.clearcoatNormalMap||!!o.iridescenceMap||!!o.iridescenceThicknessMap||!!o.displacementMap||!!o.transmissionMap||!!o.thicknessMap||!!o.specularIntensityMap||!!o.specularColorMap||!!o.sheenColorMap||!!o.sheenRoughnessMap,uvsVertexOnly:!(o.map||o.bumpMap||o.normalMap||o.specularMap||o.alphaMap||o.emissiveMap||o.roughnessMap||o.metalnessMap||o.clearcoatNormalMap||o.iridescenceMap||o.iridescenceThicknessMap||o.transmission>0||o.transmissionMap||o.thicknessMap||o.specularIntensityMap||o.specularColorMap||o.sheen>0||o.sheenColorMap||o.sheenRoughnessMap)&&!!o.displacementMap,fog:!!A,useFog:!0===o.fog,fogExp2:A&&A.isFogExp2,flatShading:!!o.flatShading,sizeAttenuation:o.sizeAttenuation,logarithmicDepthBuffer:f,skinning:!0===x.isSkinnedMesh,morphTargets:void 0!==M.morphAttributes.position,morphNormals:void 0!==M.morphAttributes.normal,morphColors:void 0!==M.morphAttributes.color,morphTargetsCount:O,morphTextureStride:I,numDirLights:h.directional.length,numPointLights:h.point.length,numSpotLights:h.spot.length,numSpotLightMaps:h.spotLightMap.length,numRectAreaLights:h.rectArea.length,numHemiLights:h.hemi.length,numDirLightShadows:h.directionalShadowMap.length,numPointLightShadows:h.pointShadowMap.length,numSpotLightShadows:h.spotShadowMap.length,numSpotLightShadowsWithMaps:h.numSpotLightShadowsWithMaps,numClippingPlanes:l.numPlanes,numClipIntersection:l.numIntersection,dithering:o.dithering,shadowMapEnabled:e.shadowMap.enabled&&d.length>0,shadowMapType:e.shadowMap.type,toneMapping:o.toneMapped?e.toneMapping:0,physicallyCorrectLights:e.physicallyCorrectLights,premultipliedAlpha:o.premultipliedAlpha,doubleSided:2===o.side,flipSided:1===o.side,useDepthPacking:!!o.depthPacking,depthPacking:o.depthPacking||0,index0AttributeName:o.index0AttributeName,extensionDerivatives:o.extensions&&o.extensions.derivatives,extensionFragDepth:o.extensions&&o.extensions.fragDepth,extensionDrawBuffers:o.extensions&&o.extensions.drawBuffers,extensionShaderTextureLOD:o.extensions&&o.extensions.shaderTextureLOD,rendererExtensionFragDepth:
3107p||r.has("EXT_frag_depth"),rendererExtensionDrawBuffers:p||r.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:p||r.has("EXT_shader_texture_lod"),customProgramCacheKey:o.customProgramCacheKey()}},getProgramCacheKey:function(t){var i,r,a,o;let l=[];if(t.shaderID?l.push(t.shaderID):(l.push(t.customVertexShaderID),l.push(t.customFragmentShaderID)),void 0!==t.defines)for(let e in t.defines)l.push(e),l.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(i=l,r=t,i.push(r.precision),i.push(r.outputEncoding),i.push(r.envMapMode),i.push(r.envMapCubeUVHeight),i.push(r.combine),i.push(r.vertexUvs),i.push(r.fogExp2),i.push(r.sizeAttenuation),i.push(r.morphTargetsCount),i.push(r.morphAttributeCount),i.push(r.numDirLights),i.push(r.numPointLights),i.push(r.numSpotLights),i.push(r.numSpotLightMaps),i.push(r.numHemiLights),i.push(r.numRectAreaLights),i.push(r.numDirLightShadows),i.push(r.numPointLightShadows),i.push(r.numSpotLightShadows),i.push(r.numSpotLightShadowsWithMaps),i.push(r.shadowMapType),i.push(r.toneMapping),i.push(r.numClippingPlanes),i.push(r.numClipIntersection),i.push(r.depthPacking),a=l,o=t,h.disableAll(),o.isWebGL2&&h.enable(0),o.supportsVertexTextures&&h.enable(1),o.instancing&&h.enable(2),o.instancingColor&&h.enable(3),o.map&&h.enable(4),o.matcap&&h.enable(5),o.envMap&&h.enable(6),o.lightMap&&h.enable(7),o.aoMap&&h.enable(8),o.emissiveMap&&h.enable(9),o.bumpMap&&h.enable(10),o.normalMap&&h.enable(11),o.objectSpaceNormalMap&&h.enable(12),o.tangentSpaceNormalMap&&h.enable(13),o.clearcoat&&h.enable(14),o.clearcoatMap&&h.enable(15),o.clearcoatRoughnessMap&&h.enable(16),o.clearcoatNormalMap&&h.enable(17),o.iridescence&&h.enable(18),o.iridescenceMap&&h.enable(19),o.iridescenceThicknessMap&&h.enable(20),o.displacementMap&&h.enable(21),o.specularMap&&h.enable(22),o.roughnessMap&&h.enable(23),o.metalnessMap&&h.enable(24),o.gradientMap&&h.enable(25),o.alphaMap&&h.enable(26),o.alphaTest&&h.enable(27),o.vertexColors&&h.enable(28),o.vertexAlphas&&h.enable(29),o.vertexUvs&&h.enable(30),o.vertexTangents&&h.enable(31),o.uvsVertexOnly&&h.enable(32),a.push(h.mask),h.disableAll(),o.fog&&h.enable(0),o.useFog&&h.enable(1),o.flatShading&&h.enable(2),o.logarithmicDepthBuffer&&h.enable(3),o.skinning&&h.enable(4),o.morphTargets&&h.enable(5),o.morphNormals&&h.enable(6),o.morphColors&&h.enable(7),o.premultipliedAlpha&&h.enable(8),o.shadowMapEnabled&&h.enable(9),o.physicallyCorrectLights&&h.enable(10),o.doubleSided&&h.enable(11),o.flipSided&&h.enable(12),o.useDepthPacking&&h.enable(13),o.dithering&&h.enable(14),o.specularIntensityMap&&h.enable(15),o.specularColorMap&&h.enable(16),o.transmission&&h.enable(17),o.transmissionMap&&h.enable(18),o.thicknessMap&&h.enable(19),o.sheen&&h.enable(20),o.sheenColorMap&&h.enable(21),o.sheenRoughnessMap&&h.enable(22),o.decodeVideoTexture&&h.enable(23),o.opaque&&h.enable(24),a.push(h.mask),l.push(e.outputEncoding)),l.push(t.customProgramCacheKey),l.join()},getUniforms:function(e){let t=v[e.type],i;return i=t?si(sM[t].uniforms):e.uniforms},acquireProgram:function(t,i){let r;for(let e=0,t=d.length;e<t;e++){let t=d[e];if(t.cacheKey===i){r=t,++r.usedTimes;break}}return void 0===r&&(r=new a9(e,i,t,o),d.push(r)),r},releaseProgram:function(e){if(0==--e.usedTimes){let t=d.indexOf(e);d[t]=d[d.length-1],d.pop(),e.destroy()}},releaseShaderCache:function(e){c.remove(e)},programs:d,dispose:function(){c.dispose()}}}function nr(){let e=new WeakMap;return{get:function(t){let i=e.get(t);return void 0===i&&(i={},e.set(t,i)),i},remove:function(t){e.delete(t)},update:function(t,i,r){e.get(t)[i]=r},dispose:function(){e=new WeakMap}}}function ns(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.material.id!==t.material.id?e.material.id-t.material.id:e.z!==t.z?e.z-t.z:e.id-t.id}function na(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function nn(){let e=[],t=0,i=[],r=[],a=[];function o(i,r,a,o,l,h){let c=e[t];return void 0===c?(c={id:i.id,object:i,geometry:r,material:a,groupOrder:o,renderOrder:i.renderOrder,z:l,group:h},e[t]=c):(c.id=i.id,c.object=i,c.geometry=r,c.material=a,c.groupOrder=o,c.renderOrder=i.renderOrder,c.z=l,c.group=h),t++,c}return{opaque:i,transmissive:r,transparent:a,init:function(){t=0,i.length=0,r.length=0,a.length=0},push:function(e,t,l,h,c,d){let p=o(e,t,l,h,c,d);l.transmission>0?r.push(p):!0===l.transparent?a.push(p):i.push(p)},unshift:function(e,t,l,h,c,d){let p=o(e,t,l,h,c,d);l.transmission>0?r.unshift(p):!0===l.transparent?a.unshift(p):i.unshift(p)},finish:function(){for(let i=t,r=e.length;i<r;i++){let t=e[i];if(null===t.id)break;t.id=null,t.object=null,t.geometry=null,t.material=null,t.group=null}},sort:function(e,t){i.length>1&&i.sort(e||ns),r.length>1&&r.sort(t||na),a.length>1&&a.sort(t||na)}}}function no(){let e=new WeakMap;return{get:function(t,i){let r=e.get(t),a;return void 0===r?(a=new nn,e.set(t,[a])):i>=r.length?(a=new nn,r.push(a)):a=r[i],a},dispose:function(){e=new WeakMap}}}function nl(){let e={};return{get:function(t){let i;if(void 0!==e[t.id])return e[t.id];switch(t.type){case"DirectionalLight":i={direction:new iD,color:new iv};break;case"SpotLight":i={position:new iD,direction:new iD,color:new iv,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new iD,color:new iv,distance:0,decay:0};break;case"HemisphereLight":i={direction:new iD,skyColor:new iv,groundColor:new iv};break;case"RectAreaLight":i={color:new iv,position:new iD,halfWidth:new iD,halfHeight:new iD}}return e[t.id]=i,i}}}var nh=0;function nc(e,t){return 2*!!t.castShadow-2*!!e.castShadow+ +!!t.map-!!e.map}
3107function nd(e,t){let i,r=new nl,a=(i={},{get:function(e){let t;if(void 0!==i[e.id])return i[e.id];switch(e.type){case"DirectionalLight":case"SpotLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new t9};break;case"PointLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new t9,shadowCameraNear:1,shadowCameraFar:1e3}}return i[e.id]=t,t}}),o={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let e=0;e<9;e++)o.probe.push(new iD);let l=new iD,h=new i6,c=new i6;return{setup:function(i,l){let h=0,c=0,d=0;for(let e=0;e<9;e++)o.probe[e].set(0,0,0);let p=0,f=0,m=0,g=0,v=0,y=0,x=0,b=0,w=0,S=0;i.sort(nc);let _=!0!==l?Math.PI:1;for(let e=0,t=i.length;e<t;e++){let t=i[e],l=t.color,A=t.intensity,M=t.distance,C=t.shadow&&t.shadow.map?t.shadow.map.texture:null;if(t.isAmbientLight)h+=l.r*A*_,c+=l.g*A*_,d+=l.b*A*_;else if(t.isLightProbe)for(let e=0;e<9;e++)o.probe[e].addScaledVector(t.sh.coefficients[e],A);else if(t.isDirectionalLight){let e=r.get(t);if(e.color.copy(t.color).multiplyScalar(t.intensity*_),t.castShadow){let e=t.shadow,i=a.get(t);i.shadowBias=e.bias,i.shadowNormalBias=e.normalBias,i.shadowRadius=e.radius,i.shadowMapSize=e.mapSize,o.directionalShadow[p]=i,o.directionalShadowMap[p]=C,o.directionalShadowMatrix[p]=t.shadow.matrix,y++}o.directional[p]=e,p++}else if(t.isSpotLight){let e=r.get(t);e.position.setFromMatrixPosition(t.matrixWorld),e.color.copy(l).multiplyScalar(A*_),e.distance=M,e.coneCos=Math.cos(t.angle),e.penumbraCos=Math.cos(t.angle*(1-t.penumbra)),e.decay=t.decay,o.spot[m]=e;let i=t.shadow;if(t.map&&(o.spotLightMap[w]=t.map,w++,i.updateMatrices(t),t.castShadow&&S++),o.spotLightMatrix[m]=i.matrix,t.castShadow){let e=a.get(t);e.shadowBias=i.bias,e.shadowNormalBias=i.normalBias,e.shadowRadius=i.radius,e.shadowMapSize=i.mapSize,o.spotShadow[m]=e,o.spotShadowMap[m]=C,b++}m++}else if(t.isRectAreaLight){let e=r.get(t);e.color.copy(l).multiplyScalar(A),e.halfWidth.set(.5*t.width,0,0),e.halfHeight.set(0,.5*t.height,0),o.rectArea[g]=e,g++}else if(t.isPointLight){let e=r.get(t);if(e.color.copy(t.color).multiplyScalar(t.intensity*_),e.distance=t.distance,e.decay=t.decay,t.castShadow){let e=t.shadow,i=a.get(t);i.shadowBias=e.bias,i.shadowNormalBias=e.normalBias,i.shadowRadius=e.radius,i.shadowMapSize=e.mapSize,i.shadowCameraNear=e.camera.near,i.shadowCameraFar=e.camera.far,o.pointShadow[f]=i,o.pointShadowMap[f]=C,o.pointShadowMatrix[f]=t.shadow.matrix,x++}o.point[f]=e,f++}else if(t.isHemisphereLight){let e=r.get(t);e.skyColor.copy(t.color).multiplyScalar(A*_),e.groundColor.copy(t.groundColor).multiplyScalar(A*_),o.hemi[v]=e,v++}}g>0&&(t.isWebGL2||!0===e.has("OES_texture_float_linear")?(o.rectAreaLTC1=sA.LTC_FLOAT_1,o.rectAreaLTC2=sA.LTC_FLOAT_2):!0===e.has("OES_texture_half_float_linear")&&(o.rectAreaLTC1=sA.LTC_HALF_1,o.rectAreaLTC2=sA.LTC_HALF_2)),o.ambient[0]=h,o.ambient[1]=c,o.ambient[2]=d;let A=o.hash;(A.directionalLength!==p||A.pointLength!==f||A.spotLength!==m||A.rectAreaLength!==g||A.hemiLength!==v||A.numDirectionalShadows!==y||A.numPointShadows!==x||A.numSpotShadows!==b||A.numSpotMaps!==w)&&(o.directional.length=p,o.spot.length=m,o.rectArea.length=g,o.point.length=f,o.hemi.length=v,o.directionalShadow.length=y,o.directionalShadowMap.length=y,o.pointShadow.length=x,o.pointShadowMap.length=x,o.spotShadow.length=b,o.spotShadowMap.length=b,o.directionalShadowMatrix.length=y,o.pointShadowMatrix.length=x,o.spotLightMatrix.length=b+w-S,o.spotLightMap.length=w,o.numSpotLightShadowsWithMaps=S,A.directionalLength=p,A.pointLength=f,A.spotLength=m,A.rectAreaLength=g,A.hemiLength=v,A.numDirectionalShadows=y,A.numPointShadows=x,A.numSpotShadows=b,A.numSpotMaps=w,o.version=nh++)},setupView:function(e,t){let i=0,r=0,a=0,d=0,p=0,f=t.matrixWorldInverse;for(let t=0,m=e.length;t<m;t++){let m=e[t];if(m.isDirectionalLight){let e=o.directional[i];e.direction.setFromMatrixPosition(m.matrixWorld),l.setFromMatrixPosition(m.target.matrixWorld),e.direction.sub(l),e.direction.transformDirection(f),i++}else if(m.isSpotLight){let e=o.spot[a];e.position.setFromMatrixPosition(m.matrixWorld),e.position.applyMatrix4(f),e.direction.setFromMatrixPosition(m.matrixWorld),l.setFromMatrixPosition(m.target.matrixWorld),e.direction.sub(l),e.direction.transformDirection(f),a++}else if(m.isRectAreaLight){let e=o.rectArea[d];e.position.setFromMatrixPosition(m.matrixWorld),e.position.applyMatrix4(f),c.identity(),h.copy(m.matrixWorld),h.premultiply(f),c.extractRotation(h),e.halfWidth.set(.5*m.width,0,0),e.halfHeight.set(0,.5*m.height,0),e.halfWidth.applyMatrix4(c),e.halfHeight.applyMatrix4(c),d++}else if(m.isPointLight){let e=o.point[r];e.position.setFromMatrixPosition(m.matrixWorld),e.position.applyMatrix4(f),r++}else if(m.isHemisphereLight){let e=o.hemi[p];e.direction.setFromMatrixPosition(m.matrixWorld),e.direction.transformDirection(f),p++}}},state:o}}function nu(e,t){let i=new nd(e,t),r=[],a=[];return{init:function(){r.length=0,a.length=0},state:{lightsArray:r,shadowsArray:a,lights:i},setupLights:function(e){i.setup(r,e)},setupLightsView:function(e){i.setupView(r,e)},pushLight:function(e){r.push(e)},pushShadow:function(e){a.push(e)}}}function np(e,t){let i=new WeakMap;return{get:function(r,a=0){let o=i.get(r),l;return void 0===o?(l=new nu(e,t),i.set(r,[l])):a>=o.length?(l=new nu(e,t),o.push(l)):l=o[a],l},dispose:function(){i=new WeakMap}}}var nf=class extends rL{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},nm=class extends rL{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.referencePosition=new iD,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.referencePosition.copy(e.referencePosition),this.nearDistance=e.nearDistance,this.farDistance=e.farDistance,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}},ng=`void main() { 3108 gl_Position = vec4( position, 1.0 ); 3109}`,nv=`uniform sampler2D shadow_pass; 3110uniform vec2 resolution; 3111uniform float radius; 3112#include <packing> 3113void main() {
3114 const float samples = float( VSM_SAMPLES ); 3115 float mean = 0.0; 3116 float squared_mean = 0.0; 3117 float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 ); 3118 float uvStart = samples <= 1.0 ? 0.0 : - 1.0; 3119 for ( float i = 0.0; i < samples; i ++ ) { 3120 float uvOffset = uvStart + i * uvStride; 3121 #ifdef HORIZONTAL_PASS 3122 vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) ); 3123 mean += distribution.x; 3124 squared_mean += distribution.y * distribution.y + distribution.x * distribution.x; 3125 #else 3126 float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) ); 3127 mean += depth; 3128 squared_mean += depth * depth; 3129 #endif 3130 } 3131 mean = mean / samples; 3132 squared_mean = squared_mean / samples; 3133 float std_dev = sqrt( squared_mean - mean * mean ); 3134 gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); 3135}`;function ny(e,t,i){let r=new sx,a=new t9,o=new t9,l=new iA,h=new nf({depthPacking:3201}),c=new nm,d={},p=i.maxTextureSize,f={0:1,1:0,2:2},m=new so({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new t9},radius:{value:4}},vertexShader:ng,fragmentShader:nv}),g=m.clone();g.defines.HORIZONTAL_PASS=1;let v=new rQ;v.setAttribute("position",new rN(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let y=new r7(v,m),x=this;function b(t,i,r,a,o,l){let p=null,m=!0===r.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==m)p=m;else if(p=!0===r.isPointLight?c:h,e.localClippingEnabled&&!0===i.clipShadows&&Array.isArray(i.clippingPlanes)&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0||i.map&&i.alphaTest>0){let e=p.uuid,t=i.uuid,r=d[e];void 0===r&&(r={},d[e]=r);let a=r[t];void 0===a&&(a=p.clone(),r[t]=a),p=a}return p.visible=i.visible,p.wireframe=i.wireframe,3===l?p.side=null!==i.shadowSide?i.shadowSide:i.side:p.side=null!==i.shadowSide?i.shadowSide:f[i.side],p.alphaMap=i.alphaMap,p.alphaTest=i.alphaTest,p.map=i.map,p.clipShadows=i.clipShadows,p.clippingPlanes=i.clippingPlanes,p.clipIntersection=i.clipIntersection,p.displacementMap=i.displacementMap,p.displacementScale=i.displacementScale,p.displacementBias=i.displacementBias,p.wireframeLinewidth=i.wireframeLinewidth,p.linewidth=i.linewidth,!0===r.isPointLight&&!0===p.isMeshDistanceMaterial&&(p.referencePosition.setFromMatrixPosition(r.matrixWorld),p.nearDistance=a,p.farDistance=o),p}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(i,h,c){if(!1===x.enabled||!1===x.autoUpdate&&!1===x.needsUpdate||0===i.length)return;let d=e.getRenderTarget(),f=e.getActiveCubeFace(),v=e.getActiveMipmapLevel(),w=e.state;w.setBlending(0),w.buffers.color.setClear(1,1,1,1),w.buffers.depth.setTest(!0),w.setScissorTest(!1);for(let d=0,f=i.length;d<f;d++){let f=i[d],v=f.shadow;if(void 0===v||!1===v.autoUpdate&&!1===v.needsUpdate)continue;a.copy(v.mapSize);let x=v.getFrameExtents();if(a.multiply(x),o.copy(v.mapSize),(a.x>p||a.y>p)&&(a.x>p&&(o.x=Math.floor(p/x.x),a.x=o.x*x.x,v.mapSize.x=o.x),a.y>p&&(o.y=Math.floor(p/x.y),a.y=o.y*x.y,v.mapSize.y=o.y)),null===v.map){let e=3!==this.type?{minFilter:1003,magFilter:1003}:{};v.map=new iM(a.x,a.y,e),v.map.texture.name=f.name+".shadowMap",v.camera.updateProjectionMatrix()}e.setRenderTarget(v.map),e.clear();let S=v.getViewportCount();for(let i=0;i<S;i++){let a=v.getViewport(i);l.set(o.x*a.x,o.y*a.y,o.x*a.z,o.y*a.w),w.viewport(l),v.updateMatrices(f,i),r=v.getFrustum(),function i(a,o,l,h,c){if(!1===a.visible)return;if(a.layers.test(o.layers)&&(a.isMesh||a.isLine||a.isPoints)&&(a.castShadow||a.receiveShadow&&3===c)&&(!a.frustumCulled||r.intersectsObject(a))){a.modelViewMatrix.multiplyMatrices(l.matrixWorldInverse,a.matrixWorld);let i=t.update(a),r=a.material;if(Array.isArray(r)){let t=i.groups;for(let o=0,d=t.length;o<d;o++){let d=t[o],p=r[d.materialIndex];if(p&&p.visible){let t=b(a,p,h,l.near,l.far,c);e.renderBufferDirect(l,null,i,t,a,d)}}}else if(r.visible){let t=b(a,r,h,l.near,l.far,c);e.renderBufferDirect(l,null,i,t,a,null)}}let d=a.children;for(let e=0,t=d.length;e<t;e++)i(d[e],o,l,h,c)}(h,c,v.camera,f,this.type)}!0!==v.isPointLightShadow&&3===this.type&&function(i,r){let o=t.update(y);m.defines.VSM_SAMPLES!==i.blurSamples&&(m.defines.VSM_SAMPLES=i.blurSamples,g.defines.VSM_SAMPLES=i.blurSamples,m.needsUpdate=!0,g.needsUpdate=!0),null===i.mapPass&&(i.mapPass=new iM(a.x,a.y)),m.uniforms.shadow_pass.value=i.map.texture,m.uniforms.resolution.value=i.mapSize,m.uniforms.radius.value=i.radius,e.setRenderTarget(i.mapPass),e.clear(),e.renderBufferDirect(r,null,o,m,y,null),g.uniforms.shadow_pass.value=i.mapPass.texture,g.uniforms.resolution.value=i.mapSize,g.uniforms.radius.value=i.radius,e.setRenderTarget(i.map),e.clear(),e.renderBufferDirect(r,null,o,g,
3135y,null)}(v,c),v.needsUpdate=!1}x.needsUpdate=!1,e.setRenderTarget(d,f,v)}}function nx(e,t,i){let r=i.isWebGL2,a=new function(){let t=!1,i=new iA,r=null,a=new iA(0,0,0,0);return{setMask:function(i){r===i||t||(e.colorMask(i,i,i,i),r=i)},setLocked:function(e){t=e},setClear:function(t,r,o,l,h){!0===h&&(t*=l,r*=l,o*=l),i.set(t,r,o,l),!1===a.equals(i)&&(e.clearColor(t,r,o,l),a.copy(i))},reset:function(){t=!1,r=null,a.set(-1,0,0,0)}}},o=new function(){let t=!1,i=null,r=null,a=null;return{setTest:function(e){e?j(2929):G(2929)},setMask:function(r){i===r||t||(e.depthMask(r),i=r)},setFunc:function(t){if(r!==t){switch(t){case 0:e.depthFunc(512);break;case 1:e.depthFunc(519);break;case 2:e.depthFunc(513);break;case 3:default:e.depthFunc(515);break;case 4:e.depthFunc(514);break;case 5:e.depthFunc(518);break;case 6:e.depthFunc(516);break;case 7:e.depthFunc(517)}r=t}},setLocked:function(e){t=e},setClear:function(t){a!==t&&(e.clearDepth(t),a=t)},reset:function(){t=!1,i=null,r=null,a=null}}},l=new function(){let t=!1,i=null,r=null,a=null,o=null,l=null,h=null,c=null,d=null;return{setTest:function(e){t||(e?j(2960):G(2960))},setMask:function(r){i===r||t||(e.stencilMask(r),i=r)},setFunc:function(t,i,l){(r!==t||a!==i||o!==l)&&(e.stencilFunc(t,i,l),r=t,a=i,o=l)},setOp:function(t,i,r){(l!==t||h!==i||c!==r)&&(e.stencilOp(t,i,r),l=t,h=i,c=r)},setLocked:function(e){t=e},setClear:function(t){d!==t&&(e.clearStencil(t),d=t)},reset:function(){t=!1,i=null,r=null,a=null,o=null,l=null,h=null,c=null,d=null}}},h=new WeakMap,c=new WeakMap,d={},p={},f=new WeakMap,m=[],g=null,v=!1,y=null,x=null,b=null,w=null,S=null,_=null,A=null,M=!1,C=null,E=null,T=null,P=null,D=null,O=e.getParameter(35661),I=!1,R=e.getParameter(7938);-1!==R.indexOf("WebGL")?I=parseFloat(/^WebGL (\d)/.exec(R)[1])>=1:-1!==R.indexOf("OpenGL ES")&&(I=parseFloat(/^OpenGL ES (\d)/.exec(R)[1])>=2);let L=null,B={},z=e.getParameter(3088),F=e.getParameter(2978),N=new iA().fromArray(z),U=new iA().fromArray(F);function k(t,i,r){let a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,10241,9728),e.texParameteri(t,10240,9728);for(let t=0;t<r;t++)e.texImage2D(i+t,0,6408,1,1,0,6408,5121,a);return o}let V={};function j(t){!0!==d[t]&&(e.enable(t),d[t]=!0)}function G(t){!1!==d[t]&&(e.disable(t),d[t]=!1)}V[3553]=k(3553,3553,1),V[34067]=k(34067,34069,6),a.setClear(0,0,0,1),o.setClear(1),l.setClear(0),j(2929),o.setFunc(3),X(!1),Y(1),j(2884),q(0);let W={100:32774,101:32778,102:32779};if(r)W[103]=32775,W[104]=32776;else{let e=t.get("EXT_blend_minmax");null!==e&&(W[103]=e.MIN_EXT,W[104]=e.MAX_EXT)}let H={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function q(t,i,r,a,o,l,h,c){if(0===t){!0===v&&(G(3042),v=!1);return}if(!1===v&&(j(3042),v=!0),5!==t){if(t!==y||c!==M){if((100!==x||100!==S)&&(e.blendEquation(32774),x=100,S=100),c)switch(t){case 1:e.blendFuncSeparate(1,771,1,771);break;case 2:e.blendFunc(1,1);break;case 3:e.blendFuncSeparate(0,769,0,1);break;case 4:e.blendFuncSeparate(0,768,0,770)}else switch(t){case 1:e.blendFuncSeparate(770,771,1,771);break;case 2:e.blendFunc(770,1);break;case 3:e.blendFuncSeparate(0,769,0,1);break;case 4:e.blendFunc(0,768)}b=null,w=null,_=null,A=null,y=t,M=c}return}o=o||i,l=l||r,h=h||a,(i!==x||o!==S)&&(e.blendEquationSeparate(W[i],W[o]),x=i,S=o),(r!==b||a!==w||l!==_||h!==A)&&(e.blendFuncSeparate(H[r],H[a],H[l],H[h]),b=r,w=a,_=l,A=h),y=t,M=!1}function X(t){C!==t&&(t?e.frontFace(2304):e.frontFace(2305),C=t)}function Y(t){0!==t?(j(2884),t!==E&&(1===t?e.cullFace(1029):2===t?e.cullFace(1028):e.cullFace(1032))):G(2884),E=t}function Q(t,i,r){t?(j(32823),(P!==i||D!==r)&&(e.polygonOffset(i,r),P=i,D=r)):G(32823)}return{buffers:{color:a,depth:o,stencil:l},enable:j,disable:G,bindFramebuffer:function(t,i){return p[t]!==i&&(e.bindFramebuffer(t,i),p[t]=i,r&&(36009===t&&(p[36160]=i),36160===t&&(p[36009]=i)),!0)},drawBuffers:function(r,a){let o=m,l=!1;if(r)if(void 0===(o=f.get(a))&&(o=[],f.set(a,o)),r.isWebGLMultipleRenderTargets){let e=r.texture;if(o.length!==e.length||36064!==o[0]){for(let t=0,i=e.length;t<i;t++)o[t]=36064+t;o.length=e.length,l=!0}}else 36064!==o[0]&&(o[0]=36064,l=!0);else 1029!==o[0]&&(o[0]=1029,l=!0);
3135l&&(i.isWebGL2?e.drawBuffers(o):t.get("WEBGL_draw_buffers").drawBuffersWEBGL(o))},useProgram:function(t){return g!==t&&(e.useProgram(t),g=t,!0)},setBlending:q,setMaterial:function(e,t){2===e.side?G(2884):j(2884);let i=1===e.side;t&&(i=!i),X(i),1===e.blending&&!1===e.transparent?q(0):q(e.blending,e.blendEquation,e.blendSrc,e.blendDst,e.blendEquationAlpha,e.blendSrcAlpha,e.blendDstAlpha,e.premultipliedAlpha),o.setFunc(e.depthFunc),o.setTest(e.depthTest),o.setMask(e.depthWrite),a.setMask(e.colorWrite);let r=e.stencilWrite;l.setTest(r),r&&(l.setMask(e.stencilWriteMask),l.setFunc(e.stencilFunc,e.stencilRef,e.stencilFuncMask),l.setOp(e.stencilFail,e.stencilZFail,e.stencilZPass)),Q(e.polygonOffset,e.polygonOffsetFactor,e.polygonOffsetUnits),!0===e.alphaToCoverage?j(32926):G(32926)},setFlipSided:X,setCullFace:Y,setLineWidth:function(t){t!==T&&(I&&e.lineWidth(t),T=t)},setPolygonOffset:Q,setScissorTest:function(e){e?j(3089):G(3089)},activeTexture:function(t){void 0===t&&(t=33984+O-1),L!==t&&(e.activeTexture(t),L=t)},bindTexture:function(t,i,r){void 0===r&&(r=null===L?33984+O-1:L);let a=B[r];void 0===a&&(a={type:void 0,texture:void 0},B[r]=a),(a.type!==t||a.texture!==i)&&(L!==r&&(e.activeTexture(r),L=r),e.bindTexture(t,i||V[t]),a.type=t,a.texture=i)},unbindTexture:function(){let t=B[L];void 0!==t&&void 0!==t.type&&(e.bindTexture(t.type,null),t.type=void 0,t.texture=void 0)},compressedTexImage2D:function(){try{e.compressedTexImage2D.apply(e,arguments)}catch{}},compressedTexImage3D:function(){try{e.compressedTexImage3D.apply(e,arguments)}catch{}},texImage2D:function(){try{e.texImage2D.apply(e,arguments)}catch{}},texImage3D:function(){try{e.texImage3D.apply(e,arguments)}catch{}},updateUBOMapping:function(t,i){let r=c.get(i);void 0===r&&(r=new WeakMap,c.set(i,r));let a=r.get(t);void 0===a&&(a=e.getUniformBlockIndex(i,t.name),r.set(t,a))},uniformBlockBinding:function(t,i){let r=c.get(i).get(t);h.get(i)!==r&&(e.uniformBlockBinding(i,r,t.__bindingPointIndex),h.set(i,r))},texStorage2D:function(){try{e.texStorage2D.apply(e,arguments)}catch{}},texStorage3D:function(){try{e.texStorage3D.apply(e,arguments)}catch{}},texSubImage2D:function(){try{e.texSubImage2D.apply(e,arguments)}catch{}},texSubImage3D:function(){try{e.texSubImage3D.apply(e,arguments)}catch{}},compressedTexSubImage2D:function(){try{e.compressedTexSubImage2D.apply(e,arguments)}catch{}},compressedTexSubImage3D:function(){try{e.compressedTexSubImage3D.apply(e,arguments)}catch{}},scissor:function(t){!1===N.equals(t)&&(e.scissor(t.x,t.y,t.z,t.w),N.copy(t))},viewport:function(t){!1===U.equals(t)&&(e.viewport(t.x,t.y,t.z,t.w),U.copy(t))},reset:function(){e.disable(3042),e.disable(2884),e.disable(2929),e.disable(32823),e.disable(3089),e.disable(2960),e.disable(32926),e.blendEquation(32774),e.blendFunc(1,0),e.blendFuncSeparate(1,0,1,0),e.colorMask(!0,!0,!0,!0),e.clearColor(0,0,0,0),e.depthMask(!0),e.depthFunc(513),e.clearDepth(1),e.stencilMask(0xffffffff),e.stencilFunc(519,0,0xffffffff),e.stencilOp(7680,7680,7680),e.clearStencil(0),e.cullFace(1029),e.frontFace(2305),e.polygonOffset(0,0),e.activeTexture(33984),e.bindFramebuffer(36160,null),!0===r&&(e.bindFramebuffer(36009,null),e.bindFramebuffer(36008,null)),e.useProgram(null),e.lineWidth(1),e.scissor(0,0,e.canvas.width,e.canvas.height),e.viewport(0,0,e.canvas.width,e.canvas.height),d={},L=null,B={},p={},f=new WeakMap,m=[],g=null,v=!1,y=null,x=null,b=null,w=null,S=null,_=null,A=null,M=!1,C=null,E=null,T=null,P=null,D=null,N.set(0,0,e.canvas.width,e.canvas.height),U.set(0,0,e.canvas.width,e.canvas.height),a.reset(),o.reset(),l.reset()}}}function nb(e,t,i,r,a,o,l){let h=a.isWebGL2,c=a.maxTextures,d=a.maxCubemapSize,p=a.maxTextureSize,f=a.maxSamples,m=t.has("WEBGL_multisampled_render_to_texture")?t.get("WEBGL_multisampled_render_to_texture"):null,g=!(typeof navigator>"u")&&/OculusBrowser/g.test(navigator.userAgent),v=new WeakMap,y,x=new WeakMap,b=!1;try{b="u">typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch{}function w(e,t){return b?new OffscreenCanvas(e,t):is("canvas")}function S(e,t,i,r){let a=1;if((e.width>r||e.height>r)&&(a=r/Math.max(e.width,e.height)),a<1||!0===t)if(!("u">typeof HTMLImageElement&&e instanceof HTMLImageElement||"u">typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof ImageBitmap&&e instanceof ImageBitmap))return"data"in e,e;else{let r=t?t4:Math.floor,o=r(a*e.width),l=r(a*e.height);void 0===y&&(y=w(o,l));let h=i?w(o,l):y;return h.width=o,h.height=l,h.getContext("2d").drawImage(e,0,0,o,l),h}return e}function _(e){return t2(e.width)&&t2(e.height)}function A(e,t){return e.generateMipmaps&&t&&1003!==e.minFilter&&1006!==e.minFilter}function M(t){e.generateMipmap(t)}function C(i,r,a,o,l=!1){if(!1===h)return r;if(null!==i&&void 0!==e[i])return e[i];let c=r;return 6403===r&&(5126===a&&(c=33326),5131===a&&(c=33325),5121===a&&(c=33321)),33319===r&&(5126===a&&(c=33328),5131===a&&(c=33327),5121===a&&(c=33323)),6408===r&&(5126===a&&(c=34836),5131===a&&(c=34842),5121===a&&(c=3001===o&&!1===l?35907:32856),32819===a&&(c=32854),32820===a&&(c=32855)),(33325===c||33326===c||33327===c||33328===c||34842===c||34836===c)&&t.get("EXT_color_buffer_float"),c}
3135function E(e,t,i){return!0===A(e,i)||e.isFramebufferTexture&&1003!==e.minFilter&&1006!==e.minFilter?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function T(e){return 1003===e||1004===e||1005===e?9728:9729}function P(e){let t=e.target;t.removeEventListener("dispose",P),function(e){let t=r.get(e);if(void 0===t.__webglInit)return;let i=e.source,a=x.get(i);if(a){let r=a[t.__cacheKey];r.usedTimes--,0===r.usedTimes&&O(e),0===Object.keys(a).length&&x.delete(i)}r.remove(e)}(t),t.isVideoTexture&&v.delete(t)}function D(t){let i=t.target;i.removeEventListener("dispose",D),function(t){let i=t.texture,a=r.get(t),o=r.get(i);if(void 0!==o.__webglTexture&&(e.deleteTexture(o.__webglTexture),l.memory.textures--),t.depthTexture&&t.depthTexture.dispose(),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++)e.deleteFramebuffer(a.__webglFramebuffer[t]),a.__webglDepthbuffer&&e.deleteRenderbuffer(a.__webglDepthbuffer[t]);else{if(e.deleteFramebuffer(a.__webglFramebuffer),a.__webglDepthbuffer&&e.deleteRenderbuffer(a.__webglDepthbuffer),a.__webglMultisampledFramebuffer&&e.deleteFramebuffer(a.__webglMultisampledFramebuffer),a.__webglColorRenderbuffer)for(let t=0;t<a.__webglColorRenderbuffer.length;t++)a.__webglColorRenderbuffer[t]&&e.deleteRenderbuffer(a.__webglColorRenderbuffer[t]);a.__webglDepthRenderbuffer&&e.deleteRenderbuffer(a.__webglDepthRenderbuffer)}if(t.isWebGLMultipleRenderTargets)for(let t=0,a=i.length;t<a;t++){let a=r.get(i[t]);a.__webglTexture&&(e.deleteTexture(a.__webglTexture),l.memory.textures--),r.remove(i[t])}r.remove(i),r.remove(t)}(i)}function O(t){let i=r.get(t);e.deleteTexture(i.__webglTexture);let a=t.source,o=x.get(a);delete o[i.__cacheKey],l.memory.textures--}let I=0;function R(e,t){var a;let o,h=r.get(e);if(e.isVideoTexture&&(a=e,o=l.render.frame,v.get(a)!==o&&(v.set(a,o),a.update())),!1===e.isRenderTargetTexture&&e.version>0&&h.__version!==e.version){let i=e.image;if(null===i);else if(!1!==i.complete)return void N(h,e,t)}i.bindTexture(3553,h.__webglTexture,33984+t)}let L={1e3:10497,1001:33071,1002:33648},B={1003:9728,1004:9984,1005:9986,1006:9729,1007:9985,1008:9987};function z(i,o,l){if(l?(e.texParameteri(i,10242,L[o.wrapS]),e.texParameteri(i,10243,L[o.wrapT]),(32879===i||35866===i)&&e.texParameteri(i,32882,L[o.wrapR]),e.texParameteri(i,10240,B[o.magFilter]),e.texParameteri(i,10241,B[o.minFilter])):(e.texParameteri(i,10242,33071),e.texParameteri(i,10243,33071),(32879===i||35866===i)&&e.texParameteri(i,32882,33071),1001!==o.wrapS||o.wrapT,e.texParameteri(i,10240,T(o.magFilter)),e.texParameteri(i,10241,T(o.minFilter)),1003!==o.minFilter&&o.minFilter),!0===t.has("EXT_texture_filter_anisotropic")){let l=t.get("EXT_texture_filter_anisotropic");1003!==o.magFilter&&(1005===o.minFilter||1008===o.minFilter)&&(1015!==o.type||!1!==t.has("OES_texture_float_linear"))&&(!1!==h||1016!==o.type||!1!==t.has("OES_texture_half_float_linear"))&&(o.anisotropy>1||r.get(o).__currentAnisotropy)&&(e.texParameterf(i,l.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,a.getMaxAnisotropy())),r.get(o).__currentAnisotropy=o.anisotropy)}}function F(t,i){let r,a=!1;void 0===t.__webglInit&&(t.__webglInit=!0,i.addEventListener("dispose",P));let o=i.source,h=x.get(o);void 0===h&&(h={},x.set(o,h));let c=((r=[]).push(i.wrapS),r.push(i.wrapT),r.push(i.wrapR||0),r.push(i.magFilter),r.push(i.minFilter),r.push(i.anisotropy),r.push(i.internalFormat),r.push(i.format),r.push(i.type),r.push(i.generateMipmaps),r.push(i.premultiplyAlpha),r.push(i.flipY),r.push(i.unpackAlignment),r.push(i.encoding),r.join());if(c!==t.__cacheKey){void 0===h[c]&&(h[c]={texture:e.createTexture(),usedTimes:0},l.memory.textures++,a=!0),h[c].usedTimes++;let r=h[t.__cacheKey];void 0!==r&&(h[t.__cacheKey].usedTimes--,0===r.usedTimes&&O(i)),t.__cacheKey=c,t.__webglTexture=h[c].texture}return a}function N(t,a,l){let c=3553;(a.isDataArrayTexture||a.isCompressedArrayTexture)&&(c=35866),a.isData3DTexture&&(c=32879);let d=F(t,a),f=a.source;i.bindTexture(c,t.__webglTexture,33984+l);let m=r.get(f);if(f.version!==m.__version||!0===d){i.activeTexture(33984+l),e.pixelStorei(37440,a.flipY),e.pixelStorei(37441,a.premultiplyAlpha),e.pixelStorei(3317,a.unpackAlignment),e.pixelStorei(37443,0);let t=!h&&(1001!==a.wrapS||1001!==a.wrapT||1003!==a.minFilter&&1006!==a.minFilter)&&!1===_(a.image),r=S(a.image,t,!1,p),g=_(r=W(a,r))||h,v=o.convert(a.format,a.encoding),y=o.convert(a.type),x=C(a.internalFormat,v,y,a.encoding,a.isVideoTexture);z(c,a,g);let b,w=a.mipmaps,T=h&&!0!==a.isVideoTexture,P=void 0===m.__version||!0===d,D=E(a,r,g);if(a.isDepthTexture)x=6402,h?x=1015===a.type?36012:1014===a.type?33190:1020===a.type?35056:33189:a.type,1026===a.format&&6402===x&&1012!==a.type&&1014!==a.type&&(a.type=1014,y=o.convert(a.type)),1027===a.format&&6402===x&&(x=34041,1020!==a.type&&(a.type=1020,y=o.convert(a.type))),P&&(T?i.texStorage2D(3553,1,x,r.width,r.height):i.texImage2D(3553,0,x,r.width,r.height,0,v,y,null));else if(a.isDataTexture)if(w.length>0&&g){T&&P&&i.texStorage2D(3553,D,x,w[0].width,w[0].height);for(let e=0,t=w.length;e<t;e++)b=w[e],T?i.texSubImage2D(3553,e,0,0,b.width,b.height,v,y,b.data):i.texImage2D(3553,e,x,b.width,b.height,0,v,y,b.data);a.generateMipmaps=!1}else T?(P&&i.texStorage2D(3553,D,x,r.width,r.height),i.texSubImage2D(3553,0,0,0,r.width,r.height,v,y,r.data)):i.texImage2D(3553,0,x,r.width,r.height,0,v,y,r.data);else if(a.isCompressedTexture)if(a.isCompressedArrayTexture){T&&P&&i.texStorage3D(35866,D,x,w[0].width,w[0].height,r.depth);for(let e=0,t=w.length;e<t;e++)b=w[e],1023!==a.format?null!==v&&(T?i.compressedTexSubImage3D(35866,e,0,0,0,b.width,b.height,r.depth,v,b.data,0,0):i.compressedTexImage3D(35866,e,x,b.width,b.height,r.depth,0,b.data,
31350,0)):T?i.texSubImage3D(35866,e,0,0,0,b.width,b.height,r.depth,v,y,b.data):i.texImage3D(35866,e,x,b.width,b.height,r.depth,0,v,y,b.data)}else{T&&P&&i.texStorage2D(3553,D,x,w[0].width,w[0].height);for(let e=0,t=w.length;e<t;e++)b=w[e],1023!==a.format?null!==v&&(T?i.compressedTexSubImage2D(3553,e,0,0,b.width,b.height,v,b.data):i.compressedTexImage2D(3553,e,x,b.width,b.height,0,b.data)):T?i.texSubImage2D(3553,e,0,0,b.width,b.height,v,y,b.data):i.texImage2D(3553,e,x,b.width,b.height,0,v,y,b.data)}else if(a.isDataArrayTexture)T?(P&&i.texStorage3D(35866,D,x,r.width,r.height,r.depth),i.texSubImage3D(35866,0,0,0,0,r.width,r.height,r.depth,v,y,r.data)):i.texImage3D(35866,0,x,r.width,r.height,r.depth,0,v,y,r.data);else if(a.isData3DTexture)T?(P&&i.texStorage3D(32879,D,x,r.width,r.height,r.depth),i.texSubImage3D(32879,0,0,0,0,r.width,r.height,r.depth,v,y,r.data)):i.texImage3D(32879,0,x,r.width,r.height,r.depth,0,v,y,r.data);else if(a.isFramebufferTexture){if(P)if(T)i.texStorage2D(3553,D,x,r.width,r.height);else{let e=r.width,t=r.height;for(let r=0;r<D;r++)i.texImage2D(3553,r,x,e,t,0,v,y,null),e>>=1,t>>=1}}else if(w.length>0&&g){T&&P&&i.texStorage2D(3553,D,x,w[0].width,w[0].height);for(let e=0,t=w.length;e<t;e++)b=w[e],T?i.texSubImage2D(3553,e,0,0,v,y,b):i.texImage2D(3553,e,x,v,y,b);a.generateMipmaps=!1}else T?(P&&i.texStorage2D(3553,D,x,r.width,r.height),i.texSubImage2D(3553,0,0,0,v,y,r)):i.texImage2D(3553,0,x,v,y,r);A(a,g)&&M(c),m.__version=f.version,a.onUpdate&&a.onUpdate(a)}t.__version=a.version}function U(t,a,l,h,c){let d=o.convert(l.format,l.encoding),p=o.convert(l.type),f=C(l.internalFormat,d,p,l.encoding);r.get(a).__hasExternalTextures||(32879===c||35866===c?i.texImage3D(c,0,f,a.width,a.height,a.depth,0,d,p,null):i.texImage2D(c,0,f,a.width,a.height,0,d,p,null)),i.bindFramebuffer(36160,t),G(a)?m.framebufferTexture2DMultisampleEXT(36160,h,c,r.get(l).__webglTexture,0,j(a)):(3553===c||c>=34069&&c<=34074)&&e.framebufferTexture2D(36160,h,c,r.get(l).__webglTexture,0),i.bindFramebuffer(36160,null)}function k(t,i,r){if(e.bindRenderbuffer(36161,t),i.depthBuffer&&!i.stencilBuffer){let a=33189;if(r||G(i)){let t=i.depthTexture;t&&t.isDepthTexture&&(1015===t.type?a=36012:1014===t.type&&(a=33190));let r=j(i);G(i)?m.renderbufferStorageMultisampleEXT(36161,r,a,i.width,i.height):e.renderbufferStorageMultisample(36161,r,a,i.width,i.height)}else e.renderbufferStorage(36161,a,i.width,i.height);e.framebufferRenderbuffer(36160,36096,36161,t)}else if(i.depthBuffer&&i.stencilBuffer){let a=j(i);r&&!1===G(i)?e.renderbufferStorageMultisample(36161,a,35056,i.width,i.height):G(i)?m.renderbufferStorageMultisampleEXT(36161,a,35056,i.width,i.height):e.renderbufferStorage(36161,34041,i.width,i.height),e.framebufferRenderbuffer(36160,33306,36161,t)}else{let t=!0===i.isWebGLMultipleRenderTargets?i.texture:[i.texture];for(let a=0;a<t.length;a++){let l=t[a],h=o.convert(l.format,l.encoding),c=o.convert(l.type),d=C(l.internalFormat,h,c,l.encoding),p=j(i);r&&!1===G(i)?e.renderbufferStorageMultisample(36161,p,d,i.width,i.height):G(i)?m.renderbufferStorageMultisampleEXT(36161,p,d,i.width,i.height):e.renderbufferStorage(36161,d,i.width,i.height)}}e.bindRenderbuffer(36161,null)}function V(t){let a=r.get(t),o=!0===t.isWebGLCubeRenderTarget;if(t.depthTexture&&!a.__autoAllocateDepthBuffer){if(o)throw Error("target.depthTexture not supported in Cube render targets");var l=a.__webglFramebuffer;if(t&&t.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");if(i.bindFramebuffer(36160,l),!(t.depthTexture&&t.depthTexture.isDepthTexture))throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");r.get(t.depthTexture).__webglTexture&&t.depthTexture.image.width===t.width&&t.depthTexture.image.height===t.height||(t.depthTexture.image.width=t.width,t.depthTexture.image.height=t.height,t.depthTexture.needsUpdate=!0),R(t.depthTexture,0);let h=r.get(t.depthTexture).__webglTexture,c=j(t);if(1026===t.depthTexture.format)G(t)?m.framebufferTexture2DMultisampleEXT(36160,36096,3553,h,0,c):e.framebufferTexture2D(36160,36096,3553,h,0);else if(1027===t.depthTexture.format)G(t)?m.framebufferTexture2DMultisampleEXT(36160,33306,3553,h,0,c):e.framebufferTexture2D(36160,33306,3553,h,0);else throw Error("Unknown depthTexture format")}else if(o){a.__webglDepthbuffer=[];for(let r=0;r<6;r++)i.bindFramebuffer(36160,a.__webglFramebuffer[r]),a.__webglDepthbuffer[r]=e.createRenderbuffer(),k(a.__webglDepthbuffer[r],t,!1)}else i.bindFramebuffer(36160,a.__webglFramebuffer),a.__webglDepthbuffer=e.createRenderbuffer(),k(a.__webglDepthbuffer,t,!1);i.bindFramebuffer(36160,null)}function j(e){return Math.min(f,e.samples)}function G(e){let i=r.get(e);return h&&e.samples>0&&!0===t.has("WEBGL_multisampled_render_to_texture")&&!1!==i.__useRenderToTexture}function W(e,i){let r=e.encoding,a=e.format,o=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||1035===e.format||3e3!==r&&3001===r&&(!1===h?!0===t.has("EXT_sRGB")&&1023===a?(e.format=1035,e.minFilter=1006,e.generateMipmaps=!1):i=ix.sRGBToLinear(i):1023!==a),i}this.allocateTextureUnit=function(){let e=I;return I+=1,e},this.resetTextureUnits=function(){I=0},this.setTexture2D=R,this.setTexture2DArray=function(e,t){let a=r.get(e);e.version>0&&a.__version!==e.version?N(a,e,t):i.bindTexture(35866,a.__webglTexture,33984+t)},this.setTexture3D=function(e,t){let a=r.get(e);e.version>0&&a.__version!==e.version?N(a,e,t):i.bindTexture(32879,a.__webglTexture,33984+t)},this.setTextureCube=function(t,a){let l=r.get(t);t.version>0&&l.__version!==t.version?function(t,a,l){if(6!==a.image.length)return;let c=F(t,a),p=a.source;i.bindTexture(34067,t.__webglTexture,33984+l);let f=r.get(p);if(p.version!==f.__version||!0===c){let t;i.activeTexture(33984+l),e.pixelStorei(37440,a.flipY),e.pixelStorei(37441,a.premultiplyAlpha),e.pixelStorei(3317,a.unpackAlignment),e.pixelStorei(37443,0);let r=a.isCompressedTexture||a.image[0].isCompressedTexture,m=a.image[0]&&a.image[0].isDataTexture,g=[];for(let e=0;e<6;e++)r||m?g[e]=m?a.image[e].image:a.image[e]:g[e]=S(a.image[e],!1,!0,d),g[e]=W(a,g[e]);let v=g[0],y=_(v)||h,x=o.convert(a.format,a.encoding),b=o.convert(a.type),w=C(a.internalFormat,x,b,a.encoding),T=h&&!0!==a.isVideoTexture,P=void 0===f.__version||!0===c,D=E(a,v,y);if(z(34067,a,y),r){T&&P&&i.texStorage2D(34067,D,w,v.width,v.height);for(let e=0;e<6;e++){t=g[e].mipmaps;for(let r=0;r<t.length;r++){let o=t[r];1023!==a.format?null!==x&&(T?i.compressedTexSubImage2D(34069+e,r,0,0,o.width,o.height,x,o.data):i.compressedTexImage2D(34069+e,r,w,o.width,o.height,0,o.data)):T?i.texSubImage2D(34069+e,r,0,0,o.width,o.height,x,b,o.data):i.texImage2D(34069+e,r,w,o.width,o.height,0,x,b,o.data)}}}else{t=a.mipmaps,T&&P&&(t.length>0&&D++,i.texStorage2D(34067,D,w,g[0].width,g[0].height));for(let e=0;e<6;e++)if(m){T?i.texSubImage2D(34069+e,0,0,0,g[e].width,g[e].height,x,b,g[e].data):i.texImage2D(34069+e,0,w,g[e].width,g[e].height,0,x,b,g[e].data);for(let r=0;r<t.length;r++){let a=t[r].image[e].image;T?i.texSubImage2D(34069+e,r+1,0,0,a.width,a.height,x,b,a.data):i.texImage2D(34069+e,r+1,w,a.width,a.height,0,x,b,a.data)}}else{T?i.texSubImage2D(34069+e,0,0,0,x,b,g[e]):i.texImage2D(34069+e,0,w,x,b,g[e]);for(let r=0;r<t.length;r++){let a=t[r];T?i.texSubImage2D(34069+e,r+1,0,0,x,b,a.image[e]):i.texImage2D(34069+e,r+1,w,x,b,a.image[e])}}}A(a,y)&&M(34067),f.__version=p.version,a.onUpdate&&a.onUpdate(a)}t.__version=a.version}(l,t,a):i.bindTexture(34067,l.__webglTexture,33984+a)},this.rebindTextures=function(e,t,i){let a=r.get(e);void 0!==t&&U(a.__webglFramebuffer,e,e.texture,36064,3553),void 0!==i&&V(e)},this.setupRenderTarget=function(t){let c=t.texture,d=r.get(t),p=r.get(c);t.addEventListener("dispose",D),!0!==t.isWebGLMultipleRenderTargets&&(void 0===p.__webglTexture&&(p.__webglTexture=e.createTexture()),p.__version=c.version,l.memory.textures++);
3135let f=!0===t.isWebGLCubeRenderTarget,m=!0===t.isWebGLMultipleRenderTargets,g=_(t)||h;if(f){d.__webglFramebuffer=[];for(let t=0;t<6;t++)d.__webglFramebuffer[t]=e.createFramebuffer()}else{if(d.__webglFramebuffer=e.createFramebuffer(),m&&a.drawBuffers){let i=t.texture;for(let t=0,a=i.length;t<a;t++){let a=r.get(i[t]);void 0===a.__webglTexture&&(a.__webglTexture=e.createTexture(),l.memory.textures++)}}if(h&&t.samples>0&&!1===G(t)){let r=m?c:[c];d.__webglMultisampledFramebuffer=e.createFramebuffer(),d.__webglColorRenderbuffer=[],i.bindFramebuffer(36160,d.__webglMultisampledFramebuffer);for(let i=0;i<r.length;i++){let a=r[i];d.__webglColorRenderbuffer[i]=e.createRenderbuffer(),e.bindRenderbuffer(36161,d.__webglColorRenderbuffer[i]);let l=o.convert(a.format,a.encoding),h=o.convert(a.type),c=C(a.internalFormat,l,h,a.encoding,!0===t.isXRRenderTarget),p=j(t);e.renderbufferStorageMultisample(36161,p,c,t.width,t.height),e.framebufferRenderbuffer(36160,36064+i,36161,d.__webglColorRenderbuffer[i])}e.bindRenderbuffer(36161,null),t.depthBuffer&&(d.__webglDepthRenderbuffer=e.createRenderbuffer(),k(d.__webglDepthRenderbuffer,t,!0)),i.bindFramebuffer(36160,null)}}if(f){i.bindTexture(34067,p.__webglTexture),z(34067,c,g);for(let e=0;e<6;e++)U(d.__webglFramebuffer[e],t,c,36064,34069+e);A(c,g)&&M(34067),i.unbindTexture()}else if(m){let e=t.texture;for(let a=0,o=e.length;a<o;a++){let o=e[a],l=r.get(o);i.bindTexture(3553,l.__webglTexture),z(3553,o,g),U(d.__webglFramebuffer,t,o,36064+a,3553),A(o,g)&&M(3553)}i.unbindTexture()}else{let e=3553;(t.isWebGL3DRenderTarget||t.isWebGLArrayRenderTarget)&&h&&(e=t.isWebGL3DRenderTarget?32879:35866),i.bindTexture(e,p.__webglTexture),z(e,c,g),U(d.__webglFramebuffer,t,c,36064,e),A(c,g)&&M(e),i.unbindTexture()}t.depthBuffer&&V(t)},this.updateRenderTargetMipmap=function(e){let t=_(e)||h,a=!0===e.isWebGLMultipleRenderTargets?e.texture:[e.texture];for(let o=0,l=a.length;o<l;o++){let l=a[o];if(A(l,t)){let t=e.isWebGLCubeRenderTarget?34067:3553,a=r.get(l).__webglTexture;i.bindTexture(t,a),M(t),i.unbindTexture()}}},this.updateMultisampleRenderTarget=function(t){if(h&&t.samples>0&&!1===G(t)){let a=t.isWebGLMultipleRenderTargets?t.texture:[t.texture],o=t.width,l=t.height,h=16384,c=[],d=t.stencilBuffer?33306:36096,p=r.get(t),f=!0===t.isWebGLMultipleRenderTargets;if(f)for(let t=0;t<a.length;t++)i.bindFramebuffer(36160,p.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064+t,3
31356161,null),i.bindFramebuffer(36160,p.__webglFramebuffer),e.framebufferTexture2D(36009,36064+t,3553,null,0);i.bindFramebuffer(36008,p.__webglMultisampledFramebuffer),i.bindFramebuffer(36009,p.__webglFramebuffer);for(let i=0;i<a.length;i++){c.push(36064+i),t.depthBuffer&&c.push(d);let m=void 0!==p.__ignoreDepthValues&&p.__ignoreDepthValues;if(!1===m&&(t.depthBuffer&&(h|=256),t.stencilBuffer&&(h|=1024)),f&&e.framebufferRenderbuffer(36008,36064,36161,p.__webglColorRenderbuffer[i]),!0===m&&(e.invalidateFramebuffer(36008,[d]),e.invalidateFramebuffer(36009,[d])),f){let t=r.get(a[i]).__webglTexture;e.framebufferTexture2D(36009,36064,3553,t,0)}e.blitFramebuffer(0,0,o,l,0,0,o,l,h,9728),g&&e.invalidateFramebuffer(36008,c)}if(i.bindFramebuffer(36008,null),i.bindFramebuffer(36009,null),f)for(let t=0;t<a.length;t++){i.bindFramebuffer(36160,p.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064+t,36161,p.__webglColorRenderbuffer[t]);let o=r.get(a[t]).__webglTexture;i.bindFramebuffer(36160,p.__webglFramebuffer),e.framebufferTexture2D(36009,36064+t,3553,o,0)}i.bindFramebuffer(36009,p.__webglMultisampledFramebuffer)}},this.setupDepthRenderbuffer=V,this.setupFrameBufferTexture=U,this.useMultisampledRTT=G}function nw(e,t,i){let r=i.isWebGL2;return{convert:function(i,a=null){let o;if(1009===i)return 5121;if(1017===i)return 32819;if(1018===i)return 32820;if(1010===i)return 5120;if(1011===i)return 5122;if(1012===i)return 5123;if(1013===i)return 5124;if(1014===i)return 5125;if(1015===i)return 5126;if(1016===i)return r?5131:null!==(o=t.get("OES_texture_half_float"))?o.HALF_FLOAT_OES:null;if(1021===i)return 6406;if(1023===i)return 6408;if(1024===i)return 6409;if(1025===i)return 6410;if(1026===i)return 6402;if(1027===i)return 34041;if(1035===i)return null!==(o=t.get("EXT_sRGB"))?o.SRGB_ALPHA_EXT:null;if(1028===i)return 6403;if(1029===i)return 36244;if(1030===i)return 33319;if(1031===i)return 33320;if(1033===i)return 36249;if(33776===i||33777===i||33778===i||33779===i)if(3001===a)if(null===(o=t.get("WEBGL_compressed_texture_s3tc_srgb")))return null;else{if(33776===i)return o.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(33777===i)return o.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(33778===i)return o.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(33779===i)return o.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(null===(o=t.get("WEBGL_compressed_texture_s3tc")))return null;if(33776===i)return o.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===i)return o.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===i)return o.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===i)return o.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===i||35841===i||35842===i||35843===i)if(null===(o=t.get("WEBGL_compressed_texture_pvrtc")))return null;else{if(35840===i)return o.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===i)return o.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===i)return o.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===i)return o.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===i)return null!==(o=t.get("WEBGL_compressed_texture_etc1"))?o.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===i||37496===i)if(null===(o=t.get("WEBGL_compressed_texture_etc")))return null;else{if(37492===i)return 3001===a?o.COMPRESSED_SRGB8_ETC2:o.COMPRESSED_RGB8_ETC2;if(37496===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:o.COMPRESSED_RGBA8_ETC2_EAC}if(37808===i||37809===i||37810===i||37811===i||37812===i||37813===i||37814===i||37815===i||37816===i||37817===i||37818===i||37819===i||37820===i||37821===i)if(null===(o=t.get("WEBGL_compressed_texture_astc")))return null;else{if(37808===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:o.COMPRESSED_RGBA_ASTC_4x4_KHR;if(37809===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:o.COMPRESSED_RGBA_ASTC_5x4_KHR;if(37810===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:o.COMPRESSED_RGBA_ASTC_5x5_KHR;if(37811===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:o.COMPRESSED_RGBA_ASTC_6x5_KHR;if(37812===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:o.COMPRESSED_RGBA_ASTC_6x6_KHR;if(37813===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:o.COMPRESSED_RGBA_ASTC_8x5_KHR;if(37814===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:o.COMPRESSED_RGBA_ASTC_8x6_KHR;if(37815===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:o.COMPRESSED_RGBA_ASTC_8x8_KHR;if(37816===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:o.COMPRESSED_RGBA_ASTC_10x5_KHR;if(37817===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:o.COMPRESSED_RGBA_ASTC_10x6_KHR;if(37818===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:o.COMPRESSED_RGBA_ASTC_10x8_KHR;if(37819===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:o.COMPRESSED_RGBA_ASTC_10x10_KHR;if(37820===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:o.COMPRESSED_RGBA_ASTC_12x10_KHR;if(37821===i)return 3001===a?o.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:o.COMPRESSED_RGBA_ASTC_12x12_KHR}if(36492===i){if(null===(o=t.get("EXT_texture_compression_bptc")))return null;else if(36492===i)return 3001===a?o.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:o.COMPRESSED_RGBA_BPTC_UNORM_EXT}if(36283===i||36284===i||36285===i||36286===i)if(null===(o=t.get("EXT_texture_compression_rgtc")))return null;
3135else{if(36492===i)return o.COMPRESSED_RED_RGTC1_EXT;if(36284===i)return o.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(36285===i)return o.COMPRESSED_RED_GREEN_RGTC2_EXT;if(36286===i)return o.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}return 1020===i?r?34042:null!==(o=t.get("WEBGL_depth_texture"))?o.UNSIGNED_INT_24_8_WEBGL:null:void 0!==e[i]?e[i]:null}}}var nS=class extends sh{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}},n_=class extends rw{constructor(){super(),this.isGroup=!0,this.type="Group"}},nA={type:"move"},nM=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new n_,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new n_,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new iD,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new iD),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new n_,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new iD,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new iD),this._grip}dispatchEvent(e){return null!==this._targetRay&&this._targetRay.dispatchEvent(e),null!==this._grip&&this._grip.dispatchEvent(e),null!==this._hand&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let i of e.hand.values())this._getHandJoint(t,i)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(e,t,i){let r=null,a=null,o=null,l=this._targetRay,h=this._grip,c=this._hand;if(e&&"visible-blurred"!==t.session.visibilityState){if(c&&e.hand){for(let r of(o=!0,e.hand.values())){let e=t.getJointPose(r,i),a=this._getHandJoint(c,r);null!==e&&(a.matrix.fromArray(e.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),a.jointRadius=e.radius),a.visible=null!==e}let r=c.joints["index-finger-tip"],a=c.joints["thumb-tip"],l=r.position.distanceTo(a.position);c.inputState.pinching&&l>.025?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&l<=.015&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==h&&e.gripSpace&&null!==(a=t.getPose(e.gripSpace,i))&&(h.matrix.fromArray(a.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale),a.linearVelocity?(h.hasLinearVelocity=!0,h.linearVelocity.copy(a.linearVelocity)):h.hasLinearVelocity=!1,a.angularVelocity?(h.hasAngularVelocity=!0,h.angularVelocity.copy(a.angularVelocity)):h.hasAngularVelocity=!1);null!==l&&(null===(r=t.getPose(e.targetRaySpace,i))&&null!==a&&(r=a),null!==r&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1,this.dispatchEvent(nA)))}return null!==l&&(l.visible=null!==r),null!==h&&(h.visible=null!==a),null!==c&&(c.visible=null!==o),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){let i=new n_;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},nC=class extends i_{constructor(e,t,i,r,a,o,l,h,c,d){if(1026!==(d=void 0!==d?d:1026)&&1027!==d)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===i&&1026===d&&(i=1014),void 0===i&&1027===d&&(i=1020),super(null,r,a,o,l,h,d,i,c),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=void 0!==l?l:1003,this.minFilter=void 0!==h?h:1003,this.flipY=!1,this.generateMipmaps=!1}},nE=class extends tX{constructor(e,t){super();let i=this,r=null,a=1,o=null,l="local-floor",h=1,c=null,d=null,p=null,f=null,m=null,g=null,v=t.getContextAttributes(),y=null,x=null,b=[],w=[],S=new Set,_=new Map,A=new sh;A.layers.enable(1),A.viewport=new iA;let M=new sh;M.layers.enable(2),M.viewport=new iA;let C=[A,M],E=new nS;E.layers.enable(1),E.layers.enable(2);let T=null,P=null;function D(e){let t=w.indexOf(e.inputSource);if(-1===t)return;let i=b[t];void 0!==i&&i.dispatchEvent({type:e.type,data:e.inputSource})}function O(){r.removeEventListener("select",D),r.removeEventListener("selectstart",D),r.removeEventListener("selectend",D),r.removeEventListener("squeeze",D),r.removeEventListener("squeezestart",D),r.removeEventListener("squeezeend",D),r.removeEventListener("end",O),r.removeEventListener("inputsourceschange",I);for(let e=0;e<b.length;e++){let t=w[e];null!==t&&(w[e]=null,b[e].disconnect(t))}T=null,P=null,e.setRenderTarget(y),m=null,f=null,p=null,r=null,x=null,F.stop(),i.isPresenting=!1,i.dispatchEvent({type:"sessionend"})}function I(e){for(let t=0;t<e.removed.length;t++){let i=e.removed[t],r=w.indexOf(i);r>=0&&(w[r]=null,b[r].disconnect(i))}for(let t=0;t<e.added.length;t++){let i=e.added[t],r=w.indexOf(i);if(-1===r){for(let e=0;e<b.length;e++)if(e>=w.length){w.push(i),r=e;break}else if(null===w[e]){w[e]=i,r=e;break}if(-1===r)break}let a=b[r];a&&a.connect(i)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=b[e];return void 0===t&&(t=new nM,b[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=b[e];return void 0===t&&(t=new nM,b[e]=t),t.getGripSpace()},this.getHand=function(e){let t=b[e];return void 0===t&&(t=new nM,b[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){a=e,i.isPresenting},this.setReferenceSpaceType=function(e){l=e,i.isPresenting},this.getReferenceSpace=function(){return c||o},this.setReferenceSpace=function(e){c=e},this.getBaseLayer=function(){return null!==f?f:m},this.getBinding=function(){return p},this.getFrame=function(){return g}
3135,this.getSession=function(){return r},this.setSession=async function(d){if(null!==(r=d)){if(y=e.getRenderTarget(),r.addEventListener("select",D),r.addEventListener("selectstart",D),r.addEventListener("selectend",D),r.addEventListener("squeeze",D),r.addEventListener("squeezestart",D),r.addEventListener("squeezeend",D),r.addEventListener("end",O),r.addEventListener("inputsourceschange",I),!0!==v.xrCompatible&&await t.makeXRCompatible(),void 0===r.renderState.layers||!1===e.capabilities.isWebGL2){let i={antialias:void 0!==r.renderState.layers||v.antialias,alpha:v.alpha,depth:v.depth,stencil:v.stencil,framebufferScaleFactor:a};m=new XRWebGLLayer(r,t,i),r.updateRenderState({baseLayer:m}),x=new iM(m.framebufferWidth,m.framebufferHeight,{format:1023,type:1009,encoding:e.outputEncoding,stencilBuffer:v.stencil})}else{let i=null,o=null,l=null;v.depth&&(l=v.stencil?35056:33190,i=v.stencil?1027:1026,o=v.stencil?1020:1014);let h={colorFormat:32856,depthFormat:l,scaleFactor:a};f=(p=new XRWebGLBinding(r,t)).createProjectionLayer(h),r.updateRenderState({layers:[f]}),x=new iM(f.textureWidth,f.textureHeight,{format:1023,type:1009,depthTexture:new nC(f.textureWidth,f.textureHeight,o,void 0,void 0,void 0,void 0,void 0,void 0,i),stencilBuffer:v.stencil,encoding:e.outputEncoding,samples:4*!!v.antialias}),e.properties.get(x).__ignoreDepthValues=f.ignoreDepthValues}x.isXRRenderTarget=!0,this.setFoveation(h),c=null,o=await r.requestReferenceSpace(l),F.setContext(r),F.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}};let R=new iD,L=new iD;function B(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){let t,i,a,o,l,h,c,d,p,f,m,g,v;if(null===r)return;E.near=M.near=A.near=e.near,E.far=M.far=A.far=e.far,(T!==E.near||P!==E.far)&&(r.updateRenderState({depthNear:E.near,depthFar:E.far}),T=E.near,P=E.far);let y=e.parent,x=E.cameras;B(E,y);for(let e=0;e<x.length;e++)B(x[e],y);E.matrixWorld.decompose(E.position,E.quaternion,E.scale),e.matrix.copy(E.matrix),e.matrix.decompose(e.position,e.quaternion,e.scale);let b=e.children;for(let e=0,t=b.length;e<t;e++)b[e].updateMatrixWorld(!0);2===x.length?(R.setFromMatrixPosition(A.matrixWorld),L.setFromMatrixPosition(M.matrixWorld),t=R.distanceTo(L),i=A.projectionMatrix.elements,a=M.projectionMatrix.elements,o=i[14]/(i[10]-1),l=i[14]/(i[10]+1),h=(i[9]+1)/i[5],c=(i[9]-1)/i[5],m=-((f=t/(-(d=(i[8]-1)/i[0])+(p=(a[8]+1)/a[0])))*d),A.matrixWorld.decompose(E.position,E.quaternion,E.scale),E.translateX(m),E.translateZ(f),E.matrixWorld.compose(E.position,E.quaternion,E.scale),E.matrixWorldInverse.copy(E.matrixWorld).invert(),g=o+f,v=l+f,E.projectionMatrix.makePerspective(o*d-m,o*p+(t-m),h*l/v*g,c*l/v*g,g,v)):E.projectionMatrix.copy(A.projectionMatrix)},this.getCamera=function(){return E},this.getFoveation=function(){if(null!==f||null!==m)return h},this.setFoveation=function(e){h=e,null!==f&&(f.fixedFoveation=e),null!==m&&void 0!==m.fixedFoveation&&(m.fixedFoveation=e)},this.getPlanes=function(){return S};let z=null,F=new sb;F.setAnimationLoop(function(t,r){if(d=r.getViewerPose(c||o),g=r,null!==d){let t=d.views;null!==m&&(e.setRenderTargetFramebuffer(x,m.framebuffer),e.setRenderTarget(x));let i=!1;t.length!==E.cameras.length&&(E.cameras.length=0,i=!0);for(let r=0;r<t.length;r++){let a=t[r],o=null;if(null!==m)o=m.getViewport(a);else{let t=p.getViewSubImage(f,a);o=t.viewport,0===r&&(e.setRenderTargetTextures(x,t.colorTexture,f.ignoreDepthValues?void 0:t.depthStencilTexture),e.setRenderTarget(x))}let l=C[r];void 0===l&&((l=new sh).layers.enable(r),l.viewport=new iA,C[r]=l),l.matrix.fromArray(a.transform.matrix),l.projectionMatrix.fromArray(a.projectionMatrix),l.viewport.set(o.x,o.y,o.width,o.height),0===r&&E.matrix.copy(l.matrix),!0===i&&E.cameras.push(l)}}for(let e=0;e<b.length;e++){let t=w[e],i=b[e];null!==t&&void 0!==i&&i.update(t,r,c||o)}if(z&&z(t,r),r.detectedPlanes){i.dispatchEvent({type:"planesdetected",data:r.detectedPlanes});let e=null;for(let t of S)r.detectedPlanes.has(t)||(null===e&&(e=[]),e.push(t));if(null!==e)for(let t of e)S.delete(t),_.delete(t),i.dispatchEvent({type:"planeremoved",data:t});for(let e of r.detectedPlanes)if(S.has(e)){let t=_.get(e);e.lastChangedTime>t&&(_.set(e,e.lastChangedTime),i.dispatchEvent({type:"planechanged",data:e}))}else S.add(e),_.set(e,r.lastChangedTime),i.dispatchEvent({type:"planeadded",data:e})}g=null}),this.setAnimationLoop=function(e){z=e},this.dispose=function(){}}};function nT(e,t){function i(i,r){let a,o;i.opacity.value=r.opacity,r.color&&i.diffuse.value.copy(r.color),r.emissive&&i.emissive.value.copy(r.emissive).multiplyScalar(r.emissiveIntensity),r.map&&(i.map.value=r.map),r.alphaMap&&(i.alphaMap.value=r.alphaMap),r.bumpMap&&(i.bumpMap.value=r.bumpMap,i.bumpScale.value=r.bumpScale,1===r.side&&(i.bumpScale.value*=-1)),r.displacementMap&&(i.displacementMap.value=r.displacementMap,i.displacementScale.value=r.displacementScale,i.displacementBias.value=r.displacementBias),r.emissiveMap&&(i.emissiveMap.value=r.emissiveMap),r.normalMap&&(i.normalMap.value=r.normalMap,i.normalScale.value.copy(r.normalScale),1===r.side&&i.normalScale.value.negate()),r.specularMap&&(i.specularMap.value=r.specularMap),r.alphaTest>0&&(i.alphaTest.value=r.alphaTest);let l=t.get(r).envMap;if(l&&(i.envMap.value=l,i.flipEnvMap.value=l.isCubeTexture&&!1===l.isRenderTargetTexture?-1:1,i.reflectivity.value=r.reflectivity,i.ior.value=r.
3135ior,i.refractionRatio.value=r.refractionRatio),r.lightMap){i.lightMap.value=r.lightMap;let t=!0!==e.physicallyCorrectLights?Math.PI:1;i.lightMapIntensity.value=r.lightMapIntensity*t}r.aoMap&&(i.aoMap.value=r.aoMap,i.aoMapIntensity.value=r.aoMapIntensity),r.map?a=r.map:r.specularMap?a=r.specularMap:r.displacementMap?a=r.displacementMap:r.normalMap?a=r.normalMap:r.bumpMap?a=r.bumpMap:r.roughnessMap?a=r.roughnessMap:r.metalnessMap?a=r.metalnessMap:r.alphaMap?a=r.alphaMap:r.emissiveMap?a=r.emissiveMap:r.clearcoatMap?a=r.clearcoatMap:r.clearcoatNormalMap?a=r.clearcoatNormalMap:r.clearcoatRoughnessMap?a=r.clearcoatRoughnessMap:r.iridescenceMap?a=r.iridescenceMap:r.iridescenceThicknessMap?a=r.iridescenceThicknessMap:r.specularIntensityMap?a=r.specularIntensityMap:r.specularColorMap?a=r.specularColorMap:r.transmissionMap?a=r.transmissionMap:r.thicknessMap?a=r.thicknessMap:r.sheenColorMap?a=r.sheenColorMap:r.sheenRoughnessMap&&(a=r.sheenRoughnessMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),i.uvTransform.value.copy(a.matrix)),r.aoMap?o=r.aoMap:r.lightMap&&(o=r.lightMap),void 0!==o&&(o.isWebGLRenderTarget&&(o=o.texture),!0===o.matrixAutoUpdate&&o.updateMatrix(),i.uv2Transform.value.copy(o.matrix))}return{refreshFogUniforms:function(t,i){i.color.getRGB(t.fogColor.value,ss(e)),i.isFog?(t.fogNear.value=i.near,t.fogFar.value=i.far):i.isFogExp2&&(t.fogDensity.value=i.density)},refreshMaterialUniforms:function(e,r,a,o,l){var h,c,d,p,f,m,g,v,y,x,b,w,S,_,A,M,C,E,T,P,D,O,I;let R,L;r.isMeshBasicMaterial||r.isMeshLambertMaterial?i(e,r):r.isMeshToonMaterial?(i(e,r),h=e,(c=r).gradientMap&&(h.gradientMap.value=c.gradientMap)):r.isMeshPhongMaterial?(i(e,r),d=e,p=r,d.specular.value.copy(p.specular),d.shininess.value=Math.max(p.shininess,1e-4)):r.isMeshStandardMaterial?(i(e,r),f=e,m=r,f.roughness.value=m.roughness,f.metalness.value=m.metalness,m.roughnessMap&&(f.roughnessMap.value=m.roughnessMap),m.metalnessMap&&(f.metalnessMap.value=m.metalnessMap),t.get(m).envMap&&(f.envMapIntensity.value=m.envMapIntensity),r.isMeshPhysicalMaterial&&(g=e,v=r,y=l,g.ior.value=v.ior,v.sheen>0&&(g.sheenColor.value.copy(v.sheenColor).multiplyScalar(v.sheen),g.sheenRoughness.value=v.sheenRoughness,v.sheenColorMap&&(g.sheenColorMap.value=v.sheenColorMap),v.sheenRoughnessMap&&(g.sheenRoughnessMap.value=v.sheenRoughnessMap)),v.clearcoat>0&&(g.clearcoat.value=v.clearcoat,g.clearcoatRoughness.value=v.clearcoatRoughness,v.clearcoatMap&&(g.clearcoatMap.value=v.clearcoatMap),v.clearcoatRoughnessMap&&(g.clearcoatRoughnessMap.value=v.clearcoatRoughnessMap),v.clearcoatNormalMap&&(g.clearcoatNormalScale.value.copy(v.clearcoatNormalScale),g.clearcoatNormalMap.value=v.clearcoatNormalMap,1===v.side&&g.clearcoatNormalScale.value.negate())),v.iridescence>0&&(g.iridescence.value=v.iridescence,g.iridescenceIOR.value=v.iridescenceIOR,g.iridescenceThicknessMinimum.value=v.iridescenceThicknessRange[0],g.iridescenceThicknessMaximum.value=v.iridescenceThicknessRange[1],v.iridescenceMap&&(g.iridescenceMap.value=v.iridescenceMap),v.iridescenceThicknessMap&&(g.iridescenceThicknessMap.value=v.iridescenceThicknessMap)),v.transmission>0&&(g.transmission.value=v.transmission,g.transmissionSamplerMap.value=y.texture,g.transmissionSamplerSize.value.set(y.width,y.height),v.transmissionMap&&(g.transmissionMap.value=v.transmissionMap),g.thickness.value=v.thickness,v.thicknessMap&&(g.thicknessMap.value=v.thicknessMap),g.attenuationDistance.value=v.attenuationDistance,g.attenuationColor.value.copy(v.attenuationColor)),g.specularIntensity.value=v.specularIntensity,g.specularColor.value.copy(v.specularColor),v.specularIntensityMap&&(g.specularIntensityMap.value=v.specularIntensityMap),v.specularColorMap&&(g.specularColorMap.value=v.specularColorMap))):r.isMeshMatcapMaterial?(i(e,r),x=e,(b=r).matcap&&(x.matcap.value=b.matcap)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),w=e,S=r,w.referencePosition.value.copy(S.referencePosition),w.nearDistance.value=S.nearDistance,w.farDistance.value=S.farDistance):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(_=e,A=r,_.diffuse.value.copy(A.color),_.opacity.value=A.opacity,r.isLineDashedMaterial&&(M=e,C=r,M.dashSize.value=C.dashSize,M.totalSize.value=C.dashSize
3135+C.gapSize,M.scale.value=C.scale)):r.isPointsMaterial?(E=e,T=r,P=a,D=o,E.diffuse.value.copy(T.color),E.opacity.value=T.opacity,E.size.value=T.size*P,E.scale.value=.5*D,T.map&&(E.map.value=T.map),T.alphaMap&&(E.alphaMap.value=T.alphaMap),T.alphaTest>0&&(E.alphaTest.value=T.alphaTest),T.map?R=T.map:T.alphaMap&&(R=T.alphaMap),void 0!==R&&(!0===R.matrixAutoUpdate&&R.updateMatrix(),E.uvTransform.value.copy(R.matrix))):r.isSpriteMaterial?(O=e,I=r,O.diffuse.value.copy(I.color),O.opacity.value=I.opacity,O.rotation.value=I.rotation,I.map&&(O.map.value=I.map),I.alphaMap&&(O.alphaMap.value=I.alphaMap),I.alphaTest>0&&(O.alphaTest.value=I.alphaTest),I.map?L=I.map:I.alphaMap&&(L=I.alphaMap),void 0!==L&&(!0===L.matrixAutoUpdate&&L.updateMatrix(),O.uvTransform.value.copy(L.matrix))):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function nP(e,t,i,r){let a={},o={},l=[],h=i.isWebGL2?e.getParameter(35375):0;function c(e){let t={boundary:0,storage:0};return"number"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture,t}function d(t){let i=t.target;i.removeEventListener("dispose",d);let r=l.indexOf(i.__bindingPointIndex);l.splice(r,1),e.deleteBuffer(a[i.id]),delete a[i.id],delete o[i.id]}return{bind:function(e,t){let i=t.program;r.uniformBlockBinding(e,i)},update:function(i,p){var f;let m,g,v,y,x=a[i.id];void 0===x&&(function(e){let t=e.uniforms,i=0,r=0;for(let e=0,a=t.length;e<a;e++){let a=t[e],o={boundary:0,storage:0},l=Array.isArray(a.value)?a.value:[a.value];for(let e=0,t=l.length;e<t;e++){let t=c(l[e]);o.boundary+=t.boundary,o.storage+=t.storage}if(a.__data=new Float32Array(o.storage/Float32Array.BYTES_PER_ELEMENT),a.__offset=i,e>0){let e=16-(r=i%16);0!==r&&e-o.boundary<0&&(a.__offset=i+=16-r)}i+=o.storage}(r=i%16)>0&&(i+=16-r),e.__size=i,e.__cache={}}(i),(f=i).__bindingPointIndex=m=function(){for(let e=0;e<h;e++)if(-1===l.indexOf(e))return l.push(e),e;return 0}(),g=e.createBuffer(),v=f.__size,y=f.usage,e.bindBuffer(35345,g),e.bufferData(35345,v,y),e.bindBuffer(35345,null),e.bindBufferBase(35345,m,g),x=g,a[i.id]=x,i.addEventListener("dispose",d));let b=p.program;r.updateUBOMapping(i,b);let w=t.render.frame;o[i.id]!==w&&(function(t){let i=a[t.id],r=t.uniforms,o=t.__cache;e.bindBuffer(35345,i);for(let t=0,i=r.length;t<i;t++){let i=r[t];if(!0===function(e,t,i){let r=e.value;if(void 0===i[t]){if("number"==typeof r)i[t]=r;else{let e=Array.isArray(r)?r:[r],a=[];for(let t=0;t<e.length;t++)a.push(e[t].clone());i[t]=a}return!0}if("number"==typeof r){if(i[t]!==r)return i[t]=r,!0}else{let e=Array.isArray(i[t])?i[t]:[i[t]],a=Array.isArray(r)?r:[r];for(let t=0;t<e.length;t++){let i=e[t];if(!1===i.equals(a[t]))return i.copy(a[t]),!0}}return!1}(i,t,o)){let t=i.__offset,r=Array.isArray(i.value)?i.value:[i.value],a=0;for(let o=0;o<r.length;o++){let l=r[o],h=c(l);"number"==typeof l?(i.__data[0]=l,e.bufferSubData(35345,t+a,i.__data)):l.isMatrix3?(i.__data[0]=l.elements[0],i.__data[1]=l.elements[1],i.__data[2]=l.elements[2],i.__data[3]=l.elements[0],i.__data[4]=l.elements[3],i.__data[5]=l.elements[4],i.__data[6]=l.elements[5],i.__data[7]=l.elements[0],i.__data[8]=l.elements[6],i.__data[9]=l.elements[7],i.__data[10]=l.elements[8],i.__data[11]=l.elements[0]):(l.toArray(i.__data,a),a+=h.storage/Float32Array.BYTES_PER_ELEMENT)}e.bufferSubData(35345,t,i.__data)}}e.bindBuffer(35345,null)}(i),o[i.id]=w)},dispose:function(){for(let t in a)e.deleteBuffer(a[t]);l=[],a={},o={}}}}function nD(e={}){let t,i,r,a,o,l,h,c,d,p,f,m,g,v,y,x,b,w,S,_,A,M,C,E,T;this.isWebGLRenderer=!0;let P=void 0!==e.canvas?e.canvas:((T=is("canvas")).style.display="block",T),D=void 0!==e.context?e.context:null,O=void 0===e.depth||e.depth,I=void 0===e.stencil||e.stencil,R=void 0!==e.antialias&&e.antialias,L=void 0===e.premultipliedAlpha||e.premultipliedAlpha,B=void 0!==e.preserveDrawingBuffer&&e.preserveDrawingBuffer,z=void 0!==e.powerPreference?e.powerPreference:"default",F=void 0!==e.failIfMajorPerformanceCaveat&&e.failIfMajorPerformanceCaveat,N;
3135N=null!==D?D.getContextAttributes().alpha:void 0!==e.alpha&&e.alpha;let U=null,k=null,V=[],j=[];this.domElement=P,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputEncoding=3e3,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;let G=this,W=!1,H=0,q=0,X=null,Y=-1,Q=null,Z=new iA,K=new iA,J=null,$=P.width,ee=P.height,et=1,ei=null,er=null,es=new iA(0,0,$,ee),ea=new iA(0,0,$,ee),en=!1,eo=new sx,el=!1,eh=!1,ec=null,ed=new i6,eu=new t9,ep=new iD,ef={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function em(){return null===X?et:1}let eg=D;function ev(e,t){for(let i=0;i<e.length;i++){let r=e[i],a=P.getContext(r,t);if(null!==a)return a}return null}try{if("setAttribute"in P&&P.setAttribute("data-engine","three.js r149"),P.addEventListener("webglcontextlost",eb,!1),P.addEventListener("webglcontextrestored",ew,!1),P.addEventListener("webglcontextcreationerror",eS,!1),null===eg){let e=["webgl2","webgl","experimental-webgl"];if(!0===G.isWebGL1Renderer&&e.shift(),eg=ev(e,{alpha:!0,depth:O,stencil:I,antialias:R,premultipliedAlpha:L,preserveDrawingBuffer:B,powerPreference:z,failIfMajorPerformanceCaveat:F}),null===eg)throw ev(e)?Error("Error creating WebGL context with your selected attributes."):Error("Error creating WebGL context.")}void 0===eg.getShaderPrecisionFormat&&(eg.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(e){throw e}function ey(){t=new sY(eg),i=new sD(eg,t,e),t.init(i),M=new nw(eg,t,i),r=new nx(eg,t,i),a=new sK,o=new nr,l=new nb(eg,t,r,o,i,M,a),h=new sI(G),c=new sX(G),d=new sw(eg,i),C=new sT(eg,t,d,i),p=new sQ(eg,d,a,C),f=new s1(eg,p,d,a),S=new s0(eg,i,l),x=new sO(o),m=new ni(G,h,c,t,i,C,x),g=new nT(G,o),v=new no,y=new np(t,i),w=new sE(G,h,c,r,f,N,L),b=new ny(G,f,i),E=new nP(eg,a,i,r),_=new sP(eg,t,a,i),A=new sZ(eg,t,a,i),a.programs=m.programs,G.capabilities=i,G.extensions=t,G.properties=o,G.renderLists=v,G.shadowMap=b,G.state=r,G.info=a}ey();let ex=new nE(G,eg);function eb(e){e.preventDefault(),W=!0}function ew(){W=!1;let e=a.autoReset,t=b.enabled,i=b.autoUpdate,r=b.needsUpdate,o=b.type;ey(),a.autoReset=e,b.enabled=t,b.autoUpdate=i,b.needsUpdate=r,b.type=o}function eS(e){}function e_(e){var t,i;let r,a=e.target;a.removeEventListener("dispose",e_),i=t=a,void 0!==(r=o.get(i).programs)&&(r.forEach(function(e){m.releaseProgram(e)}),i.isShaderMaterial&&m.releaseShaderCache(i)),o.remove(t)}this.xr=ex,this.getContext=function(){return eg},this.getContextAttributes=function(){return eg.getContextAttributes()},this.forceContextLoss=function(){let e=t.get("WEBGL_lose_context");e&&e.loseContext()},this.forceContextRestore=function(){let e=t.get("WEBGL_lose_context");e&&e.restoreContext()},this.getPixelRatio=function(){return et},this.setPixelRatio=function(e){void 0!==e&&(et=e,this.setSize($,ee,!1))},this.getSize=function(e){return e.set($,ee)},this.setSize=function(e,t,i){ex.isPresenting||($=e,ee=t,P.width=Math.floor(e*et),P.height=Math.floor(t*et),!1!==i&&(P.style.width=e+"px",P.style.height=t+"px"),this.setViewport(0,0,e,t))},this.getDrawingBufferSize=function(e){return e.set($*et,ee*et).floor()},this.setDrawingBufferSize=function(e,t,i){$=e,ee=t,et=i,P.width=Math.floor(e*i),P.height=Math.floor(t*i),this.setViewport(0,0,e,t)},this.getCurrentViewport=function(e){return e.copy(Z)},this.getViewport=function(e){return e.copy(es)},this.setViewport=function(e,t,i,a){e.isVector4?es.set(e.x,e.y,e.z,e.w):es.set(e,t,i,a),r.viewport(Z.copy(es).multiplyScalar(et).floor())},this.getScissor=function(e){return e.copy(ea)},this.setScissor=function(e,t,i,a){e.isVector4?ea.set(e.x,e.y,e.z,e.w):ea.set(e,t,i,a),r.scissor(K.copy(ea).multiplyScalar(et).floor())},this.getScissorTest=function(){return en},this.setScissorTest=function(e){r.setScissorTest(en=e)},this.setOpaqueSort=function(e){ei=e},this.setTransparentSort=function(e){er=e},this.getClearColor=function(e){return e.copy(w.getClearColor())},this.setClearColor=function(){w.setClearColor.apply(w,arguments)},this.getClearAlpha=function(){return w.getClearAlpha()},this.setClearAlpha=function(){w.setClearAlpha.apply(w,arguments)},this.clear=function(e=!0,t=!0,i=!0){let r=0;e&&(r|=16384),t&&(r|=256),i&&(r|=1024),eg.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){P.removeEventListener("webglcontextlost",eb,!1),P.removeEventListener("webglcontextrestored",ew,!1),P.removeEventListener("webglcontextcreationerror",eS,!1),v.dispose(),y.dispose(),o.dispose(),h.dispose(),c.dispose(),f.dispose(),C.dispose(),E.dispose(),m.dispose(),ex.dispose(),ex.removeEventListener("sessionstart",eM),ex.removeEventListener("sessionend",eC),ec&&(ec.dispose(),ec=null),eE.stop()},this.renderBufferDirect=function(e,t,a,f,m,v){null===t&&(t=ef);let y=m.isMesh&&0>m.matrixWorld.determinant(),b=function(e,t,a,d,p){var f,m;!0!==t.isScene&&(t=ef),l.resetTextureUnits();let v=t.fog,y=d.isMeshStandardMaterial?t.environment:null,b=null===X?G.outputEncoding:!0===X.isXRRenderTarget?X.texture.encoding:3e3,w=(d.isMeshStandardMaterial?c:h).get(d.envMap||y),_=!0===d.vertexColors&&!!a.attributes.color&&4===a.attributes.color.itemSize,A=!!d.normalMap&&!!a.attributes.tangent,M=!!a.morphAttributes.position,C=!!a.morphAttributes.normal,T=!!a.morphAttributes.color,P=d.toneMapped?G.toneMapping:0,D=a.morphAttributes.position||a.morphAttributes.normal||a.morphAttributes.color,O=void 0!==D?D.length:0,I=o.get(d),R=k.state.lights;if(!0===el&&(!0===eh||e!==Q)){let t=e===Q&&d.id===Y;x.setState(d,e,t)}let L=!1;d.version===I.__version?(I.needsLights&&I.lightsStateVersion!==R.state.ver
3135sion||I.outputEncoding!==b||p.isInstancedMesh&&!1===I.instancing||!p.isInstancedMesh&&!0===I.instancing||p.isSkinnedMesh&&!1===I.skinning||!p.isSkinnedMesh&&!0===I.skinning||I.envMap!==w||!0===d.fog&&I.fog!==v||void 0!==I.numClippingPlanes&&(I.numClippingPlanes!==x.numPlanes||I.numIntersection!==x.numIntersection)||I.vertexAlphas!==_||I.vertexTangents!==A||I.morphTargets!==M||I.morphNormals!==C||I.morphColors!==T||I.toneMapping!==P||!0===i.isWebGL2&&I.morphTargetsCount!==O)&&(L=!0):(L=!0,I.__version=d.version);let B=I.currentProgram;!0===L&&(B=eD(d,t,p));let z=!1,F=!1,N=!1,U=B.getUniforms(),V=I.uniforms;if(r.useProgram(B.program)&&(z=!0,F=!0,N=!0),d.id!==Y&&(Y=d.id,F=!0),z||Q!==e){if(U.setValue(eg,"projectionMatrix",e.projectionMatrix),i.logarithmicDepthBuffer&&U.setValue(eg,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),Q!==e&&(Q=e,F=!0,N=!0),d.isShaderMaterial||d.isMeshPhongMaterial||d.isMeshToonMaterial||d.isMeshStandardMaterial||d.envMap){let t=U.map.cameraPosition;void 0!==t&&t.setValue(eg,ep.setFromMatrixPosition(e.matrixWorld))}(d.isMeshPhongMaterial||d.isMeshToonMaterial||d.isMeshLambertMaterial||d.isMeshBasicMaterial||d.isMeshStandardMaterial||d.isShaderMaterial)&&U.setValue(eg,"isOrthographic",!0===e.isOrthographicCamera),(d.isMeshPhongMaterial||d.isMeshToonMaterial||d.isMeshLambertMaterial||d.isMeshBasicMaterial||d.isMeshStandardMaterial||d.isShaderMaterial||d.isShadowMaterial||p.isSkinnedMesh)&&U.setValue(eg,"viewMatrix",e.matrixWorldInverse)}if(p.isSkinnedMesh){U.setOptional(eg,p,"bindMatrix"),U.setOptional(eg,p,"bindMatrixInverse");let e=p.skeleton;e&&i.floatVertexTextures&&(null===e.boneTexture&&e.computeBoneTexture(),U.setValue(eg,"boneTexture",e.boneTexture,l),U.setValue(eg,"boneTextureSize",e.boneTextureSize))}let j=a.morphAttributes;if((void 0!==j.position||void 0!==j.normal||void 0!==j.color&&!0===i.isWebGL2)&&S.update(p,a,d,B),(F||I.receiveShadow!==p.receiveShadow)&&(I.receiveShadow=p.receiveShadow,U.setValue(eg,"receiveShadow",p.receiveShadow)),d.isMeshGouraudMaterial&&null!==d.envMap&&(V.envMap.value=w,V.flipEnvMap.value=w.isCubeTexture&&!1===w.isRenderTargetTexture?-1:1),F&&(U.setValue(eg,"toneMappingExposure",G.toneMappingExposure),I.needsLights&&(f=V,m=N,f.ambientLightColor.needsUpdate=m,f.lightProbe.needsUpdate=m,f.directionalLights.needsUpdate=m,f.directionalLightShadows.needsUpdate=m,f.pointLights.needsUpdate=m,f.pointLightShadows.needsUpdate=m,f.spotLights.needsUpdate=m,f.spotLightShadows.needsUpdate=m,f.rectAreaLights.needsUpdate=m,f.hemisphereLights.needsUpdate=m),v&&!0===d.fog&&g.refreshFogUniforms(V,v),g.refreshMaterialUniforms(V,d,et,ee,ec),aY.upload(eg,I.uniformsList,V,l)),d.isShaderMaterial&&!0===d.uniformsNeedUpdate&&(aY.upload(eg,I.uniformsList,V,l),d.uniformsNeedUpdate=!1),d.isSpriteMaterial&&U.setValue(eg,"center",p.center),U.setValue(eg,"modelViewMatrix",p.modelViewMatrix),U.setValue(eg,"normalMatrix",p.normalMatrix),U.setValue(eg,"modelMatrix",p.matrixWorld),p.previousModelViewMatrix&&U.setValue(eg,"previousModelViewMatrix",p.previousModelViewMatrix),e.previousProjectionMatrix&&U.setValue(eg,"previousProjectionMatrix",e.previousProjectionMatrix),d.isShaderMaterial||d.isRawShaderMaterial){let e=d.uniformsGroups;for(let t=0,r=e.length;t<r;t++)if(i.isWebGL2){let i=e[t];E.update(i,B),E.bind(i,B)}}return B}(e,t,a,f,m);r.setMaterial(f,y);let w=a.index,M=1;!0===f.wireframe&&(w=p.getWireframeAttribute(a),M=2);let T=a.drawRange,P=a.attributes.position,D=T.start*M,O=(T.start+T.count)*M;null!==v&&(D=Math.max(D,v.start*M),O=Math.min(O,(v.start+v.count)*M)),null!==w?(D=Math.max(D,0),O=Math.min(O,w.count)):null!=P&&(D=Math.max(D,0),O=Math.min(O,P.count));let I=O-D;if(I<0||I===1/0)return;C.setup(m,f,b,a,w);let R,L=_;if(null!==w&&(R=d.get(w),(L=A).setIndex(R)),m.isMesh)!0===f.wireframe?(r.setLineWidth(f.wireframeLinewidth*em()),L.setMode(1)):L.setMode(4);else if(m.isLine){let e=f.linewidth;void 0===e&&(e=1),r.setLineWidth(e*em()),m.isLineSegments?L.setMode(1):m.isLineLoop?L.setMode(2):L.setMode(3)}else m.isPoints?L.setMode(0):m.isSprite&&L.setMode(4);if(m.isInstancedMesh)L.renderInstances(D,I,m.count);else if(a.isInstancedBufferGeometry){let e=void 0!==a._maxInstanceCount?a._maxInstanceCount:1/0,t=Math.min(a.instanceCount,e);L.renderInstances(D,I,t)}else L.render(D,I)},this.compile=function(e,t){function i(e,t,i){!0===e.transparent&&2===e.side&&!1===e.forceSinglePass?(e.side=1,e.needsUpdate=!0,eD(e,t,i),e.side=0,e.needsUpdate=!0,eD(e,t,i),e.side=2):eD(e,t,i)}(k=y.get(e)).init(),j.push(k),e.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&(k.pushLight(e),e.castShadow&&k.pushShadow(e))}),k.setupLights(G.physicallyCorrectLights),e.traverse(function(t){let r=t.material;if(r)if(Array.isArray(r))for(let a=0;a<r.length;a++)i(r[a],e,t);else i(r,e,t)}),j.pop(),k=null};let eA=null;function eM(){eE.stop()}function eC(){eE.start()}let eE=new sb;function eT(e,a,o,h){var c,d,p;let f,m,g,v=e.opaque,y=e.transmissive,b=e.transparent;k.setupLightsView(o),!0===el&&x.setGlobalState(G.clippingPlanes,o),y.length>
31350&&(c=v,d=a,p=o,f=i.isWebGL2,null===ec&&(ec=new iM(1,1,{generateMipmaps:!0,type:t.has("EXT_color_buffer_half_float")?1016:1009,minFilter:1008,samples:f&&!0===R?4:0})),G.getDrawingBufferSize(eu),f?ec.setSize(eu.x,eu.y):ec.setSize(t4(eu.x),t4(eu.y)),m=G.getRenderTarget(),G.setRenderTarget(ec),G.clear(),g=G.toneMapping,G.toneMapping=0,eP(c,d,p),G.toneMapping=g,l.updateMultisampleRenderTarget(ec),l.updateRenderTargetMipmap(ec),G.setRenderTarget(m)),h&&r.viewport(Z.copy(h)),v.length>0&&eP(v,a,o),y.length>0&&eP(y,a,o),b.length>0&&eP(b,a,o),r.buffers.depth.setTest(!0),r.buffers.depth.setMask(!0),r.buffers.color.setMask(!0),r.setPolygonOffset(!1)}function eP(e,t,i){let r=!0===t.isScene?t.overrideMaterial:null;for(let p=0,f=e.length;p<f;p++){var a,o,l,h,c,d;let f=e[p],m=f.object,g=f.geometry,v=null===r?f.material:r,y=f.group;m.layers.test(i.layers)&&(a=m,o=t,l=i,h=g,c=v,d=y,a.onBeforeRender(G,o,l,h,c,d),a.modelViewMatrix.multiplyMatrices(l.matrixWorldInverse,a.matrixWorld),a.normalMatrix.getNormalMatrix(a.modelViewMatrix),c.onBeforeRender(G,o,l,h,a,d),!0===c.transparent&&2===c.side&&!1===c.forceSinglePass?(c.side=1,c.needsUpdate=!0,G.renderBufferDirect(l,o,h,c,a,d),c.side=0,c.needsUpdate=!0,G.renderBufferDirect(l,o,h,c,a,d),c.side=2):G.renderBufferDirect(l,o,h,c,a,d),a.onAfterRender(G,o,l,h,c,d))}}function eD(e,t,i){var r;!0!==t.isScene&&(t=ef);let a=o.get(e),l=k.state.lights,d=k.state.shadowsArray,p=l.state.version,f=m.getParameters(e,l.state,d,t,i),g=m.getProgramCacheKey(f),v=a.programs;a.environment=e.isMeshStandardMaterial?t.environment:null,a.fog=t.fog,a.envMap=(e.isMeshStandardMaterial?c:h).get(e.envMap||a.environment),void 0===v&&(e.addEventListener("dispose",e_),a.programs=v=new Map);let y=v.get(g);if(void 0!==y){if(a.currentProgram===y&&a.lightsStateVersion===p)return eO(e,f),y}else f.uniforms=m.getUniforms(e),e.onBuild(i,f,G),e.onBeforeCompile(f,G),y=m.acquireProgram(f,g),v.set(g,y),a.uniforms=f.uniforms;let b=a.uniforms;(e.isShaderMaterial||e.isRawShaderMaterial)&&!0!==e.clipping||(b.clippingPlanes=x.uniform),eO(e,f),a.needsLights=(r=e).isMeshLambertMaterial||r.isMeshToonMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.isShadowMaterial||r.isShaderMaterial&&!0===r.lights,a.lightsStateVersion=p,a.needsLights&&(b.ambientLightColor.value=l.state.ambient,b.lightProbe.value=l.state.probe,b.directionalLights.value=l.state.directional,b.directionalLightShadows.value=l.state.directionalShadow,b.spotLights.value=l.state.spot,b.spotLightShadows.value=l.state.spotShadow,b.rectAreaLights.value=l.state.rectArea,b.ltc_1.value=l.state.rectAreaLTC1,b.ltc_2.value=l.state.rectAreaLTC2,b.pointLights.value=l.state.point,b.pointLightShadows.value=l.state.pointShadow,b.hemisphereLights.value=l.state.hemi,b.directionalShadowMap.value=l.state.directionalShadowMap,b.directionalShadowMatrix.value=l.state.directionalShadowMatrix,b.spotShadowMap.value=l.state.spotShadowMap,b.spotLightMatrix.value=l.state.spotLightMatrix,b.spotLightMap.value=l.state.spotLightMap,b.pointShadowMap.value=l.state.pointShadowMap,b.pointShadowMatrix.value=l.state.pointShadowMatrix);let w=y.getUniforms(),S=aY.seqWithValue(w.seq,b);return a.currentProgram=y,a.uniformsList=S,y}function eO(e,t){let i=o.get(e);i.outputEncoding=t.outputEncoding,i.instancing=t.instancing,i.skinning=t.skinning,i.morphTargets=t.morphTargets,i.morphNormals=t.morphNormals,i.morphColors=t.morphColors,i.morphTargetsCount=t.morphTargetsCount,i.numClippingPlanes=t.numClippingPlanes,i.numIntersection=t.numClipIntersection,i.vertexAlphas=t.vertexAlphas,i.vertexTangents=t.vertexTangents,i.toneMapping=t.toneMapping}eE.setAnimationLoop(function(e){eA&&eA(e)}),"u">typeof self&&eE.setContext(self),this.setAnimationLoop=function(e){eA=e,ex.setAnimationLoop(e),null===e?eE.stop():eE.start()},ex.addEventListener("sessionstart",eM),ex.addEventListener("sessionend",eC),this.render=function(e,t){if(void 0!==t&&!0!==t.isCamera||!0===W)return;!0===e.matrixWorldAutoUpdate&&e.updateMatrixWorld(),null===t.parent&&!0===t.matrixWorldAutoUpdate&&t.updateMatrixWorld(),!0===ex.enabled&&!0===ex.isPresenting&&(!0===ex.cameraAutoUpdate&&ex.updateCamera(t),t=ex.getCamera()),!0===e.isScene&&e.onBeforeRender(G,e,t,X),(k=y.get(e,j.length)).init(),j.push(k),ed.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),eo.setFromProjectionMatrix(ed),eh=this.localClippingEnabled,el=x.init(this.clippingPlanes,eh),(U=v.get(e,V.length)).init(),V.push(U),function e(t,i,r,o){if(!1===t.visible)return;if(t.layers.test(i.layers)){if(t.isGroup)r=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(i);else if(t.isLight)k.pushLight(t),t.castShadow&&k.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||eo.intersectsSprite(t)){o&&ep.setFromMatrixPosition(t.matrixWorld).applyMatrix4(ed);let e=f.update(t),i=t.material;i.visible&&U.push(t,e,i,r,ep.z,null)}}else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==a.render.frame&&(t.skeleton.update(),t.skeleton.frame=a.render.frame),!t.frustumCulled||eo.intersectsObject(t))){o&&ep.setFromMatrixPosition(t.matrixWorld).applyMatrix4(ed);let e=f.update(t),i=t.material;if(Array.isArray(i)){let a=e.groups;for(let o=0,l=a.length;o<l;o++){let l=a[o],h=i[l.materialIndex];h&&h.visible&&U.push(t,e,h,r,ep.z,l)}}else i.visible&&U.push(t,e,i,r,ep.z,null)}}let l=t.children;for(let t=0,a=l.length;t<a;t++)e(l[t],i,r,o)}(e,t,0,G.sortObjects),U.finish(),!0===G.sortObjects&&U.sort(ei,er),!0===el&&x.beginShadows();let i=k.state.shadowsArray;if(b.render(i,e,t),!0===el&&x.endShadows(),!0===this.info.autoReset&&this.info.reset(),w.render(U,e),k.setupLights(G.physicallyCorrectLights),t.isArrayCamera){let i=t.cameras;for(let t=0,r=i.length;t<r;t++){let r=i[t];eT(U,e,r,r.viewport)}}else eT(U,e,t);null!==X&&(l.updateMultisampleRenderTarget(X),l.updateRenderTargetMipmap(X)),!0===e.isScene&&e.onAfterRender(G,e,t),C.resetDefaultState(),Y=-1,Q=null,j.pop(),k=j.length>0?j[j.length-1]:null,V.pop(),U=V.length>0?V[V.length-1]:null},this.getActiveCubeFace=function(){return H},this.getActiveMipmapLevel=function(){return q},this.getRenderTarget=function(){return X},this.setRenderTargetTextures=function(e,i,r){o.get(e.texture).__webglTexture=i,o.get(e.depthTexture).__webglTexture=r;let a=o.get(e);a.__hasExternalTextures=!0,a.__hasExternalTextures&&(a.__autoAllocateDepthBuffer=void 0===r,a.__autoAllocateDepthBuffer||!0===t.has("WEBGL_multisampled_render_to_texture")&&(a.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(e,t){let i=o.get(e);i.__webglFramebuffer=t,i.__useDefaultFramebuffer=void 0===t},this.setRenderTarget=function(e,t=0,a=0){X=e,H=t,q=a;let h=!0,c=null,d=!1,p=!1;if(e){let a=o.get(e);void 0!==a.__useDefaultFramebuffer?(r.bindFramebuffer(36160,null),h=!1):void 0===a.__webglFramebuffer?l.setupRenderTarget(e):a.__hasExternalTextures&&l.rebindTextures(e,o.get(e.texture).__webglTexture,o.get(e.depthTexture).__webglTexture);let f=e.texture;(f.isData3DTexture||f.isDataArrayTexture||f.isCompressedArrayTexture)&&(p=!0);let m=o.get(e).__webglFramebuffer;
3135e.isWebGLCubeRenderTarget?(c=m[t],d=!0):c=i.isWebGL2&&e.samples>0&&!1===l.useMultisampledRTT(e)?o.get(e).__webglMultisampledFramebuffer:m,Z.copy(e.viewport),K.copy(e.scissor),J=e.scissorTest}else Z.copy(es).multiplyScalar(et).floor(),K.copy(ea).multiplyScalar(et).floor(),J=en;if(r.bindFramebuffer(36160,c)&&i.drawBuffers&&h&&r.drawBuffers(e,c),r.viewport(Z),r.scissor(K),r.setScissorTest(J),d){let i=o.get(e.texture);eg.framebufferTexture2D(36160,36064,34069+t,i.__webglTexture,a)}else if(p){let i=o.get(e.texture);eg.framebufferTextureLayer(36160,36064,i.__webglTexture,a||0,t||0)}Y=-1},this.readRenderTargetPixels=function(e,a,l,h,c,d,p){if(!(e&&e.isWebGLRenderTarget))return;let f=o.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==p&&(f=f[p]),f){r.bindFramebuffer(36160,f);try{let r=e.texture,o=r.format,p=r.type;if(1023!==o&&M.convert(o)!==eg.getParameter(35739))return;let f=1016===p&&(t.has("EXT_color_buffer_half_float")||i.isWebGL2&&t.has("EXT_color_buffer_float"));if(1009!==p&&M.convert(p)!==eg.getParameter(35738)&&!(1015===p&&(i.isWebG
3135L2||t.has("OES_texture_float")||t.has("WEBGL_color_buffer_float")))&&!f)return;a>=0&&a<=e.width-h&&l>=0&&l<=e.height-c&&eg.readPixels(a,l,h,c,M.convert(o),M.convert(p),d)}finally{let e=null!==X?o.get(X).__webglFramebuffer:null;r.bindFramebuffer(36160,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,i,a,l,h,c){if(!(e&&e.isWebGLRenderTarget))throw Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let d=o.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==c&&(d=d[c]),d){let c=e.texture,f=c.format,m=c.type;if(t>=0&&t<=e.width-a&&i>=0&&i<=e.height-l){var p;r.bindFramebuffer(eg.FRAMEBUFFER,d);let e=eg.createBuffer();eg.bindBuffer(eg.PIXEL_PACK_BUFFER,e),eg.bufferData(eg.PIXEL_PACK_BUFFER,h.byteLength,eg.STREAM_READ),eg.readPixels(t,i,a,l,M.convert(f),M.convert(m),0);let c=null!==X?o.get(X).__webglFramebuffer:null;r.bindFramebuffer(eg.FRAMEBUFFER,c);let g=eg.fenceSync(eg.SYNC_GPU_COMMANDS_COMPLETE,0);return eg.flush(),await (p=eg,new Promise(function(e,t){setTimeout(function i(){switch(p.clientWaitSync(g,p.SYNC_FLUSH_COMMANDS_BIT,0)){case p.WAIT_FAILED:t();break;case p.TIMEOUT_EXPIRED:setTimeout(i,4);break;default:e()}},4)})),eg.bindBuffer(eg.PIXEL_PACK_BUFFER,e),eg.getBufferSubData(eg.PIXEL_PACK_BUFFER,0,h),eg.deleteBuffer(e),eg.deleteSync(g),h}throw Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t,i=0){let a=Math.pow(2,-i),o=Math.floor(t.image.width*a),h=Math.floor(t.image.height*a);l.setTexture2D(t,0),eg.copyTexSubImage2D(3553,i,0,0,e.x,e.y,o,h),r.unbindTexture()},this.copyTextureToTexture=function(e,t,i,a=0){let o=t.image.width,h=t.image.height,c=M.convert(i.format),d=M.convert(i.type);l.setTexture2D(i,0),eg.pixelStorei(37440,i.flipY),eg.pixelStorei(37441,i.premultiplyAlpha),eg.pixelStorei(3317,i.unpackAlignment),t.isDataTexture?eg.texSubImage2D(3553,a,e.x,e.y,o,h,c,d,t.image.data):t.isCompressedTexture?eg.compressedTexSubImage2D(3553,a,e.x,e.y,t.mipmaps[0].width,t.mipmaps[0].height,c,t.mipmaps[0].data):eg.texSubImage2D(3553,a,e.x,e.y,c,d,t.image),0===a&&i.generateMipmaps&&eg.generateMipmap(3553),r.unbindTexture()},this.copyTextureToTexture3D=function(e,t,i,a,o=0){if(G.isWebGL1Renderer)return;let h=e.max.x-e.min.x+1,c=e.max.y-e.min.y+1,d=e.max.z-e.min.z+1,p=M.convert(a.format),f=M.convert(a.type),m;if(a.isData3DTexture)l.setTexture3D(a,0),m=32879;else{if(!a.isDataArrayTexture)return;l.setTexture2DArray(a,0),m=35866}eg.pixelStorei(37440,a.flipY),eg.pixelStorei(37441,a.premultiplyAlpha),eg.pixelStorei(3317,a.unpackAlignment);let g=eg.getParameter(3314),v=eg.getParameter(32878),y=eg.getParameter(3316),x=eg.getParameter(3315),b=eg.getParameter(32877),w=i.isCompressedTexture?i.mipmaps[0]:i.image;eg.pixelStorei(3314,w.width),eg.pixelStorei(32878,w.height),eg.pixelStorei(3316,e.min.x),eg.pixelStorei(3315,e.min.y),eg.pixelStorei(32877,e.min.z),i.isDataTexture||i.isData3DTexture?eg.texSubImage3D(m,o,t.x,t.y,t.z,h,c,d,p,f,w.data):i.isCompressedArrayTexture?eg.compressedTexSubImage3D(m,o,t.x,t.y,t.z,h,c,d,p,w.data):eg.texSubImage3D(m,o,t.x,t.y,t.z,h,c,d,p,f,w),eg.pixelStorei(3314,g),eg.pixelStorei(32878,v),eg.pixelStorei(3316,y),eg.pixelStorei(3315,x),eg.pixelStorei(32877,b),0===o&&a.generateMipmaps&&eg.generateMipmap(m),r.unbindTexture()},this.initRenderTarget=function(e){void 0===o.get(e).__webglFramebuffer&&l.setupRenderTarget(e)},this.initTexture=function(e){e.isCubeTexture?l.setTextureCube(e,0):e.isData3DTexture?l.setTexture3D(e,0):e.isDataArrayTexture||e.isCompressedArrayTexture?l.setTexture2DArray(e,0):l.setTexture2D(e,0),r.unbindTexture()},this.resetState=function(){H=0,q=0,X=null,r.reset(),C.reset()},"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}(class extends nD{}).prototype.isWebGL1Renderer=!0;var nO=class{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new iv(e),this.near=t,this.far=i}clone(){return new nO(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}},nI=class extends rw{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t}get autoUpdate(){return this.matrixWorldAutoUpdate}set autoUpdate(e){this.matrixWorldAutoUpdate=e}},nR=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=tJ()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let r=0,a=this.stride;r<a;r++)this.array[e+r]=t.array[i+r];return this}set(e,t=0){return this.array.set(e,t),this}clone(e){void 0===e.arrayBuffers&&(e.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=tJ()),void 0===e.arrayBuffers[this.array.buffer._uuid]&&(e.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);let t=new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),i=new this.constructor(t,this.stride);return i.setUsage(this.usage),i}onUpload(e){return this.onUploadCallback=e,this}toJSON(e){return void 0===e.arrayBuffers&&(e.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=tJ()),void 0===e.arrayBuffers[this.array.buffer._uuid]&&(e.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}},nL=new iD,nB=class{constructor(e,t,i,r=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=e,this.itemSize=t,this.offset=i,this.normalized=r}
vendor: 5,189 bytes, line 3135
3135get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(e){this.data.needsUpdate=e}applyMatrix4(e){for(let t=0,i=this.data.count;t<i;t++)nL.fromBufferAttribute(this,t),nL.applyMatrix4(e),this.setXYZ(t,nL.x,nL.y,nL.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t<i;t++)nL.fromBufferAttribute(this,t),nL.applyNormalMatrix(e),this.setXYZ(t,nL.x,nL.y,nL.z);return this}transformDirection(e){for(let t=0,i=this.count;t<i;t++)nL.fromBufferAttribute(this,t),nL.transformDirection(e),this.setXYZ(t,nL.x,nL.y,nL.z);return this}setX(e,t){return this.normalized&&(t=t6(t,this.array)),this.data.array[e*this.data.stride+this.offset]=t,this}setY(e,t){return this.normalized&&(t=t6(t,this.array)),this.data.array[e*this.data.stride+this.offset+1]=t,this}setZ(e,t){return this.normalized&&(t=t6(t,this.array)),this.data.array[e*this.data.stride+this.offset+2]=t,this}setW(e,t){return this.normalized&&(t=t6(t,this.array)),this.data.array[e*this.data.stride+this.offset+3]=t,this}getX(e){let t=this.data.array[e*this.data.stride+this.offset];return this.normalized&&(t=t5(t,this.array)),t}getY(e){let t=this.data.array[e*this.data.stride+this.offset+1];return this.normalized&&(t=t5(t,this.array)),t}getZ(e){let t=this.data.array[e*this.data.stride+this.offset+2];return this.normalized&&(t=t5(t,this.array)),t}getW(e){let t=this.data.array[e*this.data.stride+this.offset+3];return this.normalized&&(t=t5(t,this.array)),t}setXY(e,t,i){return e=e*this.data.stride+this.offset,this.normalized&&(t=t6(t,this.array),i=t6(i,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this}setXYZ(e,t,i,r){return e=e*this.data.stride+this.offset,this.normalized&&(t=t6(t,this.array),i=t6(i,this.array),r=t6(r,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this.data.array[e+2]=r,this}setXYZW(e,t,i,r,a){return e=e*this.data.stride+this.offset,this.normalized&&(t=t6(t,this.array),i=t6(i,this.array),r=t6(r,this.array),a=t6(a,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=i,this.data.array[e+2]=r,this.data.array[e+3]=a,this}clone(e){if(void 0!==e)return void 0===e.interleavedBuffers&&(e.interleavedBuffers={}),void 0===e.interleavedBuffers[this.data.uuid]&&(e.interleavedBuffers[this.data.uuid]=this.data.clone(e)),new nB(e.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized);{let e=[];for(let t=0;t<this.count;t++){let i=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[i+t])}return new rN(new this.array.constructor(e),this.itemSize,this.normalized)}}toJSON(e){if(void 0!==e)return void 0===e.interleavedBuffers&&(e.interleavedBuffers={}),void 0===e.interleavedBuffers[this.data.uuid]&&(e.interleavedBuffers[this.data.uuid]=this.data.toJSON(e)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized};{let e=[];for(let t=0;t<this.count;t++){let i=t*this.data.stride+this.offset;for(let t=0;t<this.itemSize;t++)e.push(this.data.array[i+t])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:e,normalized:this.normalized}}}},nz=class extends rw{constructor(){super(),this.isBone=!0,this.type="Bone"}},nF=class extends i_{constructor(e=null,t=1,i=1,r,a,o,l,h,c=1003,d=1003,p,f){super(null,o,l,h,c,d,r,a,p,f),this.isDataTexture=!0,this.image={data:e,width:t,height:i},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},nN=new i6,nU=new i6,nk=class{constructor(e=[],t=[]){this.uuid=tJ(),this.bones=e.slice(0),this.boneInverses=t,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}init(){let e=this.bones,t=this.boneInverses;if(this.boneMatrices=new Float32Array(16*e.length),0===t.length)this.calculateInverses();else if(e.length!==t.length){this.boneInverses=[];for(let e=0,t=this.bones.length;e<t;e++)this.boneInverses.push(new i6)}}calculateInverses(){this.boneInverses.length=0;for(let e=0,t=this.bones.length;e<t;e++){let t=new i6;this.bones[e]&&t.copy(this.bones[e].matrixWorld).invert(),this.boneInverses.push(t)}}pose(){for(let e=0,t=this.bones.length;e<t;e++){let t=this.bones[e];t&&t.matrixWorld.copy(this.boneInverses[e]).invert()}for(let e=0,t=this.bones.length;e<t;e++){let t=this.bones[e];t&&(t.parent&&t.parent.isBone?(t.matrix.copy(t.parent.matrixWorld).invert(),t.matrix.multiply(t.matrixWorld)):t.matrix.copy(t.matrixWorld),t.matrix.decompose(t.position,t.quaternion,t.scale))}}update(){let e=this.bones,t=this.boneInverses,i=this.boneMatrices,r=this.boneTexture;for(let r=0,a=e.length;r<a;r++){let a=e[r]?e[r].matrixWorld:nU;nN.multiplyMatrices(a,t[r]),nN.toArray(i,16*r)}null!==r&&(r.needsUpdate=!0)}clone(){return new nk(this.bones,this.boneInverses)}computeBoneTexture(){let e=Math.sqrt(4*this.bones.length),t=new Float32Array((e=Math.max(e=t3(e),4))*e*4);t.set(this.boneMatrices);let i=new nF(t,e,e,1023,1015);return i.needsUpdate=!0,this.boneMatrices=t,this.boneTexture=i,this.boneTextureSize=e,this}getBoneByName(e){for(let t=0,i=this.bones.length;t<i;t++){let i=this.bones[t];if(i.name===e)return i}}dispose(){null!==this.boneTexture&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(e,t){this.uuid=e.uuid;
3135for(let i=0,r=e.bones.length;i<r;i++){let r=t[e.bones[i]];void 0===r&&(r=new nz),this.bones.push(r),this.boneInverses.push(new i6().fromArray(e.boneInverses[i]))}return this.init(),this}toJSON(){let e={metadata:{version:4.5,type:"Skeleton",generator:"Skeleton.toJSON"},bones:[],boneInverses:[]};e.uuid=this.uuid;let t=this.bones,i=this.boneInverses;for(let r=0,a=t.length;r<a;r++){let a=t[r];e.bones.push(a.uuid);let o=i[r];e.boneInverses.push(o.toArray())}return e}},nV=class extends rN{constructor(e,t,i,r=1){super(e,t,i),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=r}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}toJSON(){let e=super.toJSON();return e.meshPerAttribute=this.meshPerAttribute,e.isInstancedBufferAttribute=!0,e}},nj=new i6,nG=new i6,nW=[],nH=new i6,nq=new r7,nX=class extends r7{constructor(e,t,i){super(e,t),this.isInstancedMesh=!0,this.instanceMatrix=new nV(new Float32Array(16*i),16),this.instanceColor=null,this.count=i,this.frustumCulled=!1;for(let e=0;e<i;e++)this.setMatrixAt(e,nH)}copy(e,t){return super.copy(e,t),this.instanceMatrix.copy(e.instanceMatrix),null!==e.instanceColor&&(this.instanceColor=e.instanceColor.clone()),this.count=e.count,this}getColorAt(e,t){t.fromArray(this.instanceColor.array,3*e)}getMatrixAt(e,t){t.fromArray(this.instanceMatrix.array,16*e)}raycast(e,t){let i=this.matrixWorld,r=this.count;if(nq.geometry=this.geometry,nq.material=this.material,void 0!==nq.material)for(let a=0;a<r;a++){this.getMatrixAt(a,nj),nG.multiplyMatrices(i,nj),nq.matrixWorld=nG,nq.raycast(e,nW);for(let e=0,i=nW.length;e<i;e++){let i=nW[e];i.instanceId=a,i.object=this,t.push(i)}nW.length=0}}setColorAt(e,t){null===this.instanceColor&&(this.instanceColor=new nV(new Float32Array(3*this.instanceMatrix.count),3)),t.toArray(this.instanceColor.array,3*e)}setMatrixAt(e,t){t.toArray(this.instanceMatrix.array,16*e)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:"dispose"})}},nY=class extends rL{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new iv(0xffffff),this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},nQ=new iD,nZ=new iD,nK=new i6,nJ=new i5,n$=new iK,n0=class extends rw{constructor(e=new rQ,t=new nY){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,i=[0];for(let e=1,r=t.count;e<r;e++)nQ.fromBufferAttribute(t,e-1),nZ.fromBufferAttribute(t,e),i[e]=i[e-1],i[e]+=nQ.distanceTo(nZ);e.setAttribute("lineDistance",new rV(i,1))}return this}raycast(e,t){let i=this.geometry,r=this.matrixWorld,a=e.params.Line.threshold,o=i.drawRange;if(null===i.boundingSphere&&i.computeBoundingSphere(),n$.copy(i.boundingSphere),n$.applyMatrix4(r),n$.radius+=a,!1===e.ray.intersectsSphere(n$))return;nK.copy(r).invert(),nJ.copy(e.ray).applyMatrix4(nK);let l=a/((this.scale.x+this.scale.y+this.scale.z)/3),h=l*l,c=new iD,d=new iD,p=new iD,f=new iD,m=this.isLineSegments?2:1,g=i.index,v=i.attributes.position;if(null!==g){let i=Math.max(0,o.start),r=Math.min(g.count,o.start+o.count);for(let a=i,o=r-1;a<o;a+=m){let i=g.getX(a),r=g.getX(a+1);if(c.fromBufferAttribute(v,i),d.fromBufferAttribute(v,r),nJ.distanceSqToSegment(c,d,f,p)>h)continue;
3135f.applyMatrix4(this.matrixWorld);let o=e.ray.origin.distanceTo(f);o<e.near||o>e.far||t.push({distance:o,point:p.clone().applyMatrix4(this.matrixWorld),index:a,face:null,faceIndex:null,object:this})}}else{let i=Math.max(0,o.start),r=Math.min(v.count,o.start+o.count);for(let a=i,o=r-1;a<o;a+=m){if(c.fromBufferAttribute(v,a),d.fromBufferAttribute(v,a+1),nJ.distanceSqToSegment(c,d,f,p)>h)continue;f.applyMatrix4(this.matrixWorld);let i=e.ray.origin.distanceTo(f);i<e.near||i>e.far||t.push({distance:i,point:p.clone().applyMatrix4(this.matrixWorld),index:a,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let i=e[t[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=i.length;e<t;e++){let t=i[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}},n1=new iD,n2=new iD,n3=class extends n0{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){let e=this.geometry;if(null===e.index){let t=e.attributes.position,i=[];for(let e=0,r=t.count;e<r;e+=2)n1.fromBufferAttribute(t,e),n2.fromBufferAttribute(t,e+1),i[e]=0===e?0:i[e-1],i[e+1]=i[e]+n1.distanceTo(n2);e.setAttribute("lineDistance",new rV(i,1))}return this}},n4=class extends i_{constructor(e,t,i,r,a,o,l,h,c){super(e,t,i,r,a,o,l,h,c),this.isVideoTexture=!0,this.minFilter=void 0!==o?o:1006,this.magFilter=void 0!==a?a:1006,this.generateMipmaps=!1;let d=this;"requestVideoFrameCallback"in e&&e.requestVideoFrameCallback(function t(){d.needsUpdate=!0,e.requestVideoFrameCallback(t)})}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;"requestVideoFrameCallback"in e==!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}},n5=class extends i_{constructor(e,t,i,r,a,o,l,h,c){super(e,t,i,r,a,o,l,h,c),this.isCanvasTexture=!0,this.needsUpdate=!0}},n6=class{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return null}getPointAt(e,t){let i=this.getUtoTmapping(e);return this.getPoint(i,t)}getPoints(e=5){let t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return t}getSpacedPoints(e=5){let t=[];for(let i=0;i<=e;i++)t.push(this.getPointAt(i/e));return t}getLength(){let e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;let t=[],i,r=this.getPoint(0),a=0;t.push(0);for(let o=1;o<=e;o++)t.push(a+=(i=this.getPoint(o/e)).distanceTo(r)),r=i;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){let i=this.getLengths(),r=0,a=i.length,o;o=t||e*i[a-1];let l=0,h=a-1,c;for(;l<=h;)if((c=i[r=Math.floor(l+(h-l)/2)]-o)<0)l=r+1;else if(c>0)h=r-1;else{h=r;break}if(i[r=h]===o)return r/(a-1);let d=i[r],p=i[r+1]-d;return(r+(o-d)/p)/(a-1)}getTangent(e,t){let i=e-1e-4,r=e+1e-4;i<0&&(i=0),r>1&&(r=1);let a=this.getPoint(i),o=this.getPoint(r),l=t||(a.isVector2?new t9:new iD);return l.copy(o).sub(a).normalize(),l}getTangentAt(e,t){let i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t){let i=new iD,r=[],a=[],o=[],l=new iD,h=new i6;for(let t=0;t<=e;t++){let i=t/e;r[t]=this.getTangentAt(i,new iD)}a[0]=new iD,o[0]=new iD;let c=Number.MAX_VALUE,d=Math.abs(r[0].x),p=Math.abs(r[0].y),f=Math.abs(r[0].z);d<=c&&(c=d,i.set(1,0,0)),p<=c&&(c=p,i.set(0,1,0)),f<=c&&i.set(0,0,1),l.crossVectors(r[0],i).normalize(),a[0].crossVectors(r[0],l),o[0].crossVectors(r[0],a[0]);for(let t=1;t<=e;t++){if(a[t]=a[t-1].clone(),o[t]=o[t-1].clone(),l.crossVectors(r[t-1],r[t]),l.length()>Number.EPSILON){l.normalize();let e=Math.acos(t$(r[t-1].dot(r[t]),-1,1));a[t].applyMatrix4(h.makeRotationAxis(l,e))}o[t].crossVectors(r[t],a[t])}if(!0===t){let t=Math.acos(t$(a[0].dot(a[e]),-1,1));t/=e,r[0].dot(l.crossVectors(a[0],a[e]))>0&&(t=-t);for(let i=1;i<=e;i++)a[i].applyMatrix4(h.makeRotationAxis(r[i],t*i)),o[i].crossVectors(r[i],a[i])}return{tangents:r,normals:a,binormals:o}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.t
3135ype,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},n8=class extends n6{constructor(e=0,t=0,i=1,r=1,a=0,o=2*Math.PI,l=!1,h=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=r,this.aStartAngle=a,this.aEndAngle=o,this.aClockwise=l,this.aRotation=h}getPoint(e,t){let i=t||new t9,r=2*Math.PI,a=this.aEndAngle-this.aStartAngle,o=Math.abs(a)<Number.EPSILON;for(;a<0;)a+=r;for(;a>r;)a-=r;a<Number.EPSILON&&(a=o?0:r),!0!==this.aClockwise||o||(a===r?a=-r:a-=r);let l=this.aStartAngle+e*a,h=this.aX+this.xRadius*Math.cos(l),c=this.aY+this.yRadius*Math.sin(l);if(0!==this.aRotation){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),i=h-this.aX,r=c-this.aY;h=i*e-r*t+this.aX,c=i*t+r*e+this.aY}return i.set(h,c)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},n9=class extends n8{constructor(e,t,i,r,a,o){super(e,t,i,i,r,a,o),this.isArcCurve=!0,this.type="ArcCurve"}};function n7(){let e=0,t=0,i=0,r=0;function a(a,o,l,h){e=a,t=l,i=-3*a+3*o-2*l-h,r=2*a-2*o+l+h}return{initCatmullRom:function(e,t,i,r,o){a(t,i,o*(i-e),o*(r-t))},initNonuniformCatmullRom:function(e,t,i,r,o,l,h){let c=(t-e)/o-(i-e)/(o+l)+(i-t)/l,d=(i-t)/l-(r-t)/(l+h)+(r-i)/h;a(t,i,c*=l,d*=l)},calc:function(a){let o=a*a;return e+t*a+i*o+o*a*r}}}var oe=new iD,ot=new n7,oi=new n7,or=new n7,os=class extends n6{constructor(e=[],t=!1,i="centripetal",r=.5){super(),this.isCatmullRomCurve3=!0,this.type="CatmullRomCurve3",this.points=e,this.closed=t,this.curveType=i,this.tension=r}getPoint(e,t=new iD){let i,r,a=this.points,o=a.length,l=(o-!this.closed)*e,h=Math.floor(l),c=l-h;this.closed?h+=h>0?0:(Math.floor(Math.abs(h)/o)+1)*o:0===c&&h===o-1&&(h=o-2,c=1),this.closed||h>0?i=a[(h-1)%o]:(oe.subVectors(a[0],a[1]).add(a[0]),i=oe);let d=a[h%o],p=a[(h+1)%o];if(this.closed||h+2<o?r=a[(h+2)%o]:(oe.subVectors(a[o-1],a[o-2]).add(a[o-1]),r=oe),"centripetal"===this.curveType||"chordal"===this.curveType){let e="chordal"===this.curveType?.5:.25,t=Math.pow(i.distanceToSquared(d),e),a=Math.pow(d.distanceToSquared(p),e),o=Math.pow(p.distanceToSquared(r),e);a<1e-4&&(a=1),t<1e-4&&(t=a),o<1e-4&&(o=a),ot.initNonuniformCatmullRom(i.x,d.x,p.x,r.x,t,a,o),oi.initNonuniformCatmullRom(i.y,d.y,p.y,r.y,t,a,o),or.initNonuniformCatmullRom(i.z,d.z,p.z,r.z,t,a,o)}else"catmullrom"===this.curveType&&(ot.initCatmullRom(i.x,d.x,p.x,r.x,this.tension),oi.initCatmullRom(i.y,d.y,p.y,r.y,this.tension),or.initCatmullRom(i.z,d.z,p.z,r.z,this.tension));return t.set(ot.calc(c),oi.calc(c),or.calc(c)),t}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(i.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];e.points.push(i.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(new iD().fromArray(i))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}};function oa(e,t,i,r,a){let o=(r-t)*.5,l=(a-i)*.5,h=e*e;return e*h*(2*i-2*r+o+l)+(-3*i+3*r-2*o-l)*h+o*e+i}function on(e,t,i,r){let a;return(a=1-e)*a*t+2*(1-e)*e*i+e*e*r}function oo(e,t,i,r,a){let o,l;return(o=1-e)*o*o*t+3*(l=1-e)*l*e*i+3*(1-e)*e*e*r+e*e*e*a}var ol=class extends n6{constructor(e=new t9,t=new t9,i=new t9,r=new t9){super(),this.isCubicBezierCurve=!0,this.type="CubicBezierCurve",this.v0=e,this.v1=t,this.v2=i,this.v3=r}getPoint(e,t=new t9){let i=this.v0,r=this.v1,a=this.v2,o=this.v3;return t.set(oo(e,i.x,r.x,a.x,o.x),oo(e,i.y,r.y,a.y,o.y)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},oh=class extends n6{constructor(e=new iD,t=new iD,i=new iD,r=new iD){super(),this.isCubicBezierCurve3=!0,this.type="CubicBezierCurve3",this.v0=e,this.v1=t,this.v2=i,this.v3=r}getPoint(e,t=new iD){let i=this.v0,r=this.v1,a=this.v2,o=this.v3;return t.set(oo(e,i.x,r.x,a.x,o.x),oo(e,i.y,r.y,a.y,o.y),oo(e,i.z,r.z,a.z,o.z)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}},oc=class extends n6{constructor(e=new t9,t=new t9){super(),this.isLineCurve=!0,this.type="LineCurve",this.v1=e,this.v2=t}getPoint(e,t=new t9){return 1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t){let i=t||new t9;return i.copy(this.v2).sub(this.v1).normalize(),i}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},od=class extends n6{constructor(e=new iD,t=new iD){super(),this.isLineCurve3=!0,this.type="LineCurve3",this.v1=e,this.v2=t}getPoint(e,t=new iD){return 1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t){return this.getPoint(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},ou=class extends n6{constructor(e=new t9,t=new t9,i=new t9){super(),this.isQuadraticBezierCurve=!0,this.type="QuadraticBezierCurve",this.v0=e,this.v1=t,this.v2=i}
vendor: 8,305 bytes, line 3135
3135getPoint(e,t=new t9){let i=this.v0,r=this.v1,a=this.v2;return t.set(on(e,i.x,r.x,a.x),on(e,i.y,r.y,a.y)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},op=class extends n6{constructor(e=new iD,t=new iD,i=new iD){super(),this.isQuadraticBezierCurve3=!0,this.type="QuadraticBezierCurve3",this.v0=e,this.v1=t,this.v2=i}getPoint(e,t=new iD){let i=this.v0,r=this.v1,a=this.v2;return t.set(on(e,i.x,r.x,a.x),on(e,i.y,r.y,a.y),on(e,i.z,r.z,a.z)),t}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){let e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}},of=class extends n6{constructor(e=[]){super(),this.isSplineCurve=!0,this.type="SplineCurve",this.points=e}getPoint(e,t=new t9){let i=this.points,r=(i.length-1)*e,a=Math.floor(r),o=r-a,l=i[0===a?a:a-1],h=i[a],c=i[a>i.length-2?i.length-1:a+1],d=i[a>i.length-3?i.length-1:a+2];return t.set(oa(o,l.x,h.x,c.x,d.x),oa(o,l.y,h.y,c.y,d.y)),t}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(i.clone())}return this}toJSON(){let e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];e.points.push(i.toArray())}return e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t<i;t++){let i=e.points[t];this.points.push(new t9().fromArray(i))}return this}},om=Object.freeze({__proto__:null,ArcCurve:n9,CatmullRomCurve3:os,CubicBezierCurve:ol,CubicBezierCurve3:oh,EllipseCurve:n8,LineCurve:oc,LineCurve3:od,QuadraticBezierCurve:ou,QuadraticBezierCurve3:op,SplineCurve:of}),og=class extends n6{constructor(){super(),this.type="CurvePath",this.curves=[],this.autoClose=!1}add(e){this.curves.push(e)}closePath(){let e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);e.equals(t)||this.curves.push(new oc(t,e))}getPoint(e,t){let i=e*this.getLength(),r=this.getCurveLengths(),a=0;for(;a<r.length;){if(r[a]>=i){let e=r[a]-i,o=this.curves[a],l=o.getLength(),h=0===l?0:1-e/l;return o.getPointAt(h,t)}a++}return null}getLength(){let e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;let e=[],t=0;for(let i=0,r=this.curves.length;i<r;i++)e.push(t+=this.curves[i].getLength());return this.cacheLengths=e,e}getSpacedPoints(e=40){let t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return this.autoClose&&t.push(t[0]),t}getPoints(e=12){let t=[],i;for(let r=0,a=this.curves;r<a.length;r++){let o=a[r],l=o.isEllipseCurve?2*e:o.isLineCurve||o.isLineCurve3?1:o.isSplineCurve?e*o.points.length:e,h=o.getPoints(l);for(let e=0;e<h.length;e++){let r=h[e];i&&i.equals(r)||(t.push(r),i=r)}}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t<i;t++){let i=e.curves[t];this.curves.push(i.clone())}return this.autoClose=e.autoClose,this}toJSON(){let e=super.toJSON();e.autoClose=this.autoClose,e.curves=[];for(let t=0,i=this.curves.length;t<i;t++){let i=this.curves[t];e.curves.push(i.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.autoClose=e.autoClose,this.curves=[];for(let t=0,i=e.curves.length;t<i;t++){let i=e.curves[t];this.curves.push(new om[i.type]().fromJSON(i))}return this}},ov=class extends og{constructor(e){super(),this.type="Path",this.currentPoint=new t9,e&&this.setFromPoints(e)}setFromPoints(e){this.moveTo(e[0].x,e[0].y);for(let t=1,i=e.length;t<i;t++)this.lineTo(e[t].x,e[t].y);return this}moveTo(e,t){return this.currentPoint.set(e,t),this}lineTo(e,t){let i=new oc(this.currentPoint.clone(),new t9(e,t));return this.curves.push(i),this.currentPoint.set(e,t),this}quadraticCurveTo(e,t,i,r){let a=new ou(this.currentPoint.clone(),new t9(e,t),new t9(i,r));return this.curves.push(a),this.currentPoint.set(i,r),this}bezierCurveTo(e,t,i,r,a,o){let l=new ol(this.currentPoint.clone(),new t9(e,t),new t9(i,r),new t9(a,o));return this.curves.push(l),this.currentPoint.set(a,o),this}splineThru(e){let t=new of([this.currentPoint.clone()].concat(e));return this.curves.push(t),this.currentPoint.copy(e[e.length-1]),this}arc(e,t,i,r,a,o){let l=this.currentPoint.x,h=this.currentPoint.y;return this.absarc(e+l,t+h,i,r,a,o),this}absarc(e,t,i,r,a,o){return this.absellipse(e,t,i,i,r,a,o),this}ellipse(e,t,i,r,a,o,l,h){let c=this.currentPoint.x,d=this.currentPoint.y;return this.absellipse(e+c,t+d,i,r,a,o,l,h),this}absellipse(e,t,i,r,a,o,l,h){let c=new n8(e,t,i,r,a,o,l,h);if(this.curves.length>0){let e=c.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(c);let d=c.getPoint(1);return this.currentPoint.copy(d),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){let e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}},oy=class extends rQ{constructor(e=[new t9(0,-.5),new t9(.5,0),new t9(0,.5)],t=12,i=0,r=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:e,segments:t,phiStart:i,phiLength:r},t=Math.floor(t),r=t$(r,0,2*Math.PI);let a=[],o=[],l=[],h=[],c=[],d=1/t,p=new iD,f=new t9,m=new iD,g=new iD,v=new iD,y=0,x=0;for(let t=0;t<=e.length-1;t++)switch(t){case 0:y=e[t+1].x-e[t].x,m.x=+(x=e[t+1].y-e[t].y),m.y=-y,m.z=0*x,v.copy(m),m.normalize(),h.push(m.x,m.y,m.z);break;case e.length-1:h.push(v.x,v.y,v.z);break;default:y=e[t+1].x-e[t].x,m.x=+(x=e[t+1].y-e[t].y),m.y=-y,m.z=0*x,g.copy(m),m.x+=v.x,m.y+=v.y,m.z+=v.z,m.normalize(),h.push(m.x,m.y,m.z),v.copy(g)}for(let a=0;a<=t;a++){let m=i+a*d*r,g=Math.sin(m),v=Math.cos(m);for(let i=0;i<=e.length-1;i++){p.x=e[i].x*g,p.y=e[i].y,p.z=e[i].x*v,o.push(p.x,p.y,p.z),f.x=a/t,f.y=i/(e.length-1),l.push(f.x,f.y);let r=h[3*i+0]*g,d=h[3*i+1],m=h[3*i+0]*v;c.push(r,d,m)}}for(let i=0;i<t;i++)for(let t=0;t<e.length-1;t++){let r=t+i*e.length,o=r+e.length,l=r+e.length+1,h=r+1;a.push(r,o,h),a.push(l,h,o)}this.setIndex(a),this.setAttribute("position",new rV(o,3)),this.setAttribute("uv",new rV(l,2)),this.setAttribute("normal",new rV(c,3))}static fromJSON(e){return new oy(e.points,e.segments,e.phiStart,e.phiLength)}},ox=class extends rQ{constructor(e=1,t=1,i=1,r=32,a=1,o=!1,l=0,h=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:e,radiusBottom:t,height:i,radialSegments:r,heightSegments:a,openEnded:o,thetaStart:l,thetaLength:h};let c=this;r=Math.floor(r),a=Math.floor(a);let d=[],p=[],f=[],m=[],g=0,v=[],y=i/2,x=0;function b(i){let a=g,o=new t9,v=new iD,b=0,w=!0===i?e:t,S=!0===i?1:-1;for(let e=1;e<=r;e++)p.push(0,y*S,0),f.push(0,S,0),m.push(.5,.5),g++;let _=g;for(let e=0;e<=r;e++){let t=e/r*h+l,i=Math.cos(t),a=Math.sin(t);v.x=w*a,v.y=y*S,v.z=w*i,p.push(v.x,v.y,v.z),f.push(0,S,0),o.x=.5*i+.5,o.y=.5*a*S+.5,m.push(o.x,o.y),g++}for(let e=0;e<r;e++){let t=a+e,r=_+e;!0===i?d.push(r,r+1,t):d.push(r+1,r,t),b+=3}c.addGroup(x,b,!0===i?1:2),x+=b}(function(){let o=new iD,b=new iD,w=0,S=(t-e)/i;for(let c=0;c<=a;c++){let d=[],x=c/a,w=x*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,a=t*h+l,c=Math.sin(a),v=Math.cos(a);b.x=w*c,b.y=-x*i+y,b.z=w*v,p.push(b.x,b.y,b.z),o.set(c,S,v).normalize(),f.push(o.x,o.y,o.z),m.push(t,1-x),d.push(g++)}v.push(d)}for(let e=0;e<r;e++)for(let t=0;t<a;t++){let i=v[t][e],r=v[t+1][e],a=v[t+1][e+1],o=v[t][e+1];d.push(i,r,o),d.push(r,a,o),w+=6}c.addGroup(x,w,0),x+=w})(),!1===o&&(e>0&&b(!0),t>0&&b(!1)),this.setIndex(d),this.setAttribute("position",new rV(p,3)),this.setAttribute("normal",new rV(f,3)),this.setAttribute("uv",new rV(m,2))}static fromJSON(e){return new ox(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}},ob=class extends ox{constructor(e=1,t=1,i=32,r=1,a=!1,o=0,l=2*Math.PI){super(0,e,t,i,r,a,o,l),this.type="C
3135oneGeometry",this.parameters={radius:e,height:t,radialSegments:i,heightSegments:r,openEnded:a,thetaStart:o,thetaLength:l}}static fromJSON(e){return new ob(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}},ow=class extends rQ{constructor(e=[],t=[],i=1,r=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:e,indices:t,radius:i,detail:r};let a=[],o=[];function l(e){a.push(e.x,e.y,e.z)}function h(t,i){let r=3*t;i.x=e[r+0],i.y=e[r+1],i.z=e[r+2]}function c(e,t,i,r){r<0&&1===e.x&&(o[t]=e.x-1),0===i.x&&0===i.z&&(o[t]=r/2/Math.PI+.5)}function d(e){return Math.atan2(e.z,-e.x)}(function(e){let i=new iD,r=new iD,a=new iD;for(let o=0;o<t.length;o+=3)h(t[o+0],i),h(t[o+1],r),h(t[o+2],a),function(e,t,i,r){let a=r+1,o=[];for(let r=0;r<=a;r++){o[r]=[];let l=e.clone().lerp(i,r/a),h=t.clone().lerp(i,r/a),c=a-r;for(let e=0;e<=c;e++)0===e&&r===a?o[r][e]=l:o[r][e]=l.clone().lerp(h,e/c)}for(let e=0;e<a;e++)for(let t=0;t<2*(a-e)-1;t++){let i=Math.floor(t/2);t%2==0?(l(o[e][i+1]),l(o[e+1][i]),l(o[e][i])):(l(o[e][i+1]),l(o[e+1][i+1]),l(o[e+1][i]))}}(i,r,a,e)})(r),function(e){let t=new iD;for(let i=0;i<a.length;i+=3)t.x=a[i+0],t.y=a[i+1],t.z=a[i+2],t.normalize().multiplyScalar(e),a[i+0]=t.x,a[i+1]=t.y,a[i+2]=t.z}(i),function(){let e=new iD;for(let i=0;i<a.length;i+=3){var t;e.x=a[i+0],e.y=a[i+1],e.z=a[i+2];let r=d(e)/2/Math.PI+.5,l=Math.atan2(-(t=e).y,Math.sqrt(t.x*t.x+t.z*t.z))/Math.PI+.5;o.push(r,1-l)}(function(){let e=new iD,t=new iD,i=new iD,r=new iD,l=new t9,h=new t9,p=new t9;for(let f=0,m=0;f<a.length;f+=9,m+=6){e.set(a[f+0],a[f+1],a[f+2]),t.set(a[f+3],a[f+4],a[f+5]),i.set(a[f+6],a[f+7],a[f+8]),l.set(o[m+0],o[m+1]),h.set(o[m+2],o[m+3]),p.set(o[m+4],o[m+5]),r.copy(e).add(t).add(i).divideScalar(3);let g=d(r);c(l,m+0,e,g),c(h,m+2,t,g),c(p,m+4,i,g)}})(),function(){for(let e=0;e<o.length;e+=6){let t=o[e+0],i=o[e+2],r=o[e+4],a=Math.max(t,i,r),l=Math.min(t,i,r);a>.9&&l<.1&&(t<.2&&(o[e+0]+=1),i<.2&&(o[e+2]+=1),r<.2&&(o[e+4]+=1))}}()}(),this.setAttribute("position",new rV(a,3)),this.setAttribute("normal",new rV(a.slice(),3)),this.setAttribute("uv",new rV(o,2)),0===r?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(e){return new ow(e.vertices,e.indices,e.radius,e.details)}},oS=class extends ow{constructor(e=1,t=0){let i=(1+Math.sqrt(5))/2,r=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-i,0,-r,i,0,r,-i,0,r,i,-r,-i,0,-r,i,0,r,-i,0,r,i,0,-i,0,-r,i,0,-r,-i,0,r,i,0,r],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,
313519,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,t),this.type="DodecahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new oS(e.radius,e.detail)}},o_=class extends ov{constructor(e){super(e),this.uuid=tJ(),this.type="Shape",this.holes=[]}getPointsHoles(e){let t=[];for(let i=0,r=this.holes.length;i<r;i++)t[i]=this.holes[i].getPoints(e);return t}extractPoints(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}}copy(e){super.copy(e),this.holes=[];for(let t=0,i=e.holes.length;t<i;t++){let i=e.holes[t];this.holes.push(i.clone())}return this}toJSON(){let e=super.toJSON();e.uuid=this.uuid,e.holes=[];for(let t=0,i=this.holes.length;t<i;t++){let i=this.holes[t];e.holes.push(i.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.uuid=e.uuid,this.holes=[];for(let t=0,i=e.holes.length;t<i;t++){let i=e.holes[t];this.holes.push(new ov().fromJSON(i))}return this}},oA=function(e,t,i=2){let r,a,o,l,h,c,d,p=t&&t.length,f=p?t[0]*i:e.length,m=oM(e,0,f,i,!0),g=[];if(!m||m.next===m.prev)return g;if(p&&(m=function(e,t,i,r){let a=[],o,l,h,c,d;for(o=0,l=t.length;o<l;o++)h=t[o]*r,c=o<l-1?t[o+1]*r:e.length,(d=oM(e,h,c,r,!1))===d.next&&(d.steiner=!0),a.push(function(e){let t=e,i=e;do(t.x<i.x||t.x===i.x&&t.y<i.y)&&(i=t),t=t.next;while(t!==e)return i}(d));for(a.sort(oE),o=0;o<a.length;o++)i=function(e,t){let i=function(e,t){let i=t,r=-1/0,a,o=e.x,l=e.y;do{if(l<=i.y&&l>=i.next.y&&i.next.y!==i.y){let e=i.x+(l-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=o&&e>r&&(r=e,a=i.x<i.next.x?i:i.next,e===o))return a}i=i.next}while(i!==t)if(!a)return null;let h=a,c=a.x,d=a.y,p=1/0,f;i=a;do{var m,g;o>=i.x&&i.x>=c&&o!==i.x&&oP(l<d?o:r,l,c,d,l<d?r:o,l,i.x,i.y)&&(f=Math.abs(l-i.y)/(o-i.x),oB(i,e)&&(f<p||f===p&&(i.x>a.x||i.x===a.x&&(m=a,g=i,0>oD(m.prev,m,g.prev)&&0>oD(g.next,m,m.next))))&&(a=i,p=f)),i=i.next}while(i!==h)return a}(e,t);if(!i)return t;let r=oz(i,e);return oC(r,r.next),oC(i,i.next)}(a[o],i);return i}(e,t,m,i)),e.length>80*i){r=o=e[0],a=l=e[1];for(let t=i;t<f;t+=i)h=e[t],c=e[t+1],h<r&&(r=h),c<a&&(a=c),h>o&&(o=h),c>l&&(l=c);d=0!==(d=Math.max(o-r,l-a))?32767/d:0}return function e(t,i,r,a,o,l,h){if(!t)return;!h&&l&&function(e,t,i,r){let a=e;do 0===a.z&&(a.z=oT(a.x,a.y,t,i,r)),a.prevZ=a.prev,a.nextZ=a.next,a=a.next;while(a!==e)a.prevZ.nextZ=null,a.prevZ=null,function(e){let t,i,r,a,o,l,h,c,d=1;do{for(i=e,e=null,o=null,l=0;i;){for(l++,r=i,h=0,t=0;t<d&&(h++,r=r.nextZ);t++);for(c=d;h>0||c>0&&r;)0!==h&&(0===c||!r||i.z<=r.z)?(a=i,i=i.nextZ,h--):(a=r,r=r.nextZ,c--),o?o.nextZ=a:e=a,a.prevZ=o,o=a;i=r}o.nextZ=null,d*=2}while(l>1)}(a)}(t,a,o,l);let c=t,d,p;for(;t.prev!==t.next;){if(d=t.prev,p=t.next,l?function(e,t,i,r){let a=e.prev,o=e.next;if(oD(a,e,o)>=0)return!1;let l=a.x,h=e.x,c=o.x,d=a.y,p=e.y,f=o.y,m=l<h?l<c?l:c:h<c?h:c,g=d<p?d<f?d:f:p<f?p:f,v=l>h?l>c?l:c:h>c?h:c,y=d>p?d>f?d:f:p>f?p:f,x=oT(m,g,t,i,r),b=oT(v,y,t,i,r),w=e.prevZ,S=e.nextZ;for(;w&&w.z>=x&&S&&S.z<=b;){if(w.x>=m&&w.x<=v&&w.y>=g&&w.y<=y&&w!==a&&w!==o&&oP(l,d,h,p,c,f,w.x,w.y)&&oD(w.prev,w,w.next)>=0||(w=w.prevZ,S.x>=m&&S.x<=v&&S.y>=g&&S.y<=y&&S!==a&&S!==o&&oP(l,d,h,p,c,f,S.x,S.y)&&oD(S.prev,S,S.next)>=0))return!1;S=S.nextZ}for(;w&&w.z>=x;){if(w.x>=m&&w.x<=v&&w.y>=g&&w.y<=y&&w!==a&&w!==o&&oP(l,d,h,p,c,f,w.x,w.y)&&oD(w.prev,w,w.next)>=0)return!1;w=w.prevZ}for(;S&&S.z<=b;){if(S.x>=m&&S.x<=v&&S.y>=g&&S.y<=y&&S!==a&&S!==o&&oP(l,d,h,p,c,f,S.x,S.y)&&oD(S.prev,S,S.next)>=0)return!1;S=S.nextZ}return!0}(t,a,o,l):function(e){let t=e.prev,i=e.next;if(oD(t,e,i)>=0)return!1;let r=t.x,a=e.x,o=i.x,l=t.y,h=e.y,c=i.y,d=r<a?r<o?r:o:a<o?a:o,p=l<h?l<c?l:c:h<c?h:c,f=r>a?r>o?r:o:a>o?a:o,m=l>h?l>c?l:c:h>c?h:c,g=i.next;for(;g!==t;){if(g.x>=d&&g.x<=f&&g.y>=p&&g.y<=m&&oP(r,l,a,h,o,c,g.x,g.y)&&oD(g.prev,g,g.next)>=0)return!1;g=g.next}return!0}(t)){i.push(d.i/r|0),i.push(t.i/r|0),i.push(p.i/r|0),oN(t),t=p.next,c=p.next;continue}if((t=p)===c){h?1===h?e(t=function(e,t,i){let r=e;do{let a=r.prev,o=r.next.next;!oO(a,o)&&oI(a,r,r.next,o)&&oB(a,o)&&oB(o,a)&&(t.push(a.i/i|0),t.push(r.i/i|0),t.push(o.i/i|0),oN(r),oN(r.next),r=e=o),r=r.next}while(r!==e)return oC(r)}(oC(t),i,r),i,r,a,o,l,2):2===h&&function(t,i,r,a,o,l){let h=t;do{let t=h.next.next;for(;t!==h.prev;){var c,d;if(h.i!==t.i&&(c=h,d=t,c.next.i!==d.i&&c.prev.i!==d.i&&!function(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&oI(i,i.next,e,t))return!0;
3135i=i.next}while(i!==e)return!1}(c,d)&&(oB(c,d)&&oB(d,c)&&function(e,t){let i=e,r=!1,a=(e.x+t.x)/2,o=(e.y+t.y)/2;do i.y>o!=i.next.y>o&&i.next.y!==i.y&&a<(i.next.x-i.x)*(o-i.y)/(i.next.y-i.y)+i.x&&(r=!r),i=i.next;while(i!==e)return r}(c,d)&&(oD(c.prev,c,d.prev)||oD(c,d.prev,d))||oO(c,d)&&oD(c.prev,c,c.next)>0&&oD(d.prev,d,d.next)>0))){let c=oz(h,t);h=oC(h,h.next),c=oC(c,c.next),e(h,i,r,a,o,l,0),e(c,i,r,a,o,l,0);return}t=t.next}h=h.next}while(h!==t)}(t,i,r,a,o,l):e(oC(t),i,r,a,o,l,1);break}}}(m,g,i,r,a,d,0),g};function oM(e,t,i,r,a){let o,l;if(a===function(e,t,i,r){let a=0;for(let o=t,l=i-r;o<i;o+=r)a+=(e[l]-e[o])*(e[o+1]+e[l+1]),l=o;return a}(e,t,i,r)>0)for(o=t;o<i;o+=r)l=oF(o,e[o],e[o+1],l);else for(o=i-r;o>=t;o-=r)l=oF(o,e[o],e[o+1],l);return l&&oO(l,l.next)&&(oN(l),l=l.next),l}function oC(e,t){if(!e)return e;t||(t=e);let i=e,r;do if(r=!1,!i.steiner&&(oO(i,i.next)||0===oD(i.prev,i,i.next))){if(oN(i),(i=t=i.prev)===i.next)break;r=!0}else i=i.next;while(r||i!==t)return t}function oE(e,t){return e.x-t.x}function oT(e,t,i,r,a){return(e=((e=((e=((e=((e=(e-i)*a|0)|e<<8)&0xff00ff)|e<<4)&0xf0f0f0f)|e<<2)&0x33333333)|e<<1)&0x55555555)|(t=((t=((t=((t=((t=(t-r)*a|0)|t<<8)&0xff00ff)|t<<4)&0xf0f0f0f)|t<<2)&0x33333333)|t<<1)&0x55555555)<<1}function oP(e,t,i,r,a,o,l,h){return(a-l)*(t-h)>=(e-l)*(o-h)&&(e-l)*(r-h)>=(i-l)*(t-h)&&(i-l)*(o-h)>=(a-l)*(r-h)}function oD(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function oO(e,t){return e.x===t.x&&e.y===t.y}function oI(e,t,i,r){let a=oL(oD(e,t,i)),o=oL(oD(e,t,r)),l=oL(oD(i,r,e)),h=oL(oD(i,r,t));return!!(a!==o&&l!==h||0===a&&oR(e,i,t)||0===o&&oR(e,r,t)||0===l&&oR(i,e,r)||0===h&&oR(i,t,r))}function oR(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function oL(e){return e>0?1:e<0?-1:0}function oB(e,t){return 0>oD(e.prev,e,e.next)?oD(e,t,e.next)>=0&&oD(e,e.prev,t)>=0:0>oD(e,t,e.prev)||0>oD(e,e.next,t)}function oz(e,t){let i=new oU(e.i,e.x,e.y),r=new oU(t.i,t.x,t.y),a=e.next,o=t.prev;return e.next=t,t.prev=e,i.next=a,a.prev=i,r.next=i,i.prev=r,o.next=r,r.prev=o,r}function oF(e,t,i,r){let a=new oU(e,t,i);return r?(a.next=r.next,a.prev=r,r.next.prev=a,r.next=a):(a.prev=a,a.next=a),a}function oN(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function oU(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}var ok=class{static area(e){let t=e.length,i=0;for(let r=t-1,a=0;a<t;r=a++)i+=e[r].x*e[a].y-e[a].x*e[r].y;return .5*i}static isClockWise(e){return 0>ok.area(e)}static triangulateShape(e,t){let i=[],r=[],a=[];oV(e),oj(i,e);let o=e.length;t.forEach(oV);for(let e=0;e<t.length;e++)r.push(o),o+=t[e].length,oj(i,t[e]);let l=oA(i,r);for(let e=0;e<l.length;e+=3)a.push(l.slice(e,e+3));return a}};function oV(e){let t=e.length;t>2&&e[t-1].equals(e[0])&&e.pop()}function oj(e,t){for(let i=0;i<t.length;i++)e.push(t[i].x),e.push(t[i].y)}var oG=class extends ow{constructor(e=1,t=0){let i=(1+Math.sqrt(5))/2;super([-1,i,0,1,i,0,-1,-i,0,1,-i,0,0,-1,i,0,1,i,0,-1,-i,0,1,-i,i,0,-1,i,0,1,-i,0,-1,-i,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],e,t),this.type="IcosahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new oG(e.radius,e.detail)}},oW=class extends rQ{constructor(e=1,t=32,i=16,r=0,a=2*Math.PI,o=0,l=Math.PI){super(),this.type="SphereGeometry",this.parameters={radius:e,widthSegments:t,heightSegments:i,phiStart:r,phiLength:a,thetaStart:o,thetaLength:l},t=Math.max(3,Math.floor(t)),i=Math.max(2,Math.floor(i));let h=Math.min(o+l,Math.PI),c=0,d=[],p=new iD,f=new iD,m=[],g=[],v=[],y=[];for(let m=0;m<=i;m++){let x=[],b=m/i,w=0;0==m&&0==o?w=.5/t:m==i&&h==Math.PI&&(w=-.5/t);for(let i=0;i<=t;i++){let h=i/t;p.x=-e*Math.cos(r+h*a)*Math.sin(o+b*l),p.y=e*Math.cos(o+b*l),p.z=e*Math.sin(r+h*a)*Math.sin(o+b*l),g.push(p.x,p.y,p.z),f.copy(p).normalize(),v.push(f.x,f.y,f.z),y.push(h+w,1-b),x.push(c++)}d.push(x)}for(let e=0;e<i;e++)for(let r=0;r<t;r++){let t=d[e][r+1],a=d[e][r],l=d[e+1][r],c=d[e+1][r+1];(0!==e||o>0)&&m.push(t,a,c),(e!==i-1||h<Math.PI)&&m.push(a,l,c)}this.setIndex(m),this.setAttribute("position",new rV(g,3)),this.setAttribute("normal",new rV(v,3)),this.setAttribute("uv",new rV(y,2))}
3135static fromJSON(e){return new oW(e.radius,e.widthSegments,e.heightSegments,e.phiStart,e.phiLength,e.thetaStart,e.thetaLength)}},oH=class extends rQ{constructor(e=1,t=.4,i=12,r=48,a=2*Math.PI){super(),this.type="TorusGeometry",this.parameters={radius:e,tube:t,radialSegments:i,tubularSegments:r,arc:a},i=Math.floor(i),r=Math.floor(r);let o=[],l=[],h=[],c=[],d=new iD,p=new iD,f=new iD;for(let o=0;o<=i;o++)for(let m=0;m<=r;m++){let g=m/r*a,v=o/i*Math.PI*2;p.x=(e+t*Math.cos(v))*Math.cos(g),p.y=(e+t*Math.cos(v))*Math.sin(g),p.z=t*Math.sin(v),l.push(p.x,p.y,p.z),d.x=e*Math.cos(g),d.y=e*Math.sin(g),f.subVectors(p,d).normalize(),h.push(f.x,f.y,f.z),c.push(m/r),c.push(o/i)}for(let e=1;e<=i;e++)for(let t=1;t<=r;t++){let i=(r+1)*e+t-1,a=(r+1)*(e-1)+t-1,l=(r+1)*(e-1)+t,h=(r+1)*e+t;o.push(i,a,h),o.push(a,l,h)}this.setIndex(o),this.setAttribute("position",new rV(l,3)),this.setAttribute("normal",new rV(h,3)),this.setAttribute("uv",new rV(c,2))}static fromJSON(e){return new oH(e.radius,e.tube,e.radialSegments,e.tubularSegments,e.arc)}},oq=class extends rQ{constructor(e=1,t=.4,i=64,r=8,a=2,o=3){super(),this.type="TorusKnotGeometry",this.parameters={radius:e,tube:t,tubularSegments:i,radialSegments:r,p:a,q:o},i=Math.floor(i),r=Math.floor(r);let l=[],h=[],c=[],d=[],p=new iD,f=new iD,m=new iD,g=new iD,v=new iD,y=new iD,x=new iD;for(let l=0;l<=i;++l){let w=l/i*a*Math.PI*2;b(w,a,o,e,m),b(w+.01,a,o,e,g),y.subVectors(g,m),x.addVectors(g,m),v.crossVectors(y,x),x.crossVectors(v,y),v.normalize(),x.normalize();for(let e=0;e<=r;++e){let a=e/r*Math.PI*2,o=-t*Math.cos(a),g=t*Math.sin(a);p.x=m.x+(o*x.x+g*v.x),p.y=m.y+(o*x.y+g*v.y),p.z=m.z+(o*x.z+g*v.z),h.push(p.x,p.y,p.z),f.subVectors(p,m).normalize(),c.push(f.x,f.y,f.z),d.push(l/i),d.push(e/r)}}for(let e=1;e<=i;e++)for(let t=1;t<=r;t++){let i=(r+1)*(e-1)+(t-1),a=(r+1)*e+(t-1),o=(r+1)*e+t,h=(r+1)*(e-1)+t;l.push(i,a,h),l.push(a,o,h)}function b(e,t,i,r,a){let o=Math.cos(e),l=Math.sin(e),h=i/t*e,c=Math.cos(h);a.x=r*(2+c)*.5*o,a.y=r*(2+c)*l*.5,a.z=r*Math.sin(h)*.5}this.setIndex(l),this.setAttribute("position",new rV(h,3)),this.setAttribute("normal",new rV(c,3)),this.setAttribute("uv",new rV(d,2))}static fromJSON(e){return new oq(e.radius,e.tube,e.tubularSegments,e.radialSegments,e.p,e.q)}},oX=class extends so{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}};function oY(e,t,i){return oZ(e)?new e.constructor(e.subarray(t,void 0!==i?i:e.length)):e.slice(t,i)}function oQ(e,t,i){return e&&(i||e.constructor!==t)?"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e):e}function oZ(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function oK(e,t,i){let r=e.length,a=new e.constructor(r);for(let o=0,l=0;l!==r;++o){let r=i[o]*t;for(let i=0;i!==t;++i)a[l++]=e[r+i]}return a}function oJ(e,t,i,r){let a=1,o=e[0];for(;void 0!==o&&void 0===o[r];)o=e[a++];if(void 0===o)return;let l=o[r];if(void 0!==l)if(Array.isArray(l))do void 0!==(l=o[r])&&(t.push(o.time),i.push.apply(i,l)),o=e[a++];while(void 0!==o)else if(void 0!==l.toArray)do void 0!==(l=o[r])&&(t.push(o.time),l.toArray(i,i.length)),o=e[a++];while(void 0!==o)else do void 0!==(l=o[r])&&(t.push(o.time),i.push(l)),o=e[a++];while(void 0!==o)}var o$=class{constructor(e,t,i,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new t.constructor(i),this.sampleValues=t,this.valueSize=i,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,i=this._cachedIndex,r=t[i],a=t[i-1];e:{t:{let o;i:{r:if(!(e<r)){for(let o=i+2;;){if(void 0===r){if(e<a)break r;return i=t.length,this._cachedIndex=i,this.copySampleValue_(i-1)}if(i===o)break;if(a=r,e<(r=t[++i]))break t}o=t.length;break i}if(!(e>=a)){let l=t[1];e<l&&(i=2,a=l);for(let o=i-2;;){if(void 0===a)return this._cachedIndex=0,this.copySampleValue_(0);if(i===o)break;if(r=a,e>=(a=t[--i-1]))break t}o=i,i=0;break i}break e}for(;i<o;){let r=i+o>>>1;e<t[r]?o=r:i=r+1}if(r=t[i],void 0===(a=t[i-1]))return this._cachedIndex=0,this.copySampleValue_(0);if(void 0===r)return i=t.length,this._cachedIndex=i,this.copySampleValue_(i-1)}this._cachedIndex=i,this.intervalChanged_(i,a,r)}return this.interpolate_(i,a,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,i=this.sampleValues,r=this.valueSize,a=e*r;for(let e=0;e!==r;++e)t[e]=i[a+e];return t}interpolate_(){throw Error("call to abstract method")}intervalChanged_(){}},o0=class extends o${constructor(e,t,i,r){super(e,t,i,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:2400,endingEnd:2400}}intervalChanged_(e,t,i){let r=this.parameterPositions,a=e-2,o=e+1,l=r[a],h=r[o];if(void 0===l)switch(this.getSettings_().endingStart){case 2401:a=e,l=2*t-i;break;case 2402:a=r.length-2,l=t+r[a]-r[a+1];break;default:a=e,l=i}if(void 0===h)switch(this.getSettings_().endingEnd){case 2401:o=e,h=2*i-t;break;case 2402:o=1,h=i+r[1]-r[0];break;default:o=e-1,h=t}let c=(i-t)*.5,d=this.valueSize;this._weightPrev=c/(t-l),this._weightNext=c/(h-i),this._offsetPrev=a*d,this._offsetNext=o*d}interpolate_(e,t,i,r){let a=this.resultBuffer,o=this.sampleValues,l=this.valueSize,h=e*l,c=h-l,d=this._offsetPrev,p=this._offsetNext,f=this._weightPrev,m=this._weightNext,g=(i-t)/(r-t),v=g*g,y=v*g,x=-f*y+2*f*v-f*g,b=(1+f)*y+(-1.5-2*f)*v+(-.5+f)*g+1,w=(-1-m)*y+(1.5+m)*v+.5*g,S=m*y-m*v;for(let e=0;e!==l;++e)a[e]=x*o[d+e]+b*o[c+e]+w*o[h+e]+S*o[p+e];return a}},o1=class extends o${constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let a=this.resultBuffer,o=this.sampleValues,l=this.valueSize,h=e*l,c=h-l,d=(i-t)/(r-t),p=1-d;for(let e=0;e!==l;++e)a[e]=o[c+e]*p+o[h+e]*d;return a}},o2=class extends o${constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e){return this.copySampleValue_(e-1)}},o3=class{constructor(e,t,i,r){if(void 0===e)throw Error("THREE.KeyframeTrack: track name is undefined");if(void 0===t||0===t.length)throw Error("THREE.KeyframeTrack: no keyframes in track named "+e);this.name=e,this.times=oQ(t,this.TimeBufferType),this.values=oQ(i,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,i;if(t.toJSON!==this.toJSON)i=t.toJSON(e);else{i={name:e.name,times:oQ(e.times,Array),values:oQ(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(i.interpolation=t)}return i.type=e.ValueTypeName,i}InterpolantFactoryMethodDiscrete(e){return new o2(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new o1(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new o0(this.times,this.values,this.getValueSize(),e)}setInterpolation(e){let t;switch(e){case 2300:t=this.InterpolantFactoryMethodDiscrete;break;case 2301:t=this.InterpolantFactoryMethodLinear;break;case 2302:t=this.InterpolantFactoryMethodSmooth}if(void 0===t){let t="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t);return this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}}getValueSize(){return this.values.length/this.times.length}shift(e){if(0!==e){let t=this.times;for(let i=0,r=t.length;i!==r;++i)t[i]+=e}return this}scale(e){if(1!==e){let t=this.times;for(let i=0,r=t.length;i!==r;++i)t[i]*=e}return this}trim(e,t){let i=this.times,r=i.length,a=0,o=r-1;for(;a!==r&&i[a]<e;)++a;for(;-1!==o&&i[o]>t;)--o;if(++o,0!==a||o!==r){a>=o&&(a=(o=Math.max(o,1))-1);let e=this.getValueSize();this.times=oY(i,a,o),this.values=oY(this.values,a*e,o*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!=0&&(e=!1);let i=this.times,r=this.values,a=i.length;0===a&&(e=!1);let o=null;for(let t=0;t!==a;t++){let r=i[t];if("number"==typeof r&&isNaN(r)||null!==o&&o>r){e=!1;break}o=r}if(void 0!==r&&oZ(r)){for(let t=0,i=r.length;t!==i;++t)if(isNaN(r[t])){e=!1;break}}return e}optimize(){let e=oY(this.times),t=oY(this.values),i=this.getValueSize(),r=2302===this.getInterpolation(),a=e.length-1,o=1;for(let l=1;l<a;++l){let a=!1,h=e[l];
3135if(h!==e[l+1]&&(1!==l||h!==e[0]))if(r)a=!0;else{let e=l*i,r=e-i,o=e+i;for(let l=0;l!==i;++l){let i=t[e+l];if(i!==t[r+l]||i!==t[o+l]){a=!0;break}}}if(a){if(l!==o){e[o]=e[l];let r=l*i,a=o*i;for(let e=0;e!==i;++e)t[a+e]=t[r+e]}++o}}if(a>0){e[o]=e[a];for(let e=a*i,r=o*i,l=0;l!==i;++l)t[r+l]=t[e+l];++o}return o!==e.length?(this.times=oY(e,0,o),this.values=oY(t,0,o*i)):(this.times=e,this.values=t),this}clone(){let e=oY(this.times,0),t=oY(this.values,0),i=new this.constructor(this.name,e,t);return i.createInterpolant=this.createInterpolant,i}};o3.prototype.TimeBufferType=Float32Array,o3.prototype.ValueBufferType=Float32Array,o3.prototype.DefaultInterpolation=2301;var o4=class extends o3{};o4.prototype.ValueTypeName="bool",o4.prototype.ValueBufferType=Array,o4.prototype.DefaultInterpolation=2300,o4.prototype.InterpolantFactoryMethodLinear=void 0,o4.prototype.InterpolantFactoryMethodSmooth=void 0;var o5=class extends o3{};o5.prototype.ValueTypeName="color";var o6=class extends o3{};o6.prototype.ValueTypeName="number";var o8=class extends o${constructor(e,t,i,r){super(e,t,i,r)}interpolate_(e,t,i,r){let a=this.resultBuffer,o=this.sampleValues,l=this.valueSize,h=(i-t)/(r-t),c=e*l;for(let e=c+l;c!==e;c+=4)iP.slerpFlat(a,0,o,c-l,o,c,h);return a}},o9=class extends o3{InterpolantFactoryMethodLinear(e){return new o8(this.times,this.values,this.getValueSize(),e)}};o9.prototype.ValueTypeName="quaternion",o9.prototype.DefaultInterpolation=2301,o9.prototype.InterpolantFactoryMethodSmooth=void 0;var o7=class extends o3{};o7.prototype.ValueTypeName="string",o7.prototype.ValueBufferType=Array,o7.prototype.DefaultInterpolation=2300,o7.prototype.InterpolantFactoryMethodLinear=void 0,o7.prototype.InterpolantFactoryMethodSmooth=void 0;var le=class extends o3{};le.prototype.ValueTypeName="vector";var lt=class{constructor(e,t=-1,i,r=2500){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=tJ(),this.duration<0&&this.resetDuration()}static parse(e){let t=[],i=e.tracks,r=1/(e.fps||1);for(let e=0,a=i.length;e!==a;++e)t.push((function(e){if(void 0===e.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");let t=function(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return o6;case"vector":case"vector2":case"vector3":case"vector4":return le;case"color":return o5;case"quaternion":return o9;case"bool":case"boolean":return o4;case"string":return o7}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}(e.type);if(void 0===e.times){let t=[],i=[];oJ(e.keys,t,i,"value"),e.times=t,e.values=i}return void 0!==t.parse?t.parse(e):new t(e.name,e.times,e.values,e.interpolation)})(i[e]).scale(r));let a=new this(e.name,e.duration,t,e.blendMode);return a.uuid=e.uuid,a}static toJSON(e){let t=[],i=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,r=i.length;e!==r;++e)t.push(o3.toJSON(i[e]));return r}static CreateFromMorphTargetSequence(e,t,i,r){let a=t.length,o=[];for(let e=0;e<a;e++){let l=[],h=[];l.push((e+a-1)%a,e,(e+1)%a),h.push(0,1,0);let c=function(e){let t=e.length,i=Array(t);for(let e=0;e!==t;++e)i[e]=e;return i.sort(function(t,i){return e[t]-e[i]}),i}(l);l=oK(l,1,c),h=oK(h,1,c),r||0!==l[0]||(l.push(a),h.push(h[0])),o.push(new o6(".morphTargetInfluences["+t[e].name+"]",l,h).scale(1/i))}return new this(e,-1,o)}static findByName(e,t){let i=e;Array.isArray(e)||(i=e.geometry&&e.geometry.animations||e.animations);for(let e=0;e<i.length;e++)if(i[e].name===t)return i[e];return null}static CreateClipsFromMorphTargetSequences(e,t,i){let r={},a=/^([\w-]*?)([\d]+)$/;for(let t=0,i=e.length;t<i;t++){let i=e[t],o=i.name.match(a);if(o&&o.length>1){let e=o[1],t=r[e];t||(r[e]=t=[]),t.push(i)}}let o=[];for(let e in r)o.push(this.CreateFromMorphTargetSequence(e,r[e],t,i));return o}static parseAnimation(e,t){if(!e)return null;let i=function(e,t,i,r,a){if(0!==i.length){let o=[],l=[];oJ(i,o,l,r),0!==o.length&&a.push(new e(t,o,l))}},r=[],a=e.name||"default",o=e.fps||30,l=e.blendMode,h=e.length||-1,c=e.hierarchy||[];for(let e=0;e<c.length;e++){let a=c[e].keys;if(!(!a||0===a.length))if(a[0].morphTargets){let e={},t;for(t=0;t<a.length;t++)if(a[t].morphTargets)for(let i=0;i<a[t].morphTargets.length;i++)e[a[t].morphTargets[i]]=-1;for(let i in e){let e=[],o=[];for(let r=0;r!==a[t].morphTargets.length;++r){let r=a[t];e.push(r.time),o.push(+(r.morphTarget===i))}r.push(new o6(".morphTargetInfluence["+i+"]",e,o))}h=e.length*o}else{let o=".bones["+t[e].name+"]";i(le,o+".position",a,"pos",r),i(o9,o+".quaternion",a,"rot",r),i(le,o+".scale",a,"scl",r)}}return 0===r.length?null:new this(a,h,r,l)}resetDuration(){let e=this.tracks,t=0;for(let i=0,r=e.length;i!==r;++i){let e=this.tracks[i];t=Math.max(t,e.times[e.times.length-1])}return this.duration=t,this}trim(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].trim(0,this.duration);return this}validate(){let e=!0;for(let t=0;t<this.tracks.length;t++)e=e&&this.tracks[t].validate();return e}optimize(){for(let e=0;e<this.tracks.length;e++)this.tracks[e].optimize();return this}clone(){let e=[];for(let t=0;t<this.tracks.length;t++)e.push(this.tracks[t].clone());return new this.constructor(this.name,this.duration,e,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}},li={enabled:!1,files:{},add:function(e,t){!1!==this.enabled&&(this.files[e]=t)},get:function(e){if(!1!==this.enabled)return this.files[e]},remove:function(e){delete this.files[e]},clear:function(){this.files={}}},lr=class{constructor(e,t,i){let r=this,a=!1,o=0,l=0,h,c=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=i,this.itemStart=function(e){l++,!1===a&&void 0!==r.onStart&&r.onStart(e,o,l),a=!0},this.itemEnd=function(e){o++,void 0!==r.onProgress&&r.onProgress(e,o,l),o===l&&(a=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(e){void 0!==r.onError&&r.onError(e)},this.resolveURL=function(e){return h?h(e):e},this.setURLModifier=function(e){return h=e,this},this.addHandler=function(e,t){return c.push(e,t),this},this.removeHandler=function(e){let t=c.indexOf(e);return -1!==t&&c.splice(t,2),this},this.getHandler=function(e){for(let t=0,i=c.length;t<i;t+=2){let i=c[t],r=c[t+1];if(i.global&&(i.lastIndex=0),i.test(e))return r}return null}}},ls=new lr,la=class{constructor(e){this.manager=void 0!==e?e:ls,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(e,t){let i=this;
3135return new Promise(function(r,a){i.load(e,r,t,a)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}},ln={},lo=class extends Error{constructor(e,t){super(e),this.response=t}},ll=class extends la{constructor(e){super(e)}load(e,t,i,r){void 0===e&&(e=""),void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);let a=li.get(e);if(void 0!==a)return this.manager.itemStart(e),setTimeout(()=>{t&&t(a),this.manager.itemEnd(e)},0),a;if(void 0!==ln[e])return void ln[e].push({onLoad:t,onProgress:i,onError:r});ln[e]=[],ln[e].push({onLoad:t,onProgress:i,onError:r});let o=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),l=this.mimeType,h=this.responseType;fetch(o).then(t=>{if(200===t.status||0===t.status){if(t.status,typeof ReadableStream>"u"||void 0===t.body||void 0===t.body.getReader)return t;let i=ln[e],r=t.body.getReader(),a=t.headers.get("Content-Length")||t.headers.get("X-File-Size"),o=a?parseInt(a):0,l=0!==o,h=0;return new Response(new ReadableStream({start(e){!function t(){r.read().then(({done:r,value:a})=>{if(r)e.close();else{let r=new ProgressEvent("progress",{lengthComputable:l,loaded:h+=a.byteLength,total:o});for(let e=0,t=i.length;e<t;e++){let t=i[e];t.onProgress&&t.onProgress(r)}e.enqueue(a),t()}})}()}}))}throw new lo(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(h){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then(e=>new DOMParser().parseFromString(e,l));case"json":return e.json();default:if(void 0===l)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(l),i=new TextDecoder(t&&t[1]?t[1].toLowerCase():void 0);return e.arrayBuffer().then(e=>i.decode(e))}}}).then(t=>{li.add(e,t);let i=ln[e];delete ln[e];for(let e=0,r=i.length;e<r;e++){let r=i[e];r.onLoad&&r.onLoad(t)}}).catch(t=>{let i=ln[e];if(void 0===i)throw this.manager.itemError(e),t;delete ln[e];for(let e=0,r=i.length;e<r;e++){let r=i[e];r.onError&&r.onError(t)}this.manager.itemError(e)}).finally(()=>{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}},lh=class extends la{constructor(e){super(e)}load(e,t,i,r){void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);let a=this,o=li.get(e);if(void 0!==o)return a.manager.itemStart(e),setTimeout(function(){t&&t(o),a.manager.itemEnd(e)},0),o;let l=is("img");function h(){d(),li.add(e,this),t&&t(this),a.manager.itemEnd(e)}function c(t){d(),r&&r(t),a.manager.itemError(e),a.manager.itemEnd(e)}function d(){l.removeEventListener("load",h,!1),l.removeEventListener("error",c,!1)}return l.addEventListener("load",h,!1),l.addEventListener("error",c,!1),"data:"!==e.slice(0,5)&&void 0!==this.crossOrigin&&(l.crossOrigin=this.crossOrigin),a.manager.itemStart(e),l.src=e,l}},lc=class extends la{constructor(e){super(e)}load(e,t,i,r){let a=new i_,o=new lh(this.manager);return o.setCrossOrigin(this.crossOrigin),o.setPath(this.path),o.load(e,function(e){a.image=e,a.needsUpdate=!0,void 0!==t&&t(a)},i,r),a}},ld=class extends rw{constructor(e,t=1){super(),this.isLight=!0,this.type="Light",this.color=new iv(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){let t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,void 0!==this.groundColor&&(t.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(t.object.distance=this.distance),void 0!==this.angle&&(t.object.angle=this.angle),void 0!==this.decay&&(t.object.decay=this.decay),void 0!==this.penumbra&&(t.object.penumbra=this.penumbra),void 0!==this.shadow&&(t.object.shadow=this.shadow.toJSON()),t}},lu=class extends ld{constructor(e,t,i){super(e,i),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(rw.DEFAULT_UP),this.updateMatrix(),this.groundColor=new iv(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}},lp=new i6,lf=new iD,lm=new iD,lg=class{constructor(e){this.camera=e,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new t9(512,512),this.map=null,this.mapPass=null,this.matrix=new i6,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new sx,this._frameExtents=new t9(1,1),this._viewportCount=1,this._viewports=[new iA(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){let t=this.camera,i=this.matrix;lf.setFromMatrixPosition(e.matrixWorld),t.position.copy(lf),lm.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(lm),t.updateMatrixWorld(),lp.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(lp),i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(lp)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){let e={};return 0!==this.bias&&(e.bias=this.bias),0!==this.normalBias&&(e.normalBias=this.normalBias),1!==this.radius&&(e.radiu
3135s=this.radius),(512!==this.mapSize.x||512!==this.mapSize.y)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}},lv=class extends lg{constructor(){super(new sh(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){let t=this.camera,i=2*tK*e.angle*this.focus,r=this.mapSize.width/this.mapSize.height,a=e.distance||t.far;(i!==t.fov||r!==t.aspect||a!==t.far)&&(t.fov=i,t.aspect=r,t.far=a,t.updateProjectionMatrix()),super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}},ly=class extends ld{constructor(e,t,i=0,r=Math.PI/3,a=0,o=2){super(e,t),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(rw.DEFAULT_UP),this.updateMatrix(),this.target=new rw,this.distance=i,this.angle=r,this.penumbra=a,this.decay=o,this.map=null,this.shadow=new lv}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},lx=new i6,lb=new iD,lw=new iD,lS=class extends lg{constructor(){super(new sh(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new t9(4,2),this._viewportCount=6,this._viewports=[new iA(2,1,1,1),new iA(0,1,1,1),new iA(3,1,1,1),new iA(1,1,1,1),new iA(3,0,1,1),new iA(1,0,1,1)],this._cubeDirections=[new iD(1,0,0),new iD(-1,0,0),new iD(0,0,1),new iD(0,0,-1),new iD(0,1,0),new iD(0,-1,0)],this._cubeUps=[new iD(0,1,0),new iD(0,1,0),new iD(0,1,0),new iD(0,1,0),new iD(0,0,1),new iD(0,0,-1)]}updateMatrices(e,t=0){let i=this.camera,r=this.matrix,a=e.distance||i.far;a!==i.far&&(i.far=a,i.updateProjectionMatrix()),lb.setFromMatrixPosition(e.matrixWorld),i.position.copy(lb),lw.copy(i.position),lw.add(this._cubeDirections[t]),i.up.copy(this._cubeUps[t]),i.lookAt(lw),i.updateMatrixWorld(),r.makeTranslation(-lb.x,-lb.y,-lb.z),lx.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse),this._frustum.setFromProjectionMatrix(lx)}},l_=class extends ld{constructor(e,t,i=0,r=2){super(e,t),this.isPointLight=!0,this.type="PointLight",this.distance=i,this.decay=r,this.shadow=new lS}get power(){return 4*this.intensity*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}},lA=class extends lg{constructor(){super(new sR(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}},lM=class extends ld{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(rw.DEFAULT_UP),this.updateMatrix(),this.target=new rw,this.shadow=new lA}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}},lC=class extends rQ{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){let e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}},lE=class extends la{constructor(e){super(e)}load(e,t,i,r){let a=this,o=new ll(a.manager);o.setPath(a.path),o.setRequestHeader(a.requestHeader),o.setWithCredentials(a.withCredentials),o.load(e,function(i){try{t(a.parse(JSON.parse(i)))}catch(t){r&&r(t),a.manager.itemError(e)}},i,r)}parse(e){let t={},i={};function r(e,r){if(void 0!==t[r])return t[r];let a=e.interleavedBuffers[r],o=function(e,t){if(void 0!==i[t])return i[t];let r=new Uint32Array(e.arrayBuffers[t]).buffer;return i[t]=r,r}(e,a.buffer),l=new nR(ir(a.type,o),a.stride);return l.uuid=a.uuid,t[r]=l,l}let a=e.isInstancedBufferGeometry?new lC:new rQ,o=e.data.index;if(void 0!==o){let e=ir(o.type,o.array);a.setIndex(new rN(e,1))}let l=e.data.attributes;for(let t in l){let i=l[t],o;if(i.isInterleavedBufferAttribute)o=new nB(r(e.data,i.data),i.itemSize,i.offset,i.normalized);else{let e=ir(i.type,i.array);o=new(i.isInstancedBufferAttribute?nV:rN)(e,i.itemSize,i.normalized)}void 0!==i.name&&(o.name=i.name),void 0!==i.usage&&o.setUsage(i.usage),void 0!==i.updateRange&&(o.updateRange.offset=i.updateRange.offset,o.updateRange.count=i.updateRange.count),a.setAttribute(t,o)}let h=e.data.morphAttributes;if(h)for(let t in h){let i=h[t],o=[];for(let t=0,a=i.length;t<a;t++){let a=i[t],l;l=a.isInterleavedBufferAttribute?new nB(r(e.data,a.data),a.itemSize,a.offset,a.normalized):new rN(ir(a.type,a.array),a.itemSize,a.normalized),void 0!==a.name&&(l.name=a.name),o.push(l)}a.morphAttributes[t]=o}e.data.morphTargetsRelative&&(a.morphTargetsRelative=!0);let c=e.data.groups||e.data.drawcalls||e.data.offsets;if(void 0!==c)for(let e=0,t=c.length;e!==t;++e){let t=c[e];a.addGroup(t.start,t.count,t.materialIndex)}let d=e.data.boundingSphere;if(void 0!==d){let e=new iD;void 0!==d.center&&e.fromArray(d.center),a.boundingSphere=new iK(e,d.radius)}return e.name&&(a.name=e.name),e.userData&&(a.userData=e.userData),a}},lT=class{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=lP(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){let t=lP();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}};function lP(){return(typeof performance>"u"?Date:performance).now()}var lD=class{constructor(e,t,i){let r,a,o;switch(this.binding=e,this.valueSize=i,t){case"quaternion":r=this._slerp,a=this._slerpAdditive,o=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*i),this._workIndex=5;break;case"string":case"bool":r=this._select,a=this._select,o=this._setAdditiveIdentityOther,this.buffer=Array(5*i);break;default:r=this._lerp,a=this._lerpAdditive,o=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*i)}this._mixBufferRegion=r,this._mixBufferRegionAdditive=a,this._setIdentity=o,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(e,t){let i=this.buffer,r=this.valueSize,a=e*r+r,o=this.cumulativeWeight;if(0===o){for(let e=0;e!==r;++e)i[a+e]=i[e];o=t}else{o+=t;let e=t/o;this._mixBufferRegion(i,a,0,e,r)}this.cumulativeWeight=o}accumulateAdditive(e){let t=this.buffer,i=this.valueSize,r=i*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(t,r,0,e,i),this.cumulativeWeightAdditive+=e}apply(e){let t=this.valueSize,i=this.buffer,r=e*t+t,a=this.cumulativeWeight,o=this.cumulativeWeightAdditive,l=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,a<1){let e=t*this._origIndex;this._mixBufferRegion(i,r,e,1-a,t)}o>0&&this._mixBufferRegionAdditive(i,r,this._addIndex*t,1,t);for(let e=t,a=t+t;e!==a;++e)if(i[e]!==i[e+t]){l.setValue(i,r);break}}saveOriginalState(){let e=this.binding,t=this.buffer,i=this.valueSize,r=i*this._origIndex;e.getValue(t,r);for(let e=i;e!==r;++e)t[e]=t[r+e%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=3*this.valueSize;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;
vendor: 4,425 bytes, line 3135
3135for(let i=e;i<t;i++)this.buffer[i]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){let e=this._origIndex*this.valueSize,t=this._addIndex*this.valueSize;for(let i=0;i<this.valueSize;i++)this.buffer[t+i]=this.buffer[e+i]}_select(e,t,i,r,a){if(r>=.5)for(let r=0;r!==a;++r)e[t+r]=e[i+r]}_slerp(e,t,i,r){iP.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,a){let o=this._workIndex*a;iP.multiplyQuaternionsFlat(e,o,e,t,e,i),iP.slerpFlat(e,t,e,t,e,o,r)}_lerp(e,t,i,r,a){let o=1-r;for(let l=0;l!==a;++l){let a=t+l;e[a]=e[a]*o+e[i+l]*r}}_lerpAdditive(e,t,i,r,a){for(let o=0;o!==a;++o){let a=t+o;e[a]=e[a]+e[i+o]*r}}},lO="\\[\\]\\.:\\/",lI=RegExp("["+lO+"]","g"),lR="[^"+lO+"]",lL="[^"+lO.replace("\\.","")+"]",lB=RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",lR)+/(WCOD+)?/.source.replace("WCOD",lL)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",lR)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",lR)+"$"),lz=["material","materials","bones","map"],lF=class{constructor(e,t,i){let r=i||lN.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let i=this._targetGroup.nCachedObjects_,r=this._bindings[i];void 0!==r&&r.getValue(e,t)}setValue(e,t){let i=this._bindings;for(let r=this._targetGroup.nCachedObjects_,a=i.length;r!==a;++r)i[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}},lN=class{constructor(e,t,i){this.path=t,this.parsedPath=i||lN.parseTrackName(t),this.node=lN.findNode(e,this.parsedPath.nodeName)||e,this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new lN.Composite(e,t,i):new lN(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(lI,"")}static parseTrackName(e){let t=lB.exec(e);if(null===t)throw Error("PropertyBinding: Cannot parse trackName: "+e);let i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){let e=i.nodeName.substring(r+1);-1!==lz.indexOf(e)&&(i.nodeName=i.nodeName.substring(0,r),i.objectName=e)}if(null===i.propertyName||0===i.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(void 0===t||""===t||"."===t||-1===t||t===e.name||t===e.uuid)return e;if(e.skeleton){let i=e.skeleton.getBoneByName(t);if(void 0!==i)return i}if(e.children){let i=function(e){for(let r=0;r<e.length;r++){let a=e[r];if(a.name===t||a.uuid===t)return a;let o=i(a.children);if(o)return o}return null},r=i(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let i=this.resolvedProperty;for(let r=0,a=i.length;r!==a;++r)e[t++]=i[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let i=this.resolvedProperty;for(let r=0,a=i.length;r!==a;++r)i[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let i=this.resolvedProperty;for(let r=0,a=i.length;r!==a;++r)i[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let i=this.resolvedProperty;for(let r=0,a=i.length;r!==a;++r)i[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}
3135_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let e=this.node,t=this.parsedPath,i=t.objectName,r=t.propertyName,a=t.propertyIndex;if(e||(e=lN.findNode(this.rootNode,t.nodeName)||this.rootNode,this.node=e),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!e)return;if(i){let r=t.objectIndex;switch(i){case"materials":if(!e.material||!e.material.materials)return;e=e.material.materials;break;case"bones":if(!e.skeleton)return;e=e.skeleton.bones;for(let t=0;t<e.length;t++)if(e[t].name===r){r=t;break}break;case"map":if("map"in e){e=e.map;break}if(!e.material||!e.material.map)return;e=e.material.map;break;default:if(void 0===e[i])return;e=e[i]}if(void 0!==r){if(void 0===e[r])return;e=e[r]}}let o=e[r];if(void 0===o)return void t.nodeName;let l=this.Versioning.None;this.targetObject=e,void 0!==e.needsUpdate?l=this.Versioning.NeedsUpdate:void 0!==e.matrixWorldNeedsUpdate&&(l=this.Versioning.MatrixWorldNeedsUpdate);let h=this.BindingType.Direct;if(void 0!==a){if("morphTargetInfluences"===r){if(!e.geometry||!e.geometry.morphAttributes)return;void 0!==e.morphTargetDictionary[a]&&(a=e.morphTargetDictionary[a])}h=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=a}else void 0!==o.fromArray&&void 0!==o.toArray?(h=this.BindingType.HasFromToArray,this.resolvedProperty=o):Array.isArray(o)?(h=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=r;this.getValue=this.GetterByBindingType[h],this.setValue=this.SetterByBindingTypeAndVersioning[h][l]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};lN.Composite=lF,lN.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},lN.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},lN.prototype.GetterByBindingType=[lN.prototype._getValue_direct,lN.prototype._getValue_array,lN.prototype._getValue_arrayElement,lN.prototype._getValue_toArray],lN.prototype.SetterByBindingTypeAndVersioning=[[lN.prototype._setValue_direct,lN.prototype._setValue_direct_setNeedsUpdate,lN.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[lN.prototype._setValue_array,lN.prototype._setValue_array_setNeedsUpdate,lN.prototype._setValue_array_setMatrixWorldNeedsUpdate],[lN.prototype._setValue_arrayElement,lN.prototype._setValue_arrayElement_setNeedsUpdate,lN.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[lN.prototype._setValue_fromArray,lN.prototype._setValue_fromArray_setNeedsUpdate,lN.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var lU=class{constructor(e,t,i=null,r=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=r;let a=t.tracks,o=a.length,l=Array(o),h={endingStart:2400,endingEnd:2400};for(let e=0;e!==o;++e){let t=a[e].createInterpolant(null);l[e]=t,t.settings=h}this._interpolantSettings=h,this._interpolants=l,this._propertyBindings=Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}
3135fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i){if(e.fadeOut(t),this.fadeIn(t),i){let i=this._clip.duration,r=e._clip.duration;e.warp(1,r/i,t),this.warp(i/r,1,t)}return this}crossFadeTo(e,t,i){return e.crossFadeFrom(this,t,i)}stopFading(){let e=this._weightInterpolant;return null!==e&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){let r=this._mixer,a=r.time,o=this.timeScale,l=this._timeScaleInterpolant;null===l&&(l=r._lendControlInterpolant(),this._timeScaleInterpolant=l);let h=l.parameterPositions,c=l.sampleValues;return h[0]=a,h[1]=a+i,c[0]=e/o,c[1]=t/o,this}stopWarping(){let e=this._timeScaleInterpolant;return null!==e&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,r){if(!this.enabled)return void this._updateWeight(e);let a=this._startTime;if(null!==a){let r=(e-a)*i;r<0||0===i?t=0:(this._startTime=null,t=i*r)}t*=this._updateTimeScale(e);let o=this._updateTime(t),l=this._updateWeight(e);if(l>0){let e=this._interpolants,t=this._propertyBindings;if(2501===this.blendMode)for(let i=0,r=e.length;i!==r;++i)e[i].evaluate(o),t[i].accumulateAdditive(l);else for(let i=0,a=e.length;i!==a;++i)e[i].evaluate(o),t[i].accumulate(r,l)}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let i=this._weightInterpolant;if(null!==i){let r=i.evaluate(e)[0];t*=r,e>i.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let i=this._timeScaleInterpolant;null!==i&&(t*=i.evaluate(e)[0],e>i.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t))}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,i=this.loop,r=this.time+e,a=this._loopCount,o=2202===i;if(0===e)return -1===a?r:o&&(1&a)==1?t-r:r;if(2200===i){-1===a&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(r>=t)r=t;else if(r<0)r=0;else{this.time=r;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===a&&(e>=0?(a=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),r>=t||r<0){let i=Math.floor(r/t);r-=t*i,a+=Math.abs(i);let l=this.repetitions-a;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=e>0?t:0,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===l){let t=e<0;this._setEndings(t,!t,o)}else this._setEndings(!1,!1,o);this._loopCount=a,this.time=r,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this.time=r;if(o&&(1&a)==1)return t-r}return r}_setEndings(e,t,i){let r=this._interpolantSettings;i?(r.endingStart=2401,r.endingEnd=2401):(e?r.endingStart=this.zeroSlopeAtStart?2401:2400:r.endingStart=2402,t?r.endingEnd=this.zeroSlopeAtEnd?2401:2400:r.endingEnd=2402)}_scheduleFading(e,t,i){let r=this._mixer,a=r.time,o=this._weightInterpolant;null===o&&(o=r._lendControlInterpolant(),this._weightInterpolant=o);let l=o.parameterPositions,h=o.sampleValues;return l[0]=a,h[0]=t,l[1]=a+e,h[1]=i,this}},lk=new Float32Array(1),lV=class extends tX{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){let i=e._localRoot||this._root,r=e._clip.tracks,a=r.length,o=e._propertyBindings,l=e._interpolants,h=i.uuid,c=this._bindingsByRootAndName,d=c[h];void 0===d&&(d={},c[h]=d);for(let e=0;e!==a;++e){let a=r[e],c=a.name,p=d[c];if(void 0!==p)++p.referenceCount,o[e]=p;
vendor: 9,782 bytes, line 3135
3135else{if(void 0!==(p=o[e])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,h,c));continue}let r=t&&t._propertyBindings[e].binding.parsedPath;p=new lD(lN.create(i,c,r),a.ValueTypeName,a.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,h,c),o[e]=p}l[e].resultBuffer=p.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){let t=(e._localRoot||this._root).uuid,i=e._clip.uuid,r=this._actionsByClip[i];this._bindAction(e,r&&r.knownActions[0]),this._addInactiveAction(e,i,t)}let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;let e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){let t=e._cacheIndex;return null!==t&&t<this._nActiveActions}_addInactiveAction(e,t,i){let r=this._actions,a=this._actionsByClip,o=a[t];if(void 0===o)o={knownActions:[e],actionByRoot:{}},e._byClipCacheIndex=0,a[t]=o;else{let t=o.knownActions;e._byClipCacheIndex=t.length,t.push(e)}e._cacheIndex=r.length,r.push(e),o.actionByRoot[i]=e}_removeInactiveAction(e){let t=this._actions,i=t[t.length-1],r=e._cacheIndex;i._cacheIndex=r,t[r]=i,t.pop(),e._cacheIndex=null;let a=e._clip.uuid,o=this._actionsByClip,l=o[a],h=l.knownActions,c=h[h.length-1],d=e._byClipCacheIndex;c._byClipCacheIndex=d,h[d]=c,h.pop(),e._byClipCacheIndex=null;let p=l.actionByRoot,f=(e._localRoot||this._root).uuid;delete p[f],0===h.length&&delete o[a],this._removeInactiveBindingsForAction(e)}_removeInactiveBindingsForAction(e){let t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){let i=t[e];0==--i.referenceCount&&this._removeInactiveBinding(i)}}_lendAction(e){let t=this._actions,i=e._cacheIndex,r=this._nActiveActions++,a=t[r];e._cacheIndex=r,t[r]=e,a._cacheIndex=i,t[i]=a}_takeBackAction(e){let t=this._actions,i=e._cacheIndex,r=--this._nActiveActions,a=t[r];e._cacheIndex=r,t[r]=e,a._cacheIndex=i,t[i]=a}_addInactiveBinding(e,t,i){let r=this._bindingsByRootAndName,a=this._bindings,o=r[t];void 0===o&&(o={},r[t]=o),o[i]=e,e._cacheIndex=a.length,a.push(e)}_removeInactiveBinding(e){let t=this._bindings,i=e.binding,r=i.rootNode.uuid,a=i.path,o=this._bindingsByRootAndName,l=o[r],h=t[t.length-1],c=e._cacheIndex;h._cacheIndex=c,t[c]=h,t.pop(),delete l[a],0===Object.keys(l).length&&delete o[r]}_lendBinding(e){let t=this._bindings,i=e._cacheIndex,r=this._nActiveBindings++,a=t[r];e._cacheIndex=r,t[r]=e,a._cacheIndex=i,t[i]=a}_takeBackBinding(e){let t=this._bindings,i=e._cacheIndex,r=--this._nActiveBindings,a=t[r];e._cacheIndex=r,t[r]=e,a._cacheIndex=i,t[i]=a}_lendControlInterpolant(){let e=this._controlInterpolants,t=this._nActiveControlInterpolants++,i=e[t];return void 0===i&&((i=new o1(new Float32Array(2),new Float32Array(2),1,lk)).__cacheIndex=t,e[t]=i),i}_takeBackControlInterpolant(e){let t=this._controlInterpolants,i=e.__cacheIndex,r=--this._nActiveControlInterpolants,a=t[r];e.__cacheIndex=r,t[r]=e,a.__cacheIndex=i,t[i]=a}clipAction(e,t,i){let r=t||this._root,a=r.uuid,o="string"==typeof e?lt.findByName(r,e):e,l=null!==o?o.uuid:e,h=this._actionsByClip[l],c=null;if(void 0===i&&(i=null!==o?o.blendMode:2500),void 0!==h){let e=h.actionByRoot[a];if(void 0!==e&&e.blendMode===i)return e;c=h.knownActions[0],null===o&&(o=c._clip)}if(null===o)return null;let d=new lU(this,o,t,i);return this._bindAction(d,c),this._addInactiveAction(d,l,a),d}existingAction(e,t){let i=t||this._root,r=i.uuid,a="string"==typeof e?lt.findByName(i,e):e,o=a?a.uuid:e,l=this._actionsByClip[o];return void 0!==l&&l.actionByRoot[r]||null}stopAllAction(){let e=this._actions,t=this._nActiveActions;for(let i=t-1;i>=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;let t=this._actions,i=this._nActiveActions,r=this.time+=e,a=Math.sign(e),o=this._accuIndex^=1;for(let l=0;l!==i;++l)t[l]._update(r,e,a,o);let l=this._bindings,h=this._nActiveBindings;for(let e=0;e!==h;++e)l[e].apply(o);return this}setTime(e){this.time=0;for(let e=0;e<this._actions.length;e++)this._actions[e].time=0;return this.update(e)}getRoot(){return this._root}uncacheClip(e){let t=this._actions,i=e.uuid,r=this._actionsByClip,a=r[i];if(void 0!==a){let e=a.knownActions;for(let i=0,r=e.length;i!==r;++i){let r=e[i];this._deactivateAction(r);let a=r._cacheIndex,o=t[t.length-1];r._cacheIndex=null,r._byClipCacheIndex=null,o._cacheIndex=a,t[a]=o,t.pop(),this._removeInactiveBindingsForAction(r)}delete r[i]}}uncacheRoot(e){let t=e.uuid,i=this._actionsByClip;for(let e in i){let r=i[e].actionByRoot[t];void 0!==r&&(this._deactivateAction(r),this._removeInactiveAction(r))}let r=this._bindingsByRootAndName[t];if(void 0!==r)for(let e in r){let t=r[e];t.restoreOriginalState(),this._removeInactiveBinding(t)}}uncacheAction(e,t){let i=this.existingAction(e,t);null!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}},lj=class{constructor(e){this.value=e}clone(){return new lj(void 0===this.value.clone?this.value:this.value.clone())}},lG=class{constructor(e,t,i=0,r=1/0){this.ray=new i5(e,t),this.near=i,this.far=r,this.camera=null,this.layers=new ro,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(e,t){this.ray.set(e,t)}setFromCamera(e,t){t.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t):t.isOrthographicCamera&&(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t)}intersectObject(e,t=!0,i=[]){return lH(e,this,i,t),i.sort(lW),i}intersectObjects(e,t=!0,i=[]){for(let r=0,a=e.length;r<a;r++)lH(e[r],this,i,t);return i.sort(lW),i}};function lW(e,t){return e.distance-t.distance}function lH(e,t,i,r){if(e.layers.test(t.layers)&&e.raycast(t,i),!0===r){let r=e.children;for(let e=0,a=r.length;e<a;e++)lH(r[e],t,i,!0)}}var lq=class{constructor(e=1,t=0,i=0){return this.radius=e,this.phi=t,this.theta=i,this}set(e,t,i){return this.radius=e,this.phi=t,this.theta=i,this}copy(e){return this.radius=e.radius,this.phi=e.phi,this.theta=e.theta,this}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}setFromVector3(e){return this.setFromCartesianCoords(e.x,e.y,e.z)}setFromCartesianCoords(e,t,i){return this.radius=Math.sqrt(e*e+t*t+i*i),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(e,i),this.phi=Math.acos(t$(t/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}},lX=new t9,lY=class{constructor(e=new t9(1/0,1/0),t=new t9(-1/0,-1/0)){this.isBox2=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t<i;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let i=lX.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(e){return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y)}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return lX.copy(e).clamp(this.min,this.max).sub(e).length()}intersect(e){return this.min.max(e.min),this.max.min(e.max),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},lQ=new iD,lZ=new iD,lK=class{constructor(e=new iD,t=new iD){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){lQ.subVectors(e,this.start),lZ.subVectors(this.end,this.start);let i=lZ.dot(lZ),r=lZ.dot(lQ)/i;return t&&(r=t$(r,0,1)),r}closestPointToPoint(e,t,i){let r=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(r).add(this.start)}
3135applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}},lJ=new iD,l$=class extends rw{constructor(e,t){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";let i=new rQ,r=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let e=0,t=1;e<32;e++,t++){let i=e/32*Math.PI*2,a=t/32*Math.PI*2;r.push(Math.cos(i),Math.sin(i),1,Math.cos(a),Math.sin(a),1)}i.setAttribute("position",new rV(r,3));let a=new nY({fog:!1,toneMapped:!1});this.cone=new n3(i,a),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1);let e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),lJ.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(lJ),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}},l0=class extends r7{constructor(e,t,i){super(new oW(t,4,2),new rB({wireframe:!0,fog:!1,toneMapped:!1})),this.light=e,this.color=i,this.type="PointLightHelper",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)}},l1=new iD,l2=new iD,l3=new iD,l4=class extends rw{constructor(e,t,i){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=i,this.type="DirectionalLightHelper",void 0===t&&(t=1);let r=new rQ;r.setAttribute("position",new rV([-t,t,0,t,t,0,t,-t,0,-t,-t,0,-t,t,0],3));let a=new nY({fog:!1,toneMapped:!1});this.lightPlane=new n0(r,a),this.add(this.lightPlane),(r=new rQ).setAttribute("position",new rV([0,0,0,0,0,1],3)),this.targetLine=new n0(r,a),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),l1.setFromMatrixPosition(this.light.matrixWorld),l2.setFromMatrixPosition(this.light.target.matrixWorld),l3.subVectors(l2,l1),this.lightPlane.lookAt(l2),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(l2),this.targetLine.scale.z=l3.length()}},l5=new iD,l6=new sl,l8=class extends n3{constructor(e){let t=new rQ,i=new nY({color:0xffffff,vertexColors:!0,toneMapped:!1}),r=[],a=[],o={};function l(e,t){h(e),h(t)}function h(e){r.push(0,0,0),a.push(0,0,0),void 0===o[e]&&(o[e]=[]),o[e].push(r.length/3-1)}l("n1","n2"),l("n2","n4"),l("n4","n3"),l("n3","n1"),l("f1","f2"),l("f2","f4"),l("f4","f3"),l("f3","f1"),l("n1","f1"),l("n2","f2"),l("n3","f3"),l("n4","f4"),l("p","n1"),l("p","n2"),l("p","n3"),l("p","n4"),l("u1","u2"),l("u2","u3"),l("u3","u1"),l("c","t"),l("p","c"),l("cn1","cn2"),l("cn3","cn4"),l("cf1","cf2"),l("cf3","cf4"),t.setAttribute("position",new rV(r,3)),t.setAttribute("color",new rV(a,3)),super(t,i),this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=o,this.update();let c=new iv(0xffaa00),d=new iv(0xff0000),p=new iv(43775),f=new iv(0xffffff),m=new iv(3355443);this.setColors(c,d,p,f,m)}setColors(e,t,i,r,a){let o=this.geometry.getAttribute("color");o.setXYZ(0,e.r,e.g,e.b),o.setXYZ(1,e.r,e.g,e.b),o.setXYZ(2,e.r,e.g,e.b),o.setXYZ(3,e.r,e.g,e.b),o.setXYZ(4,e.r,e.g,e.b),o.setXYZ(5,e.r,e.g,e.b),o.setXYZ(6,e.r,e.g,e.b),o.setXYZ(7,e.r,e.g,e.b),o.setXYZ(8,e.r,e.g,e.b),o.setXYZ(9,e.r,e.g,e.b),o.setXYZ(10,e.r,e.g,e.b),o.setXYZ(11,e.r,e.g,e.b),o.setXYZ(12,e.r,e.g,e.b),o.setXYZ(13,e.r,e.g,e.b),o.setXYZ(14,e.r,e.g,e.b),o.setXYZ(15,e.r,e.g,e.b),o.setXYZ(16,e.r,e.g,e.b),o.setXYZ(17,e.r,e.g,e.b),o.setXYZ(18,e.r,e.g,e.b),o.setXYZ(19,e.r,e.g,e.b),o.setXYZ(20,e.r,e.g,e.b),o.setXYZ(21,e.r,e.g,e.b),o.setXYZ(22,e.r,e.g,e.b),o.setXYZ(23,e.r,e.g,e.b),o.setXYZ(24,t.r,t.g,t.b),o.setXYZ(25,t.r,t.g,t.b),o.setXYZ(26,t.r,t.g,t.b),o.setXYZ(27,t.r,t.g,t.b),o.setXYZ(28,t.r,t.g,t.b),o.setXYZ(29,t.r,t.g,t.b),o.setXYZ(30,t.r,t.g,t.b),o.setXYZ(31,t.r,t.g,t.b),o.setXYZ(32,i.r,i.g,i.b),o.setXYZ(33,i.r,i.g,i.b),o.setXYZ(34,i.r,i.g,i.b),o.setXYZ(35,i.r,i.g,i.b),o.setXYZ(36,i.r,i.g,i.b),o.setXYZ(37,i.r,i.g,i.b),o.setXYZ(38,r.r,r.g,r.b),o.setXYZ(39,r.r,r.g,r.b),o.setXYZ(40,a.r,a.g,a.b),o.setXYZ(41,a.r,a.g,a.b),o.setXYZ(42,a.r,a.g,a.b),o.setXYZ(43,a.r,a.g,a.b),o.setXYZ(44,a.r,a.g,a.b),o.setXYZ(45,a.r,a.g,a.b),o.setXYZ(46,a.r,a.g,a.b),o.setXYZ(47,a.r,a.g,a.b),o.setXYZ(48,a.r,a.g,a.b),o.setXYZ(49,a.r,a.g,a.b),o.needsUpdate=!0}update(){let e=this.geometry,t=this.pointMap;l6.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),l9("c",t,e,l6,0,0,-1),l9("t",t,e,l6,0,0,1),l9("n1",t,e,l6,-1,-1,-1),l9
vendor: 6,151 bytes, line 3135
3135("n2",t,e,l6,1,-1,-1),l9("n3",t,e,l6,-1,1,-1),l9("n4",t,e,l6,1,1,-1),l9("f1",t,e,l6,-1,-1,1),l9("f2",t,e,l6,1,-1,1),l9("f3",t,e,l6,-1,1,1),l9("f4",t,e,l6,1,1,1),l9("u1",t,e,l6,.7,1.1,-1),l9("u2",t,e,l6,-.7,1.1,-1),l9("u3",t,e,l6,0,2,-1),l9("cf1",t,e,l6,-1,0,1),l9("cf2",t,e,l6,1,0,1),l9("cf3",t,e,l6,0,-1,1),l9("cf4",t,e,l6,0,1,1),l9("cn1",t,e,l6,-1,0,-1),l9("cn2",t,e,l6,1,0,-1),l9("cn3",t,e,l6,0,-1,-1),l9("cn4",t,e,l6,0,1,-1),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function l9(e,t,i,r,a,o,l){l5.set(a,o,l).unproject(r);let h=t[e];if(void 0!==h){let e=i.getAttribute("position");for(let t=0,i=h.length;t<i;t++)e.setXYZ(h[t],l5.x,l5.y,l5.z)}}var l7=class extends n3{constructor(e,t=0xffff00){let i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),r=new rQ;r.setIndex(new rN(i,1)),r.setAttribute("position",new rV([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(r,new nY({color:t,toneMapped:!1})),this.box=e,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(e){let t=this.box;t.isEmpty()||(t.getCenter(this.position),t.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(e))}dispose(){this.geometry.dispose(),this.material.dispose()}},he=class extends n3{constructor(e=1){let t=new rQ;t.setAttribute("position",new rV([0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],3)),t.setAttribute("color",new rV([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3)),super(t,new nY({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(e,t,i){let r=new iv,a=this.geometry.attributes.color.array;return r.set(e),r.toArray(a,0),r.toArray(a,3),r.set(t),r.toArray(a,6),r.toArray(a,9),r.set(i),r.toArray(a,12),r.toArray(a,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}},ht=function(){let e=new ArrayBuffer(4),t=new Float32Array(e),i=new Uint32Array(e),r=new Uint32Array(512),a=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(r[e]=0,r[256|e]=32768,a[e]=24,a[256|e]=24):t<-14?(r[e]=1024>>-t-14,r[256|e]=1024>>-t-14|32768,a[e]=-t-1,a[256|e]=-t-1):t<=15?(r[e]=t+15<<10,r[256|e]=t+15<<10|32768,a[e]=13,a[256|e]=13):t<128?(r[e]=31744,r[256|e]=64512,a[e]=24,a[256|e]=24):(r[e]=31744,r[256|e]=64512,a[e]=13,a[256|e]=13)}let o=new Uint32Array(2048),l=new Uint32Array(64),h=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,i=0;for(;(8388608&t)==0;)t<<=1,i-=8388608;t&=-8388609,i+=0x38800000,o[e]=t|i}for(let e=1024;e<2048;++e)o[e]=0x38000000+(e-1024<<13);for(let e=1;e<31;++e)l[e]=e<<23;l[31]=0x47800000,l[32]=0x80000000;for(let e=33;e<63;++e)l[e]=0x80000000+(e-32<<23);l[63]=0xc7800000;for(let e=1;e<64;++e)32!==e&&(h[e]=1024);return{floatView:t,uint32View:i,baseTable:r,shiftTable:a,mantissaTable:o,exponentTable:l,offsetTable:h}}(),hi=Object.freeze({__proto__:null,fromHalfFloat:function(e){let t=e>>10;return ht.uint32View[0]=ht.mantissaTable[ht.offsetTable[t]+(1023&e)]+ht.exponentTable[t],ht.floatView[0]},toHalfFloat:function(e){e=t$(e,-65504,65504),ht.floatView[0]=e;let t=ht.uint32View[0],i=t>>23&511;return ht.baseTable[i]+((8388607&t)>>ht.shiftTable[i])}});"u">typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"149"}})),window.__THREE__||(window.__THREE__="149");var hr=Symbol("target"),hs=Symbol("unsubscribe");function ha(e){return e instanceof Date||e instanceof Set||e instanceof Map||e instanceof WeakSet||e instanceof WeakMap||ArrayBuffer.isView(e)}var hn=Array.isArray;function ho(e){return"symbol"==typeof e}var hl={after:(e,t)=>hn(e)?e.slice(t.length):""===t?e:e.slice(t.length+1),concat:(e,t)=>hn(e)?(e=[...e],t&&e.push(t),e):t&&void 0!==t.toString?(""!==e&&(e+="."),ho(t)?e+t.toString():e+t):e,initial:e=>{if(hn(e))return e.slice(0,-1);if(""===e)return e;let t=e.lastIndexOf(".");return -1===t?"":e.slice(0,t)},last:e=>{if(hn(e))return e[e.length-1]||"";if(""===e)return e;let t=e.lastIndexOf(".");return -1===t?e:e.slice(t+1)},walk:(e,t)=>{if(hn(e))for(let i of e)t(i);else if(""!==e){let i=0,r=e.indexOf(".");if(-1===r)t(e);else for(;i<e.length;)-1===r&&(r=e.length),t(e.slice(i,r)),i=r+1,r=e.indexOf(".",i)}},get(e,t){return this.walk(t,t=>{e&&(e=e[t])}),e}};function hh(e,t,i){return e.isUnsubscribed||t.ignoreSymbols&&ho(i)||t.ignoreUnderscores&&"_"===i.charAt(0)||"ignoreKeys"in t&&t.ignoreKeys.includes(i)}var hc=class{constructor(e){this._equals=e,this._proxyCache=new WeakMap,this._pathCache=new WeakMap,this.isUnsubscribed=!1}_getDescriptorCache(){return void 0===this._descriptorCache&&(this._descriptorCache=new WeakMap),this._descriptorCache}_getProperties(e){let t=this._getDescriptorCache(),i=t.get(e);return void 0===i&&(i={},t.set(e,i)),i}_getOwnPropertyDescriptor(e,t){if(this.isUnsubscribed)return Reflect.getOwnPropertyDescriptor(e,t);let i=this._getProperties(e),r=i[t];return void 0===r&&(r=Reflect.getOwnPropertyDescriptor(e,t),i[t]=r),r}getProxy(e,t,i,r){if(this.isUnsubscribed)return e;let a=e[r],o=a||e;this._pathCache.set(o,t);let l=this._proxyCache.get(o);return void 0===l&&(l=void 0===a?new Proxy(e,i):e,this._proxyCache.set(o,l)),l}getPath(e){return this.isUnsubscribed?void 0:this._pathCache.get(e)}isDetached(e,t){return!Object.is(e,hl.get(t,this.getPath(e)))}defineProperty(e,t,i){return!!Reflect.defineProperty(e,t,i)&&(this.isUnsubscribed||(this._getProperties(e)[t]=i),!0)}setProperty(e,t,i,r,a){if(!this._equals(a,i)||!(t in e)){let a=this._getOwnPropertyDescriptor(e,t);return void 0!==a&&"set"in a?Reflect.set(e,t,i,r):Reflect.set(e,t,i)}return!0}deleteProperty(e,t,i){if(Reflect.deleteProperty(e,t)){if(!this.isUnsubscribed){let r=this._getDescriptorCache().get(e);r&&(delete r[t],this._pathCache.delete(i))}return!0}return!1}isSameDescriptor(e,t,i){let r=this._getOwnPropertyDescriptor(t,i);return void 0!==e&&void 0!==r&&Object.is(e.value,r.value)&&(e.writable||!1)===(r.writable||!1)&&(e.enumerable||!1)===(r.enumerable||!1)&&(e.configurable||!1)===(r.configurable||!1)&&e.get===r.get&&e.set===r.set}isGetInvariant(e,t){let i=this._getOwnPropertyDescriptor(e,t);return void 0!==i&&!0!==i.configurable&&!0!==i.writable}
vendor: 5,401 bytes, line 3135
3135unsubscribe(){this._descriptorCache=null,this._pathCache=null,this._proxyCache=null,this.isUnsubscribed=!0}};function hd(e){return"[object Object]"===toString.call(e)}function hu(){return!0}function hp(e,t){return e.length!==t.length||e.some((e,i)=>t[i]!==e)}var hf=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]),hm=new Set(["concat","includes","indexOf","join","keys","lastIndexOf"]),hg={push:hu,pop:hu,shift:hu,unshift:hu,copyWithin:hp,reverse:hp,sort:hp,splice:hp,flat:hp,fill:hp},hv=new Set([...hf,...hm,...Object.keys(hg)]);function hy(e,t){if(e.size!==t.size)return!0;for(let i of e)if(!t.has(i))return!0;return!1}var hx=["keys","values","entries"],hb=new Set(["has","toString"]),hw={add:hy,clear:hy,delete:hy,forEach:hy},hS=new Set([...hb,...Object.keys(hw),...hx]);function h_(e,t){let i;if(e.size!==t.size)return!0;for(let[r,a]of e)if((i=t.get(r))!==a||void 0===i&&!t.has(r))return!0;return!1}var hA=new Set([...hb,"get"]),hM={set:h_,clear:h_,delete:h_,forEach:h_},hC=new Set([...hA,...Object.keys(hM),...hx]),hE=class{constructor(e,t,i,r){this._path=t,this._isChanged=!1,this._clonedCache=new Set,this._hasOnValidate=r,this._changes=r?[]:null,this.clone=void 0===t?e:this._shallowClone(e)}static isHandledMethod(e){return hf.has(e)}_shallowClone(e){let t=e;if(hd(e))t={...e};else if(hn(e))t=[...e];else if(e instanceof Date)t=new Date(e);else if(e instanceof Set)t=new Set([...e].map(e=>this._shallowClone(e)));else if(e instanceof Map)for(let[i,r]of(t=new Map,e.entries()))t.set(i,this._shallowClone(r));return this._clonedCache.add(t),t}preferredThisArg(e,t,i,r){return e?(hn(r)?this._onIsChanged=hg[t]:r instanceof Set?this._onIsChanged=hw[t]:r instanceof Map&&(this._onIsChanged=hM[t]),r):i}update(e,t,i){let r=hl.after(e,this._path);if("length"!==t){let e=this.clone;hl.walk(r,t=>{e&&e[t]&&(this._clonedCache.has(e[t])||(e[t]=this._shallowClone(e[t])),e=e[t])}),this._hasOnValidate&&this._changes.push({path:r,property:t,previous:i}),e&&e[t]&&(e[t]=i)}this._isChanged=!0}undo(e){let t;for(let i=this._changes.length-1;-1!==i;i--)t=this._changes[i],hl.get(e,t.path)[t.property]=t.previous}isChanged(e){return void 0===this._onIsChanged?this._isChanged:this._onIsChanged(this.clone,e)}},hT=class extends hE{static isHandledMethod(e){return hv.has(e)}},hP=class extends hE{undo(e){e.setTime(this.clone.getTime())}isChanged(e,t){return!t(this.clone.valueOf(),e.valueOf())}},hD=class extends hE{static isHandledMethod(e){return hS.has(e)}undo(e){for(let t of this.clone)e.add(t);for(let t of e)this.clone.has(t)||e.delete(t)}},hO=class extends hE{static isHandledMethod(e){return hC.has(e)}undo(e){for(let[t,i]of this.clone.entries())e.set(t,i);for(let t of e.keys())this.clone.has(t)||e.delete(t)}},hI=class extends hE{constructor(e,t,i,r){super(void 0,t,i,r),this._arg1=i[0],this._weakValue=e.has(this._arg1)}isChanged(e){return this._weakValue!==e.has(this._arg1)}undo(e){this._weakValue&&!e.has(this._arg1)?e.add(this._arg1):e.delete(this._arg1)}},hR=class extends hE{constructor(e,t,i,r){super(void 0,t,i,r),this._weakKey=i[0],this._weakHas=e.has(this._weakKey),this._weakValue=e.get(this._weakKey)}isChanged(e){return this._weakValue!==e.get(this._weakKey)}undo(e){let t=e.has(this._weakKey);this._weakHas&&!t?e.set(this._weakKey,this._weakValue):!this._weakHas&&t?e.delete(this._weakKey):this._weakValue!==e.get(this._weakKey)&&e.set(this._weakKey,this._weakValue)}},hL=class{constructor(e){this._stack=[],this._hasOnValidate=e}static isHandledType(e){return hd(e)||hn(e)||ha(e)}static isHandledMethod(e,t){return hd(e)?hE.isHandledMethod(t):hn(e)?hT.isHandledMethod(t):e instanceof Set?hD.isHandledMethod(t):e instanceof Map?hO.isHandledMethod(t):ha(e)}get isCloning(){return this._stack.length>0}start(e,t,i){let r=hE;hn(e)?r=hT:e instanceof Date?r=hP:e instanceof Set?r=hD:e instanceof Map?r=hO:e instanceof WeakSet?r=hI:e instanceof WeakMap&&(r=hR),this._stack.push(new r(e,t,i,this._hasOnValidate))}update(e,t,i){this._stack[this._stack.length-1].update(e,t,i)}preferredThisArg(e,t,i){let{name:r}=e,a=hL.isHandledMethod(i,r);return this._stack[this._stack.length-1].preferredThisArg(a,r,t,i)}isChanged(e,t,i){return this._stack[this._stack.length-1].isChanged(e,t,i)}undo(e){void 0!==this._previousClone&&this._previousClone.undo(e)}stop(){return this._previousClone=this._stack.pop(),this._previousClone.clone}},hB={equals:Object.is,isShallow:!1,pathAsArray:!1,ignoreSymbols:!1,ignoreUnderscores:!1,ignoreDetached:!1,details:!1},hz=(e,t,i={})=>{i={...hB,...i};let r=Symbol("ProxyTarget"),{equals:a,isShallow:o,ignoreDetached:l,details:h}=i,c=new hc(a),d="function"==typeof i.onValidate,p=new hL(d),f=(e,t,r,a,o)=>!d||p.isCloning||!0===i.onValidate(hl.concat(c.getPath(e),t),r,a,o),m=(t,r,a,o)=>{hh(c,i,r)||l&&c.isDetached(t,e)||g(c.getPath(t),r,a,o)},g=(e,i,r,a,o)=>{p.isCloning?p.update(e,i,a):t(hl.concat(e,i),r,a,o)},v=e=>e&&(e[r]||e),y=(t,a,h,d)=>("object"==typeof t?null===t:"function"!=typeof t)||t instanceof RegExp||"constructor"===h||o&&!hL.isHandledMethod(a,h)||hh(c,i,h)||c.isGetInvariant(a,h)||l&&c.isDetached(a,e)?t:(void 0===d&&(d=c.getPath(a)),c.getProxy(t,hl.concat(d,h),x,r)),x={get(e,t,i){if(ho(t)){if(t===r||t===hr)return e;if(t===hs&&!c.isUnsubscribed&&0===c.getPath(e).length)return c.unsubscribe(),e}return y(ha(e)?Reflect.get(e,t):Reflect.get(e,t,i),e,t)},set(e,t,i,o){i=v(i);let l=e[r]||e,h=l[t];
3135if(a(h,i)&&t in e)return!0;let d=f(e,t,i,h);return d&&c.setProperty(l,t,i,o,h)?(m(e,t,e[t],h),!0):!d},defineProperty(e,t,i){if(!c.isSameDescriptor(i,e,t)){let r=e[t];f(e,t,i.value,r)&&c.defineProperty(e,t,i,r)&&m(e,t,i.value,r)}return!0},deleteProperty(e,t){if(!Reflect.has(e,t))return!0;let i=Reflect.get(e,t),r=f(e,t,void 0,i);return r&&c.deleteProperty(e,t,i)?(m(e,t,void 0,i),!0):!r},apply(t,i,o){let l=i[r]||i;if(c.isUnsubscribed)return Reflect.apply(t,l,o);if((!1===h||!0!==h&&!h.includes(t.name))&&hL.isHandledType(l)){var d;let r=hl.initial(c.getPath(t)),h=hL.isHandledMethod(l,t.name);p.start(l,r,o);let m=Reflect.apply(t,p.preferredThisArg(t,i,l),h?o.map(e=>v(e)):o),b=p.isChanged(l,a),w=p.stop();if(hL.isHandledType(m)&&h&&(i instanceof Map&&"get"===t.name&&(r=hl.concat(r,o[0])),m=c.getProxy(m,r,x)),b){let i={name:t.name,args:o,result:m},a=p.isCloning?hl.initial(r):r,h=p.isCloning?hl.last(r):"";f(hl.get(e,a),h,l,w,i)?g(a,h,l,w,i):p.undo(l)}return(i instanceof Map||i instanceof Set)&&"object"==typeof(d=m)&&"function"==typeof d.next?function(e,t,i,r,a){let o=e.next;if("entries"===t.name)e.next=function(){let e=o.call(this);return!1===e.done&&(e.value[0]=a(e.value[0],t,e.value[0],r),e.value[1]=a(e.value[1],t,e.value[0],r)),e};else if("values"===t.name){let l=i[hr].keys();e.next=function(){let e=o.call(this);return!1===e.done&&(e.value=a(e.value,t,l.next().value,r)),e}}else e.next=function(){let e=o.call(this);return!1===e.done&&(e.value=a(e.value,t,e.value,r)),e};return e}(m,t,i,r,y):m}return Reflect.apply(t,i,o)}},b=c.getProxy(e,i.pathAsArray?[]:"",x);return t=t.bind(b),d&&(i.onValidate=i.onValidate.bind(b)),b};hz.target=e=>e&&e[hr]||e,hz.unsubscribe=e=>e[hs]||e;var hF="object"==typeof i.g&&i.g&&i.g.Object===Object&&i.g,hN="object"==typeof self&&self&&self.Object===Object&&self,hU=hF||hN||Function("return this")(),hk=hU.Symbol,hV=Object.prototype,hj=hV.hasOwnProperty,hG=hV.toString,hW=hk?hk.toStringTag:void 0,hH=function(e){var t=hj.call(e,hW),i=e[hW];try{e[hW]=void 0;var r=!0}catch{}var a=hG.call(e);return r&&(t?e[hW]=i:delete e[hW]),a},hq=Object.prototype.toString,hX=hk?hk.toStringTag:void 0,hY=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":hX&&hX in Object(e)?hH(e):hq.call(e)},hQ=function(e){return null!=e&&"object"==typeof e},hZ=function(e){return"symbol"==typeof e||hQ(e)&&"[object Symbol]"==hY(e)},hK=function(e,t){for(var i=-1,r=null==e?0:e.length,a=Array(r);++i<r;)a[i]=t(e[i],i,e);return a},hJ=Array.isArray,h$=1/0,h0=hk?hk.prototype:void 0,h1=h0?h0.toString:void 0,h2=function e(t){if("string"==typeof t)return t;if(hJ(t))return hK(t,e)+"";if(hZ(t))return h1?h1.call(t):"";var i=t+"";return"0"==i&&1/t==-h$?"-0":i},h3=/\s/,h4=function(e){for(var t=e.length;t--&&h3.test(e.charAt(t)););return t},h5=/^\s+/,h6=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},h8=0/0,h9=/^[-+]0x[0-9a-f]+$/i,h7=/^0b[01]+$/i,ce=/^0o[0-7]+$/i,ct=parseInt,ci=function(e){if("number"==typeof e)return e;if(hZ(e))return h8;if(h6(e)){var t,i="function"==typeof e.valueOf?e.valueOf():e;e=h6(i)?i+"":i}if("string"!=typeof e)return 0===e?e:+e;e=(t=e)&&t.slice(0,h4(t)+1).replace(h5,"");var r=h7.test(e);return r||ce.test(e)?ct(e.slice(2),r?2:8):h9.test(e)?h8:+e},cr=function(e){return e},cs=function(e){if(!h6(e))return!1;var t=hY(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},ca=hU["__core-js_shared__"],cn=(pD=/[^.]+$/.exec(ca&&ca.keys&&ca.keys.IE_PROTO||""))?"Symbol(src)_1."+pD:"",co=Function.prototype.toString,cl=function(e){if(null!=e){try{return co.call(e)}catch{}try{return e+""}catch{}}return""},ch=/^\[object .+?Constructor\]$/,cc=Object.prototype,cd=Function.prototype.toString,cu=cc.hasOwnProperty,cp=RegExp("^"+cd.call(cu).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),cf=function(e){return!!h6(e)&&(!cn||!(cn in e))&&(cs(e)?cp:ch).test(cl(e))},cm=function(e,t){var i=e?.[t];return cf(i)?i:void 0},cg=cm(hU,"WeakMap"),cv=Object.create,cy=function(){function e(){}return function(t){if(!h6(t))return{};if(cv)return cv(t);e.prototype=t;var i=new e;return e.prototype=void 0,i}}(),cx=function(e,t,i){switch(i.length){case 0:return e.call(t);case 1:return e.call(t,i[0]);case 2:return e.call(t,i[0],i[1]);case 3:return e.call(t,i[0],i[1],i[2])}return e.apply(t,i)},cb=function(e,t){var i=-1,r=e.length;for(t||(t=Array(r));++i<r;)t[i]=e[i];return t},cw=Date.now,cS=function(){try{var e=cm(Object,"defineProperty");return e({},"",{}),e}catch{}}(),c_=(pO=cS?function(e,t){return cS(e,"toString",{configurable:!0,enumerable:!1,value:function(){return t},writable:!0})}:cr,pI=0,pR=0,function(){var e=cw(),t=16-(e-pR);if(pR=e,t>0){if(++pI>=800)return arguments[0]}else pI=0;return pO.apply(void 0,arguments)}),cA=function(e,t){for(var i=-1,r=null==e?0:e.length;++i<r&&!1!==t(e[i],i,e););return e},cM=function(e,t,i,r){for(var a=e.length,o=i+(r?1:-1);r?o--:++o<a;)if(t(e[o],o,e))return o;return -1},cC=function(e){return e!=e},cE=function(e,t,i){for(var r=i-1,a=e.length;++r<a;)if(e[r]===t)return r;return -1},cT=/^(?:0|[1-9]\d*)$/,cP=function(e,t){var i=typeof e;return!!(t=t??0x1fffffffffffff)&&("number"==i||"symbol"!=i&&cT.test(e))&&e>-1&&e%1==0&&e<t},cD=function(e,t,i){"__proto__"==t&&cS?cS(e,t,{configurable:!0,enumerable:!0,value:i,writable:!0}):e[t]=i},cO=function(e,t){return e===t||e!=e&&t!=t},cI=Object.prototype.hasOwnProperty,cR=function(e,t,i){var r=e[t];cI.call(e,t)&&cO(r,i)&&(void 0!==i||t in e)||cD(e,t,i)},cL=function(e,t,i,r){var a=!i;i||(i={});for(var o=-1,l=t.length;++o<l;){var h=t[o],c=r?r(i[h],e[h],h,i,e):void 0;void 0===c&&(c=e[h]),a?cD(i,h,c):cR(i,h,c)}return i},cB=Math.max,cz=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=0x1fffffffffffff},cF=function(e){return null!=e&&cz(e.length)&&!cs(e)},cN=Object.prototype,cU=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||cN)},ck=function(e,t){for(var i=-1,r=Array(e);++i<e;)r[i]=t(i);return r},cV=function(e){return hQ(e)&&"[object Arguments]"==hY(e)},cj=Object.prototype,cG=cj.hasOwnProperty,cW=cj.propertyIsEnumerable,cH=cV(function(){return arguments}())?cV:function(e){return hQ(e)&&cG.call(e,"callee")&&!cW.call(e,"callee")},cq="object"==typeof exports&&exports&&!exports.nodeType&&exports,cX=cq&&"object"==typeof module&&module&&!module.nodeType&&module,cY=cX&&cX.exports===cq?hU.Buffer:void 0,cQ=(cY?cY.isBuffer:void 0)||function(){return!1},cZ={};
3135cZ["[object Float32Array]"]=cZ["[object Float64Array]"]=cZ["[object Int8Array]"]=cZ["[object Int16Array]"]=cZ["[object Int32Array]"]=cZ["[object Uint8Array]"]=cZ["[object Uint8ClampedArray]"]=cZ["[object Uint16Array]"]=cZ["[object Uint32Array]"]=!0,cZ["[object Arguments]"]=cZ["[object Array]"]=cZ["[object ArrayBuffer]"]=cZ["[object Boolean]"]=cZ["[object DataView]"]=cZ["[object Date]"]=cZ["[object Error]"]=cZ["[object Function]"]=cZ["[object Map]"]=cZ["[object Number]"]=cZ["[object Object]"]=cZ["[object RegExp]"]=cZ["[object Set]"]=cZ["[object String]"]=cZ["[object WeakMap]"]=!1;var cK=function(e){return function(t){return e(t)}},cJ="object"==typeof exports&&exports&&!exports.nodeType&&exports,c$=cJ&&"object"==typeof module&&module&&!module.nodeType&&module,c0=c$&&c$.exports===cJ&&hF.process,c1=function(){try{return c$&&c$.require&&c$.require("util").types||c0&&c0.binding&&c0.binding("util")}catch{}}(),c2=c1&&c1.isTypedArray,c3=c2?cK(c2):function(e){return hQ(e)&&cz(e.length)&&!!cZ[hY(e)]},c4=Object.prototype.hasOwnProperty,c5=function(e,t){var i=hJ(e),r=!i&&cH(e),a=!i&&!r&&cQ(e),o=!i&&!r&&!a&&c3(e),l=i||r||a||o,h=l?ck(e.length,String):[],c=h.length;for(var d in e)(t||c4.call(e,d))&&!(l&&("length"==d||a&&("offset"==d||"parent"==d)||o&&("buffer"==d||"byteLength"==d||"byteOffset"==d)||cP(d,c)))&&h.push(d);return h},c6=function(e,t){return function(i){return e(t(i))}},c8=c6(Object.keys,Object),c9=Object.prototype.hasOwnProperty,c7=function(e){if(!cU(e))return c8(e);var t=[];for(var i in Object(e))c9.call(e,i)&&"constructor"!=i&&t.push(i);return t},de=function(e){return cF(e)?c5(e):c7(e)},dt=function(e){var t=[];if(null!=e)for(var i in Object(e))t.push(i);return t},di=Object.prototype.hasOwnProperty,dr=function(e){if(!h6(e))return dt(e);var t=cU(e),i=[];for(var r in e)"constructor"==r&&(t||!di.call(e,r))||i.push(r);return i},ds=function(e){return cF(e)?c5(e,!0):dr(e)},da=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,dn=/^\w*$/,dl=function(e,t){if(hJ(e))return!1;var i=typeof e;return!!("number"==i||"symbol"==i||"boolean"==i||null==e||hZ(e))||dn.test(e)||!da.test(e)||null!=t&&e in Object(t)},dh=cm(Object,"create"),dc=Object.prototype.hasOwnProperty,dd=Object.prototype.hasOwnProperty;function du(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}du.prototype.clear=function(){this.__data__=dh?dh(null):{},this.size=0},du.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=!!t,t},du.prototype.get=function(e){var t=this.__data__;if(dh){var i=t[e];return"__lodash_hash_undefined__"===i?void 0:i}return dc.call(t,e)?t[e]:void 0},du.prototype.has=function(e){var t=this.__data__;return dh?void 0!==t[e]:dd.call(t,e)},du.prototype.set=function(e,t){var i=this.__data__;return this.size+=+!this.has(e),i[e]=dh&&void 0===t?"__lodash_hash_undefined__":t,this};var dp=function(e,t){for(var i=e.length;i--;)if(cO(e[i][0],t))return i;return -1},df=Array.prototype.splice;function dm(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}dm.prototype.clear=function(){this.__data__=[],this.size=0},dm.prototype.delete=function(e){var t=this.__data__,i=dp(t,e);return!(i<0)&&(i==t.length-1?t.pop():df.call(t,i,1),--this.size,!0)},dm.prototype.get=function(e){var t=this.__data__,i=dp(t,e);return i<0?void 0:t[i][1]},dm.prototype.has=function(e){return dp(this.__data__,e)>-1},dm.prototype.set=function(e,t){var i=this.__data__,r=dp(i,e);return r<0?(++this.size,i.push([e,t])):i[r][1]=t,this};var dg=cm(hU,"Map"),dv=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e},dy=function(e,t){var i=e.__data__;return dv(t)?i["string"==typeof t?"string":"hash"]:i.map};function dx(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var r=e[t];this.set(r[0],r[1])}}function db(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw TypeError("Expected a function");var i=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=i.cache;if(o.has(a))return o.get(a);var l=e.apply(this,r);return i.cache=o.set(a,l)||o,l};
3135return i.cache=new(db.Cache||dx),i}dx.prototype.clear=function(){this.size=0,this.__data__={hash:new du,map:new(dg||dm),string:new du}},dx.prototype.delete=function(e){var t=dy(this,e).delete(e);return this.size-=!!t,t},dx.prototype.get=function(e){return dy(this,e).get(e)},dx.prototype.has=function(e){return dy(this,e).has(e)},dx.prototype.set=function(e,t){var i=dy(this,e),r=i.size;return i.set(e,t),this.size+=+(i.size!=r),this},db.Cache=dx;var dw=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,dS=/\\(\\)?/g,d_=(pB=(pL=db(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(dw,function(e,i,r,a){t.push(r?a.replace(dS,"$1"):i||e)}),t},function(e){return 500===pB.size&&pB.clear(),e})).cache,pL),dA=function(e){return null==e?"":h2(e)},dM=function(e,t){return hJ(e)?e:dl(e,t)?[e]:d_(dA(e))},dC=1/0,dE=function(e){if("string"==typeof e||hZ(e))return e;var t=e+"";return"0"==t&&1/e==-dC?"-0":t},dT=function(e,t){t=dM(t,e);for(var i=0,r=t.length;null!=e&&i<r;)e=e[dE(t[i++])];return i&&i==r?e:void 0},dP=function(e,t){for(var i=-1,r=t.length,a=e.length;++i<r;)e[a+i]=t[i];return e},dD=hk?hk.isConcatSpreadable:void 0,dO=function(e){return hJ(e)||cH(e)||!!(dD&&e&&e[dD])},dI=function e(t,i,r,a,o){var l=-1,h=t.length;for(r||(r=dO),o||(o=[]);++l<h;){var c=t[l];i>0&&r(c)?i>1?e(c,i-1,r,a,o):dP(o,c):a||(o[o.length]=c)}return o},dR=function(e){return(null==e?0:e.length)?dI(e,1):[]},dL=function(e){var t;return c_((t=cB((t=void 0,e.length-1),0),function(){for(var i=arguments,r=-1,a=cB(i.length-t,0),o=Array(a);++r<a;)o[r]=i[t+r];r=-1;for(var l=Array(t+1);++r<t;)l[r]=i[r];return l[t]=dR(o),cx(e,this,l)}),e+"")},dB=c6(Object.getPrototypeOf,Object),dz=Object.prototype,dF=Function.prototype.toString,dN=dz.hasOwnProperty,dU=dF.call(Object),dk=function(e){if(!hQ(e)||"[object Object]"!=hY(e))return!1;var t=dB(e);if(null===t)return!0;var i=dN.call(t,"constructor")&&t.constructor;return"function"==typeof i&&i instanceof i&&dF.call(i)==dU},dV=function(e,t,i){var r=-1,a=e.length;t<0&&(t=-t>a?0:a+t),(i=i>a?a:i)<0&&(i+=a),a=t>i?0:i-t>>>0,t>>>=0;for(var o=Array(a);++r<a;)o[r]=e[r+t];return o},dj=function(e,t,i){var r=e.length;return i=void 0===i?r:i,!t&&i>=r?e:dV(e,t,i)},dG=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"),dW="\\ud800-\\udfff",dH="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",dq="\\ud83c[\\udffb-\\udfff]",dX="[^"+dW+"]",dY="(?:\\ud83c[\\udde6-\\uddff]){2}",dQ="[\\ud800-\\udbff][\\udc00-\\udfff]",dZ="(?:"+dH+"|"+dq+")?",dK="[\\ufe0e\\ufe0f]?",dJ="(?:\\u200d(?:"+[dX,dY,dQ].join("|")+")"+dK+dZ+")*",d$=RegExp(dq+"(?="+dq+")|"+("(?:"+[dX+dH+"?",dH,dY,dQ,"["+dW+"]"].join("|"))+")"+(dK+dZ+dJ),"g"),d0=function(e){return dG.test(e)?e.match(d$)||[]:e.split("")};function d1(e){var t=this.__data__=new dm(e);this.size=t.size}d1.prototype.clear=function(){this.__data__=new dm,this.size=0},d1.prototype.delete=function(e){var t=this.__data__,i=t.delete(e);return this.size=t.size,i},d1.prototype.get=function(e){return this.__data__.get(e)},d1.prototype.has=function(e){return this.__data__.has(e)},d1.prototype.set=function(e,t){var i=this.__data__;if(i instanceof dm){var r=i.__data__;if(!dg||r.length<199)return r.push([e,t]),this.size=++i.size,this;i=this.__data__=new dx(r)}return i.set(e,t),this.size=i.size,this};var d2="object"==typeof exports&&exports&&!exports.nodeType&&exports,d3=d2&&"object"==typeof module&&module&&!module.nodeType&&module,d4=d3&&d3.exports===d2?hU.Buffer:void 0,d5=d4?d4.allocUnsafe:void 0,d6=function(e,t){if(t)return e.slice();var i=e.length,r=d5?d5(i):new e.constructor(i);return e.copy(r),r},d8=function(e,t){for(var i=-1,r=null==e?0:e.length,a=0,o=[];++i<r;){var l=e[i];t(l,i,e)&&(o[a++]=l)}return o},d9=function(){return[]},d7=Object.prototype.propertyIsEnumerable,ue=Object.getOwnPropertySymbols,ut=ue?function(e){return null==e?[]:d8(ue(e=Object(e)),function(t){return d7.call(e,t)})}:d9,ui=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)dP(t,ut(e)),e=dB(e);return t}:d9,ur=function(e,t,i){var r=t(e);return hJ(e)?r:dP(r,i(e))},us=function(e){return ur(e,de,ut)},ua=function(e){return ur(e,ds,ui)},un=cm(hU,"DataView"),uo=cm(hU,"Promise"),ul=cm(hU,"Set"),uh="[object Map]",uc="[object Promise]",ud="[object Set]",uu="[object WeakMap]",up="[object DataView]",uf=cl(un),um=cl(dg),ug=cl(uo),uv=cl(ul),uy=cl(cg),ux=hY;(un&&ux(new un(new ArrayBuffer(1)))!=up||dg&&ux(new dg)!=uh||uo&&ux(uo.resolve())!=uc||ul&&ux(new ul)!=ud||cg&&ux(new cg)!=uu)&&(ux=function(e){var t=hY(e),i="[object Object]"==t?e.constructor:void 0,r=i?cl(i):"";if(r)switch(r){case uf:return up;case um:return uh;case ug:return uc;case uv:return ud;case uy:return uu}return t});var ub=ux,uw=Object.prototype.hasOwnProperty,uS=function(e){var t=e.length,i=new e.constructor(t);return t&&"string"==typeof e[0]&&uw.call(e,"index")&&(i.index=e.index,i.input=e.input),i},u_=hU.Uint8Array,uA=function(e){var t=new e.constructor(e.byteLength);return new u_(t).set(new u_(e)),t},uM=function(e,t){var i=t?uA(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.byteLength)},uC=/\w*$/,uE=function(e){var t=new e.constructor(e.source,uC.exec(e));return t.lastIndex=e.lastIndex,t},uT=hk?hk.prototype:void 0,uP=uT?uT.valueOf:void 0,uD=function(e,t){var i=t?uA(e.buffer):e.buffer;return new e.constructor(i,e.byteOffset,e.length)},uO=function(e,t,i){var r=e.constructor;switch(t){case"[object ArrayBuffer]":return uA(e);case"[object Boolean]":case"[object Date]":return new r(+e);case"[object DataView]":return uM(e,i);
3135case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return uD(e,i);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(e);case"[object RegExp]":return uE(e);case"[object Symbol]":return uP?Object(uP.call(e)):{}}},uI=c1&&c1.isMap,uR=uI?cK(uI):function(e){return hQ(e)&&"[object Map]"==ub(e)},uL=c1&&c1.isSet,uB=uL?cK(uL):function(e){return hQ(e)&&"[object Set]"==ub(e)},uz="[object Arguments]",uF="[object Function]",uN="[object Object]",uU={};uU[uz]=uU["[object Array]"]=uU["[object ArrayBuffer]"]=uU["[object DataView]"]=uU["[object Boolean]"]=uU["[object Date]"]=uU["[object Float32Array]"]=uU["[object Float64Array]"]=uU["[object Int8Array]"]=uU["[object Int16Array]"]=uU["[object Int32Array]"]=uU["[object Map]"]=uU["[object Number]"]=uU[uN]=uU["[object RegExp]"]=uU["[object Set]"]=uU["[object String]"]=uU["[object Symbol]"]=uU["[object Uint8Array]"]=uU["[object Uint8ClampedArray]"]=uU["[object Uint16Array]"]=uU["[object Uint32Array]"]=!0,uU["[object Error]"]=uU[uF]=uU["[object WeakMap]"]=!1;var uk=function e(t,i,r,a,o,l){var h,c=1&i,d=2&i,p=4&i;if(r&&(h=o?r(t,a,o,l):r(t)),void 0!==h)return h;if(!h6(t))return t;var f=hJ(t);if(f){if(h=uS(t),!c)return cb(t,h)}else{var m,g,v,y,x,b=ub(t),w=b==uF||"[object GeneratorFunction]"==b;if(cQ(t))return d6(t,c);if(b==uN||b==uz||w&&!o){if(h=d||w||"function"!=typeof(m=t).constructor||cU(m)?{}:cy(dB(m)),!c)return d?(v=(g=h)&&cL(t,ds(t),g),cL(t,ui(t),v)):(x=(y=h)&&cL(t,de(t),y),cL(t,ut(t),x))}else{if(!uU[b])return o?t:{};h=uO(t,b,c)}}l||(l=new d1);var S=l.get(t);if(S)return S;l.set(t,h),uB(t)?t.forEach(function(a){h.add(e(a,i,r,a,t,l))}):uR(t)&&t.forEach(function(a,o){h.set(o,e(a,i,r,o,t,l))});var _=p?d?ua:us:d?ds:de,A=f?void 0:_(t);return cA(A||t,function(a,o){A&&(a=t[o=a]),cR(h,o,e(a,i,r,o,t,l))}),h},uV=function(e){return uk(e,5)};function uj(e){var t=-1,i=null==e?0:e.length;for(this.__data__=new dx;++t<i;)this.add(e[t])}uj.prototype.add=uj.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},uj.prototype.has=function(e){return this.__data__.has(e)};var uG=function(e,t){for(var i=-1,r=null==e?0:e.length;++i<r;)if(t(e[i],i,e))return!0;return!1},uW=function(e,t,i,r,a,o){var l=1&i,h=e.length,c=t.length;if(h!=c&&!(l&&c>h))return!1;var d=o.get(e),p=o.get(t);if(d&&p)return d==t&&p==e;var f=-1,m=!0,g=2&i?new uj:void 0;for(o.set(e,t),o.set(t,e);++f<h;){var v=e[f],y=t[f];if(r)var x=l?r(y,v,f,t,e,o):r(v,y,f,e,t,o);if(void 0!==x){if(x)continue;m=!1;break}if(g){if(!uG(t,function(e,t){if(!g.has(t)&&(v===e||a(v,e,i,r,o)))return g.push(t)})){m=!1;break}}else if(!(v===y||a(v,y,i,r,o))){m=!1;break}}return o.delete(e),o.delete(t),m},uH=function(e){var t=-1,i=Array(e.size);return e.forEach(function(e,r){i[++t]=[r,e]}),i},uq=function(e){var t=-1,i=Array(e.size);return e.forEach(function(e){i[++t]=e}),i},uX=hk?hk.prototype:void 0,uY=uX?uX.valueOf:void 0,uQ=function(e,t,i,r,a,o,l){switch(i){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)break;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!o(new u_(e),new u_(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return cO(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var h=uH;case"[object Set]":var c=1&r;if(h||(h=uq),e.size!=t.size&&!c)break;var d=l.get(e);if(d)return d==t;r|=2,l.set(e,t);var p=uW(h(e),h(t),r,a,o,l);return l.delete(e),p;case"[object Symbol]":if(uY)return uY.call(e)==uY.call(t)}return!1},uZ=Object.prototype.hasOwnProperty,uK=function(e,t,i,r,a,o){var l=1&i,h=us(e),c=h.length;if(c!=us(t).length&&!l)return!1;for(var d=c;d--;){var p=h[d];if(!(l?p in t:uZ.call(t,p)))return!1}var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var g=!0;o.set(e,t),o.set(t,e);for(var v=l;++d<c;){var y=e[p=h[d]],x=t[p];if(r)var b=l?r(x,y,p,t,e,o):r(y,x,p,e,t,o);if(!(void 0===b?y===x||a(y,x,i,r,o):b)){g=!1;break}v||(v="constructor"==p)}if(g&&!v){var w=e.constructor,S=t.constructor;w!=S&&"constructor"in e&&"constructor"in t&&!("function"==typeof w&&w instanceof w&&"function"==typeof S&&S instanceof S)&&(g=!1)}return o.delete(e),o.delete(t),g},uJ="[object Arguments]",u$="[object Array]",u0="[object Object]",u1=Object.prototype.hasOwnProperty,u2=function(e,t,i,r,a,o){var l=hJ(e),h=hJ(t),c=l?u$:ub(e),d=h?u$:ub(t);c=c==uJ?u0:c,d=d==uJ?u0:d;var p=c==u0,f=d==u0,m=c==d;if(m&&cQ(e)){if(!cQ(t))return!1;l=!0,p=!1}if(m&&!p)return o||(o=new d1),l||c3(e)?uW(e,t,i,r,a,o):uQ(e,t,c,i,r,a,o);if(!(1&i)){var g=p&&u1.call(e,"__wrapped__"),v=f&&u1.call(t,"__wrapped__");
3135if(g||v){var y=g?e.value():e,x=v?t.value():t;return o||(o=new d1),a(y,x,i,r,o)}}return!!m&&(o||(o=new d1),uK(e,t,i,r,a,o))},u3=function(e,t){return null!=e&&t in Object(e)},u4=function(e,t,i){t=dM(t,e);for(var r=-1,a=t.length,o=!1;++r<a;){var l=dE(t[r]);if(!(o=null!=e&&i(e,l)))break;e=e[l]}return o||++r!=a?o:!!(a=null==e?0:e.length)&&cz(a)&&cP(l,a)&&(hJ(e)||cH(e))},u5=function(){return hU.Date.now()},u6=Math.max,u8=Math.min,u9=function(e,t,i){var r,a,o,l,h,c,d=0,p=!1,f=!1,m=!0;if("function"!=typeof e)throw TypeError("Expected a function");function g(t){var i=r,o=a;return r=a=void 0,d=t,l=e.apply(o,i)}function v(e){var i=e-c,r=e-d;return void 0===c||i>=t||i<0||f&&r>=o}function y(){var e,i,r,a=u5();if(v(a))return x(a);h=setTimeout(y,(e=a-c,i=a-d,r=t-e,f?u8(r,o-i):r))}function x(e){return h=void 0,m&&r?g(e):(r=a=void 0,l)}function b(){var e,i=u5(),o=v(i);if(r=arguments,a=this,c=i,o){if(void 0===h)return d=e=c,h=setTimeout(y,t),p?g(e):l;if(f)return clearTimeout(h),h=setTimeout(y,t),g(c)}return void 0===h&&(h=setTimeout(y,t)),l}return t=ci(t)||0,h6(i)&&(p=!!i.leading,o=(f="maxWait"in i)?u6(ci(i.maxWait)||0,t):o,m="trailing"in i?!!i.trailing:m),b.cancel=function(){void 0!==h&&clearTimeout(h),d=0,r=c=a=h=void 0},b.flush=function(){return void 0===h?l:x(u5())},b},u7=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}
3135,pe=function(e,t){return e>t},pt=function(e,t){return function e(t,i,r,a,o){return t===i||(null!=t&&null!=i&&(hQ(t)||hQ(i))?u2(t,i,r,a,e,o):t!=t&&i!=i)}(e,t)},pi=function(e,t,i){for(var r=-1,a=e.length;++r<a;){var o=e[r],l=t(o);if(null!=l&&(void 0===h?l==l&&!hZ(l):i(l,h)))var h=l,c=o}return c},pr=function(e,t){var i,r;return t=dM(t,e),i=e,null==(e=(r=t).length<2?i:dT(i,dV(r,0,-1)))||delete e[dE(u7(t))]},ps=function(e){return dk(e)?void 0:e},pa=dL(function(e,t){var i={};if(null==e)return i;var r=!1;t=hK(t,function(t){return t=dM(t,e),r||(r=t.length>1),t}),cL(e,ua(e),i),r&&(i=uk(i,7,ps));for(var a=t.length;a--;)pr(i,t[a]);return i}),pn=function(e,t,i,r){if(!h6(e))return e;t=dM(t,e);for(var a=-1,o=t.length,l=o-1,h=e;null!=h&&++a<o;){var c=dE(t[a]),d=i;if("__proto__"===c||"constructor"===c||"prototype"===c)break;if(a!=l){var p=h[c];void 0===(d=r?r(p,c,h):void 0)&&(d=h6(p)?p:cP(t[a+1])?[]:{})}cR(h,c,d),h=h[c]}return e},po=function(e,t,i){for(var r=-1,a=t.length,o={};++r<a;){var l=t[r],h=dT(e,l);i(h,l)&&pn(o,dM(l,e),h)}return o},pl=dL(function(e,t){return null==e?{}:po(e,t,function(t,i){return null!=e&&u4(e,i,u3)})}),ph=function(e,t,i){var r=!0,a=!0;if("function"!=typeof e)throw TypeError("Expected a function");return h6(i)&&(r="leading"in i?!!i.leading:r,a="trailing"in i?!!i.trailing:a),u9(e,t,{leading:r,maxWait:t,trailing:a})},pc=function(e,t){for(var i,r=e.length;r--&&((i=e[r])==i?cE(t,i,0):cM(t,cC,0))>-1;);return r},pd=function(e,t,i){if((e=dA(e))&&(i||void 0===t))return e.slice(0,h4(e)+1);if(!e||!(t=h2(t)))return e;var r=d0(e),a=pc(r,d0(t))+1;return dj(r,0,a).join("")},pu=window.navigator.userAgent.toLowerCase().includes(" electron/"),pp=(pu&&((r=new URLSearchParams(window.location.search).get("desktop-app-version"))?window.localStorage.setItem("desktop-app-version",r):window.localStorage.getItem("desktop-app-version")),window.navigator.platform.toUpperCase().includes("MAC")),pf=/iPad|iPhone|iPod/.test(window.navigator.userAgent)||pp&&"ontouchend"in document,pm=window.navigator.userAgent.toLowerCase().indexOf("firefox")>-1,pg="ontouchstart"in window||navigator.maxTouchPoints>0,pv=(a=navigator.userAgent,o=navigator.vendor,/Safari/i.test(a)&&/Apple Computer/.test(o)),py=Number((l=navigator.userAgent.match(/Version\/(\d+\.\d)/))&&l[1]);function px(e){return pp?e.metaKey:e.ctrlKey}var pb=[],pw={},pS={},p_={};function pA(e){pb.includes(e)||pb.push(e)}function pM(e){delete pw[e.pointerId];for(let t=0;t<pb.length;t++)if(pb[t].pointerId===e.pointerId){pb.splice(t,1);break}}function pC(e){if("touch"!==e.pointerType)return;let t=pw[e.pointerId];void 0===t&&(t={x:0,y:0},pw[e.pointerId]=t),t.x=e.pageX,t.y=e.pageY}function pE(e){return pw[(e.pointerId===pb[0].pointerId?pb[1]:pb[0]).pointerId]}function pT(e){pS[e.key]=!0,p_[e.key]=void 0===p_[e.key]?1:p_[e.key]+1}function pP(e){if(pp&&pS.Meta)for(let e in pS)pS[e]=!1;else pS[e.key]=!1;p_={}}var pD,pO,pI,pR,pL,pB,pz,pF,pN,pU=new Promise(e=>{pz=e}),pk=new Promise(e=>{pN=e}),pV=class{modifyById(e,t){if(void 0===this[e])throw Error("not expected");{let i={...this,[e]:t};return Object.setPrototypeOf(i,pV.prototype),i}}add(e,t){return this.runOp({type:1,id:e,data:t})?.data??this}runOp(e){if(1===e.type){let t=this[e.id],i;i=void 0===t?{type:2,id:e.id}:{type:1,id:e.id,data:t};let{id:r,data:a}=e,o={...this,[r]:a};return Object.setPrototypeOf(o,pV.prototype),{data:o,actual:e,reverse:i}}if(2===e.type){let{id:t}=e,i=this[t];if(void 0===i)return null;{let r={...this};return Object.setPrototypeOf(r,pV.prototype),delete r[t],{data:r,actual:e,reverse:{type:1,id:t,data:i}}}}return null}};function pj(e){if(void 0!==e.deepFreeze)return void e.deepFreeze(e);for(let t of Object.getOwnPropertyNames(e)){let i=e[t];i&&"object"==typeof i&&pj(i)}return Object.freeze(e)}var pG=class extends Error{};function pW(e){let t={...e};return Object.setPrototypeOf(t,Object.getPrototypeOf(e)),t}function pH(e,t,i){if(void 0===e?void 0===t?(e=0,t=10):e=t-10:void 0===t&&(t=e+10),e>t){let i=e;e=t,t=i}let r=[],a=1/(i+1);for(let o=0;o<i;o++){let i=e+(t-e)*(o+.75+.5*Math.random())*a;r.push(i)}return r}function pq(e){return e instanceof Uint8Array||e instanceof Uint16Array||e instanceof Uint32Array||e instanceof Int8Array||e instanceof Int16Array||e instanceof Int32Array||e instanceof Float32Array||e instanceof Float64Array}var pX=class extends Array{constructor(...e){super(...e),Object.setPrototypeOf(this,pX.prototype)}deepFreeze(){let e=0;for(;e<this.length;)pj(this[e]),e++}fillCaches0(e,t){for(let i of(this.objCaches.set(e.id,e),this.parentCaches.set(e.id,t),e.children))this.fillCaches0(i,e.id)}fillCaches(){if(void 0===this.objCaches)for(let e of(this.objCaches=new Map,this.parentCaches=new Map,this))this.fillCaches0(e,null)}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(0!==e.length)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}nonExistOrDescendantOf(e,t){if(!this.has(e))return!0;for(;e;){let i=this.parent(e);
3135if(i===t)return!0;e=i}return!1}rootAcestor(e){for(;e;){let t=this.parent(e);if(t)e=t;else break}return e}isDescendantOf(e,t){for(;e;){let i=this.parent(e);if(i===t)return!0;e=i}return!1}data(e){return this.get(e)?.data}has(e){return void 0!==this.childrenOf(e)}get(e){return this.fillCaches(),this.objCaches.get(e)}childrenOf(e){return null===e?this:this.get(e)?.children}traverseFrom(e,t){if(null===e)this.traverse(t);else{let i=this.get(e);i&&function e(t,i){if(!0!==i(t.id,t.data))for(let r of t.children)e(r,i)}(i,t)}}traverse(e){!function e(t,i){for(let r of t)!0!==i(r.id,r.data)&&e(r.children,i)}(this,e)}totalSize(){return this.fillCaches(),this.objCaches.size}parent(e){return this.fillCaches(),this.parentCaches.get(e)}childrenArray(e){return null===e?this:this.get(e).children}modifyById(e,t){if(void 0===this.get(e))throw Error("not expected");{let i=this.parent(e),r=this.childrenArray(i),a=r.findIndex(t=>t.id===e);if(a<0)throw Error("not expected");let o=r[a];return(r=[...r])[a]={...o,data:t},this.modifyArrayBy(i,r)}}modifyArrayBy(e,t){let i=e,r=t;for(;null!==i;){let e=r,t=i;if(void 0===(i=this.parent(i)))throw Error();let a=(r=this.childrenArray(i)).findIndex(e=>e.id===t);if(a<0)throw Error();(r=[...r])[a]={...r[a],children:e}}Object.setPrototypeOf(r,pX.prototype);let a=r;return a.fillCaches(),a}runOp(e){switch(e.type){case 7:return this.addOp(e);case 8:return this.deleteOp(e);case 9:return this.moveOp(e)}return null}checkDuplicatedIdRec({id:e,children:t}){if(void 0!==this.get(e))return!0;for(let e of t)if(this.checkDuplicatedIdRec(e))return!0;return!1}addOp(e){let{parent:t,fi:i,id:r,data:a,children:o}=e;if(null!==t&&void 0===this.get(t)||this.checkDuplicatedIdRec(e))return null;{let l=this.childrenArray(t),h={fi:i,id:r,data:a,children:o};return(l=[...l,h]).sort((e,t)=>e.fi-t.fi),e.localIndex=l.indexOf(h),{data:this.modifyArrayBy(t,l),actual:e,reverse:{type:8,id:r}}}}deleteOp(e){let{id:t}=e;if(null===this.get(t))return null;{let i=this.parent(t);if(void 0===i)return null;let r=this.childrenArray(i),a=r.findIndex(e=>e.id===t);e.localIndex=a;let o=(r=[...r]).splice(a,1)[0];return{data:this.modifyArrayBy(i,r),actual:e,reverse:{type:7,...o,parent:i}}}}moveOp(e){let{parent:t,fi:i,id:r}=e;if(null!==t&&void 0===this.get(t))return this.deleteOp({type:8,id:r});if(null!==t){let e=t;for(;null!==e;){if(void 0===e)throw Error();if(e===r)throw new pG("cyclic tree");e=this.parent(e)}}let a=this.parent(r);if(void 0===a)return null;let o=a,l=this.childrenArray(a),h=l.findIndex(e=>e.id===r),c=(l=[...l]).splice(h,1)[0],d=this.modifyArrayBy(a,l);a=t,l=d.childrenArray(a);let p=c.fi;return(l=[...l,c={...c,fi:i}]).sort((e,t)=>e.fi-t.fi),e.localIndex=l.indexOf(c),{data:d=d.modifyArrayBy(a,l),actual:e,reverse:{type:9,parent:o,fi:p,id:r}}}previous(e,t){if(null===t){let t=this.childrenArray(e);return 0===t.length?null:t[t.length-1].id}let i=null;for(let r of this.childrenArray(e)){if(r.id===t)return i;i=r.id}return null}traverseSortNext(e){let t=this.parent(e);if(void 0!==t){let i=this.childrenArray(t),r=i.findIndex(t=>t.id===e)+1;if(r<i.length)return i[r].id;if(t)return this.traverseSortNext(t)}}sortNext(e){let t=this.childrenArray(e);return t.length>0?t[0].id:this.traverseSortNext(e)}traverseSortPrevious(e){let t=this.childrenArray(e);return t.length>0?this.traverseSortPrevious(t[t.length-1].id):e}sortPrevious(e){let t=this.parent(e);if(void 0!==t){let i=this.childrenArray(t),r=i.findIndex(t=>t.id===e)-1;return r>=0?this.traverseSortPrevious(i[r].id):t}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push({...i,...e})}for(let e of(t.sort((e,t)=>(function(e,t){let i=0;for(;i<e.length&&i<t.length;){if(e[i]<t[i])return -1;if(e[i]>t[i])return 1;i+=1}return i!==t.length?-1:+(i!==e.length)})(e.sortKey,t.sortKey)),t))delete e.sortKey;return t}getWithSortKey(e){var t=e;let i=[],r=this.get(t),a=r;if(void 0!==r){for(;t;)i.splice(0,0,r.fi),null!==(t=this.parent(t))&&(r=this.get(t));return{...a,sortKey:i}}}insertBeforeHelper(e,t,i){return this.insertAfterHelper(e,this.previous(e,t),i)}insertAfterHelper(e,t,i){let r=this.childrenArray(e);if(null===t){if(0===r.length)return pH(0,i,i);{let e=r[0].fi;return pH(e-i,e,i)}}{let a=this.get(t);if(void 0===a||this.parent(t)!==e)throw Error("illegal args");let o=r.find(e=>e.fi>a.fi);if(void 0!==o)return pH(a.fi,o.fi,i);{let e=r[r.length-1].fi;return pH(e,e+i,i)}}}};(pK||(pK={})).runOp=function(e,t){if(0!==t.type)return null;if(Array.isArray(e)){let i=t.props,r={},a=[...e],o=!1;if(i)for(let e of Object.keys(i)){let t=parseInt(e);if(isNaN(t))throw Error("wrong index");r[e]=a[t],a[t]=i[e],o=!0}
3135return o?{data:a,actual:t,reverse:{type:0,props:r}}:null}{let i=t.props,r={},a={...e},o=!1;if(i)for(let e of Object.keys(i)){r[e]=a[e];let t=i[e];void 0===t?delete a[e]:a[e]=t,o=!0}return o?{data:a,actual:t,reverse:{type:0,props:r}}:null}};var pY=class extends Array{constructor(...e){super(...e),Object.setPrototypeOf(this,pY.prototype)}deepFreeze(){let e=0;for(;e<this.length;)pj(this[e]),e++}fillCaches0(e){this.objCaches.set(e.id,e)}fillCaches(){if(void 0===this.objCaches)for(let e of(this.objCaches=new Map,Object.getOwnPropertyDescriptor(this,"objCaches").enumerable=!1,this))this.fillCaches0(e)}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(0!==e.length)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}data(e){return this.get(e)?.data}get(e){return this.fillCaches(),this.objCaches.get(e)}modifyById(e,t){if(void 0===this.get(e))throw Error("not expected");{let i=this,r=i.findIndex(t=>t.id===e);if(r<0)throw Error("not expected");let a=i[r];return(i=[...i])[r]={...a,data:t},this.modifyArrayBy(i)}}modifyArrayBy(e){return Object.setPrototypeOf(e,pY.prototype),"u">typeof process||e.fillCaches(),e}runOp(e){switch(e.type){case 4:return this.addOp(e);case 5:return this.deleteOp(e);case 6:return this.moveOp(e)}return null}addOp(e){let{fi:t,id:i,data:r}=e,a=this,o={fi:t,id:i,data:r};return(a=[...a,o]).sort((e,t)=>e.fi-t.fi),e.localIndex=a.indexOf(o),{data:this.modifyArrayBy(a),actual:e,reverse:{type:5,id:i}}}deleteOp(e){let{id:t}=e,i=this,r=i.findIndex(e=>e.id===t);if(-1===r)return null;e.localIndex=r;let a=(i=[...i]).splice(r,1)[0];return{data:this.modifyArrayBy(i),actual:e,reverse:{type:4,...a}}}moveOp(e){let{fi:t,id:i}=e,r=this,a=(r=[...r]).findIndex(e=>e.id===i);if(-1===a)return null;let o=r[a].fi,l={...r[a],fi:t};return r[a]=l,r.sort((e,t)=>e.fi-t.fi),e.localIndex=r.indexOf(l),{data:this.modifyArrayBy(r),actual:e,reverse:{type:6,fi:o,id:i}}}previous(e){if(null===e)return 0===this.length?null:this[this.length-1].id;let t=null;for(let i of this){if(i.id===e)return t;t=i.id}return null}insertBeforeHelper(e,t){return this.insertAfterHelper(this.previous(e),t)}insertAfterHelper(e,t){if(null===e){if(0===this.length)return pH(0,t,t);{let e=this[0].fi;return pH(e-t,e,t)}}{let i=this.get(e);if(void 0===i)throw Error("illegal args");let r=this.find(e=>e.fi>i.fi);if(void 0!==r)return pH(i.fi,r.fi,t);{let e=this[this.length-1].fi;return pH(e,e+t,t)}}}};function pQ(e){return e&&"object"==typeof e&&e instanceof p$}var pZ,pK,pJ,p$=class{unusedFunOverridesTable(e){}runOp(e){let t=[],i=this,r=0,a={};for(;r<e.path.length;){if(t.push(i),void 0!==(i=void 0===i?void 0:i[e.path[r]])&&!pQ(i))return null;r+=1}for(let[t,r]of(i=i?pW(i):new p$,Object.entries(e.props))){let e=i[t];a[t]=e,void 0===r?delete i[t]:i[t]=r}for(;r>0;){if(0===Object.keys(i).length){let a=t[r-1];a&&(i=pW(a),delete i[e.path[r-1]])}else{let a=t[r-1];if(a){let t=pW(a);t[e.path[r-1]]=i,i=t}else{let t=new p$;t[e.path[r-1]]=i,i=t}}r-=1}let o=Object.setPrototypeOf(i,p$.prototype),l={...e,props:a};return{data:o,actual:e,reverse:l}}};function p0(e,t){if(void 0===t)return;let i=!1,r=e.map(e=>{let r=e.id,a=p1(e.data,t[r]);if(i=i||void 0!==a,void 0===a&&(a=e.data),!e.children)return{...e,id:r,data:a};{let o=p0(e.children,t);return void 0!==o?i=!0:o=e.children,{...e,id:r,data:a,children:o}}});if(i)return r}function p1(e,t){if(!pQ(t))return t;if(e instanceof pX){let i=p0(e,t);return void 0!==i&&Object.setPrototypeOf(i,Object.getPrototypeOf(e)),i}if(e instanceof pY){if(void 0===t)return;let i=!1,r=e.map(e=>{let r=e.id,a=p1(e.data,t[r]);return i=i||void 0!==a,void 0===a&&(a=e.data),{...e,id:r,data:a}});return i?(Object.setPrototypeOf(r,Object.getPrototypeOf(e)),r):void 0}if(Array.isArray(e)){let i=!1,r=e.map((e,r)=>{let a=p1(e,t[r]);return i=i||void 0!==a,void 0===a&&(a=e),a});return i?(Object.setPrototypeOf(r,Object.getPrototypeOf(e)),r):void 0}if(e instanceof p$)return p2(e,t);if(e&&"object"==typeof e){let i={},r=!1;for(let[a,o]of Object.entries(e)){let e=p1(o,t[a]);r=r||void 0!==e,void 0===e&&(e=o),i[a]=e}return r?(Object.setPrototypeOf(i,Object.getPrototypeOf(e)),i):void 0}}function p2(e,t){if(void 0===e)return t;if(void 0===t)return e;if(!pQ(t))return t;if(!pQ(e))return pJ.apply(e,t);let i=new Set;for(let t of Object.keys(e))i.add(t);for(let e of Object.keys(t))i.add(e);let r=new p$;for(let a of i){let i=p2(void 0===e?void 0:e[a],void 0===t?void 0:t[a]);r[a]=i}return r}function p3(e,t){return null===e?null:(e.cur[e.len]=t,e.len+=1,e)}function p4(e){e&&(e.len-=1)}(fw=pJ||(pJ={})).apply=function(e,t){return p1(e,t)??e},fw.merge=function(e,t){return p2(e,t)},fw.filterOp=function(e,t){let i=0,r=t.path,a=e;for(;i<r.length&&void 0!==a;){if(void 0===(a=fM.zoomOnce(a,r[i])))return t;if(!pQ(a))return;i+=1}if(void 0===a)return t;if(pQ(a))if(0===t.type){let e={...t.props};for(let t of Object.keys(a))delete e[t];return{...t,props:e}}else{if(1!==t.type&&4!==t.type&&7!==t.type)return t;let e=p0([t],a);return e?e[0]:t}};(fS||(fS={})).replaceProps=function(e,t){let i=fM.zoom(t,e.path);if("object"!=typeof i)return{...e,props:{}};{let t={};for(let r of Object.keys(e.props))t[r]=i[r];return{...e,props:t}}},(e=>{function t(e,t){let i=t.path;for(var r=[];;){let a;if(e instanceof p$&&0===t.type&&null===(a=e.runOp({...t,path:i.slice(r.length)}))&&(a=void 0),void 0===a&&r.length===i.length&&(a=e instanceof pX||e instanceof pY||e instanceof pV?e.runOp(t):pK.runOp(e,t)),void 0!==a)if(null===a)return null;else{let e=a.data;for(let t=r.length-1;t>=0;t--){let a=i[t],o=r[t];if(o instanceof pX){if("number"==typeof a)throw Error("illegal arg");e=o.modifyById(a,e)}else if(o instanceof pY){if("number"==typeof a)throw Error("illegal arg");e=o.modifyById(a,e)}else if(o instanceof pV){if("number"==typeof a)throw Error("illegal arg");e=o.modifyById(a,e)}else if(o instanceof p$)e=Object.setPrototypeOf({...o,[a]:e},p$.prototype);else if("object"!=typeof o)return null;else if(Array.isArray(o)){if("string"==typeof a&&isNaN(a=parseInt(a)))throw Error("Invalid path");let t=e;(e=[...o])[a]=t}else e={...o,[a]:e}}return{data:e,actual:{...a.actual,path:i},reverse:{...a.reverse,path:i}}}let o=i[r.length],l;if(e instanceof pX){if("number"==typeof o)throw Error("");l=e.get(o)?.data}else if(e instanceof pY){if("number"==typeof o)throw Error("");l=e.get(o)?.data}else null!==e&&(l=e[o]);if(void 0===l)return null;r.push(e),e=l}}function i(e,t){for(let i=0;i<e.length&&i<t.length;i++)if(e[i]!==t[i])return!0;return!1}function r(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}e.drop=function(e,t){return{...e,path:e.path.slice(t)}},e.applySimple=function(e,i){return t(e,i)?.data??e},e.apply=t,e.pathDisjoint=i,e.pathEq=r,e.commutative=function(e,t){return i(e.path,t.path)},e.subsumed=function(e,t){return!!(0===e.type&&0===t.type&&r(e.path,t.path))&&Object.keys(e.props).every(e=>void 0!==t.props[e])}})(f_||(f_={}));var p5=fA||(fA={});function p6(e,t){var i=e;let r=[],a=[];for(let e of t)try{if(3===e.type||5===e.type&&"variables"===e.path[e.path.length-1]){let t,o,l;
3135if(3===e.type?(t=fM.zoom(i,[...e.path,e.id]),l=f_.apply(i,{...e,type:2})):(t=fM.zoom(i,[...e.path,e.id,"value"]),l=f_.apply(i,e)),null!==l){i=l.data;let[h,c]=function(e,t){let i={cur:[],result:[],len:0};return[e=function e(t,i,r){if(t instanceof pX){let a=function t(i,r,a){let o=!1,l=i.map(i=>{let l=i.id,h=r[l];if(void 0!==h&&"string"==typeof h&&(o=!0,l=h,null!==a))throw Error("not supported");let c=e(i.data,r,p3(a,l));p4(a),o=o||void 0!==c,void 0===c&&(c=i.data);let d=t(i.children,r,a);return void 0!==d?o=!0:d=i.children,{...i,id:l,data:c,children:d}});if(o)return l}(t,i,r);return void 0!==a&&Object.setPrototypeOf(a,Object.getPrototypeOf(t)),a}if(t instanceof pY){let a=!1,o=t.map(t=>{let o=t.id,l=i[o];if(void 0!==l&&"string"==typeof l&&(a=!0,o=l,null!==r))throw Error("not supported");let h=e(t.data,i,p3(r,o));return p4(r),a=a||void 0!==h,void 0===h&&(h=t.data),{...t,id:o,data:h}});return a?(Object.setPrototypeOf(o,Object.getPrototypeOf(t)),o):void 0}if(Array.isArray(t)){let a=!1,o=t.map((t,o)=>{let l=e(t,i,p3(r,o));return p4(r),a=a||void 0!==l,void 0===l&&(l=t),l});return a?(Object.setPrototypeOf(o,Object.getPrototypeOf(t)),o):void 0}if(t&&"object"==typeof t&&!pq(t)){let a={},o=!1;for(let[l,h]of Object.entries(t))if("name"!==l&&"variableId"!==l){let t=i[l];if("string"==typeof t){if(null!==r)throw Error("not supported");o=!0,l=t}let c=e(h,i,p3(r,l));p4(r),o=o||void 0!==c,void 0===c&&(c=h),a[l]=c}else a[l]=h;return o?(Object.setPrototypeOf(a,Object.getPrototypeOf(t)),a):void 0}{var a;if("string"!=typeof t)return;let e=i[t];return void 0!==e&&(null===(a=r)||a.result.push(a.cur.slice(0,a.len))),e}}(e,t,i)??e,i.result]}(i,{[e.id]:t});i=h;for(let l=0;l<c.length;l++){let h=c[l],d=h.pop();if("number"==typeof d){let r=[d];for(let e=l+1;e<c.length;e++){let t=c[e],i=t[t.length-1];if("number"==typeof i&&fM.equal(h,t.slice(0,t.length-1)))r.push(i),c.splice(e,1);else break}let a=fM.zoom(i,h);o=a.map((t,i)=>r.includes(i)?e.id:t),t=a,d=h.pop()}else{if("alphaOverride"===d||"alpha"===d){let e=t/=100,r=fM.zoom(i,h.slice(0,h.length-2)),a=r.layers.map(t=>t.id===h[h.length-1]?{...t,data:{...t.data,[d]:e}}:t);Object.setPrototypeOf(a,Object.getPrototypeOf(r.layers)),r.layers=a}o=e.id}r.push({type:0,path:h,props:{[d]:t}}),a.push({type:0,path:h,props:{[d]:o}})}a.push(l.reverse),r.push(l.actual)}}else{let t=f_.apply(i,e);null!==t&&(r.push(t.actual),i=t.data,a.push(t.reverse))}}catch(e){if(e instanceof pG)return null;throw e}return{data:i,actual:r,reverse:a.reverse()}}p5.empty=function(){return[]},p5.removePrefix=function(e,t){let i=[];for(let r of e){let[e,...a]=r.path;e===t&&i.push({...r,path:a})}return i},p5.addPrefix=function(e,t){return e.map(e=>({...e,path:[t,...e.path]}))},p5.concat=function(e,t){return[...e,...t]},p5.compress=function(e,t){return[...e.filter(e=>!t.some(t=>f_.subsumed(e,t))),...t]},p5.commutative=function(e,t){return e.every(e=>t.every(t=>f_.commutative(e,t)))},p5.applyAll=function(e,t){for(let i of t){let t=p6(e,i);null!==t&&(e=t.data)}return e},p5.apply=p6;var p8=Symbol(),p9=Symbol(),p7=Symbol(),fe=class{reportOp(e,t,i=[]){let r=this;if(null!==t){for(r._current=t.data;!(r instanceof fh);){let e=r._path,t=r._current;if(""!==e&&i.splice(0,0,e),null===(r=r._parent))return;r.update(e,t)}r.push(i,e,t.actual,t.reverse)}}deleteChildren(e){if(this._children){let t=this._children[e];if(t){let i=t[p7];i&&i(),delete this._children[e]}}}},ft=class extends fe{constructor(e,t,i){super(),this._parent=e,this._path=t,this._current=i}update(e,t){if(Array.isArray(this._current)){if("string"==typeof e&&isNaN(e=parseInt(e)))throw Error("Invalid path");this._current=[...this._current],this._current[e]=t}else if(this._current instanceof p$){let i={...this._current,[e]:t};this._current=Object.setPrototypeOf(i,p$.prototype)}else this._current={...this._current,[e]:t}}runOp(e){this.reportOp(e,pK.runOp(this._current,e),e.path)}},fi=class extends fe{constructor(e,t,i){super(),this._parent=e,this._path=t,this._current=i}update(e,t){this._current={...this._current,[e]:t},Object.setPrototypeOf(this._current,pV.prototype)}runOp(e){this.reportOp(e,this._current.runOp(e))}},fr={get(e,t){if(t===p7)return()=>{e._parent=null};if(t===p8)return e._current;if(t===p9)return e;let{_current:i,_children:r}=e;if("push"===t&&Array.isArray(i))throw Error("not supported to expand array");let a=void 0===r?void 0:r[t];if(void 0!==a)return a;let o=i[t],l=fc(e,t,o);return l!==o?(void 0===r&&(e._children=r={}),r[t]=l,l):o},has:(e,t)=>t in e._current,ownKeys:e=>Reflect.ownKeys(e._current),defineProperty(){throw Error("not supported")},getPrototypeOf:e=>Object.getPrototypeOf(e._current),setPrototypeOf(){throw Error("not supported")},getOwnPropertyDescriptor(e,t){let i=e._current,r=Reflect.getOwnPropertyDescriptor(i,t);return r&&{writable:!0,configurable:!0,enumerable:r.enumerable,value:i[t]}}},fs={...fr,set(e,t,i){let r={type:0,props:{[t]:fp(i)??i}};return e.deleteChildren(t),e.runOp(r),!0},deleteProperty:(e,t)=>(e.deleteChildren(t),e.runOp({type:0,props:{[t]:void 0}}),!0)},fa={...fr,set(e,t,i){return void 0===i?this.deleteProperty(e,t):(e.deleteChildren(t),e.runOp({type:1,id:t,data:i})),!0},deleteProperty:(e,t)=>(e.runOp({type:2,id:t}),!0)},fn=class extends fe{constructor(e,t,i){super(),this._children={},this._parent=e,this._path=t,this._current=i,this[p7]=()=>{this._parent=null}}unproxy(){return this._current}update(e,t){this._current=this._current.modifyById(e,t)}runOp(e){this.reportOp(e,this._current.runOp(e))}randomId(){return this._current.randomId()}isDescendantOf(e,t){return this._current.isDescendantOf(e,t)}
3135childrenOf(e){return this._current.childrenOf(e)}traverse(e){return this._current.traverse(e)}get(e){return this._current.get(e)}parent(e){return this._current.parent(e)}traverse(e){this._current.traverse((t,i)=>{e(t,this.data(t))})}data(e){let{_current:t,_children:i}=this,r=void 0===i?void 0:i[e];if(void 0!==r)return r;let a=t.get(e)?.data,o=fc(this,e,a);return o!==a?(void 0===i&&(i={},this._children=i),i[e]=o,o):a}add(e,t,i,r,a){this.runOp({type:7,parent:e,fi:t,id:i,data:r,children:a})}move(e,t,i){this.runOp({type:9,parent:e,fi:t,id:i})}insertAfter(e,t,i){let r=this._current.insertAfterHelper(e,t,i.length);for(let t=0;t<i.length;t++){let a=i[t];this.add(e,r[t],a.id,a.data,a.children)}}insertBefore(e,t,i){let r=this._current.insertBeforeHelper(e,t,i.length);for(let t=0;t<i.length;t++){let a=i[t];this.add(e,r[t],a.id,a.data,a.children)}}moveAfter(e,t,i){let r=this._current.insertAfterHelper(e,t,i.length);for(let t=0;t<i.length;t++){let a=i[t];this.move(e,r[t],a)}}moveBefore(e,t,i){let r=this._current.insertBeforeHelper(e,t,i.length);for(let t=0;t<i.length;t++){let a=i[t];this.move(e,r[t],a)}}delete(e){this.deleteChildren(e),this.runOp({type:8,id:e})}sortNext(e){return this._current.sortNext(e)}sortPrevious(e){return this._current.sortPrevious(e)}getAllSorted(e){return this._current.getAllSorted(e)}},fo=class extends fe{constructor(e,t,i){super(),this._children={},this._parent=e,this._path=t,this._current=i,this[p7]=()=>{this._parent=null}}unproxy(){return this._current}get length(){return this._current.length}forEach(e){let t=this.length;for(let i=0;i<t;i++){let t=this._current[i].id,r=this._current[i].fi;e(this.data(this._current[i].id),t,r)}}find(e){let t=this.length;for(let i=0;i<t;i++){let t=this._current[i].id;if(e(this.data(t),t))return this.get(t)}}update(e,t){this._current=this._current.modifyById(e,t)}randomId(){return this._current.randomId()}get(e){return{...this._current.get(e),data:this.data(e)}}data(e){let{_current:t,_children:i}=this,r=void 0===i?void 0:i[e];if(void 0!==r)return r;let a=t.get(e)?.data,o=fc(this,e,a);return o!==a?(void 0===i&&(i={},this._children=i),i[e]=o,o):a}runOp(e){this.reportOp(e,this._current.runOp(e))}add(e,t,i){this.runOp({type:4,fi:e,id:t,data:i})}move(e,t){this.runOp({type:6,fi:e,id:t})}insertAfter(e,t){let i=this._current.insertAfterHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.add(i[e],r.id,r.data)}}insertBefore(e,t){let i=this._current.insertBeforeHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.add(i[e],r.id,r.data)}}moveAfter(e,t){let i=this._current.insertAfterHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.move(i[e],r)}}moveBefore(e,t){let i=this._current.insertBeforeHelper(e,t.length);for(let e=0;e<t.length;e++){let r=t[e];this.move(i[e],r)}}delete(e){this.deleteChildren(e),this.runOp({type:5,id:e})}};function fl(e,t,i){if(e.length>0){let r=e[e.length-1];if(0===r.type&&0===t.type&&fM.equal(r.path,i))return void Object.assign(r.props,t.props)}e.push({...t,path:i})}var fh=class extends fe{constructor(e){super(),this.ts=[],this.actual=[],this.reverse=[],this._current=e}update(e,t){if(""!==e)throw Error("");this._current=t}push(e,t,i,r){fl(this.ts,t,e),fl(this.actual,i,e),fl(this.reverse,r,e)}result(){return{data:this._current,ts:this.ts,actual:this.actual,reverse:this.reverse.reverse()}}};function fc(e,t,i){return i instanceof pX?new fn(e,t,i):i instanceof pY?new fo(e,t,i):i instanceof pV?new Proxy(new fi(e,t,i),fa):null!==i&&"object"==typeof i?pq(i)?i:new Proxy(new ft(e,t,i),fs):i}function fd(e){let t=new fh(e);return[fc(t,"",e),t]}function fu(e,t){let[i,r]=fd(e);return t(i),r.result()}function fp(e){return e instanceof fn||e instanceof fo?e._current:null!==e&&"object"==typeof e?e[p8]:e}var ff=fM||(fM={});function fm(e,t){return(e instanceof pX||e instanceof fn)&&"string"==typeof t||(e instanceof pY||e instanceof fo)&&"string"==typeof t?e.data(t):"number"==typeof t&&Array.isArray(e)||"string"==typeof t&&"object"==typeof e&&null!==e?e[t]:void 0}function fg(e,t,i=0){for(;i<t.length&&void 0!==e;)e=fm(e,t[i]),i+=1;return e}function fv(e,t){let i=[];if(!(t.length<=e.length))return null;for(var r=0;r<t.length;){if("*"===t[r])i.push(e[r]);else if(e[r]!==t[r])return null;r+=1}return i}ff.equal=function(e,t){if(t.length!==e.length)return!1;for(var i=0;i<e.length;){if(e[i]!==t[i])return!1;i+=1}return!0},ff.removeOverridden=function(e,t,i){let r=fg(i,e);if(void 0===r||"object"!=typeof r||null===r)return t;{let e={...t};return Object.keys(r).forEach(t=>{delete e[t]}),e}},ff.zoomOnce=fm,ff.zoom=fg;var fy=class{},fx=class extends fy{constructor(e){super(),this.id=e}},fb=class extends fy{constructor(e){super(),this.data=e}};try{fC=new TextDecoder}catch{}var fw,fS,f_,fA,fM,fC,fE,fT,fP,fD,fO,fI,fR,fL=0,fB=[],fz=fB,fF=0,fN={},fU=0,fk=0,fV=[],fj={useRecords:!1,mapsAsObjects:!0},fG=class{},fW=new fG;fW.name="MessagePack 0xC1";var fH=!1,fq=2;try{Function("")}catch{fq=1/0}var fX=class{constructor(e){e&&(!1===e.useRecords&&void 0===e.mapsAsObjects&&(e.mapsAsObjects=!0),e.structures?e.structures.sharedLength=e.structures.length:e.getStructures&&((e.structures=[]).uninitialized=!0,e.structures.sharedLength=0)),Object.assign(this,e)}unpack(e,t){if(fE)return ml(()=>(mh(),this?this.unpack(e,t):fX.prototype.unpack.call(fj,e,t)));fT=t>-1?t:e.length,fL=0,fF=0,fk=0,fD=null,fz=fB,fO=null,fE=e;try{fR=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))}catch(t){throw fE=null,e instanceof Uint8Array?t:Error("Source must be a Uint8Array or Buffer but was a "+(e&&"object"==typeof e?e.constructor.name:typeof e))}if(this instanceof fX){if(fN=this,this.structures)return fP=this.structures,fY();(!fP||fP.length>0)&&(fP=[])}else fN=fj,(!fP||fP.length>0)&&(fP=[]);return fY()}unpackMultiple(e,t){let i,r=0;try{fH=!0;let a=e.length,o=this?this.unpack(e,a):md.unpack(e,a);if(t){for(t(o);fL<a;)if(r=fL,!1===t(fY()))return}else{for(i=[o];fL<a;)r=fL,i.push(fY());return i}}catch(e){throw e.lastPosition=r,e.values=i,e}finally{fH=!1,mh()}}_mergeStructures(e,t){e=e||[];for(let t=0,i=e.length;t<i;t++){let i=e[t];i&&(i.isShared=!0,t>=32&&(i.highByte=t-32>>5))}for(let i in e.sharedLength=e.length,t||[])if(i>=0){let r=e[i],a=t[i];a&&(r&&((e.restoreStructures||(e.restoreStructures=[]))[i]=r),e[i]=a)}return this.structures=e}decode(e,t){return this.unpack(e,t)}};function fY(){try{if(!fN.trusted&&!fH){let e=fP.sharedLength||0;e<fP.length&&(fP.length=e)}let e=fZ();if(fL==fT)fP.restoreStructures&&fQ(),fP=null,fE=null,fI&&(fI=null);else if(fL>fT){let e=Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}else if(!fH)throw Error("Data read, but end of buffer not reached");return e}catch(e){throw fP.restoreStructures&&fQ(),mh(),(e instanceof RangeError||e.message.startsWith("Unexpected end of buffer"))&&(e.incomplete=!0),e}}function fQ(){for(let e in fP.restoreStructures)fP[e]=fP.restoreStructures[e];fP.restoreStructures=null}function fZ(){let e=fE[fL++];if(e<160)if(e<128){if(e<64)return e;{let t=fP[63&e]||fN.getStructures&&f0()[63&e];return t?(t.read||(t.read=fJ(t,63&e)),t.read()):e}}else if(e<144)if(e-=128,fN.mapsAsObjects){let t={};for(let i=0;i<e;i++)t[ms()]=fZ();return t}else{let t=new Map;for(let i=0;i<e;i++)t.set(fZ(),fZ());return t}else{let t=Array(e-=144);for(let i=0;i<e;i++)t[i]=fZ();return t}if(e<192){let t=e-160;if(fk>=fL)return fD.slice(fL-fU,(fL+=t)-fU);if(0==fk&&fT<140){let e=t<16?me(t):f7(t);if(null!=e)return e}return f1(t)}{let t;switch(e){case 192:return null;case 193:return fO?(t=fZ())>0?fO[1].slice(fO.position1,fO.position1+=t):fO[0].slice(fO.position0,fO.position0-=t):fW;case 194:return!1;case 195:return!0;case 196:return mt(fE[fL++]);case 197:return t=fR.getUint16(fL),fL+=2,mt(t);case 198:return t=fR.getUint32(fL),fL+=4,mt(t);case 199:return mi(fE[fL++]);case 200:return t=fR.getUint16(fL),fL+=2,mi(t);case 201:return t=fR.getUint32(fL),fL+=4,mi(t);case 202:if(t=fR.getFloat32(fL),fN.useFloat32>2){let e=mc[(127&fE[fL])<<1|fE[fL+1]>>7];return fL+=4,(e*t+(t>0?.5:-.5)|0)/e}return fL+=4,t;case 203:return t=fR.getFloat64(fL),fL+=8,t;case 204:return fE[fL++];case 205:return t=fR.getUint16(fL),fL+=2,t;case 206:return t=fR.getUint32(fL),fL+=4,t;case 207:return t=fN.int64AsNumber?0x100000000*fR.getUint32(fL)+fR.getUint32(fL+4):fR.getBigUint64(fL),fL+=8,t;case 208:return fR.getInt8(fL++);case 209:return t=fR.getInt16(fL),fL+=2,t;case 210:return t=fR.getInt32(fL),fL+=4,t;case 211:return t=fN.int64AsNumber?0x100000000*fR.getInt32(fL)+fR.getUint32(fL+4):fR.getBigInt64(fL),fL+=8,t;case 212:if(114==(t=fE[fL++]))return ma(63&fE[fL++]);{let e=fV[t];if(e)return e.read?(fL++,e.read(fZ())):e.noBuffer?(fL++,e()):e(fE.subarray(fL,++fL)
3135);throw Error("Unknown extension "+t)}case 213:return 114==(t=fE[fL])?(fL++,ma(63&fE[fL++],fE[fL++])):mi(2);case 214:return mi(4);case 215:return mi(8);case 216:return mi(16);case 217:return t=fE[fL++],fk>=fL?fD.slice(fL-fU,(fL+=t)-fU):f2(t);case 218:return t=fR.getUint16(fL),fL+=2,fk>=fL?fD.slice(fL-fU,(fL+=t)-fU):f3(t);case 219:return t=fR.getUint32(fL),fL+=4,fk>=fL?fD.slice(fL-fU,(fL+=t)-fU):f4(t);case 220:return t=fR.getUint16(fL),fL+=2,f6(t);case 221:return t=fR.getUint32(fL),fL+=4,f6(t);case 222:return t=fR.getUint16(fL),fL+=2,f8(t);case 223:return t=fR.getUint32(fL),fL+=4,f8(t);default:if(e>=224)return e-256;if(void 0===e){let e=Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}throw Error("Unknown MessagePack token "+e)}}}var fK=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function fJ(e,t){function i(){if(i.count++>fq){let i=e.read=Function("r","return function(){return {"+e.map(e=>fK.test(e)?e+":r()":"["+JSON.stringify(e)+"]:r()").join(",")+"}}")(fZ);return 0===e.highByte&&(e.read=f$(t,e.read)),i()}let r={};for(let t=0,i=e.length;t<i;t++)r[e[t]]=fZ();return r}return i.count=0,0===e.highByte?f$(t,i):i}var f$=(e,t)=>function(){let i=fE[fL++];if(0===i)return t();let r=e<32?-(e+(i<<5)):e+(i<<5),a=fP[r]||f0()[r];if(!a)throw Error("Record id is not defined for "+r);return a.read||(a.read=fJ(a,e)),a.read()};function f0(){let e=ml(()=>(fE=null,fN.getStructures()));return fP=fN._mergeStructures(e,fP)}var f1=f5,f2=f5,f3=f5,f4=f5;function f5(e){let t;if(e<16&&(t=me(e)))return t;if(e>64&&fC)return fC.decode(fE.subarray(fL,fL+=e));let i=fL+e,r=[];for(t="";fL<i;){let e=fE[fL++];if((128&e)==0)r.push(e);else if((224&e)==192){let t=63&fE[fL++];r.push((31&e)<<6|t)}else if((240&e)==224){let t=63&fE[fL++],i=63&fE[fL++];r.push((31&e)<<12|t<<6|i)}else if((248&e)==240){let t=(7&e)<<18|(63&fE[fL++])<<12|(63&fE[fL++])<<6|63&fE[fL++];t>65535&&(t-=65536,r.push(t>>>10&1023|55296),t=56320|1023&t),r.push(t)}else r.push(e);r.length>=4096&&(t+=f9.apply(String,r),r.length=0)}return r.length>0&&(t+=f9.apply(String,r)),t}function f6(e){let t=Array(e);for(let i=0;i<e;i++)t[i]=fZ();return t}function f8(e){if(fN.mapsAsObjects){let t={};for(let i=0;i<e;i++)t[ms()]=fZ();return t}{let t=new Map;for(let i=0;i<e;i++)t.set(fZ(),fZ());return t}}var f9=String.fromCharCode;function f7(e){let t=fL,i=Array(e);for(let r=0;r<e;r++){let e=fE[fL++];if((128&e)>0){fL=t;return}i[r]=e}return f9.apply(String,i)}function me(e){if(e<4)if(e<2){if(0===e)return"";{let e=fE[fL++];if((128&e)>1){fL-=1;return}return f9(e)}}else{let t=fE[fL++],i=fE[fL++];if((128&t)>0||(128&i)>0){fL-=2;return}if(e<3)return f9(t,i);let r=fE[fL++];if((128&r)>0){fL-=3;return}return f9(t,i,r)}{let t=fE[fL++],i=fE[fL++],r=fE[fL++],a=fE[fL++];if((128&t)>0||(128&i)>0||(128&r)>0||(128&a)>0){fL-=4;return}if(e<6){if(4===e)return f9(t,i,r,a);{let e=fE[fL++];if((128&e)>0){fL-=5;return}return f9(t,i,r,a,e)}}if(e<8){let o=fE[fL++],l=fE[fL++];if((128&o)>0||(128&l)>0){fL-=6;return}if(e<7)return f9(t,i,r,a,o,l);let h=fE[fL++];if((128&h)>0){fL-=7;return}return f9(t,i,r,a,o,l,h)}{let o=fE[fL++],l=fE[fL++],h=fE[fL++],c=fE[fL++];if((128&o)>0||(128&l)>0||(128&h)>0||(128&c)>0){fL-=8;return}if(e<10){if(8===e)return f9(t,i,r,a,o,l,h,c);{let e=fE[fL++];if((128&e)>0){fL-=9;return}return f9(t,i,r,a,o,l,h,c,e)}}if(e<12){let d=fE[fL++],p=fE[fL++];if((128&d)>0||(128&p)>0){fL-=10;return}if(e<11)return f9(t,i,r,a,o,l,h,c,d,p);let f=fE[fL++];if((128&f)>0){fL-=11;return}return f9(t,i,r,a,o,l,h,c,d,p,f)}{let d=fE[fL++],p=fE[fL++],f=fE[fL++],m=fE[fL++];if((128&d)>0||(128&p)>0||(128&f)>0||(128&m)>0){fL-=12;return}if(e<14){if(12===e)return f9(t,i,r,a,o,l,h,c,d,p,f,m);{let e=fE[fL++];if((128&e)>0){fL-=13;return}return f9(t,i,r,a,o,l,h,c,d,p,f,m,e)}}{let g=fE[fL++],v=fE[fL++];if((128&g)>0||(128&v)>0){fL-=14;return}if(e<15)return f9(t,i,r,a,o,l,h,c,d,p,f,m,g,v);let y=fE[fL++];if((128&y)>0){fL-=15;return}return f9(t,i,r,a,o,l,h,c,d,p,f,m,g,v,y)}}}}}function mt(e){return fN.copyBuffers?Uint8Array.prototype.slice.call(fE,fL,fL+=e):fE.subarray(fL,fL+=e)}function mi(e){let t=fE[fL++];if(fV[t])return fV[t](fE.subarray(fL,fL+=e));throw Error("Unknown extension type "+t)}var mr=Array(4096);function ms(){let e=fE[fL++];if(!(e>=160)||!(e<192))return fL--,fZ();if(e-=160,fk>=fL)return fD.slice(fL-fU,(fL+=e)-fU);if(!(0==fk&&fT<180))return f1(e);let t=(e<<5^(e>1?fR.getUint16(fL):e>0?fE[fL]:0))&4095,i=mr[t],r=fL,a=fL+e-3,o,l=0;if(i&&i.bytes==e){for(;r<a;){if((o=fR.getUint32(r))!=i[l++]){r=0x70000000;break}r+=4}for(a+=3;r<a;)if((o=fE[r++])!=i[l++]){r=0x70000000;break}
3135if(r===a)return fL=r,i.string;a-=3,r=fL}for(i=[],mr[t]=i,i.bytes=e;r<a;)o=fR.getUint32(r),i.push(o),r+=4;for(a+=3;r<a;)o=fE[r++],i.push(o);let h=e<16?me(e):f7(e);return null!=h?i.string=h:i.string=f1(e)}var ma=(e,t)=>{var i=fZ();let r=e;void 0!==t&&(e=e<32?-((t<<5)+e):(t<<5)+e,i.highByte=t);let a=fP[e];return a&&a.isShared&&((fP.restoreStructures||(fP.restoreStructures=[]))[e]=a),fP[e]=i,i.read=fJ(i,r),i.read()},mn="object"==typeof self?self:i.g;fV[0]=()=>{},fV[0].noBuffer=!0,fV[101]=()=>{let e=fZ();return(mn[e[0]]||Error)(e[1])},fV[105]=e=>{let t=fR.getUint32(fL-4);fI||(fI=new Map);let i=fE[fL],r,a={target:r=i>=144&&i<160||220==i||221==i?[]:{}};fI.set(t,a);let o=fZ();return a.used?Object.assign(r,o):(a.target=o,o)},fV[112]=e=>{let t=fR.getUint32(fL-4),i=fI.get(t);return i.used=!0,i.target},fV[115]=()=>new Set(fZ());var mo=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map(e=>e+"Array");function ml(e){let t=fT,i=fL,r=fF,a=fU,o=fk,l=fD,h=fz,c=fI,d=fO,p=new Uint8Array(fE.slice(0,fT)),f=fP,m=fP.slice(0,fP.length),g=fN,v=fH,y=e();return fT=t,fL=i,fF=r,fU=a,fk=o,fD=l,fz=h,fI=c,fO=d,fE=p,fH=v,(fP=f).splice(0,fP.length,...m),fN=g,fR=new DataView(fE.buffer,fE.byteOffset,fE.byteLength),y}function mh(){fE=null,fI=null,fP=null}fV[116]=e=>{let t=e[0],i=mo[t];if(!i)throw Error("Could not find typed array for code "+t);return new mn[i](Uint8Array.prototype.slice.call(e,1).buffer)},fV[120]=()=>{let e=fZ();return new RegExp(e[0],e[1])},fV[98]=e=>{let t=(e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3],i=fL;fL+=t-4,(fO=[fZ(),fZ()]).position0=0,fO.position1=0;let r=fL;fL=i;try{return fZ()}finally{fL=r}},fV[255]=e=>new Date(4==e.length?(0x1000000*e[0]+(e[1]<<16)+(e[2]<<8)+e[3])*1e3:8==e.length?((e[0]<<22)+(e[1]<<14)+(e[2]<<6)+(e[3]>>2))/1e6+((3&e[3])*0x100000000+0x1000000*e[4]+(e[5]<<16)+(e[6]<<8)+e[7])*1e3:12==e.length?((e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3])/1e6+((128&e[4]?-0x1000000000000:0)+0x10000000000*e[6]+0x100000000*e[7]+0x1000000*e[8]+(e[9]<<16)+(e[10]<<8)+e[11])*1e3:"invalid");var mc=Array(147);for(let e=0;e<256;e++)mc[e]=+("1e"+Math.floor(45.15-.30103*e));var md=new fX({useRecords:!1});new Uint8Array((md.unpack,md.unpackMultiple,md.unpack,new Float32Array(1)).buffer,0,4);try{mu=new TextEncoder}catch{}var mu,mp,mf,mm,mg,mv,my="u">typeof Buffer,mx=my?Buffer.allocUnsafeSlow:Uint8Array,mb=my?Buffer:Uint8Array,mw=my?0x100000000:0x7fd00000,mS=0,m_=null,mA=/[\u0080-\uFFFF]/,mM=Symbol("record-id"),mC=class extends fX{constructor(e){super(e),this.offset=0;let t,i,r,a,o,l=0,h=mb.prototype.utf8Write?function(e,t,i){return mm.utf8Write(e,t,i)}:!!mu&&!!mu.encodeInto&&function(e,t){return mu.encodeInto(e,mm.subarray(t)).written},c=this;e||(e={});let d=e&&e.sequential,p=e.structures||e.saveStructures,f=e.maxSharedStructures;if(null==f&&(f=32*!!p),f>8160)throw Error("Maximum maxSharedStructure is 8160");let m=e.maxOwnStructures;null==m&&(m=p?32:64),d&&!e.saveStructures&&(this.structures=[]);let g=f>32||m+f>64,v=f+64,y=f+m+64;if(y>8256)throw Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let x=[],b=0,w=0;this.pack=this.encode=function(e,h){if(mm||(mg=new DataView((mm=new mx(8192)).buffer,0,8192),mS=0),(mv=mm.length-10)-mS<2048?(mg=new DataView((mm=new mx(mm.length)).buffer,0,mm.length),mv=mm.length-10,mS=0):mS=mS+7&0x7ffffff8,t=mS,o=c.structuredClone?new Map:null,c.bundleStrings?(m_=["",""],mm[mS++]=214,mm[mS++]=98,m_.position=mS-t,mS+=4):m_=null,i=c.structures){i.uninitialized&&(i=c._mergeStructures(c.getStructures()));let e=i.sharedLength||0;if(e>f)throw Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+i.sharedLength);if(!i.transitions){i.transitions=Object.create(null);for(let t=0;t<e;t++){let e=i[t];if(!e)continue;let r,a=i.transitions;for(let t=0,i=e.length;t<i;t++){let i=e[t];(r=a[i])||(r=a[i]=Object.create(null)),a=r}a[mM]=t+64}l=e}d||(i.nextId=e+64)}r&&(r=!1),a=i||[];try{if(S(e),m_){mg.setUint32(m_.position+t,mS-m_.position-t);let e=m_;m_=null,S(e[0]),S(e[1])}if(c.offset=mS,o&&o.idsToInsert){(mS+=6*o.idsToInsert.length)>mv&&A(mS),c.offset=mS;let e=function(e,t){let i,r=6*t.length,a=e.length-r;for(t.sort((e,t)=>
3135e.offset>t.offset?1:-1);i=t.pop();){let t=i.offset,o=i.id;e.copyWithin(t+r,t,a);let l=t+(r-=6);e[l++]=214,e[l++]=105,e[l++]=o>>24,e[l++]=o>>16&255,e[l++]=o>>8&255,e[l++]=255&o,a=t}return e}(mm.subarray(t,mS),o.idsToInsert);return o=null,e}return h&mB?(mm.start=t,mm.end=mS,mm):mm.subarray(t,mS)}finally{if(i){if(w<10&&w++,b>1e4)i.transitions=null,w=0,b=0,x.length>0&&(x=[]);else if(x.length>0&&!d){for(let e=0,t=x.length;e<t;e++)x[e][mM]=0;x=[]}if(r&&c.saveStructures){let r=i.sharedLength||f;i.length>r&&(i=i.slice(0,r));let a=mm.subarray(t,mS);return!1===c.saveStructures(i,l)?(c._mergeStructures(c.getStructures()),c.pack(e)):(l=r,a)}}h&mz&&(mS=t)}};let S=e=>{mS>mv&&(mm=A(mS));var i,r=typeof e;if("string"===r){let t,r=e.length;if(m_&&r>=8&&r<4096){let t=mA.test(e);m_[+!t]+=e,mm[mS++]=193,S(t?-r:r);return}t=r<32?1:r<256?2:r<65536?3:5;let a=3*r;if(mS+a>mv&&(mm=A(mS+a)),r<64||!h){let a,o,l,h=mS+t;for(a=0;a<r;a++)(o=e.charCodeAt(a))<128?mm[h++]=o:(o<2048?mm[h++]=o>>6|192:((64512&o)==55296&&(64512&(l=e.charCodeAt(a+1)))==56320?(o=65536+((1023&o)<<10)+(1023&l),a++,mm[h++]=o>>18|240,mm[h++]=o>>12&63|128):mm[h++]=o>>12|224,mm[h++]=o>>6&63|128),mm[h++]=63&o|128);i=h-mS-t}else i=h(e,mS+t,a);i<32?mm[mS++]=160|i:i<256?(t<2&&mm.copyWithin(mS+2,mS+1,mS+1+i),mm[mS++]=217,mm[mS++]=i):i<65536?(t<3&&mm.copyWithin(mS+3,mS+2,mS+2+i),mm[mS++]=218,mm[mS++]=i>>8,mm[mS++]=255&i):(t<5&&mm.copyWithin(mS+5,mS+3,mS+3+i),mm[mS++]=219,mg.setUint32(mS,i),mS+=4),mS+=i}else if("number"===r)if(e>>>0===e)e<64?mm[mS++]=e:e<256?(mm[mS++]=204,mm[mS++]=e):e<65536?(mm[mS++]=205,mm[mS++]=e>>8,mm[mS++]=255&e):(mm[mS++]=206,mg.setUint32(mS,e),mS+=4);else if((0|e)===e)e>=-32?mm[mS++]=256+e:e>=-128?(mm[mS++]=208,mm[mS++]=e+256):e>=-32768?(mm[mS++]=209,mg.setInt16(mS,e),mS+=2):(mm[mS++]=210,mg.setInt32(mS,e),mS+=4);else{let t;if((t=this.useFloat32)>0&&e<0x100000000&&e>=-0x80000000){let i;if(mm[mS++]=202,mg.setFloat32(mS,e),t<4||(0|(i=e*mc[(127&mm[mS])<<1|mm[mS+1]>>7]))===i){mS+=4;return}mS--}mm[mS++]=203,mg.setFloat64(mS,e),mS+=8}else if("object"===r)if(e){if(o){let i=o.get(e);if(i){i.id||(i.id=(o.idsToInsert||(o.idsToInsert=[])).push(i)),mm[mS++]=214,mm[mS++]=112,mg.setUint32(mS,i.id),mS+=4;return}o.set(e,{offset:mS-t})}let r=e.constructor;if(r===Object)_(e,!0);else if(r===Array){(i=e.length)<16?mm[mS++]=144|i:i<65536?(mm[mS++]=220,mm[mS++]=i>>8,mm[mS++]=255&i):(mm[mS++]=221,mg.setUint32(mS,i),mS+=4);for(let t=0;t<i;t++)S(e[t])}else if(r===Map)for(let[t,r]of((i=e.size)<16?mm[mS++]=128|i:i<65536?(mm[mS++]=222,mm[mS++]=i>>8,mm[mS++]=255&i):(mm[mS++]=223,mg.setUint32(mS,i),mS+=4),e))S(t),S(r);else{for(let t=0,i=mp.length;t<i;t++)if(e instanceof mf[t]){let i,r=mp[t];if(r.write){r.type&&(mm[mS++]=212,mm[mS++]=r.type,mm[mS++]=0),S(r.write.call(this,e));return}let a=mm,o=mg,l=mS;mm=null;try{i=r.pack.call(this,e,e=>(mm=a,a=null,(mS+=e)>mv&&A(mS),{target:mm,targetView:mg,position:mS-e}),S)}finally{a&&(mm=a,mg=o,mS=l,mv=mm.length-10)}i&&(i.length+mS>mv&&A(i.length+mS),mS=function(e,t,i,r){let a=e.length;switch(a){case 1:t[i++]=212;break;case 2:t[i++]=213;break;case 4:t[i++]=214;break;case 8:t[i++]=215;break;case 16:t[i++]=216;break;default:a<256?(t[i++]=199,t[i++]=a):(a<65536?(t[i++]=200,t[i++]=a>>8):(t[i++]=201,t[i++]=a>>24,t[i++]=a>>16&255,t[i++]=a>>8&255),t[i++]=255&a)}return t[i++]=r,t.set(e,i),i+=a}(i,mm,mS,r.type));return}_(e,!e.hasOwnProperty)}}else mm[mS++]=192;else if("boolean"===r)mm[mS++]=e?195:194;else if("bigint"===r){if(e<BigInt(1)<<BigInt(63)&&e>=-(BigInt(1)<<BigInt(63)))mm[mS++]=211,mg.setBigInt64(mS,e);else if(e<BigInt(1)<<BigInt(64)&&e>0)mm[mS++]=207,mg.setBigUint64(mS,e);else if(this.largeBigIntToFloat)mm[mS++]=203,mg.setFloat64(mS,Number(e));else throw RangeError(e+" was too large to fit in MessagePack 64-bit integer format, set largeBigIntToFloat to convert to float-64");mS+=8}else if("undefined"===r)this.encodeUndefinedAsNil?mm[mS++]=192:(mm[mS++]=212,mm[mS++]=0,mm[mS++]=0);else if("function"===r)S(this.writeFunction&&this.writeFunction());else throw Error("Unknown type: "+r)},_=!1===this.useRecords?this.variableMapSize?e=>{let t,i=Object.keys(e),r=i.length;r<16?mm[mS++]=128|r:r<65536?(mm[mS++]=222,mm[mS++]=r>>8,mm[mS++]=255&r):(mm[mS++]=223,mg.setUint32(mS,r),mS+=4);for(let a=0;a<r;a++)S(t=i[a]),S(e[t])}:(e,i)=>{mm[mS++]=222;let r=mS-t;mS+=2;let a=0;for(let t in e)(i||e.hasOwnProperty(t))&&(S(t),S(e[t]),a++);mm[r+++t]=a>>8,mm[r+t]=255&a}:e=>{let t=Object.keys(e),i,o=a.transitions||(a.transitions=Object.create(null)),l=0;for(let e=0,r=t.length;e<r;e++){let r=t[e];(i=o[r])||(i=o[r]=Object.create(null),l++),o=i}let h=o[mM];if(h)h>=96&&g?(mm[mS++]=(31&(h-=96))+96,mm[mS++]=h>>5):mm[mS++]=h;else{(h=a.nextId)||(h=64),h<v&&this.shouldShareStructure&&!this.shouldShareStructure(t)?((h=a.nextOwnId)<y||(h=v),a.nextOwnId=h+1):(h>=y&&(h=v),a.nextId=h+1);let e=t.highByte=h>=96&&g?h-96>>5:-1;o[mM]=h,a[h-64]=t,h<v?(t.isShared=!0,a.sharedLength=h-63,r=!0,e>=0?(mm[mS++]=(31&h)+96,mm[mS++]=e):mm[mS++]=h):(e>=0?(mm[mS++]=213,mm[mS++]=114,mm[mS++]=(31&h)+96,mm[mS++]=e):(mm[mS++]=212,mm[mS++]=114,mm[mS++]=h),l&&(b+=w*l),x.length>=m&&(x.shift()[mM]=0),x.push(o),S(t))}for(let i=0,r=t.length;i<r;i++)S(e[t[i]])},A=e=>{let i;if(e>0x1000000){if(e-t>mw)throw Error("Packed buffer would be larger than maximum buffer size");i=Math.min(mw,4096*Math.round(Math.max((e-t)*(e>0x4000000?1.25:2),4194304)/4096))}else i=(Math.max(e-t<<2,mm.length-1)>>12)+1<<12;let r=new mx(i);return mg=new DataView(r.buffer,0,i),mm.copy?mm.copy(r,0,t,e):r.set(mm.slice(t,e)),mS-=t,t=0,mv=r.length-10,mm=r}}useBuffer(e){mg=new DataView((mm=e).buffer,mm.byteOffset,mm.byteLength),mS=0}};function mE(e,t,i,r){let a=e.byteLength;if(a+1<256){var{target:o,position:l}=i(4+a);o[l++]=199,o[l++]=a+1}else if(a+1<65536){var{target:o,position:l}=i(5+a);o[l++]=200,o[l++]=a+1>>8,o[l++]=a+1&255}else{var{target:o,position:l,targetView:h}=i(7+a);o[l++]=201,h.setUint32(l,a+1),l+=4}o[l++]=116,o[l++]=t,o.set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),l)}function mT(e,t){let i=e.byteLength;if(i<256){var r,a,{target:r,position:a}=t(i+2);r[a++]=196,r[a++]=i}else if(i<65536){var{target:r,position:a}=t(i+3);r[a++]=197,r[a++]=i>>8,r[a++]=255&i}else{var{target:r,position:a,targetView:o}=t(i+5);r[a++]=198,o.setUint32(a,i),a+=4}r.set(e,a)}function mP(e){if(e.Class){if(!e.pack&&!e.write)throw Error("Extension has no pack or write function");if(e.pack&&!e.type)throw Error("Extension has no type (numeric code to identify the extension)");mf.unshift(e.Class),mp.unshift(e)}e.unpack?fV[e.type]=e.unpack:fV[e.type]=e}mf=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,fG],mp=[{pack(e,t,i){let r=e.getTime()/1e3;if((this.useTimestamp32||0===e.getMilliseconds())&&r>=0&&r<0x100000000){let{target:e,targetView:i,position:a}=t(6);e[a++]=214,e[a++]=255,i.setUint32(a,r)}else if(r>0&&r<0x400000000){let{target:i,targetView:a,position:o}=t(10);i[o++]=215,i[o++]=255,a.setUint32(o,4e6*e.getMilliseconds()+(r/1e3/0x100000000|0)),a.setUint32(o+4,r)}else if(isNaN(r)){if(this.onInvalidDate)return t(0),i(this.onInvalidDate());let{target:e,targetView:r,position:a}=t(3);e[a++]=212,e[a++]=255,e[a++]=255}else{let{target:i,targetView:a,position:o}=t(15);i[o++]=199,i[o++]=12,i[o++]=255,a.setUint32(o,1e6*e.getMilliseconds()),a.setBigInt64(o+4,BigInt(Math.floor(r)))}}},{pack(e,t,i){let r=Array.from(e),{target:a,position:o}=t(3*!!this.structuredClone);this.structuredClone&&(a[o++]=212,a[o++]=115,a[o++]=0),i(r)}},{pack(e,t,i){let{target:r,position:a}=t(3*!!this.structuredClone);this.structuredClone&&(r[a++]=212,r[a++]=101,r[a++]=0),i([e.name,e.message])}},{pack(e,t,i){let{target:r,position:a}=t(3*!!this.structuredClone);this.structuredClone&&(r[a++]=212,r[a++]=120,r[a++]=0),i([e.source,e.flags])}},{pack(e,t){this.structuredClone?mE(e,16,t):mT(my?Buffer.from(e):new Uint8Array(e),t)}},{pack(e,t){let i=e.constructor;i!==mb&&this.structuredClone?mE(e,mo.indexOf(i.name),t):mT(e,t)}},{pack(e,t){let{target:i,position:r}=t(1);i[r]=193}}];var mD=new mC({useRecords:!1});mD.pack,mD.pack;var{NEVER:mO,ALWAYS:mI,DECIMAL_ROUND:mR,DECIMAL_FIT:mL}={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4},mB=512,mz=1024,mF=new mC({structuredClone:!0});mP({Class:pV.prototype.constructor,type:1,write:e=>({...e}),read:e=>
3135(Object.setPrototypeOf(e,pV.prototype),e)}),mP({Class:pY.prototype.constructor,type:2,write:e=>[...e],read:e=>(Object.setPrototypeOf(e,pY.prototype),e)}),mP({Class:pX.prototype.constructor,type:3,write:e=>[...e],read:e=>(Object.setPrototypeOf(e,pX.prototype),e)}),mP({Class:fx.prototype.constructor,type:4,write:e=>e.id,read:e=>new fx(e)}),mP({Class:fb.prototype.constructor,type:5,write:e=>e.data,read:e=>new fb(e)}),mP({Class:p$.prototype.constructor,type:6,write:e=>({...e}),read:e=>(Object.setPrototypeOf(e,p$.prototype),e)});var mN=mj||(mj={});function mU(e){return mF.pack(e)}function mk(e){return"MouseDown"===e||"MouseUp"===e||"KeyDown"===e||"KeyUp"===e||"Collision"===e||"Trigger"===e}mN.serialize=mU,mN.deserialize=function(e){return mF.unpack(e)},mN.checksum=function(e){return(function(e){var t=0;if(0===e.length)return t;for(let i=0;i<e.length;i++)t=(t<<5)-t+e[i],t&=t;return t})(mU(function e(t){if(pq(t))return t;if(Array.isArray(t))return t.map(e);if("object"!=typeof t||null===t)return t;{let i={};for(let r of Object.keys(t).sort())i[r]=e(t[r]);return Object.setPrototypeOf(i,Object.getPrototypeOf(t)),i}}(e))).toString()},(mV=mG||(mG={})).toEventUIType=function(e){return"Conditional"===e.type?"Distance"===e.condition.type?"Distance":"StateChange":e.type},mV.fromEventUIType=function(e){return"Distance"===e||"StateChange"===e?"Conditional":e};var mV,mj,mG,mW,mH={LookAt:[],Follow:["Create"],DragDrop:["Transition","Animation","Audio","Particles","Create","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseHover:["Transition","Animation","TimelineAnimation","Particles","Create","Destroy","SwitchCamera","SceneTransition","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Scroll:["Transition","Animation","TimelineAnimation","Create","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Start:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Conditional:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseDown:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MouseUp:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],MousePress:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Link","Create","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyDown:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyUp:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],KeyPress:["Transition","Animation","Audio","Particles","Video","Link","Create","SwitchCamera","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],GameControl:["Transition","Animation","TimelineAnimation","Audio","Particles","Create","Conditional"],Collision:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Create","Destroy","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Trigger:["Transition","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],Resize:["Transition","Animation","Audio","Particles","Video","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],VariableChange:["Transition","Animation","TimelineAnimation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],API:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],WEBHOOK:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"],AIAssistantListener:["SetVariable"],AIAssistantTrigger:["Transition","Animation","Audio","Particles","Video","Link","Create","Destroy","SwitchCamera","SceneTransition","Reset","SetVariable","DynamicVariablePlay","Conditional","ClearLocalStorage","UserAPI"]};(mq=mW||(mW={})).is=function(e){return"MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"KeyPress"===e.type},mq.defaultData=function(e){return"MouseDown"===e||"MouseUp"===e||"MousePress"===e?{type:e,mode:"Object",disabled:!1,name:"",actions:new pY}
vendor: 4,293 bytes, line 3135
3135:{type:e,disabled:!1,name:"",key:void 0,actions:new pY}},(mX=m8||(m8={})).propertyDefaultData=function(e){return{type:"Property",value:[e??null,"position","x"]}},mX.valueDefaultData={type:"Literal",value:0},(mY=m9||(m9={})).comparisonDefaultData=function(e){return{type:"Comparison",operator:"==",lOperand:m8.propertyDefaultData(e),rOperand:{...m8.valueDefaultData}}},mY.distanceDefaultData=function(e){return{type:"Distance",toObject:e??null,fromObject:e??null,distance:200}},mY.stateDefaultData=function(e,t){return{type:"State",object:e??null,state:t??null}},(m7||(m7={})).isConditionalSubActions=function(e){return void 0!==e.find(e=>"ifActions"===e||"elseActions"===e)},(mQ=ge||(ge={})).is=function(e){return"Conditional"===e.type},mQ.defaultData=function(e){return{type:"Conditional",disabled:!1,name:"",inActions:new pY,outActions:new pY,condition:m9.distanceDefaultData(e)}},(gt||(gt={})).defaultData={type:"DragDrop",name:"",cursor:"hand",disabled:!1,dampingFactor:1,objects:[],snapTo:"center",snapSurfaceMode:"bbox",snapSurfaceOffset:0,dropOn:"all",autoOrient:!0,dropDestinations:[],plane:"adaptive",planeMode:"locked",referenceFrame:"global",limits:[-1/0,1/0,-1/0,1/0,-1/0,1/0],drop:!1,resetOnSnapFail:!1,snapSpeed:20,resetSpeed:20,dragDropActions:{drag:new pY,drop:new pY}},(gi||(gi={})).defaultData={type:"Follow",disabled:!1,name:"",maxDelta:0,dampingFactor:1,target:"cursor",plane:"custom",resetOnPointerLeave:!0,resetAfterDistanceLimit:!0,enabledTranslation:[!0,!0,!0],limitDistanceEnabled:!1,limitDistance:1e3,snapDelay:0,resetSpeed:5,actions:new pY},(gr||(gr={})).defaultData={type:"LookAt",disabled:!1,name:"",distance:1e3,dampingFactor:1,target:"cursor",tilt:"up",axis:"z",plane:"custom",resetOnPointerLeave:!0,resetAfterDistanceLimit:!0,enabledRotation:[!0,!0,!0],limitDistanceEnabled:!1,limitDistance:1e3,snapDelay:0,resetSpeed:5},(mZ=gs||(gs={})).is=function(e){return"MouseHover"===e.type},mZ.defaultData=function(){return{type:"MouseHover",disabled:!1,name:"",actions:new pY}},(mK=ga||(ga={})).is=function(e){return"Scroll"===e.type},mK.defaultData=function(){return{type:"Scroll",disabled:!1,name:"",steps:100,trigger:"load",startFrom:"enter",enterAnchor:"top",startOffset:0,endAfter:400,actions:new pY}},(mJ=gn||(gn={})).is=function(e){return"Start"===e.type},mJ.defaultData=function(){return{type:"Start",disabled:!1,name:"",actions:new pY}},(m$=go||(go={})).is=function(e){return"Collision"===e.type},m$.defaultData=function(){return{type:"Collision",disabled:!1,name:"",target:"character",actions:new pY}},(m0=gl||(gl={})).is=function(e){return"Trigger"===e.type},m0.defaultData=function(e,t){return{type:"Trigger",name:"",disabled:!1,target:"all",triggeringObjects:[],actions:new pY,triggerZone:"box",position:t.toArray(),rotation:[0,0,0],size:e.toArray(),radius:e.length()/2,helperVisible:!0}},(m1=gh||(gh={})).defaultSizes={mobile:[480,480],tablet:[768,768],desktop:[1200,1200],custom:[769,1200]},m1.is=function(e){return"Resize"===e.type},m1.sizeToDevice=function(e){return"string"==typeof e?e:"custom"},m1.deviceToSize=function(e){return"string"==typeof e?[...m1.defaultSizes[e]]:[...e]},m1.defaultData=function(){let e={size:"mobile",operator:"<",actions:new pY},t={size:"tablet",operator:"<",actions:new pY},i={size:[...m1.defaultSizes.custom],operator:"<>",actions:new pY},r=new pY;return r.push({id:t8.generateUUID(),fi:0,data:e},{id:t8.generateUUID(),fi:1,data:t},{id:t8.generateUUID(),fi:2,data:i}),{type:"Resize",disabled:!1,name:"",orientation:"horizontal",breakpoints:r}},m1.defaultBreakpointData=function(){return{size:[...m1.defaultSizes.custom],operator:"<>",actions:new pY}},(m2=gc||(gc={})).propertyPaths={Position:["position"],"Position X":["position","x"],"Position Y":["position","y"],"Position Z":["position","z"],Rotation:["rotation"],"Rotation X":["rotation","x"],"Rotation Y":["rotation","y"],"Rotation Z":["rotation","z"],Scale:["scale"],"Scale X":["scale","x"],"Scale Y":["scale","y"],"Scale Z":["scale","z"],Width:["width"],Height:["height"],Depth:["depth"],"Mouse Position X":["mouse","x"],"Mouse Position Y":["mouse","y"],"Mouse Pressed":["mouse","pressed"],"Screen Width":["mouse","width"],"Screen Height":["mouse","height"],"Hit Position X":["raycast","x"],"Hit Position Y":["raycast","y"],"Hit Position Z":["raycast","z"],"Hit Ob
3135ject Position X":["raycast","objX"],"Hit Object Position Y":["raycast","objY"],"Hit Object Position Z":["raycast","objZ"]},m2.is=function(e){return"VariableChange"===e.type},m2.defaultData=function(){return{disabled:!1,type:"VariableChange",name:"",actions:new pY,variableId:"",objectId:null,property:"Position X"}},(m3=gd||(gd={})).is=function(e){return"API"===e.type},m3.defaultData=function(){return{disabled:!1,type:"API",name:"",successActions:new pY,errorActions:new pY,userAPIId:""}},(m4=gu||(gu={})).is=function(e){return"WEBHOOK"===e.type},m4.defaultData=function(){return{disabled:!1,type:"WEBHOOK",name:"",actions:new pY,userWebhookId:""}},(m5=gp||(gp={})).is=function(e){return"AIAssistantListener"===e.type},m5.defaultData=function(){return{disabled:!1,type:"AIAssistantListener",name:"",actions:new pY,analysis:"average",analysisRange:[0,71],analysisSingle:0}},(m6=gf||(gf={})).is=function(e){return"AIAssistantTrigger"===e.type},m6.defaultData=function(){return{disabled:!1,description:"",name:"",type:"AIAssistantTrigger",actions:new pY}};var mq,mX,mY,mQ,mZ,mK,mJ,m$,m0,m1,m2,m3,m4,m5,m6,m8,m9,m7,ge,gt,gi,gr,gs,ga,gn,go,gl,gh,gc,gd,gu,gp,gf,gm,gg="personal camera",gv="a218fcc3-276b-49b9-b485-49037fd14f5f",gy=((h=gy||{}).x="x",h.y="y",h.z="z",h);(e=>{function t(e,t){return Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)}function i(e,i){return Math.sqrt(t(e,i))}function r(t,i,r){let a=e.sub(i,t),o=e.sub(r,t),l=e.dot(a,o)/e.dot(a,a),h=e.scalarMultiply(a,l);return e.add(t,h)}e.isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]},e.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i]},e.add=function(e,t){return[e[0]+t[0],e[1]+t[1]]},e.sub=function(e,t){return[e[0]-t[0],e[1]-t[1]]},e.multiply=function(e,t){return[e[0]*t[0],e[1]*t[1]]},e.divide=function(e,t){return[e[0]/t[0],e[1]/t[1]]},e.distanceSquared=t,e.distance=i,e.dot=function(e,t){return e[0]*t[0]+e[1]*t[1]},e.scalarMultiply=function(e,t){return[e[0]*t,e[1]*t]},e.projectionOnto=r,e.projectionOntoDistance=function(e,t,a){return i(e,r(e,t,a))},e.center=function(e,t){return[(e[0]+t[0])*.5,(e[1]+t[1])*.5]}})(gm||(gm={})),(gx=gA||(gA={})).isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]},gx.add=function(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]},gx.sub=function(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]},gx.div=function(e,t){return[e[0]/t[0],e[1]/t[1],e[2]/t[2]]},gx.mul=function(e,t){return[e[0]*t[0],e[1]*t[1],e[2]*t[2]]},gx.dist=function(e,t){return Math.hypot(e[0]-t[0],e[1]-t[1],e[2]-t[2])},gx.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i]},(gb=gM||(gM={})).isEqual=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},gb.lerp=function(e,t,i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i,e[3]+(t[3]-e[3])*i]},(e=>{let t=180/Math.PI,i=Math.PI/180;function r(e){return"number"==typeof e?e*t:e}function a(e){return"number"==typeof e?e*i:e}e.radToDeg=function(e){return[r(e[0]),r(e[1]),r(e[2])]},e.degToRad=function(e){return[a(e[0]),a(e[1]),a(e[2])]}})(gC||(gC={})),(gw=gE||(gE={})).identity=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],gw.isEqual=function(e,t){for(let i=0;i<16;i++)if(e[i]!==t[i])return!1;return!0},gw.simplify=function(e){return e??gw.identity},gw.applyMatrix4=function(e,t){let i=t.slice(0);for(var r=0,a=t.length;r<a;r+=3){let a=e[3]*t[r]+e[7]*t[r+1]+e[11]*t[r+2]+e[15];i[r]=(e[0]*t[r]+e[4]*t[r+1]+e[8]*t[r+2]+e[12])/a,i[r+1]=(e[1]*t[r]+e[5]*t[r+1]+e[9]*t[r+2]+e[13])/a,i[r+2]=(e[2]*t[r]+e[6]*t[r+1]+e[10]*t[r+2]+e[14])/a}return i},(gS=gT||(gT={})).isRGB=function(e){return"object"==typeof e&&"number"==typeof e.r&&"number"==typeof e.g&&"number"==typeof e.b},gS.white={r:1,g:1,b:1},gS.red={r:1,g:0,b:0},gS.black={r:0,g:0,b:0},gS.toRgb255a1=function(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:1}},gS.clone=function(e){return{r:e.r,g:e.g,b:e.b}},gS.fromHex=function(e){return{r:((e=Math.floor(e))>>16&255)/255,g:(e>>8&255)/255,b:(255&e)/255}},gS.toHex=function(e){return 65536*Math.round(255*e.r)+256*Math.round(255*e.g)+Math.round(255*e.b)},gS.equals=function(e,t){return e.r===t.r&&e.g===t.g&&e.b===t.b},gS.equalsFixed=function(e,t){return e.r.toFixed(2)===t.r.toFixed(2)&&e.g.toFixed(2)===t.g.toFixed(2)&&e.b.toFixed(2)===t.b.toFixed(2)},gS.lerp=function(e,t,i){return{r:e.r+(t.r-e.r)*i,g:e.g+(t.g-e.g)*i,b:e.b+(t.b-e.b)*i}},gS.is=function(e){return!!h6(e)&&"r"in e&&"g"in e&&"b"in e&&!("a"in e)},(g_=gP||(gP={})).white={...gT.white,a:1},g_.is=function(e){return!!h6(e)&&"r"in e&&"g"in e&&"b"in e&&"a"in e},g_.transparent={...gT.white,a:0},g_.from0to1=function(e){return{r:e[0],g:e[1],b:e[2],a:e[3]}},g_.fromHexAndA=function(e,t){return{...gT.fromHex(e),a:t}},g_.toRgb255a1=function(e){return{r:Math.round(255*e.r),g:Math.round(255*e.g),b:Math.round(255*e.b),a:e.a}},g_.equals=function(e,t){return gT.equals(e,t)&&e.a===t.a},g_.equalsFixed=function(e,t){return gT.equalsFixed(e,t)&&e.a.toFixed(2)===t.a.toFixed(2)},g_.lerp=function(e,t,i){return{r:e.r+(t.r-e.r)*i,g:e.g+(t.g-e.g)*i,b:e.b+(t.b-e.b)*i,a:e.a+(t.a-e.a)*i}},g_.toStyle=function({r:e,g:t,b:i,a:r}=g_.white){return`rgba(${255*e}, ${255*t}, ${255*i}, ${r})`},(gD||(gD={})).identity={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivot:[0,0,0],pivotRotation:[0,0,0]};var gx,gb,gw,gS,g_,gA,gM,gC,gE,gT,gP,gD,gO,gI=((c=gI||{})[c.LINEAR=0]="LINEAR",c[c.EASE=1]="EASE",c[c.EASE_IN=2]="EASE_IN",c[c.EASE_OUT=3]="EASE_OUT",c[c.EASE_IN_O
3135UT=4]="EASE_IN_OUT",c[c.CUBIC=5]="CUBIC",c[c.SPRING=6]="SPRING",c[c.ARC=7]="ARC",c[c.NONE=8]="NONE",c);function gR(e){return"string"==typeof e&&36===e.length&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}(gO||(gO={})).defaultData={mass:1,stiffness:80,damping:10,velocity:0},(gH||(gH={})).defaultData={control1:[.5,0],control2:[.5,1]},(d=gq||(gq={})).linear=[0,0,1,1],d.ease=[.25,.1,.25,1],d.easeIn=[.42,0,1,1],d.easeOut=[0,0,.58,1],d.easeInOut=[.42,0,.58,1],(gk=gX||(gX={})).all=["PerspectiveCamera","OrthographicCamera"],gk.is=function(e){return gk.all.includes(e)},(gV=gY||(gY={})).DefaultUp=[0,1,0],gV.DefaultTargetOffset=1e3,gV.defaultData={far:1e5,type:"OrthographicCamera",perspective:{near:70,fov:45,zoom:1},orthographic:{near:-1e5,zoom:1},up:gV.DefaultUp,isUpVectorFlipped:!1,targetOffset:gV.DefaultTargetOffset},gV.getZoom=function(e){return"PerspectiveCamera"===e.type?e.perspective?.zoom??1:e.orthographic?.zoom??1},(gj=gQ||(gQ={})).defaultData=function(e,t=.1){return{disabled:!1,type:"linear",hideBase:!1,count:3,radial:{radius:2*Math.max("number"==typeof e[0]?e[0]:1,"number"==typeof e[1]?e[1]:1),start:0,end:360,alignment:!1,axis:"y",scale:[1,1,1],rotation:[0,0,0],position:[0,0,0],pivot:[0,0,0],pivotRotation:[0,0,0]},toObject:{object:"",spreadType:"random",scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],axis:"x",seed:0,count:99,align:"normal",pivot:[0,0,0],pivotRotation:[0,0,0]},linear:{scale:[1,1,1],rotation:[0,0,0],position:[("number"==typeof e[0]?e[0]+e[0]:1)*t,0,0],pivot:[0,0,0],pivotRotation:[0,0,0]},grid:{count:[2,2,2],size:e.map(e=>("number"==typeof e?e:1)*(1+t)),useCenter:!0},randomness:!1,randomnessObject:{strength:100,scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],movement:1,seed:0,freqScale:10,noiseType:"perlin"}}},gj.merge=function(e,t){let i={...e};if(gL.forEach(r=>{Object.assign(i,{[r]:t[r]??e[r]})}),i.radial={...e.radial},t.radial){let r=e.radial,a=t.radial;gB.forEach(e=>{Object.assign(i.radial,{[e]:a[e]??r[e]})})}if(i.linear={...e.linear},t.linear){let r=e.linear,a=t.linear;gz.forEach(e=>{Object.assign(i.linear,{[e]:a[e]??r[e]})})}if(i.grid={...e.grid},t.grid){let r=e.grid,a=t.grid;gF.forEach(e=>{Object.assign(i.grid,{[e]:a[e]??r[e]})})}if(i.toObject={...e.toObject},t.toObject){let r=e.toObject,a=t.toObject;gN.forEach(e=>{Object.assign(i.toObject,{[e]:a[e]??r[e]})})}if(i.randomnessObject={...e.randomnessObject},t.randomnessObject){let r=e.randomnessObject,a=t.randomnessObject;gU.forEach(e=>{Object.assign(i.randomnessObject,{[e]:a[e]??r[e]})})}return i},gj.isPartial=function(e){return!!(e.randomnessObject||e.toObject)},(gG=gZ||(gZ={})).defaultData={radial:{},linear:{},grid:{},toObject:{},randomnessObject:{}},p=["radial","linear","grid","toObject","randomnessObject"],gG.toOps=function(e,t){let i=[];for(let r of(void 0!==e.count&&i.push({type:0,path:t,props:{count:e.count}}),p)){let a=e[r];a&&Object.keys(a).length>0&&i.push({type:0,path:[...t,r],props:a})}return i};var gL=["count"],gB=["radius","start","end","position","scale","rotation"],gz=["position","scale","rotation"],gF=["count","size"],gN=["count","position","scale","rotation"],gU=["strength","scale","rotation","position","movement","seed","freqScale"];(gW=gK||(gK={})).all=["PointLight","SpotLight","DirectionalLight","HemisphereLight"],gW.is=function(e){return gW.all.includes(e)},(gJ||(gJ={})).defaultData=function(e){var t=e;if("PointLight"===t)return{type:t,color:gP.white,intensity:1,distance:2e3,decay:1,shadows:!0,shadowResolution:1024,shadowRadius:1,penumbraSize:.5,depth:1e5};if("SpotLight"===t)return{type:t,color:gP.white,intensity:1,distance:2e3,decay:1,shadows:!0,penumbra:0,angle:30/180*Math.PI,depth:1e5,penumbraSize:.5,shadowResolution:1024,shadowRadius:1};if("DirectionalLight"===t)return{type:t,color:gP.white,intensity:1,shadows:!0,size:2e3,depth:1e5,penumbraSize:.5,shadowResolution:1024,shadowRadius:1};throw Error("not implemented")},(f=g$||(g$={})).defaultShapeData={type:"PlaneEmitterShape",size:[100,100,100]},f.defaultCollisionData={colliderEntityId:null,collisionBounce:.75},f.defaultData={renderMaterial:{type:"particleMaterial",color:{r:1,g:.2,b:.545,a:1},color2:{r:.945,g:.714,b:.184,a:1},coloring:"gradient",ease:"linearFadeOut",easeSize:"linearFadeOut",transparent:!0,size:[40,40],texture:"pt_default_particle",spriteRotation:[0,0]},birthRatePerSec:50,gravity:1,noiseStrength:0,noiseScale:0,noiseSeed:1,noiseType:"curl",randomRotation:0,randomScale:.2,randomMass:.5,rootObjectType:"instancedMesh",life:1,direction:[0,0,0],directionMode:"axis",speed:10,shape:f.defaultShapeData,autoPlay:!0,emitTimeDelay:0,emitTimeCycle:"infinity",emitTimeDuration:1,...f.defaultCollisionData},(g0||(g0={})).defaultData={enabled:"visibility",fusedBody:!0,rigidBody:"positioned",density:1,pointMass:0,gravityScale:1,friction:.5,damping:0,restitution:.2,colliderType:"convex",enabledRotation:[!0,!0,!0],enabledTranslation:[!0,!0,!0]};var gk,gV,gj,gG,gW,gH,gq,gX,gY,gQ,gZ,gK,gJ,g$,g0,g1,g2=((m=g2||{})[m.Front=0]="Front",m[m.Back=1]="Back",m[m.Double=2]="Double",m);(g3=g1||(g1={})).defaultData={castShadow:!0,receiveShadow:!0}
vendor: 12,045 bytes, line 3135
3135,g3.equals=function(e,t){return e.castShadow===t.castShadow&&e.receiveShadow===t.receiveShadow},(g4=g5||(g5={})).defaultData={flatShading:!1,wireframe:!1,side:0},g4.equals=function(e,t){return e.flatShading===t.flatShading&&e.side===t.side&&e.wireframe===t.wireframe},(g6||(g6={})).defaultData={...g5.defaultData,...g1.defaultData},(g8||(g8={})).getMaterialData=function(e,t){let i=[];if("material"in e){let r="string"==typeof e.material?t.materials[e.material]??t.lib.materials[e.material]?.asset:e.material;r&&i.push(r)}else if("materials"in e)for(let r of e.materials){let e="string"==typeof r?t.materials[r]??t.lib.materials[r]?.asset:r;e&&i.push(e)}return i},(g=g9||(g9={})).defaultVideo={data:"",thumb:"/_assets/_videos/catThumb.png",type:"video",name:"Cat video"},g.maxSize=3e7,(g7||(g7={})).is=function(e){return"texture"===e||"video"===e||"color"===e||"depth"===e||"normal"===e||"gradient"===e||"noise"===e||"fresnel"===e||"rainbow"===e||"toon"===e||"outline"===e||"particle"===e||"transmission"===e||"matcap"===e||"displace"===e||"pattern"===e||"light"===e},(ve||(ve={})).is=function(e){return"phong"===e||"toon"===e||"lambert"===e||"physical"===e};var g3,g4,g5,g6,g8,g9,g7,ve,vt,vi=((v=vi||{})[v.Linear=0]="Linear",v[v.Radial=1]="Radial",v[v.Polar=2]="Polar",v),vr=((y=vr||{})[y.RepeatWrapping=1e3]="RepeatWrapping",y[y.ClampToEdgeWrapping=1001]="ClampToEdgeWrapping",y[y.MirroredRepeatWrapping=1002]="MirroredRepeatWrapping",y),vs=((x=vs||{})[x.NearestFilter=1003]="NearestFilter",x[x.LinearFilter=1006]="LinearFilter",x[x.LinearMipmapLinearFilter=1008]="LinearMipmapLinearFilter",x),va=((b=va||{})[b.UV=0]="UV",b[b.Planar=1]="Planar",b[b.Spherical=2]="Spherical",b[b.Cylindrical=3]="Cylindrical",b[b.Triplanar=4]="Triplanar",b),vn=((w=vn||{})[w.Simplex=0]="Simplex",w[w.SimplexFractal=1]="SimplexFractal",w[w.Ashima=2]="Ashima",w[w.Fbm=3]="Fbm",w[w.Perlin=4]="Perlin",w[w.Voronoi=5]="Voronoi",w),vo=((S=vo||{})[S.F1=0]="F1",S[S.F2=1]="F2",S[S.F2MinusF1=2]="F2MinusF1",S[S.SmoothBlend=3]="SmoothBlend",S[S.Edge=4]="Edge",S[S.Power=5]="Power",S[S.Lines=6]="Lines",S[S.Cells=7]="Cells",S),vl=((_=vl||{})[_.Lights=0]="Lights",_[_.Static=1]="Static",_[_.Camera=2]="Camera",_),vh=((A=vh||{})[A.Circle=0]="Circle",A[A.Ring=1]="Ring",A[A.Polygon=2]="Polygon",A[A.Cross=3]="Cross",A[A.Diamond=4]="Diamond",A[A.Checkerboard=5]="Checkerboard",A[A.Line=6]="Line",A[A.Wave=7]="Wave",A),vc=["mode","gradientType","noiseType","displacementType","projection","cnormal","crop","axis","side"],vd=["wrapping","image","video","name","minFilter","magFilter"];(vS=vt||(vt={})).patch=function(e,t){let{texture:i,...r}=t;if(Object.assign(e,r),i){let t=e.texture;t&&Object.assign(t,i)}},vS.defaultColorLayer=function(e){return{...vS.defaultData("color"),color:e}},vS.defaultData=function(e,t){return"light"===e&&t?function(e){let t={mode:0,isMask:!1,visible:!0,bumpMap:void 0,bumpMapIntensity:5,roughnessMap:void 0,alphaOverride:1};switch(e){case"phong":return{...t,category:"phong",specular:{r:.2,g:.2,b:.2},shininess:5,type:"light",visible:!0,mode:0,occlusion:!0,alpha:.6};case"toon":return{...t,category:"toon",specular:{r:.2,g:.2,b:.2},shininess:10,type:"light",alpha:1};case"lambert":return{...t,category:"lambert",emissive:{r:0,g:0,b:0},type:"light",alpha:1,visible:!0,mode:0,occlusion:!0};case"physical":return{...t,category:"physical",roughness:.2,metalness:.2,reflectivity:.2,type:"light",alpha:1,visible:!0,mode:0,occlusion:!0}}}(t):function(e){let t={alpha:1,mode:0,isMask:!1,visible:!0};switch(e){case"texture":return{...t,type:"texture",size:[128,128],blending:0,axis:"x",side:2,projection:0,texture:{image:"image_0",wrapping:1e3,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006},crop:!1};case"video":return{...t,type:"video",size:[128,128],blending:0,axis:"x",side:2,projection:0,texture:{video:g9.defaultVideo,wrapping:1001,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006},crop:!1};case"color":return{...t,type:"color",color:gT.fromHex(5526619)};case"depth":return{...t,type:"depth",gradientType:1,smooth:!1,isVector:!0,isWorldSpace:!1,origin:[0,0,0],direction:[1,0,0],colors:[[1,1,1,1],[0,0,0,1]],steps:[0,1],near:50,far:200};case"normal":return{...t,type:"normal",cnormal:[1,1,1]};case"gradient":return{...t,type:"gradient",gradientType:0,smooth:!1,colors:[[0,0,0,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,1,1,1,1,1,1,1,1,1],num:2,angle:0,offset:[0,0],morph:[0,0]};case"noise":return{...t,type:"noise",size:[100,100,100],noiseType:0,scale:1,move:1,colorA:{...gT.fromHex(6710886),a:1},colorB:{...gT.fromHex(6710886),a:1},colorC:{...gT.fromHex(0xffffff),a:1},colorD:{...gT.fromHex(0xffffff),a:1},distortion:[1,1],fA:[1.7,9.2],fB:[8.3,2.8],voronoiStyle:0,highCut:1,lowCut:0,smoothness:.3,seed:0,quality:1};case"fresnel":return{...t,type:"fresnel",color:gP.fromHexAndA(0xffffff,1),bias:.1,scale:1,intensity:2,factor:1};case"rainbow":return{...t,type:"rainbow",filmThickness:30,movement:0,wavelengths:[0,0,0],noiseStrength:0,noiseScale:1,offset:[0,0,0]};case"toon":return{...t,type:"toon",positioning:2,colors:[[0,0,0,1],[.5,.5,.5,1],[.5,.5,.5,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,.475,.525,1,1,1,1,1,1,1],num:4,source:[0,1e3,0],isWorldSpace:!0,noiseStrength:0,noiseScale:1,shadowColor:gP.fromHexAndA(0,0),offset:[0,0,0]};case"outline":return{...t,type:"outline",outlineColor:gP.fromHexAndA(0,1),contourColor:gP.fromHexAndA(0,1),outlineWidth:2,contourWidth:5,outlineThreshold:.4,contourThreshold:0,outlineSmoothing:0,contourFrequency:10,contourDirection:[0,1,0],positionalLines:!1,compensation:!0};case"matcap":return{...t,type:"matcap",texture:{image:"matcap_0",wrapping:1001,repeat:[1,1],offset:[0,0],rotation:0,minFilter:1008,magFilter:1006}};case"transmission":return{...t,type:"transmission",thickness:10,ior:1.5,roughness:1};case"displace":return{visible:!0,type:"displace",displacementType:"noise",noiseType:0,scale:10,movement:1,offset:[0,0,0],intensity:8,voronoiStyle:0,smoothness:.3,seed:0,highCut:1,lowCut:0,quality:1};case"pattern":return{...t,type:"pattern",style:0,projection:0,axis:"y",blending:0,offset:[0,0],colorA:{...gT.fromHex(0),a:1},colorB:{...gT.fromHex(0xffffff),a:1},frequency:[10,10],size:.5,variation:0,smoothness:.5,zigzag:0,rotation:0,vertical:[0,1],horizontal:[0,1],sides:6}}}(e)};var vu=vE||(vE={});function vp(e,t="layer1",i="layer2",r=gT.fromHex(0xffffff)){let a=new pY;return a.push({fi:0,data:vt.defaultData("light",e),id:t}),a.push({fi:1,data:vt.defaultData("color"),id:i}),{layers:a}}vu.isMergable=function(e){return!e.layers.some(e=>"texture"===e.data.type&&0!==e.data.projection||"depth"===e.data.type&&!e.data.isWorldSpace||"noise"===e.data.type||"displace"===e.data.type)},vu.getHash=function(e){let t="";return e.layers.forEach(e=>{Object.entries(e.data).forEach(([e,i])=>{t+=`${e}${i}`,Array.isArray(i)?i.forEach(e=>t+=`${e}`):"object"==typeof i?Object.values(i).forEach(e=>{"number"==typeof e?t+=`${e.toFixed(4)}`:t+=`${e}`}):t+=`${i}`})}),t},vu.defaultEmptyData=function(){return{layers:new pY}},vu.defaultData=function(e="layer1",t="layer2"){return vp("phong",e,t)},vu.withName=function(e,t){return{...e,name:t}},vu.defaultTwoLayerData=vp,vu.defaultColorMaterial=function(e,t,i="layer1",r="layer2"){let a=new pY;return a.push({fi:0,data:vt.defaultData("light",t),id:i}),a.push({fi:1,data:vt.defaultColorLayer(e),id:r}),{layers:a}},vu.defaultUIObjectMaterial=function(e){let t=vt.defaultData("texture");e&&Object.assign(t.texture,{image:e});let i=new pY;return i.push({fi:0,data:t,id:"layer1"}),i.push({fi:1,data:{...vt.defaultData("transmission"),alpha:1},id:"layer2"}),i.push({fi:2,data:{...vt.defaultData("light","lambert"),alpha:0},id:"layer3"}),{layers:i}},vu.defaultTwoLayerTextureData=function(e,t="phong",i="layer1",r="layer2"){let a=vt.defaultData("texture");Object.assign(a.texture,{image:e});let o=new pY;return o.push({fi:0,data:a,id:i}),o.push({fi:1,data:vt.defaultData("light",t),id:r}),{layers:o}},vu.defaultTwoLayerVideoTextureData=function(e,t="phong",i="layer1",r="layer2"){let a=vt.defaultData("video");Object.assign(a.texture,{video:e});let o=new pY;return o.push({fi:0,data:a,id:i}),o.push({fi:1,data:vt.defaultData("light",t),id:r}),{layers:o}},(vT||(vT={})).defaultData=function(){return{points:new pY,roundness:0,shapeHoles:[],isClosed:!1}},(vP||(vP={})).defaultData=function(){return{points:new pY,lastInsertionPlane:null,subdivisions:12,isClosed:!1,subdivisionMode:"parametric"}};var vf={type:"Ellipse",width:50,height:50,spikes:16,angle:360,innerRadius:0};(vD||(vD={})).merge=function(e,t){let i={...e};return vg.forEach(r=>{Object.assign(i,{[r]:t[r]??e[r]})}),i};var vm={shape:vf,depth:1,offset:0,bevel:50,bevelSides:6,angle:0,twist:0,startScale:1,endScale:1,capType:"flat"},vg=["depth","offset","angle","twist","startScale","endScale"];(v_=vO||(vO={})).is2DParametricMesh=function(e){return"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"UIGeometry"===e},v_.isParametricMesh=function(e){return"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"PathGeometry"===e||"VectorGeometry"===e||"ConeGeometry"===e||"CubeGeometry"===e||"CylinderGeometry"===e||"DodecahedronGeometry"===e||"HelixGeometry"===e||"IcosahedronGeometry"===e||"LatheGeometry"===e||"PyramidGeometry"===e||"SphereGeometry"===e||"PlaneGeometry"===e||"BackdropGeometry"===e||"TorusGeometry"===e||"TorusKnotGeometry"===e||"BooleanGeometry"===e||"TextGeometry"===e||"InputGeometry"===e},v_.isSwappableGeometry=function(e){return"PolygonGeometry"===e||"RectangleGeometry"===e||"StarGeometry"===e||"TriangleGeometry"===e||"EllipseGeometry"===e||"PathGeometry"===e||"VectorGeometry"===e||"ConeGeometry"===e||"CubeGeometry"===e||"CylinderGeometry"===e||"DodecahedronGeometry"===e||"HelixGeometry"===e||"IcosahedronGeometry"===e||"LatheGeometry"===e||"PyramidGeometry"===e||"SphereGeometry"===e||"PlaneGeometry"===e||"BackdropGeometry"===e||"TorusGeometry"===e||"TorusKnotGeometry"===e||"TextGeometry"===e||"SubdivGeometry"===e||"NonParametricGeometry"===e},(vI||(vI={})).merge=function(e,t){let i={...e};return Object.assign(i,t),"PathGeometry"===i.type&&"extrusion"in t&&t.extrusion&&(i.extrusion={...e.extrusion},Object.assign(i.extrusion,vD.merge(i.extrusion,t.extrusion))),i},(vA=vR||(vR={})).defaultData=function(e){if("RectangleGeometry"===e)return{width:320,height:320,type:e,cornerRadius:[0,0,0,0],cornerType:0,depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if("UIGeometry"===e)return{type:e,frame:"",cornerRadius:[0,0,0,0],cornerType:0,width:1,height:1};if("PathGeometry"===e)return{type:e,width:1,height:1,depth:1,path:vP.defaultData(),extrusion:vm};if("VectorGeometry"===e)return{width:1,height:1,type:e,subdivisions:12,shape:vT.defaultData(),depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if("BooleanGeometry"===e)return{type:e,operation:2,width:0,height:0,depth:0,phongAngle:35};if("ShapeBlendGeometry"===e)return{type:e,width:0,height:0,depth:0,resolutionLevel:6,blendRange:100,useChildrenColors:!1};if("TextGeometry"===e)return{type:e,width:100,height:100,depth:0,horizontalAlign:1,verticalAlign:1,fontSize:16,lineHeight:1.2,letterSpacing:0,text:{textValue:""},textTransform:1,font:"Roboto_regular",editable:!1,extrudeBevelSize:0,extrudeBevelSegments:1};if("InputGeometry"===e)return{...vA.defaultData("TextGeometry"),type:e,editable:!0};if("SphereGeometry"===e)return{type:"SphereGeometry",width:100,height:100,depth:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:180};throw Error("not implemented")};var vv=["width","height","depth"];function vy(e){for(let t of Object.keys(e))void 0===e[t]&&delete e[t];return e}function vx(e,t){return Object.setPrototypeOf(e,t),e}function vb(e){return Array.isArray(e)?e:[e]}function vw(e,t){let i=0;for(;i<e.length&&i<t.length;){if(e[i]<t[i])return -1;if(e[i]>t[i])return 1;i+=1}return i!==t.length?-1:+(i!==e.length)}(vL||(vL={}
3135)).defaultData={enabled:!1,useBackgroundColor:!1,color:gT.white,near:.1,far:2e3},M={opacity:1,blendFunction:13,enabled:!1},(vB||(vB={})).defaultData={enabled:!1,pixelation:{...M,blendFunction:16,granularity:15},bloom:{...M,blendFunction:16,intensity:1,blurScale:1,luminanceThreshold:.25,luminanceSmoothing:.025,kernelSize:3},chromaticAberration:{...M,offset:[2,2]},vignette:{...M,darkness:1,offset:0},hueSaturation:{...M,hue:3,saturation:0},brightnessContrast:{...M,brightness:.25,contrast:0},depthOfField:{...M,focusDistance:100,focalLength:20,bokehScale:5},noise:{...M,blendFunction:16}},(vz||(vz={})).defaultData={softShadowQuality:"low"},(vF||(vF={})).defaultData={enabled:!0,color:{r:.8274509803921568,g:.8274509803921568,b:.8274509803921568},intensity:.75},(vN||(vN={})).defaultData={occlusion:!1,aoFullRes:!1,radius:256,bias:.5,aoColor:{r:.19607843137254902,g:.19607843137254902,b:.19607843137254902}},(vU||(vU={})).defaultData={usePhysics:!1,gravity:-10},(vk||(vk={})).defaultData={playCamera:gg,gameControlObject:null},(vV||(vV={})).defaultData={backgroundColor:gP.fromHexAndA(3815994,1),postprocessing:vB.defaultData,fog:vL.defaultData,globalPhysics:vU.defaultData,ambient:vF.defaultData,ao:vN.defaultData,shadow:vz.defaultData,publish:vk.defaultData},(vj||(vj={})).defaultData={colliderType:"box",size:[100,100,100],colliderHelperVisible:!0,forceType:"collider",forceRange:"global",forceIntensity:.5,forceDambing:.95},(vM=vG||(vG={})).isComponentRelated=function(e){return"Component"===e||"Instance"===e},vM.isEmptyOrComponent=function(e){return"Empty"===e||"Instance"===e},(vC=vW||(vW={})).identity={...gD.identity,hiddenMatrix:gE.identity},vC.fromObject=function(e){return{position:e.position,rotation:e.rotation,scale:e.scale,pivot:e.pivot,pivotRotation:e.pivotRotation,hiddenMatrix:e.hiddenMatrix}},vC.merge=function(e,t){return{position:t?.position||e.position,rotation:t?.rotation||e.rotation,pivot:t?.pivot||e.pivot,pivotRotation:t?.pivotRotation||e.pivotRotation,scale:t?.scale||e.scale,hiddenMatrix:t?.hiddenMatrix||e.hiddenMatrix}},vC.diff=function(e,t){return vy({position:gA.isEqual(e.position,t.position)?void 0:t.position,rotation:gA.isEqual(e.rotation,t.rotation)?void 0:t.rotation,scale:gA.isEqual(e.scale,t.scale)?null:t.scale,hiddenMatrix:gE.isEqual(e.hiddenMatrix,t.hiddenMatrix)?void 0:t.hiddenMatrix})};var vS,v_,vA,vM,vC,vE,vT,vP,vD,vO,vI,vR,vL,vB,vz,vF,vN,vU,vk,vV,vj,vG,vW,vH,vq=["slide","offset"];(vH||(vH={})).defaultData={states:new pY,events:new pY,timelineAnimations:new pV,visible:!0,raycastLock:!1,physics:g0.defaultData,pathSnapping:{pathId:null,slide:0,offset:0,orientation:"tangential"},...vW.identity,cloner:null},(xs||(xs={})).defaultData={type:"Empty",...vH.defaultData},(xa||(xa={})).defaultData={type:"ParticleCollider",...vj.defaultData,...vH.defaultData},(xn||(xn={})).defaultData={type:"Component",...vH.defaultData},(xo||(xo={})).defaultData={type:"Particle",...vH.defaultData,...g$.defaultData},(xl||(xl={})).defaultData={type:"Mesh",...vH.defaultData,...g6.defaultData},(xh||(xh={})).defaultData={...vH.defaultData,...vW.identity,position:[0,0,gY.DefaultTargetOffset],...gY.defaultData},(y4=xc||(xc={})).defaultData=function(e){return{...vH.defaultData,...gJ.defaultData(e)}},y4.defaultDirectionalLightData={...y4.defaultData("DirectionalLight"),position:[200,300,300],name:"Directional Light",intensity:.7};var vX=xd||(xd={});function vY(e,t,i=0){for(;i<t.length;){let r=e?e[t[i]]:void 0;if(t.length===i+1)return r;if(!r)return;e=r.descendants,i+=1}}vX.resolveWithDes=vY,vX.resolve=function(e,t,i=0){let r=vY(e,t,i);if(r){let e=Object.keys(r);if(1===e.length&&"descendants"===e[0])return}return r};var vQ=xu||(xu={});function vZ(e,t){return{...vH.defaultData,...t,component:e,overrides:new p$,physics:void 0,events:void 0,type:"Instance"}}vQ.rootOverrideProps=["physics","events"],vQ.compositeNonOptionalOverrideProps=["geometry"],vQ.compositeEntireOverrideOverrideProps=["material"],vQ.ofComponent=vZ,vQ.fromComponentData=function(e){let t=vW.fromObject(e.data);return vZ(e.id,t)},(y5=xp||(xp={})).defaultData={type:"Page",...vH.defaultData,physics:{...g0.defaultData,fusedBody:!1},...vV.defaultData,camera:xh.defaultData},y5.isUIPage=function(e){return void 0!==e.uiScene},(C=xf||(xf={})).defaultCamera={position:[0,0,1e3],scale:[1,1,1],rotation:[0,0,0],pivot:[0,0,0],pivotRotation:[0,0,0],hiddenMatrix:gE.identity,name:"Play Camera",visible:!0,raycastLock:!1,physics:g0.defaultData,states:new pY,events:new pY,timelineAnimations:new pV,cloner:null,pathSnapping:{pathId:null,orientation:"tangential",slide:0,offset:0},...gY.defaultData},C.KeysByResetCategory={States:["states"],Events:["events"],Material:["material","materials"],Geometry:["geometry"],Position:["position"],Rotation:["rotation"],Scale:["scale"],Transform:["position","scale","rotation","hiddenMatrix"],Name:["name"],Visibility:["visible","raycastLock","flatShading","wireframe","side"],Shadows:["castShadow","receiveShadow"],Cloner:["cloner"],Physics:["physics"]},C.defaultMeshObject={name:"Rectangle",...vH.defaultData,...xl.defaultData,geometry:vR.defaultData("RectangleGeometry"),material:vE.defaultTwoLayerData("phong","layer1","layer2")},C.defaultBooleanObject={name:"Boolean",...vH.defaultData,...xl.defaultData,geometry:vR.defaultData("BooleanGeometry"),material:vE.defaultTwoLayerData("phong","layer1","layer2")},C.defaultShapeBlendObject={name:"Shape Blend",...vH.defaultData,...xl.defaultData,geometry:vR.defaultData("ShapeBlendGeometry"),material:vE.defaultTwoLayerData("phong","layer1","layer2")},C.defaultTextObject={name:"Text",...vH.defaultData,...xl.defaultData,geometry:vR.defaultData("TextGeometry"),material:vE.defaultTwoLayerData("phong","layer1","layer2")},C.defaultInputObject={name:"Input",...vH.defaultData,...xl.defaultData,geometry:vR.defaultData("InputGeometry"),material:vE.defaultTwoLayerData("phong","layer1","layer2")},(y6=xm||(xm={}
3135)).newEmpty=function(e,t){let i={name:t};return"Mesh"===e.type?(i.geometry={},"material"in e&&(i.material={layers:new p$}),"materials"in e&&(i.materials=e.materials.map(e=>({layers:new p$})))):gX.is(e.type)&&(i.perspective={},i.orthographic={}),i},y6.toOps=function(e,t){let i,r=[],a={orthographic:0,perspective:0,geometry:0};function o(e,t){for(let[i,a]of Object.entries(t.layers)){let{texture:t,...o}=a;if(void 0!==t&&Object.keys(t).length>0){let a={path:[...e,"layers",i,"texture"],props:t,type:0};r.push(a)}if(Object.keys(o).length>0){let t={path:[...e,"layers",i],props:o,type:0};r.push(t)}}}for(let[e,l]of Object.entries(t))if("name"!==e)if("cloner"===e)r.push(...gZ.toOps(l,["cloner"]));else if("pathSnapping"===e)r.push({path:[e],props:{slide:l.slide,offset:l.offset},type:0});else if("material"===e)o(["material"],l);else if("materials"===e)for(let[e,t]of Object.entries(l))o(["materials",e],t);else if(0===a[e]){if("geometry"===e&&void 0!==l.extrusion){let t={path:[e,"extrusion"],props:l.extrusion,type:0};r.push(t),l={...l},delete l.extrusion}if(Object.keys(l).length>0){let t={path:[e],props:l,type:0};r.push(t)}}else void 0===i&&(i={path:[],props:{},type:0},r.push(i)),i.props[e]=l;return r},y6.patch=function(e,t){if(void 0===t)return e;let i={...e};return(Object.assign(i,vW.merge(i,t)),Object.assign(i,{pathSnapping:Object.assign({},i.pathSnapping,{slide:t.pathSnapping?.slide??i.pathSnapping?.slide??0,offset:t.pathSnapping?.offset??i.pathSnapping?.offset??0})}),gX.is(e.type))?(i.orthographic={...i.orthographic},i.perspective={...i.perspective},t.orthographic?.zoom!==void 0&&(i.orthographic.zoom=t.orthographic.zoom),t.perspective?.zoom!==void 0&&(i.perspective.zoom=t.perspective.zoom),void 0!==t.isUpVectorFlipped&&(i.isUpVectorFlipped=t.isUpVectorFlipped),void 0!==t.targetOffset&&(i.targetOffset=t.targetOffset)):"Mesh"===e.type?("geometry"in t&&Object.assign(i,{geometry:vI.merge(i.geometry,t.geometry)}),(t.material||t.materials)&&(i=function(e,t){if(void 0===t)return e;let i={...e};return"material"in i&&"material"in t&&t.material&&(i.material=fu(i.material,e=>{if("string"!=typeof e)for(let[i,r]of Object.entries(t.material.layers)){let t=e.layers.data(i);t&&vt.patch(t,r)}}).data),i.materials&&t.materials&&(i.materials=fu(i.materials,e=>{for(let r=0;r<i.materials.length;r++){let i=t.materials[r];if("string"!=typeof i)for(let[t,a]of Object.entries(i.layers)){let i=e[r]?.layers?.data(t);i&&vt.patch(i,a)}}}).data),i}(i,t)),i.cloner&&"cloner"in t&&Object.assign(i,{cloner:gQ.merge(i.cloner,t.cloner)})):"Empty"===e.type?i.cloner&&"cloner"in t&&Object.assign(i,{cloner:gQ.merge(i.cloner,t.cloner)}):gK.is(e.type)&&(void 0!==t.intensity&&(i.intensity=t.intensity),void 0!==t.color&&("string"==typeof t.color?i.color=t.color:i.color=gT.clone(t.color))),i},(xg||(xg={})).defaultData={enablePan:!0,enableZoom:!0,enableRotate:!0,enableDamping:!0,rotationLimitsMode:0,rotationVerticalOffset:{min:Math.PI/4,max:Math.PI/4},rotationHorizontalOffset:{min:Math.PI/4,max:Math.PI/4},rotationSoftLimit:2,rotationSpeed:1,panLimitsMode:0,panVerticalOffset:{min:250,max:250},panHorizontalOffset:{min:250,max:250},panSoftLimit:2,zoomLimitsEnabled:!1,zoomLimits:{min:.1,max:2},autoRotate:!1,autoRotateSpeed:2,autoRotateClockwise:!0,hoverRotatePanMode:0,hoverRotatePanStrength:20,hoverRotateDamping:.125,isTouchZoom:!0,orbitTouches:2,panTouches:3,resetHoverEffectOnPointerLeave:!0},(xv||(xv={})).defaultData={orbitControls:xg.defaultData,playPage:gv,withBackground:!0,preventScroll:!1,preventTouchScroll:!1,hideCursor:!1,mouseEventTarget:"canvas",joystickSizeAndXYOffset:Array(12).fill(0).map((e,t)=>{let i=0,r=0;return t<5?r=-30:t<10&&(r=30),0===t||10===t||5===t?i=30:(4===t||11===t||9===t)&&(i=-30),[120,[i,r],"show"]}),settings:{image:{format:"jpg",ratio:1,colorSpace:"display-p3"},videoStatic:{fps:60,mbps:150,ratio:1,duration:1e3,format:"mp4",imageFormat:"jpg",activeTimeline:null,colorSpace:"display-p3"},web:{logo:!0,compress:!0,preset:1,preload:!0,hint:!1,imageQuality:70,pixelRatioMobile:0,pixelRatioDesktop:0}},stopRaycast:!0,hdTransmission:!1},(xy||(xy={})).defaultData={id:"basic",label:"Basic",style:"None",prompt:""},(xx||(xx={})).defaultData={weather:0,shadows:0,lightOrigin:0,temperature:0,sun:0,camera:0,environment:0,particles:0,nature:0,floor:0},(E=xb||(xb={})).defaultData=()=>({mode:"line-art-both",prompt:"",negativePrompt:"",style:{...xy.defaultData},isRandomSeed:!0,seed:E.generateSeed(),guessMode:!1,advanced:!1,steps:20,guidanceScale:7.5,controlNetScale:1,modifiers:xx.defaultData}),E.generateSeed=()=>Math.round(1e5*Math.random()),(y8=xw||(xw={})).physicsEnabled=function(e){return void 0!==e.find(e=>"Page"===e.data.type&&e.data.globalPhysics.usePhysics)},y8.traverseModuleInstances=function(e,t,i){e.scene.objects.traverseFrom(t,(t,r)=>{if("Instance"===r.type){let a=xL.getComponentData(e,r.component)?.data;a&&i(t,r,a.events)}else i(t,r,r.events)})};var vK=xS||(xS={});function vJ(e=!0,t=[]){let i=[],r=xf.defaultMeshObject;e&&(i.push({...vK.defaultLight}
vendor: 4,076 bytes, line 3135
3135),i.push({fi:1,id:"7ba78968-2a55-48f2-b14c-5191da3e075e",data:r,children:[]})),i.push(...t);let a=new pX;return a.push({fi:1,id:gv,data:{...xp.defaultData,name:"Scene 1"},children:i}),a}function v$(e){return{...vK.defaultData,objects:vx(e,pX.prototype)}}vK.TRASH_CAN_ID="830a2708-8ed9-49cf-a68e-085299892222",vK.defaultLight={fi:-1,data:xc.defaultDirectionalLightData,id:"830a2708-8ed9-49cf-a68e-085299899103",children:[]},vK.createDefaultObjectTreeWithPage=vJ,vK.defaultData={objects:vJ(),publish:xv.defaultData,styles:xb.defaultData()},vK.emptyDataWithoutPage=function(){return{objects:new pX,publish:xv.defaultData,styles:xb.defaultData()}},vK.emptyDataWithPage=function(e=!0){return{objects:vJ(e),publish:xv.defaultData,styles:xb.defaultData()}},vK.emptyData=function(){return{objects:new pX,publish:{...xv.defaultData},styles:xb.defaultData()}},vK.withObjs=v$,vK.withObj=function(e,t){return v$([{id:e,data:t,children:[],fi:0}])},(x_||(x_={})).defaultData={preset:"fullscreen",allowResponsive:!1,size:[512,512],coords:[0,0],sceneScale:1,color:{r:0,g:0,b:0,a:.5}},(T=xA||(xA={})).defaultData=e=>({url:e,name:"New Webhook",parametersSchemas:new pY}),T.defaultParameterValueByType=e=>"number"===e?0:"boolean"!==e&&"",(xM||(xM={})).defaultData=(e,t="GET")=>({url:e,method:t,name:"New API",headers:new pY,queries:new pY,autoStart:!0});var v0=xC||(xC={});function v1(e){return void 0!==e.textValue}function v2(e){return"boolean"==typeof e}function v3(e){e.layers.forEach(e=>{if("depth"===e.type&&void 0!==e.colorA){let t=e.colorA,i=e.colorB,r=[[t.r,t.g,t.b,t.a],[i.r,i.g,i.b,i.a]],a=[0,1];for(let e=2;e<10;e++)r.push(r[1]),a.push(1);let o={...pl(fp(e),"type","visible","isVector","isWorldSpace","origin","alpha","mode"),near:Math.max(0,e.near),far:Math.max(0,e.far),colors:r,steps:a,num:2,direction:[1,0,0],smooth:!1,gradientType:1};Object.assign(e,o)}else if("depth"===e.type&&1===e.gradientType&&(e.near<0||e.far<0)){let t={...fp(e),near:Math.max(e.near,0),far:Math.max(e.far,0)};Object.assign(e,t)}})}function v4(e,t){Object.values(e.shared.materials).forEach(e=>t(e))}function v5(e,t){e.scene.objects.traverse((e,i)=>{"materials"in i?i.materials.forEach((e,r)=>{void 0===e&&(i.materials[r]=vE.defaultData(),e=i.materials[r]),"string"!=typeof e&&t(e)}):"material"in i?"string"!=typeof i.material&&(void 0===i.material&&(i.material=vE.defaultData()),t(i.material)):"Mesh"===i.type&&(void 0===i.material&&(i.material=vE.defaultData()),t(i.material)),"overrides"in i&&Object.values(i.overrides).forEach(e=>{e.material&&"string"!=typeof e.material&&Object.getPrototypeOf(e.material)!==p$.prototype&&t(e.material)})})}function v6(e){void 0===e.layers&&Object.assign(e,vE.defaultTwoLayerData("lambert"))}function v8(e){e.layers&&e.layers.forEach(e=>{if("depth"===e.type&&10===e.colors.length){let t=[...e.colors];t.push(e.colors[9]);let i=[...e.steps];i.push(e.steps[9]);let r={...fp(e),colors:t,steps:i};Object.assign(e,r)}})}function v9(e){e.scene.objects.traverse((e,t)=>{"materials"in t?t.materials.forEach(e=>{"string"!=typeof e&&v8(e)}):"material"in t&&"string"!=typeof t.material&&v8(t.material)}),Object.values(e.shared.materials).forEach(e=>v8(e))}function v7(e){e.layers&&e.layers.forEach(e=>{"depth"===e.type&&void 0!==e.num&&(e.colors=e.colors.slice(0,e.num),e.steps=e.steps.slice(0,e.num),delete e.num)})}function ye(e){e.layers&&e.layers.forEach(e=>{"displace"!==e.type&&void 0===e.isMask&&(e.isMask=!1),("texture"===e.type||"video"===e.type)&&void 0===e.blending&&(e.blending=0),("noise"===e.type||"displace"===e.type&&"noise"===e.displacementType)&&(void 0===e.voronoiStyle&&(e.voronoiStyle=0),void 0===e.highCut&&(e.highCut=1),void 0===e.lowCut&&(e.lowCut=0),void 0===e.smoothness&&(e.smoothness=.3),void 0===e.seed&&(e.seed=0),void 0===e.quality&&(e.quality=1))})}function yt(e){let t=e.layers.find(e=>"light"===e.type)?.data;t?.category==="basic"&&(Object.assign(t,vt.defaultData("light","phong")),t.visible=!1)}function yi(e){v4(e,yt),v5(e,yt)}function yr(e){e.layers.forEach(e=>{"light"===e.type&&"toon"!==e.category&&void 0===e.occlusion&&(e.occlusion=!0)})}
3135function ys(e){e.layers&&e.layers.forEach(e=>{"light"===e.type&&void 0===e.bumpMapIntensity&&(e.bumpMapIntensity=5)})}function ya(e){e.layers&&e.layers.forEach(e=>{"light"===e.type&&void 0===e.alphaOverride&&(e.alphaOverride=1)})}v0.isTextValue=v1,v0.isNumber=function(e){return"number"==typeof e},v0.isBoolean=v2,v0.typeOfVariable=function(e){return v1(e)?"string":v2(e)?"boolean":"number"},v0.getDisplayedValue=function(e){return v0.isTextValue(e)?Array.isArray(e.textValue)?e.textValue.map(t=>t.toString().padStart(e.padding??2,"0")).join(e.deliminator??":")+(void 0!==e.suffix?" "+e.suffix:""):e.textValue.toString():v0.isBoolean(e)?e?"True":"False":v0.isNumber(e)?parseFloat(e.toFixed(3)).toString():e.toString()},(xE||(xE={})).all=["images","videos","colors","audios","particles","fonts","materials","variables"],(xT||(xT={})).all=[...xE.all,"components"],(xP||(xP={})).defaultData=function(){return{images:new pV,videos:new pV,colors:new pV,audios:new pV,particles:new pV,fonts:new pV,materials:new pV,components:new pV,variables:new pV,userAPIs:new pV,userWebhooks:new pV,timelineAnimations:new pV}},(xD||(xD={})).defaultData=function(){return{images:new pV,videos:new pV,colors:new pV,audios:new pV,particles:new pV,fonts:new pV,materials:new pV,components:new pV,variables:new pV,userAPIs:new pV,userWebhooks:new pV,timelineAnimations:new pV}},(y9=xO||(xO={})).defaultColors=function(){let e={};return e["89b10010-844c-11ec-a8a3-0242ac120002"]={r:.5,g:.5,b:.5,a:1,name:"Default Color"},vx(e,pV.prototype)},y9.defaultImages=function(){return vx({},pV.prototype)},y9.emptyData=function(){return{catelogs:new pV,materials:new pV,images:new pV,videos:new pV,colors:new pV,timelineAnimations:new pV,audios:new pV,particles:new pV,fonts:new pV,variables:new pY,userAPIs:new pV,userWebhooks:new pV,lib:xD.defaultData()}},y9.defaultVariables=function(e){switch(e){case"number":return{value:0,name:"Number"};case"boolean":return{value:!1,name:"Boolean"};case"string":return{value:{textValue:"String value"},name:"String"};case"time":let t=[0,0,0];return{name:"Time",value:{textValue:t,deliminator:":",padding:2,suffix:"AM"},dynamicVariableType:"time",format:"HH:mm:ss",format12h24h:"12ampm",timeZone:null,hasEnd:!1,endValue:{textValue:t,deliminator:":",padding:2,suffix:"AM"},autoStart:!0,repeat:!1};case"counter":return{name:"Counter",value:0,dynamicVariableType:"counter",updateInterval:1e3,increment:1,autoStart:!0,hasEnd:!0,endValue:60,repeat:!0,randomStart:!1,range:[0,100],decimals:0};case"random":return{name:"Random",value:0,dynamicVariableType:"random",updateInterval:1e3,increment:1,autoStart:!0,isStatic:!1,hasEnd:!0,endValue:60,repeat:!0,min:0,max:100,decimals:0}}},y9.getFormattedTimerTime=function(e,t){if("HH:mm:ss"===t.format){let t=Math.floor(e/3600),i=Math.floor((e-3600*t)/60),r=Math.round(e-3600*t-60*i);return{textValue:[t,i,r]}}if("mm:ss"!==t.format)return"number"===t.format?Math.round(e):Math.round(1e3*e)/1e3;{let t=Math.floor(e/60),i=Math.round(e-60*t);return{textValue:[t,i]}}},(xI||(xI={})).list=["idle","move","jump","run"],(P=xR||(xR={})).defaultColliderData={type:"capsule",height:200,radius:50,position:[0,0,0],rotation:[0,0,0]},P.defaultDataThirdPerson={moveMode:"walk",forwardDirection:"+z",speedTranslate:1e3,speedRotate:100,runMultiplier:2,rotationMode:"normal",rotBy:"keys",rotByTouch:"drag",delayPos:[.3,.3],delayRot:[.3,.3],keyAssignments:[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","▲"],["rotPosY","◀"],["rotNegX","▼"],["rotNegY","▶"],["jump","Space"],["run","⇧"],["none","Ctrl"]],touchControl:!0,joystickPosLoc:5,joystickRotLoc:11,jumpTouchButtonLoc:9,collider:P.defaultColliderData,colliderHelperVisible:!0,collisionEnabled:!0,jumpPower:100,resetYPosition:3e3,alignToGround:!1,autoOrientMove:!0,orientWith:"camera",orientMode:"radial",delayPosCamera:.3,delayRotCamera:.3,camera:"",cameraXAxis:"Limit",cameraYAxis:"Free",cameraRotXLimits:[0,Math.PI/2],cameraRotYLimits:[-Math.PI/2,Math.PI/2],gameActions:{idle:new pY,move:new pY,jump:new pY,run:new pY},navmesh:{enabled:!1,ch:6,cs:6,walkableClimb:5,walkableHeight:1,walkableRadius:0,zones:"all",objects:[],helperVisible:!0,destinationHelperRadius:0,destinationHelperColor:gP.fromHexAndA(3728051,1)}};var yn=180/Math.PI;function yo(e){e.rotation=e.rotation.slice(0,3).map(e=>e*yn)}function yl(e){yo(e),"Page"===e.type&&yo(e.camera),e.states?.forEach(e
3135=>{void 0===e.rotation||null===e.rotation||(e.rotation=e.rotation.slice(0,3).map(e=>e*yn))});let t=e.geometry;t&&"SphereGeometry"===t.type&&(t.thetaLength=(t.thetaLength??180)*yn),t&&"TorusGeometry"===t.type&&(t.arc=t.arc*yn),t&&"PathGeometry"===t.type&&(t.extrusion.angle*=yn,t.extrusion.twist*=yn),"Mesh"===e.type&&"TextGeometry"===e.geometry.type&&(e.geometry.text={textValue:e.geometry.text}),Array.isArray(fp(e.events))&&e.events?.forEach(e=>{("MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"KeyPress"===e.type||"Collision"===e.type||"Trigger"===e.type)&&(e.runMode=e.toggle?"Toggle":"Repeat")})}function yh(e,t){for(let i of(t(e.data),e.children))yh(i,t)}function yc(e){e.timelineAnimations=vx({},pV.prototype)}function yd(e){e.pivot=[0,0,0],e.pivotRotation=[0,0,0]}function yu(e){let t=e.schema??0;if(122!==t){let i;for(let i of(function(e,t){let i,r,a,o;if(t<1&&(v5(e,v3),v4(e,v3),e.schema=1),t<2&&(Object.assign(e.scene.publish,{orbitControls:{...xg.defaultData,...fp(e.scene.publish.orbitControls)}}),e.schema=2),t<3&&(function(e){function t(e){if(e.layers){for(let t of Object.values(e.layers))if(t){for(let[e,i]of Object.entries(t))if((vc.includes(e)||"boolean"==typeof i)&&delete t[e],"texture"===e)for(let[e,t]of Object.entries(i))(vd.includes(e)||"boolean"==typeof t)&&delete i[e]}}}e.scene.objects.traverse((e,i)=>{i.states.forEach(e=>{e.material?t(e.material):e.materials&&e.materials.forEach(e=>{t(e)})})})}(e),e.schema=3),t<4&&(e.scene.publish.withBackground=!0,e.schema=4),t<5&&(e.scene.publish.settings.web={compress:!0,preload:!0,preset:1,logo:!0,hint:!1},e.schema=5),t<6&&(e.scene.objects.traverse((e,t)=>{let i=t.cloner;i&&(i.radial.scale=i.radial.scale.map(e=>e+1),i.linear.scale=i.linear.scale.map(e=>e+1))}),e.schema=6),t<7&&(e.scene.objects.traverse((e,t)=>{let i=t.geometry;i&&("DodecahedronGeometry"===i.type||"IcosahedronGeometry"===i.type)&&(i.detail=Math.round(i.detail))}),e.schema=7),t<8&&(e.schema=8),t<9&&(v9(e),e.schema=9),t<10&&(e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&("BooleanGeometry"===t.geometry.type||"SubdivGeometry"===t.geometry.type)&&(t.geometry.phongAngle=35)}),e.schema=10),t<11&&(e.scene.environment.ambientLight.softShadows=!1,e.scene.environment.ambientLight.softShadowQuality="low",e.scene.objects.traverse((e,t)=>{("DirectionalLight"===t.type||"SpotLight"===t.type)&&(t.shadowResolution=1024,t.shadowRadius=1,t.depth=1e5)}),e.shared.penumbraSize=[,,,,,].fill(.5),e.schema=11),t<12&&(v9(e),e.schema=12),t<13&&(e.shared.audios=vx({},pV.prototype),e.schema=13),t<14&&(Object.entries(i=e.shared.materials).forEach(([e,t])=>{t.layers||Object.assign(i,{[e]:{name:"Untitled Material",layers:[{fi:0,data:{type:"light",category:"phong",alpha:.6,visible:!0,mode:0,specular:{r:.2,g:.2,b:.2},shininess:5},id:"layer1"},{fi:1,data:{type:"color",alpha:1,visible:!0,mode:0,color:{r:.2823529411764706,g:.2823529411764706,b:.30196078431372547}},id:"layer2"}]}})}),e.schema=14),t<15&&(Object.entries(fp(e.shared.images)).filter(e=>!1===e[1].asset).map(e=>e[0]).forEach(t=>{delete e.shared.images[t]}),Object.entries(fp(e.shared.audios)).filter(e=>!1===e[1].asset).map(e=>e[0]).forEach(t=>{delete e.shared.audios[t]}),e.schema=15),t<16&&(e.scene.publish.settings.web.preload=!1,e.schema=16),t<17&&(v5(e,v7),v4(e,v7),e.schema=17),t<18&&(v5(e,v6),v4(e,v6),e.schema=18),t<19&&(Object.assign(e.scene.publish.settings,{video:{...xv.defaultData.settings.video,...fp(e.scene.publish.settings.video)}}),e.schema=19),t<20&&(e.shared.fonts=vx({},pV.prototype),r=[],e.scene.objects.traverse((t,i)=>{if("TextFrame"===i.type){let a=vE.defaultTwoLayerData("phong"),o="string"==typeof i.color?e.shared.colors[i.color]:i.color;a.layers[1].data.color={r:o.r,g:o.g,b:o.b},a.layers[1].data.alpha=i.alpha;let l=i.font.replace(".typeface","").replace(/optimer/gi,"open sans").replace("space_mono","space mono").replace(/alma_mono/gi,"varela round").replace(/droid_sans_mono/gi,"noto sans mono").replace(/droid_sans|gentilis|gnomon_(simple|foreground)|helvetiker/gi,"roboto").replace(/droid_serif/gi,"roboto slab").replace("_sans"," sans").replace("crimson_text","crimson text").replace("medium_medium","medium").replace("fatface_fatface","fatface").replace("100hairline","thin").replace("200thin","extralight").replace("300light","light").replace("500medium","medium").replace("600semi","semibold").replace("800heavy","extrabold").replace("900black","black").replace(/bodoni_(11|16|24|36|48|72|96)([^_])/gi,"bodoni_$1_$2").replace(/bodoni_(11|16|24|36|48|72|96)/gi,"bodoni moda").replace(/(thin|hairline)(_regular)?/gi,"100").replace(/(extra|ultra)light(_regular)?/gi,"200").replace(/light(_regular)?/gi,"300").replace(/_book|_normal|_roman/gi,"_regular").replace(/medium(_regular)?/gi,"500").replace(/(semi|demi)bold(_regular)?/gi,"600").replace(/(extra|ultra)bold(_regular)?/gi,"800").replace(/bold(_regular)?/gi,"700").replace(/(black|heavy|fatface)(_regular)?/gi,"900").replace(/([1-9]00)_italic/gi,"$1italic").replace(/regularitalic/gi,"italic").replace(/regularitalic/gi,"italic").split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");void 0===e.shared.fonts[l]&&(e.shared.fonts[l]={name:l});let h={name:i.name,...vH.defaultData,...xl.defaultData,flatShading:!1,wireframe:!1,geometry:{...vR.defaultData("TextGeometry"),width:i.width,height:i.height,font:l,depth:0,horizontalAlign:i.horizontalAlign,verticalAlign:i.verticalAlign,fontSize:1.40625*i.fontSize,lineHeight:i.lineHeight/1.40625,letterSpacing:i.letterSpacing-1,text:i.text,textTransform:i.textTransform,extrudeBevelSize:0,extrudeBevelSegments:1},material:a,states:fp(i.states),events:fp(i.events),visible:i.visible,raycastLock:i.raycastLock,position:i.position,rotation:i.rotation,scale:i.scale,hiddenMatrix:i.hiddenMatrix},c=fp(e.scene.objects).parent(t);e.scene.objects.insertAfter(c??null,t,[{id:t+"new",data:h,children:[]}]),r.push(t)}}),r.forEach(t=>{e.scene.objects.delete(t)}),e.schema=20),t<21&&(a={0:"MouseDown",1:"MouseUp",2:"MouseHover",5:"KeyDown",6:"KeyUp",7:"Start",9:"LookAt",10:"Follow",11:"Scroll",12:"Audio",13:"GameControl"},e.scene.objects.traverse((e,t)=>
3135{t.events.forEach(e=>{if(a[Number(e.type)])if(Object.assign(e,{type:a[Number(e.type)]}),"Audio"===e.type&&"audioEvent"in e&&(Object.assign(e,{playAudio:e.audioEvent}),delete e.audioEvent),"GameControl"===e.type)Object.assign(e,{gameActions:{idle:new pY,move:new pY,jump:new pY}});else{let t=new pY;Object.assign(e,{actions:t}),("MouseDown"===e.type||"MouseUp"===e.type||"KeyDown"===e.type||"KeyUp"===e.type)&&"url"in e&&t.push({fi:0,id:t8.generateUUID(),data:{type:"Link",url:e.url,delay:0}}),"targets"in e&&(e.targets.forEach((e,i,r)=>{let a={easing:e.easing,duration:e.duration};6===e.easing?Object.assign(a,pl(e,"mass","stiffness","damping","velocity")):5===e.easing&&Object.assign(a,{control1:{...e.control1},control2:{...e.control2}});let o={repeat:e.repeat?-1:0,delay:e.delay,delayDirection:e.delayDirection,direction:e.cycle&&e.rewind?"pingpong-rewind":e.cycle?"pingpong":"normal"},l={state:e.state,...o,...a},h={allowSlerp:!0,type:"Transition",object:e.object,repeat:0,delay:0,delayDirection:void 0,direction:"normal",tweens:new pY({fi:0,id:t8.generateUUID(),data:{state:void 0,repeat:0,delay:0,delayDirection:void 0,direction:"normal",duration:0,easing:4}},{fi:1,id:t8.generateUUID(),data:l})};t.push({fi:r,id:i,data:h})}),delete e.targets)}})}),e.scene.objects.traverse((e,t)=>{function i(e,i){let r=new pY,a=[];if(t.events.forEach((e,t,o)=>{if("Audio"===e.type&&e.trigger===i){let i;a.push(t),"play"===e.interaction?i={...pl(e,"interaction","audio","delay","volume","loop"),triggerAfter:"after"in e?e.after:void 0,toggle:"after"in e?e.toggle:void 0,type:"Audio"}:("pause"===e.interaction||"stop"===e.interaction)&&(i={...pl(e,"interaction","delay","object","playAudio"),type:"Audio"}),i&&r.push({fi:o,id:t,data:i})}}),a.forEach(e=>t.events.delete(e)),r.length){let i=t.events.find(t=>t.type===e)?.data;i?"actions"in i&&i.actions.insertBefore(null,r):t.events.insertBefore(null,[{id:t8.generateUUID(),data:{type:e,actions:r}}])}}i("Start","start"),i("MouseDown","mouseDown"),i("MouseUp","mouseUp"),i("KeyDown","keyDown"),i("KeyUp","keyUp")}),e.schema=21),t<22&&(yi(e),e.schema=22),t<23&&(e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"SubdivGeometry"===t.geometry.type&&(t.geometry.scaleBaked||(t.geometry.scaleBaked=[1,1,1]))}),e.schema=23),t<24&&(e.scene.objects.traverse((e,t)=>{"Empty"!==t.type&&"Mesh"!==t.type||!t.cloner||t.cloner.randomnessObject||t.cloner.toObject||t.cloner.randomness||(t.cloner={...t.cloner,toObject:{object:"",spreadType:"random",scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],axis:"x",seed:0,count:99,align:"normal"},randomness:!1,randomnessObject:{strength:100,scale:[0,0,0],rotation:[0,0,0],position:[0,0,0],movement:1,seed:0,freqScale:10,noiseType:"perlin"}})}),e.schema=24),(t<25||void 0===e.shared.videos)&&(e.shared.videos=vx({},pV.prototype),t<25&&(e.schema=25)),t<26&&(e.scene.objects.traverse((t,i)=>{let r=e.scene.objects.unproxy().parent(t);if(r){let t=fp(e.scene.objects.data(r));t&&"Mesh"===t.type&&"BooleanGeometry"===t.geometry.type&&"Mesh"===i.type&&(i.visible=!0!==fp(i).booleanExclude)}}),e.schema=26),t<27&&(e.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&("NonParametricGeometry"===t.geometry.type?void 0!==t.material&&delete t.material:void 0!==t.materials&&delete t.materials)}),e.schema=27),t<28&&(yi(e),e.schema=28),t<29&&(function(e){function t(e){for(let i in Object.setPrototypeOf(e,p$.prototype),e){var t;Object.setPrototypeOf(t=e[i],p$.prototype),t.texture&&Object.setPrototypeOf(t.texture,p$.prototype)}}e.scene.objects.traverse((e,i)=>{i.states.forEach(e=>{if(e.material){let i=fp(e.material).layers;t(i),e.material.layers=i}if(e.materials)for(let i=0;i<e.materials.length;i++){let r=e.materials[i],a=fp(r).layers;t(a),r.layers=a}})})}(e),e.schema=29),t<30&&(e.scene.objects.traverse((e,t)=>{"Mesh"!==t.type||"NonParametricGeometry"!==t.geometry.type||"material"in t||"materials"in t||(t.material=vE.defaultTwoLayerData("phong"))}),e.schema=30),t<31&&(void 0===e.scene.publish.orbitControls.autoZoom&&(e.scene.publish.orbitControls.autoZoom=!1),e.scene.objects.traverse((e,t)=>{("OrthographicCamera"===t.type||"PerspectiveCamera"===t.type)&&(void 0===t.orthographic.autoZoom&&(t.orthographic.autoZoom=!1),void 0===t.orthographic.autoZoomFrustumSize&&(t.orthographic.autoZoomFrustumSize=790))}),e.schema=31),t<33&&(e.scene.objects.traverse((e,t)=>
3135{void 0===t.pathSnapping&&(t.pathSnapping={pathId:null,slide:0,offset:0,orientation:"tangential"}),void 0===t.pathSnapping.offset&&(t.pathSnapping.offset=0)}),e.schema=33),t<34&&(void 0===e.scene.publish.mouseEventTarget&&(e.scene.publish.mouseEventTarget="canvas"),void 0===e.scene.publish.settings.web.hint&&(e.scene.publish.settings.web.hint=!1),e.schema=34),t<35&&(function(e){let{video:t}=e.scene.publish.settings;"gif"===t.format&&t.fps>48&&(t.fps=15)}(e),e.schema=35),t<36&&(e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.resetYPosition=Math.abs(e.resetYPosition-t.position[1]))})}),e.schema=36),t<37&&(o=e.scene.environment.usePhysics,e.scene.objects.traverse((e,t)=>{o&&null===t.physics?t.collision=!1:t.collision="visibility"}),e.schema=37),t<38&&(v5(e,ye),v4(e,ye),e.schema=38),t<39&&(e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.navmesh=xR.defaultDataThirdPerson.navmesh)})}),e.schema=39),t<40&&(e.scene.styles||(e.scene.styles=xb.defaultData()),e.schema=40),t<41&&(void 0===e.scene.environment.ambientLight.occlusion&&(e.scene.environment.ambientLight.occlusion=!1),void 0===e.scene.environment.ambientLight.aoFullRes&&(e.scene.environment.ambientLight.aoFullRes=!1),void 0===e.scene.environment.ambientLight.radius&&(e.scene.environment.ambientLight.radius=256),void 0===e.scene.environment.ambientLight.bias&&(e.scene.environment.ambientLight.bias=.5),void 0===e.scene.environment.ambientLight.aoColor&&(e.scene.environment.ambientLight.aoColor={r:.19607843137254902,g:.19607843137254902,b:.19607843137254902}),v5(e,yr),v4(e,yr),e.schema=41),t<42&&(e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&Object.assign(e.gameActions,{run:new pY})})}),e.schema=42),t<43&&(e.scene.objects.traverse((e,t)=>{t.events.forEach(e=>{"GameControl"===e.type&&(e.keyAssignments=[...e.keyAssignments,["run","⇧"],["none","Ctrl"]])})}),e.schema=43),t<99){v5(e,ys),v4(e,ys),null===e.scene.publish.playCamera&&(e.scene.publish.playCamera=gg);let t=fp(e.scene.objects),i=e.scene.objects;for(let r of(e.scene.publish.playPage=gv,i.insertBefore(null,null,[{id:gv,data:{...xp.defaultData,backgroundColor:e.scene.backgroundColor,fog:e.scene.fog,postprocessing:e.scene.postprocessing,ao:pl(e.scene.environment.ambientLight,"occlusion","aoFullRes","radius","bias","aoColor"),publish:{playCamera:e.scene.publish.playCamera,gameControlObject:e.scene.publish.gameControlObject},shadow:pl(e.scene.environment.ambientLight,"softShadowQuality"),globalPhysics:{...vU.defaultData,...pl(e.scene.environment,"usePhysics","gravity")},camera:fp(e.scene.ownerCamera)??xp.defaultData.camera,name:"Scene"},children:[]}]),t))r.id!==xS.TRASH_CAN_ID&&i.move(gv,r.fi,r.id);let r=0,a=0;
vendor: 5,043 bytes, line 3135
3135e.shared.penumbraSize&&e.scene.objects.traverse((t,i)=>{"DirectionalLight"===i.type?(i.penumbraSize=e.shared.penumbraSize[Math.min(r,2)],r+=1):"SpotLight"===i.type&&(i.penumbraSize=e.shared.penumbraSize[3+Math.min(a,1)],a+=1),(void 0===i.physics||null===i.physics)&&"Instance"!==i.type&&(i.physics={},Object.assign(i.physics,g0.defaultData)),void 0!==i.physics&&null!==i.physics&&(i.physics.enabled=i.collision??"visibility",delete i.collision)}),e.schema=99}}(e,t),t<100&&(void 0===e.scene.publish.joystickSizeAndXYOffset&&(e.scene.publish.joystickSizeAndXYOffset=xv.defaultData.joystickSizeAndXYOffset),e.schema=100),t<101&&(v5(e,ya),v4(e,ya),e.schema=101),t<102&&(e.scene.objects.traverse((e,t)=>{let i=t.geometry;i&&"PathGeometry"===i.type&&(i.extrusion.capType="flat",i.extrusion.bevel=50,i.extrusion.bevelSides=6,"Custom"===i.extrusion.shape.type&&(i.extrusion.shape.shapeQuality="low"))}),e.schema=102),t<104&&(e.shared.catelogs=new pV,e.shared.lib=xD.defaultData(),e.schema=104),t<105&&(e.shared.variables=vx({},pV.prototype),e.scene.objects.traverse((e,t)=>{yl(t)}),e.schema=105),Object.values(e.shared.lib.components)))!function(e){let t=e.schema??104;122!==t&&(t<105&&(yh(e.asset,yl),e.schema=105),t<118&&(yh(e.asset,yc),e.schema=118),t<121&&(yh(e.asset,yd),e.schema=121))}(i);t<106&&(i=fp(e.shared.variables),e.shared.variables=vx(Object.entries(i??{}).map(([e,t],i)=>({fi:i,id:e,data:t})),pY.prototype),e.schema=106),t<107&&(e.shared.lib.variables=xD.defaultData().variables,e.schema=107),t<109&&(e.shared.particles=vx({},pV.prototype),e.shared.lib&&(e.shared.lib.particles=xD.defaultData().particles),e.schema=109),t<110&&(e.scene.objects.traverse((e,t)=>{"Particle"===t.type&&"number"==typeof t.renderMaterial.size&&Object.assign(t.renderMaterial,{size:[t.renderMaterial.size,t.renderMaterial.size]})}),e.schema=110),t<111&&(e.scene.objects.traverse((e,t)=>{Array.isArray(fp(t.events))&&t.events?.forEach(e=>{"disabled"in e||(e.disabled=!1),("MouseDown"===e.type||"MouseUp"===e.type||"MousePress"===e.type)&&(e.mode=e.mode||"Object")})}),e.schema=111),t<112&&(e.scene.objects.traverse((e,t)=>{"Page"===t.type&&(t.postprocessing.depthOfField.focusDistance=100,t.postprocessing.depthOfField.focalLength=20,t.postprocessing.depthOfField.bokehScale=5)}),e.schema=112),t<113&&(e.scene.objects.traverse((e,t)=>{!1!==Array.isArray(fp(t.events))&&t.events?.forEach(e=>{let t=e.runMode;"MouseDown"===e.type||"MouseUp"===e.type||"KeyDown"===e.type||"KeyUp"===e.type||"Collision"===e.type||"Trigger"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode=t??"Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle"===t?"Toggle":"Normal")}):"MouseHover"===e.type||"MousePress"===e.type||"KeyPress"===e.type?e.actions?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")}):"GameControl"===e.type?(delete e.actions,Object.keys(e.gameActions).forEach(t=>{e.gameActions[t]?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),"Animation"===e.type&&(e.runMode="Normal")})})):"DragDrop"===e.type?(delete e.actions,e.dragDropActions?.drag?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")}),e.dragDropActions?.drop?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")})):"Resize"===e.type?(delete e.actions,e.breakpoints?.forEach(e=>{e.actions?.forEach(e=>{("Transition"===e.type||"Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Toggle")})})):"Start"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Once"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}):"VariableChange"===e.type||"Scroll"===e.type?e.actions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}):"Conditional"===e.type&&(delete e.actions,e.inActions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}),e.outActions?.forEach(e=>{"Transition"===e.type&&(e.runMode="Repeat"),("Animation"===e.type||"SwitchCamera"===e.type)&&(e.runMode="Normal")}))})}),e.schema=113),t<114&&(void 0===e.scene.publish.settings.web.imageQuality&&(e.scene.publish.settings.web.imageQuality=70),e.schema=114),t<115&&(e.shared.userAPIs=vx({},pV.prototype),e.shared.userWebhooks=vx({},pV.prototype),e.shared.lib&&(e.shared.lib.userAPIs=xD.defaultData().userAPIs,e.shared.lib.userWebhooks=xD.defaultData().userWebhooks),e.schema=115),t<116&&(void 0===e.scene.publish.settings.videoStatic&&(e.scene.publish.settings.videoStatic=xv.defaultData.settings.videoStatic),e.schema=116),t<117&&(void 0===e.scene.publish.settings.web.pixelRatioMobile&&(e.scene.publish.settings.web.pixelRatioMobile=0),void 0===e.scene.publish.settings.web.pixelRatioDesktop&&(e.scene.publish.settings.web.pixelRatioDesktop=0),e.schema=117),t<118&&(e.shared.timelineAnimations=vx({},pV.prototype),e.scene.objects.traverse((e,t)=>
3135{yc(t)}),e.schema=118),t<119&&(e.scene.publish.settings.videoStatic.format=xL.defaultData.scene.publish.settings.videoStatic.format,e.scene.publish.settings.videoStatic.imageFormat=xL.defaultData.scene.publish.settings.videoStatic.imageFormat,e.schema=119),t<120&&(e.scene.publish.settings.image.colorSpace="display-p3",e.scene.publish.settings.videoStatic.colorSpace="display-p3",e.schema=120),t<121&&(e.scene.objects.traverse((e,t)=>{yd(t),"Page"===t.type&&yd(t.camera)}),e.schema=121),t<122&&(delete e.scene.publish.settings.video,e.scene.publish.orbitControls.rotationSpeed=xL.defaultData.scene.publish.orbitControls.rotationSpeed,e.schema=122)}}function yp(e,t=!1){let i=null!==e[0].index,r=new Set(Object.keys(e[0].attributes)),a=new Set(Object.keys(e[0].morphAttributes)),o={},l={},h=e[0].morphTargetsRelative,c=new rQ,d=0;for(let p=0;p<e.length;++p){let f=e[p],m=0;if(i!==(null!==f.index))return null;for(let e in f.attributes){if(!r.has(e))return null;void 0===o[e]&&(o[e]=[]),o[e].push(f.attributes[e]),m++}if(m!==r.size||h!==f.morphTargetsRelative)return null;for(let e in f.morphAttributes){if(!a.has(e))return null;void 0===l[e]&&(l[e]=[]),l[e].push(f.morphAttributes[e])}if(t){let e;if(i)e=f.index.count;else{if(void 0===f.attributes.position)return null;e=f.attributes.position.count}c.addGroup(d,e,p),d+=e}}if(i){let t=0,i=[];for(let r=0;r<e.length;++r){let a=e[r].index;for(let e=0;e<a.count;++e)i.push(a.getX(e)+t);t+=e[r].attributes.position.count}c.setIndex(i)}for(let e in o){let t=yf(o[e]);if(!t)return null;c.setAttribute(e,t)}for(let e in l){let t=l[e][0].length;if(0===t)break;c.morphAttributes=c.morphAttributes||{},c.morphAttributes[e]=[];for(let i=0;i<t;++i){let t=[];for(let r=0;r<l[e].length;++r)t.push(l[e][r][i]);let r=yf(t);if(!r)return null;c.morphAttributes[e].push(r)}}return c}function yf(e){let t,i,r,a=0;for(let o=0;o<e.length;++o){let l=e[o];if(l.isInterleavedBufferAttribute||(void 0===t&&(t=l.array.constructor),t!==l.array.constructor)||(void 0===i&&(i=l.itemSize),i!==l.itemSize)||(void 0===r&&(r=l.normalized),r!==l.normalized))return null;a+=l.array.length}let o=new t(a),l=0;for(let t=0;t<e.length;++t)o.set(e[t].array,l),l+=e[t].array.length;return new rN(o,i,r)}function ym(e,t=[0,0]){return[e&&!isNaN(e[0])?e[0]:t[0],e&&!isNaN(e[1])?e[1]:t[1]]}function yg(e,t,i){switch(e){case 0:return"cubicBezier( 0, 0, 1, 1 )";case 1:return"cubicBezier( .25, .1, .25, 1 )";case 2:return"cubicBezier( .42, 0, 1, 1 )";case 3:return"cubicBezier( 0, 0, .58, 1 )";case 4:return"cubicBezier( .42, 0, .58, 1 )";case 7:return"cubicBezier( .25, 1, .5, 1 )";case 5:let{control1:r,control2:a}=t??{...gH.defaultData};return`cubicBezier( ${r[0]}, ${r[1]}, ${a[0]}, ${a[1]} )`;case 6:let{mass:o,stiffness:l,damping:h,velocity:c}=i??{...gO.defaultData},d=new yx(o,l,h,c),p=d.solve(1);return()=>e=>d.solve(e)/p;case 8:return()=>e=>Math.floor(e)}}function yv(e,t,i){return{id:t,fi:i,data:{id:t,path:e,keyframes:new pY}}}(y7=xL||(xL={})).defaultData={schema:122,scene:xS.defaultData,frames:new pV().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",x_.defaultData),shared:{...xO.emptyData(),colors:xO.defaultColors()}},y7.emptyDataForImports=function(){return{schema:122,scene:xS.emptyDataWithPage(),frames:new pV().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",x_.defaultData),shared:{...xO.emptyData(),colors:xO.defaultColors(),images:xO.defaultImages()}}},y7.emptyData=function(){return{schema:122,scene:xS.emptyDataWithPage(),frames:new pV().add("72fc2993-2da3-4b6b-96ac-2879db3a28bd",x_.defaultData),shared:xO.emptyData()}},y7.clipboard2dData=function(){return{schema:122,scene:xS.emptyData(),frames:new pV,shared:xO.emptyData()}},y7.collabHelper={...fA,updateSchema:e=>(e.schema??0)<122?fu(e,yu):(e.schema??0)-122},y7.updateSchemaDirectly=function(e){let t=y7.collabHelper.updateSchema(e);return"number"==typeof t?0===t?e:null:t.data},y7.withoutLib=function(e){return{...e,shared:{...e.shared,lib:xD.defaultData()}}},y7.getComponentData=function(e,t){let i=e.scene.objects.get(t);if(i&&"Component"===i.data.type)return i;{let i=e.shared.lib.components[t];if(i)return{...i.asset,id:t}}},y7.hasSensitiveData=function(e){for(let t of Object.values(e.shared.userAPIs))for(let e of t.headers)if("authorization"===e.data.key.toLowerCase()&&""!==e.data.value)return!0;return!1},(xB||(xB={})).emptyImage={data:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII=",name:"empty"},(xz||(xz={})).is=function(e){return!0},(xe=xF||(xF={})).defaultData={position:[0,0],scale:[1,1],rotation:0,shear:[0,0]},xe.merge=function(e,t){return{position:t?.position??e.position,rotation:t?.rotation??e.rotation,scale:t?.scale??e.scale,shear:t?.shear??e.shear}},xe.diff=function(e,t){return vy({position:gm.isEqual(e.position,t.position)?void 0:t.position,rotation:e.rotation===t.rotation?void 0:t.rotation,scale:gm.isEqual(e.scale,t.scale)?void 0:t.scale,shear:e.shear&&t.shear&&gm.isEqual(e.shear,t.shear)?void 0:t.shear})},(xN||(xN={})).defaultData={horizontalConstraint:0,verticalConstraint:0},(xU||(xU={})).defaultData={direction:"row",wrap:"unwrap",align:"top-left",gap:10,rowGap:10,autoGap:!1,autoRowGap:!1,leftPadding:8,rightPadding:8,topPadding:8,bottomPadding:8},(xk||(xk={})).defaultData={opacity:1,fill:{color:gP.fromHexAndA(5526619,1),enabled:!0},stroke:{color:gP.from0to1([0,0,0,1]),thickness:1,enabled:!1,mode:"inside"},layerBlur:{radius:2,enabled:!1},backgroundBlur:{radius:2,enabled:!1},dropShadow:{offset:[10,10],blurRadius:10,color:gP.from0to1([0,0,0,1]),enabled:!1,spread:0},innerShadow:{offset:[10,10],blurRadius:10,color:gP.from0to1([0,0,0,1]),enabled:!1,spread:0}},(xt=xV||(xV={})).newEmpty=function(e,t){return{name:t}},xt.patch=function(e,t){if(void 0===t)return e;let i={...e};return Object.assign(i,xF.merge(i,t)),i=function(e,t){if(void 0===t)return e;let i={...e};return"fill"in i&&"fill"in t&&void 0!==t.fill&&Object.assign(i,{fill:{...i.fill,...t.fill}}),"stroke"in i&&"stroke"in t&&void 0!==t.stroke&&Object.assign(i,{stroke:{...i.stroke,...t.stroke}}),"layerBlur"in i&&"layerBlur"in t&&void 0!==t.layerBlur&&Object.assign(i,{layerBlur:{...i.layerBlur,...t.layerBlur}}),"backgroundBlur"in i&&"backgroundBlur"in t&&void 0!==t.backgroundBlur&&Object.assign(i,{backgroundBlur:{...i.backgroundBlur,...t.backgroundBlur}}),"dropShadow"in i&&"dropShadow"in t&&void 0!==t.dropShadow&&Object.assign(i,{dropShadow:{...i.dropShadow,...t.dropShadow}}),"innerShadow"in i&&"innerShadow"in t&&void 0!==t.innerShadow&&Object.assign(i,{innerShadow:{...i.innerShadow,...t.innerShadow}}),i}(i=function(e,t){if(void 0===t)return e;let i={...e};for(let e of["width","height","cornerRadius"])e in i&&e in t&&void 0!==t[e]&&Object.assign(i,{[e]:t[e]});return i}(i,t),t)},xt.toOps=function(e,t){let i,r=[];for(let[e,a]of Object.entries(t))"name"!==e&&(void 0===i&&(i={path:[],props:{}
3135,type:0},r.push(i)),i.props[e]=a);return r},(xj||(xj={})).defaultData={...xF.defaultData,...xN.defaultData,states:new pY,events:new pY,visible:!0,raycastLock:!1},(xG||(xG={})).defaultData={...xj.defaultData,...xk.defaultData},(xW||(xW={})).defaultData={cornerRadius:[0,0,0,0]},(xH||(xH={})).defaultData={...xG.defaultData,type:"ellipse2d",width:100,height:100,name:"Ellipse"},(xq||(xq={})).defaultData={...xG.defaultData,...xW.defaultData,type:"rectangle2d",width:100,height:100,name:"Rectangle"},(xX||(xX={})).defaultData={...xG.defaultData,type:"text2d",width:100,height:100,fontSize:12,lineHeight:1.2,letterSpacing:0,text:{textValue:"Hello world"},horizontalAlign:1,verticalAlign:1,textTransform:1,font:"Roboto_regular",name:"Text"},(xY||(xY={})).defaultData={...xG.defaultData,type:"path2d",path:"",name:"Path"},(xQ||(xQ={})).is=function(e){return"ellipse2d"===e.type||"rectangle2d"===e.type||"text2d"===e.type||"vector2d"===e.type||"path2d"===e.type},(xZ||(xZ={})).defaultData={...xj.defaultData,name:"Group",type:"group2d"},(xK||(xK={})).defaultData=()=>({...xj.defaultData,...xW.defaultData,...xk.defaultData,name:"Frame",type:"frame2d",clipped:!0,width:200,height:200,fill:{color:gP.fromHexAndA(4737101,1),enabled:!0},stroke:{color:gP.fromHexAndA(0,1),thickness:1,enabled:!1,mode:"inside"},backgroundBlur:{radius:2,enabled:!1},layerBlur:{radius:2,enabled:!1}}),(xi=xJ||(xJ={})).defaultData=function(e){switch(e){case"rectangle2d":case"vector2d":return{...xq.defaultData};case"ellipse2d":return{...xH.defaultData};case"text2d":return{...xX.defaultData};case"path2d":return{...xY.defaultData};case"frame2d":return{...xK.defaultData()};case"group2d":return{...xZ.defaultData}}},xi.getPivot=function(e){return"width"in e&&"height"in e?["number"==typeof e.width?.5*e.width:0,"number"==typeof e.height?.5*e.height:0]:[0,0]},xi.isResizeable=function(e){return"rectangle2d"===e.type||"ellipse2d"===e.type||"text2d"===e.type||"frame2d"===e.type},xi.isAutoLayoutable=function(e){return"frame2d"===e.type&&void 0!==e.autoLayout},xi.hasCorners=function(e){return"rectangle2d"===e.type||"frame2d"===e.type},(D=x$||(x$={})).defaultData={name:"UI",type:"scene2d",objects:new pX},D.emptyData=function(){return{type:"scene2d",objects:new pX}},(x0||(x0={})).is=function(e){return e&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z},(xr=x1||(x1={})).getControlsWithDefault=function(e,t){let i=[0,0],r=[1,1];if(e?.cubicControls)i=ym(e.cubicControls.control1,i);else switch(e?.type){case 2:case 4:i=[.42,0];break;case 3:case 0:i=[0,0];break;case 1:i=[.25,.1];break;case 7:i=[.25,1]}if(t?.cubicControls)r=ym(t.cubicControls.control2,r);else switch(t?.type){case 2:case 0:r=[1,1];break;case 3:case 4:r=[.58,1];break;case 1:r=[.25,1];break;case 7:r=[.5,1]}return{control1:i,control2:r}},xr.defaultData=function(e,t){return{id:e,name:t,to:5,properties:new pY}},xr.createMaterialGroup=function(e){let t=new pY;return e.forEach(({data:e,id:i,fi:r})=>{if("light"===e.type){let a=yv(["material",`${e.category} lighting`],i,r);t.push(a)}else{let a=yv(["material",e.type],i,r);t.push(a)}}),t},xr.createName=function(e){return Object.entries(e).reduce((e,[t,i])=>("string"!=typeof i&&e.push({name:i.name}),e),[])},xr.Presets=[{name:"Slide in",animationParams:{translateX:{value:[-20,0],easing:yg(3),duration:1e3},opacity:{value:[0,1],easing:yg(3),duration:1e3},endDelay:250,loop:!0}},{name:"Rotate",animationParams:{rotate:{value:[0,"1turn"],easing:yg(5),duration:700},endDelay:250,loop:!0}},{name:"Scale Out",animationParams:{scale:{value:[1,1.5],easing:yg(4),duration:1e3},endDelay:250,loop:!0}},{name:"Jump",animationParams:{translateY:[{value:0,duration:200,easing:"linear"},{value:-20,easing:"linear",duration:200},{value:0,easing:"linear",duration:100}],endDelay:500,loop:!0}},{name:"Jump Rotate",animationParams:{translateY:[{value:0,duration:200,easing:"linear"},{value:-20,easing:"linear",duration:200},{value:0,easing:"linear",duration:100}],rotate:{value:[0,"1turn"],easing:yg(5),duration:500},endDelay:500,loop:!0}},{name:"Bounce",animationParams:{translateY:{value:["20px","-20px"],duration:575,easing:"easeOutQuad"},direction:"alternate",loop:!0}}];var yy=["x","y","z"],yx=class{constructor(e=1,t=100,i=10,r=0){this.mass=e,this.stiffness=t,this.damping=i,this.initialVelocity=r,this.m_w0=Math.sqrt(t/e),this.m_zeta=i/(2*Math.sqrt(t*e)),this.m_zeta<1?(this.m_wd=this.m_w0*Math.sqrt(1-this.m_zeta*this.m_zeta),this.m_A=1,this.m_B=(this.m_zeta*this.m_w0+-r)/this.m_wd):(this.m_wd=0,this.m_A=1,this.m_B=-r+this.m_w0)}solve(e){return 1-(e=this.m_zeta<1?Math.exp(-e*this.m_zeta*this.m_w0)*(this.m_A*Math.cos(this.m_wd*e)+this.m_B*Math.sin(this.m_wd*e)):(this.m_A+this.m_B*e)*Math.exp(-e*this.m_w0))}getDuration(){let e=0,t=0;for(;;)if(e+=.16666666666666666,1===this.solve(e)){if(++t>=16)break}else t=0;return .16666666666666666*e*1e3}},yb=class{};function yw(e,t,i){return i.min.x=t[e],i.min.y=t[e+1],i.min.z=t[e+2],i.max.x=t[e+3],i.max.y=t[e+4],i.max.z=t[e+5],i}function yS(e){let t=-1,i=-1/0;for(let r=0;r<3;r++){let a=e[r+3]-e[r];a>i&&(i=a,t=r)}return t}function y_(e,t,i){let r,a;for(let o=0;o<3;o++){let l=o+3;r=e[o],a=t[o],i[o]=r<a?r:a,r=e[l],a=t[l],i[l]=r>a?r:a}}function yA(e,t,i){for(let r=0;r<3;r++){let a=t[e+2*r],o=t[e+2*r+1],l=a-o,h=a+o;l<i[r]&&(i[r]=l),h>i[r+3]&&(i[r+3]=h)}}function yM(e){let t=e[3]-e[0],i=e[4]-e[1],r=e[5]-e[2];return 2*(t*i+i*r+r*t)}function yC(e,t,i,r,a=null){let o=1/0,l=1/0,h=1/0,c=-1/0,d=-1/0,p=-1/0,f=1/0,m=1/0,g=1/0,v=-1/0,y=-1/0,x=-1/0,b=null!==a;for(let r=6*t,a=(t+i)*6;r<a;r+=6){let t=e[r+0],i=e[r+1],a=t-i,w=t+i;a<o&&(o=a),w>c&&(c=w),b&&t<f&&(f=t),b&&t>v&&(v=t);let S=e[r+2],_=e[r+3],A=S-_,M=S+_;A<l&&(l=A),M>d&&(d=M),b&&S<m&&(m=S),b&&S>y&&(y=S);let C=e[r+4],E=e[r+5],T=C-E,P=C+E;T<h&&(h=T),P>p&&(p=P),b&&C<g&&(g=C),b&&C>x&&(x=C)}r[0]=o,r[1]=l,r[2]=h,r[3]=c,r[4]=d,r[5]=p,b&&(a[0]=f,a[1]=m,a[2]=g,a[3]=v,a[4]=y,a[5]=x)}var yE=(e,t)=>e.candidate-t.candidate,yT=Array(32).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),yP=new Float32Array(6),yD=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let i=1/0,r=-1/0;for(let a=0,o=e.length;a<o;a++){let o=e[a][t];i=o<i?o:i,r=o>r?o:r}this.min=i,this.max=r}setFromPoints(e,t){let i=1/0,r=-1/0;for(let a=0,o=t.length;a<o;
3135a++){let o=t[a],l=e.dot(o);i=l<i?l:i,r=l>r?l:r}this.min=i,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}};yD.prototype.setFromBox=(O=new iD,function(e,t){let i=t.min,r=t.max,a=1/0,o=-1/0;for(let t=0;t<=1;t++)for(let l=0;l<=1;l++)for(let h=0;h<=1;h++){O.x=i.x*t+r.x*(1-t),O.y=i.y*l+r.y*(1-l),O.z=i.z*h+r.z*(1-h);let c=e.dot(O);a=Math.min(c,a),o=Math.max(c,o)}this.min=a,this.max=o}),new yD;var yO=(I=new iD,R=new iD,L=new iD,function(e,t,i){let r=e.start,a=t.start;L.subVectors(r,a),I.subVectors(e.end,e.start),R.subVectors(t.end,t.start);let o=L.dot(R),l=R.dot(I),h=R.dot(R),c=L.dot(I),d=I.dot(I)*h-l*l,p,f;p=0!==d?(o*l-c*h)/d:0,f=(o+p*l)/h,i.x=p,i.y=f}),yI=(B=new t9,z=new iD,F=new iD,function(e,t,i,r){yO(e,t,B);let a=B.x,o=B.y;if(a>=0&&a<=1&&o>=0&&o<=1){e.at(a,i),t.at(o,r);return}if(a>=0&&a<=1){o<0?t.at(0,r):t.at(1,r),e.closestPointToPoint(r,!0,i);return}if(o>=0&&o<=1){a<0?e.at(0,i):e.at(1,i),t.closestPointToPoint(i,!0,r);return}{let l,h;if(l=a<0?e.start:e.end,h=o<0?t.start:t.end,e.closestPointToPoint(h,!0,z),t.closestPointToPoint(l,!0,F),z.distanceToSquared(h)<=F.distanceToSquared(l)){i.copy(z),r.copy(h);return}i.copy(l),r.copy(F);return}}),yR=(N=new iD,U=new iD,k=new sg,V=new lK,function(e,t){let{radius:i,center:r}=e,{a:a,b:o,c:l}=t;if(V.start=a,V.end=o,V.closestPointToPoint(r,!0,N).distanceTo(r)<=i||(V.start=a,V.end=l,V.closestPointToPoint(r,!0,N).distanceTo(r)<=i)||(V.start=o,V.end=l,V.closestPointToPoint(r,!0,N).distanceTo(r)<=i))return!0;let h=t.getPlane(k);if(Math.abs(h.distanceToPoint(r))<=i){let e=h.projectPoint(r,U);if(t.containsPoint(e))return!0}return!1});function yL(e){return 1e-15>Math.abs(e)}var yB=class extends rI{constructor(...e){super(...e),this.isExtendedTriangle=!0,this.satAxes=[,,,,].fill().map(()=>new iD),this.satBounds=[,,,,].fill().map(()=>new yD),this.points=[this.a,this.b,this.c],this.sphere=new iK,this.plane=new sg,this.needsUpdate=!0}intersectsSphere(e){return yR(e,this)}update(){let e=this.a,t=this.b,i=this.c,r=this.points,a=this.satAxes,o=this.satBounds,l=a[0],h=o[0];this.getNormal(l),h.setFromPoints(l,r);let c=a[1],d=o[1];c.subVectors(e,t),d.setFromPoints(c,r);let p=a[2],f=o[2];p.subVectors(t,i),f.setFromPoints(p,r);let m=a[3],g=o[3];m.subVectors(i,e),g.setFromPoints(m,r),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(l,e),this.needsUpdate=!1}};yB.prototype.closestPointToSegment=(j=new iD,G=new iD,W=new lK,function(e,t=null,i=null){let{start:r,end:a}=e,o=this.points,l,h=1/0;for(let r=0;r<3;r++){let a=(r+1)%3;W.start.copy(o[r]),W.end.copy(o[a]),yI(W,e,j,G),(l=j.distanceToSquared(G))<h&&(h=l,t&&t.copy(j),i&&i.copy(G))}return this.closestPointToPoint(r,j),(l=r.distanceToSquared(j))<h&&(h=l,t&&t.copy(j),i&&i.copy(r)),this.closestPointToPoint(a,j),(l=a.distanceToSquared(j))<h&&(h=l,t&&t.copy(j),i&&i.copy(a)),Math.sqrt(h)}),yB.prototype.intersectsTriangle=(H=new yB,q=[,,,],X=[,,,],Y=new yD,Q=new yD,Z=new iD,K=new iD,J=new iD,$=new iD,ee=new lK,et=new lK,ei=new lK,function(e,t=null,i=!1){this.needsUpdate&&this.update(),e.isExtendedTriangle?e.needsUpdate&&e.update():(H.copy(e),H.update(),e=H);let r=this.plane,a=e.plane;if(Math.abs(r.normal.dot(a.normal))>1-1e-10){let i=this.satBounds,r=this.satAxes;X[0]=e.a,X[1]=e.b,X[2]=e.c;for(let e=0;e<4;e++){let t=i[e],a=r[e];if(Y.setFromPoints(a,X),t.isSeparated(Y))return!1}let a=e.satBounds,o=e.satAxes;q[0]=this.a,q[1]=this.b,q[2]=this.c;for(let e=0;e<4;e++){let t=a[e],i=o[e];if(Y.setFromPoints(i,q),t.isSeparated(Y))return!1}for(let e=0;e<4;e++){let t=r[e];for(let e=0;e<4;e++){let i=o[e];if(Z.crossVectors(t,i),Y.setFromPoints(Z,q),Q.setFromPoints(Z,X),Y.isSeparated(Q))return!1}}return t&&(t.start.set(0,0,0),t.end.set(0,0,0)),!0}{let i=this.points,o=!1,l=0;for(let e=0;e<3;e++){let t=i[e],r=i[(e+1)%3];ee.start.copy(t),ee.end.copy(r),ee.delta(K);let h=o?et.start:et.end,c=yL(a.distanceToPoint(t));if(yL(a.normal.dot(K))&&c){et.copy(ee),l=2;break}if((a.intersectLine(ee,h)||c)&&!yL(h.distanceTo(r))){if(l++,o)break;o=!0}}if(1===l&&e.containsPoint(et.end))return t&&(t.start.copy(et.end),t.end.copy(et.end)),!0;if(2!==l)return!1;let h=e.points,c=!1,d=0;for(let e=0;e<3;e++){let t=h[e],i=h[(e+1)%3];ee.start.copy(t),ee.end.copy(i),ee.delta(J);let a=c?ei.start:ei.end,o=yL(r.distanceToPoint(t));if(yL(r.normal.dot(J))&&o){ei.copy(ee),d=2;break}if((r.intersectLine(ee,a)||o)&&!yL(a.distanceTo(i))){if(d++,c)break;c=!0}}if(1===d&&this.containsPoint(ei.end))return t&&(t.start.copy(ei.end),t.end.copy(ei.end)),!0;if(2!==d)return!1;if(et.delta(K),ei.delta(J),0>K.dot(J)){let e=ei.start;ei.start=ei.end,ei.end=e}
3135let p=et.start.dot(K),f=et.end.dot(K),m=ei.start.dot(K),g=ei.end.dot(K);return(p===g||m===f||f<m!=p<g)&&(t&&($.subVectors(et.start,ei.start),$.dot(K)>0?t.start.copy(et.start):t.start.copy(ei.start),$.subVectors(et.end,ei.end),0>$.dot(K)?t.end.copy(et.end):t.end.copy(ei.end)),!0)}}),yB.prototype.distanceToPoint=(er=new iD,function(e){return this.closestPointToPoint(e,er),e.distanceTo(er)}),yB.prototype.distanceToTriangle=(es=new iD,ea=new iD,en=["a","b","c"],eo=new lK,el=new lK,function(e,t=null,i=null){let r=t||i?eo:null;if(this.intersectsTriangle(e,r))return(t||i)&&(t&&r.getCenter(t),i&&r.getCenter(i)),0;let a=1/0;for(let r=0;r<3;r++){let o,l=en[r],h=e[l];this.closestPointToPoint(h,es),(o=h.distanceToSquared(es))<a&&(a=o,t&&t.copy(es),i&&i.copy(h));let c=this[l];e.closestPointToPoint(c,es),(o=c.distanceToSquared(es))<a&&(a=o,t&&t.copy(c),i&&i.copy(es))}for(let r=0;r<3;r++){let o=en[r],l=en[(r+1)%3];eo.set(this[o],this[l]);for(let r=0;r<3;r++){let o=en[r],l=en[(r+1)%3];el.set(e[o],e[l]),yI(eo,el,es,ea);let h=es.distanceToSquared(ea);h<a&&(a=h,t&&t.copy(es),i&&i.copy(ea))}}return Math.sqrt(a)});var yz=class{constructor(e,t,i){this.isOrientedBox=!0,this.min=new iD,this.max=new iD,this.matrix=new i6,this.invMatrix=new i6,this.points=Array(8).fill().map(()=>new iD),this.satAxes=[,,,].fill().map(()=>new iD),this.satBounds=[,,,].fill().map(()=>new yD),this.alignedSatBounds=[,,,].fill().map(()=>new yD),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),i&&this.matrix.copy(i)}set(e,t,i){this.min.copy(e),this.max.copy(t),this.matrix.copy(i),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}};yz.prototype.update=function(){let e=this.matrix,t=this.min,i=this.max,r=this.points;for(let a=0;a<=1;a++)for(let o=0;o<=1;o++)for(let l=0;l<=1;l++){let h=r[a|2*o|4*l];h.x=a?i.x:t.x,h.y=o?i.y:t.y,h.z=l?i.z:t.z,h.applyMatrix4(e)}let a=this.satBounds,o=this.satAxes,l=r[0];for(let e=0;e<3;e++){let t=o[e],i=a[e],h=r[1<<e];t.subVectors(l,h),i.setFromPoints(t,r)}let h=this.alignedSatBounds;h[0].setFromPointsField(r,"x"),h[1].setFromPointsField(r,"y"),h[2].setFromPointsField(r,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1},yz.prototype.intersectsBox=(eh=new yD,function(e){this.needsUpdate&&this.update();let t=e.min,i=e.max,r=this.satBounds,a=this.satAxes,o=this.alignedSatBounds;if(eh.min=t.x,eh.max=i.x,o[0].isSeparated(eh)||(eh.min=t.y,eh.max=i.y,o[1].isSeparated(eh))||(eh.min=t.z,eh.max=i.z,o[2].isSeparated(eh)))return!1;for(let t=0;t<3;t++){let i=a[t],o=r[t];if(eh.setFromBox(i,e),o.isSeparated(eh))return!1}return!0}),yz.prototype.intersectsTriangle=(ec=new yB,ed=[,,,],eu=new yD,ep=new yD,ef=new iD,function(e){this.needsUpdate&&this.update(),e.isExtendedTriangle?e.needsUpdate&&e.update():(ec.copy(e),ec.update(),e=ec);let t=this.satBounds,i=this.satAxes;ed[0]=e.a,ed[1]=e.b,ed[2]=e.c;for(let e=0;e<3;e++){let r=t[e],a=i[e];if(eu.setFromPoints(a,ed),r.isSeparated(eu))return!1}let r=e.satBounds,a=e.satAxes,o=this.points;for(let e=0;e<3;e++){let t=r[e],i=a[e];if(eu.setFromPoints(i,o),t.isSeparated(eu))return!1}for(let e=0;e<3;e++){let t=i[e];for(let e=0;e<4;e++){let i=a[e];if(ef.crossVectors(t,i),eu.setFromPoints(ef,ed),ep.setFromPoints(ef,o),eu.isSeparated(ep))return!1}}return!0}),yz.prototype.closestPointToPoint=function(e,t){return this.needsUpdate&&this.update(),t.copy(e).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t},yz.prototype.distanceToPoint=(em=new iD,function(e){return this.closestPointToPoint(e,em),e.distanceTo(em)}),yz.prototype.distanceToBox=(eg=["x","y","z"],ev=Array(12).fill().map(()=>new lK),ey=Array(12).fill().map(()=>new lK),ex=new iD,eb=new iD,function(e,t=0,i=null,r=null){if(this.needsUpdate&&this.update(),this.intersectsBox(e))return(i||r)&&(e.getCenter(eb),this.closestPointToPoint(eb,ex),e.closestPointToPoint(ex,eb),i&&i.copy(ex),r&&r.copy(eb)),0;let a=t*t,o=e.min,l=e.max,h=this.points,c=1/0;for(let e=0;e<8;e++){let t=h[e];eb.copy(t).clamp(o,l);let d=t.distanceToSquared(eb);if(d<c&&(c=d,i&&i.copy(t),r&&r.copy(eb),d<a))return Math.sqrt(d)}let d=0;for(let e=0;e<3;e++)for(let t=0;t<=1;t++)for(let i=0;i<=1;i++){let r=(e+1)%3,a=(e+2)%3,c=t<<r|i<<a,p=1<<e|t<<r|i<<a,f=h[c],m=h[p];ev[d].set(f,m);let g=eg[e],v=eg[r],y=eg[a],x=ey[d],b=x.start,w=x.end;b[g]=o[g],b[v]=t?o[v]:l[v],b[y]=i?o[y]:l[v],w[g]=l[g],w[v]=t?o[v]:l[v],w[y]=i?o[y]:l[v],d++}for(let e=0;e<=1;e++)for(let t=0;t<=1;t++)for(let h=0;h<=1;h++){eb.x=e?l.x:o.x,eb.y=t?l.y:o.y,eb.z=h?l.z:o.z,this.closestPointToPoint(eb,ex);let d=eb.distanceToSquared(ex);if(d<c&&(c=d,i&&i.copy(ex),r&&r.copy(eb),d<a))return Math.sqrt(d)}for(let e=0;e<12;e++){let t=ev[e];for(let e=0;e<12;e++){yI(t,ey[e],ex,eb);let o=ex.distanceToSquared(eb);if(o<c&&(c=o,i&&i.copy(ex),r&&r.copy(eb),o<a))return Math.sqrt(o)}}return Math.sqrt(c)});var yF=new iD,yN=new iD,yU=new iD,yk=new t9,yV=new t9,yj=new t9,yG=new iD,yW=new iD,yH=new iD,yq=new iD;function yX(e,t,i,r,a){let o=3*r,l=e.index.getX(o),h=e.index.getX(o+1),c=e.index.getX(o+2),{position:d,normal:p,uv:f,uv1:m}=e.attributes,g=function(e,t,i,r,a,o,l,h,c){yF.fromBufferAttribute(t,o),yN.fromBufferAttribute(t,l),yU.fromBufferAttribute(t,h);let d=null===(1===c?e.intersectTriangle(yU,yN,yF,!0,yq):e.intersectTriangle(yF,yN,yU,2!==c,yq))?null:{distance:e.origin.distanceTo(yq),point:yq.clone()};if(d){r&&(yk.fromBufferAttribute(r,o),yV.fromBufferAttribute(r,l),yj.fromBufferAttribute(r,h),d.uv=rI.getInterpolation(yq,yF,yN,yU,yk,yV,yj,new t9)),a&&(yk.fromBufferAttribute(a,o),yV.fromBufferAttribute(a,l),yj.fromBufferAttribute(a,h),d.uv1=rI.getInterpolation(yq,yF,yN,yU,yk,yV,yj,new t9)),i&&(yG.fromBufferAttribute(i,o),yW.fromBufferAttribute(i,l),yH.fromBufferAttribute(i,h),d.normal=rI.getInterpolation(yq,yF,yN,yU,yG,yW,yH,new iD),d.normal.dot(e.direction)>0&&d.normal.multiplyScalar(-1));let t={a:o,b:l,c:h,normal:new iD,materialIndex:0};rI.getNormal(yF,yN,yU,t.normal),d.face=t,d.faceIndex=o}return d}(i,d,p,f,m,l,h,c,t);return g?(g.faceIndex=r,a&&a.push(g),g):null}function yY(e,t,i,r){let a=e.a,o=e.b,l=e.c,h=t,c=t+1,d=t+2;i&&(h=i.getX(t),c=i.getX(t+1),d=i.getX(t+2)),a.x=r.getX(h),a.y=r.getY(h),a.z=r.getZ(h),o.x=r.getX(c),o.y=r.getY(c),o.z=r.getZ(c),l.x=r.getX(d),l.y=r.getY(d),l.z=r.getZ(d)}function yQ(e,t,i,r,a,o,l){let h=i.index,c=i.attributes.position;for(let i=e,d=t+e;i<d;i++)if(yY(l,3*i,h,c),l.needsUpdate=!0,r(l,i,a,o))return!0;return!1}var yZ=class{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){let e=this._primitives;return 0===e.length?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}};function yK(e,t){return 65535===t[e+15]}
3135var yJ=new iR,y$=new iD,y0=["x","y","z"],y1=(e_=[],eA=new yZ(()=>new iR),function(...e){ew=eA.getPrimitive(),eS=eA.getPrimitive(),e_.push(ew,eS);let t=function e(t,i,r,a,o=null,l=0,h=0){function c(e){let t=2*e,i=x4,r=x5;for(;!yK(t,i);)t=2*(e+=8);return r[e+6]}function d(e){let t=2*e,i=x4,r=x5;for(;!yK(t,i);)t=2*(e=r[e+6]);return r[e+6]+i[t+14]}let p=2*t,f=x3,m=x4,g=x5;if(yK(p,m)){let e=g[t+6],i=m[p+14];return yw(t,f,ew),a(e,i,!1,h,l+t,ew)}{let p=t+8,v=g[t+6],y=p,x=v,b,w,S,_;if(o&&(S=ew,_=eS,yw(y,f,S),yw(x,f,_),b=o(S),(w=o(_))<b)){y=v,x=p;let e=b;b=w,w=e,S=_}S||yw(y,f,S=ew);let A=r(S,yK(2*y,m),b,h+1,l+y),M;if(2===A){let e=c(y),t=d(y)-e;M=a(e,t,!0,h+1,l+y,S)}else M=A&&e(y,i,r,a,o,l,h+1);if(M)return!0;yw(x,f,_=eS);let C=r(_,yK(2*x,m),w,h+1,l+x),E;if(2===C){let e=c(x),t=d(x)-e;E=a(e,t,!0,h+1,l+x,_)}else E=C&&e(x,i,r,a,o,l,h+1);return!!E}}(...e);eA.releasePrimitive(ew),eA.releasePrimitive(eS),e_.pop(),e_.pop();let i=e_.length;return i>0&&(eS=e_[i-1],ew=e_[i-2]),t}),y2=(eM=new yB,eC=new yB,eE=new i6,eT=new yz,eP=new yz,function e(t,i,r,a,o=null){let l=2*t,h=x3,c=x4,d=x5;if(null===o&&(r.boundingBox||r.computeBoundingBox(),eT.set(r.boundingBox.min,r.boundingBox.max,a),o=eT),yK(l,c)){let e=i.index,o=i.attributes.position,p=r.index,f=r.attributes.position,m=d[t+6],g=c[l+14];if(eE.copy(a).invert(),r.boundsTree)return yw(t,h,eP),eP.matrix.copy(eE),eP.needsUpdate=!0,r.boundsTree.shapecast({intersectsBounds:e=>eP.intersectsBox(e),intersectsTriangle:t=>{t.a.applyMatrix4(a),t.b.applyMatrix4(a),t.c.applyMatrix4(a),t.needsUpdate=!0;for(let i=3*m,r=(g+m)*3;i<r;i+=3)if(yY(eC,i,e,o),eC.needsUpdate=!0,t.intersectsTriangle(eC))return!0;return!1}});for(let t=3*m,i=g+3*m;t<i;t+=3){yY(eM,t,e,o),eM.a.applyMatrix4(eE),eM.b.applyMatrix4(eE),eM.c.applyMatrix4(eE),eM.needsUpdate=!0;for(let e=0,t=p.count;e<t;e+=3)if(yY(eC,e,p,f),eC.needsUpdate=!0,eM.intersectsTriangle(eC))return!0}}else{let l=t+8,c=d[t+6];return yw(l,h,yJ),!!(o.intersectsBox(yJ)&&e(l,i,r,a,o)||(yw(c,h,yJ),o.intersectsBox(yJ)&&e(c,i,r,a,o)))}});function y3(e,t,i,r){return yw(e,t,yJ),i.intersectBox(yJ,r)}var y4,y5,y6,y8,y9,y7,xe,xt,xi,xr,xs,xa,xn,xo,xl,xh,xc,xd,xu,xp,xf,xm,xg,xv,xy,xx,xb,xw,xS,x_,xA,xM,xC,xE,xT,xP,xD,xO,xI,xR,xL,xB,xz,xF,xN,xU,xk,xV,xj,xG,xW,xH,xq,xX,xY,xQ,xZ,xK,xJ,x$,x0,x1,x2,x3,x4,x5,x6=[];function x8(e){x2&&x6.push(x2),x2=e,x3=new Float32Array(e),x4=new Uint16Array(e),x5=new Uint32Array(e)}function x9(){x2=null,x3=null,x4=null,x5=null,x6.length&&x8(x6.pop())}var x7=Symbol("skip tree generation"),be=new iR,bt=new iR,bi=new i6,br=new yz,bs=new yz,ba=new iD,bn=new iD,bo=new iD,bl=new iD,bh=new iD,bc=new iR,bd=new yZ(()=>new yB),bu=class{static serialize(e,t={}){if(t.isBufferGeometry)return bu.serialize(arguments[0],{cloneBuffers:void 0===arguments[2]||arguments[2]});t={cloneBuffers:!0,...t};let i=e.geometry,r=e._roots,a=i.getIndex();return t.cloneBuffers?{roots:r.map(e=>e.slice()),index:a.array.slice()}:{roots:r,index:a.array}}static deserialize(e,t,i={}){if("boolean"==typeof i)return bu.deserialize(arguments[0],arguments[1],{setIndex:void 0===arguments[2]||arguments[2]});i={setIndex:!0,...i};let{index:r,roots:a}=e,o=new bu(t,{...i,[x7]:!0});if(o._roots=a,i.setIndex){let i=t.getIndex();if(null===i){let i=new rN(e.index,1,!1);t.setIndex(i)}else i.array!==r&&(i.array.set(r),i.needsUpdate=!0)}return o}constructor(e,t={}){if(e.isBufferGeometry){if(e.index&&e.index.isInterleavedBufferAttribute)throw Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw Error("MeshBVH: Only BufferGeometries are supported.");if((t=Object.assign({strategy:0,maxDepth:40,maxLeafTris:10,verbose:!0,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,[x7]:!1},t)).useSharedArrayBuffer&&typeof SharedArrayBuffer>"u")throw Error("MeshBVH: SharedArrayBuffer is not available.");this._roots=null,t[x7]||(this._roots=function(e,t){let i=function(e,t){function i(e){m&&m(e/g)}function r(e,t,a,d=null,m=0){if(!v&&m>=c&&(v=!0),a<=p||m>=c)return i(t+a),e.offset=t,e.count=a,e;let g=function(e,t,i,r,a,o){let l=-1,h=0;if(0===o)-1!==(l=yS(t))&&(h=(t[l]+t[l+3])/2);else if(1===o)-1!==(l=yS(e))&&(h=function(e,t,i,r){let a=0;for(let o=t,l=t+i;o<l;o++)a+=e[6*o+2*r];return a/i}(i,r,a,l));else if(2===o){let o=yM(e),d=1.25*a,p=6*r,f=(r+a)*6;for(let e=0;e<3;e++){let r=t[e],m=(t[e+3]-r)/32;if(a<8){let t=[...yT];t.length=a;let r=0;for(let a=p;a<f;a+=6,r++){let o=t[r];o.candidate=i[a+2*e],o.count=0;let{bounds:l,leftCacheBounds:h,rightCacheBounds:c}=o;for(let e=0;e<3;e++)c[e]=1/0,c[e+3]=-1/0,h[e]=1/0,h[e+3]=-1/0,l[e]=1/0,l[e+3]=-1/0;yA(a,i,l)}t.sort(yE);let c=a;for(let e=0;e<c;e++){let i=t[e];for(;
3135e+1<c&&t[e+1].candidate===i.candidate;)t.splice(e+1,1),c--}for(let r=p;r<f;r+=6){let a=i[r+2*e];for(let e=0;e<c;e++){let o=t[e];a>=o.candidate?yA(r,i,o.rightCacheBounds):(yA(r,i,o.leftCacheBounds),o.count++)}}for(let i=0;i<c;i++){let r=t[i],c=r.count,p=a-r.count,f=r.leftCacheBounds,m=r.rightCacheBounds,g=0;0!==c&&(g=yM(f)/o);let v=0;0!==p&&(v=yM(m)/o);let y=1+1.25*(g*c+v*p);y<d&&(l=e,d=y,h=r.candidate)}}else{var c;for(let e=0;e<32;e++){let t=yT[e];t.count=0,t.candidate=r+m+e*m;let i=t.bounds;for(let e=0;e<3;e++)i[e]=1/0,i[e+3]=-1/0}for(let t=p;t<f;t+=6){let a=~~((i[t+2*e]-r)/m);a>=32&&(a=31);let o=yT[a];o.count++,yA(t,i,o.bounds)}let t=yT[31];c=t.bounds,t.rightCacheBounds.set(c);for(let e=30;e>=0;e--){let t=yT[e],i=yT[e+1];y_(t.bounds,i.rightCacheBounds,t.rightCacheBounds)}let g=0;for(let t=0;t<31;t++){let i=yT[t],r=i.count,c=i.bounds,p=yT[t+1].rightCacheBounds;0!==r&&(0===g?yP.set(c):y_(c,yP,yP));let f=0,m=0;0!==(g+=r)&&(f=yM(yP)/o);let v=a-g;0!==v&&(m=yM(p)/o);let y=1+1.25*(f*g+m*v);y<d&&(l=e,d=y,h=i.candidate)}}}}return{axis:l,pos:h}}(e.boundingData,d,l,t,a,f);if(-1===g.axis)return i(t+a),e.offset=t,e.count=a,e;let y=function(e,t,i,r,a){let o=i,l=i+r-1,h=a.pos,c=2*a.axis;for(;;){for(;o<=l&&t[6*o+c]<h;)o++;for(;o<=l&&t[6*l+c]>=h;)l--;if(!(o<l))return o;for(let i=0;i<3;i++){let r=e[3*o+i];e[3*o+i]=e[3*l+i],e[3*l+i]=r;let a=t[6*o+2*i+0];t[6*o+2*i+0]=t[6*l+2*i+0],t[6*l+2*i+0]=a;let h=t[6*o+2*i+1];t[6*o+2*i+1]=t[6*l+2*i+1],t[6*l+2*i+1]=h}o++,l--}}(h,l,t,a,g);if(y===t||y===t+a)i(t+a),e.offset=t,e.count=a;else{e.splitAxis=g.axis;let i=new yb,h=y-t;e.left=i,i.boundingData=new Float32Array(6),yC(l,t,h,i.boundingData,o),r(i,t,h,o,m+1);let c=new yb,d=a-h;e.right=c,c.boundingData=new Float32Array(6),yC(l,y,d,c.boundingData,o),r(c,y,d,o,m+1)}return e}if(!e.index){let i=e.attributes.position.count,r=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,a;a=i>65535?new Uint32Array(new r(4*i)):new Uint16Array(new r(2*i)),e.setIndex(new rN(a,1));for(let e=0;e<i;e++)a[e]=e}let a=new Float32Array(6),o=new Float32Array(6),l=function(e,t){let i=e.attributes.position,r=e.index.array,a=r.length/3,o=new Float32Array(6*a),l=i.normalized,h=i.array,c=i.offset||0,d=3;i.isInterleavedBufferAttribute&&(d=i.data.stride);let p=["getX","getY","getZ"];for(let e=0;e<a;e++){let a=3*e,f=6*e,m,g,v;l?(m=r[a+0],g=r[a+1],v=r[a+2]):(m=r[a+0]*d+c,g=r[a+1]*d+c,v=r[a+2]*d+c);for(let e=0;e<3;e++){let r,a,c;l?(r=i[p[e]](m),a=i[p[e]](g),c=i[p[e]](v)):(r=h[m+e],a=h[g+e],c=h[v+e]);let d=r;a<d&&(d=a),c<d&&(d=c);let y=r;a>y&&(y=a),c>y&&(y=c);let x=(y-d)/2,b=2*e;o[f+b+0]=d+x,o[f+b+1]=x+(Math.abs(d)+x)*5960464477539063e-23,d<t[e]&&(t[e]=d),y>t[e+3]&&(t[e+3]=y)}}return o}(e,a),h=e.index.array,c=t.maxDepth,d=t.verbose,p=t.maxLeafTris,f=t.strategy,m=t.onProgress,g=e.index.count/3,v=!1,y=[],x=function(e){if(!e.groups||!e.groups.length)return[{offset:0,count:e.index.count/3}];let t=[],i=new Set;for(let t of e.groups)i.add(t.start),i.add(t.start+t.count);let r=Array.from(i.values()).sort((e,t)=>e-t);for(let e=0;e<r.length-1;e++){let i=r[e],a=r[e+1];t.push({offset:i/3,count:(a-i)/3})}return t}(e);if(1===x.length){let e=x[0],t=new yb;t.boundingData=a,function(e,t,i,r){let a=1/0,o=1/0,l=1/0,h=-1/0,c=-1/0,d=-1/0;for(let r=6*t,p=(t+i)*6;r<p;r+=6){let t=e[r+0];t<a&&(a=t),t>h&&(h=t);let i=e[r+2];i<o&&(o=i),i>c&&(c=i);let p=e[r+4];p<l&&(l=p),p>d&&(d=p)}r[0]=a,r[1]=o,r[2]=l,r[3]=h,r[4]=c,r[5]=d}(l,e.offset,e.count,o),r(t,e.offset,e.count,o),y.push(t)}else for(let e of x){let t=new yb;t.boundingData=new Float32Array(6),yC(l,e.offset,e.count,t.boundingData,o),r(t,e.offset,e.count,o),y.push(t)}return y}(e,t),r,a,o,l=[],h=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer;for(let e=0;e<i.length;e++){let t=i[e],c=new h(32*function e(t){return t.count?1:1+e(t.left)+e(t.right)}(t));r=new Float32Array(c),a=new Uint32Array(c),o=new Uint16Array(c),function e(t,i){let l=t/4,h=t/2,c=!!i.count,d=i.boundingData;for(let e=0;e<6;e++)r[l+e]=d[e];if(c){let e=i.offset,r=i.count;return a[l+6]=e,o[h+14]=r,o[h+15]=65535,t+32}{let r=i.left,o=i.right,h=i.splitAxis,c;if((c=e(t+32,r))/4>0x100000000)throw Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return a[l+6]=c/4,c=e(c,o),a[l+7]=h,c}}(0,t),l.push(c)}return l}
3135(e,t),!e.boundingBox&&t.setBoundingBox&&(e.boundingBox=this.getBoundingBox(new iR))),this.geometry=e}refit(e=null){e&&Array.isArray(e)&&(e=new Set(e));let t=this.geometry,i=t.index.array,r=t.attributes.position,a,o,l,h,c=0,d=this._roots;for(let t=0,p=d.length;t<p;t++)o=new Uint32Array(a=d[t]),l=new Uint16Array(a),h=new Float32Array(a),function t(a,c,d=!1){let p=2*a;if(65535===l[p+15]){let e=o[a+6],t=l[p+14],c=1/0,d=1/0,f=1/0,m=-1/0,g=-1/0,v=-1/0;for(let a=3*e,o=3*(e+t);a<o;a++){let e=i[a],t=r.getX(e),o=r.getY(e),l=r.getZ(e);t<c&&(c=t),t>m&&(m=t),o<d&&(d=o),o>g&&(g=o),l<f&&(f=l),l>v&&(v=l)}return(h[a+0]!==c||h[a+1]!==d||h[a+2]!==f||h[a+3]!==m||h[a+4]!==g||h[a+5]!==v)&&(h[a+0]=c,h[a+1]=d,h[a+2]=f,h[a+3]=m,h[a+4]=g,h[a+5]=v,!0)}{let i=a+8,r=o[a+6],l=i+c,p=r+c,f=d,m=!1,g=!1;e?f||(m=e.has(l),g=e.has(p),f=!m&&!g):(m=!0,g=!0);let v=f||m,y=f||g,x=!1;v&&(x=t(i,c,f));let b=!1;y&&(b=t(r,c,f));let w=x||b;if(w)for(let e=0;e<3;e++){let t=i+e,o=r+e,l=h[t],c=h[t+3],d=h[o],p=h[o+3];h[a+e]=l<d?l:d,h[a+e+3]=c>p?c:p}return w}}(0,c),c+=a.byteLength}traverse(e,t=0){let i=this._roots[t],r=new Uint32Array(i),a=new Uint16Array(i);!function t(o,l=0){let h=2*o,c=65535===a[h+15];if(c){let t=r[o+6],d=a[h+14];e(l,c,new Float32Array(i,4*o,6),t,d)}else{let a=r[o+6],h=r[o+7];e(l,c,new Float32Array(i,4*o,6),h)||(t(o+8,l+1),t(a,l+1))}}(0)}raycast(e,t=0){let i=this._roots,r=this.geometry,a=[],o=t.isMaterial,l=Array.isArray(t),h=r.groups,c=o?t.side:t;for(let o=0,d=i.length;o<d;o++){let d=l?t[h[o].materialIndex].side:c,p=a.length;if(x8(i[o]),function e(t,i,r,a,o){let l=2*t,h=x3,c=x4,d=x5;if(yK(l,c)){let e=d[t+6],h=c[l+14];for(let t=e,l=e+h;t<l;t++)yX(i,r,a,t,o)}else{let l=t+8;y3(l,h,a,y$)&&e(l,i,r,a,o);let c=d[t+6];y3(c,h,a,y$)&&e(c,i,r,a,o)}}(0,r,d,e,a),x9(),l){let e=h[o].materialIndex;for(let t=p,i=a.length;t<i;t++)a[t].face.materialIndex=e}}return a}raycastFirst(e,t=0){let i=this._roots,r=this.geometry,a=t.isMaterial,o=Array.isArray(t),l=null,h=r.groups,c=a?t.side:t;for(let a=0,d=i.length;a<d;a++){let d=o?t[h[a].materialIndex].side:c;x8(i[a]);let p=function e(t,i,r,a){let o=2*t,l=x3,h=x4,c=x5;if(yK(o,h))return function(e,t,i,r,a){let o=1/0,l=null;for(let h=r,c=r+a;h<c;h++){let r=yX(e,t,i,h);r&&r.distance<o&&(l=r,o=r.distance)}return l}(i,r,a,c[t+6],h[o+14]);{let o=c[t+7],h=y0[o],d=a.direction[h]>=0,p,f;d?(p=t+8,f=c[t+6]):(p=c[t+6],f=t+8);let m=y3(p,l,a,y$)?e(p,i,r,a):null;if(m){let e=m.point[h];if(d?e<=l[f+o]:e>=l[f+o+3])return m}let g=y3(f,l,a,y$)?e(f,i,r,a):null;return m&&g?m.distance<=g.distance?m:g:m||g||null}}(0,r,d,e);x9(),null!=p&&(null==l||p.distance<l.distance)&&(l=p,o&&(p.face.materialIndex=h[a].materialIndex))}return l}intersectsGeometry(e,t){let i=this.geometry,r=!1;for(let a of this._roots)if(x8(a),r=y2(0,i,e,t),x9(),r)break;return r}shapecast(e,t,i){let r=this.geometry;if(e instanceof Function){if(t){let e=t;t=(t,i,r,a)=>{let o=3*i;return e(t,o,o+1,o+2,r,a)}}e={boundsTraverseOrder:i,intersectsBounds:e,intersectsTriangle:t,intersectsRange:null}}let a=bd.getPrimitive(),{boundsTraverseOrder:o,intersectsBounds:l,intersectsRange:h,intersectsTriangle:c}=e;if(h&&c){let e=h;h=(t,i,o,l,h)=>!!e(t,i,o,l,h)||yQ(t,i,r,c,o,l,a)}else h||(h=c?(e,t,i,o)=>yQ(e,t,r,c,i,o,a):(e,t,i)=>i);let d=!1,p=0;for(let e of this._roots){if(x8(e),d=y1(0,r,l,h,o,p),x9(),d)break;p+=e.byteLength}return bd.releasePrimitive(a),d}bvhcast(e,t,i){let{intersectsRanges:r,intersectsTriangles:a}=i,o=this.geometry.index,l=this.geometry.attributes.position,h=e.geometry.index,c=e.geometry.attributes.position;bi.copy(t).invert();let d=bd.getPrimitive(),p=bd.getPrimitive();if(a){let e=function(e,i,r,f,m,g,v,y){for(let x=r,b=r+f;x<b;x++){yY(p,3*x,h,c),p.a.applyMatrix4(t),p.b.applyMatrix4(t),p.c.applyMatrix4(t),p.needsUpdate=!0;for(let t=e,r=e+i;t<r;t++)if(yY(d,3*t,o,l),d.needsUpdate=!0,a(d,p,t,x,m,g,v,y))return!0}return!1};if(r){let t=r;r=function(i,r,a,o,l,h,c,d){return!!t(i,r,a,o,l,h,c,d)||e(i,r,a,o,l,h,c,d)}}else r=e}e.getBoundingBox(bt),bt.applyMatrix4(t);let f=this.shapecast({intersectsBounds:e=>bt.intersectsBox(e),intersectsRange:(t,i,a,o,l,h)=>(be.copy(h),be.applyMatrix4(bi),e.shapecast({intersectsBounds:e=>be.intersectsBox(e),intersectsRange:(e,a,h,c,d)=>r(t,i,e,a,o,l,c,d)}))});return bd.releasePrimitive(d),bd.releasePrimitive(p),f}intersectsBox(e,t){return br.set(e.min,e.max,t),br.needsUpdate=!0,this.shapecast({intersectsBounds:e=>br.intersectsBox(e),intersectsTriangle:e=>br.intersectsTriangle(e)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,i={},r={},a=0,o=1/0){e.boundingBox||e.computeBoundingBox(),br.set(e.boundingBox.min,e.boundingBox.max,t),br.needsUpdate=!0;let l=this.geometry,h=l.attributes.position,c=l.index,d=e.attributes.position,p=e.index,f=bd.getPrimitive(),m=bd.getPrimitive(),g=null,v=null;r&&(g=bl,v=bh);let y=1/0,x=null,b=null;return bi.copy(t).invert(),bs.matrix.copy(bi),this.shapecast({boun
3135dsTraverseOrder:e=>br.distanceToBox(e),intersectsBounds:(e,t,i)=>i<y&&i<o&&(t&&(bs.min.copy(e.min),bs.max.copy(e.max),bs.needsUpdate=!0),!0),intersectsRange:(i,r)=>{if(e.boundsTree)return e.boundsTree.shapecast({boundsTraverseOrder:e=>bs.distanceToBox(e),intersectsBounds:(e,t,i)=>i<y&&i<o,intersectsRange:(e,o)=>{for(let l=3*e,w=(e+o)*3;l<w;l+=3){yY(m,l,p,d),m.a.applyMatrix4(t),m.b.applyMatrix4(t),m.c.applyMatrix4(t),m.needsUpdate=!0;for(let e=3*i,t=(i+r)*3;e<t;e+=3){yY(f,e,c,h),f.needsUpdate=!0;let t=f.distanceToTriangle(m,bn,g);if(t<y&&(bo.copy(bn),v&&v.copy(g),y=t,x=e/3,b=l/3),t<a)return!0}}}});{let e=p?p.count:d.count;for(let o=0;o<e;o+=3){yY(m,o,p,d),m.a.applyMatrix4(t),m.b.applyMatrix4(t),m.c.applyMatrix4(t),m.needsUpdate=!0;for(let e=3*i,t=(i+r)*3;e<t;e+=3){yY(f,e,c,h),f.needsUpdate=!0;let t=f.distanceToTriangle(m,bn,g);if(t<y&&(bo.copy(bn),v&&v.copy(g),y=t,x=e/3,b=o/3),t<a)return!0}}}}}),bd.releasePrimitive(f),bd.releasePrimitive(m),y===1/0?null:(i.point?i.point.copy(bo):i.point=bo.clone(),i.distance=y,i.faceIndex=x,r&&(r.point?r.point.copy(v):r.point=v.clone(),r.point.applyMatrix4(bi),bo.applyMatrix4(bi),r.distance=bo.sub(r.point).length(),r.faceIndex=b),i)}closestPointToPoint(e,t={},i=0,r=1/0){let a=i*i,o=r*r,l=1/0,h=null;if(this.shapecast({boundsTraverseOrder:t=>(ba.copy(e).clamp(t.min,t.max),ba.distanceToSquared(e)),intersectsBounds:(e,t,i)=>i<l&&i<o,intersectsTriangle:(t,i)=>{t.closestPointToPoint(e,ba);let r=e.distanceToSquared(ba);return r<l&&(bn.copy(ba),l=r,h=i),r<a}}),l===1/0)return null;let c=Math.sqrt(l);return t.point?t.point.copy(bn):t.point=bn.clone(),t.distance=c,t.faceIndex=h,t}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(t=>{yw(0,new Float32Array(t),bc),e.union(bc)}),e}},bp=tB(tF()),bf=.5*(Math.sqrt(3)-1),bm=(3-Math.sqrt(3))/6,bg=1/3,bv=1/6,by=e=>0|Math.floor(e),bx=new Float64Array([1,1,-1,1,1,-1,-1,-1,1,0,-1,0,1,0,-1,0,0,1,0,-1,0,1,0,-1]),bb=new Float64Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]);function bw(e){let t=new Uint8Array(512);for(let e=0;e<256;e++)t[e]=e;for(let i=0;i<255;i++){let r=i+~~(e()*(256-i)),a=t[i];t[i]=t[r],t[r]=a}for(let e=256;e<512;e++)t[e]=t[e-256];return t}var bS,b_=new rI,bA=class{constructor(e){this.weightAttribute=null;let t=e.geometry;if(!t.isBufferGeometry||3!==t.attributes.position.itemSize)throw Error("THREE.MeshSurfaceSampler: Requires BufferGeometry triangle mesh.");t.index&&(t=t.toNonIndexed()),this.geometry=t,this.randomFunction=Math.random,this.positionAttribute=this.geometry.getAttribute("position"),this.distribution=null}build(){let e=this.positionAttribute,t=new Float32Array(e.count/3);for(let i=0;i<e.count;i+=3){let r=1;b_.a.fromBufferAttribute(e,i),b_.b.fromBufferAttribute(e,i+1),b_.c.fromBufferAttribute(e,i+2),r*=b_.getArea(),t[i/3]=r}this.distribution=new Float32Array(e.count/3);let i=0;for(let e=0;e<t.length;e++)i+=t[e],this.distribution[e]=i;return this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t){if(this.distribution){let i=this.distribution[this.distribution.length-1],r=this.binarySearch(this.randomFunction()*i);return this.sampleFace(r,e,t)}}binarySearch(e){if(!this.distribution)return 0;let t=this.distribution,i=0,r=t.length-1,a=-1;for(;i<=r;){let o=Math.ceil((i+r)/2);if(0===o||t[o-1]<=e&&t[o]>e){a=o;break}e<t[o]?r=o-1:i=o+1}return a}sampleFace(e,t,i){let r=this.randomFunction(),a=this.randomFunction();return r+a>1&&(r=1-r,a=1-a),b_.a.fromBufferAttribute(this.positionAttribute,3*e),b_.b.fromBufferAttribute(this.positionAttribute,3*e+1),b_.c.fromBufferAttribute(this.positionAttribute,3*e+2),t.set(0,0,0).addScaledVector(b_.a,r).addScaledVector(b_.b,a).addScaledVector(b_.c,1-(r+a)),b_.getNormal(i),this}},bM=tB(tN()),bC=new i6,bE=new i6,bT=new i6;(bS||(bS={})).is=function(e){return e&&e.__isSPEObject};var bP=e=>class extends e{constructor(){super(...arguments),this.previousModelViewMatrix=new i6,this.copyPreviousMatrix=!0,this.hiddenMatrix=new i6,this.pivotMatrix=new i6,this.matrixWorldRigid=new i6,this.shearScale=new i6,this.shearScaleInv=new i6}get __isSPEObject(){return!0}
3135isDescendantOf(e){e instanceof rw&&(e=e.uuid);let t=this;for(;t.parent;){if(t.parent.uuid===e)return!0;t=t.parent}return!1}updateMatrixWorld(e){for(let t of(this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(null===this.parent?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),this.matrixWorld.multiply(this.pivotMatrix),this.matrixWorldNeedsUpdate=!1,e=!0),this.children))t.updateMatrixWorld(e)}updateWorldMatrix(e,t){let i=this.parent;if(e&&null!==i&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),this.matrixWorld.multiply(this.pivotMatrix),t)for(let e of this.children)e.updateWorldMatrix(!1,!0)}traverseChildren(e,t=0){for(let i of this.children)bS.is(i)&&i.traverseObject(e,t+1)}traverseObject(e,t=0){if(!0!==e(this,t))for(let i of this.children)bS.is(i)&&i.traverseObject(e,t+1)}updateMatrixWorldSVD(){let e=this.matrixWorld.elements,t=[[e[0],e[4],e[8]],[e[1],e[5],e[9]],[e[2],e[6],e[10]]],{u:i,v:r,q:a}=(0,bM.SVD)(t),o=bC.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),l=bE.set(r[0][0],r[0][1],r[0][2],0,r[1][0],r[1][1],r[1][2],0,r[2][0],r[2][1],r[2][2],0,0,0,0,1),h=bT.copy(l).transpose();
3135this.shearScale.makeScale(a[0],a[1],a[2]).multiply(h).premultiply(l),this.shearScaleInv.copy(this.shearScale).invert(),this.matrixWorldRigid.multiplyMatrices(o,h).copyPosition(this.matrixWorld),a.every(e=>.01>Math.abs(a[0]-e))?this.hasNonUniformScale=!1:this.hasNonUniformScale=!0}attach(e,t){this.updateWorldMatrix(!0,!1);let i=new i6().copy(this.matrixWorld).invert();return null!==e.parent&&(e.parent.updateWorldMatrix(!0,!1),i.multiply(e.parent.matrixWorld)),"hiddenMatrix"in e&&e.hiddenMatrix instanceof i6?e.hiddenMatrix.premultiply(i):e.applyMatrix4(i),e.updateWorldMatrix(!1,!1),this.add(e),void 0!==t&&(this.children.pop(),this.children.splice(t,0,e)),this}copy(e,t=!1){return super.copy(e,t),this.hasNonUniformScale=e.hasNonUniformScale,this}onAfterRender(e,t,i,r,a,o){this.copyPreviousMatrix&&this.previousModelViewMatrix.copy(this.modelViewMatrix)}},bD=class extends bP(rw){},bO=class extends bD{constructor(e){super(),this.object=e,this.matrixAutoUpdate=!1,this.hasNonUniformScale=e.hasNonUniformScale}raycast(e,t){}expand(){let e=0,t=this.object.entityChildren(e);for(;t;){let i=this.children[e];i?.object!==t&&(i&&this.remove(i),i=new bO(t),this.add(i),this.children.splice(e,0,this.children.pop()),i.matrixWorldNeedsUpdate=!0,i.matrixAutoUpdate=!1,i.matrix=t.matrix,i.hiddenMatrix=t.hiddenMatrix,i.pivotMatrix=t.pivotMatrix),i.expand(),e+=1,t=this.object.entityChildren(e)}for(;this.children.length>e;)this.remove(this.children[e]);this.pivotMatrix=this.object.pivotMatrix}get visible(){return void 0!==this.playModeVisible?this.playModeVisible:this.object.visible||this.object.dataPatched.visible&&this.object.dataPatched.cloner?.hideBase===!0}set visible(e){}get castShadow(){return this.object.castShadow}set castShadow(e){}get receiveShadow(){return this.object.receiveShadow}set receiveShadow(e){}get isMesh(){return"Mesh"===this.object.type}get isLight(){return this.object.isLight}get layers(){return this.object.layers}set layers(e){}get isCamera(){return!1}get geometry(){if(this.object.geometry)return this.object.geometry}get material(){if(this.object.material)return this.object.material}get morphTargetInfluences(){if(this.object.morphTargetInfluences)return this.object.morphTargetInfluences}set morphTargetInfluences(e){}},bI=new iD,bR=new iD,bL=new i6,bB=[new iD(-1,1,1),new iD(-1,-1,1),new iD(1,-1,1),new iD(1,1,1),new iD(-1,1,-1),new iD(-1,-1,-1),new iD(1,-1,-1),new iD(1,1,-1)],bz=[[0,3],[1,2],[5,6],[4,7],[0,1],[3,2],[7,6],[4,5],[0,4],[1,5],[2,6],[3,7]],bF=[[0,2],[7,5],[4,1],[3,6],[4,3],[1,6]],bN=(e,t,i)=>{e.updateEntityBoxSize(bI,bR),bL.copy(t).multiply(e.matrixWorld),0===bR.x&&0===bR.y&&0===bR.z?i.push(new iD(bI.x,bI.y,bI.z).applyMatrix4(bL)):bB.forEach(e=>{i.push(e.clone().multiply(bR).add(bI).applyMatrix4(bL))})},bU=class extends iR{constructor(){super(...arguments),this.matrix=new i6,this.vertices=[],this.faces=[],this.edges=[],this.centerEdges=[]}copy(e){return super.copy(e),this.matrix.copy(e.matrix),this.vertices=e.vertices.map(e=>e.clone()),this.faces=e.faces.map(e=>e.clone()),this.edges=e.edges.map(e=>e.clone()),this.centerEdges=e.centerEdges.map(e=>e.clone()),this}setFromObjectSize(e,t=!1){e.updateWorldMatrix(!1,t),this.makeEmpty(),this.matrix.copy(e.matrixWorld);let i=new i6().copy(e.matrixWorld).invert();return this.expandByObjectSize(e,i,t)}expandByObjectSize(e,t,i=!1){let r=[];return!0===i?e.traverseEntity(e=>{if(e.visible||e.cloner&&e.data.visible){if(!("geometry"in e))return void r.push(new iD);bN(e,t,r)}}):bN(e,t,r),this.setFromPoints(r)}getCenter(e){return(e=super.getCenter(e)).applyMatrix4(this.matrix),e}getPositionToCenter(e){return(e=super.getCenter(e)).applyMatrix4(bL.copy(this.matrix).setPosition(0,0,0)),e}computeVertices(){this.getSize(bR).multiplyScalar(.5),this.getCenter(bI),bL.copy(this.matrix).setPosition(bI),this.vertices=bB.map(e=>e.clone().multiply(bR).applyMatrix4(bL))}computeEdges(){this.vertices.length>0&&this.computeVertices(),this.edges=bz.map(([e,t])=>new lK(this.vertices[e],this.vertices[t])),this.centerEdges=this.edges.map(e=>e.getCenter(new iD))}computeFaces(){this.vertices.length>0&&this.computeVertices(),this.faces=bF.map(([e,t])=>this.vertices[e].clone().add(this.vertices[t]).multiplyScalar(.5))}},bk={Cloner:()=>{},changeEntityProptotype:()=>{},createEntity:()=>{}},bV=class extends og{constructor(){super()}getPoints(e=12){let t=[],i,r=this.getCurveLengths(),a=r[r.length-1]/r.length;for(let o=0,l=this.curves;o<l.length;o++){let h=l[o],c=Math.ceil(e*(0===o?r[o]:r[o]-r[o-1])/a),d=h.getPoints(c);for(let e=0;e<d.length;e++){let r=d[e];i&&i.equals(r)||(t.push(r),i=r)}}return this.autoClose&&t.length>
31351&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}};function bj(e,t,i){return .001>=t.clone().sub(e).cross(t.clone().sub(i)).length()}function bG(e,t){let i=new iD(...e.position),r=new iD(...e.controlNext.position),a=new iD(...t.controlPrevious.position),o=new iD(...t.position);return bj(i,r,o)&&bj(i,a,o)}function bW(e){let t=e.points.map(e=>new iD(...e.data.position)),i=[e.points[0]],r=new iD(...i[0].data.position);for(let a=0;a<e.points.length-1;a++)bj(r,t[a],t[a+1])||(i.push(e.points[a]),r=t[a]);i.push(e.points[e.points.length-1]);let a=e.isClosed,o=i.length-!a,l=i.length,h=[];for(let t=0;t<l;t++){let r=i[t].data,o=new iD(...r.position),c=new iD(...r.controlPrevious.position),d=new iD(...r.controlNext.position),p={position:o,baseRoundness:r.roundness,controlPrevious:c,controlNext:d};if(0===r.roundness||!e.isClosed&&(0===t||t===l-1)){h[t]={...p,removedLength:0};continue}let f=a&&0==t?l-1:t-1,m=a&&t==l-1?0:t+1,g=i[f].data,v=i[m].data,y=new iD(...g.position),x=new iD(...v.position),b=y.clone().sub(o).normalize(),w=x.clone().sub(o).normalize();Object.assign(p,{prevDir:b,nextDir:w});let S=bG(g,r),_=bG(r,v);if(S&&_){let e=b.clone().add(w).normalize(),i=e.clone().cross(b).length()/b.dot(e);h[t]={...p,tan:i,removedLength:r.roundness/i}}else h[t]={...p,removedLength:0}}for(let e=0;e<o;e++){let t=e,i=a&&e===l-1?0:e+1,r=h[t],o=h[i];if(0!==r.removedLength||0!==o.removedLength){let e=r.position.distanceTo(o.position);r.removedLength=Math.min(r.removedLength,e/2),o.removedLength=Math.min(o.removedLength,e/2)}}let c=[];for(let e=0;e<o;e++){let t=e,r=a&&e===l-1?0:e+1,o=h[t],d=h[r],p=null;if(bG(i[t].data,i[r].data)){let e=o.position.clone(),t=d.position.clone();(0!==o.removedLength||0!==d.removedLength)&&(o.nextDir&&e.add(o.nextDir.clone().setLength(o.removedLength)),d.prevDir&&t.add(d.prevDir.clone().setLength(d.removedLength))),e.distanceTo(t)>.001&&(p=new oh(e,e.clone().lerp(t,.3),t.clone().lerp(e,.3),t))}else o.position.distanceTo(d.position)>.001&&(p=new oh(o.position,o.controlNext,d.controlPrevious,d.position));c[2*e+1]=p}for(let e=0;e<l;e++){let t=h[e];if(0===t.removedLength){c[2*e]=null;continue}let i=t.position,r=t.prevDir.clone().multiplyScalar(t.removedLength).add(i),a=t.nextDir.clone().multiplyScalar(t.removedLength).add(i),o=t.tan*t.removedLength,l=t.prevDir.clone().add(t.nextDir).normalize(),d=r.clone().lerp(a,.5),p=r.distanceTo(a)/2,f=l.clone().multiplyScalar(Math.sqrt(Math.pow(o,2)-Math.pow(p,2))).add(d),m=l.clone().multiplyScalar(-o).add(f),g=i.distanceTo(m)/i.distanceTo(d),v=t.prevDir.clone().multiplyScalar(g*i.distanceTo(r)).add(i),y=v.clone().lerp(m,2),x=r.clone().lerp(v,4/3),b=a.clone().lerp(y,4/3);c[2*e]=new oh(r,x,b,a)}let d=new bV;return c.forEach(e=>{e&&d.add(e)}),d}(S7||(S7={})).is=function(e){return e&&e.__isEntity};var bH=e=>S7.is(e),bq={type:"completeState",isfromEntity:!0},bX=["x","y","z"],bY=new iD,bQ=new iD(1,1,1),bZ=new iP,bK=new rn,bJ=new iD().set(0,1,0),b$=e=>class extends bP(e){constructor(){super(...arguments),this.raycastLock=!1,this.scaleLock=!1,this.disposed=!1,this.stateSelection=null,this.destroyedInAction=!1,this.instances=[],this.prevState=null,this.currentState=null,this.currentAnimationAction=null,this.reversibleToState=null,this.currentTransitionEvent=null,this.previousAction=null,this._singleBBox=new bU,this._recursiveBBox=new bU,this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this._needApplyPathSnapping=!0,this.attachedPaths=new Set}get __isEntity(){return!0}entityChildren(e){let t=this.children[e];if(S7.is(t))return t}entityChildrenCount(){let e=this.children.length;for(;e--;)if(S7.is(this.children[e]))return e+1;return 0}get isConcreteEntity(){return"string"==typeof this.identity}get isVirtualEntity(){return"string"!=typeof this.identity}get isInstanceRoot(){return this.isConcreteEntity&&"Instance"===this.data.type}nearestInstanceSelfOrParent(){let e=this;for(;"Instance"!==e.data.type;){let t=e.parent;if(!S7.is(t))return;e=t}return e}forInstancesRec(e){this.instances.forEach(t=>{t.disposed||e(t),t.forInstancesRec(e)})}super_Entity(e,t){"string"==typeof e&&(this.uuid=e),this.identity=e,this.data=t,this.matrixAutoUpdate=!1,this.dataPatched=this.data}changeSelectedState(e,t,i=!1){if(!(0===this.data.states.length&&!i)){for(let e of this.data.states)xm.toOps(this.data,e.data).forEac
vendor: 11,043 bytes, line 3135
3135h(e=>{let i=fS.replaceProps(e,this.data);this.dataPatched=this.data,this.updateByPatchedOp(i,this.data,t)});if(null!==e){let i=this.data.states.data(e);i&&(this.dataPatched=xm.patch(this.data,i),xm.toOps(this.data,i).forEach(e=>{this.updateByPatchedOp(e,this.dataPatched,t)}))}i&&this.updateTransformState(this.dataPatched,t),this.stateSelection=e,this.updatePathSnapping(this.dataPatched.pathSnapping)}}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges(),this._singleBBox.computeFaces()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges(),this._recursiveBBox.computeFaces()),this._recursiveBBox}updateEntityBoxSize(e,t){e.setScalar(0),t.setScalar(0)}resetBBoxNeedsUpdateSelf(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}resetBBoxNeedsUpdate(){this.resetBBoxNeedsUpdateSelf(),this.traverseAncestors(e=>{bH(e)&&e.resetBBoxNeedsUpdateSelf()}),this.traverseEntity(e=>{e.resetBBoxNeedsUpdateSelf()})}find(e){let t;return this.traverseEntity(i=>{i.uuid===e&&(t=i)}),t}traverseSortNextHelper(){let e=this.parent;if(e){let t=e.children,i=t.indexOf(this)+1;if(S7.is(t[i]))return t[i];if(S7.is(e))return e.traverseSortNextHelper()}}sortNext(){let e=this.children;return this.children.length>0&&S7.is(this.children[0])?e[0]:this.traverseSortNextHelper()}goUp(e){let t=this;for(;e>0&&null!==t;)t=t.parent,e-=1;return t}hasAnccestorOrSelf(e){return this===e||this.hasAnccestor(e)}hasAnccestor(e){let t=this.parent;for(;t;){if(e===t)return!0;t=t.parent}return!1}countToAccestor(e){let t=0,i=this;for(;i!==e;){if(null===i)return -1;i=i.parent,t+=1}return t}forEachEntity(e){for(let t of this.children)bH(t)&&e(t)}traverseEntityAncestors(e){this.traverseAncestors(t=>{S7.is(t)&&e(t)})}traverseConcreteEntity(e,t=0){if(!0!==e(this,t))for(let i of this.children)bH(i)&&i.isConcreteEntity&&i.traverseEntity(e,t+1)}traverseEntity(e,t=0){if(!0!==e(this,t))for(let i of this.children)bH(i)&&i.traverseEntity(e,t+1)}traverseVisibleEntity(e){for(let t of(e(this),this.children))bH(t)&&t.visible&&t.traverseVisibleEntity(e)}updateMatrix(){super.updateMatrix(),this.cloner&&this.cloner.onObjUpdateMatrix(),this.dispatchEvent({type:"updateMatrix"})}updateMatrixWorld(e){super.updateMatrixWorld(e),this.dispatchEvent({type:"updateMatrixWorld"})}copy(e,t=!1){return super.copy(e,t),this.dataPatched=e.dataPatched,this.raycastLock=e.raycastLock,this.scaleLock=e.scaleLock,this.hiddenMatrix.copy(e.hiddenMatrix),this}hasEntityChild(){return this.children.some(e=>bH(e))}isAncestorOf(e){if(this.uuid===e)return!1;let t=!1;return this.traverseEntity(i=>{i.uuid===e&&(t=!0)}),t}toObjectTransformState(e=[]){return this.updateWorldMatrix(!0,!1),pa({position:this.position.toArray(),rotation:[this.rotation.x*t8.RAD2DEG,this.rotation.y*t8.RAD2DEG,this.rotation.z*t8.RAD2DEG],scale:this.scale.toArray(),hiddenMatrix:this.hiddenMatrix.toArray(),pivot:[0,0,0],pivotRotation:[0,0,0]},e)}getTransformValues(e,t,i){return t[e].map((t,r)=>i?.shared.getVariable(t,[this.uuid,e,bX[r]])??t)}updateTransformState(e,t){let i=!1;if(e.position&&(this.position.fromArray(this.getTransformValues("position",e,t)),i=!0),e.rotation&&(bY.fromArray(this.getTransformValues("rotation",e,t)).multiplyScalar(t8.DEG2RAD),this.rotation.setFromVector3(bY),i=!0),e.scale&&(this.scale.fromArray(this.getTransformValues("scale",e,t)),i=!0),void 0!==e.hiddenMatrix&&(i=!0,this.hiddenMatrix.fromArray(e.hiddenMatrix??gE.identity)),void 0!==e.pivot||void 0!==e.pivotRotation){if(i=!0,void 0!==e.pivot&&void 0!==e.pivotRotation)this.pivotMatrix.compose(bY.fromArray(e.pivot).negate(),bZ.setFromEuler(bK.fromArray(e.pivotRotation.map(e=>e*t8.DEG2RAD))).invert(),bQ);else if(void 0!==e.pivot)this.pivotMatrix.setPosition(-e.pivot[0],-e.pivot[1],-e.pivot[2]);else if(void 0!==e.pivotRotation){let t=bY.setFromMatrixPosition(this.pivotMatrix);bZ.setFromEuler(bK.fromArray(e.pivotRotation.map(e=>e*t8.DEG2RAD))).invert(),this.pivotMatrix.compose(t,bZ,bQ)}}return i&&(this.updateMatrix(),this.resetBBoxNeedsUpdate(),this.invalidateClonerTransform(this),this.traverseEntityAncestors(e=>{e.invalidateClonerTransform(this)})),e.position&&e.rotation&&e.scale&&void 0!==e.hiddenMatrix&&this.updateWorldMatrix(!1,!0),i}onVariableUpdate(e=!1){e?this.resetBBoxNeedsUpdate():(this.updateMatrix(),this.resetBBoxNeedsUpdate(),this.invalidateClonerTransform(this),this.traverseEntityAncestors(e=>{e.invalidateClonerTransform(this)}),this.requestRender())}dispose(){this.disposed=!0,this.cloner&&(this.cloner.removeFromParent(),this.cloner=void 0)}disposeChildrenRecursively(){for(let e of this.children)S7.is(e)&&e.disposeRecursively()}disposeRecursively(){this.dispose(),this.children.forEach(e=>{S7.is(e)&&e.disposeRecursively()})}toState(e=[]){return pa({name:this.name,visible:this.visible,raycastLock:this.raycastLock,...this.toObjectTransformState(e)},e)}updateByObjUpdateOp(e,t){void 0!==e&&this.updateByOp({type:0,props:e,path:[]},{...this.data,...e},t,!1)}updateByOp(e,t,i,r){let a=this.data;this.data=t;let o=e,l=fv(e.path,["states","*"]);if(null!==l){if(0===e.type){let[t]=l;if(this?.stateSelection===t){let t={...e.props};if(delete t.name,Object.values(e.props).some(e=>void 0===e)){let i=this.data;if(void 0!==i){let r=fM.zoom(i,e.path.slice(2));if(r)for(let i in e.props)void 0===e.props[i]&&i in r&&(t[i]=r[i])}}o={...e,props:t,path:e.path.slice(2)}}}}else if(0===e.type){let t=this.stateSelection?this.data.states.data(this.stateSelection):void 0;if(void 0!==t){if(void 0!==e.props.name&&t.name){let{name:e,...i}=t;t=i}if(void 0!==e.props.material&&"material"in t){let{material:e,...i}=t;t=i}let i=fM.removeOverridden(e.path,e.props,t);o={...e,props:i}}}if(this.updateByPatchedOpBase(o,xm.patch(this.data,this.stateSelection?this.data.states.data(this.stateSelection):void 0),i),fv(e.path,["overrides"])){let r=[],a=[...e.path];for(r.push(a[1]),a.splice(0,2);a.length>0&&"descendants"===a[0];)r.push(a[1]),a.splice(0,2);if(void 0===r[r.length-1]){if(0===e.type)for(let t of Object.keys(e.props)){r[r.length-1]=t;let a=i.scene.findInstance([this.uuid,...r]);a&&(a.overrideData=e.props[t],a.updateState(pJ.apply(a.component.data,a.overrideData),i))}}else{let o=i.scene.findInstance([this.uuid,...r]);if(o){let l=fM.zoom(o.component.data,a);if(0===(e={...e,path:a}).type){let t=e.props;if(l)for(let[i,r]of Object.entries(e.props))void 0===r&&(t===e.props&&(t={...e.props}),t[i]=l[i]);e={...e,props:t}}o.overrideData=xd.resolve(t.overrides,r),o.updateByOp(e,f_.applySimple(o.data,e),i,!1)}}}else if(this.instances.length>0){let r;if(0===e.path.length&&0===e.type){let t;for(let i of xu.rootOverrideProps)i in e.props&&(void 0===t&&(t={}),t[i]=e.props[i]);t&&(r={...e,props:t})}else for(let t of xu.rootOverrideProps)if(fv(e.path,[t])){r=e;break}void 0!==r&&this.instances.forEach(e=>{if(e.isInstanceRoot){let t=pJ.filterOp(e.overrideData,r);t&&e.updateByOp(t,f_.applySimple(e.data,t),i,!0)}}),this.instances.forEach(r=>{if(!r.isInstanceRoot){let o=pJ.filterOp(r.overrideData,e);if(o){let l;l=a===r.data&&e===o?t:f_.applySimple(r.data,o),r.updateByOp(o,l,i,!0)}}})}}updateByPatchedOpBase(e,t,i){if(this.dataPatched=t,0===e.path.length&&0===e.type)void 0===e.props.type||gX.is(e.props.type)||bk.changeEntityProptotype(this,t,i);else if(1===e.path.length&&"geometry"===e.path[0]&&0===e.type&&"type"in e.props)for(let e of(bk.changeEntityProptotype(this,t,i),this.children))S7.is(e)&&e.updateVisible(i.scene);this.updateByPatchedOp(e,t,i)}updateByPatchedOp(e,t,i){if(0===e.path.length&&0===e.type?this.updateState(e.props,i):0===e.type&&("resolutionLevel"in e.props||"useChildrenColors"in e.props)&&this.updateState(t,i),"morphTargetInfluences"===e.path[0]&&0===e.type){let r=t.morphTargetInfluences.get(e.path[1])?.data.name;r&&this.updateMorphInfluences(r,i.shared.getVariable(e.props.value,[this.uuid,"morphTargetInfluences",r]))}if(null!==fv(e.path,["pathSnapping"])&&this.updatePathSnapping(t.pathSnapping),null!==fv(e.path,["cloner"])){let r=f_.drop(e,1);0===r.path.length&&0===r.type&&!0===r.props.disabled?this.setFromClonerState(null,i):this.cloner?this.cloner.updateState(t.cloner,i):(this.setFromClonerState(t.cloner,i),this.expandCloner(i)),this.updateVisible(i.scene)}}updatePathSnapping(e=this.dataPatched.pathSnapping){this._updatedPathSnapping=e,this._needApplyPathSnapping=!0}get updatedPathSnapping(){return this._updatedPathSnapping}applyPathSnapping(e){let t=this._updatedPathSnapping?.pathId??this.dataPatched.pathSnapping.pathId,i=this._updatedPathSnapping?.slide??this.dataPatched.pathSnapping.slide??0,r=this._updatedPathSnapping?.offset??this.dataPatched.pathSnapping.offset??0,a=this._updatedPathSnapping?.orientation??this.dataPatched.pathSnapping.orientation;if(null===t)return;let o=e.find(t);if(!o||!1===this._needApplyPathSnapping)return;this._needApplyPathSnapping=!1;let l=o.data;if(l.geometry.path.points.length<=1)return;let h=bW(l.geometry.path),c=(i+r)%1;i+r===1&&0===c&&(c=1);let d=null;try{d=h.curves.length?h.getPointAt(c):null}catch{}if(null===d)return;let p=this.parent?this.parent?.matrixWorld:new i6;o.updateMatrixWorld();let f=new i6().multiplyMatrices(p.clone().invert(),o.matrixWorld);d.applyMatrix4(f);let m={position:d.toArray(),rotation:l.rotation};if("tangential"===a){let e=new i6().extractRotation(o.matrixWorld),t=h.getTangentAt(c).applyMatrix4(e).add(d),i=new i6().lookAt(d,t,bJ),r=bY.setFromEuler(new rn().setFromRotationMatrix(i)).multiplyScalar(t8.RAD2DEG);m={...m,rotation:r.toArray()}}this.updateTransformState(m),this.traverseEntity(e=>{e._cameraType&&e.dispatchEvent(bq)})}updateVisible(e){if(this.visible=this.dataPatched.visible&&(!this.dataPatched.cloner||(this.dataPatched.cloner.disabled??!1)||this.dataPatched.cloner?.hideBase!==!0),!e)return;let t=!1;this.traverseEntity(e=>{if("Splat"===e.data.type)return t=!0,!0}),t&&e.reloadSplats()}updateState_Entity(e,t){void 0!==e.name&&(this.name=e.name),void 0!==e.raycastLock&&(this.raycastLock=e.raycastLock),void 0!==e.visible&&(this.updateVisible(t?.scene),this.resetBBoxNeedsUpdate()),t&&"cloner"in e&&void 0!==e.cloner&&(this.setFromClonerState(e.cloner,t),this.updateVisible(t.scene)),this.updateTransformState(e,t)}get attachedSurfaceCloners(){return this.children.filter(e=>e instanceof bk.Cloner&&"toObject"===e.parameters.type)}setFromClonerState(e,t){this.disposed||(null===e||e.disabled?(this.cloner&&this.cloner.removeFromParent(),this.cloner=void 0):void 0===this.cloner?(this.cloner=new bk.Cloner(this,e),t.scene.addPendingExpandCloner(this)):this.cloner.updateState(e,t))}expandCloner(e){!this.disposed&&this.cloner&&this.cloner.expandClones(e)}invalidateClonerTransform(e){this.cloner&&this.cloner.invalidateTransform(e)}requestRender(){this.dispatchEvent({type:"requestRender"})}},b0=class{static create(e){return this.build(this.normalizeInputs(e))}
3135static normalizeInputs(e,t){let i=e.parameters?.radiusTop,r=e.parameters?.radiusBottom,a=Object.assign({},t?.parameters??{width:100,radialSegments:64,heightSegments:1,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadius:8,cornerSegments:8,hollow:0},e.parameters);a.thetaLength=t8.clamp(a.thetaLength,0,360);let o=a.width/2,l=a.radiusTop??o,h=a.radiusBottom??o;if(l===h?(l=o,h=o):l>h?(l=o,h=h*o/l):(l=l*o/h,h=o),a.shapeBlendNode){let e=2*Math.max(l=i??o,h=r??o);a.width=e,a.depth=e}return{parameters:Object.assign(a,{width:Math.abs(a.width),height:Math.abs(a.height??a.width),depth:Math.abs(a.depth??a.width),radiusTop:l,radiusBottom:h})}}static build(e){let{width:t,depth:i,height:r,radialSegments:a,heightSegments:o,openEnded:l,thetaStart:h,thetaLength:c,radiusTop:d,radiusBottom:p,cornerRadius:f,cornerSegments:m,hollow:g}=e.parameters,v;return 0===c?(v=new rQ).setAttribute("position",new rV([],3)):v=f||g?new b3(d,p,r,a,o,l,h,c*Math.PI/180,f,f,m,g):new ox(d,p,r,a,o,l,h,c*Math.PI/180),v.scale(1,1,i/t),Object.assign(v,{userData:{...e,type:"CylinderGeometry"}})}};function b1(e,t,i){i.x=e.x*t.x,i.y=e.y,i.z=e.x*t.y}function b2(e){return new t9(e.y,-e.x)}var b3=class extends rQ{constructor(e,t,i,r,a,o,l,h,c,d,p,f,m=!1){super(),this.type="RoundedCylinderBufferGeometry",e=void 0!==e?e:1,t=void 0!==t?t:1,i=i||1,r=Math.floor(r)||8,a=Math.floor(a)||1,o=void 0!==o&&o,l=void 0!==l?l:0,h=void 0!==h?h:2*Math.PI,o&&(c=0,d=0);let g=[],v=[],y=[],x=[],b=0,w=i/2,S=new iD,_=new iD;m&&0==e&&(e=c),m&&0==t&&(t=d);let A=new t9(e,w),M=new t9(t,-w),C=null,E=null,T=null,P=null,D=A.clone().sub(M),O=0,I=0,R=0;f>0&&(O=Math.min(e,t)*(1-f),I=e-O,R=t-O);let L=A.clone();L.x-=O;let B=Math.PI-D.angle(),z=D.angle(),F=Math.tan(z/2),N=Math.tan(B/2),U=F+N;if(c=Math.min(c,(e-I)/(f?U:N),D.length()/U),d=Math.min(d,(t-R)/(f?U:F),D.length()/U),c>0){let e=c/F;C=A.clone().sub(new t9(e,c)),f&&(T=C.clone(),T.x-=O-U*c),A.sub(D.clone().setLength(e))}if(d>0){let e=d/N;E=M.clone().sub(new t9(e,-d)),M.add(D.clone().setLength(e)),f&&(P=E.clone(),P.x-=O-U*d,L.sub(D.clone().setLength(e)))}let k=.5>(D=A.clone().sub(M)).length(),V=[];for(let p=0;p<=r;p++){let m=[],g=p/r,w=g*h+l,A=new t9(Math.sin(w),Math.cos(w));if(P&&E?(j(m,g,A,B,d,P,-1,!0),j(m,g,A,z,d,E,-1,!1)):E?(G(m,A,E.x,0,-1),j(m,g,A,z,d,E,-1,!1)):o||G(m,A,t,R,-1),b1(b2(D).normalize(),A,S),!k)for(let e=0;e<=a;e++){let t=e/a;b1(D.clone().multiplyScalar(t).add(M),A,_),v.push(_.x,_.y,_.z),y.push(S.x,S.y,S.z),x.push(g,.5+_.y/i),m.push(b++)}if(T&&C?(j(m,g,A,B,c,C,1,!1),j(m,g,A,z,c,T,1,!0)):C?(j(m,g,A,B,c,C,1,!1),G(m,A,C.x,0,1)):o||G(m,A,e,I,1),f&&!k){b1(b2(D).multiplyScalar(-1).normalize(),A,S);for(let e=0;e<=a;e++){let t=e/a;b1(D.clone().multiplyScalar(-t).add(L),A,_),v.push(_.x,_.y,_.z),y.push(S.x,S.y,S.z),x.push(g,.5+_.y/i),m.push(b++)}}f&&!o&&m.push(m[0]),V.push(m)}for(let e=0;e<V.length-1;e++)for(let t=0;t<V[0].length-1;t++){if(o&&f&&t==a)continue;let i=V[e][t],r=V[e+1][t],l=V[e+1][t+1],h=V[e][t+1],c=v[3*l+0],d=v[3*l+2];g.push(i,r,h),(0!=c||0!=d)&&g.push(r,l,h)}function j(e,t,r,a,o,l,h,c){for(let d=0;d<p+1;d++){let f=d/p,m=h<0?f:1-f;c&&(m-=1);let g=new t9(Math.sin(m*=a),Math.cos(m)*h);b1(g.clone().multiplyScalar(o).add(l),r,_),v.push(_.x,_.y,_.z),b1(g,r,S),y.push(S.x,S.y,S.z),x.push(t,.5+_.y/i),e.push(b++)}}function G(e,t,i,r,a){let o=new iD,l=new t9,h=[i,r];for(let i of(a<0&&h.reverse(),h))l.set(i,w*a),b1(l,t,o),v.push(o.x,o.y,o.z),y.push(0,a,0),x.push(.5,.5),e.push(b++)}function W(i,r,a){let o=new t9(Math.sin(a),Math.cos(a)),l=new t9(-Math.cos(a),Math.sin(a)),h=new iD,c=i<0?(e,t,i)=>g.push(e,t,i):(e,t,i)=>g.push(e,i,t);b1(new t9((e+t+I+R)/4,0),o,h),v.push(h.x,h.y,h.z),y.push(l.x,0,l.y),x.push(.5,.5);let d=b++;for(let e of r){let t=v.slice(3*e,3*e+3);v.push(...t),y.push(l.x,0,l.y);let i=x.slice(2*e,2*e+2);x.push(...i),b++}for(let e=d+1;e<b-1;e++)c(d,e,e+1);c(d,b-1,d+1)}h<2*Math.PI&&(W(-1,V[0],l),W(1,V[V.length-1],l+h)),this.setIndex(g),this.setAttribute("position",new rV(v,3)),this.setAttribute("normal",new rV(y,3)),this.setAttribute("uv",new rV(x,2))}},b4=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:32,heightSegments:8,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadiusTop:8,cornerRadiusBottom:8,cornerSegments:8},e.parameters);return i.thetaLength=t8.clamp(i.thetaLength,0,360),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,depth:i,height:r,radialSegments:a,heightSegments:o,openEnded:l,thetaStart:h,thetaLength:c,cornerRadiusTop:d,cornerRadiusBottom:p,cornerSegments:f}=e.parameters,m;return 0===c?(m=new rQ).setAttribute("position",new rV([],3)):m=d>0||p>0||c<360?new b3(0,t/2,r,a,o,l,h,c*Math.PI/180,d,p,f,0,!0):new ob(t/2,r,a,o,l),m.scale(1,1,i/t),Object.assign(m,{userData:{...e,type:"ConeGeometry"}})}},b5=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,widthSegments:1,heightSegments:1,depthSegments:1,cornerRadius:8,cornerSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,widthSegments:a,heightSegments:o,depthSegments:l,cornerRadius:h,cornerSegments:c}=e.parameters;
3135return Object.assign(0===h?new st(t,i,r,a,o,l):new b8(t,i,r,a,o,l,h,c),{userData:{...e,type:"CubeGeometry"}})}},b6=Math.PI/2,b8=class extends rQ{constructor(e=1,t=1,i=1,r=1,a=1,o=1,l=0,h=4){super(),this.type="BoxGeometry",r=Math.floor(r),a=Math.floor(a),o=Math.floor(o),h=Math.floor(h),l=Math.min(l,e/2,t/2,i/2);let c=[],d=[],p=[],f=[],m=0;function g(e,t,i,r,a,o,h,g,v,y){let x=(o-2*l)/v,b=(h-2*l)/y,w=o/2-l,S=h/2-l,_=g/2,A=v+1,M=y+1,C=0,E=new iD;for(let o=0;o<M;o++){let l=o*b-S;for(let h=0;h<A;h++){let c=h*x-w;E[e]=c*r,E[t]=l*a,E[i]=_,d.push(E.x,E.y,E.z),E[e]=0,E[t]=0,E[i]=g>0?1:-1,p.push(E.x,E.y,E.z),f.push(h/v),f.push(1-o/y),C+=1}}for(let e=0;e<y;e++)for(let t=0;t<v;t++){let i=m+t+A*e,r=m+t+A*(e+1),a=m+(t+1)+A*(e+1),o=m+(t+1)+A*e;c.push(i,r,o),c.push(r,a,o)}m+=C}function v(e,t,i,r,a,o,g,v,y,x){let b=(g-2*l)/x,w=g/2-l,S=v/2-l,_=y/2,A=x+1,M=0,C=new iD,E=new iD;for(let c=0;c<h+1;c++){let m=c/h*b6,g=Math.sin(m)*l,v=(1-Math.cos(m))*l,y=Math.sin(m),T=Math.cos(m);C[t]=(S+g)*a,C[i]=(_-v)*o,E[e]=0,E[t]=y*Math.sign(C[t]),E[i]=T*Math.sign(C[i]);for(let t=0;t<A;t++){let i=t*b-w;C[e]=i*r,d.push(C.x,C.y,C.z),p.push(E.x,E.y,E.z),f.push(t/x),f.push(0),M+=1}}for(let e=0;e<h;e++)for(let t=0;t<x;t++){let i=m+t+A*e,r=m+t+A*(e+1),a=m+(t+1)+A*(e+1),o=m+(t+1)+A*e;c.push(i,r,o),c.push(r,a,o)}m+=M}function y(r,a,o){let g=new iD,v=new iD(e/2,t/2,i/2);v.subScalar(l);let y=[],x=r*a*o>0?(e,t,i)=>c.push(e,t,i):(e,t,i)=>c.push(e,i,t);for(let e=0;e<=h;e++){let t=[],i=b6*(1-e/h),c=Math.cos(i),x=Math.sin(i),b=0;for(let i=0;i<=e;i++){let i=Math.cos(b),h=Math.sin(b);g.x=c*i,g.y=x,g.z=c*h;let y=v.clone().addScaledVector(g,l);d.push(r*y.x,a*y.y,o*y.z),p.push(r*g.x,a*g.y,o*g.z),f.push(0,0),t.push(m++),b+=b6/e}y.push(t)}let b=y.length-1;for(let e=0;e<b;e++){let t=y[e],i=y[e+1],r=t.length-1;x(t[0],i[1],i[0]);for(let e=1;e<=r;e++)x(t[e-1],t[e],i[e]),x(t[e],i[e+1],i[e])}}g("z","y","x",-1,-1,i,t,e,o,a),g("z","y","x",1,-1,i,t,-e,o,a),g("x","z","y",1,1,e,i,t,r,o),g("x","z","y",1,-1,e,i,-t,r,o),g("x","y","z",1,-1,e,t,i,r,a),g("x","y","z",-1,-1,e,t,-i,r,a),l>0&&(v("z","y","x",-1,-1,1,i,t,e,o),v("z","y","x",1,-1,-1,i,t,e,o),v("z","y","x",-1,1,-1,i,t,e,o),v("z","y","x",1,1,1,i,t,e,o),v("x","y","z",-1,-1,-1,e,t,i,r),v("x","y","z",1,-1,1,e,t,i,r),v("x","y","z",-1,1,1,e,t,i,r),v("x","y","z",1,1,-1,e,t,i,r),v("y","x","z",-1,-1,1,t,e,i,a),v("y","x","z",1,-1,-1,t,e,i,a),v("y","x","z",1,1,1,t,e,i,a),v("y","x","z",-1,1,-1,t,e,i,a),y(1,1,1),y(-1,1,1),y(1,-1,1),y(-1,-1,1),y(1,1,-1),y(-1,1,-1),y(1,-1,-1),y(-1,-1,-1)),this.setIndex(c),this.setAttribute("position",new rV(d,3)),this.setAttribute("normal",new rV(p,3)),this.setAttribute("uv",new rV(f,2))}},b9=class extends rQ{constructor(e=[],t=[],i="",r=1,a=.2,o=4){super(),this.type="PolyhedronGeometryRound";let l=[],h=[],c=[];(function(){0==(a=Math.min(1-1e-5,a))&&(o=0);let h={IcosahedronGeometry:5,DodecahedronGeometry:3,HexahedronGeometry:3,OctahedronGeometry:4,TetrahedronGeometry:3}[i],d=new iD,p=d.clone(),f=new rI,m=a*r,g=r-m,v=o+1,y=new iD,x=(e,t)=>y.subVectors(e,t).normalize(),b=(e,t)=>Array(e).fill(void 0).map(t),w=b(e.length/3,(t,i)=>new iD().fromArray(e,3*i).setLength(r)),S=[];for(let e=0;e<w.length;e++){let i=w[e],r=[],a,o,l,h=1e10,c=-1;for(;-1!=(c=t.indexOf(e,c+1));){let e=c-c%3;a=t[e+(c+1)%3],o=t[e+(c+2)%3],h=Math.min(h,l=i.distanceToSquared(w[a])),r.push([a,o,l])}h+=1e-6;let d=[],p=0,f=r.length;for(let t=0;t<f;t++){[a,o,l]=r[p];let t=S[a]?.includes(e)==!0;l<=h&&d.push(a+1e6*t),p=r.findIndex(e=>e[0]==o)}S.push(d)}let _=[];{let e=0,t=0,i,r,a=3==h;for(let l=0;l<=o;l++){i=l*(l+1)/2,r=(l+1)*(l+2)/2;for(let h=0;h<o-l;h++)[e,t]=[i+h+l+2,r+h+l+3],_.push(i,r,...a?[t,i]:[e,r],t,e),[i,r]=[e,t];_.push(i,r,i+o+2)}}let A=d.clone(),M=d.clone(),C=d.clone(),E=d.clone(),T=d.clone(),P=[],D=b(w.length,()=>b(h,()=>d.clone()));for(let e=0;e<w.length;e++){d.copy(w[e]).normalize(),A.copy(d).multiplyScalar(g);let t=S[e];for(let i=0;i<t.length;i++){let r=t[i],a=t[(i+1)%h];f.setFromPointsAndIndices(w,e,r%1e6,a%1e6),f.b.sub(f.a).setLength(1e10).add(f.a),f.c.sub(f.a).setLength(1e10).add(f.a),f.closestPointToPoint(A,D[e][i])}let i=[],r=[],a=[],b=new iD;0==o&&[...D[e]].reduce((e,t)=>
3135e.add(t),b).multiplyScalar(1/h);for(let t=0;t<h;t++){let l=[],c=(t-1+h)%h,f=D[e][c],w=D[e][t];d.copy(f).sub(A),p.copy(w).sub(A);let S=A.angleTo(d),_=d.angleTo(p),P=Math.cos(S)*m;0==o?M.copy(b):M.copy(A).setLength(g+P),r.push(P);let O=[M,f,w];for(let e=0;e<2;e++){let t=O[e],r=O[e+1];E.subVectors(t,A),T.subVectors(r,A),C.crossVectors(E,T).normalize();for(let r=0;r<v;r++){let a=[S,_][e]*r/v;d.copy(E).applyAxisAngle(C,a).add(A),i.push(d.clone()),e&&(x(d,A),l.push([0==r?t:d.clone(),y.clone()]))}e&&(x(r,A),l.push([r,y.clone()]))}a.push(l)}P.push(a);let O=2*v;for(let e=0;e<h;e++){let t=O*e,a=(e+1)%h*O,o=[i[t]];for(let l=1;l<v;l++){E=i[t+l],T=i[a+l],o.push(E);for(let t=1,i=l-2+1;t<=i;t++)d.lerpVectors(E,T,t/(i+1)),d.sub(A).setLength(r[e]).add(A),o.push(d.clone());o.push(T)}for(let e=0;e<v;e++)o.push(i[e+v+t]);o.push(i[a+v]);let p=_.map(e=>o[e]);l.push(...p.map(e=>[e.x,e.y,e.z]).flat()),c.push(...p.map(e=>(x(e,A),[y.x,y.y,y.z])).flat())}}let O=[];for(let e=0;e<S.length;e++)for(let t=0;t<h;t++){let i=S[e][t];if(i<1e6){let r=S[i].findIndex(t=>t%1e6==e),a=P[e][t],o=P[i][r];for(let e=0;e<v;e++){let t=a[e],i=o[v-e],r=a[e+1];[t,i,r,r,i,o[v-(e+1)]].forEach(e=>{l.push(e[0].x,e[0].y,e[0].z),c.push(e[1].x,e[1].y,e[1].z)})}O.push(a[0][0],o[v][0],a[v][0],o[0][0])}}for(;O.length;){let e,t,i,r;[e,t]=O.splice(0,2);let a=[e];for(;e!=t;)a.push(t),r=(i=O.indexOf(t))%2,t=O.splice(i-r,2)[1-r];y.subVectors(a[0],a[1]).cross(d.subVectors(a[0],a[2])).normalize();let o=0>y.dot(a[0]);o&&y.negate();for(let e=1;e<=a.length-2;
3135e++)[a[e+ +o],a[e+1-o],a[0]].forEach(e=>{l.push(e.x,e.y,e.z),c.push(y.x,y.y,y.z)})}})(),function(){let e=new iD;for(let i=0;i<l.length;i+=3){var t;e.x=l[i+0],e.y=l[i+1],e.z=l[i+2];let r=m(e)/2/Math.PI+.5,a=Math.atan2(-(t=e).y,Math.sqrt(t.x*t.x+t.z*t.z))/Math.PI+.5;h.push(r,1-a)}let i=new iD,r=new iD,a=new iD,o=new iD,c=new t9,d=new t9,p=new t9,f=(e,t,i,r)=>{r<0&&1===e.x&&(h[t]=e.x-1),0===i.x&&0===i.z&&(h[t]=r/2/Math.PI+.5)};for(let e=0,t=0;e<l.length;e+=9,t+=6){i.set(l[e+0],l[e+1],l[e+2]),r.set(l[e+3],l[e+4],l[e+5]),a.set(l[e+6],l[e+7],l[e+8]),c.set(h[t+0],h[t+1]),d.set(h[t+2],h[t+3]),p.set(h[t+4],h[t+5]),o.copy(i).add(r).add(a).divideScalar(3);let g=m(o);f(c,t+0,i,g),f(d,t+2,r,g),f(p,t+4,a,g)}for(let e=0;e<h.length;e+=6){let t=h[e+0],i=h[e+2],r=h[e+4],a=Math.max(t,i,r),o=Math.min(t,i,r);a>.9&&o<.1&&(t<.2&&(h[e+0]+=1),i<.2&&(h[e+2]+=1),r<.2&&(h[e+4]+=1))}function m(e){return Math.atan2(e.z,-e.x)}}(),this.setAttribute("position",new rV(l,3)),this.setAttribute("normal",new rV(c,3)),this.setAttribute("uv",new rV(h,2))}static fromJSON(e){return new b9(e.vertices,e.indices,e.radius,e.corner,e.cornerSides)}},b7=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}
vendor: 8,200 bytes, line 3135
3135static build(e){let{width:t,height:i,depth:r,detail:a,corner:o,cornerSides:l}=e.parameters,h=0===a&&0!==o?new we(.5*t,o,l):new oS(.5*t,a);return h.scale(1,i/t,r/t),Object.assign(h,{userData:{...e,type:"DodecahedronGeometry"}})}},we=class extends b9{constructor(e=1,t=.2,i=4){let r=(1+Math.sqrt(5))/2,a=1/r,o="DodecahedronGeometry";super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-a,-r,0,-a,r,0,a,-r,0,a,r,-a,-r,0,-a,r,0,a,-r,0,a,r,0,-r,0,-a,r,0,-a,-r,0,a,r,0,a],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],o,e,t,i),this.type=o}static fromJSON(e){return new we(e.radius,e.corner,e.cornerSides)}},wt=class{constructor(e){this.position=new t9,this.startPosition=new t9,this.uuid=t8.generateUUID(),this.position=e.clone()}start(){this.reset()}reset(){this.startPosition.copy(this.position)}applyOffset(e){this.position.copy(this.startPosition).add(e)}copy(e){return this.position.copy(e.position),this.startPosition.copy(e.startPosition),this}clone(){return new wt(this.position).copy(this)}toJSON(){return[this.position.x,this.position.y]}},wi=class extends wt{constructor(e){super(e.position),this.parent=e}copy(e){return super.copy(e),this}clone(){return new wi(this.parent).copy(this)}},wr=class extends wt{constructor(e,t){super(t),this.controls=[],this.roundness=0,this.areControlsDirectionsMirrored=!0,this.uuid=e,this.controls.push(new wi(this),new wi(this))}static create(e,t){let i=new wr(e,new t9(...t.position));return i.controls[0].position.set(...t.controlPrevious.position),i.controls[1].position.set(...t.controlNext.position),i.roundness=t.roundness,i.areControlsDirectionsMirrored=t.areControlsDirectionsMirrored,i}getOppositeControl(e){let t=this.controls.indexOf(e);return 0===t?this.controls[1]:1===t?this.controls[0]:null}applyOffsetToControls(e,t=1){for(let i=0,r=this.controls.length;i<r;i++){let r=this.controls[i];this.position.distanceTo(r.position)<=t?r.position.copy(this.position):r.applyOffset(e)}}controlsMoved(){return!(this.position.equals(this.controls[0].position)&&this.position.equals(this.controls[1].position))}copy(e){return super.copy(e),this.controls[0].copy(e.controls[0]),this.controls[1].copy(e.controls[1]),this.roundness=e.roundness,this.uuid=e.uuid,this}clone(){return new wr(this.uuid,this.position).copy(this)}toJSON(){return super.toJSON().concat(this.controls[0].toJSON(),this.controls[1].toJSON(),[this.roundness])}computeTangents(){return[this.curveBefore?.getTangentAt(1),this.curveAfter?.getTangentAt(0)]}computeNormals(e=new t9,t=new t9){let[i,r]=this.computeTangents();return i&&r&&(ws(i,e),ws(r,t)),[e,t]}computeTangent(e=new t9){let[t,i]=this.computeTangents();return t&&i&&e.copy(t).add(i).normalize(),e}computeNormal(e=new t9){let[t,i]=this.computeNormals();return e.copy(t).add(i).normalize(),e}};function ws(e,t=new t9){let i=e.length();return t.set(-e.y/i,e.x/i)}var wa=e=>e,wn=new t9,wo=new t9,wl=new t9,wh=new t9,wc=new t9,wd=new t9,wu=new iD,wp=new iD;function wf(e,t,i=Number.EPSILON){return Math.abs(e-t)<i}function wm(e,t,i){let r=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),a=Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2)),o=Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2));return Math.acos((a*a+r*r-o*o)/(2*a*r))}function wg(e,t,i){return 0===wn.copy(t).sub(e).cross(wo.copy(i).sub(e))}function wv(e,t){return e.position.equals(e.controls[1].position)&&t.position.equals(t.controls[0].position)}function wy(e,t){return wg(e.position,e.controls[1].position,t.position)&&wg(e.position,t.controls[0].position,t.position)}function wx(e,t=12,i=!1){let r=[];for(let a=0,o=e.length;a<o;a++){let o=e[a],l=0;if(i&&void 0!==o.roundedCurveCorner){let e=.5*wb(o.roundedCurveCorner,t);a>0&&(r[a-1]+=e),l+=e}void 0!==o.curveAfter&&(l+=wb(o.curveAfter,t)),r.push(l)}return e.length>0&&i&&void 0!==e[0].roundedCurveCorner&&(r[e.length-1]+=.5*wb(e[0].roundedCurveCorner,t)),r}function wb(e,t=12){return e&&e instanceof n8?2*t:e&&(e instanceof oc||e instanceof od)?1:e&&e instanceof of?t*e.points.length:t}var ww=new t9,wS=new t9,w_=new t9,wA=new t9,wM=new t9,wC=new t9,wE=class extends o_{constructor(e=100,t=100){super(),this.points=[],this.shapeHoles=[],this.plane=new sg(new iD(0,0,-1)),this.subdivision=0,this.controlSnapDistance=4,this.pointIDs=0,this.isMesh2D=!1,this.isText=!1,this._roundness=0,this.isClosed=!1,this.useCubicForRoundedCorners=!0,this.uuid=t8.generateUUID(),this.needsUpdate=!1,this.roundedCurves=[],this._width=e,this._height=t}static createFromState(e,t,i){let r=new wE;return r.isClosed=e.isClosed,r.points=e.points.map(e=>wr.create(e.id,e.data)),"number"==typeof e.roundness&&(r.roundness=e.roundness),r.shapeHoles=e.shapeHoles.map(e=>wE.createFromState(e)),void 0!==t&&void 0!==i&&r.applySize(t,i),r.update(),r}get width(){return this._width}get height(){return this._height}get roundness(){return this._roundness}set roundness(e){if(this._roundness!==e){this._roundness=e;for(let t=0,i=this.points.length;t<i;t++)this.points[t].roundness=e;this.needsUpdate=!0}}getPointsIndexesByIds(e){return e.map(e=>this.getPointIndexById(e)).filter(e=>e>=0)}getPointIndexById(e){let t=this.points.length,i=this.points.findIndex(t=>t.uuid===e);if(i<0){let i=t;for(let t=0,r=this.shapeHoles.length;t<r;t++){let r=this.shapeHoles[t],a=r.points.length,o=r.getPointIndexById(e);if(!(o<0))return o+i;i+=a}}return i}getLineIndexById(e){return this.getPointIndexById(e)}getBezierPoint(e){if(e<=this.points.length-1)return this.points[e];if(this.shapeHoles.length>0){let t=this.points.length;for(let i=0,r=this.shapeHoles.length;i<r;i++){let r=this.shapeHoles[i],a=e-t;if(a<=r.points.length-1)return r.points[a];t+=r.points.length}}throw Error("This shape does not have a point for this index: "+e)}getBezierPointIndex(e){let t=this.points.indexOf(e);if(t>=0)return t;if(t=this.points.length,this.shapeHoles.length>0)for(let i=0,r=this.shapeHoles.length;i<r;i++){let r=this.shapeHoles[i],a=r.points.indexOf(e);if(a>=0)return t+a;t+=r.points.length}return -1}getAllPoints(){let e=[].concat(...this.shapeHoles.map(e=>e.points));return[...this.points,...e]}applySize(e,t){0===e&&(e=.001),0===t&&(t=.001),this._width=e,this._height=t}applyScale(e,t){let i=ww.set(e,t);for(let e=0,t=this.points.length;e<t;e++){let t=this.points[e];t.position.multiply(i),t.controls[0].position.multiply(i),t.controls[1].position.multiply(i)}for(let i=0,r=this.shapeHoles.length;i<r;i++)this.shapeHoles[i].applyScale(e,t);this._update()}createPoint(e,t=0,i=t8.generateUUID()){let r=new wr(i,e instanceof t9?e:new t9(e,t));return r.roundness=this.roundness,r}addPoint(e){this.points.push(e),this.needsUpdate=!0}addPointAt(e,t){this.points.splice(t,0,e),this.needsUpdate=!0}getPointByUuid(e){for(let t=0,i=this.points.length;t<i;t++){let i=this.points[t];if(i.uuid===e)return i}for(let t=0,i=this.shapeHoles.length;t<i;t++){let i=this.shapeHoles[t].getPointByUuid(e);if(i)return i}}getFirstPoint(){return this.points[0]}getLastPoint(){return this.points[this.points.length-1]}removePoint(e){let t=this.points.indexOf(e);t>=0&&this.points.splice(t,1),this.needsUpdate=!0}removePointById(e){let t=this.points.find(t=>t.uuid===e);t&&this.removePoint(t)}update(){for(let e=0,t=this.shapeHoles.length;e<t;e++)this.shapeHoles[e].update();this._update()}extractShapePointsToBuffer(e,t=12,i=!1){this.subdivision=t,void 0===this.curveDivisions&&this.computeCurveDivisions(t);let r=i?this.roundedCurveDivisions:this.curveDivisions;return function(e,t,i=12,r=!0){let a=wp.set(0,0,0),o,l=0,h=[];for(let r=0;r<t.length;r++){let c=wa(t[r]),d=wb(c,i);h.push(d);for(let t=0;t<=d;t++)if(c instanceof ol||c instanceof ou||c instanceof oc){if(c.getPoint(t/d,wn),a.set(wn.x,wn.y,0),void 0!==o&&function(e,t,i=Number.EPSILON){return e.distanceTo(t)<i}(o,a))continue;void 0===o&&(o=wu),o.copy(a),e.setXYZ(l,a.x,a.y,a.z),l++}}r&&l>1&&(e.getX(l-1)!==e.getX(0)||e.getY(l-1)!==e.getY(0)||e.getZ(l-1)!==e.getZ(0))&&(e.setXYZ(l,e.getX(0),e.getY(0),e.getZ(0)),l++)}(e,i?this.roundedCurves:this.curves,t,this.autoClose),r.reduce((e,t)=>
3135e+t,0)+1}computeCurveDivisions(e=12){return this.curveDivisions=wx(this.points,e,!1),this.roundedCurveDivisions=wx(this.points,e,!0),this.curveDivisions}extractFilteredShapePointsToBuffer(e,t,i=12){return 2*(function(e,t,i,r=12,a=!0){let o=wp.set(0,0,0),l=0,h=[];for(let a=0;a<t.length;a++){if(!1===i[a])continue;let c,d=wa(t[a]),p=wb(d,r);h.push(p);for(let t=0;t<=p;t++)if(d instanceof ol||d instanceof ou||d instanceof oc){if(d.getPoint(t/p,wn),o.set(wn.x,wn.y,0),c?.equals(o))continue;void 0===c?c=wu:(e.setXYZ(l,c.x,c.y,c.z),l++,e.setXYZ(l,o.x,o.y,o.z),l++),c.copy(o)}}return a&&l>1&&(e.getX(l-1)!==e.getX(0)||e.getY(l-1)!==e.getY(0)||e.getZ(l-1)!==e.getZ(0))&&(e.setXYZ(l,e.getX(0),e.getY(0),e.getZ(0)),l++),h})(e,this.curves,t,i,this.autoClose).reduce((e,t)=>e+t,0)}extractShapePointsToFlatArray(e,t=12){return this.subdivision=t,void 0===this.curveDivisions&&this.computeCurveDivisions(t),function(e,t,i=12,r=!0){let a,o=0;for(let r=0;r<t.length;r++){let l=wa(t[r]),h=wb(l,i);for(let t=0;t<=h;t++)if(l instanceof ol||l instanceof ou||l instanceof oc){if(l.getPoint(t/h,wn),void 0!==a&&function(e,t,i=Number.EPSILON){return e.distanceTo(t)<i}(a,wn,1e-12))continue;void 0===a&&(a=wo),a.copy(wn),e.push(wn.x,wn.y),o++}}return wf(e[0],e[e.length-2],1e-12)&&wf(e[1],e[e.length-1],1e-12)&&(e.pop(),e.pop()),r&&o>1&&!(wf(e[o-1],e[1],1e-12)&&wf(e[o-2],e[0],1e-12))&&(e.push(e[0],e[1]),o++),e}(e,this.roundedCurves,t,this.autoClose)}getCurveIndexFromVertexId(e,t=!1){let i=0;void 0===this.curveDivisions&&this.computeCurveDivisions(this.subdivision);let r=t?this.roundedCurveDivisions:this.curveDivisions,a=0;t&&void 0!==this.points[0].roundedCurveCorner&&(a=.5*wb(this.points[0].roundedCurveCorner,this.subdivision));let o=e-a;o<0&&(o+=r.reduce((e,t)=>e+t,0));for(let e=0,t=r.length;e<t;e++){let t=r[e];if(o<i+t)return[e,(o-i+1)/t];i+=t}return[0,1]}getCurveT(e,t,i){let r=this.points[e],a=this.points[e>=this.points.length-1?0:e+1],o=this.curveDivisions,l=o[e];if(wv(r,a)){let e=r.position.distanceTo(a.position);return r.position.distanceTo(ww.set(i.x,i.y))/e}let h=0;for(let t=0;t<e;t++)h+=o[t];return(t-h)/l}dispose(){}_applyCurveForPoint(e,t){wv(t,e)?this.lineTo(e.position.x,e.position.y):this.bezierCurveTo(t.controls[1].position.x,t.controls[1].position.y,e.controls[0].position.x,e.controls[0].position.y,e.position.x,e.position.y);let i=this.curves[this.curves.length-1];e.curveBefore=i,t.curveAfter=i;let r=i.clone();e.roundedCurveBefore=r,t.roundedCurveAfter=r,e.roundedCurveCorner=void 0,this.roundedCurves.push(r)}_update(){if(this.curves=[],this.roundedCurves=[],!this.points.length)return;for(let e=0,t=this.points.length;e<t;e++){let t=this.points[e];if(0===e)this.moveTo(t.position.x,t.position.y);else{let i=this.points[e-1];this._applyCurveForPoint(t,i)}}let e=this.getLastPoint();if(e?.curveAfter&&(e.curveAfter=void 0),this.isClosed){let e=this.points[0],t=this.points[this.points.length-1];this._applyCurveForPoint(e,t)}if(this.points.length>2){let e=0;for(let i=0,r=this.points.length;i<r;i++){var t;let r=this.points[i],a=this.points[i-1]??this.points[this.points.length-1],o=this.points[i+1]??this.points[0],l=r.roundness,h=a&&o&&wy(a,r)&&wy(r,o)&&wg(a.position,r.position,o.position);if(!r.controlsMoved()&&l>0&&!h){let a,o=r.curveBefore,h=r.curveAfter;if(void 0===o||void 0===h)continue;let c=r.roundedCurveBefore,d=r.roundedCurveAfter,p=o.getLength(),f=h.getLength(),m=Math.min(Math.min(l,.499*p),Math.min(l,.499*f)),g=1-m/p,v=m/f,y=o.getPointAt(g,ww),x=h.getPointAt(v,wS);if(this._subSplitCurve(o,c,g,y,void 0),this._subSplitCurve(h,d,v,void 0,x),this.useCubicForRoundedCorners){let e=Math.tan(wm(y,r.position,x)/2)*y.distanceTo(r.position),[i,o]=function(e,t,i,r,a){let o=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),l=(e.y+t.y)/2,h=(e.x+t.x)/2,c=Math.sqrt(Math.pow(i,2)-Math.pow(o/2,2))*(e.y-t.y)/o,d=Math.sqrt(Math.pow(i,2)-Math.pow(o/2,2))*(t.x-e.x)/o;return r.set(h+c,l+d),a.set(h-c,l-d),[r,a]}(y,x,e,w_,wA),[l,h]=function(e,t,i,r,a,o){let l=t.x-e.x,h=t.y-e.y,c=i.x-e.x,d=i.y-e.y,p=Math.sqrt((l+c)*(l+c)+(h+d)*(h+d)),f;return wm(t,e,i)>Math.PI&&(p*=-1),f=wf(d,h)?(h+d)*(r/p-.5)*8/3/(l-c):(l+c)*(r/p-.5)*8/3/(d-h),a.set(t.x-f*h,t.y+f*l),o.set(i.x+f*d,i.y-f*c),[a,o]}((t=r.position,i.distanceTo(t)<o.distanceTo(t)?o:i),y,x,e,wM,wC);a=new ol(y.clone(),l.clone(),h.clone(),x.clone())}else a=new ou(y.clone(),r.position.clone(),x.clone());
vendor: 15,125 bytes, line 3135
3135r.roundedCurveCorner=a,this.roundedCurves.splice(i+e,0,a),e++}}}}_subSplitCurve(e,t,i,r,a){if(e instanceof oc)void 0!==r&&t.v2.copy(r),void 0!==a&&t.v1.copy(a);else{let o=e.getUtoTmapping(i,0),l=function(e,t,i,r,a=.5){let o=wn.subVectors(t,e).multiplyScalar(a).add(e),l=wo.subVectors(i,t).multiplyScalar(a).add(t),h=wl.subVectors(r,i).multiplyScalar(a).add(i),c=wh.subVectors(l,o).multiplyScalar(a).add(o),d=wc.subVectors(h,l).multiplyScalar(a).add(l),p=wd.subVectors(d,c).multiplyScalar(a).add(c);return[e.x,e.y,o.x,o.y,c.x,c.y,p.x,p.y,d.x,d.y,h.x,h.y,r.x,r.y]}(e.v0,e.v1,e.v2,e.v3,o);return void 0!==r&&(t.v0.set(l[0],l[1]),t.v1.set(l[2],l[3]),t.v2.set(l[4],l[5]),t.v3.set(l[6],l[7])),void 0!==a&&(t.v0.set(l[6],l[7]),t.v1.set(l[8],l[9]),t.v2.set(l[10],l[11]),t.v3.set(l[12],l[13])),t}return t}clone(){let e=new wE(this._width,this._height);return e.points=this.points.map(e=>e.clone()),e.isClosed=this.isClosed,e.roundness=this.roundness,e.isMesh2D=this.isMesh2D,e.shapeHoles=this.shapeHoles.map(e=>e.clone()),e}toJSON(){return{points:this.points.reduce((e,t)=>e.concat(t.toJSON()),[]),shapeHoles:this.shapeHoles.map(e=>e.toJSON()),isClosed:this.isClosed,roundness:this.roundness}}fromJSON(e){this.points=[],this.pointIDs=0;let t=e.points.length/7;for(let i=0;i<t;i++){let t=7*i,r=e.points[t+0],a=e.points[t+1],o=e.points[t+2],l=e.points[t+3],h=e.points[t+4],c=e.points[t+5],d=e.points[t+6],p=new wr(t8.generateUUID(),new t9(r,a));p.controls[0].position.set(o,l),p.controls[1].position.set(h,c),p.roundness=d,this.points.push(p)}return this.shapeHoles=e.shapeHoles?.length?e.shapeHoles.map(e=>{let t=new wE;return t.fromJSON(e),t}):[],this.isClosed=e.isClosed,this._roundness=e.roundness,this._update(),this}fromShape(e,t=!1){this.isText=t;let i=(e,t)=>{t instanceof ol&&t.v3.equals(e.position)&&e.controls[0].position.copy(t.v2)},r=e=>{let t=[],r,a;for(r=0,a=e.length;r<a;r++)e[r]instanceof ou&&(e[r]=function(e){let t=new t9;t.addVectors(e.v0,wn.subVectors(e.v1,e.v0).multiplyScalar(2/3));let i=new t9;return i.addVectors(e.v2,wo.subVectors(e.v1,e.v2).multiplyScalar(2/3)),new ol(e.v0,t,i,e.v2)}(e[r]));for(r=0,a=e.length;r<a;r++){let a=e[r],o=r>0?e[r-1]:null,l;a instanceof ol?(l=this.createPoint(a.v0)).controls[1].position.copy(a.v1):a instanceof oc&&(l=this.createPoint(a.v1)),void 0!==l&&(null!==o&&i(l,o),t.push(l))}let o=e[e.length-1],l=!1;return o instanceof ol?o.v3.equals(t[0].position)&&(t[0].controls[0].position.copy(o.v2),l=!0):o instanceof oc&&o.v2.equals(t[0].position)&&(l=!0),this.isClosed=l,t};return this.points=r(e.curves),e instanceof o_&&(this.shapeHoles=e.holes.map(e=>{let t=new wE;return t.fromShape(e),t})),this.update(),this}updatePoint(e,t){let i=this.getPointByUuid(e);i&&(void 0!==t.position&&i.position.fromArray(t.position),void 0!==t.roundness&&(i.roundness=t.roundness),void 0!==t.areControlsDirectionsMirrored&&(i.areControlsDirectionsMirrored=t.areControlsDirectionsMirrored),this.needsUpdate=!0)}updatePreviousControl(e,t){let i=this.getPointByUuid(e)?.controls[0];i&&(t.position&&i.position.fromArray(t.position),this.needsUpdate=!0)}updateNextControl(e,t){let i=this.getPointByUuid(e)?.controls[1];i&&(t.position&&i.position.fromArray(t.position),this.needsUpdate=!0)}},wT=2*Math.PI;function wP({x:e,y:t},i,r,a,o){return{x:e*i+a,y:t*r+o}}function wD(e,t,i,r){let a=Math.min(1,Math.max(-1,e*i+t*r));return(e*r-t*i<0?-1:1)*Math.acos(a)}function wO(e,t){if(!e)throw t||"Assertion Failed!"}(S8=_e||(_e={}))[S8.ODD=0]="ODD",S8[S8.NONZERO=1]="NONZERO",S8[S8.POSITIVE=2]="POSITIVE",S8[S8.NEGATIVE=3]="NEGATIVE",S8[S8.ABS_GEQ_TWO=4]="ABS_GEQ_TWO",(S9=_t||(_t={}))[S9.POLYGONS=0]="POLYGONS",S9[S9.CONNECTED_POLYGONS=1]="CONNECTED_POLYGONS",S9[S9.BOUNDARY_CONTOURS=2]="BOUNDARY_CONTOURS";var wI=function(){function e(){}return e.vertEq=function(e,t){return e.s===t.s&&e.t===t.t},e.vertLeq=function(e,t){return e.s<t.s||e.s===t.s&&e.t<=t.t},e.transLeq=function(e,t){return e.t<t.t||e.t===t.t&&e.s<=t.s},e.edgeGoesLeft=function(t){return e.vertLeq(t.Dst,t.Org)},e.edgeGoesRight=function(t){return e.vertLeq(t.Org,t.Dst)},e.vertL1dist=function(e,t){return Math.abs(e.s-t.s)+Math.abs(e.t-t.t)},e.edgeEval=function(t,i,r){wO(e.vertLeq(t,i)&&e.vertLeq(i,r));var a=i.s-t.s,o=r.s-i.s;return a+o>0?a<o?i.t-t.t+(t.t-r.t)*(a/(a+o)):i.t-r.t+(r.t-t.t)*(o/(a+o)):0},e.edgeSign=function(t,i,r){wO(e.vertLeq(t,i)&&e.vertLeq(i,r));var a=i.s-t.s,o=r.s-i.s;return a+o>0?(i.t-r.t)*a+(i.t-t.t)*o:0},e.transEval=function(t,i,r){wO(e.transLeq(t,i)&&e.transLeq(i,r));var a=i.t-t.t,o=r.t-i.t;return a+o>0?a<o?i.s-t.s+(t.s-r.s)*(a/(a+o)):i.s-r.s+(r.s-t.s)*(o/(a+o)):0},e.transSign=function(t,i,r){wO(e.transLeq(t,i)&&e.transLeq(i,r));var a=i.t-t.t,o=r.t-i.t;return a+o>0?(i.s-r.s)*a+(i.s-t.s)*o:0},e.vertCCW=function(e,t,i){return e.s*(t.t-i.t)+t.s*(i.t-e.t)+i.s*(e.t-t.t)>=0},e.interpolate=function(e,t,i,r){return(e=e<0?0:e)<=(i=i<0?0:i)?0===i?(t+r)/2:t+e/(e+i)*(r-t):r+i/(e+i)*(t-r)},e.intersect=function(t,i,r,a,o){var l,h,c;e.vertLeq(t,i)||(c=t,t=i,i=c),e.vertLeq(r,a)||(c=r,r=a,a=c),e.vertLeq(t,r)||(c=t,t=r,r=c,c=i,i=a,a=c),e.vertLeq(r,i)?e.vertLeq(i,a)?((l=e.edgeEval(t,r,i))+(h=e.edgeEval(r,i,a))<0&&(l=-l,h=-h),o.s=e.interpolate(l,r.s,h,i.s)):((l=e.edgeSign(t,r,i))+(h=-e.edgeSign(t,a,i))<0&&(l=-l,h=-h),o.s=e.interpolate(l,r.s,h,a.s)):o.s=(r.s+i.s)/2,e.transLeq(t,i)||(c=t,t=i,i=c),e.transLeq(r,a)||(c=r,r=a,a=c),e.transLeq(t,r)||(c=t,t=r,r=c,c=i,i=a,a=c),e.transLeq(r,i)?e.transLeq(i,a)?((l=e.transEval(t,r,i))+(h=e.transEval(r,i,a))<0&&(l=-l,h=-h),o.t=e.interpolate(l,r.t,h,i.t)):((l=e.transSign(t,r,i))+(h=-e.transSign(t,a,i))<0&&(l=-l,h=-h),o.t=e.interpolate(l,r.t,h,a.t)):o.t=(r.t+i.t)/2},e}(),wR=function(){this.next=null,this.prev=null,this.anEdge=null,this.trail=null,this.n=0,this.marked=!1,this.inside=!1},wL=function(){function e(e){this.side=e,this.next=null,this.Org=null,this.Sym=null,this.Onext=null,this.Lnext=null,this.Lface=null,this.activeRegion=null,this.winding=0}return Object.defineProperty(e.prototype,"Rface",{get:function(){return this.Sym.Lface},set:function(e){this.Sym.Lface=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dst",{get:function(){return this.Sym.Org},set:function(e){this.Sym.Org=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Oprev",{get:function(){return this.Sym.Lnext},set:function(e){this.Sym.Lnext=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Lprev",{get:function(){return this.Onext.Sym},set:function(e){this.Onext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dprev",{get:function(){return this.Lnext.Sym},set:function(e){this.Lnext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Rprev",{get:function(){return this.Sym.Onext},set:function(e){this.Sym.Onext=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Dnext",{get:function(){return this.Sym.Onext.Sym},set:function(e){this.Sym.Onext.Sym=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"Rnext",{get:function(){return this.Sym.Lnext.Sym},set:function(e){this.Sym.Lnext.Sym=e},enumerable:!0,configurable:!0}),e}(),wB=function(){this.next=null,this.prev=null,this.anEdge=null,this.coords=[0,0,0],this.s=0,this.t=0,this.pqHandle=0,this.n=0,this.idx=0},wz=function(){function e(){var e=new wB,t=new wR,i=new wL(0),r=new wL(1);e.next=e.prev=e,e.anEdge=null,t.next=t.prev=t,i.next=i,i.Sym=r,r.next=r,r.Sym=i,this.vHead=e,this.fHead=t,this.eHead=i,this.eHeadSym=r}return e.prototype.makeEdge_=function(e){var t=new wL(0),i=new wL(1);e.Sym.side<e.side&&(e=e.Sym);var r=e.Sym.next;return i.next=r,r.Sym.next=t,t.next=e,e.Sym.next=i,t.Sym=i,t.Onext=t,t.Lnext=i,t.Org=null,t.Lface=null,t.winding=0,t.activeRegion=null,i.Sym=t,i.Onext=i,i.Lnext=t,i.Org=null,i.Lface=null,i.winding=0,i.activeRegion=null,t},e.prototype.splice_=function(e,t){var i=e.Onext,r=t.Onext;i.Sym.Lnext=t,r.Sym.Lnext=e,e.Onext=r,t.Onext=i},e.prototype.makeVertex_=function(e,t,i){wO(e,"Vertex can't be null!");var r=i.prev;e.prev=r,r.next=e,e.next=i,i.prev=e,e.anEdge=t;var a=t;do a.Org=e,a=a.Onext;while(a!==t)},e.prototype.makeFace_=function(e,t,i){wO(e,"Face can't be null");var r=i.prev;e.prev=r,r.next=e,e.next=i,i.prev=e,e.anEdge=t,e.trail=null,e.marked=!1,e.inside=i.inside;var a=t;do a.Lface=e,a=a.Lnext;while(a!==t)},e.prototype.killEdge_=function(e){e.Sym.side<e.side&&(e=e.Sym);var t=e.next,i=e.Sym.next;t.Sym.next=i,i.Sym.next=t},e.prototype.killVertex_=function(e,t){var i=e.anEdge,r=i;do r.Org=t,r=r.Onext;while(r!==i)var a=e.prev,o=e.next;o.prev=a,a.next=o},e.prototype.killFace_=function(e,t){var i=e.anEdge,r=i;do r.Lface=t,r=r.Lnext;while(r!==i)var a=e.prev,o=e.next;o.prev=a,a.next=o},e.prototype.makeEdge=function(){var e=new wB,t=new wB,i=new wR,r=this.makeEdge_(this.eHead);return this.makeVertex_(e,r,this.vHead),this.makeVertex_(t,r.Sym,this.vHead),this.makeFace_(i,r,this.fHead),r},e.prototype.splice=function(e,t){var i=!1,r=!1;if(e!==t){if(t.Org!==e.Org&&(r=!0,this.killVertex_(t.Org,e.Org)),t.Lface!==e.Lface&&(i=!0,this.killFace_(t.Lface,e.Lface)),this.splice_(t,e),!r){var a=new wB;this.makeVertex_(a,t,e.Org),e.Org.anEdge=e}if(!i){var o=new wR;this.makeFace_(o,t,e.Lface),e.Lface.anEdge=e}}},e.prototype.delete=function(e){var t=e.Sym,i=!1;if(e.Lface!==e.Rface&&(i=!0,this.killFace_(e.Lface,e.Rface)),e.Onext===e)this.killVertex_(e.Org,null);else if(e.Rface.anEdge=e.Oprev,e.Org.anEdge=e.Onext,this.splice_(e,e.Oprev),!i){var r=new wR;this.makeFace_(r,e,e.Lface)}t.Onext===t?(this.killVertex_(t.Org,null),this.killFace_(t.Lface,null)):(e.Lface.anEdge=t.Oprev,t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev)),this.killEdge_(e)},e.prototype.addEdgeVertex=function(e){var t=this.makeEdge_(e),i=t.Sym;this.splice_(t,e.Lnext),t.Org=e.Dst;var r=new wB;return this.makeVertex_(r,i,t.Org),t.Lface=i.Lface=e.Lface,t},e.prototype.splitEdge=function(e){var t=this.addEdgeVertex(e).Sym;return this.splice_(e.Sym,e.Sym.Oprev),this.splice_(e.Sym,t),e.Dst=t.Org,t.Dst.anEdge=t.Sym,t.Rface=e.Rface,t.winding=e.winding,t.Sym.winding=e.Sym.winding,t.idx=e.idx,t.Sym.idx=e.Sym.idx,t},e.prototype.connect=function(e,t){var i=!1,r=this.makeEdge_(e),a=r.Sym;if(t.Lface!==e.Lface&&(i=!0,this.killFace_(t.Lface,e.Lface)),this.splice_(r,e.Lnext),this.splice_(a,t),r.Org=e.Dst,a.Org=t.Org,r.Lface=a.Lface=e.Lface,e.Lface.anEdge=a,!i){var o=new wR;this.makeFace_(o,r,e.Lface)}return r},e.prototype.zapFace=function(e){var t,i,r,a,o,l=e.anEdge;i=l.Lnext;do i=(t=i).Lnext,t.Lface=null,null===t.Rface&&(t.Onext===t?this.killVertex_(t.Org,null):(t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev)),(r=t.Sym).Onext===r?this.killVertex_(r.Org,null):(r.Org.anEdge=r.Onext,this.splice_(r,r.Oprev)),this.killEdge_(t));while(t!=l)a=e.prev,(o=e.next).prev=a,a.next=o},e.prototype.countFaceVerts_=function(e){var t=e.anEdge,i=0;do i++,t=t.Lnext;while(t!==e.anEdge)return i},e.prototype.mergeConvexFaces=function(e){var t,i,r,a,o;for(t=this.fHead.next;t!==this.fHead;t=t.next)if(t.inside)for(o=(i=t.anEdge).Org;r=i.Lnext,(a=i.Sym)&&a.Lface&&a.Lface.inside&&this.countFaceVerts_(t)+this.countFaceVerts_(a.Lface)-2<=e&&wI.vertCCW(i.Lprev.Org,i.Org,a.Lnext.Lnext.Org)&&wI.vertCCW(a.Lprev.Org,a.Org,i.Lnext.Lnext.Org)&&(r=a.Lnext,this.delete(a),i=null,a=null),!(i&&i.Lnext.Org===o);)i=r;return!0},e.prototype.check=function(){var e,t,i,r,a,o,l=this.fHead,h=this.vHead,c=this.eHead;for(t=l,t=l;(e=t.next)!==l;t=e){wO(e.prev===t),a=e.anEdge;do wO(a.Sym!==a),wO(a.Sym.Sym===a),wO(a.Lnext.Onext.Sym===a),wO(a.Onext.Sym.Lnext===a),wO(a.Lface===e),a=a.Lnext;while(a!==e.anEdge)}for(wO(e.prev===t&&null===e.anEdge),r=h,r=h;(i=r.next)!==h;r=i){wO(i.prev===r),a=i.anEdge;do wO(a.Sym!==a),wO(a.Sym.Sym===a),wO(a.Lnext.Onext.Sym===a),wO(a.Onext.Sym.Lnext===a),wO(a.Org===i),a=a.Onext;while(a!==i.anEdge)}for(wO(i.prev===r&&null===i.anEdge),o=c,o=c;(a=o.next)!==c;o=a)wO(a.Sym.next===o.Sym),wO(a.Sym!==a),wO(a.Sym.Sym===a),wO(null!==a.Org),wO(null!==a.Dst),wO(a.Lnext.Onext.Sym===a),wO(a.Onext.Sym.Lnext===a);wO(a.Sym.next===o.Sym&&a.Sym===this.eHeadSym&&a.Sym.Sym===a&&null===a.Org&&null===a.Dst&&null===a.Lface&&null===a.Rface)},e}(),wF=function(){this.handle=null},wN=function(){this.key=null,this.node=0},wU=function(){function e(e,t){this.leq=t,this.max=0,this.nodes=[],this.handles=[],this.initialized=!1,this.freeList=0,this.size=0,this.max=e,this.nodes=[],this.handles=[];for(var i=0;i<e+1;i++)this.nodes[i]=new wF,this.handles[i]=new wN;this.initialized=!1,this.nodes[1].handle=1,this.handles[1].key=null}return e.prototype.floatDown_=function(e){var t,i,r,a=this.nodes,o=this.handles;for(t=a[e].handle;;){if((r=e<<1)<this.size&&this.leq(o[a[r+1].handle].key,o[a[r].handle].key)&&++r,wO(r<=this.max),i=a[r].handle,r>this.size||this.leq(o[t].key,o[i].key)){a[e].handle=t,o[t].node=e;break}a[e].handle=i,o[i].node=e,e=r}},e.prototype.floatUp_=function(e){var t,i,r,a=this.nodes,o=this.handles;for(t=a[e].handle;;){if(i=a[r=e>>1].handle,0===r||this.leq(o[i].key,o[t].key)){a[e].handle=t,o[t].node=e;break}a[e].handle=i,o[i].node=e,e=r}},e.prototype.init=function(){for(var e=this.size;e>=1;--e)this.floatDown_(e);this.initialized=!0},e.prototype.min=function(){return this.handles[this.nodes[1].handle].key},e.prototype.insert=function(e){var t,i,r,a;if(2*(t=++this.size)>this.max){for(this.max*=2,a=this.nodes.length,this.nodes.length=this.max+1,r=a;r<this.nodes.length;r++)this.nodes[r]=new wF;for(a=this.handles.length,this.handles.length=this.max+1,r=a;r<this.handles.length;r++)this.handles[r]=new wN}return 0===this.freeList?i=t:(i=this.freeList,this.freeList=this.handles[i].node),this.nodes[t].handle=i,this.handles[i].node=t,this.handles[i].key=e,this.initialized&&this.floatUp_(t),i},e.prototype.extractMin=function(){var e=this.nodes,t=this.handles,i=e[1].handle,r=t[i].key;return this.size>0&&(e[1].handle=e[this.size].handle,t[e[1].handle].node=1,t[i].key=null,t[i].node=this.freeList,this.freeList=i,--this.size,this.size>0&&this.floatDown_(1)),r},e.prototype.delete=function(e){var t,i=this.nodes,r=this.handles;wO(e>=1&&e<=this.max&&null!==r[e].key),i[t=r[e].node].handle=i[this.size].handle,r[i[t].handle].node=t,--this.size,t<=this.size&&(t<=1||this.leq(r[i[t>>1].handle].key,r[i[t].handle].key)?this.floatDown_(t):this.floatUp_(t)),r[e].key=null,r[e].node=this.freeList,this.freeList=e},e}(),wk=function(){this.eUp=null,this.nodeUp=null,this.windingNumber=0,this.inside=!1,this.sentinel=!1,this.dirty=!1,this.fixUpperEdge=!1},wV=function(){this.key=null,this.next=null,this.prev=null},wj=function(){function e(e,t){this.frame=e,this.leq=t,this.head=new wV,this.head.next=this.head,this.head.prev=this.head}return e.prototype.min=function(){return this.head.next},e.prototype.max=function(){return this.head.prev},e.prototype.insert=function(e){return this.insertBefore(this.head,e)},e.prototype.search=function(e){var t=this.head;do t=t.next;while(null!==t.key&&!this.leq(this.frame,e,t.key))return t},e.prototype.insertBefore=function(e,t){do e=e.prev;while(null!==e.key&&!this.leq(this.frame,e.key,t))var i=new wV;return i.key=t,i.next=e.next,e.next.prev=i,i.prev=e,e.next=i,i},e.prototype.delete=function(e){e.next.prev=e.prev,e.prev.next=e.next},e}(),wG=function(){function e(){}
3135return e.regionBelow=function(e){return e.nodeUp.prev.key},e.regionAbove=function(e){return e.nodeUp.next.key},e.debugEvent=function(e){},e.addWinding=function(e,t){e.winding+=t.winding,e.Sym.winding+=t.Sym.winding},e.edgeLeq=function(e,t,i){var r=e.event,a=t.eUp,o=i.eUp;return a.Dst===r?o.Dst===r?wI.vertLeq(a.Org,o.Org)?0>=wI.edgeSign(o.Dst,a.Org,o.Org):wI.edgeSign(a.Dst,o.Org,a.Org)>=0:0>=wI.edgeSign(o.Dst,r,o.Org):o.Dst===r?wI.edgeSign(a.Dst,r,a.Org)>=0:wI.edgeEval(a.Dst,r,a.Org)>=wI.edgeEval(o.Dst,r,o.Org)},e.deleteRegion=function(e,t){t.fixUpperEdge&&wO(0===t.eUp.winding),t.eUp.activeRegion=null,e.dict.delete(t.nodeUp)},e.fixUpperEdge=function(e,t,i){wO(t.fixUpperEdge),e.mesh.delete(t.eUp),t.fixUpperEdge=!1,t.eUp=i,i.activeRegion=t},e.topLeftRegion=function(t,i){var r,a=i.eUp.Org;do i=e.regionAbove(i);while(i.eUp.Org===a)if(i.fixUpperEdge){if(null===(r=t.mesh.connect(e.regionBelow(i).eUp.Sym,i.eUp.Lnext)))return null;e.fixUpperEdge(t,i,r),i=e.regionAbove(i)}return i},e.topRightRegion=function(t){var i=t.eUp.Dst;do t=e.regionAbove(t);while(t.eUp.Dst===i)return t},e.addRegionBelow=function(e,t,i){var r=new wk;return r.eUp=i,r.nodeUp=e.dict.insertBefore(t.nodeUp,r),r.fixUpperEdge=!1,r.sentinel=!1,r.dirty=!1,i.activeRegion=r,r},e.isWindingInside=function(e,t){switch(e.windingRule){case _e.ODD:return(1&t)!=0;case _e.NONZERO:return 0!==t;case _e.POSITIVE:return t>0;case _e.NEGATIVE:return t<0;case _e.ABS_GEQ_TWO:return t>=2||t<=-2}throw Error("Invalid winding rulle")},e.computeWinding=function(t,i){i.windingNumber=e.regionAbove(i).windingNumber+i.eUp.winding,i.inside=e.isWindingInside(t,i.windingNumber)},e.finishRegion=function(t,i){var r=i.eUp,a=r.Lface;a.inside=i.inside,a.anEdge=r,e.deleteRegion(t,i)},e.finishLeftRegions=function(t,i,r){for(var a,o=null,l=i,h=i.eUp;l!==r;){if(l.fixUpperEdge=!1,(a=(o=e.regionBelow(l)).eUp).Org!=h.Org){if(!o.fixUpperEdge){e.finishRegion(t,l);break}a=t.mesh.connect(h.Lprev,a.Sym),e.fixUpperEdge(t,o,a)}h.Onext!==a&&(t.mesh.splice(a.Oprev,a),t.mesh.splice(h,a)),e.finishRegion(t,l),h=o.eUp,l=o}return h},e.addRightEdges=function(t,i,r,a,o,l){var h,c,d,p,f=!0;d=r;do wO(wI.vertLeq(d.Org,d.Dst)),e.addRegionBelow(t,i,d.Sym),d=d.Onext;while(d!==a)for(null===o&&(o=e.regionBelow(i).eUp.Rprev),c=i,p=o;(d=(h=e.regionBelow(c)).eUp.Sym).Org===p.Org;)d.Onext!==p&&(t.mesh.splice(d.Oprev,d),t.mesh.splice(p.Oprev,d)),h.windingNumber=c.windingNumber-d.winding,h.inside=e.isWindingInside(t,h.windingNumber),c.dirty=!0,!f&&e.checkForRightSplice(t,c)&&(e.addWinding(d,p),e.deleteRegion(t,c),t.mesh.delete(p)),f=!1,c=h,p=d;c.dirty=!0,wO(c.windingNumber-d.winding===h.windingNumber),l&&e.walkDirtyRegions(t,c)},e.spliceMergeVertices=function(e,t,i){e.mesh.splice(t,i)},e.vertexWeights=function(e,t,i){var r=wI.vertL1dist(t,e),a=wI.vertL1dist(i,e),o=.5*a/(r+a),l=.5*r/(r+a);e.coords[0]+=o*t.coords[0]+l*i.coords[0],e.coords[1]+=o*t.coords[1]+l*i.coords[1],e.coords[2]+=o*t.coords[2]+l*i.coords[2]},e.getIntersectData=function(t,i,r,a,o,l){i.coords[0]=i.coords[1]=i.coords[2]=0,i.idx=-1,e.vertexWeights(i,r,a),e.vertexWeights(i,o,l)},e.checkForRightSplice=function(t,i){var r=e.regionBelow(i),a=i.eUp,o=r.eUp;if(wI.vertLeq(a.Org,o.Org)){if(wI.edgeSign(o.Dst,a.Org,o.Org)>0)return!1;wI.vertEq(a.Org,o.Org)?a.Org!==o.Org&&(t.pq.delete(a.Org.pqHandle),e.spliceMergeVertices(t,o.Oprev,a)):(t.mesh.splitEdge(o.Sym),t.mesh.splice(a,o.Oprev),i.dirty=r.dirty=!0)}else{if(0>wI.edgeSign(a.Dst,o.Org,a.Org))return!1;e.regionAbove(i).dirty=i.dirty=!0,t.mesh.splitEdge(a.Sym),t.mesh.splice(o.Oprev,a)}return!0},e.checkForLeftSplice=function(t,i){var r,a=e.regionBelow(i),o=i.eUp,l=a.eUp;if(wO(!wI.vertEq(o.Dst,l.Dst)),wI.vertLeq(o.Dst,l.Dst)){if(0>wI.edgeSign(o.Dst,l.Dst,o.Org))return!1;e.regionAbove(i).dirty=i.dirty=!0,r=t.mesh.splitEdge(o),t.mesh.splice(l.Sym,r),r.Lface.inside=i.inside}else{if(wI.edgeSign(l.Dst,o.Dst,l.Org)>0)return!1;i.dirty=a.dirty=!0,r=t.mesh.splitEdge(l),t.mesh.splice(o.Lnext,l.Sym),r.Rface.inside=i.inside}return!0},e.checkForIntersect=function(t,i){var r,a,o=e.regionBelow(i),l=i.eUp,h=o.eUp,c=l.Org,d=h.Org,p=l.Dst,f=h.Dst,m=new wB;if(wO(!wI.vertEq(f,p)),wO(0>=wI.edgeSign(p,t.event,c)),wO(wI.edgeSign(f,t.event,d)>=0),wO(c!==t.event&&d!==t.event),wO(!i.fixUpperEdge&&!o.fixUpperEdge),c===d||Math.min(c.t,p.t)>Math.max(d.t,f.t))return!1;
3135if(wI.vertLeq(c,d)){if(wI.edgeSign(f,c,d)>0)return!1}else if(0>wI.edgeSign(p,d,c))return!1;return e.debugEvent(t),wI.intersect(p,c,f,d,m),wO(Math.min(c.t,p.t)<=m.t),wO(m.t<=Math.max(d.t,f.t)),wO(Math.min(f.s,p.s)<=m.s),wO(m.s<=Math.max(d.s,c.s)),wI.vertLeq(m,t.event)&&(m.s=t.event.s,m.t=t.event.t),r=wI.vertLeq(c,d)?c:d,wI.vertLeq(r,m)&&(m.s=r.s,m.t=r.t),wI.vertEq(m,c)||wI.vertEq(m,d)?(e.checkForRightSplice(t,i),!1):!wI.vertEq(p,t.event)&&wI.edgeSign(p,t.event,m)>=0||!wI.vertEq(f,t.event)&&0>=wI.edgeSign(f,t.event,m)?f===t.event?(t.mesh.splitEdge(l.Sym),t.mesh.splice(h.Sym,l),i=e.topLeftRegion(t,i),l=e.regionBelow(i).eUp,e.finishLeftRegions(t,e.regionBelow(i),o),e.addRightEdges(t,i,l.Oprev,l,l,!0),!0):p===t.event?(t.mesh.splitEdge(h.Sym),t.mesh.splice(l.Lnext,h.Oprev),o=i,i=e.topRightRegion(i),a=e.regionBelow(i).eUp.Rprev,o.eUp=h.Oprev,h=e.finishLeftRegions(t,o,null),e.addRightEdges(t,i,h.Onext,l.Rprev,a,!0),!0):(wI.edgeSign(p,t.event,m)>=0&&(e.regionAbove(i).dirty=i.dirty=!0,t.mesh.splitEdge(l.Sym),l.Org.s=t.event.s,l.Org.t=t.event.t),0>=wI.edgeSign(f,t.event,m)&&(i.dirty=o.dirty=!0,t.mesh.splitEdge(h.Sym),h.Org.s=t.event.s,h.Org.t=t.event.t),!1):(t.mesh.splitEdge(l.Sym),t.mesh.splitEdge(h.Sym),t.mesh.splice(h.Oprev,l),l.Org.s=m.s,l.Org.t=m.t,l.Org.pqHandle=t.pq.insert(l.Org),e.getIntersectData(t,l.Org,c,p,d,f),e.regionAbove(i).dirty=i.dirty=o.dirty=!0,!1)},e.walkDirtyRegions=function(t,i){for(var r,a,o=e.regionBelow(i);;){for(;o.dirty;)i=o,o=e.regionBelow(o);if(!i.dirty&&(o=i,null===(i=e.regionAbove(i))||!i.dirty))return;if(i.dirty=!1,r=i.eUp,a=o.eUp,r.Dst!==a.Dst&&e.checkForLeftSplice(t,i)&&(o.fixUpperEdge?(e.deleteRegion(t,o),t.mesh.delete(a),a=(o=e.regionBelow(i)).eUp):i.fixUpperEdge&&(e.deleteRegion(t,i),t.mesh.delete(r),r=(i=e.regionAbove(o)).eUp)),r.Org!==a.Org){if(r.Dst===a.Dst||i.fixUpperEdge||o.fixUpperEdge||r.Dst!==t.event&&a.Dst!==t.event)e.checkForRightSplice(t,i);else if(e.checkForIntersect(t,i))return}r.Org===a.Org&&r.Dst===a.Dst&&(e.addWinding(a,r),e.deleteRegion(t,i),t.mesh.delete(r),i=e.regionAbove(o))}},e.connectRightVertex=function(t,i,r){var a,o=r.Onext,l=e.regionBelow(i),h=i.eUp,c=l.eUp,d=!1;(h.Dst!==c.Dst&&e.checkForIntersect(t,i),wI.vertEq(h.Org,t.event)&&(t.mesh.splice(o.Oprev,h),i=e.topLeftRegion(t,i),o=e.regionBelow(i).eUp,e.finishLeftRegions(t,e.regionBelow(i),l),d=!0),wI.vertEq(c.Org,t.event)&&(t.mesh.splice(r,c.Oprev),r=e.finishLeftRegions(t,l,null),d=!0),d)?e.addRightEdges(t,i,r.Onext,o,o,!0):(a=wI.vertLeq(c.Org,h.Org)?c.Oprev:h,a=t.mesh.connect(r.Lprev,a),e.addRightEdges(t,i,a,a.Onext,a.Onext,!1),a.Sym.activeRegion.fixUpperEdge=!0,e.walkDirtyRegions(t,i))},e.connectLeftDegenerate=function(t,i,r){var a,o,l,h,c;if(a=i.eUp,wI.vertEq(a.Org,r)){wO(!1),e.spliceMergeVertices(t,a,r.anEdge);return}if(!wI.vertEq(a.Dst,r)){t.mesh.splitEdge(a.Sym),i.fixUpperEdge&&(t.mesh.delete(a.Onext),i.fixUpperEdge=!1),t.mesh.splice(r.anEdge,a),e.sweepEvent(t,r);return}wO(!1),i=e.topRightRegion(i),o=h=(l=(c=e.regionBelow(i)).eUp.Sym).Onext,c.fixUpperEdge&&(wO(o!==l),e.deleteRegion(t,c),t.mesh.delete(l),l=o.Oprev),t.mesh.splice(r.anEdge,l),wI.edgeGoesLeft(o)||(o=null),e.addRightEdges(t,i,l.Onext,h,o,!0)},e.connectLeftVertex=function(t,i){var r,a,o,l,h,c,d=new wk;if(d.eUp=i.anEdge.Sym,r=t.dict.search(d).key,a=e.regionBelow(r)){if(l=r.eUp,h=a.eUp,0===wI.edgeSign(l.Dst,i,l.Org))return void e.connectLeftDegenerate(t,r,i);(o=wI.vertLeq(h.Dst,l.Dst)?r:a,r.inside||o.fixUpperEdge)?(c=o===r?t.mesh.connect(i.anEdge.Sym,l.Lnext):t.mesh.connect(h.Dnext,i.anEdge).Sym,o.fixUpperEdge?e.fixUpperEdge(t,o,c):e.computeWinding(t,e.addRegionBelow(t,r,c)),e.sweepEvent(t,i)):e.addRightEdges(t,r,i.anEdge,i.anEdge,null,!0)}},e.sweepEvent=function(t,i){t.event=i,e.debugEvent(t);for(var r=i.anEdge;null===r.activeRegion;)if((r=r.Onext)===i.anEdge)return void e.connectLeftVertex(t,i);var a=e.topLeftRegion(t,r.activeRegion);wO(null!==a);var o=e.regionBelow(a),l=o.eUp,h=e.finishLeftRegions(t,o,null);h.Onext===l?e.connectRightVertex(t,a,h):e.addRightEdges(t,a,h.Onext,l,l,!0)},e.addSentinel=function(e,t,i,r){var a=new wk,o=e.mesh.makeEdge();o.Org.s=i,o.Org.t=r,o.Dst.s=t,o.Dst.t=r,e.event=o.Dst,a.eUp=o,a.windingNumber=0,a.inside=!1,a.fixUpperEdge=!1,a.sentinel=!0,a.dirty=!1,a.nodeUp=e.dict.insert(a)},e.initEdgeDict=function(t){t.dict=new wj(t,e.edgeLeq);var i=t.bmax[0]-t.bmin[0],r=t.bmax[1]-t.bmin[1],a=t.bmin[0]-i,o=t.bmax[0]+i,l=t.bmin[1]-r,h=t.bmax[1]+r;e.addSentinel(t,a,o,l),e.addSentinel(t,a,o,h)},e.doneEdgeDict=function(t){for(var i,r=0;null!==(i=t.dict.min().key);)i.sentinel||(wO(i.fixUpperEdge),wO(1==++r)),wO(0===i.windingNumber),e.deleteRegion(t,i)},e.removeDegenerateEdges=function(t){var i,r,a,o=t.mesh.eHead;for(i=o.next;i!==o;i=r)r=i.next,a=i.Lnext,wI.vertEq(i.Org,i.Dst)&&i.Lnext.Lnext!==i&&(e.spliceMergeVertices(t,a,i),t.mesh.delete(i),a=(i=a).Lnext),a.Lnext===i&&(a!==i&&((a===r||a===r.Sym)&&(r=r.next),t.mesh.delete(a)),(i===r||i===r.Sym)&&(r=r.next),t.mesh.delete(i))},e.initPriorityQ=function(e){var t,i,r,a=0;for(i=(r=e.mesh.vHead).next;i!==r;i=i.next)a++;for(a+=8,t=e.pq=new wU(a,wI.vertLeq),i=(r=e.mesh.vHead).next;i!==r;i=i.next)i.pqHandle=t.insert(i);return i===r&&(t.init(),!0)},e.donePriorityQ=function(e){e.pq=null},e.removeDegenerateFaces=function(t,i){var r,a,o;for(r=i.fHead.next;r!==i.fHead;r=a)a=r.next,wO((o=r.anEdge).Lnext!==o),o.Lnext.Lnext===o&&(e.addWinding(o.Onext,o),t.mesh.delete(o));return!0},e.computeInterior=function(t,i){var r,a;if(void 0===i&&(i=!0),e.removeDegenerateEdges(t),!e.initPriorityQ(t))return!1;for(e.initEdgeDict(t);null!==(r=t.pq.extractMin());){for(;!(null===(a=t.pq.min())||!wI.vertEq(a,r));)a=t.pq.extractMin(),e.spliceMergeVertices(t,r.anEdge,a.anEdge);
vendor: 7,611 bytes, line 3135
3135e.sweepEvent(t,r)}return t.event=t.dict.min().key.eUp.Org,e.debugEvent(t),e.doneEdgeDict(t),e.donePriorityQ(t),!!e.removeDegenerateFaces(t,t.mesh)&&(i&&t.mesh.check(),!0)},e}(),wW=function(){function e(){this.mesh=new wz,this.normal=[0,0,0],this.sUnit=[0,0,0],this.tUnit=[0,0,0],this.bmin=[0,0],this.bmax=[0,0],this.windingRule=_e.ODD,this.dict=null,this.pq=null,this.event=null,this.vertexIndexCounter=0,this.vertices=[],this.vertexIndices=[],this.vertexCount=0,this.elements=[],this.elementCount=0}return e.prototype.dot_=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},e.prototype.normalize_=function(e){var t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2];if(!t)throw"Zero-size vector!";t=Math.sqrt(t),e[0]/=t,e[1]/=t,e[2]/=t},e.prototype.longAxis_=function(e){var t=0;return Math.abs(e[1])>Math.abs(e[0])&&(t=1),Math.abs(e[2])>Math.abs(e[t])&&(t=2),t},e.prototype.computeNormal_=function(e){var t,i,r,a,o,l,h=[0,0,0],c=[0,0,0],d=[0,0,0],p=[0,0,0],f=[0,0,0],m=[null,null,null],g=[null,null,null],v=this.mesh.vHead;t=v.next;for(var y=0;y<3;++y)a=t.coords[y],c[y]=a,g[y]=t,h[y]=a,m[y]=t;for(t=v.next;t!==v;t=t.next)for(var x=0;x<3;++x)(a=t.coords[x])<c[x]&&(c[x]=a,g[x]=t),a>h[x]&&(h[x]=a,m[x]=t);var b=0;if(h[1]-c[1]>h[0]-c[0]&&(b=1),h[2]-c[2]>h[b]-c[b]&&(b=2),c[b]>=h[b]){e[0]=0,e[1]=0,e[2]=1;return}for(l=0,i=g[b],r=m[b],d[0]=i.coords[0]-r.coords[0],d[1]=i.coords[1]-r.coords[1],d[2]=i.coords[2]-r.coords[2],t=v.next;t!==v;t=t.next)p[0]=t.coords[0]-r.coords[0],p[1]=t.coords[1]-r.coords[1],p[2]=t.coords[2]-r.coords[2],f[0]=d[1]*p[2]-d[2]*p[1],f[1]=d[2]*p[0]-d[0]*p[2],f[2]=d[0]*p[1]-d[1]*p[0],(o=f[0]*f[0]+f[1]*f[1]+f[2]*f[2])>l&&(l=o,e[0]=f[0],e[1]=f[1],e[2]=f[2]);l<=0&&(e[0]=e[1]=e[2]=0,e[this.longAxis_(d)]=1)},e.prototype.checkOrientation_=function(){for(var e,t,i=this.mesh.fHead,r=this.mesh.vHead,a=0,o=i.next;o!==i;o=o.next)if(!((t=o.anEdge).winding<=0))do a+=(t.Org.s-t.Dst.s)*(t.Org.t+t.Dst.t),t=t.Lnext;while(t!==o.anEdge)if(a<0){for(e=r.next;e!==r;e=e.next)e.t=-e.t;this.tUnit[0]=-this.tUnit[0],this.tUnit[1]=-this.tUnit[1],this.tUnit[2]=-this.tUnit[2]}},e.prototype.projectPolygon_=function(){var e,t,i=this.mesh.vHead,r=[0,0,0],a=!1;r[0]=this.normal[0],r[1]=this.normal[1],r[2]=this.normal[2],r[0]||r[1]||r[2]||(this.computeNormal_(r),a=!0),e=this.sUnit,t=this.tUnit;var o=this.longAxis_(r);e[o]=0,e[(o+1)%3]=1,e[(o+2)%3]=0,t[o]=0,t[(o+1)%3]=0,t[(o+2)%3]=r[o]>0?1:-1;for(var l=i.next;l!==i;l=l.next)l.s=this.dot_(l.coords,e),l.t=this.dot_(l.coords,t);a&&this.checkOrientation_();for(var h=!0,c=i.next;c!==i;c=c.next)h?(this.bmin[0]=this.bmax[0]=c.s,this.bmin[1]=this.bmax[1]=c.t,h=!1):(c.s<this.bmin[0]&&(this.bmin[0]=c.s),c.s>this.bmax[0]&&(this.bmax[0]=c.s),c.t<this.bmin[1]&&(this.bmin[1]=c.t),c.t>this.bmax[1]&&(this.bmax[1]=c.t))},e.prototype.addWinding_=function(e,t){e.winding+=t.winding,e.Sym.winding+=t.Sym.winding},e.prototype.tessellateMonoRegion_=function(e,t){var i,r;if((i=t.anEdge).Lnext===i||i.Lnext.Lnext===i)throw"Mono region invalid";for(;wI.vertLeq(i.Dst,i.Org);i=i.Lprev);for(;wI.vertLeq(i.Org,i.Dst);i=i.Lnext);r=i.Lprev;for(var a=void 0;i.Lnext!==r;)if(wI.vertLeq(i.Dst,r.Org)){for(;r.Lnext!==i&&(wI.edgeGoesLeft(r.Lnext)||0>=wI.edgeSign(r.Org,r.Dst,r.Lnext.Dst));)r=e.connect(r.Lnext,r).Sym;r=r.Lprev}else{for(;r.Lnext!==i&&(wI.edgeGoesRight(i.Lprev)||wI.edgeSign(i.Dst,i.Org,i.Lprev.Org)>=0);)i=e.connect(i,i.Lprev).Sym;i=i.Lnext}if(r.Lnext===i)throw"Mono region invalid";for(;r.Lnext.Lnext!==i;)r=e.connect(r.Lnext,r).Sym;return!0},e.prototype.tessellateInterior_=function(e){for(var t,i=e.fHead.next;i!==e.fHead;i=t)if(t=i.next,i.inside&&!this.tessellateMonoRegion_(e,i))return!1;return!0},e.prototype.discardExterior_=function(e){for(var t,i=e.fHead.next;i!==e.fHead;i=t)t=i.next,i.inside||e.zapFace(i)},e.prototype.setWindingNumber_=function(e,t,i){for(var r,a=e.eHead.next;a!==e.eHead;a=r)r=a.next,a.Rface.inside!==a.Lface.inside?a.winding=a.Lface.inside?t:-t:i?e.delete(a):a.winding=0},e.prototype.getNeighbourFace_=function(e){return e.Rface&&e.Rface.inside?e.Rface.n:-1},e.prototype.outputPolymesh_=function(e,t,i,r){var a,o,l=0,h=0;i>3&&e.mergeConvexFaces(i);for(var c=e.vHead.next;c!==e.vHead;c=c.next)c.n=-1;for(var d=e.fHead.next;d!==e.fHead;d=d.next)if(d.n=-1,d.inside){a=d.anEdge,o=0;do{var c=a.Org;-1===c.n&&(c.n=h,h++),o++,a=a.Lnext}while(a!==d.anEdge)if(o>i)throw"Face vertex greater that support polygon";d.n=l,++l}this.elementCount=l,t===_t.CONNECTED_POLYGONS&&(l*=2),this.elements=[],this.elements.length=l*i,this.vertexCount=h,this.vertices=[],this.vertices.length=h*r,this.vertexIndices=[],this.vertexIndices.length=h;for(var c=e.vHead.next;c!==e.vHead;c=c.next)if(-1!==c.n){var p=c.n*r;this.vertices[p+0]=c.coords[0],this.vertices[p+1]=c.coords[1],r>2&&(this.vertices[p+2]=c.coords[2]),this.vertexIndices[c.n]=c.idx}for(var f=0,d=e.fHead.next;d!==e.fHead;d=d.next)if(d.inside){a=d.anEdge,o=0;do{var c=a.Org;this.elements[f++]=c.n,o++,a=a.Lnext}while(a!==d.anEdge)for(var m=o;m<i;++m)this.elements[f++]=-1;if(t===_t.CONNECTED_POLYGONS){a=d.anEdge;do this.elements[f++]=this.getNeighbourFace_(a),a=a.Lnext;while(a!==d.anEdge)for(var g=o;g<i;++g)this.elements[f++]=-1}}},e.prototype.outputContours_=function(e,t){var i,r,a=0,o=0;this.vertexCount=0,this.elementCount=0;for(var l=e.fHead.next;l!==e.fHead;l=l.next)if(l.inside){r=i=l.anEdge;do this.vertexCount++,i=i.Lnext;while(i!==r)this.elementCount++}this.elements=[],this.elements.length=2*this.elementCount,this.vertices=[],this.vertices.length=this.vertexCount*t,this.vertexIndices=[],this.vertexIndices.length=this.vertexCount;var h=0,c=0,d=0;a=0;for(var l=e.fHead.next;l!==e.fHead;l=l.next)if(l.inside){o=0,r=i=l.anEdge;do this.vertices[h++]=i.Org.coords[0],this.vertices[h++]=i.Org.coords[1],t>2&&(this.vertices[h++]=i.Org.coords[2]),this.vertexIndices[c++]=this.vertexIdCallback?this.vertexIdCallback(i):i.Org.idx,o++,i=i.Lnext;while(i!==r)this.elements[d++]=a,this.elements[d++]=o,a+=o}},e.prototype.addContour=function(e,t){null===this.mesh&&(this.mesh=new wz),e<2&&(e=2),e>3&&(e=3);for(var i=null,r=0;r<t.length;r+=e)null===i?(i=this.mesh.makeEdge(),this.mesh.splice(i,i.Sym)):(this.mesh.splitEdge(i),i=i.Lnext),i.Org.coords[0]=t[r+0],i.Org.coords[1]=t[r+1],e>2?i.Org.coords[2]=t[r+2]:i.Org.coords[2]=0,i.Org.idx=this.vertexIndexCounter++,this.edgeCreateCallback&&this.edgeCreateCallback(i),i.winding=1,i.Sym.winding=-1},e.prototype.tesselate=function(e,t,i,r,a,o){if(void 0===e&&(e=_e.ODD),void 0===t&&(t=_t.POLYGONS),void 0===o&&(o=!0),this.vertices=[],this.elements=[],this.vertexIndices=[],this.vertexIndexCounter=0,a&&(this.normal[0]=a[0],this.normal[1]=a[1],this.normal[2]=a[2]),this.windingRule=e,r<2&&(r=2),r>3&&(r=3),!this.mesh)return!1;this.projectPolygon_(),wG.computeInterior(this,o);var l=this.mesh;return t===_t.BOUNDARY_CONTOURS?this.setWindingNumber_(l,1,!0):this.tessellateInterior_(l),o&&l.check(),t===_t.BOUNDARY_CONTOURS?this.outputContours_(l,r):this.outputPolymesh_(l,t,i,r),!0},e}();function wH(e){var t=e.windingRule,i=void 0===t?_e.ODD:t,r=e.elementType,a=void 0===r?_t.POLYGONS:r,o=e.polySize,l=e.vertexSize,h=void 0===l?2:l,c=e.normal,d=e.contours,p=void 0===d?[]:d,f=e.strict,m=void 0===f||f,g=e.debug;if(!p&&m)throw Error("Contours can't be empty");if(p){var v=new wW;e.edgeCreateCallback&&(v.edgeCreateCallback=e.edgeCreateCallback),e.vertexIdCallback&&(v.vertexIdCallback=e.vertexIdCallback);for(var y=0;y<p.length;y++)v.addContour(h||2,p[y]);return v.tesselate(i,a,void 0===o?3:o,h,void 0===c?[0,0,1]:c,m),{vertices:v.vertices,vertexIndices:v.vertexIndices,vertexCount:v.vertexCount,elements:v.elements,elementCount:v.elementCount,mesh:void 0!==g&&g?v.mesh:void 0}}}
3135_e.ODD,_e.NONZERO,_e.POSITIVE,_e.NEGATIVE,_e.ABS_GEQ_TWO,_t.POLYGONS,_t.CONNECTED_POLYGONS,_t.BOUNDARY_CONTOURS;var wq=class{constructor(e=256,t=!1){this.capacity=e,this.size=0,this.debug=t,this.debug;let i=e*wq.eSize;this.buffer=new ArrayBuffer(i);let r=Float32Array.BYTES_PER_ELEMENT,a=0;this.positions=new Float32Array(this.buffer,a*r,3*e),a+=3*e,this.normals=new Float32Array(this.buffer,a*r,3*e),a+=3*e,this.uvs=new Float32Array(this.buffer,a*r,2*e)}realloc(e,t=!1){if(e<this.size)throw Error("cannot shrink buffer");if(e<=this.capacity&&!t)return;this.debug;let i=new ArrayBuffer(e*wq.eSize),r=Float32Array.BYTES_PER_ELEMENT,a=0,o=new Float32Array(i,0*r,3*e),l=new Float32Array(i,(a+=3*e)*r,3*e),h=new Float32Array(i,(a+=3*e)*r,2*e);t?(o.set(this.positions.subarray(0,3*this.size)),l.set(this.normals.subarray(0,3*this.size)),h.set(this.uvs.subarray(0,2*this.size))):(o.set(this.positions),l.set(this.normals),h.set(this.uvs)),this.buffer=i,this.positions=o,this.normals=l,this.uvs=h,this.capacity=e}get(e=1){let t=this.size+e;if(t>this.capacity){let e=this.capacity;for(;t>e;)e*=2;this.realloc(e)}let i=this.size;return this.size=t,i}reserve(e){let t=this.size+e;t>this.capacity&&this.realloc(t)}shrink(){this.debug,this.realloc(this.size,!0)}};wq.eSize=8*Float32Array.BYTES_PER_ELEMENT;var wX=class{constructor(e=[],t=(e,t)=>e<t?-1:+(e>t)){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(0===this.length)return;let e=this.data[0],t=this.data.pop();return--this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){let{data:t,compare:i}=this,r=t[e];for(;e>0;){let a=e-1>>1,o=t[a];if(i(r,o)>=0)break;t[e]=o,e=a}t[e]=r}_down(e){let{data:t,compare:i}=this,r=this.length>>1,a=t[e];for(;e<r;){let r=(e<<1)+1,o=r+1;if(o<this.length&&0>i(t[o],t[r])&&(r=o),i(t[r],a)>=0)break;t[e]=t[r],e=r}t[e]=a}};function wY(e,t,i,r){this.x=e,this.y=t,this.h=i,this.d=function(e,t,i){let r=!1,a=1/0;for(let o of i)for(let i=0,l=o.length,h=l-1;i<l;h=i++){let l=o[i],c=o[h];l[1]>t!=c[1]>t&&e<(c[0]-l[0])*(t-l[1])/(c[1]-l[1])+l[0]&&(r=!r),a=Math.min(a,function(e,t,i,r){let a=i[0],o=i[1],l=r[0]-a,h=r[1]-o;if(0!==l||0!==h){let i=((e-a)*l+(t-o)*h)/(l*l+h*h);i>1?(a=r[0],o=r[1]):i>0&&(a+=l*i,o+=h*i)}return(l=e-a)*l+(h=t-o)*h}(e,t,l,c))}return 0===a?0:(r?1:-1)*Math.sqrt(a)}(e,t,r),this.max=this.d+this.h*Math.SQRT2}var wQ={vertices:[160,160,-160,160,-160,-160,160,-160],vertexIndices:[1,0,3,2],vertexCount:4,elements:[0,4],elementCount:1,mesh:void 0},wZ={vertices:[],vertexIndices:[],vertexCount:0,elements:[],elementCount:0,mesh:void 0},wK={vertices:[-160,160,160,-160,160,160,-160,-160],vertexIndices:[1,3,0,2],vertexCount:4,elements:[0,1,2,1,0,3],elementCount:2,mesh:void 0},wJ=(e,t)=>([i,r])=>(r<i&&(r+=t),(e>=i?e:e+t)<=r),w$=class extends rQ{constructor(e,t,i=0,r=12,a=3,o=_e.ODD,l=!1){let h,c,d;super(),this.forPathBevel=l,this.type="ShapeGeometry",this.vertexCache={},this._shape=e,this._depth=t,this._curveSegments=r,this._bevelSegmentsInput=a;let p=this._shape.extractShapePointsToFlatArray([],r),f=this._shape.shapeHoles.map(e=>{let t=e.extractShapePointsToFlatArray([],r),i=[];for(let e=t.length-1;e>=1;e-=2){let r=t[e-1],a=t[e-0];i.push(r,a)}return i}),m=[],g=[];for(let e=0;e<p.length;e+=2)g.push([p[e],p[e+1]]);m.push(g);for(let e=0;e<f.length;e++){let t=f[e],i=[];for(let e=0;e<t.length;e+=2)i.push([t[e],t[e+1]]);m.push(i)}h=e.isText?.1*new lY().setFromPoints(e.points.map(e=>e.position)).getSize(new t9).length():0===m[0].length?i:i>0?function(e,t,i=1,r=!1){let a=1/0,o=1/0,l=-1/0,h=-1/0;for(let[t,i]of e[0])t<a&&(a=t),i<o&&(o=i),t>l&&(l=t),i>h&&(h=i);let c=l-a,d=h-o,p=Math.max(i,Math.min(c,d));if(p===i){let e=[a,o];return e.distance=0,e.distance}let f=new wX([],(e,t)=>t.max-e.max),m=function(e){let t=0,i=0,r=0,a=e[0];for(let e=0,o=a.length,l=o-1;e<o;l=e++){let o=a[e],h=a[l],c=o[0]*h[1]-h[0]*o[1];i+=(o[0]+h[0])*c,r+=(o[1]+h[1])*c,t+=3*c}let o=new wY(i/t,r/t,0,e);return 0===t||o.d<0?new wY(a[0][0],a[0][1],0,e):o}(e),g=new wY(a+c/2,o+d/2,0,e);g.d>m.d&&(m=g);let v=2;function y(r,a,o){let l=new wY(r,a,o,e);if(v++,l.max>m.d+i&&f.push(l),l.d>m.d&&(m=l).d>t)return t}let x=p/2;for(let e=a;
3135e<l;e+=p)for(let t=o;t<h;t+=p)y(e+x,t+x,x);for(;f.length;){let{max:e,x:t,y:r,h:a}=f.pop();if(e-m.d<=i)break;y(t-(x=a/2),r-x,x),y(t+x,r-x,x),y(t-x,r+x,x),y(t+x,r+x,x)}let b=[m.x,m.y];return b.distance=m.d,b.distance}(m,i):1e-5,i<=0?(this._bevel=0,this._bevelSegments=0):(this._bevel=Math.min(i,h,t/2),this._bevelSegments=Math.floor(a));try{c=wH({windingRule:o,elementType:_t.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[p]})}catch{c=wQ}try{d=wH({windingRule:_e.ODD,elementType:_t.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...f]})}catch{d=wZ}if(!c)throw Error("error generating geometry");let v=c.elementCount;if(d){c.elementCount+=d.elementCount;for(let e=0;e<d.elements.length;e++){let t=d.elements[e],i=e%2==0?c.vertexCount:0;c.elements.push(t+i)}for(let e=0;e<d.vertexIndices.length;e++){let t=d.vertexIndices[e],i=c.vertexCount;c.vertexIndices.push(t+i)}for(let e=0;e<d.vertices.length;e++){let t=d.vertices[e];c.vertices.push(t)}}let y=1/0,x=-1/0,b=1/0,w=-1/0;for(let e=0,t=c.vertexCount;e<t;e++){let t=2*e,i=c.vertices[t+0],r=c.vertices[t+1];i<y&&(y=i),i>x&&(x=i),r<b&&(b=r),r>w&&(w=r)}this._minX=y,this._minY=b,this._width=x-y,this._height=w-b,this._buffer=new wq(this._computeBufferEstimatedSize(c));let S=[],_=[];for(let e=c.elementCount-1;e>=0;e--){let t=e>=v,i=2*e,a=c.elements[i+0],o=c.elements[i+1],d=a+o,p={start:a,count:o,normals:[],continuous:[],concave:[]},m=a,g=d-1,y=a+1,x=this._shape.roundedCurves.length;do{let e=m-a,i=c.vertices[2*g+0],r=c.vertices[2*g+1],l=c.vertices[2*m+0],h=c.vertices[2*m+1],f=c.vertices[2*y+0],v=c.vertices[2*y+1],b=l-i,w=h-r,S=Math.sqrt(b*b+w*w);b/=S,w/=S;let _=l-f,A=h-v,M=Math.sqrt(_*_+A*A);_/=M,A/=M,p.normals[2*e+0]=-A,p.normals[2*e+1]=_,p.concave[e]=b*A-w*_>0;let C=c.vertexIndices[m];if(Array.isArray(C))p.continuous[e]=!1;else{let[t,i]=this._shape.getCurveIndexFromVertexId(C-1,!0);if(i>0&&i<1)p.continuous[e]=!0;else{let r=1===i?t+1:t-1;r=(r+x)%x;let a=+(1!==i),o=this._shape.roundedCurves[t].getTangent(i),l=this._shape.roundedCurves[r].getTangent(a);p.continuous[e]=o.dot(l)>.95}}t&&(p.normals[2*e+0]*=-1,p.normals[2*e+1]*=-1),[g,m,y]=[m,y,y+1],y>=d&&(y-=o)}while(y!==a+1)let b=[];b.push({bevelI:0,angle:0,size:0,boundary:{vertices:c.vertices.slice(2*a,2*d),vertexCount:o,vertexIndices:Array(o).fill(!0).map((e,t)=>[t,t]),elements:[0,o],elementCount:1,mesh:null},reverseMap:[],insetPoints:c.vertices.slice(2*a,2*d)});let w=0;for(let e=1;e<=this._bevelSegments;e++){let i=e/this._bevelSegments*Math.PI/2,a=(1-Math.cos(i))*this._bevel,l=[],h=[],d=[],f=[],m=0;for(let e=0;e<o;e++){let i=2*e,g=(e-1+o)%o*2,v=c.vertices[2*p.start+i+0],y=c.vertices[2*p.start+i+1],x=-p.normals[g+0]*a,b=-p.normals[g+1]*a,w=-p.normals[i+0]*a,S=-p.normals[i+1]*a;if(p.concave[e]||!p.concave[e]&&t){let i=Math.atan2(b,x),o=Math.atan2(S,w);o>i&&(o-=2*Math.PI);let h=o-i;if(p.continuous[e]||t){let r=i+h/2,o=Math.cos(r)*a,c=Math.sin(r)*a;l[2*m+0]=v+o*(t?-1:1),l[2*m+1]=y+c*(t?-1:1),f[m]=e,m++}else{let t=Math.max(1,Math.floor(r/4*Math.abs(h)/Math.PI));for(let r=0;r<=t;r++){let o=i+r/t*h,c=Math.cos(o)*a,d=Math.sin(o)*a;l[2*m+0]=v+c,l[2*m+1]=y+d,f[m]=e,m++}}}else l[2*m+0]=v+x,l[2*m+1]=y+b,f[m]=e,h[e]=m,l[2*++m+0]=v,l[2*m+1]=y,f[m]=e,l[2*++m+0]=v+w,l[2*m+1]=y+S,f[m]=e,d[e]=m,m++}let g=wH({windingRule:_e.POSITIVE,elementType:_t.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[l],edgeCreateCallback:e=>{let t=e.Org.idx,i=f[t],r=f[(t+1)%f.length];e.idx=[i,r],e.Sym.idx=[r,i]},vertexIdCallback:e=>{let t=e.Lprev.idx;return[t?t[1]:0,e.idx?e.idx[0]:0]}});if(!g)throw Error(`error generating bevel geometry for ${e}'th loop`);if(!g.vertexCount){w=(1-Math.sin((e-1)/this._bevelSegments*Math.PI/2))*this._bevel;break}for(let e=0;e<g.vertexIndices.length;e++){let[t,i]=g.vertexIndices[e];if(t===i)continue;let r=i;i<t&&(r+=o);for(let a=t;a<r;a++){let r=a%o,l=(a+1)%o;if(!p.continuous[r]||!p.continuous[l]){g.vertexIndices[e]=[t,r],g.vertexIndices.splice(e+1,0,[l,i]),g.vertices.splice((e+1)*2,0,g.vertices[2*e],g.vertices[2*e+1]);break}}}b.push({bevelI:e,angle:i,size:a,boundary:g,reverseMap:f,insetPoints:l})}let A=(e,t,i)=>{let r=0,a=e.boundary.vertexIndices.length;for(;r<a&&i(e.boundary.vertexIndices[t]);)t=(t+1)%a,r++;return r},M=S.length;for(let e=1;e<b.length;
3135e++){let t=b[e-1],i=b[e],r=t.boundary.vertexIndices.length,a=i.boundary.vertexIndices.length;if(!r||!a)break;let h=p.concave.length,c=0,d=wJ(0,o);for(;!t.boundary.vertexIndices.filter(d).length||!i.boundary.vertexIndices.filter(d).length;)d=wJ(++c,o);let f=t.boundary.vertexIndices.findIndex(d),m=i.boundary.vertexIndices.findIndex(d);do f=(f+1)%r;while(d(t.boundary.vertexIndices[f]))do m=(m+1)%a;while(d(i.boundary.vertexIndices[m]))let g=c=(c+1)%o,v=0,y=this._buildBevelVert(p,t,(f-1+r)%r,void 0,v),x=this._buildBevelVert(p,i,(m-1+a)%a,void 0,v),w=y,_=x,M,C,E=!1;do{v=(c||h)/h;let e=A(t,f,d=wJ(c,o)),g=A(i,m,d),y=E;if(E=!1,e&&!g){for(let i=0;i<e;i++)M=this._buildBevelVert(p,t,(f+i)%r,i/(e-1),v),S.push(w.topN,M.topP,_.topN),!1===l&&S.push(M.bottomP,w.bottomN,_.bottomN),w=M;E=!0}else if(!e&&g)for(let e=0;e<g;e++)C=this._buildBevelVert(p,i,(m+e)%a,e/(g-1),v),S.push(_.topN,w.topP,C.topP),!1===l&&S.push(w.bottomP,_.bottomN,C.bottomP),_=C;else if(e&&g)if(M=this._buildBevelVert(p,t,f,0,v),C=this._buildBevelVert(p,i,m,0,v),y?(S.push(w.topN,C.topP,_.topN),S.push(w.topN,M.topP,C.topP),!1===l&&(S.push(C.bottomP,w.bottomN,_.bottomN),S.push(C.bottomP,M.bottomP,w.bottomN))):(S.push(_.topN,w.topN,M.topP),S.push(_.topN,M.topP,C.topP),!1===l&&(S.push(M.bottomP,w.bottomN,_.bottomN),S.push(M.bottomP,_.bottomN,C.bottomP))),w=M,_=C,e===g)for(let o=1;o<e;o++)M=this._buildBevelVert(p,t,(f+o)%r,o/(e-1),v),C=this._buildBevelVert(p,i,(m+o)%a,o/(g-1),v),S.push(w.topN,M.topP,_.topN),S.push(_.topN,M.topP,C.topP),!1===l&&(S.push(M.bottomP,w.bottomN,_.bottomN),S.push(M.bottomP,_.bottomN,C.bottomP)),w=M,_=C;else if(e>g){let o=e/g,h=0;for(let c=1;c<e;c++)M=this._buildBevelVert(p,t,(f+c)%r,c/(e-1),v),S.push(w.topN,M.topP,_.topN),!1===l&&S.push(M.bottomP,w.bottomN,_.bottomN),w=M,c>(h+1)*o&&(h++,C=this._buildBevelVert(p,i,(m+h)%a,h/(g-1),v),S.push(_.topN,M.topP,C.topP),!1===l&&S.push(M.bottomP,_.bottomN,C.bottomP),_=C)}else{let o=g/e,h=0;for(let c=1;c<g;c++)C=this._buildBevelVert(p,i,(m+c)%a,c/(g-1),v),S.push(_.topN,M.topP,C.topP),!1===l&&S.push(M.bottomP,_.bottomN,C.bottomP),_=C,c>(h+1)*o&&(h++,M=this._buildBevelVert(p,t,(f+h)%r,h/(e-1),v),S.push(w.topN,M.topP,_.topN),!1===l&&S.push(M.bottomP,w.bottomN,_.bottomN),w=M)}f=(f+e)%r,m=(m+g)%a,c=(c+1)%h}while(c!==g)}if(!1===l&&this._depth>2*this._bevel&&this._buildWall(b,p,S),t){let e=[];for(let t=S.length-1;t>=M+2;t-=3){let i=S[t-2],r=S[t-1],a=S[t-0];e.push(a,r,i)}S.splice(M,S.length-M,...e)}if(t){let e=[];for(let t=b[b.length-1].boundary.vertices.length-1;t>=1;t-=2){let i=b[b.length-1].boundary.vertices[t-1],r=b[b.length-1].boundary.vertices[t-0];e.push(i,r)}_.push(e)}if(!t){let e=b[b.length-1],t;try{t=wH({windingRule:b.length>1?_e.POSITIVE:_e.ODD,elementType:_t.POLYGONS,vertexSize:2,strict:!0,contours:[e.insetPoints,..._]})}catch{t=wK}if(!t)throw Error("Error generating geometry for surface");0===f.length&&this._bevel<h&&Object.assign(this,{useNgonForTopBottomFaceDuringBake:!0});for(let e=0;e<3*t.elementCount;e+=3){let i=this._buildSurfaceVert(t,t.elements[e+0],w),r=this._buildSurfaceVert(t,t.elements[e+1],w),a=this._buildSurfaceVert(t,t.elements[e+2],w);S.push(i.top,r.top,a.top),!1===l&&S.push(a.bottom,r.bottom,i.bottom)}}this.vertexCache={}}this._buffer.shrink();let A=new rN(Uint32Array.from(S),1),M=new rN(this._buffer.positions,3),C=new rN(this._buffer.normals,3),E=new rN(this._buffer.uvs,2);M.needsUpdate=!0,C.needsUpdate=!0,E.needsUpdate=!0,A.needsUpdate=!0,this.setAttribute("position",M),this.setAttribute("normal",C),this.setAttribute("uv",E),this.setIndex(A)}_computeBufferEstimatedSize(e){return 2*e.vertexCount*(2+this._bevelSegments)}_buildWall(e,t,i){let r=e[0];for(let e=0,a=r.boundary.vertexCount;e<a;e++){let o=this._buildBevelVert(t,r,e),l=this._buildBevelVert(t,r,(e+1)%a);i.push(l.topP,o.topN,o.bottomN),i.push(l.topP,o.bottomN,l.bottomP)}}_buildSurfaceVert(e,t,i){let r=t.toString();if(r in this.vertexCache)return this.vertexCache[r];let a=e.vertices[2*t+0],o=e.vertices[2*t+1],l=(a-this._minX)/this._width,h=(o-this._minY)/this._height;this.forPathBevel&&(h=1);let c=this._buffer.get(this.forPathBevel?1:2),d=3*c,p=2*c,f={top:c+0,bottom:c+1};return this._buffer.positions[d+0]=a,this._buffer.positions[d+1]=o,this._buffer.positions[d+2]=this.forPathBevel?this._bevel:this._depth-i,this._buffer.normals[d+0]=0,this._buffer.normals[d+1]=0,this._buffer.normals[d+2]=1,this._buffer.uvs[p+0]=l,this._buffer.uvs[p+1]=h,!1===this.forPathBevel&&(this._buffer.positions[d+3]=a,this._buffer.positions[d+4]=o,this._buffer.positions[d+5]=i,this._buffer.normals[d+3]=0,this._buffer.normals[d+4]=0,this._buffer.normals[d+5]=-1,this._buffer.uvs[p+2]=l,this._buffer.uvs[p+3]=h),this.vertexCache[r]=f,f}_buildBevelVert(e,t,i,r=1,a){let o=`${t.bevelI}
3135:${i}`;if(o in this.vertexCache&&0!==a&&1!==a&&(!a||a===this.vertexCache[o].pathBevelUCoord))return this.vertexCache[o];let[l,h]=t.boundary.vertexIndices[i],c,d,p,f;l!==h?(d=l,c=h,f=!1,p=e.continuous[d]&&e.continuous[c]):(d=((c=l)-1+e.count)%e.count,f=e.concave[c]&&t.bevelI>0,p=e.continuous[c]||f);let m=Math.cos(t.angle),g=Math.sin(t.angle),v=2*i,y=2*c,x=2*d,b=t.boundary.vertices[v+0],w=t.boundary.vertices[v+1],S=(1-g)*this._bevel,_=(b-this._minX)/this._width,A=(w-this._minY)/this._height;this.forPathBevel&&(void 0!==a&&(_=a),A=1);let M=e.normals[y+0],C=e.normals[y+1],E=e.normals[x+0],T=e.normals[x+1];if(f){let e=E-M,t=T-C,i=Math.sqrt((M+=e*(1-r))*M+(C+=t*(1-r))*C);M/=i,C/=i}let P=this.forPathBevel?this._buffer.get(p?1:2):this._buffer.get(p?2:4),D=3*P,O=2*P,I={i,fi:c,topP:P+0,topN:P+0,bottomP:P+1,bottomN:P+1,pathBevelUCoord:a};return this._buffer.positions[D+0]=b,this._buffer.positions[D+1]=w,this._buffer.positions[D+2]=(this.forPathBevel?this._bevel:this._depth)-S,this._buffer.normals[D+0]=M*m,this._buffer.normals[D+1]=C*m,this._buffer.normals[D+2]=g,this._buffer.uvs[O+0]=_,this._buffer.uvs[O+1]=A,!1===this.forPathBevel&&(this._buffer.positions[D+3]=b,this._buffer.positions[D+4]=w,this._buffer.positions[D+5]=S,this._buffer.normals[D+3]=M*m,this._buffer.normals[D+4]=C*m,this._buffer.normals[D+5]=-g,this._buffer.uvs[O+2]=A,this._buffer.uvs[O+3]=_),p||(this.forPathBevel?(P+=1,D+=3,O+=2):(P+=2,D+=6,O+=4),I.topP=P+0,I.bottomP=P+1,this._buffer.positions[D+0]=b,this._buffer.positions[D+1]=w,this._buffer.positions[D+2]=(this.forPathBevel?this._bevel:this._depth)-S,this._buffer.normals[D+0]=E*m,this._buffer.normals[D+1]=T*m,this._buffer.normals[D+2]=g,this._buffer.uvs[O+0]=_,this._buffer.uvs[O+1]=A,!1===this.forPathBevel&&(this._buffer.positions[D+3]=b,this._buffer.positions[D+4]=w,this._buffer.positions[D+5]=S,this._buffer.normals[D+3]=E*m,this._buffer.normals[D+4]=T*m,this._buffer.normals[D+5]=-g,this._buffer.uvs[O+2]=A,this._buffer.uvs[O+3]=_)),this.vertexCache[o]=I,I}clone(){let e=new w$(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=uV(this.userData),e}},w0=class extends rQ{constructor(e,t=12,i={}){super(),this.type="ShapeGeometry",this.windingRule=_e.ODD,this.elementType=_t.POLYGONS,this.polySize=3,this.vertexSize=2,this.strict=!0,this._shape=e,this._curveSegments=t,this._triangulationOptions=Object.assign({windingRule:_e.ODD,elementType:_t.POLYGONS,polySize:3,vertexSize:2,strict:!0},i);let r=this._shape.extractShapePointsToFlatArray([],this._curveSegments),a=this._shape.shapeHoles.map(e=>e.extractShapePointsToFlatArray([],this._curveSegments)),o,l=!0,h=!0,c,d;for(let e=0,t=r.length/2;e<t;e++){let t=2*e,i=r[t+0],a=r[t+1];if(void 0!==c&&i!==c&&(l=!1),void 0!==d&&a!==d&&(h=!1),c=i,d=a,!l&&!h)break}if(!l&&!h)try{o=wH({contours:[r,...a],windingRule:this._triangulationOptions.windingRule,elementType:this._triangulationOptions.elementType,polySize:this._triangulationOptions.polySize,vertexSize:this._triangulationOptions.vertexSize,strict:this._triangulationOptions.strict})}catch{o=wQ}let p=o?.vertexCount??1,f=o?.elementCount??1;if(this._positionAttribute=new rN(new Float32Array(3*p),3),this._normalAttribute=new rN(new Float32Array(3*p),3),this._uvAttribute=new rN(new Float32Array(2*p),2),this._indexAttribute=new rN(new Uint32Array(3*f),1),o){let e=1/0,t=-1/0,i=1/0,r=-1/0;for(let a=0;a<p;a++){let l=2*a,h=o.vertices[l+0],c=o.vertices[l+1];h<e&&(e=h),h>t&&(t=h),c<i&&(i=c),c>r&&(r=c)}let a=t-e,l=r-i;for(let t=0;t<p;t++){let r=2*t,h=o.vertices[r+0],c=o.vertices[r+1],d=(h-e)/a,p=(c-i)/l;this._positionAttribute.setXYZ(t,h,c,0),this._normalAttribute.setXYZ(t,0,0,1),this._uvAttribute.setXY(t,d,p)}for(let e=0;e<f;e++){let t=3*e,i=o.elements[t+0],r=o.elements[t+1],a=o.elements[t+2];this._indexAttribute.setX(t+0,i),this._indexAttribute.setX(t+1,r),this._indexAttribute.setX(t+2,a)}}this.setAttribute("position",this._positionAttribute),this.setAttribute("normal",this._normalAttribute),this.setAttribute("uv",this._uvAttribute),this.setIndex(this._indexAttribute),this.setDrawRange(0,(o?.elementCount??1)*3)}clone(){let e=new w0(this._shape,this._curveSegments);return e.userData=uV(this.userData),e}},w1=class extends w${constructor(e,t,i=0,r=12,a=3,o=_e.ODD){super(e,t,i,r,a,o),this.type="ShapeGeometry"}_computeBufferEstimatedSize(e){return 2*e.vertexCount*(2+this._bevelSegments)}_buildWall(e,t,i){let r=e[0];for(let e=0,a=r.boundary.vertexCount;e<a;e++){let o=this._buildBevelVert(t,r,e),l=this._buildBevelVert(t,r,(e+1)%a);i.push(l.topP,o.topN,o.bottomN),i.push(l.topP,o.bottomN,l.bottomP)}}clone(){let e=new w1(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=uV(this.userData),e}},w2=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,subdivisions:40,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3,windingRule:_e.ODD},e.parameters),r=Math.abs(i.width),a=Math.abs(i.height??i.width),o=Math.abs(i.depth??0),l=e.shape??t?.shape,h=l?.roundness??i.roun
3135dness;void 0!==l&&(l instanceof wE?(l.width!==r||l.height!==a)&&l.applySize(r,a):l=new wE(r,a).fromJSON(l),e.parameters?.roundness!==void 0&&e.parameters?.roundness>0&&l.update());let c=l??new wE(r,a);return{parameters:Object.assign(i,{width:r,height:a,depth:o,roundness:h}),shape:c}}static build(e){let{depth:t,extrudeBevelSize:i,extrudeBevelSegments:r,subdivisions:a,roundness:o,windingRule:l}=e.parameters;return e.shape.roundness=o,Object.assign(t<=0?new w0(e.shape,a,{windingRule:l}):new w1(e.shape,t,i,a,r,l),{userData:{...e,type:"VectorGeometry"}})}},w3=2*Math.PI,w4=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:64,angle:360,innerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters);return i.angle=t8.clamp(i.angle,0,360),{shape:e.shape&&e.shape instanceof wE?e.shape:new wE,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let t,{width:i,height:r,spikes:a,angle:o,innerRadius:l,depth:h,extrudeBevelSize:c,extrudeBevelSegments:d}=e.parameters,p=e.shape,f=function(e,t,i,r,a,o){if(r>=w3)return a>30||a%4==0?(function(e,t,i,r=0,a=0,o=0){let l=.5522847498*t,h=.5522847498*i;e.addPoint(w8(a-t,o,a-t,o-h,a-t,o+h)),e.addPoint(w8(a,o+i,a-l,o+i,a+l,o+i)),e.addPoint(w8(a+t,o,a+t,o+h,a+t,o-h)),e.addPoint(w8(a,o-i,a+l,o-i,a-l,o-i)),r>0&&w7(e,t,i,r)}(e,t,i,o),Math.round(a/4)):w5(e,r,a,t,i,o);let l=(r=Math.max(r,.001))+.5*Math.PI,h={x:Math.cos(l)*t,y:Math.sin(l)*i},c=function({px:e,py:t,cx:i,cy:r,rx:a,ry:o,largeArcFlag:l,sweepFlag:h}){var c,d;let p,f,m,g,v,y,x,b,w,S,_,A=[];if(0===a||0===o)return[];let M=(e-i)/2,C=(t-r)/2;if(0===M&&0===C)return[];let E=Math.pow(M,2)/Math.pow(a=Math.abs(a),2)+Math.pow(C,2)/Math.pow(o=Math.abs(o),2);E>1&&(a*=Math.sqrt(E),o*=Math.sqrt(E));let T=(c=a,d=o,p=Math.pow(c,2),f=Math.pow(d,2),m=Math.pow(M,2),(v=p*f-p*(g=Math.pow(C,2))-f*m)<0&&(v=0),v/=p*g+f*m,y=(v=Math.sqrt(v)*(l===h?-1:1))*c/d*C,x=-(v*d)/c*M,S=wD(1,0,b=(M-y)/c,w=(C-x)/d),_=wD(b,w,(-M-y)/c,(-C-x)/d),!h&&_>0&&(_-=wT),h&&_<0&&(_+=wT),{centerx:y+(e+i)/2,centery:x+(t+r)/2,ang1:S,ang2:_}),{ang1:P,ang2:D}=T,{centerx:O,centery:I}=T,R=Math.abs(D)/(wT/4);1e-7>Math.abs(1-R)&&(R=1);let L=Math.max(Math.ceil(R),1);D/=L;for(let e=0;e<L;e++)A.push(function(e,t){let i=1.5707963267948966===t?.551915024494:-1.5707963267948966===t?-.551915024494:1.3333333333333333*Math.tan(t/4),r=Math.cos(e),a=Math.sin(e),o=Math.cos(e+t),l=Math.sin(e+t);return[{x:r-a*i,y:a+r*i},{x:o+l*i,y:l-o*i},{x:o,y:l}]}(P,D)),P+=D;return A.map(e=>{let{x:t,y:i}=wP(e[0],a,o,O,I),{x:r,y:l}=wP(e[1],a,o,O,I),{x:h,y:c}=wP(e[2],a,o,O,I);return{x1:t,y1:i,x2:r,y2:l,x:h,y:c}})}({px:0,py:i,cx:h.x,cy:h.y,rx:t,ry:i,largeArcFlag:r>Math.PI,sweepFlag:!0});return a>30||a%c.length==0?function(e,t,i,r,a,o,l){let h=Math.round(r/i.length);e.addPoint(w6(0,t));for(let t=0,r=i.length;t<r;t++){let r=i[t],a=e.points[t],o=w6(r.x,r.y);a.controls[1].position.set(r.x1,r.y1),o.controls[0].position.set(r.x2,r.y2),e.addPoint(o)}return l>0?w9(e,a,o,l):e.addPoint(w6(0,0)),h}(e,i,c,a,t,i,o):w5(e,r,a,t,i,o)}(p,.5*i,.5*r,o*Math.PI/180,a,l);return p.isClosed=!0,p.update(),0===o?(t=new rQ).setAttribute("position",new rV([],3)):t=w2.create({shape:p,parameters:{subdivisions:f,depth:h,extrudeBevelSize:c,extrudeBevelSegments:d}}),Object.assign(t,{userData:{...e,type:"EllipseGeometry"}})}};function w5(e,t,i,r,a,o){let l=-t/i;for(let t=0;t<=i;t++){let i=l*t,o=Math.sin(i)*r,h=Math.cos(i)*a;e.addPoint(w6(o,h))}return t<w3?o>0?w9(e,r,a,o):e.addPoint(w6(0,0)):(e.removePoint(e.points[e.points.length-1]),o>0&&w7(e,r,a,o)),1}function w6(e,t){return new wr(t8.generateUUID(),new t9(e,t))}function w8(e,t,i,r,a,o){let l=w6(e,t);return l.controls[0].position.set(i,r),l.controls[1].position.set(a,o),l}function w9(e,t,i,r){Se(e,t,i,r).forEach(t=>e.addPoint(t))}function w7(e,t,i,r){let a=Se(e,t,i,r),o=new wE;a.forEach(e=>o.addPoint(e)),o.isClosed=!0,e.shapeHoles.push(o)}function Se(e,t,i,r){let a=r*t/100,o=Math.abs(i)/Math.abs(t)*a,l=new t9(a/t,o/i),h=e.points.map(e=>{let t=e.clone();return t.uuid=t8.generateUUID(),t}).reverse();
vendor: 3,883 bytes, line 3135
3135return h.forEach(e=>{e.position.multiply(l);let t=e.controls[0].position.clone().multiply(l),i=e.controls[1].position.clone().multiply(l);e.controls[0].position.copy(i),e.controls[1].position.copy(t)}),h}var St=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,revolutions:2,segments:40,pathRadius:10,pathType:0,pathSegments:30,cornerRadius:30,cornerSegments:4},e.parameters),r=Math.abs(i.width),a=Math.abs(i.height??r),o=Math.abs(i.depth??r),l=Math.abs(Math.min(r,o))/2;return{parameters:Object.assign(i,{width:r,height:a,depth:o,radius:l,segments:Math.round(i.segments),pathSegments:Math.round(i.pathSegments),cornerSegments:Math.round(i.cornerSegments)})}}static build(e){let{width:t,height:i,depth:r,radius:a,revolutions:o,segments:l,pathRadius:h,pathType:c,pathSegments:d,cornerRadius:p,cornerSegments:f}=e.parameters;return Object.assign(new Sr(!1,t,i,r,a,o,l,h,c,d,p,f),{userData:{...e,type:"HelixGeometry"}})}},Si=new rk([0,0,0],1),Sr=class extends rQ{constructor(e=!0,t=1,i=1,r=1,a=1,o=1,l=1,h=1,c=1,d=1,p=1,f=1){if(super(),0===o)return;let m=e&&1===o;m&&(f=0),p>100&&(p=100),0===p&&(f=0);let g=()=>new iD,v=new iD,y=g(),x=g(),b=g(),w,S,_,A,M,C,E,T,P=g(),D=g(),O=g(),I=g(),R=g(),L=g(),B=g(),z=g(),F=i-2*h+.001,N=F/o,U=Math.ceil(l*o),k=U+1,V=F/U,j=-F/2,G=d+1,W=2*Math.PI/d,H=Math.PI/2/f,q=Math.min((1-p/100)*h,h-.01),X=h-q,Y=0,Q=2*f+2,Z=G*Q/2,K=Z+G*k,J=Math.max(0,G*(k+Q)),[$,ee,et]=[3,3,2].map(e=>Array(J*e).fill(0)),ei=[],er=a-h;function es(t,i){let r=Math.PI/2;T=2*Math.PI*((C=i*V)%N)/N+r,C+=j,E=Math.sin(T)*er,M=Math.cos(T)*er,e?t.set(M,E,C):t.set(M,C,E)}es(v,-1e-10),es(y,0),P.copy(v),es(v,1);let ea=v.distanceTo(y),en=m?0:X+q,eo=ea*U+2*en,el=eo-en;for(let t=0;t<=U;t++){es(x,t),z.subVectors(x,P).normalize(),P.copy(x),L.copy(x).setComponent(+e+1,0).normalize(),B.crossVectors(z,L).normalize();let i=0===t,r=t===U,a=i?3*Math.PI/2:H,o=i?q:el,l=i?G:K,c=i?0:J-G,p=z.clone().multiplyScalar(i?-X:X).add(x),g=z.clone().multiplyScalar(i?-1:1).normalize();for(let e=0;e<G;e++){let w=e*W;if(D.addVectors(v.copy(L).multiplyScalar(h*Math.cos(w)),y.copy(B).multiplyScalar(h*Math.sin(w))),O.copy(D).normalize(),i||r){m||(Y=c+e,[0,1,2].forEach(e=>{$[3*Y+e]=p.getComponent(e),ee[3*Y+e]=g.getComponent(e)}),et[2*Y]=+r,et[2*Y+1]=e/d),y.copy(O).multiplyScalar(q),b.addVectors(x,y);for(let t=0;t<f;t++){let r=t*H+a;I.addVectors(v.copy(z).multiplyScalar(X*Math.sin(r)),y.copy(O).multiplyScalar(X*Math.cos(r))),R.copy(I).normalize(),y.addVectors(b,I),I.normalize(),Y=l+t*G+e,[0,1,2].forEach(e=>{$[3*Y+e]=y.getComponent(e),ee[3*Y+e]=R.getComponent(e)});let h=+i+Math.sin(r);et[2*Y]=(o+X*h)/eo,et[2*Y+1]=e/d}}y.addVectors(x,D),Y=Z+t*G+e,[0,1,2].forEach(e=>{$[3*Y+e]=y.getComponent(e),ee[3*Y+e]=O.getComponent(e)}),et[2*Y]=(en+t*ea)/eo,et[2*Y+1]=e/d}}let eh=k+2*f+2,[ec,ed]=[+m,eh-1];for(let e=ec;e<=ed-1;e++){let t=m&&e===ed-1;for(let i=0;i<G-1;i++)S=(w=e*G+i)+1,_=(t?i:w)+G,A=(t?i+1:S)+G,0===e?ei.push(S,A,_):e===eh-2?ei.push(w,S,_):ei.push(w,S,_,S,A,_)}this.setIndex(ei),this.setAttribute("position",new rV($,3)),this.setAttribute("normal",new rV(ee,3)),this.setAttribute("uv",new rV(et,2))}getClosedTorusIndicesForBooleanOrSubdiv(){let e=this.userData.parameters,t=Math.ceil(e.tubularSegments),i=e.radialSegments+1,r=Array.from(this.getIndex().array),a,o,l,h,c=6*(t-1)*e.radialSegments,d=t==t;for(let p=0;p<e.radialSegments;p++)o=(a=t*i+p)+1,l=(d?p:a)+i,h=(d?p+1:o)+i,r[c++]=a,r[c++]=o,r[c++]=l,r[c++]=o,r[c++]=h,r[c++]=l;return r.length=c,Si.array=r,Si.count=r.length,Si}},Ss=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}
3135static build(e){let{width:t,height:i,depth:r,detail:a,corner:o,cornerSides:l}=e.parameters,h=0===a&&0!==o?new Sa(.5*t,o,l):new oG(.5*t,a);return h.scale(1,i/t,r/t),Object.assign(h,{userData:{...e,type:"IcosahedronGeometry"}})}},Sa=class extends b9{constructor(e=1,t=.2,i=4){let r=(1+Math.sqrt(5))/2,a="IcosahedronGeometry";super([-1,r,0,1,r,0,-1,-r,0,1,-r,0,0,-1,r,0,1,r,0,-1,-r,0,1,-r,r,0,-1,r,0,1,-r,0,-1,-r,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,e,t,i),this.type=a}static fromJSON(e){return new Sa(e.radius,e.corner,e.cornerSides)}},Sn=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){(e.parameters?.points??[]).forEach(e=>{Array.isArray(e)&&(e.x=e[0],e.y=e[1])});let i=Object.assign({},t?.parameters??{width:100,segments:64,verticalSegments:64,points:[{x:0,y:-50,id:0},{x:50,y:-50,id:1},{x:50,y:50,id:2},{x:0,y:50,id:3}]},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{points:t,segments:i,verticalSegments:r}=e.parameters,a=new o_;a.moveTo(t[0].x,t[0].y),a.bezierCurveTo(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y);let o=new oy(a.extractPoints(r).shape,i);return o.rotateZ(Math.PI),Object.assign(o,{userData:{...e,type:"LatheGeometry"}})}},So=new i6,Sl=new rw,Sh=new iD,Sc=class extends tX{constructor(){super(),this.uuid=t8.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}applyMatrix4(e){let t=new t7().getNormalMatrix(e);for(let t=0,i=this.vertices.length;t<i;t++)this.vertices[t].applyMatrix4(e);for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e];i.normal.applyMatrix3(t).normalize();for(let e=0,r=i.vertexNormals.length;e<r;e++)i.vertexNormals[e].applyMatrix3(t).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this}rotateX(e){return So.makeRotationX(e),this.applyMatrix4(So),this}rotateY(e){return So.makeRotationY(e),this.applyMatrix4(So),this}rotateZ(e){return So.makeRotationZ(e),this.applyMatrix4(So),this}translate(e,t,i){return So.makeTranslation(e,t,i),this.applyMatrix4(So),this}scale(e,t,i){return So.makeScale(e,t,i),this.applyMatrix4(So),this}lookAt(e){return Sl.lookAt(e),Sl.updateMatrix(),this.applyMatrix4(Sl.matrix),this}fromBufferGeometry(e){let t=this,i=null!==e.index?e.index:void 0,r=e.attributes;if(void 0===r.position)return this;let a=r.position,o=r.normal,l=r.color,h=r.uv,c=r.uv2;void 0!==c&&(this.faceVertexUvs[1]=[]);for(let e=0;e<a.count;e++)t.vertices.push(new iD().fromBufferAttribute(a,e)),void 0!==l&&t.colors.push(new iv().fromBufferAttribute(l,e));function d(e,i,r,a){let d=void 0===l?[]:[t.colors[e].clone(),t.colors[i].clone(),t.colors[r].clone()],p=void 0===o?[]:[new iD().fromBufferAttribute(o,e),new iD().fromBufferAttribute(o,i),new iD().fromBufferAttribute(o,r)],f=new Su(e,i,r,p,d,a);t.faces.push(f),void 0!==h&&t.faceVertexUvs[0].push([new t9().fromBufferAttribute(h,e),new t9().fromBufferAttribute(h,i),new t9().fromBufferAttribute(h,r)]),void 0!==c&&t.faceVertexUvs[1].push([new t9().fromBufferAttribute(c,e),new t9().fromBufferAttribute(c,i),new t9().fromBufferAttribute(c,r)])}let p=e.groups;if(p.length>0)for(let e=0;e<p.length;e++){let t=p[e],r=t.start,a=t.count;for(let e=r,o=r+a;e<o;e+=3)void 0!==i?d(i.getX(e),i.getX(e+1),i.getX(e+2),t.materialIndex):d(e,e+1,e+2,t.materialIndex)}else if(void 0!==i)for(let e=0;e<i.count;e+=3)d(i.getX(e),i.getX(e+1),i.getX(e+2));else for(let e=0;e<a.count;e+=3)d(e,e+1,e+2);
3135return this.computeFaceNormals(),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Sh).negate(),this.translate(Sh.x,Sh.y,Sh.z),this}normalize(){this.computeBoundingSphere();let e=this.boundingSphere.center,t=this.boundingSphere.radius,i=0===t?1:1/t,r=new i6;return r.set(i,0,0,-i*e.x,0,i,0,-i*e.y,0,0,i,-i*e.z,0,0,0,1),this.applyMatrix4(r),this}computeFaceNormals(){let e=new iD,t=new iD;for(let i=0,r=this.faces.length;i<r;i++){let r=this.faces[i],a=this.vertices[r.a],o=this.vertices[r.b],l=this.vertices[r.c];e.subVectors(l,o),t.subVectors(a,o),e.cross(t),e.normalize(),r.normal.copy(e)}}computeVertexNormals(e=!0){let t=Array(this.vertices.length);for(let e=0,i=this.vertices.length;e<i;e++)t[e]=new iD;if(e){let e=new iD,i=new iD;for(let r=0,a=this.faces.length;r<a;r++){let a=this.faces[r],o=this.vertices[a.a],l=this.vertices[a.b],h=this.vertices[a.c];e.subVectors(h,l),i.subVectors(o,l),e.cross(i),t[a.a].add(e),t[a.b].add(e),t[a.c].add(e)}}else{this.computeFaceNormals();for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e];t[i.a].add(i.normal),t[i.b].add(i.normal),t[i.c].add(i.normal)}}for(let e=0,i=this.vertices.length;e<i;e++)t[e].normalize();for(let e=0,i=this.faces.length;e<i;e++){let i=this.faces[e],r=i.vertexNormals;3===r.length?(r[0].copy(t[i.a]),r[1].copy(t[i.b]),r[2].copy(t[i.c])):(r[0]=t[i.a].clone(),r[1]=t[i.b].clone(),r[2]=t[i.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeFlatVertexNormals(){this.computeFaceNormals();for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e],i=t.vertexNormals;3===i.length?(i[0].copy(t.normal),i[1].copy(t.normal),i[2].copy(t.normal)):(i[0]=t.normal.clone(),i[1]=t.normal.clone(),i[2]=t.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeMorphNormals(){for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];
3135t.__originalFaceNormal?t.__originalFaceNormal.copy(t.normal):t.__originalFaceNormal=t.normal.clone(),t.__originalVertexNormals||(t.__originalVertexNormals=[]);for(let e=0,i=t.vertexNormals.length;e<i;e++)t.__originalVertexNormals[e]?t.__originalVertexNormals[e].copy(t.vertexNormals[e]):t.__originalVertexNormals[e]=t.vertexNormals[e].clone()}let e=new Sc;e.faces=this.faces;for(let t=0,i=this.morphTargets.length;t<i;t++){if(!this.morphNormals[t]){this.morphNormals[t]={},this.morphNormals[t].faceNormals=[],this.morphNormals[t].vertexNormals=[];let e=this.morphNormals[t].faceNormals,i=this.morphNormals[t].vertexNormals;for(let t=0,r=this.faces.length;t<r;t++){let t=new iD,r={a:new iD,b:new iD,c:new iD};e.push(t),i.push(r)}}let i=this.morphNormals[t];e.vertices=this.morphTargets[t].vertices,e.computeFaceNormals(),e.computeVertexNormals();for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e],r=i.faceNormals[e],a=i.vertexNormals[e];r.copy(t.normal),a.a.copy(t.vertexNormals[0]),a.b.copy(t.vertexNormals[1]),a.c.copy(t.vertexNormals[2])}}for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];
3135t.normal=t.__originalFaceNormal,t.vertexNormals=t.__originalVertexNormals}}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new iR),this.boundingBox.setFromPoints(this.vertices)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new iK),this.boundingSphere.setFromPoints(this.vertices)}merge(e,t,i=0){if(!(e&&e.isGeometry))return;let r,a=this.vertices.length,o=this.vertices,l=e.vertices,h=this.faces,c=e.faces,d=this.colors,p=e.colors;void 0!==t&&(r=new t7().getNormalMatrix(t));for(let e=0,i=l.length;e<i;e++){let i=l[e].clone();void 0!==t&&i.applyMatrix4(t),o.push(i)}for(let e=0,t=p.length;e<t;e++)d.push(p[e].clone());for(let e=0,t=c.length;e<t;e++){let t=c[e],o,l,d=t.vertexNormals,p=t.vertexColors,f=new Su(t.a+a,t.b+a,t.c+a);f.normal.copy(t.normal),void 0!==r&&f.normal.applyMatrix3(r).normalize();for(let e=0,t=d.length;e<t;e++)o=d[e].clone(),void 0!==r&&o.applyMatrix3(r).normalize(),f.vertexNormals.push(o);f.color.copy(t.color);for(let e=0,t=p.length;e<t;e++)l=p[e],f.vertexColors.push(l.clone());f.materialIndex=t.materialIndex+i,h.push(f)}for(let t=0,i=e.faceVertexUvs.length;t<i;t++){let i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){let r=i[e],a=[];for(let e=0,t=r.length;e<t;e++)a.push(r[e].clone());this.faceVertexUvs[t].push(a)}}}mergeMesh(e){e&&e.isMesh&&(e.matrixAutoUpdate&&e.updateMatrix(),this.merge(e.geometry,e.matrix))}mergeVertices(e=4){let t={},i=[],r=[],a=Math.pow(10,e);for(let e=0,o=this.vertices.length;e<o;e++){let o=this.vertices[e],l=Math.round(o.x*a)+"_"+Math.round(o.y*a)+"_"+Math.round(o.z*a);void 0===t[l]?(t[l]=e,i.push(this.vertices[e]),r[e]=i.length-1):r[e]=r[t[l]]}let o=[];for(let e=0,t=this.faces.length;e<t;e++){let t=this.faces[e];t.a=r[t.a],t.b=r[t.b],t.c=r[t.c];let i=[t.a,t.b,t.c];for(let t=0;t<3;t++)if(i[t]===i[(t+1)%3]){o.push(e);break}}for(let e=o.length-1;e>=0;e--){let t=o[e];this.faces.splice(t,1);for(let e=0,i=this.faceVertexUvs.length;e<i;e++)this.faceVertexUvs[e].splice(t,1)}let l=this.vertices.length-i.length;return this.vertices=i,l}setFromPoints(e){this.vertices=[];for(let t=0,i=e.length;t<i;t++){let i=e[t];this.vertices.push(new iD(i.x,i.y,i.z||0))}return this}sortFacesByMaterialIndex(){let e=this.faces,t=e.length;for(let i=0;i<t;i++)e[i]._id=i;e.sort(function(e,t){return e.materialIndex-t.materialIndex});let i=this.faceVertexUvs[0],r=this.faceVertexUvs[1],a,o;i&&i.length===t&&(a=[]),r&&r.length===t&&(o=[]);for(let l=0;l<t;l++){let t=e[l]._id;a&&a.push(i[t]),o&&o.push(r[t])}a&&(this.faceVertexUvs[0]=a),o&&(this.faceVertexUvs[1]=o)}toJSON(){let e={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(e.uuid=this.uuid,e.type=this.type,""!==this.name&&(e.name=this.name),void 0!==this.parameters){let t=this.parameters;for(let i in t)void 0!==t[i]&&(e[i]=t[i]);return e}let t=[];for(let e=0;e<this.vertices.length;e++){let i=this.vertices[e];t.push(i.x,i.y,i.z)}let i=[],r=[],a={},o=[],l={},h=[],c={};for(let e=0;e<this.faces.length;e++){let t=this.faces[e],r=void 0!==this.faceVertexUvs[0][e],a=t.normal.length()>0,o=t.vertexNormals.length>0,l=1!==t.color.r||1!==t.color.g||1!==t.color.b,h=t.vertexColors.length>0,c=0;if(c=d(0,0,0),c=d(c,1,!0),c=d(c,2,!1),c=d(c,3,r),c=d(c,4,a),c=d(c,5,o),c=d(c,6,l),c=d(c,7,h),i.push(c),i.push(t.a,t.b,t.c),i.push(t.materialIndex),r){let t=this.faceVertexUvs[0][e];i.push(m(t[0]),m(t[1]),m(t[2]))}if(a&&i.push(p(t.normal)),o){let e=t.vertexNormals;i.push(p(e[0]),p(e[1]),p(e[2]))}if(l&&i.push(f(t.color)),h){let e=t.vertexColors;i.push(f(e[0]),f(e[1]),f(e[2]))}}function d(e,t,i){return i?e|1<<t:e&~(1<<t)}function p(e){let t=e.x.toString()+e.y.toString()+e.z.toString();return void 0!==a[t]||(a[t]=r.length/3,r.push(e.x,e.y,e.z)),a[t]}function f(e){let t=e.r.toString()+e.g.toString()+e.b.toString();return void 0!==l[t]||(l[t]=o.length,o.push(e.getHex())),l[t]}function m(e){let t=e.x.toString()+e.y.toString();return void 0!==c[t]||(c[t]=h.length/2,h.push(e.x,e.y)),c[t]}return e.data={},e.data.vertices=t,e.data.normals=r,o.length>0&&(e.data.colors=o),h.length>0&&(e.data.uvs=[h]),e.data.faces=i,e}clone(){return new Sc().copy(this)}copy(e){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=e.name;let t=e.vertices;for(let e=0,i=t.length;e<i;e++)this.vertices.push(t[e].clone());let i=e.colors;for(let e=0,t=i.length;e<t;e++)this.colors.push(i[e].clone());let r=e.faces;for(let e=0,t=r.length;e<t;e++)this.faces.push(r[e].clone());for(let t=0,i=e.faceVertexUvs.length;t<i;t++){let i=e.faceVertexUvs[t];void 0===this.faceVertexUvs[t]&&(this.faceVertexUvs[t]=[]);for(let e=0,r=i.length;e<r;e++){let r=i[e],a=[];for(let e=0,t=r.length;e<t;e++){let t=r[e];a.push(t.clone())}this.faceVertexUvs[t].push(a)}}let a=e.morphTargets;for(let e=0,t=a.length;e<t;e++){let t={};if(t.name=a[e].name,void 0!==a[e].vertices){t.vertices=[];for(let i=0,r=a[e].vertices.length;i<r;i++)t.vertices.push(a[e].vertices[i].clone())}if(void 0!==a[e].normals){t.normals=[];for(let i=0,r=a[e].normals.length;i<r;i++)t.normals.push(a[e].normals[i].clone())}this.morphTargets.push(t)}let o=e.morphNormals;for(let e=0,t=o.length;e<t;e++){let t={};if(void 0!==o[e].vertexNormals){t.vertexNormals=[];for(let i=0,r=o[e].vertexNormals.length;i<r;i++){let r=o[e].vertexNormals[i],a={};a.a=r.a.clone(),a.b=r.b.clone(),a.c=r.c.clone(),t.vertexNormals.push(a)}}if(void 0!==o[e].faceNormals){t.faceNormals=[];for(let i=0,r=o[e].faceNormals.length;i<r;i++)t.faceNormals.push(o[e].faceNormals[i].clone())}this.morphNormals.push(t)}let l=e.skinWeights;for(let e=0,t=l.length;e<t;e++)this.skinWeights.push(l[e].clone());let h=e.skinIndices;for(let e=0,t=h.length;e<t;e++)this.skinIndices.push(h[e].clone());let c=e.lineDistances;for(let e=0,t=c.length;e<t;e++)this.lineDistances.push(c[e]);let d=e.boundingBox;null!==d&&(this.boundingBox=d.clone());let p=e.boundingSphere;return null!==p&&(this.boundingSphere=p.clone()),this.elementsNeedUpdate=e.elementsNeedUpdate,this.verticesNeedUpdate=e.verticesNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.lineDistancesNeedUpdate=e.lineDistancesNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,this}toBufferGeometry(){let e=new Sd().fromGeometry(this),t=new rQ,i=new Float32Array(3*e.vertices.length);if(t.setAttribute("position",Sg.call(new rN(i,3),e.vertices)),e.normals.length>0){let i=new Float32Array(3*e.normals.length);t.setAttribute("normal",Sg.call(new rN(i,3),e.normals))}if(e.colors.length>0){let i=new Float32Array(3*e.colors.length);t.setAttribute("color",Sf.call(new rN(i,3),e.colors))}if(e.uvs.length>0){let i=new Float32Array(2*e.uvs.length);t.setAttribute("uv",Sm.call(new rN(i,2),e.uvs))}if(e.uvs2.length>0){let i=new Float32Array(2*e.uvs2.length);t.setAttribute("uv2",Sm.call(new rN(i,2),e.uvs2))}for(let i in t.groups=e.groups,e.morphTargets){let r=[],a=e.morphTargets[i];for(let e=0,t=a.length;e<t;e++){let t=a[e],i=new rV(3*t.data.length,3);i.name=t.name,r.push(Sg.call(i,t.data))}t.morphAttributes[i]=r}if(e.skinIndices.length>0){let i=new rV(4*e.skinIndices.length,4);t.setAttribute("skinIndex",Sv.call(i,e.skinIndices))}if(e.skinWeights.length>0){let i=new rV(4*e.skinWeights.length,4);t.setAttribute("skinWeight",Sv.call(i,e.skinWeights))}
3135return null!==e.boundingSphere&&(t.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(t.boundingBox=e.boundingBox.clone()),t}computeTangents(){}computeLineDistances(){}applyMatrix(e){return this.applyMatrix4(e)}dispose(){this.dispatchEvent({type:"dispose"})}static createBufferGeometryFromObject(e){let t=new rQ,i=e.geometry;if(e.isPoints||e.isLine){let e=new rV(3*i.vertices.length,3),r=new rV(3*i.colors.length,3);if(t.setAttribute("position",Sg.call(e,i.vertices)),t.setAttribute("color",Sf.call(r,i.colors)),i.lineDistances&&i.lineDistances.length===i.vertices.length){let e=new rV(i.lineDistances.length,1);t.setAttribute("lineDistance",Sp.call(e,i.lineDistances))}null!==i.boundingSphere&&(t.boundingSphere=i.boundingSphere.clone()),null!==i.boundingBox&&(t.boundingBox=i.boundingBox.clone())}else e.isMesh&&(t=i.toBufferGeometry());return t}};Sc.prototype.isGeometry=!0;var Sd=class{constructor(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}computeGroups(e){let t=[],i,r,a,o=e.faces;for(r=0;r<o.length;r++){let e=o[r];e.materialIndex!==a&&(a=e.materialIndex,void 0!==i&&(i.count=3*r-i.start,t.push(i)),i={start:3*r,materialIndex:a})}void 0!==i&&(i.count=3*r-i.start,t.push(i)),this.groups=t}fromGeometry(e){let t=e.faces,i=e.vertices,r=e.faceVertexUvs,a=r[0]&&r[0].length>0,o=r[1]&&r[1].length>0,l=e.morphTargets,h=l.length,c;if(h>0){c=[];for(let e=0;e<h;e++)c[e]={name:l[e].name,data:[]};this.morphTargets.position=c}let d=e.morphNormals,p=d.length,f;if(p>0){f=[];for(let e=0;e<p;e++)f[e]={name:d[e].name,data:[]};this.morphTargets.normal=f}let m=e.skinIndices,g=e.skinWeights,v=m.length===i.length,y=g.length===i.length;i.length>0&&t.length;for(let e=0;e<t.length;e++){let x=t[e];this.vertices.push(i[x.a],i[x.b],i[x.c]);let b=x.vertexNormals;if(3===b.length)this.normals.push(b[0],b[1],b[2]);else{let e=x.normal;this.normals.push(e,e,e)}let w=x.vertexColors;if(3===w.length)this.colors.push(w[0],w[1],w[2]);else{let e=x.color;this.colors.push(e,e,e)}if(!0===a){let t=r[0][e];void 0!==t?this.uvs.push(t[0],t[1],t[2]):this.uvs.push(new t9,new t9,new t9)}if(!0===o){let t=r[1][e];void 0!==t?this.uvs2.push(t[0],t[1],t[2]):this.uvs2.push(new t9,new t9,new t9)}for(let e=0;e<h;e++){let t=l[e].vertices;c[e].data.push(t[x.a],t[x.b],t[x.c])}for(let t=0;t<p;t++){let i=d[t].vertexNormals[e];f[t].data.push(i.a,i.b,i.c)}v&&this.skinIndices.push(m[x.a],m[x.b],m[x.c]),y&&this.skinWeights.push(g[x.a],g[x.b],g[x.c])}return this.computeGroups(e),this.verticesNeedUpdate=e.verticesNeedUpdate,this.normalsNeedUpdate=e.normalsNeedUpdate,this.colorsNeedUpdate=e.colorsNeedUpdate,this.uvsNeedUpdate=e.uvsNeedUpdate,this.groupsNeedUpdate=e.groupsNeedUpdate,null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),this}},Su=class{constructor(e,t,i,r,a,o=0){this.a=e,this.b=t,this.c=i,this.normal=r&&r.isVector3?r:new iD,this.vertexNormals=Array.isArray(r)?r:[],this.color=a&&a.isColor?a:new iv,this.vertexColors=Array.isArray(a)?a:[],this.materialIndex=o}clone(){return new this.constructor().copy(this)}copy(e){this.a=e.a,this.b=e.b,this.c=e.c,this.normal.copy(e.normal),this.color.copy(e.color),this.materialIndex=e.materialIndex;for(let t=0,i=e.vertexNormals.length;t<i;t++)this.vertexNormals[t]=e.vertexNormals[t].clone();for(let t=0,i=e.vertexColors.length;t<i;t++)this.vertexColors[t]=e.vertexColors[t].clone();return this}};function Sp(e){return this.array.set(e),this}function Sf(e){let t=this.array,i=0;for(let r=0,a=e.length;r<a;r++){let a=e[r];void 0===a&&(a=new iv),t[i++]=a.r,t[i++]=a.g,t[i++]=a.b}return this}function Sm(e){let t=this.array,i=0;for(let r=0,a=e.length;r<a;r++){let a=e[r];void 0===a&&(a=new t9),t[i++]=a.x,t[i++]=a.y}return this}function Sg(e){let t=this.array,i=0;for(let r=0,a=e.length;r<a;r++){let a=e[r];void 0===a&&(a=new iD),t[i++]=a.x,t[i++]=a.y,t[i++]=a.z}return this}function Sv(e){let t=this.array,i=0;for(let r=0,a=e.length;r<a;r++){let a=e[r];void 0===a&&(a=new iA),t[i++]=a.x,t[i++]=a.y,t[i++]=a.z,t[i++]=a.w}return this}var Sy=["a","b","c"];function Sx(e,t,i){let r=Math.min(e,t),a=Math.max(e,t);return i.get(r+"_"+a)}function Sb(e,t,i,r,a,o){let l=Math.min(e,t),h=Math.max(e,t),c=l+"_"+h,d;r.has(c)?d=r.get(c):(d={a:i[l],b:i[h],newEdge:null,faces:[]},r.set(c,d)),d.faces.push(a),o[e].edges.push(d),o[t].edges.push(d)}function Sw(e,t,i,r,a){e.push(new Su(t,i,r,void 0,void 0,a))}function SS(e,t){return Math.abs(t-e)/2+Math.min(e,t)}function S_(e,t,i,r){e.push([t.clone(),i.clone(),r.clone()])}var SA=class{constructor(e=1){this.subdivisions=e}modify(e){(e=e instanceof rQ?new Sc().fromBufferGeometry(e):e.clone()).mergeVertices();let t=this.subdivisions;for(;t-- >0;)this._smooth(e);return e.computeFaceNormals(),e.computeVertexNormals(),e}_smooth(e){let t,i,r,a=new iD,o,l,h,c,d,p=e.vertices,f=e.faces,m=e.faceVertexUvs[0],g=void 0!==m&&m.length>0,v=[],y=new Map;for(t=0,i=p.length;t<i;t++)v[t]={edges:[]};for(t=0,i=f.length;t<i;t++)Sb((r=f[t]).a,r.b,p,y,r,v),Sb(r.b,r.c,p,y,r,v),Sb(r.c,r.a,p,y,r,v);let x=[],b,w,S,_,A,M,C;for(let e of Array.from(y.keys())){for(w=y.get(e),S=new iD,A=3/8,M=1/8,2!=(C=w.faces.length)&&(A=.5,M=0),S.addVectors(w.a,w.b).multiplyScalar(A),a.set(0,0,0),c=0;c<C;c++){for(_=w.faces[c],d=0;d<3&&((b=p[function(e,t){switch(t){case"c":return e.c;case"b":return e.b;default:return e.a}}(_,Sy[d])])===w.a||b===w.b);d++);b&&a.add(b)}a.multiplyScalar(M),S.add(a),w.newEdge=x.length,x.push(S)}let E,T,P,D,O,I,R,L=[];for(l=0,h=p.length;l<h;l++){for(I=p[l],3==(o=(O=v[l].edges).length)?E=3/16:o>3&&(E=3/(8*o)),T=1-o*Number(E),P=E,o<=2&&2==o&&(T=3/4,P=1/8),R=I.clone().multiplyScalar(T),a.set(0,0,0),c=0;c<o;c++)b=(D=O[c]).a!==I?D.a:D.b,a.add(b);a.multiplyScalar(Number(P)),R.add(a),L.push(R)}let B=L.concat(x),z=L.length,F,N,U,k=[],V=[],j,G,W,H,q=new t9,X=new t9,Y=new t9;for(l=0,h=f.length;l<h;l++)F=Number(Sx((_=f[l]).a,_.b,y).newEdge)+z,Sw(k,F,N=Number(Sx(_.b,_.c,y).newEdge)+z,U=Number(Sx(_.c,_.a,y).newEdge)+z,_.materialIndex),Sw(k,_.a,F,U,_.materialIndex),Sw(k,_.b,N,F,_.materialIndex),Sw(k,_.c,U,N,_.materialIndex),g&&(G=(j=m[l])[0],W=j[1],H=j[2],q.set(SS(G.x,W.x),SS(G.y,W.y)),X.set(SS(W.x,H.x),SS(W.y,H.y)),Y.set(SS(G.x,H.x),SS(G.y,H.y)),S_(V,q,X,Y),S_(V,G,q,Y),S_(V,W,X,q),S_(V,H,Y,X));e.vertices=B,e.faces=k,g&&(e.faceVertexUvs[0]=V)}},SM=new iD,SC=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=e.geometry??t?.geometry??new rQ().copy(new st(100,100,100)),r;void 0===t?(i.computeBoundingBox(),i.boundingBox.getSize(SM),r={width:SM.x,height:SM.y,depth:SM.z,subdivisions:0}):r=t.parameters;let a={...r,...e.parameters};return{parameters:{width:Math.abs(a.width),height:Math.abs(a.height),depth:Math.abs(a.depth),subdivisions:Math.abs(a.subdivisions)},geometry:i}}static build(e){var t;let i,r,{width:a,height:o,depth:l,subdivisions:h}=e.parameters,c=e.geometry??new rQ().copy(new st(100,100,100)),d=c.userData.parameters;void 0===d?(c.boundingBox=(t=c,i=new iR,(r=t.attributes.position)?i.setFromBufferAttribute(r):i.makeEmpty(),i),c.boundingBox.getSize(SM)):SM.set(d.width,d.height,d.depth),(a!==SM.x||o!==SM.y||l!==SM.z)&&c.scale(0===SM.x?1:a/SM.x,
vendor: 9,865 bytes, line 3135
31350===SM.y?1:o/SM.y,0===SM.z?1:l/SM.z);let p=c.originalGeometry;try{h>0?(void 0===p||d?.subdivisions!==h)&&(void 0===p&&(p=c),c=new SA(h).modify(p).toBufferGeometry()):(void 0!==p&&(c=p),p=void 0,void 0===c.getAttribute("normal")&&c.computeVertexNormals())}catch{void 0!==p&&(c=p),p=void 0,void 0===c.getAttribute("normal")&&c.computeVertexNormals()}return void 0!==p&&Object.assign(c,{originalGeometry:p}),delete e.geometry,Object.assign(c,{userData:{...e,type:"NonParametricGeometry"}})}static loadFromUrl(e,t,i){new lE(i).load(e,e=>{let i=this.normalizeInputs({geometry:e});e.boundingBox.getSize(SM);let r=100/SM.x;Object.assign(i.parameters,{width:100,height:SM.y*r,depth:SM.z*r}),t(this.build(i))})}},SE=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters);return{shape:e.shape&&e.shape instanceof wE?e.shape:new wE,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i,spikes:r,cornerRadius:a,depth:o,extrudeBevelSize:l,extrudeBevelSegments:h}=e.parameters,c=e.shape,d=.5*t,p=.5*i,f=2*Math.PI/r;for(let e=0;e<r;e++){let t=f*e,i=0+Math.sin(t)*d,r=0+Math.cos(t)*p;c.addPoint(c.createPoint(i,r))}c.isClosed=!0;for(let e=0,t=c.points.length;e<t;e++)c.points[e].roundness=a;return c.roundness=a,c.update(),Object.assign(w2.create({shape:c,parameters:{roundness:a,depth:o,extrudeBevelSize:l,extrudeBevelSegments:h}}),{userData:{...e,type:"PolygonGeometry"}})}},ST=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:4,heightSegments:1,cornerRadius:0,cornerSegments:8,openEnded:!1},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,radialSegments:a,heightSegments:o,openEnded:l,cornerRadius:h,cornerSegments:c}=e.parameters,d=new SO(.5*t,i,a,o,l,h,c);return d.scale(1,1,r/t),Object.assign(d,{userData:{...e,type:"PyramidGeometry"}})}};function SP(e,t,i){i.x=e.x*t.x,i.y=e.y,i.z=e.x*t.y}function SD(e,t,i,r,a,o){let l=t.clone().sub(e),h=i.clone().sub(e),c=l.angleTo(h);if(l.normalize(),h.normalize(),r===a){let t=l.add(h).normalize();o.copy(e).addScaledVector(t,r/Math.sin(c/2))}else{let t=l.angleTo(h);o.copy(e),o.addScaledVector(l,a/Math.sin(t)),o.addScaledVector(h,r/Math.sin(t))}}var SO=class extends rQ{constructor(e=.5,t=1,i=4,r=1,a=!1,o=0,l=4){let h;super(),i=Math.floor(Math.max(3,i)),r=Math.floor(r),l=Math.floor(l);let c=[],d=[],p=[],f=[],m=0,g=t/2,v=Math.PI/i,y=e*Math.cos(Math.PI/i),x=2*Math.PI/i,b=Math.PI-(i-2)*Math.PI/i,w=new iD(0,-g,0),S=new iD(0,g,0),_=new t9(e,-g),A=new t9(y,-g),M=new t9(0,S.y).sub(A),C=new t9(0,S.y).sub(_),E=new t9(M.y,-M.x).normalize(),T=new t9(C.y,-C.x).normalize(),P=e*Math.cos(Math.PI/i)*Math.tan((Math.PI-M.angle())/2)-1e-8;o=Math.min(o,P);{let e=new iD(E.x,E.y,0),t=new iD(Math.cos(x)*e.x,e.y,Math.sin(x)*e.x);h=e.angleTo(t)}let D=o/Math.tan((Math.PI-M.angle())/2),O=o/Math.tan((Math.PI-h)/2),I=new iD;if(!a){d.push(w.x,w.y,w.z),p.push(0,-1,0),f.push(0,0);let e=m++,t=[],r=_.clone(),a=D/Math.cos(Math.PI/i);r.x-=a;for(let e=0;e<i;e++){let a=e/i*Math.PI*2+v;SP(r,new t9(Math.sin(a),Math.cos(a)),I),d.push(I.x,I.y,I.z),p.push(0,-1,0),f.push(0,0),t.push(m++)}for(let i=0;i<t.length;i++)c.push(t[i],e,t[(i+1)%t.length])}let R=[];{let e=new iD,t=new iD,r=new iD,a=new iD,g=new iD,y=new iD;for(let x=0;x<i;x++){let A=x/i*Math.PI*2+v,P=(x+.5)/i*Math.PI*2+v,I=(x+1)/i*Math.PI*2+v,B=new t9(Math.sin(A),Math.cos(A)),z=new t9(Math.sin(P),Math.cos(P)),F=new t9(Math.sin(I),Math.cos(I));SP(_,B,t),SP(_,F,r),SP(E,z,e),SD(S,t,r,O,O,a),d.push(a.x,a.y,a.z),SD(t,S,r,O,D,g),d.push(g.x,g.y,g.z),SD(r,t,S,D,O,y),d.push(y.x,y.y,y.z),p.push(e.x,e.y,e.z),p.push(e.x,e.y,e.z),p.push(e.x,e.y,e.z),f.push(0,0),f.push(0,0),f.push(0,0);let N=m++,U=m++,k=m++;if(c.push(N,U,k),o>0){let v,x;{let e=t.clone().add(r).multiplyScalar(.5),i=S.clone().sub(e).normalize(),a=w.clone().sub(e).normalize().add(i).normalize().multiplyScalar(-1);L(e,y.clone().sub(g),a,M.angle())}{let e=new iD;SP(T,F,e);let t=y.clone().add(a).multiplyScalar(.5);t=function(e,t,i){let r=e.clone().sub(t),a=i.clone().sub(t);return r.projectOnVector(a),r.add(t)}(t,r,S);let i=y.clone().sub(a);[v,x]=L(t,i,e,h,a.y)}{let e=v,t=e.clone().setY(0).normalize(),i=new iD(0,-1,0),r=t.clone().cross(i);!function(e,t,i,r){let a=Math.PI/2,h=C.angle()-a,g=[],v=new iD,y=new iD;for(let c=0;c<=l;c++){let x=[],w=c/l;for(let l=0;l<=c;l++){let g=((c?l/c:0)-.5)*b,S=Math.cos(g),_=Math.sin(g),A=(a+Math.atan(Math.tan(h)*S))*w,M=Math.cos(A),C=Math.sin(A);v.set(0,0,0),v.addScaledVector(t,C*S),v.addScaledVector(i,M),v.addScaledVector(r,C*_),y.copy(e).addScaledVector(v,o),d.push(y.x,y.y,y.z),p.push(v.x,v.y,v.z),f.push(0,0),x.push(m++)}g.push(x)}let x=g.length-1;for(let e=0;e<x;e++){let t=g[e],i=g[e+1],r=t.length-1;c.push(t[0],i[1],i[0]);for(let e=1;e<=r;e++)c.push(t[e-1],t[e],i[e]),c.push(t[e],i[e+1],i[e])}}(e,t,i,r)}R.concat(x);{let t=M.angle(),r=Math.PI-t,a=S.clone();a.y-=o/Math.sin(t-Math.PI/2);let h=new iD,g=[];for(let t=0;t<l;t++){let c=[],v=Math.PI/2-r*t/l,y=Math.cos(v),x=Math.sin(v),b=P;for(let r=0;r<=t;r++){let r=Math.cos(b);e.x=y*Math.sin(b),e.y=x,e.z=y*r,h.copy(a).addScaledVector(e,o),d.push(h.x,h.y,h.z),p.push(e.x,e.y,e.z),f.push(0,0),c.push(m++),b+=2*Math.PI/t/i}g.push(c)}x.reverse(),g.push(x);let v=g.length-1;for(let e=0;e<v;e++){let t=g[e],i=g[e+1],r=t.length-1;c.push(i[1],t[0],i[0]);for(let e=1;e<=r;e++)c.push(t[e],t[e-1],i[e]),c.push(i[e+1],t[e],i[e])}}}}}function L(e,t,i,r,a){let h=-r/2,g=(Math.PI-r)/2,v=t.clone().normalize().cross(i);e.addScaledVector(i,-o/Math.sin(g));let y=new iD,x=new iD,b=m,w=[];for(let c=0;c<=l;c++){let g=h+c/l*r;x.set(0,0,0),x.addScaledVector(v,Math.sin(g)),x.addScaledVector(i,Math.cos(g));for(let i=0;i<=1;i++){let r=i/1-.5;if(y.copy(e),y.addScaledVector(t,r),y.addScaledVector(x,o),null!=a){let e=Math.max(0,y.y-a);y.addScaledVector(t,-e/t.y)}d.push(y.x,y.y,y.z),p.push(x.x,x.y,x.z),f.push(0,0),0===i&&w.push(m),m++}}for(let e=0;e<l;e++)for(let t=0;t<1;t++){let i=b+t+2*e,r=i+2,a=r+1,o=i+1;c.push(i,r,o),c.push(r,a,o)}return[e.clone().addScaledVector(t,.5),w]}this.setIndex(c),this.setAttribute("position",new rV(d,3)),this.setAttribute("normal",new rV(p,3)),this.setAttribute("uv",new rV(f,2))}},SI=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,cornerRadius:[0,0,0,0],cornerType:1,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters),r=Object.assign(t?.ui??{enabledIndieCorners:!1},e.ui);return{shape:e.shape&&e.shape instanceof wE?e.shape:new wE,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)}),ui:r}}static build(e){let t=e.shape,{width:i,height:r,cornerRadius:a,cornerType:o,depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}=e.parameters,d={x:.5*i,y:.5*r},p={x:-d.x,y:-d.y},f={x:d.x,y:d.y};function m(e,t,a){return t>i&&a>r?Math.min(e*i/t,e*r/a):t>i?e*i/t:a>r?e*r/a:e}let g=[];g[0]=0===a[0]?0:m(a[0],a[0]+a[3],a[0]+a[1]),g[1]=0===a[1]?0:m(a[1],a[1]+a[2],a[1]+a[0]),g[2]=0===a[2]?0:m(a[2],a[2]+a[1],a[2]+a[3]),g[3]=0===a[3]?0:m(a[3],a[3]+a[0],a[3]+a[2]);let v=p.x,y=f.x,x=f.y,b=p.y;t.addPoint(t.createPoint(v,x)),t.addPoint(t.createPoint(y,x)),t.addPoint(t.createPoint(y,b)),t.addPoint(t.createPoint(v,b)),t.isClosed=!0;let w=!0;for(let e=0,i=t.points.length;e<i;e++)t.points[e].roundness=g[e],e>0&&g[e]!==g[e-1]&&(w=!1);return w&&(t.roundness=g[0]),t.useCubicForRoundedCorners=1!==o,t.update(),Object.assign(w2.create({shape:t,parameters:{depth:l,extrudeBevelSize:h,extrudeBevelSegments:c}}),{userData:{...e,type:"RectangleGeometry"}})}},SR=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:180},e.parameters);return i.thetaLength=t8.clamp(i.thetaLength,0,180),{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t=100,height:i=t,depth:r=t,widthSegments:a=64,heightSegments:o=64,phiStart:l,phiLength:h,thetaStart:c,thetaLength:d}=e.parameters,p;return 0===d?(p=new rQ).setAttribute("position",new rV([],3)):p=new oW(.5*t,a,o,l,h,c,d*t8.DEG2RAD),p.scale(1,i/t,r/t),Object.assign(p,{userData:{...e,type:"SphereGeometry"}})}},SL=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,widthSegments:8,heightSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:0})}}static build(e){let{width:t=100,height:i=t,widthSegments:r=8,heightSegments:a=8}=e.parameters,o=new sS(t,i,r,a);return o.scale(1,1,1),Object.assign(o,{userData:{...e,type:"PlaneGeometry"}})}},SB=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,angle:90,cornerRadius:24,cornerSegments:8},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width)})}}static build(e){let{width:t,height:i,depth:r,angle:a,cornerRadius:o,cornerSegments:l}=e.parameters;return Object.assign(new Sz(t,i,r,a,o,l),{userData:{...e,type:"BackdropGeometry"}})}},Sz=class extends rQ{constructor(e=1,t=1,i=1,r=90,a=10,o=24){super(),this.type="BackdropGeometry";let l=[],h=[],c=[];
31350==a&&(o=1),o=Math.max(1,Math.floor(o)),a=Math.min(a,100),r=Math.PI/180*Math.min(179.999,r);let d=[],p=Math.PI/2,f=(e=0,t=0,i=0)=>new iD(e,t,i),m=f(),g=f(),[v,y,x]=[t/2,e/2,i/2],b=-y,w=+y,[S,_,A]=[f(b,-v,+x),f(b,-v,-x),f(b,+v,-x)],M=(e,t=!1)=>Math.sin(e-Math.PI/(1+ +t)),C=(e,t=!1)=>Math.cos(e-Math.PI/(1+ +t));A.y=Math.sin(r)*t-v;let E=Math.cos(r)*t-x,T=S.z-.001;r<=p?(A.z=Math.min(E,T),A.z==T&&(A.y-=(E-T)/Math.tan(p-r))):_.z=Math.min(_.z-E-x,S.z-.001),m.subVectors(S,_),g.subVectors(A,_);let P=Math.min(m.length(),g.length())*a/100,D=P*Math.tan(r/2),O=P/Math.cos(r/2),I=m.clone().normalize().add(g.normalize()).setLength(O).add(_);m.set(0,M(r,!0),C(r,!0)),d.push([A,m.clone()]);let R=(Math.PI-r)/o;for(let e=0;e<=o;e++){let t=p+r+e*R;m.set(0,Math.sin(t)*D,Math.cos(t)*D),m.add(I),g.set(0,M(t),C(t)),d.push([m.clone(),g.clone()])}d.push([S,f(0,1,0)]);let L=Math.sin(R/2)*D*2,B=d.length-1,z=d[0][0].distanceTo(d[1][0]),F=z+L*o+d[B-1][0].distanceTo(d[B][0]);d[0].push(1);for(let e=0;e<=o;e++)d[e+1].push(1-(z+e*L)/F);d[B].push(0);let[N,U,k]=d[0],V,j,G;for(let e=1;e<d.length;e++)[V,j,G]=d[e],l.push(b,N.y,N.z,b,V.y,V.z,w,N.y,N.z,w,N.y,N.z,b,V.y,V.z,w,V.y,V.z),h.push(0,U.y,U.z,0,j.y,j.z,0,U.y,U.z,0,U.y,U.z,0,j.y,j.z,0,j.y,j.z),c.push(0,k,0,G,1,k,1,k,0,G,1,G),[N,U,k]=[V,j,G];this.setAttribute("position",new rV(l,3)),this.setAttribute("normal",new rV(h,3)),this.setAttribute("uv",new rV(c,2))}},SF=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,innerRadiusPercent:38.19,spikes:5,cornerRadius:0,angle:360,extrudeBevelSize:0,extrudeBevelSegments:1},e.parameters);return{shape:e.shape&&e.shape instanceof wE?e.shape:new wE,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i,innerRadiusPercent:r,spikes:a,cornerRadius:o,angle:l,depth:h,extrudeBevelSize:c,extrudeBevelSegments:d}=e.parameters,p=e.shape,f=.5*t,m=.5*i,g=l*Math.PI/360/a,v=-(Math.PI/2*3),y=f*r/100,x=m*r/100;if(3===a&&50===r){g=2*Math.PI/a;for(let e=0;e<a;e++){let t=g*e,i=0+Math.sin(t)*f,r=0+Math.cos(t)*m;p.addPoint(p.createPoint(i,r))}}else for(let e=0;e<a;e++){let e=0+Math.cos(v)*f,t=0+Math.sin(v)*m;p.addPoint(p.createPoint(e,t)),v+=g,e=0+Math.cos(v)*y,t=0+Math.sin(v)*x,p.addPoint(p.createPoint(e,t)),v+=g}p.isClosed=!0;for(let e=0,t=p.points.length;e<t;e++)p.points[e].roundness=o;return p.roundness=o,p.update(),Object.assign(w2.create({shape:p,parameters:{roundness:o,depth:h,extrudeBevelSize:c,extrudeBevelSegments:d}}),{userData:{...e,type:"StarGeometry"}})}},SN=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t,height:i}=e.parameters;return Object.assign(new sS(t,i),{userData:{...e,type:"TextFrameGeometry"}})}},SU=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,radialSegments:32,tubularSegments:64,arc:360,cornerRadius:30,cornerSegments:8},e.parameters),r=Math.abs(i.width),a=Math.abs(i.height??i.width);i.shapeBlendNode&&(a=r);let o=Math.round(Math.abs(i.depth??.25*i.width));return{parameters:Object.assign(i,{width:r,height:a,depth:o})}}static build(e){let{width:t,height:i,depth:r,radialSegments:a,tubularSegments:o,arc:l,cornerRadius:h,cornerSegments:c}=e.parameters,d=function(e,t,i,r,a,o,l,h,c,d){[t,i]=[i,t],l=t/2;let p=t8.clamp(a/360,0,1);if(0===p){let e=new rQ;return e.setAttribute("position",new rV([],3)),e}return 1===p&&(c=0),new Sr(!0,e,t,i,r,p,o,l,0,h,c,d)}(t,i,r,.5*t,l,o,0,a,h,c);return d.scale(1,i/t,1),Object.assign(d,{userData:{...e,type:"TorusGeometry"}})}},Sk=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,tubularSegments:64,radialSegments:32,p:2,q:3},e.parameters);return{parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width),depth:Math.abs(i.depth??i.width),tube:i.tube??.125*i.width})}}static build(e){let{width:t,tube:i,tubularSegments:r,radialSegments:a,p:o,q:l}=e.parameters,h=.5*t;
vendor: 11,591 bytes, lines 3135-3136
3135return h!==i&&(h-=i),Object.assign(new oq(h,i,r,a,o,l),{userData:{...e,type:"TorusKnotGeometry"}})}},SV=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1,isRect:!1},e.parameters);return{shape:e.shape&&e.shape instanceof wE?e.shape:new wE,parameters:Object.assign(i,{width:Math.abs(i.width),height:Math.abs(i.height??i.width*(i.isRect?1:Math.sqrt(3)/2)),depth:Math.abs(i.depth??0)})}}static build(e){let{width:t=100,height:i,cornerRadius:r,depth:a,extrudeBevelSize:o,extrudeBevelSegments:l,isRect:h}=e.parameters,c=e.shape,d=.5*t,p=.5*i;h?c.addPoint(c.createPoint(-d,p)):c.addPoint(c.createPoint(0,p)),c.addPoint(c.createPoint(d,-p)),c.addPoint(c.createPoint(-d,-p)),c.isClosed=!0;for(let e=0,t=c.points.length;e<t;e++)c.points[e].roundness=r;return c.roundness=r,c.update(),Object.assign(w2.create({shape:c,parameters:{roundness:r,depth:a,extrudeBevelSize:o,extrudeBevelSegments:l}}),{userData:{...e,type:"TriangleGeometry"}})}},Sj=function(e){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(e,t,i,r)=>String(t+t+i+i+r+r));let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null},SG=class{add(e,t,i){if("string"!=typeof arguments[0])for(let e in arguments[0])this.add(e,arguments[0][e],arguments[1]);else(Array.isArray(e)?e:[e]).forEach(function(e){this[e]=this[e]||[],t&&this[e][i?"unshift":"push"](t)},this)}run(e,t){this[e]=this[e]||[],this[e].forEach(function(e){e.call(t&&t.context?t.context:t,t)})}},SW=class{constructor(e){this.jsep=e,this.registered={}}register(...e){e.forEach(e=>{if("object"!=typeof e||!e.name||!e.init)throw Error("Invalid JSEP plugin format");this.registered[e.name]||(e.init(this.jsep),this.registered[e.name]=e)})}},SH=class{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+SH.version}static addUnaryOp(e){return SH.max_unop_len=Math.max(e.length,SH.max_unop_len),SH.unary_ops[e]=1,SH}static addBinaryOp(e,t,i){return SH.max_binop_len=Math.max(e.length,SH.max_binop_len),SH.binary_ops[e]=t,i?SH.right_associative.add(e):SH.right_associative.delete(e),SH}static addIdentifierChar(e){return SH.additional_identifier_chars.add(e),SH}static addLiteral(e,t){return SH.literals[e]=t,SH}static removeUnaryOp(e){return delete SH.unary_ops[e],e.length===SH.max_unop_len&&(SH.max_unop_len=SH.getMaxKeyLen(SH.unary_ops)),SH}static removeAllUnaryOps(){return SH.unary_ops={},SH.max_unop_len=0,SH}static removeIdentifierChar(e){return SH.additional_identifier_chars.delete(e),SH}static removeBinaryOp(e){return delete SH.binary_ops[e],e.length===SH.max_binop_len&&(SH.max_binop_len=SH.getMaxKeyLen(SH.binary_ops)),SH.right_associative.delete(e),SH}static removeAllBinaryOps(){return SH.binary_ops={},SH.max_binop_len=0,SH}static removeLiteral(e){return delete SH.literals[e],SH}static removeAllLiterals(){return SH.literals={},SH}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(e){this.expr=e,this.index=0}static parse(e){return new SH(e).parse()}static getMaxKeyLen(e){return Math.max(0,...Object.keys(e).map(e=>e.length))}static isDecimalDigit(e){return e>=48&&e<=57}static binaryPrecedence(e){return SH.binary_ops[e]||0}static isIdentifierStart(e){return e>=65&&e<=90||e>=97&&e<=122||e>=128&&!SH.binary_ops[String.fromCharCode(e)]||SH.additional_identifier_chars.has(String.fromCharCode(e))}static isIdentifierPart(e){return SH.isIdentifierStart(e)||SH.isDecimalDigit(e)}throwError(e){let t=Error(e+" at character "+this.index);throw t.index=this.index,t.description=e,t}runHook(e,t){if(SH.hooks[e]){let i={context:this,node:t};return SH.hooks.run(e,i),i.node}return t}searchHook(e){if(SH.hooks[e]){let t={context:this};return SH.hooks[e].find(function(e){return e.call(t.context,t),t.node}),t.node}}gobbleSpaces(){let e=this.code;for(;e===SH.SPACE_CODE||e===SH.TAB_CODE||e===SH.LF_CODE||e===SH.CR_CODE;)e=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let e=this.gobbleExpressions(),t=1===e.length?e[0]:{type:SH.COMPOUND,body:e};return this.runHook("after-all",t)}gobbleExpressions(e){let t=[],i,r;for(;this.index<this.expr.length;)if((i=this.code)===SH.SEMCOL_CODE||i===SH.COMMA_CODE)this.index++;else if(r=this.gobbleExpression())t.push(r);else if(this.index<this.expr.length){if(i===e)break;this.throwError('Unexpected "'+this.char+'"')}return t}gobbleExpression(){let e=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",e)}gobbleBinaryOp(){this.gobbleSpaces();let e=this.expr.substr(this.index,SH.max_binop_len),t=e.length;for(;t>0;){if(SH.binary_ops.hasOwnProperty(e)&&(!SH.isIdentifierStart(this.code)||this.index+e.length<this.expr.length&&!SH.isIdentifierPart(this.expr.charCodeAt(this.index+e.length))))return this.index+=t,e;e=e.substr(0,--t)}return!1}gobbleBinaryExpression(){let e,t,i,r,a,o,l,h,c;if(!(o=this.gobbleToken())||!(t=this.gobbleBinaryOp()))return o;for(a={value:t,prec:SH.binaryPrecedence(t),right_a:SH.right_associative.has(t)},(l=this.gobbleToken())||this.throwError("Expected expression after "+t),r=[o,a,l];t=this.gobbleBinaryOp();){if(0===(i=SH.binaryPrecedence(t))){this.index-=t.length;break}a={value:t,prec:i,right_a:SH.right_associative.has(t)},c=t;let h=e=>a.right_a&&e.right_a?i>e.prec:i<=e.prec;for(;r.length>2&&h(r[r.length-2]);)l=r.pop(),t=r.pop().value,o=r.pop(),e={type:SH.BINARY_EXP,operator:t,left:o,right:l},r.push(e);(e=this.gobbleToken())||this.throwError("Expected expression after "+c),r.push(a,e)}for(h=r.length-1,e=r[h];h>1;)e={type:SH.BINARY_EXP,operator:r[h-1].value,left:r[h-2],right:e},h-=2;return e}gobbleToken(){let e,t,i,r;if(this.gobbleSpaces(),r=this.searchHook("gobble-token"))return this.runHook("after-token",r);if(e=this.code,SH.isDecimalDigit(e)||e===SH.PERIOD_CODE)return this.gobbleNumericLiteral();if(e===SH.SQUOTE_CODE||e===SH.DQUOTE_CODE)r=this.gobbleStringLiteral();else if(e===SH.OBRACK_CODE)r=this.gobbleArray();else{for(i=(t=this.expr.substr(this.index,SH.max_unop_len)).length;i>0;){if(SH.unary_ops.hasOwnProperty(t)&&(!SH.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!SH.isIdentifierPart(this.expr.charCodeAt(this.index+t.length)))){this.index+=i;let e=this.gobbleToken();return e||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:SH.UNARY_EXP,operator:t,argument:e,prefix:!0})}t=t.substr(0,--i)}SH.isIdentifierStart(e)?(r=this.gobbleIdentifier(),SH.literals.hasOwnProperty(r.name)?r={type:SH.LITERAL,value:SH.literals[r.name],raw:r.name}:r.name===SH.this_str&&(r={type:SH.THIS_EXP})):e===SH.OPAREN_CODE&&(r=this.gobbleGroup())}return r?(r=this.gobbleTokenProperty(r),this.runHook("after-token",r)):this.runHook("after-token",!1)}gobbleTokenProperty(e){this.gobbleSpaces();let t=this.code;for(;t===SH.PERIOD_CODE||t===SH.OBRACK_CODE||t===SH.OPAREN_CODE||t===SH.QUMARK_CODE;){let i;if(t===SH.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==SH.PERIOD_CODE)break;i=!0,this.index+=2,this.gobbleSpaces(),t=this.code}this.index++,t===SH.OBRACK_CODE?(e={type:SH.MEMBER_EXP,computed:!0,object:e,property:this.gobbleExpression()},this.gobbleSpaces(),(t=this.code)!==SH.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):t===SH.OPAREN_CODE?e={type:SH.CALL_EXP,arguments:this.gobbleArguments(SH.CPAREN_CODE),callee:e}:(t===SH.PERIOD_CODE||i)&&(i&&this.index--,this.gobbleSpaces(),e={type:SH.MEMBER_EXP,computed:!1,object:e,property:this.gobbleIdentifier()}),i&&(e.optional=!0),this.gobbleSpaces(),t=this.code}return e}gobbleNumericLiteral(){let e="",t,i;for(;SH.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);if(this.code===SH.PERIOD_CODE)for(e+=this.expr.charAt(this.index++);SH.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);if("e"===(t=this.char)||"E"===t){for(e+=this.expr.charAt(this.index++),("+"===(t=this.char)||"-"===t)&&(e+=this.expr.charAt(this.index++));SH.isDecimalDigit(this.code);)e+=this.expr.charAt(this.index++);SH.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+e+this.char+")")}return i=this.code,SH.isIdentifierStart(i)?this.throwError("Variable names cannot start with a number ("+e+this.char+")"):(i===SH.PERIOD_CODE||1===e.length&&e.charCodeAt(0)===SH.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:SH.LITERAL,value:parseFloat(e),raw:e}}gobbleStringLiteral(){let e="",t=this.index,i=this.expr.charAt(this.index++),r=!1;for(;this.index<this.expr.length;){let t=this.expr.charAt(this.index++);if(t===i){r=!0;break}if("\\"===t)switch(t=this.expr.charAt(this.index++)){case"n":e+=` 3136`;break;case"r":e+=`\r`;break;case"t":e+=" ";break;case"b":e+="\b";break;case"f":e+="\f";break;case"v":e+="\v";break;default:e+=t}else e+=t}return r||this.throwError('Unclosed quote after "'+e+'"'),{type:SH.LITERAL,value:e,raw:this.expr.substring(t,this.index)}}gobbleIdentifier(){let e=this.code,t=this.index;for(SH.isIdentifierStart(e)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(e=this.code,SH.isIdentifierPart(e));)this.index++;return{type:SH.IDENTIFIER,name:this.expr.slice(t,this.index)}}gobbleArguments(e){let t=[],i=!1,r=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let a=this.code;if(a===e){i=!0,this.index++,e===SH.CPAREN_CODE&&r&&r>=t.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}if(a===SH.COMMA_CODE){if(this.index++,++r!==t.length){if(e===SH.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===SH.CBRACK_CODE)for(let e=t.length;e<r;e++)t.push(null)}}else if(t.length!==r&&0!==r)this.throwError("Expected comma");else{let e=this.gobbleExpression();e&&e.type!==SH.COMPOUND||this.throwError("Expected comma"),t.push(e)}}return i||this.throwError("Expected "+String.fromCharCode(e)),t}gobbleGroup(){this.index++;let e=this.gobbleExpressions(SH.CPAREN_CODE);if(this.code===SH.CPAREN_CODE)return this.index++,1===e.length?e[0]:!!e.length&&{type:SH.SEQUENCE_EXP,expressions:e};this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:SH.ARRAY_EXP,elements:this.gobbleArguments(SH.CBRACK_CODE)}}};Object.assign(SH,{hooks:new SG,plugins:new SW(SH),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),SH.max_unop_len=SH.getMaxKeyLen(SH.unary_ops),SH.max_binop_len=SH.getMaxKeyLen(SH.binary_ops);var Sq=e=>new SH(e).parse();function SX(e){return{all:e=e||new Map,on:function(t,i){var r=e.get(t);r?r.push(i):e.set(t,[i])},off:function(t,i){var r=e.get(t);r&&(i?r.splice(r.indexOf(i)>>>0,1):e.set(t,[]))},emit:function(t,i){var r=e.get(t);r&&r.slice().map(function(e){e(i)}),(r=e.get("*"))&&r.slice().map(function(e){e(t,i)})}}}
3136Object.getOwnPropertyNames(SH).forEach(e=>{void 0===Sq[e]&&"prototype"!==e&&(Sq[e]=SH[e])}),Sq.Jsep=SH,Sq.plugins.register({name:"ternary",init(e){e.hooks.add("after-expression",function(t){if(t.node&&this.code===e.QUMARK_CODE){this.index++;let i=t.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===e.COLON_CODE){this.index++;let a=this.gobbleExpression();if(a||this.throwError("Expected expression"),t.node={type:"ConditionalExpression",test:i,consequent:r,alternate:a},i.operator&&e.binary_ops[i.operator]<=.9){let r=i;for(;r.right.operator&&e.binary_ops[r.right.operator]<=.9;)r=r.right;t.node.test=r.right,r.right=t.node,t.node=i}}else this.throwError("Expected :")}})}});var SY=class{constructor(e,t,i){this.id=e,this.userAPI=t,this.result=void 0,this.error="null",this.isPrefetched=!1,this.isLoading=!1,this.isLoaded=!1,this.prefetchPromise=new Promise(e=>e()),this.emitter=SX(),this._innerCallUserAPI=async e=>{this.emitter.emit("start",{userAPIId:this.id}),this.isLoading=!0,this.isLoading=!1;try{this.result=await SQ(this.userAPI,e),this.error="null",this.emitter.emit("success",{userAPIId:this.id})}catch(t){let e=t.message?.split("_:_")?.[0]?.replace("status:","")??"null";this.error=e,this.result=null,this.emitter.emit("error",{userAPIId:this.id})}this.isLoading=!1,this.isPrefetched=!0,this.isLoaded=!0},t?.integration?.type==="OpenAI"?this.result={content:""}:"GET"===t.method&&""!==t.url&&(this.prefetchPromise=this.prefetch(i)),this._debouncedCallUserAPI=this._innerCallUserAPI,this._updateDebouncedCallUserAPI(),this._debouncedPrefetch=u9(this.prefetch,1e3,{trailing:!0})}_updateDebouncedCallUserAPI(){this._debouncedCallUserAPI=void 0!==this.userAPI.debounce&&this.userAPI.debounce>0?u9(this._innerCallUserAPI,this.userAPI.debounce,{leading:!0,trailing:!0}):this._innerCallUserAPI}async prefetch(e){await this.callUserAPI(e)}async callUserAPI(e){await this._debouncedCallUserAPI(e)}update(e,t,i=!0){this.userAPI=e,this._updateDebouncedCallUserAPI(),""!==this.userAPI.url&&"GET"===this.userAPI.method&&i&&this._debouncedPrefetch(t)}retrieveValue(e){if(this.result)try{return fM.zoom(this.result,e)}catch{}}retrieveZoomedKeyValues(e){if(this.result){var t,i;let r=e&&e.length?fM.zoom(this.result,e):this.result;if("object"==typeof(t=r)&&null!==t)return Object.entries(r);if(Array.isArray(r))return r.map((e,t)=>[t.toString(),e]);throw"string"==typeof(i=r)||"number"==typeof i||"boolean"==typeof i||null===i?Error("This path points to a value, use retrieveValue() instead. "+e?.join(".")):Error("Path error"+e?.join("."))}}dispose(){}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}get autostart(){return this.userAPI.autoStart}};async function SQ(e,t,i=new AbortController){let r,a,o=e.url,l=e.proxy?.enabled??!1,h;if(e.integration?.type==="OpenAI"){let i=SK(""===e.integration.prompt?[]:JSON.parse(e.integration.prompt),t),r=""===e.integration.behavior?[]:SK(JSON.parse(e.integration.behavior),t);h=`{ 3137 "model": "${e.integration.model}", 3138 "messages": [${e.integration.useBehavior?` 3139 { 3140 "role": "system", 3141 "content": "${r}" 3142 },`:""} 3143 { 3144 "role": "user", 3145 "content": "${i}" 3146 } 3147 ] 3148 }`}if(l){let i;o=`https://apis.spline.design/file/${e.proxy.fileId}/external-api/request?uuidexternalapi=${e.proxy.proxyId}`,void 0!==h?i=h:"POST"===e.method&&e.body&&(i=SK(JSON.parse(e.body),t)),void 0!==i&&(o+=`&data=${encodeURIComponent(i.replace(/(\r\n|\n|\r|\t)/gm,""))}`)}else e.integration?.type==="OpenAI"?a=h:"POST"===e.method&&e.body&&(a=SK(JSON.parse(e.body),t));let c=await fetch(o,{method:l?"GET":e.method,headers:l?void 0:(r=new Headers,e.headers.forEach(e=>{""!==e.data.key&&r.append(e.data.key,e.data.value)}),r),signal:i.signal,body:a});if(!c.ok)throw Error("status:"+c.status+"_:_"+c.statusText);if(e.integration?.type==="OpenAI"){let e=await c.json();return l&&(e=e.response),{content:e.choices[0].message.content}}{let e=await c.json();return l&&(e=e.response),e}}var SZ=(e,t)=>{if("string"==typeof e){let i=t.getVariable(e);if(i)return SZ(i,t)}return xC.isBoolean(e)?xC.getDisplayedValue(e).toLowerCase():xC.getDisplayedValue(e)},SK=(e,t)=>e.map((e,i)=>{if("text"in e)return e.text;if("type"in e){if("paragraph"===e.type)return(i>0?` 3149`:"")+SK(e.children,t);
3149if("variable"===e.type){let i=t.getVariable(e.variableId);if(void 0!==i)return SZ(i,t)}}return""}).join(""),SJ=["+","-","*","/","(",")","==","!=",">","<",">=","<=","and","or","!","%","^",","],S$=["0","1","2","3","4","5","6","7","8","9","."],S0=["sin","cos","tan","asin","acos","atan","atan2","sqrt","abs","log","exp","floor","ceil","round","min","max","random"];function S1(e,t,i="number"){let r,a,o="";for(let r=0;r<e.length;r++){var l;let a=e[r];if("objType"in a&&"api"===a.objType){let e=JSON.parse(a.id),i=e[0],r=t.getUserAPI(i);if(void 0!==r&&r instanceof SY){let t=r.retrieveValue(e.slice(1));void 0!==t&&(o+=t)}continue}if("objType"in a&&"webhook"===a.objType){let[e,i]=JSON.parse(a.id),r=t.getUserWebhook(e);if(void 0!==r){let e=r.getParameterValue(i);void 0!==e&&(o+=e)}continue}if("objType"in a&&"aiAssistant"===a.objType){let e=t.openAIRealtime;if("objId"in a&&void 0!==a.objId){let i;if(t.scene.data.objects.traverse((e,t)=>{let r=t.events?.find(e=>e.id===a.objId);r&&(i=r)}),void 0!==i&&"AIAssistantListener"===i.data.type){let t=e?.computeAnalysisForListenerEvent(i.data);if(void 0!==t){o+=t;continue}}}o+=e?.voice??0;continue}if("id"in a){let l=e[r-1];if(r>0&&"id"in l)return;let h=t.getVariable(a.id),c=xC.getDisplayedValue(h);"number"===i&&xC.isTextValue(h)&&Array.isArray(h.textValue)&&1===h.textValue.length?c=parseFloat(c).toString():"boolean"===i&&xC.isBoolean(h)?c=h?"true":"false":"boolean"===i&&xC.isTextValue(h)&&!Array.isArray(h.textValue)&&(c='"'+c+'"'),o+=c;continue}if("string"===i){'"'!==a.name&&("+"!==a.name||a.escaped)&&(o+=a.name),"+"!==a.name||a.escaped||"\\"!==o[o.length-1]||(o=o.slice(0,-1)+a.name);continue}if("and"===a.name){o+="&&";continue}if("or"===a.name){o+="||";continue}if("True"===a.name){o+="true";continue}if("False"===a.name){o+="false";continue}if("boolean"===i&&!("string"==typeof(l=a.name)&&!isNaN(l)&&!isNaN(parseFloat(l)))&&!S$.includes(a.name)&&!SJ.includes(a.name)&&!S0.includes(a.name.replace(/\($/g,""))){o+='"'+a.name+'"';continue}o+=a.name}if("string"===i)return o;if(0===e.length){if("number"===i)return 0;if("boolean"===i)return!1}try{r=Sq(o)}catch{return}try{a=function e(t){switch(t.type){case"BinaryExpression":switch(t.operator){case"==":return Number(e(t.left)===e(t.right));case"!=":return Number(e(t.left)!==e(t.right));case">":return Number(e(t.left)>e(t.right));case">=":return Number(e(t.left)>=e(t.right));case"<":return Number(e(t.left)<e(t.right));case"<=":return Number(e(t.left)<=e(t.right));case"+":return e(t.left)+e(t.right);case"-":return e(t.left)-e(t.right);case"*":return e(t.left)*e(t.right);case"/":return e(t.left)/e(t.right);case"%":return e(t.left)%e(t.right);case"&&":return e(t.left)&&e(t.right);case"||":return e(t.left)||e(t.right);case"^":return Math.pow(e(t.left),e(t.right));default:throw Error("Unknown operator: "+t.operator)}case"UnaryExpression":switch(t.operator){case"-":return-e(t.argument);case"!":return Number(!e(t.argument));default:throw Error("Unknown operator: "+t.operator)}case"Identifier":throw Error("Unknown identifier: "+t.name);case"Literal":return t.value;case"CallExpression":if("Identifier"===t.callee.type){if("random"===t.callee.name){let i=0,r=1;if(t.arguments.length>=1)try{i=e(t.arguments[0])}catch{}if(t.arguments.length>=2)try{r=e(t.arguments[1])}catch{}return i=Math.min(r,i),r=Math.max(r,i),i+Math.random()*(r-i)}return Math[t.callee.name].apply(null,t.arguments.map(e))}throw Error("Unknown node");default:throw Error("Unknown node type: "+t.type)}}(r)}catch{}return a}Sq.addBinaryOp("^",11,!0);var S2=new i6,S3=new i6,S4=class{static create(e){return this.build(this.normalizeInputs(e))}static normalizeInputs(e,t){let i=Object.assign({},t?.parameters??{width:100,height:100,depth:1,subdivisions:12,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3},e.parameters),r=Math.abs(i.width),a=Math.abs(i.height??i.width),o=Math.abs(i.depth??0),l=t?.shapeData??w4.create({parameters:{...vf,width:"number"==typeof vf.width?vf.width:100,height:"number"==typeof vf.height?vf.height:100}}).userData.shape;return{path:e.path??vP.defaultData(),parameters:Object.assign(i,{width:r,height:a,depth:o,extrusion:{...vm,...i.extrusion}}),shapeData:l}}static build(e){return e.path.points.length>=2?Object.assign(new S5(e),{userData:{...e,type:"PathGeometry"}}):Object.assign(new rQ,{userData:{...e,type:"PathGeometry"}})}},S5=class extends rQ{constructor(e){super(),this.type="PathExtrusionGeometry",this.inputs=e,this.build()}_isGeometryClosed(){return this.inputs.path.isClosed&&1===this.inputs.parameters.extrusion.depth}_isOpenEnded(){let e,t=this.inputs.parameters.extrusion;return!(this.inputs.path.isClosed&&1===t.depth)||(t.twist%(e=2*Math.PI)+e)%e!=(0%e+e)%e||t.startScale!==t.endScale}build(){let e=this._extractPathPoints();if(e.length<2)return;let t=this._computeBasisMatrices(e),{depth:i,offset:r}=this.inputs.parameters.extrusion;i=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(r,1));let a=this.inputs.path.isClosed?e.length:e.length-1,o=Math.floor(r*a),l=Math.min(Math.max(2,(this.inputs.path.isClosed?Math.ceil((i+r)*a):Math.ceil(Math.min(1,i+r)*a))-o+1),a+2),h=[],c=[];for(let i=0;i<l;i++){let r=this.inputs.path.isClosed?(i+o)%e.length:Math.min(i+o,e.length-1);h.push(e[r].clone()),c.push(t[r].clone())}let d=(e,t,i)=>{var r,a;let o,l;h[e]=h[e].clone().lerp(h[t],i),c[e]=(r=c[e],a=c[t],o=[new iD,new iD,new iD],l=[new iD,new iD,new iD],r.extractBasis(o[0],o[1],o[2]),a.extractBasis(l[0],l[1],l[2]),o.forEach((e,t)=>{let r=l[t],a=t8.lerp(e.length(),r.length(),i);e.lerp(r,i).setLength(a)}),new i6().makeBasis(o[0],o[1],o[2]))},p=0,f=r*a%1;(!this.inputs.path.isClosed||i<=1)&&(f||0===r)&&d(0,1,p=f);let m=0,g=(r+i)*a%1;if((this.inputs.path.isClosed&&i<=1||!this.inputs.path.isClosed&&r+i<1)&&g&&(m=g,d(h.length-1,h.length-2,1-m)),0===i){let e=h.length-1;h[e].copy(h[0]),c[e].copy(c[0])}this._applyPathModifiers(c,p,m);let{bevel:v,bevelSides:y}=this.inputs.parameters.extrusion,x=v>0?this.inputs.parameters.extrusion.capType:"flat",b=5;"Custom"===this.inputs.parameters.extrusion.shape.type&&(b="low"===this.inputs.parameters.extrusion.shape.shapeQuality?5:12);let{regions:w,infos:S,vertices:_}=this._computeShapePoints(b),A=0,M;"round"===x&&(A=(M=new w$(this.inputs.shapeData,2*v,v,b,y,void 0,!0)).getAttribute("position").count);let C=0,E=0;S.sort((e,t)=>
3149e.start-t.start),S.forEach(e=>{e.verticesStart=C,e.verticesCount=e.continuous.reduce((e,t,i)=>e+(0!==i&&t?1:2),0),E+=e.verticesCount,C=E});let T=E*l,P,D=0;if(this._isOpenEnded()&&"flat"===x){try{P=wH({windingRule:_e.ODD,elementType:_t.POLYGONS,polySize:3,vertexSize:2,strict:!0,contours:w})}catch{P=wK}D=P.vertexCount}let O=T+2*D+2*A,I=T+2*D,R={positions:new Float32Array(3*O),normals:new Float32Array(3*O),uvs:new Float32Array(2*O)},L=[];if(S.forEach(e=>{this._extrudeRegion(e,_,c,h,R,L,this._isGeometryClosed()&&!this._isOpenEnded())}),P&&(this._closeEnd(P,T,L,R,c[0],h[0],!1),this._closeEnd(P,T+D,L,R,c[c.length-1],h[h.length-1],!0)),M){R.positions.set(M.getAttribute("position").array,3*I),R.normals.set(M.getAttribute("normal").array,3*I),R.uvs.set(M.getAttribute("uv").array,2*I);for(let e=I;e<I+A;e++)R.uvs[2*e+1]=1e-4;let e=L.length;L.push(...M.getIndex().array.map(e=>e+I)),I+=A,R.positions.set(M.getAttribute("position").array,3*I),R.normals.set(M.getAttribute("normal").array,3*I),R.uvs.set(M.getAttribute("uv").array,2*I);let t=L.length;L.push(...M.getIndex().array.map(e=>e+I)),this.setAttribute("position",new rN(R.positions,3)),this.setAttribute("normal",new rN(R.normals,3)),this.setAttribute("uv",new rN(R.uvs,2)),this.setIndex(L),S2.copy(c[c.length-1]).setPosition(h[h.length-1]),this.applyMatrix4OnRange(S2,I,O),S2.copy(c[0]).setPosition(h[0]).multiply(S3.makeScale(1,1,-1)),this.applyMatrix4OnRange(S2,I-A,I),this.reverseIndicesOnRange(e,t)}else this.setAttribute("position",new rN(R.positions,3)),this.setAttribute("normal",new rN(R.normals,3)),this.setAttribute("uv",new rN(R.uvs,2)),this.setIndex(L)}_extractPathPoints(){let e=bW(this.inputs.path),t=this.inputs.path.subdivisions,i="uniform"===this.inputs.path.subdivisionMode?e.getSpacedPoints(4*t):e.getPoints(t);if(i.length<2)return[];let r=[i[0]];return i.forEach(e=>{r[r.length-1].distanceToSquared(e)>.001&&r.push(e)}),this.inputs.path.isClosed&&.001>r[r.length-1].distanceTo(r[0])&&r.pop(),r}_computeBasisMatrices(e){let t=[],i=e.length,r=this.inputs.path.isClosed,a=new iD,o=new iD,l=new iD,h=new iD,c=new iD(0,1,0);for(let d=0;d<i;d++){let p,f=e[d],m;m=0===d?r?e[e.length-2]:f.clone().multiplyScalar(2).sub(e[1]):e[d-1],p=d===i-1?r?e[1]:f.clone().multiplyScalar(2).sub(e[d-1]):e[d+1];let g=f.clone().sub(m).normalize(),v=p.clone().sub(f).normalize(),y=g.clone().add(v).normalize();l.copy(y),0===d&&(y.equals(c)||y.clone().negate().equals(c))&&c.set(0,0,1);let x=c.clone().cross(y).normalize(),b=y.clone().cross(x).normalize();c.copy(b),h.copy(x),0===d&&(a.copy(b),o.copy(y));let w=new i6().makeBasis(x,b,y);t.push(w)}let d=r?o:l,p=r?a:new iD(0,1,0),f=d.clone().cross(h).normalize(),m=Math.acos(p.dot(f));if(isNaN(m))return t;let g=p.clone().cross(f);d.dot(g)>0&&(m*=-1);for(let e=1;e<t.length;e++){let i=new i6().makeRotationZ(m*e/t.length);t[e].multiply(i)}return t}_applyPathModifiers(e,t,i){let r=e.length,{angle:a,twist:o,startScale:l,endScale:h}=this.inputs.parameters.extrusion,c=new i6,d=new i6;return e.forEach((e,p)=>{let f=0===p?0:p===r-1?1:(p-t)/(r-(0!==i)-(t+(1-i)));c.makeRotationZ(t8.lerp(a,a+o,f)*t8.DEG2RAD);let m=t8.lerp(l,h,f);d.makeScale(m,m,m),e.multiply(c).multiply(d)}),e}_computeShapePoints(e=12,t=_e.ODD){let i,r=this.inputs.shapeData,a=r.extractShapePointsToFlatArray([],e),o=r.shapeHoles.map(t=>{let i=t.extractShapePointsToFlatArray([],e),r=[];for(let e=i.length-1;e>=1;e-=2){let t=i[e-1],a=i[e-0];r.push(t,a)}return r}),l;try{l=wH({windingRule:t,elementType:_t.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[a]})}catch{l=wQ}try{i=wH({windingRule:_e.ODD,elementType:_t.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...o]})}catch{i=wZ}if(!l)throw Error("error generating geometry");let h=l.elementCount;if(i){l.elementCount+=i.elementCount;for(let e=0;e<i.elements.length;e++){let t=i.elements[e],r=e%2==0?l.vertexCount:0;l.elements.push(t+r)}for(let e=0;e<i.vertexIndices.length;e++){let t=i.vertexIndices[e],r=l.vertexCount;l.vertexIndices.push(t+r)}for(let e=0;e<i.vertices.length;e++){let t=i.vertices[e];l.vertices.push(t)}}let c=1/0,d=-1/0,p=1/0,f=-1/0;for(let e=0,t=l.vertexCount;e<t;e++){let t=2*e,i=l.vertices[t+0],r=l.vertices[t+1];i<c&&(c=i),i>d&&(d=i),r<p&&(p=r),r>f&&(f=r)}let m=[];for(let e=l.elementCount-1;e>=0;e--){let t=e>=h,i=2*e,a=l.elements[i+0],o=l.elements[i+1],c=a+o,d={start:a,count:o,normals:[],isHole:t,continuous:[],verticesStart:0,verticesCount:0};m.push(d);
3149let p=a,f=c-1,g=a+1,v=r.roundedCurves.length;do{let e=p-a,i=l.vertices[2*f+0],h=l.vertices[2*f+1],m=l.vertices[2*p+0],y=l.vertices[2*p+1],x=l.vertices[2*g+0],b=l.vertices[2*g+1],w=m-i,S=y-h,_=Math.sqrt(w*w+S*S);w/=_,S/=_;let A=m-x,M=y-b,C=Math.sqrt(A*A+M*M);A/=C,M/=C,d.normals[2*e+0]=-M,d.normals[2*e+1]=A;let E=l.vertexIndices[p];if(Array.isArray(E))d.continuous[e]=!1;else{let[t,i]=r.getCurveIndexFromVertexId(E-1,!0);if(i>0&&i<1)d.continuous[e]=!0;else{let a=1===i?t+1:t-1;a=(a+v)%v;let o=+(1!==i),l=r.roundedCurves[t].getTangent(i),h=r.roundedCurves[a].getTangent(o);d.continuous[e]=l.dot(h)>.95}}t&&(d.normals[2*e+0]*=-1,d.normals[2*e+1]*=-1),[f,p,g]=[p,g,g+1],g>=c&&(g-=o)}while(g!==a+1)}return{regions:[a,...o],infos:m,vertices:l.vertices}}_insertVertex(e,t,i,r,a){let o=2*t,l=3*t;e.positions[l+0]=i.x,e.positions[l+1]=i.y,e.positions[l+2]=i.z,e.normals[l+0]=r.x,e.normals[l+1]=r.y,e.normals[l+2]=r.z,e.uvs[o+0]=a.x,e.uvs[o+1]=a.y}_extrudeRegion(e,t,i,r,a,o,l){let h=new iD,c=new iD,d=new iD,p=new iD,f=new t9;i.forEach((o,l)=>{let m=r[l],g=e.verticesStart*i.length+e.verticesCount*l;for(let r=0;r<e.count;r++){let v=(e.start+r)*2;if(h.set(t[v+0],t[v+1],0),d.copy(h).applyMatrix4(o).add(m),e.continuous[r])p.set(e.normals[2*r+0],e.normals[2*r+1],0);else{let i=0===r?(e.start+e.count-1)*2:v-2;c.set(t[i+0],t[i+1],0),p.copy(h).sub(c),p.set(-p.y,p.x,0),e.isHole||p.negate()}if(p.applyMatrix4(o).normalize(),f.set(0===r?1:r/e.count,l/(i.length-1)),this._insertVertex(a,g,d,p,f),g++,!e.continuous[r]||0===r){if(0===r)p.set(e.normals[2*r+0],e.normals[2*r+1],0),f.set(0,l/(i.length-1));else{let i=r===e.count-1?2*e.start:v+2;c.set(t[i+0],t[i+1],0),p.copy(c).sub(h),p.set(-p.y,p.x,0),e.isHole||p.negate()}p.applyMatrix4(o).normalize(),this._insertVertex(a,g,d,p,f),g++}}});let m=i.length-1;for(let t=0;t<m;t++){let r=e.verticesStart*i.length+e.verticesCount*t,a=e.verticesStart*i.length+e.verticesCount*(t+1),l=0;for(let t=0;t<e.count;t++){(!e.continuous[t]||0===t)&&l++;let i=t===e.count-1?0:l+1,h=r+l,c=r+i,d=a+i,p=a+l;e.isHole?o.push(h,d,c,h,p,d):o.push(h,c,d,h,d,p),l++}}}_closeEnd(e,t,i,r,a,o,l){let h=e.vertexCount,c=new iD(0,0,l?-1:1).applyMatrix4(a),d=new iD,p=new t9;for(let i=0;i<h;i++){let l=2*i;d.set(e.vertices[l+0],e.vertices[l+1],0).applyMatrix4(a).add(o),this._insertVertex(r,t+i,d,c,p)}let f=e.elements;for(let r=0;r<e.elementCount;r++){let e=3*r,a=f[e+0]+t,o=f[e+(l?1:2)]+t,h=f[e+(l?2:1)]+t;i.push(a,o,h)}}applyMatrix4OnRange(e,t,i){let r=e.elements,a=new t7().getNormalMatrix(e).elements,o,l,h,c,d=this.attributes.position,p=this.attributes.normal;if(!d||!p)return;let f=d.array,m=p.array,g=d.itemSize;for(let e=t*g,d=i*g;e<d;e+=g)o=f[e+0],l=f[e+1],h=f[e+2],c=1/(r[3]*o+r[7]*l+r[11]*h+r[15]),f[e+0]=(r[0]*o+r[4]*l+r[8]*h+r[12])*c,f[e+1]=(r[1]*o+r[5]*l+r[9]*h+r[13])*c,f[e+2]=(r[2]*o+r[6]*l+r[10]*h+r[14])*c,o=m[e+0],l=m[e+1],h=m[e+2],m[e+0]=a[0]*o+a[3]*l+a[6]*h,m[e+1]=a[1]*o+a[4]*l+a[7]*h,m[e+2]=a[2]*o+a[5]*l+a[8]*h;d.needsUpdate=!0,p.needsUpdate=!0}reverseIndicesOnRange(e,t){let i=this.index;if(i){for(let r=e;r<t;r+=3){let e=i.getX(r),t=i.getX(r+1),a=i.getX(r+2);i.setXYZ(r,a,t,e)}i.needsUpdate=!0}}};function S6(){let e=new rQ;return e.setAttribute("position",new rN(new Float32Array([]),3)),e.setIndex(new rN(new Uint16Array([]),1)),e}var S8,S9,S7,_e,_t,_i,_r=S6().attributes,_s=class extends rQ{constructor(e,t){super(),this.charWidths=[],this.charCoords=[],this.wrappedText=[],this.isLowResolution=!1,this.vectorShapes=[],Object.assign(this.attributes,_r),this.userData={parameters:e,type:"TextGeometry"};let i=t.getFont(e.font);i?.isLoaded?(this.font=i,this.update(e,t)):this.updateFont(e.font,t).then(()=>{this.update(e,t),t?.requestRender()})}async updateFont(e,t){let i=t.getFont(e);i&&(this.font=i,await i.loadingPromise)}update(e,t){let i=this.font;if(this.userData={parameters:e,type:"TextGeometry"},!i?.isLoaded)return;let{width:r,height:a,depth:o,extrudeBevelSize:l,extrudeBevelSegments:h,text:c,textTransform:d}=e,p=xC.getDisplayedValue(c),f=function(e,t,i,r){let a="string"==typeof e.width?Number(r.getVariable(e.width)):e.width,o=[""],l="";for(let r of i)l+=r," "===r||r===` 3150`?(o[o.length-1]+=l,l="",r===` 3151`&&o.push("")):t.getTextWidth(o[o.length-1]+l,e)>a&&(o[o.length-1].length&&o.push(""),t.getTextWidth(o[o.length-1]+l,e)>a&&(1===l.length?(o[o.length-1]+=l,l=""):(o[o.length-1]+=l.slice(0,-1),l=l[l.length-1],o.push(""))));return o[o.length-1]+=l,o}(e,i,2===d?p.toUpperCase():3===d?p.toLowerCase():p,t),{shapes:m,charWidths:g,charCoords:v}=i.generateShapes(f,e,t),y=("number"==typeof r?r:Number(t.getVariable(r)))*.5,x=("number"==typeof a?a:Number(t.getVariable(a)))*.5,b=m.map(e=>new wE().fromShape(e,!0));this.vectorShapes=b;let w=b.map(e=>w2.create({shape:e,parameters:{depth:o,extrudeBevelSegments:h,extrudeBevelSize:l,windingRule:o<=0?_e.NONZERO:_e.ODD,subdivisions:this.isLowResolution&&o>0?1:12}})),S=w.length?yp(w):S6();S.translate(-y,x,0),this.dispose(),this.wrappedText=f,this.charCoords=v,this.charWidths=g,this.deleteAttribute("extrudeNormal"),Object.entries(S.attributes).forEac
3151h(([e,t])=>{this.setAttribute(e,t)}),this.setIndex(S.index),this.computeBoundingSphere()}clone(){let e=vx(new rQ,_s.prototype);return e.copy(this),e}copy(e){return Object.entries(e.attributes).forEach(([e,t])=>{this.setAttribute(e,t)}),this.setIndex(e.index),this.userData={parameters:{...e.userData.parameters},type:"TextGeometry"},this}async setText(e,t){this.font&&await this.font.loadingPromise,await this.update({...this.userData.parameters,text:{textValue:e}},t)}get text(){return this.userData.parameters.text??""}},_a=new Promise(e=>{_i=e}),_n=!1,_o=["font"];function _l(e,t,i,r){let a,o,l,h;for(let i of("PathGeometry"===e.type?(o=JSON.parse(JSON.stringify(e)),l=[[],["extrusion"]]):(o={...e},l=[[]]),l)){let e=o;for(let t of i)e=e[t];for(a in e){let o=e[a];gR(o)&&!_o.includes(a)&&(e[a]=t.getVariable(o,[r.uuid,"geometry",...i,a]),gR(e[a])&&(e[a]=1))}}let c={parameters:o,type:o.type};if("PathGeometry"===o.type)c.path=o.path;else if("VectorGeometry"===o.type)c.shape=wE.createFromState(o.shape,o.width,o.height);else if("NonParametricGeometry"===o.type){if(o.data.groups&&o.data.groups?.forEach(e=>e.materialIndex=Math.max(e.materialIndex??0,0)),c.geometry=new lE().parse(o),0===c.geometry.groups.length){let e=c.geometry;e.addGroup(0,Math.max(e.getIndex()?.count??0,e.getAttribute("position").count),0)}}else if("SubdivGeometry"===o.type){let t=new _y(o,i);return t.data=e,t}else{if("TextGeometry"===o.type||"InputGeometry"===o.type)return new _s(o,t);if("UIGeometry"===o.type)return SI.create({parameters:{width:o.width,height:o.height,cornerRadius:o.cornerRadius,cornerType:o.cornerType}})}try{h=_N(c)}catch{c.shape=wE.createFromState(vT.defaultData(),100,100),c.type="VectorGeometry",h=_N(c)}return h}var _h=new i6;function _c(e,t,i,r){let a=e.position.array,o=e.normal.array,l=_h.makeScale(t,i,r).invert().elements,h,c,d;for(var p=0,f=a.length;p<f;p+=3)a[p]*=t,a[p+1]*=i,a[p+2]*=r,h=o[p],c=o[p+1],d=o[p+2],o[p]=l[0]*h+l[4]*c+l[8]*d,o[p+1]=l[1]*h+l[5]*c+l[9]*d,o[p+2]=l[2]*h+l[6]*c+l[10]*d;e.position.needsUpdate=!0,e.normal.needsUpdate=!0}var _d,_u,_p=new iR,_f=new iD;_a.then(e=>{_u=e});var _m=new Float32Array([10,10,0,-10,10,0,-10,-10,0,10,-10,0]),_g=new Uint32Array([0,1,2,3]),_v=new Uint8Array([4]),_y=class extends rQ{constructor(e,t){super(),this.data=e,this.flatShading=t,this.subdivPointer=0,this.rebuild(),this.freeSubdivPointer()}mutateDirectlyScaleBaked(e,t){this.freeSubdivPointer();let i=this.data.scaleBaked.map(e=>"number"==typeof e?e:1),r=gA.div(t.map(e=>"number"==typeof e?e:0),i);if(r.every(e=>1===e))return;this.subdividedGeometry&&_c(this.subdividedGeometry.attributes,...r),this.originalGeometry&&_c(this.originalGeometry.attributes,...r),this.data=e;let a=this.userData.parameters;this.userData.parameters={width:a.width*r[0],height:a.height*r[1],depth:a.depth*r[2]},this.originalGeometry.boundingSphere.center.multiply(_f.fromArray(r));let o=_f.set(a.width,a.height,a.depth).length();this.originalGeometry.boundingSphere.radius=o/2}ensureSubdivPointer(){return 0===this.subdivPointer&&this.rebuild(),this.subdivPointer}rebuild(){let e,t,i;try{({originalGeometry:e,subdividedGeometry:t,subdivPointer:i}=_y.build(this.data,void 0,!this.flatShading,void 0))}catch{e=new st(100,100,100),i=0}this.subdivPointer=i,this.originalGeometry=e,this.subdividedGeometry=t??void 0,Object.assign(this,this.subdividedGeometry??this.originalGeometry),this.calcBoundingBox()}freeSubdivPointer(){this.subdivPointer&&(_y.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0)}dispose(){super.dispose(),this.freeSubdivPointer()}calcBoundingBox(){let e=this.originalGeometry;null===e.boundingSphere&&(e.boundingSphere=new iK,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let t=e.attributes.position,i=e.boundingSphere.center;_p.setFromBufferAttribute(t),_p.getCenter(i),e.boundingSphere.radius=i.distanceTo(_p.max),isNaN(e.boundingSphere.radius),_p.getSize(_f);let r={width:_f.x,height:_f.y,depth:_f.z};return this.userData.parameters=r,r}static build(e,t,i,r){let a,o,l,h=e?.phongAngle??35;!1===i&&(h=-1),t&&(_u.free_bvh(t),_u.free_subdivision_surface(t));try{a=_y.allocate(e,r)}catch{a=_y.allocate({positionWASM:_m,indexWASM:_g,verticesPerFaceWASM:_v},r)}if(_u.set_destination_refinement_level(a,0),o=_y.buildLevel(a,!0,h),e.subdivisions>0)try{_u.set_destination_refinement_level(a,e.subdivisions),l=_y.buildLevel(a,!1,h)}catch{try{_u.set_destination_refinement_level(a,e.subdivisions-1),l=_
3151y.buildLevel(a,!1,h)}catch{l=null}}else l=null;return{subdivPointer:a,originalGeometry:o,subdividedGeometry:l}}static primitiveToQuads(e,t,i){let r,a,o,l,h;e.widthSegments>16&&(e.widthSegments=16),e.heightSegments>16&&(e.heightSegments=16),e.depthSegments>16&&(e.depthSegments=16),e.radialSegments>16&&(e.radialSegments=16),"DodecahedronGeometry"===e.type&&(e.detail=0);let c=void 0!==e.shape||void 0!==e.path?t.geometry:_l(e,i,!1,t),d;if(d="TorusGeometry"===e.type&&e.arc===2*Math.PI?c.getClosedTorusIndicesForBooleanOrSubdiv():c.getIndex(),{positions:r,triIndices:l}=_b(c.getAttribute("position"),d),"CylinderGeometry"===e.type&&0===e.cornerRadius&&0===e.hollow&&!1===e.openEnded){let t=e.radialSegments*e.heightSegments*6,i=t+3*e.radialSegments;h=[t,i]}return{indices:a,verticesPerFace:o}=_M(r,l,c,h),{positions:r,indices:a,verticesPerFace:o}}static allocate(e,t){let i,r,a,o,l=[],h=[];e.positionWASM&&e.positionWASM.length>0?(r=e.positionWASM,a=e.indexWASM,o=e.verticesPerFaceWASM):(r=_m,a=_g,o=_v);let c=r.length,d=a.length,p=o.length,f=r.length+l.length+h.length,m=a.length+o.length,g=f*Float32Array.BYTES_PER_ELEMENT+m*Uint32Array.BYTES_PER_ELEMENT,v=f*Float32Array.BYTES_PER_ELEMENT,y=_u._malloc(g),x=new Float32Array(_u.HEAPF32.buffer,y,f),b=new Uint32Array(_u.HEAPU32.buffer,y+v,m);x.set(r,0),x.set(l,r.length),x.set(h,r.length+l.length),b.set(a,0),b.set(o,a.length),e?.scaleBaked?.some(e=>1!==e)&&(i=new i6().makeScale(...e.scaleBaked.map(e=>"number"==typeof e?e:1))),t&&(i?i.premultiply(t):i=t);let w=i?_u.alloc_subdivision_surface2(y,c,y+v,d,y+v+a.length*Uint32Array.BYTES_PER_ELEMENT,p,i.elements):_u.alloc_subdivision_surface(y,c,y+v,d,y+v+a.length*Uint32Array.BYTES_PER_ELEMENT,p);return _u._free(y),w}static buildLevel(e,t,i,r,a){let o=a?_u.get_mesh_data2(e,t?_u.Level.CONTROL:_u.Level.REFINED,i,a.elements):_u.get_mesh_data(e,t?_u.Level.CONTROL:_u.Level.REFINED,i),l=_u.HEAPU32.subarray(o>>2,(o>>2)+8),h=l.subarray(4,8),c=0,d=_u.HEAPU32[l[c]>>2],p=_u.HEAPF32.subarray(d>>2,(d>>2)+h[c]);c++;let f=_u.HEAPU32[l[c]>>2],m=_u.HEAPF32.subarray(f>>2,(f>>2)+h[c]);c++;let g=_u.HEAPU32[l[c]>>2],v=_u.HEAPU32.subarray(g>>2,(g>>2)+h[c]);c++;let y=_u.HEAPU32[l[c]>>2],x=_u.HEAPU32.subarray(y>>2,(y>>2)+h[c]);if(c++,void 0===r){let e=new rQ;if(e.setIndex(new rk(x,1)),e.setAttribute("position",new rV(p,3)),e.setAttribute("normal",new rV(m,3)),t){e.setAttribute("faceMap",new rk(v,1));let t=new Float32Array(m.length/3*4).fill(0);e.setAttribute("color",new rN(t,4))}return _u.free_mesh_data(o),e.userData.type="SubdivGeometry",e}r.getAttribute("position").copyArray(p),r.getAttribute("normal").copyArray(m),r.attributes.position.needsUpdate=!0,r.attributes.normal.needsUpdate=!0,_u.free_mesh_data(o)}static freeSubdivPointer(e){_u.free_bvh(e),_u.free_subdivision_surface(e)}static buildControlCageWireframe(e,t,i){let r=_u.get_wireframe_data_for_base_level(e),a=_u.HEAPU32.subarray(r>>2,(r>>2)+4),o=a.subarray(2,4),l=0,h=_u.HEAPU32[a[l]>>2],c=_u.HEAPF32.subarray(h>>2,(h>>2)+o[l]);l++;let d=_u.HEAPU32[a[l]>>2],p=_u.HEAPU32.subarray(d>>2,(d>>2)+o[l]);if(void 0===t){let e=new rQ;e.setAttribute("position",new rV(c,3));let t=new Float32Array(c.length);for(let e=0,r=c.length;e<r;)t[e++]=i.r,t[e++]=i.g,t[e++]=i.b;return e.setAttribute("color",new rN(t,3)),e.setIndex(new rk(p,1)),_u.free_wireframe_data_for_base_level(r),e}t.getAttribute("position").copyArray(c),t.attributes.position.needsUpdate=!0,_u.free_wireframe_data_for_base_level(r)}static updateCollabMesh(e,t,i){let r=0===t;r||_u.set_destination_refinement_level(e,t);let a=i?_u.get_topological_data2(e,r?_u.Level.CONTROL:_u.Level.REFINED,i.elements):_u.get_topological_data(e,r?_u.Level.CONTROL:_u.Level.REFINED),o=_u.HEAPU32.subarray(a>>2,(a>>2)+6),l=o.subarray(3,6),h=0,c=_u.HEAPU32[o[h]>>2],d=new Float32Array(_u.HEAPF32.subarray(c>>2,(c>>2)+l[h]));h++;let p=_u.HEAPU32[o[h]>>2],f=new Uint32Array(_u.HEAPU32.subarray(p>>2,(p>>2)+l[h]));h++;let m=_u.HEAPU32[o[h]>>2],g=new Uint8Array(_u.HEAPU32.subarray(m>>2,(m>>2)+l[h]));return _u.free_topological_data(a),{positions:d,indices:f,verticesPerFace:g}}},_x=["getX","getY","getZ"];function _b(e,t){let i={},r=t?t.count:e.count,a=0,o=[],l=[];for(let h=0;h<r;h++){let r=t?t.getX(h):h,c="";for(let t=0;t<3;t++)c+=`${~~(1e4*e[_x[t]](r))},`;if(c in i)o.push(i[c]);else{for(let t=0;t<3;t++)l.push(e[_x[t]](r));i[c]=a,o.push(a),a++}}let h=[];for(let e=0;e<o.length;e+=3)o[e]===o[e+1]||o[e]===o[e+2]||o[e+1]===o[e+2]||h.push(o[e],o[e+1],o[e+2]);return{positions:l,triIndices:h}}var _w=new iD,_S=new iD,__=new iD,_A=new iD;function _M(e,t,i,r){let a=[],o=[];if(void 0!==i.userData.shape&&0===i.userData.parameters.depth&&0===i.userData.shape.shapeHoles.length){let t=i.userData.shape.extractShapePointsToFlatArray([]),r=i.userData.parameters.spikes;if("EllipseGeometry"===i.userData.type&&r<=24&&r%4==0&&i.userData.parameters.angle>=360){let e=t.length/2/r;t=t.filter((t,i)=>Math.floor(i/2)%e==0)}let l=0;for(let e=0;e<t.length;e+=2)l+=(t[e]-t[(0===e?t.length:e)-2])*(t[e+1]+t[(0===e?t.length:e)-1]);e.length=0;let h=0;if(l<0)for(let i=0;i<t.length;i+=2)e.push(t[i],t[i+1],0),a.push(h++);else for(let i=t.length-2;i>=0;i-=2)e.push(t[i],t[i+1],0),a.push(h++);return o.push(h),{indices:a,verticesPerFace:o}}let l=new Float32Array([i.userData.parameters.depth])[0],h=0;for(;h<t.length;){if(i.useNgonForTopBottomFaceDuringBake){let i=0;if((e[3*t[h]+2]===l||0===e[3*t[h]+2])&&i++,(e[3*t[h+1]+2]===l||0===e[3*t[h+1]+2])&&i++,(e[3*t[h+2]+2]===l||0===e[3*t[h+2]+2])&&i++,3===i)break}if(t[h+1]===t[h+3]&&t[h+2]===t[h+5]||t[h+0]===t[h+3]&&t[h+2]===t[h+4]){_w.set(e[3*t[h]],e[3*t[h]+1],e[3*t[h]+2]),_S.set(e[3*t[h+1]],e[3*t[h+1]+1],e[3*t[h+1]+2]),__.set(e[3*t[h+4]],e[3*t[h+4]+1],e[3*t[h+4]+2]),_A.set(e[3*t[h+5]],e[3*t[h+5]+1],e[3*t[h+5]+2]),_S.sub(_w).normalize(),__.sub(_w).normalize(),_A.sub(_w).normalize();let i=_S.cross(__).dot(_A),l=h;Math.abs(i)>.005||r&&r.some((e,t)=>t%2!=1&&l>
3151=r[t]&&l<r[t+1])?(a.push(t[h],t[h+1],t[h+2]),o.push(3),h+=3):(a.push(t[h],t[h+1],t[h+4],t[h+5]),o.push(4),h+=6)}else a.push(t[h],t[h+1],t[h+2]),o.push(3),h+=3}if(i.useNgonForTopBottomFaceDuringBake){let t=[],r=[],h=0;for(let i=0,a=0;i<e.length;i+=3,a++)0===e[i+2]&&(t.push(a),h++),e[i+2]===l&&r.push(a);if(0===i.userData.parameters.extrudeBevelSize){let e=r[0];r[0]=r[1],r[1]=e}t.reverse(),a.push(...t,...r),o.push(h,h)}return{indices:a,verticesPerFace:o}}var _C={},_E={calcBoolean:()=>_I,calcBooleanTopological:()=>_O,freeMeshSet:()=>_z,getMeshSet:()=>_R,hasOpenEdges:()=>_L,transformMeshSet:()=>_B};for(var _T in _E)tP(_C,_T,{get:_E[_T],enumerable:!0});function _P(e){let t=e.length,i=t*Uint32Array.BYTES_PER_ELEMENT,r=t*Float32Array.BYTES_PER_ELEMENT,a=Number.isInteger(e[0])?i:r,o=A4._malloc(a);return(Number.isInteger(e[0])?new Uint32Array(A4.HEAPU32.buffer,o,t):new Float32Array(A4.HEAPF32.buffer,o,t)).set(e,0),o}function _D(e){switch(e){case 0:return A4.OP.UNION;case 1:return A4.OP.INTERSECTION;case 2:return A4.OP.A_MINUS_B;default:throw Error("Unknown boolean operation "+e)}}function _O(e,t){void 0===A5&&(A5=A4.init_csg());let i=_P(e),r=A4.csg_calc_topological(A5,i,e.length,_D(t));A4._free(i);let a=A4.HEAPU32.subarray(r>>2,(r>>2)+6),o=a.subarray(3,6),l=0,h=A4.HEAPU32[a[l]>>2],c=new Float32Array(A4.HEAPF32.subarray(h>>2,(h>>2)+o[l]));l++;let d=A4.HEAPU32[a[l]>>2],p=new Uint32Array(A4.HEAPU32.subarray(d>>2,(d>>2)+o[l]));l++;let f=A4.HEAPU32[a[l]>>2],m=new Uint8Array(A4.HEAPU32.subarray(f>>2,(f>>2)+o[l]));return A4.free_mesh_data(r),{positions:c,indices:p,verticesPerFace:m}}function _I(e,t,i,r){void 0===A5&&(A5=A4.init_csg());let a=_P(e),o=A4.csg_calc(A5,a,e.length,r,_D(t));A4._free(a);let l=A4.HEAPU32.subarray(o>>2,(o>>2)+5),h=l.subarray(2,5),c=0,d=A4.HEAPU32[l[c]>>2],p=A4.HEAPF32.subarray(d>>2,(d>>2)+h[c]);c++;let f=A4.HEAPU32[l[c]>>2],m=A4.HEAPF32.subarray(f>>2,(f>>2)+h[c]),g=h[++c];i.setAttribute("position",new rV(p,3)),i.setAttribute("normal",new rV(m,3));let v=A4.HEAPF32.subarray((o>>2)+5,(o>>2)+5+6);return null===i.boundingSphere&&(i.boundingSphere=new iK),i.boundingSphere.center.set(v[0],v[1],v[2]),i.boundingSphere.radius=(v[3]**2+v[4]**2+v[5]**2)**.5,i.userData.parameters={width:2*v[3],height:2*v[4],depth:2*v[5]},A4.free_mesh_data(o),g}function _R(e,t,i){let r,a,o;if(void 0===A4)return -1;if(t&&void 0!==e.userData.positions){let t=e.userData;o=t.verticesPerFace.length,r=t.positions,a=Array(t.verticesPerFace.reduce((e,t)=>e+t,0)+o);for(let e=0,i=0,r=0;e<t.verticesPerFace.length;e++){a[r++]=t.verticesPerFace[e];for(let o=0;o<t.verticesPerFace[e];o++)a[r++]=t.indices[i++]}}else({positions:r,faceIndices:a,nFaces:o}=function(e,t,i){let r,a;a="TorusGeometry"===e.userData.parameters.type&&e.userData.parameters.arc===2*Math.PI?e.getClosedTorusIndicesForBooleanOrSubdiv():e.getIndex();let{positions:o,triIndices:l}=_b(e.getAttribute("position"),a),h;if(t&&i){let{indices:t,verticesPerFace:i}=_M(o,l,e);h=i.length,r=[];for(let e=0,a=0;e<h;e++){r.push(i[e]);for(let o=0;o<i[e];o++)r.push(t[a++])}}else{let e=l.length;r=Array(e+e/3),h=0;for(let e=0,t=0;t<r.length;)r[t++]=3,h++,r[t++]=l[e++],r[t++]=l[e++],r[t++]=l[e++]}return{positions:o,faceIndices:r,nFaces:h}}(e,t,i));let l=r.length,h=a.length,c=r.length,d=a.length,p=c*Float32Array.BYTES_PER_ELEMENT+d*Uint32Array.BYTES_PER_ELEMENT,f=c*Float32Array.BYTES_PER_ELEMENT,m=(Uint32Array.BYTES_PER_ELEMENT,A4._malloc(p)),g=new Float32Array(A4.HEAPF32.buffer,m,c),v=new Uint32Array(A4.HEAPU32.buffer,m+f,d);g.set(r,0),v.set(a,0);let y=A4.get_csg_mesh(m,l,m+f,h,o);return A4._free(m),y}function _L(e){return A4.has_open_edges(e)}function _B(e,t){A4.transform_csg_mesh(e,t.elements)}function _z(e){A4.free_csg_mesh(e)}new Promise(e=>{A2=e}).then(e=>A4=e);var _F={ConeGeometry:b4,CubeGeometry:b5,CylinderGeometry:b0,DodecahedronGeometry:b7,EllipseGeometry:w4,HelixGeometry:St,IcosahedronGeometry:Ss,LatheGeometry:Sn,NonParametricGeometry:SC,PolygonGeometry:SE,PyramidGeometry:ST,RectangleGeometry:SI,SphereGeometry:SR,PlaneGeometry:SL,BackdropGeometry:SB,StarGeometry:SF,TextFrameGeometry:SN,TorusGeometry:SU,TorusKnotGeometry:Sk,TriangleGeometry:SV,PathGeometry:S4,VectorGeometry:w2},_N=e=>_F[e.type].create(e);function _U(e){return null!==e&&"booleanOp"in e}var _k=class extends b$(r7){constructor(){super(...arguments),this.booleanMeshSetAddress=-1,this.booleanWasTransformed=!1,this.booleanMatrixInvOld=new i6}updateVisible(e){super.updateVisible(e),this.visible=!_U(this.parent)&&this.visible,_U(this.parent)&&this.parent.invali
vendor: 8,479 bytes, line 3151
3151dateDownstreamBooleanData()}freeBooleanPointer(){-1!==this.booleanMeshSetAddress&&(_C.freeMeshSet(this.booleanMeshSetAddress),this.booleanMeshSetAddress=-1)}invalidateDownstreamBooleanData(e=!1){return e?this.booleanWasTransformed=!0:this.freeBooleanPointer(),_U(this.parent)?this.parent.invalidateDownstreamBooleanData():this}invalidateUpstreamBooleanData(){for(let e of(this.freeBooleanPointer(),this.children))e instanceof _k&&(e.freeBooleanPointer(),_U(e)&&e.invalidateUpstreamBooleanData())}updateTransformState(e,t){let i=super.updateTransformState(e,t);return i&&_U(this.parent)&&this.invalidateDownstreamBooleanData(!0),i}onVariableUpdate(e=!1){super.onVariableUpdate(e),_U(this.parent)&&this.invalidateDownstreamBooleanData(!0)}},_V=new iR;function _j(e,t=0,i=e.count,r,a){let o=1/0,l=1/0,h=1/0,c=-1/0,d=-1/0,p=-1/0;for(let r=t;r<i;r++){let t=e.getX(r),i=e.getY(r),a=e.getZ(r);t<o&&(o=t),i<l&&(l=i),a<h&&(h=a),t>c&&(c=t),i>d&&(d=i),a>p&&(p=a)}_V.min.set(o,l,h),_V.max.set(c,d,p),_V.getCenter(r),_V.getSize(a).multiplyScalar(.5)}var _G=new rQ,_W=new rB,_H=class extends _k{constructor(e,t){super(_G,_W),this.super_Entity(e,t)}updateState(e,t){this.updateState_Entity(e,t)}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?_j(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},_q=class{constructor(e){if(this.hashProperties=void 0,this.isNode=!0,this.shortcuts={},null===_q.uuidContext)throw Error("plz startContext");_q.uuidContext===_q.globalContext?this.uuid="_gid"+_q.uuidContext.nodeContextUuid++:this.uuid="_uid"+_q.uuidContext.nodeContextUuid++,this.type=e,this.name=""}static startContext(e){(null===this.uuidContext||this.uuidContext===_q.globalContext)&&(this.uuidContext=e)}static endContext(e){this.uuidContext,this.uuidContext=null}analyze(e,t){t=t??{},e.analyzing=!0,this.build(e.addFlow(t.slot,t.cache,t.context),"v4"),e.clearVertexNodeCode(),e.clearFragmentNodeCode(),e.removeFlow(),e.analyzing=!1}analyzeAndFlow(e,t,i){return i=i??{},this.analyze(e,i),this.flow(e,t,i)}flow(e,t,i){i=i??{},e.addFlow(i.slot,i.cache,i.context);let r={result:this.build(e,t),code:e.clearNodeCode(),extra:e.context.extra};return e.removeFlow(),r}build(e,t,i){t=t??this.getType(e,t);let r=e.getNodeData(i??this);return e.analyzing&&this.appendDepsNode(e,r,t),-1===e.nodes.indexOf(this)&&e.nodes.push(this),void 0!==this.updateFrame&&-1===e.updaters.indexOf(this)&&e.updaters.push(this),this.generate(e,t,i)}updateFrame(e){}generateReadonly(e,t,i,r,a,o){return""}generate(e,t,i,r,a){return""}parse(e,t,i,r){}appendDepsNode(e,t,i){t.deps=(t.deps||0)+1;let r=e.getTypeLength(i);(r>(t.outputMax||0)||this.getType(e,i))&&(t.outputMax=r,t.output=i)}setName(e){this.name=e}getName(){return this.name}getType(e,t){return"sampler2D"===t||"samplerCube"===t?t:this.type}},_X=_q;_X.globalContext={nodeContextUuid:0},_X.uuidContext=_q.globalContext;var _Y=class{constructor(e){e=e??{},this.name=e.name,this.type=e.type,this.node=e.node,this.size=e.size,this.needsUpdate=e.needsUpdate}get value(){return this.node.value}set value(e){this.node.value=e}},_Q=new class{constructor(){this.nodes={},this.keywords={}}add(e){this.nodes[e.name]=e}addKeyword(e,t,i){i=void 0===i||i,this.keywords[e]={callback:t,cache:i}}remove(e){delete this.nodes[e.name]}removeKeyword(e){delete this.keywords[e]}get(e){return this.nodes[e]}getKeyword(e,t){return this.keywords[e].callback(t)}getKeywordData(e){return this.keywords[e]}contains(e){return void 0!==this.nodes[e]}containsKeyword(e){return void 0!==this.keywords[e]}},_Z=class extends _X{constructor(e,t){super(e),this.scope="",t=t??{},this.shared=void 0===t.shared||t.shared,this.unique=void 0!==t.unique&&t.unique}build(e,t,i,r){if(t=t??this.getType(e),this.getShared(e,t)){let a=this.getUnique(e,t);a&&void 0===this.uuid&&(this.uuid=t8.generateUUID()),i=e.getUUID(i??this.getUUID(),!a);let o=e.getNodeData(i),l=o.output||this.getType(e);if(e.analyzing)return(o.deps||0)>0||this.getLabel()?(this.appendDepsNode(e,o,t),this.generate(e,t,i)):super.build(e,t,i);if(a)return o.name=o.name||super.build(e,t,i),o.name;if(!this.getLabel()&&(!this.getShared(e,l)||e.context.ignoreCache||1===o.deps))return super.build(e,t,i);i=this.getUUID(!1);let h=this.getTemp(e,i);if(h)return e.format(h,l,t);{h=super.generate(e,t,i,o.output,r);let a=this.generate(e,l,i);return e.addNodeCode(h+" = "+a+";"),e.format(h,l,t)}}return super.build(e,t,i)}getShared(e,t){return"sampler2D"!==t&&"samplerCube"!==t&&this.shared}getUnique(e,t){return this.unique}setLabel(e){return this.label=e,this}getLabel(){return this.label}getUUID(e){let t=this.uuid;return"string"==typeof this.scope&&(t=this.scope+"-"+t),t}getTemp(e,t){t=t||this.uuid;let i=e.getVars()[t];return i?i.name:void 0}generate(e,t,i,r,a){return this.getShared(e,t),i=i??this.uuid,e.getTempVar(i,r??this.getType(e),a,this.getLabel()).name}},_K=class extends _Z{constructor(e,t){(t=t??{}).shared=void 0!==t.shared&&t.shared,super(e,t),this.readonly=!1}setReadonly(e){return this.readonly=e,this.hashProperties=this.readonly?["value"]:void 0,this}getReadonly(){return this.readonly}generate(e,t,i,r,a,o){i=e.getUUID(i??this.getUUID()),r=r??this.getType(e);let l=e.getNodeData(i);return this.getReadonly()&&void 0!==this.generateReadonly?this.generateReadonly(e,t,i,r,a,o):e.isShader("vertex")?(l.vertex||(l.vertex=e.createVertexUniform(r,this,a,o,this.getLabel())),e.format(l.vertex.name,r,t)):(l.fragment||(l.fragment=e.createFragmentUniform(r,this,a,o,this.getLabel())),e.format(l.fragment.name,r,t))}},_J=class extends _K{constructor(e=0,t){super("v2"),this.nodeType="Vector2",this.value=e instanceof t9?e:new t9(e,t)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}generateReadonly(e,t,i,r,a,o){return e.format("vec2("+this.value.x+", "+this.value.y+")",r,t)}},_$=class extends _K{constructor(e=0,t,i){super("v3"),this.nodeType="Vector3",this.value=e instanceof iD?e:new iD(e,t,i)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}get z(){return this.value.z}set z(e){this.value.z=e}generateReadonly(e,t,i,r,a,o){return e.format("vec3("+this.value.x+", "+this.value.y+", "+this.value.z+")",r,t)}},_0=class extends iv{constructor(e,t,i,r){super(e,t,i),this.isColorA=!0,this.a=r}setRGBA(e,t,i,r){super.setRGB(e,t,i),this.a=r}copy(e){return super.copy(e),this.a="a"in e?e.a:1,this}clone(){return new this.constructor(this.r,this.g,this.b,this.a)}equals(e){return super.equals(e)&&this.a===e.a}setStyle(e,t="srgb"){let i;if("transparent"===e)return this.setRGBA(0,0,0,0),this;if(i=/^((?:rgb|hsl)a?)\(([^)]*)\)/.exec(e)){let r,a=i[1],o=i[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return this.a="rgba"===a?parseFloat(r[4]):1,super.setStyle(e,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)%\s*,\s*(\d*\.?\d+)%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return this.a="hsla"===a?parseFloat(r[4]):1,super.setStyle(e,t)}}return super.setStyle(e,t)}get x(){return this.r}get y(){return this.g}get z(){return this.b}get w(){return this.a}set x(e){this.r=e}set y(e){this.g=e}set z(e){this.b=e}set w(e){this.a=e}},_1=class extends _K{constructor(e){super("v4"),this.nodeType="Vector4",this.value=e instanceof _0?e:new _0(e.r,e.g,e.b,e.a)}generateReadonly(e,t,i,r,a,o){return e.format("vec4("+this.value.r+", "+this.value.g+", "+this.value.b+", "+this.value.a+")",r,t)}},_2=/^\s*([a-z_0-9]+)\s([a-z_0-9]+)\s*\((.*?)\)/i,_3=/[a-z_0-9]+/gi,_4=class extends _Z{constructor(e,t,i,r,a){super(a),this.src="",this.nodeType="Function",this.useKeywords=!0,this.includes=[],this.extensions={},this.keywords={},this.isMethod=void 0===a,this.isInterface=!1,this.parse(e,t,i,r)}getShared(e,t){return!this.isMethod}getType(e){return e.getTypeByFormat(this.type)}getInputByName(e){if(this.inputs){let t=this.inputs.length;for(;t--;)if(this.inputs[t].name===e)return this.inputs[t]}}getIncludeByName(e){if(this.includes){let t=this.includes.length;for(;t--;)if(this.includes[t].name===e)return this.includes[t]}}generate(e,t,i,r,a){let o,l=0,h=this.src;if(this.includes)for(let t=0;t<this.includes.length;t++)e.include(this.includes[t],this);for(let t in this.extensions)e.extensions[t]=!0;let c=[];for(;o=_3.exec(this.src);)c.push(o);for(let t=0;t<c.length;t++){let i=c[t],r=i[0],a=!this.isMethod||!this.getInputByName(r),o=r;
vendor: 4,712 bytes, lines 3151-3155
3151if(this.keywords[r]||this.useKeywords&&a&&_Q.containsKeyword(r)){let t=this.keywords[r];if(!t){let i=_Q.getKeywordData(r);i.cache&&(t=e.keywords[r]),t=t||_Q.getKeyword(r,e),i.cache&&(e.keywords[r]=t)}o=t.build(e)}r!==o&&"."!==h[i.index+l-1]&&(h=h.substring(0,i.index+l)+o+h.substring(i.index+r.length+l),l+=o.length-r.length),void 0===this.getIncludeByName(o)&&_Q.contains(o)&&e.include(_Q.get(o))}return"source"===t?h:this.isMethod?(this.isInterface||e.include(this,void 0,h),this.name):e.format("( "+h+" )",this.getType(e),t)}parse(e,t,i,r){if(this.src=e||"",this.includes=t??[],this.extensions=i??{},this.keywords=r??{},this.isMethod){let e=_2.exec(this.src);if(this.inputs=[],e&&4==e.length){this.type=e[1],this.name=e[2];let t=e[3].match(_3);if(t){let e=0;for(;e<t.length;){let i=t[e++],r;"in"===i||"out"===i||"inout"===i?r=t[e++]:(r=i,i="");let a=t[e++];this.inputs.push({name:a,type:r,qualifier:i})}}this.isInterface=-1===this.src.indexOf("{")}else this.type="",this.name=""}}},_5=/^([a-z_0-9]+)\s([a-z_0-9]+)\s?\=?\s?(.*?)(\;|$)/i,_6=class extends _Z{constructor(e="",t){super(),this.src="",this.useDefine=!1,this.nodeType="Const",this.parse(e||_6.PI,void 0,void 0,void 0,t)}getType(e){return e.getTypeByFormat(this.type)}parse(e,t,i,r,a){this.src=e||"";let o,l,h="",c=_5.exec(e);this.useDefine=a??"#"===this.src.charAt(0),c&&c.length>1?(l=c[1],o=c[2],h=c[3]):(o=this.src,l="f"),this.name=o,this.type=l,this.value=h}build(e,t){if("source"===t){if(this.value)return this.useDefine?"#define "+this.name+" "+this.value:"const "+this.type+" "+this.name+" = "+this.value+";";if(this.useDefine)return this.src}return e.include(this),e.format(this.name,this.getType(e),t)}generate(e,t,i,r,a){return e.format(this.name,this.getType(e),t)}};_6.PI="PI",_6.PI2="PI2",_6.RECIPROCAL_PI="RECIPROCAL_PI",_6.RECIPROCAL_PI2="RECIPROCAL_PI2",_6.LOG2="LOG2",_6.EPSILON="EPSILON";var _8=RegExp(`^structs*([a-z_0-9]+)s*{s*((.| 3152)*?)}`,"gim"),_9=RegExp("s*(w*?)s*(w*?)(=|;)","gim"),_7=class extends _Z{constructor(e=""){super(),this.inputs=[],this.src="",this.nodeType="Struct",this.parse(e)}getType(e){return e.getTypeByFormat(this.name)}getInputByName(e){let t=this.inputs.length;for(;t--;)if(this.inputs[t].name===e)return this.inputs[t]}generate(e,t,i,r,a){return"source"===t?this.src+";":e.format("( "+this.src+" )",this.getType(e),t)}parse(e=""){this.src=e,this.inputs=[];let t=_8.exec(e);if(t){let e=t[2],i;for(;i=_9.exec(e);)this.inputs.push({type:i[1],name:i[2]});this.name=t[1]}else this.name="";this.type=this.name}},Ae=class extends _Z{constructor(e){super("v2",{shared:!1}),this.nodeType="UV",this.index=e??0}generate(e,t){e.requires.uv[this.index]=!0;let i=this.index>0?this.index+1:"",r=e.isShader("vertex")?"uv"+i:"vUv"+i;return e.format(r,this.getType(e),t)}};_Q.addKeyword("uv",function(){return new Ae}),_Q.addKeyword("uv2",function(){return new Ae(1)});var At=class extends _Z{constructor(e,t){super("v4"),this.nodeType="ColorSpace",this.input=e,this.method=t??At.LINEAR_TO_LINEAR,this.hashProperties=["method"]}static getEncodingComponents(e){switch(e){case 3e3:return["Linear"];case 3001:return["sRGB"];default:return[]}}generate(e,t){let i=this.input.build(e,"v4"),r=this.getType(e),a=At.Nodes[this.method],o=e.include(a);if(o===At.LINEAR_TO_LINEAR)return e.format(i,r,t);if(a.inputs?.length!==2)return e.format(o+"( "+i+" )",r,t);{let a=this.factor.build(e,"f");return e.format(o+"( "+i+", "+a+" )",r,t)}}fromEncoding(e){let t=At.getEncodingComponents(e);this.method="LinearTo"+t[0],this.factor=t[1]}fromDecoding(e){let t=At.getEncodingComponents(e);this.method=t[0]+"ToLinear",this.factor=t[1]}};At.Nodes={LinearToLinear:new _4(["vec4 LinearToLinear( in vec4 value ) {"," return value;","}"].join(` 3153`)),sRGBToLinear:new _4(["vec4 sRGBToLinear( in vec4 value ) {"," return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );","}"].join(` 3154`)),LinearTosRGB:new _4(["vec4 LinearTosRGB( in vec4 value ) {"," return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );","}"].join(` 3155`))},At.LINEAR_TO_LINEAR="LinearToLinear",At.SRGB_TO_LINEAR="sRGBToLinear",At.LINEAR_TO_SRGB="LinearTosRGB";var Ai=class extends _4{constructor(e="",t,i,r,a){super(e,a,r,i,t),this.nodeType="Expression"}},Ar=class extends _K{constructor(e=new i_,t,i,r){super("v4",{shared:!0}),this.nodeType="Texture",this.value=e,this.uv=t??new Ae,this.bias=i,this.project=void 0!==r&&r}getTexture(e,t){return super.generate(e,t,this.value.uuid,"t")}generate(e,t){let i,r;if("sampler2D"===t)return this.getTexture(e,t);
vendor: 9,336 bytes, lines 3155-3230
3155let a=this.getTexture(e,t),o=this.uv.build(e,this.project?"v4":"v2"),l=this.bias?this.bias.build(e,"f"):void 0;void 0===l&&e.context.bias&&(l=e.context.bias.setTexture(this).build(e,"f")),i=this.project?"texture2DProj":l?"tex2DBias":"tex2D",r=l?i+"( "+a+", "+o+", "+l+" )":i+"( "+a+", "+o+" )";let h={include:e.isShader("vertex"),ignoreCache:!0},c=this.getType(e);return e.addContext(h),this.colorSpace=this.colorSpace??new At(new Ai("",c)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(r),r=this.colorSpace.build(e,c),e.removeContext(),e.format(r,c,t)}},As=class extends _K{constructor(e){super("f"),this.nodeType="Float",this.value=e??0}generateReadonly(e,t,i,r,a,o){return e.format(this.value+(this.value%1?"":".0"),r,t)}},Aa=class extends _Z{constructor(e,t){super(),this.inputs=[],this.nodeType="FunctionCall",this.value=e,this.inputs=t??[]}getFunction(){return this.value}getType(e){return this.value.getType(e)}generate(e,t,i,r,a){r=this.getType(e);let o=this.value,l=o.build(e,t)+"( ",h=[];if(o.inputs){for(let t=0;t<o.inputs.length;t++){let i=o.inputs[t],r=this.inputs[t]||this.inputs[i.name];h.push(r.build(e,e.getTypeByFormat(i.type)))}l+=h.join(", ")+" )"}return e.format(l,r,t)}},An=class extends _Z{constructor(e,t,i=An.ADD){super(),this.nodeType="Operator",this.type=e.type,this.a=e,this.b=t,this.op=i}getType(e){let t=this.a.getType(e),i=this.b.getType(e);return e.isTypeMatrix(t)?"v4":e.getTypeLength(i)>e.getTypeLength(t)?i:t}generate(e,t){let i=this.getType(e);this.type=i;let r=this.a.build(e,i),a=this.b.build(e,i);return e.format("( "+r+" "+this.op+" "+a+" )",i,t)}};An.ADD="+",An.SUB="-",An.MUL="*",An.DIV="/";var Ao=class extends _Z{constructor(e,t=Ao.ABS,i,r){super(),this.nodeType="Math",this.a=e,"string"!=typeof t?this.b=t:r=t,"string"!=typeof i?this.c=i:r=i,this.method=r,this.hashProperties=["method"]}getNumInputs(e){switch(this.method){case Ao.MIX:case Ao.CLAMP:case Ao.REFRACT:case Ao.SMOOTHSTEP:case Ao.FACEFORWARD:return 3;case Ao.MIN:case Ao.MAX:case Ao.MOD:case Ao.STEP:case Ao.REFLECT:case Ao.DISTANCE:case Ao.DOT:case Ao.CROSS:case Ao.POW:return 2;default:return 1}}getInputType(e){let t=e.getTypeLength(this.a.getType(e)),i=this.b?e.getTypeLength(this.b.getType(e)):0,r=this.c?e.getTypeLength(this.c.getType(e)):0;return t>i&&t>r?this.a.getType(e):i>r?this.b.getType(e):this.c.getType(e)}getType(e){switch(this.method){case Ao.LENGTH:case Ao.DISTANCE:case Ao.DOT:return"f";case Ao.CROSS:return"v3"}return this.getInputType(e)}generate(e,t){let i,r,a,o=this.a?e.getTypeLength(this.a.getType(e)):0,l=this.b?e.getTypeLength(this.b.getType(e)):0,h=this.c?e.getTypeLength(this.c.getType(e)):0,c=this.getInputType(e),d=this.getType(e);switch(this.type=d,this.method){case Ao.NEGATE:return e.format("( -"+this.a.build(e,c)+" )",c,t);case Ao.INVERT:return e.format("( 1.0 - "+this.a.build(e,c)+" )",c,t);case Ao.CROSS:i=this.a.build(e,"v3"),r=this.b.build(e,"v3");break;case Ao.STEP:i=this.a.build(e,1===o?"f":c),r=this.b.build(e,c);break;case Ao.MIN:case Ao.MAX:case Ao.MOD:i=this.a.build(e,c),r=this.b.build(e,1===l?"f":c);break;case Ao.REFRACT:i=this.a.build(e,c),r=this.b.build(e,c),a=this.c.build(e,"f");break;case Ao.MIX:i=this.a.build(e,c),r=this.b.build(e,c),a=this.c.build(e,1===h?"f":c);break;default:i=this.a.build(e,c),this.b&&(r=this.b.build(e,c)),this.c&&(a=this.c.build(e,c))}let p=[];p.push(i),r&&p.push(r),a&&p.push(a);let f=this.getNumInputs(e);if(p.length!==f)throw Error(`Arguments not match used in "${this.method}". Require ${f}, currently ${p.length}.`);return e.format(this.method+"( "+p.join(", ")+" )",d,t)}};Ao.RAD="radians",Ao.DEG="degrees",Ao.EXP="exp",Ao.EXP2="exp2",Ao.LOG="log",Ao.LOG2="log2",Ao.SQRT="sqrt",Ao.INV_SQRT="inversesqrt",Ao.FLOOR="floor",Ao.CEIL="ceil",Ao.NORMALIZE="normalize",Ao.FRACT="fract",Ao.SATURATE="saturate",Ao.SIN="sin",Ao.COS="cos",Ao.TAN="tan",Ao.ASIN="asin",Ao.ACOS="acos",Ao.ARCTAN="atan",Ao.ABS="abs",Ao.SIGN="sign",Ao.LENGTH="length",Ao.NEGATE="negate",Ao.INVERT="invert",Ao.MIN="min",Ao.MAX="max",Ao.MOD="mod",Ao.STEP="step",Ao.REFLECT="reflect",Ao.DISTANCE="distance",Ao.DOT="dot",Ao.CROSS="cross",Ao.POW="pow",Ao.MIX="mix",Ao.CLAMP="clamp",Ao.REFRACT="refract",Ao.SMOOTHSTEP="smoothstep",Ao.FACEFORWARD="faceforward";var Al=class extends _Z{constructor(e,t,i){super("v4"),this.nodeType="TextureCubeUV",this.value=e,this.uv=t,this.bias=i}bilinearCubeUV(e,t,i,r){let a=new Aa(Al.Nodes.bilinearCubeUV,[t,i,r]);this.colorSpaceTL=this.colorSpaceTL??new At(new Ai("","v4")),this.colorSpaceTL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTL.input.parse(a.build(e)+".tl"),this.colorSpaceTR=this.colorSpaceTR??new At(new Ai("","v4")),this.colorSpaceTR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTR.input.parse(a.build(e)+".tr"),this.colorSpaceBL=this.colorSpaceBL??new At(new Ai("","v4")),this.colorSpaceBL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBL.input.parse(a.build(e)+".bl"),this.colorSpaceBR=this.colorSpaceBR??new At(new Ai("","v4")),this.colorSpaceBR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBR.input.parse(a.build(e)+".br");let o={include:e.isShader("vertex"),ignoreCache:!0};e.addContext(o),this.colorSpaceTLExp=new Ai(this.colorSpaceTL.build(e,"v4"),"v4"),this.colorSpaceTRExp=new Ai(this.colorSpaceTR.build(e,"v4"),"v4"),this.colorSpaceBLExp=new Ai(this.colorSpaceBL.build(e,"v4"),"v4"),this.colorSpaceBRExp=new Ai(this.colorSpaceBR.build(e,"v4"),"v4"),e.removeContext();let l=new Ai("mix( mix( cubeUV_TL, cubeUV_TR, cubeUV.f.x ), mix( cubeUV_BL, cubeUV_BR, cubeUV.f.x ), cubeUV.f.y )","v4");return l.keywords.cubeUV_TL=this.colorSpaceTLExp,l.keywords.cubeUV_TR=this.colorSpaceTRExp,l.keywords.cubeUV_BL=this.colorSpaceBLExp,l.keywords.cubeUV_BR=this.colorSpaceBRExp,l.keywords.cubeUV=a,l}generate(e,t){if(!e.isShader("fragment"))return e.format("vec4( 0.0 )",this.getType(e),t);{let i=this.uv,r=this.bias||e.context.roughness,a=new Ao(new Aa(Al.Nodes.roughnessToMip,[r]),Al.Nodes.m0,Al.Nodes.cubeUV_maxMipLevel,Ao.CLAMP),o=new Ao(a,Ao.FLOOR),l=new Ao(a,Ao.FRACT),h=new Ao(this.bilinearCubeUV(e,this.value,i,o),this.bilinearCubeUV(e,this.value,i,new An(o,new As(1).setReadonly(!0),An.ADD)),l,Ao.MIX);return e.format(h.build(e),"v4",t)}}};eD=new _7(`struct TextureCubeUVData { 3156 vec4 tl; 3157 vec4 tr; 3158 vec4 br; 3159 vec4 bl; 3160 vec2 f; 3161 }`),eO=new _6("float cubeUV_maxMipLevel 8.0",!0),eI=new _6("float cubeUV_minMipLevel 4.0",!0),eR=new _6("float cubeUV_maxTileSize 256.0",!0),eL=new _6("float cubeUV_minTileSize 16.0",!0),(eB=new _4(`float getFace(vec3 direction) { 3162 vec3 absDirection = abs(direction); 3163 float face = -1.0; 3164 if (absDirection.x > absDirection.z) { 3165 if (absDirection.x > absDirection.y) 3166 face = direction.x > 0.0 ? 0.0 : 3.0; 3167 else 3168 face = direction.y > 0.0 ? 1.0 : 4.0; 3169 } else { 3170 if (absDirection.z > absDirection.y) 3171 face = direction.z > 0.0 ? 2.0 : 5.0; 3172 else 3173 face = direction.y > 0.0 ? 1.0 : 4.0; 3174 } 3175 return face; 3176 }`)).useKeywords=!1,(ez=new _4(`vec2 getUV(vec3 direction, float face) { 3177 vec2 uv; 3178 if (face == 0.0) { 3179 uv = vec2(direction.z, direction.y) / abs(direction.x); // pos x 3180 } else if (face == 1.0) { 3181 uv = vec2(-direction.x, -direction.z) / abs(direction.y); // pos y 3182 } else if (face == 2.0) { 3183 uv = vec2(-direction.x, direction.y) / abs(direction.z); // pos z 3184 } else if (face == 3.0) { 3185 uv = vec2(-direction.z, direction.y) / abs(direction.x); // neg x 3186 } else if (face == 4.0) { 3187 uv = vec2(-direction.x, direction.z) / abs(direction.y); // neg y 3188 } else { 3189 uv = vec2(direction.x, direction.y) / abs(direction.z); // neg z 3190 } 3191 return 0.5 * (uv + 1.0); 3192 }`)).useKeywords=!1,(eF=new _4(`TextureCubeUVData bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) { 3193 float face = getFace(direction); 3194 float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0); 3195 mipInt = max(mipInt, cubeUV_minMipLevel); 3196 float faceSize = exp2(mipInt); 3197 float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize); 3198 vec2 uv = getUV(direction, face) * (faceSize - 1.0); 3199 vec2 f = fract(uv); 3200 uv += 0.5 - f; 3201 if (face > 2.0) { 3202 uv.y += faceSize; 3203 face -= 3.0; 3204 } 3205 uv.x += face * faceSize; 3206 if(mipInt < cubeUV_maxMipLevel){ 3207 uv.y += 2.0 * cubeUV_maxTileSize; 3208 } 3209 uv.y += filterInt * 2.0 * cubeUV_minTileSize; 3210 uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize); 3211 uv *= texelSize; 3212 vec4 tl = texture2D(envMap, uv); 3213 uv.x += texelSize; 3214 vec4 tr = texture2D(envMap, uv); 3215 uv.y += texelSize; 3216 vec4 br = texture2D(envMap, uv); 3217 uv.x -= texelSize; 3218 vec4 bl = texture2D(envMap, uv); 3219 return TextureCubeUVData( tl, tr, br, bl, f ); 3220 }`,[eD,eB,ez,eO,eI,eR,eL])).useKeywords=!1,eN=new _6("float r0 1.0",!0),Al.Nodes={bilinearCubeUV:eF,roughnessToMip:new _4(`float roughnessToMip(float roughness) { 3221 float mip = 0.0; 3222 if (roughness >= r1) { 3223 mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0; 3224 } else if (roughness >= r4) { 3225 mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1; 3226 } else if (roughness >= r5) { 3227 mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4; 3228 } else if (roughness >= r6) { 3229 mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5; 3230 } else {
3231 mip = -2.0 * log2(1.16 * roughness);// 1.16 = 1.79^0.25 3232 } 3233 return mip; 3234 }`,[eN,new _6("float v0 0.339",!0),eU=new _6("float m0 -2.0",!0),new _6("float r1 0.8",!0),new _6("float v1 0.276",!0),new _6("float m1 -1.0",!0),new _6("float r4 0.4",!0),new _6("float v4 0.046",!0),new _6("float m4 2.0",!0),new _6("float r5 0.305",!0),new _6("float v5 0.016",!0),new _6("float m5 3.0",!0),new _6("float r6 0.21",!0),new _6("float v6 0.0038",!0),new _6("float m6 4.0",!0)]),m0:eU,cubeUV_maxMipLevel:eO};var Ah=class extends _Z{constructor(e){super("v3"),this.nodeType="Normal",this.scope=e??Ah.VIEW}getShared(){return this.scope===Ah.WORLD}build(e,t,i,r){let a=e.context[this.scope+"Normal"];return a?a.build(e,t,i,r):super.build(e,t,i)}generate(e,t,i,r,a){let o;switch(this.scope){case Ah.VIEW:o=e.isShader("vertex")?"transformedNormal":"geometryNormal";break;case Ah.LOCAL:e.isShader("vertex")?o="objectNormal":(e.requires.normal=!0,o="vObjectNormal");break;case Ah.WORLD:e.isShader("vertex")?o="inverseTransformDirection( transformedNormal, viewMatrix ).xyz":(e.requires.worldNormal=!0,o="vWNormal")}return e.format(o,this.getType(e),t)}};Ah.LOCAL="local",Ah.WORLD="world",Ah.VIEW="view",Ah.NORMAL="normal",_Q.addKeyword("viewNormal",function(){return new Ah(Ah.VIEW)}),_Q.addKeyword("localNormal",function(){return new Ah(Ah.NORMAL)}),_Q.addKeyword("worldNormal",function(){return new Ah(Ah.WORLD)});var Ac=class extends _Z{constructor(e){super("v3"),this.nodeType="Position",this.scope=e??Ac.LOCAL}getType(){return this.scope===Ac.PROJECTION?"v4":this.type}getShader(){switch(this.scope){case Ac.LOCAL:case Ac.WORLD:return!1}return!0}generate(e,t,i,r,a){let o;switch(this.scope){case Ac.LOCAL:e.isShader("vertex")?o="transformed":(e.requires.position=!0,o="vPosition");break;case Ac.WORLD:if(e.isShader("vertex"))return"( modelMatrix * vec4( transformed, 1.0 ) ).xyz";e.requires.worldPosition=!0,o="vWPosition";break;case Ac.VIEW:o=e.isShader("vertex")?"-mvPosition.xyz":"vViewPosition";break;case Ac.PROJECTION:o=e.isShader("vertex")?"( projectionMatrix * modelViewMatrix * vec4( position, 1.0 ) )":"vec4( 0.0 )"}return e.format(o,this.getType(),t)}};Ac.LOCAL="local",Ac.WORLD="world",Ac.VIEW="view",Ac.PROJECTION="projection",_Q.addKeyword("position",function(){return new Ac}),_Q.addKeyword("worldPosition",function(){return new Ac(Ac.WORLD)}),_Q.addKeyword("viewPosition",function(){return new Ac(Ac.VIEW)});var Ad=class extends _Z{constructor(e){super("v3"),this.nodeType="Reflect",this.scope=e??Ad.CUBE}getUnique(e){return!e.context.viewNormal}getType(){return this.scope===Ad.SPHERE?"v2":this.type}generate(e,t){let i=this.getUnique(e);if(!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.type,t);{let r;switch(this.scope){case Ad.VECTOR:{let t=new Ah(Ah.VIEW),a=e.context.roughness,o=t.build(e,"v3"),l=new Ac(Ac.VIEW).build(e,"v3"),h=a?a.build(e,"f"):void 0,c=`reflect( -normalize( ${l} ), ${o} )`;h&&(c=`normalize( mix( ${c}, ${o}, ${h} * ${h} ) )`);let d=`inverseTransformDirection( ${c}, viewMatrix )`;i?(e.addNodeCode(`vec3 reflectVec = ${d};`),r="reflectVec"):r=d;break}case Ad.CUBE:{let t=new Ad(Ad.VECTOR).build(e,"v3"),a="vec3( -"+t+".x, "+t+".yz )";i?(e.addNodeCode(`vec3 reflectCubeVec = ${a};`),r="reflectCubeVec"):r=a;break}case Ad.SPHERE:{let t="normalize( ( viewMatrix * vec4( "+new Ad(Ad.VECTOR).build(e,"v3")+", 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) ).xy * 0.5 + 0.5";i?(e.addNodeCode(`vec2 reflectSphereVec = ${t};`),r="reflectSphereVec"):r=t}}return e.format(r,this.getType(),t)}}};Ad.CUBE="cube",Ad.SPHERE="sphere",Ad.VECTOR="vector";var Au=class extends _Z{constructor(e=new Ar,t,i){super("v4"),this.nodeType="TextureCube",this.value=e,this.radianceNode=new Al(this.value,t??new Ad(Ad.VECTOR),i),this.irradianceNode=new Al(this.value,new Ah(Ah.WORLD),new As(1).setReadonly(!0))}generate(e,t){return e.isShader("fragment")?(e.require("irradiance"),e.context.bias&&e.context.bias.setTexture(this.value),("irradiance"===e.slot?this.irradianceNode:this.radianceNode).build(e,t)):e.format("vec4( 0.0 )",this.getType(e),t)}},Ap=class extends _K{constructor(e=new sd,t,i){super("v4",{shared:!0}),this.nodeType="CubeTexture",this.value=e,this.uv=t??new Ad,this.bias=i}getTexture(e,t){return super.generate(e,t,this.value.uuid,"tc")}generate(e,t){let i;if("samplerCube"===t)return this.getTexture(e,t);let r=this.getTexture(e,t),a=this.uv?.build(e,"v3"),o=this.bias?this.bias.build(e,"f"):void 0;void 0===o&&e.context.bias&&(o=e.context.bias.setTexture(this).build(e,"f")),i=o?"texCubeBias( "+r+", "+a+", "+o+" )":"texCube
3234( "+r+", "+a+" )";let l={include:e.isShader("vertex"),ignoreCache:!0},h=this.getType(e);return e.addContext(l),this.colorSpace=this.colorSpace??new At(new Ai("",h)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(i),i=this.colorSpace.build(e,h),e.removeContext(),e.format(i,h,t)}},Af=` 3235uniform int frameIndex; 3236uniform vec2 resolution; 3237uniform mat4 previousModelViewMatrix; 3238uniform mat4 previousProjectionMatrix; 3239 3240varying vec4 vCurrentPosition; 3241varying vec4 vPreviousPosition; 3242`,Am=` 3243layout(location = 1) out vec4 gVelocity; 3244 3245uniform int frameIndex; 3246uniform vec2 resolution; 3247 3248varying vec4 vCurrentPosition; 3249varying vec4 vPreviousPosition; 3250 3251const vec2 haltonSequence[16] = vec2[16]( 3252vec2( 0.000000,-0.333334), 3253vec2(-0.500000, 0.333334), 3254vec2( 0.500000,-0.777778), 3255vec2(-0.750000,-0.111112), 3256vec2( 0.250000, 0.555556), 3257vec2(-0.250000,-0.555556), 3258vec2( 0.750000, 0.111112), 3259vec2(-0.875000, 0.777778), 3260vec2(0.125000, -0.925926), 3261vec2(-0.375000, -0.259260), 3262vec2(0.625000, 0.407408), 3263vec2(-0.625000, -0.703704), 3264vec2(0.375000, -0.037038), 3265vec2(-0.125000, 0.629630), 3266vec2(0.875000, -0.481482), 3267vec2(-0.937500, 0.185186)); 3268 3269vec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) { 3270 const float goldenAngle = 2.399963f; // radians 3271 float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount)); 3272 float theta = float(sampleIndex) * goldenAngle + angle; 3273 float sine = sin(theta); 3274 float cosine = cos(theta); 3275 return vec2(cosine, sine) * r; 3276} 3277 3278// Derived from the interleaved gradient function from Jimenez 2014 http:goo.gl/eomGso 3279float getNoiseInterleavedGradient(vec2 screenPos) { 3280 vec3 magic = vec3(0.06711056f, 0.00583715f, 52.9829189f); 3281 return fract(magic.z * fract(dot(screenPos, magic.xy))); 3282} 3283 3284`,Ag=` 3285// TODO: This could be generated CPU side and passed to the shader every frame 3286const vec2 haltonSequence[16] = vec2[16]( 3287vec2( 0.000000,-0.333334), 3288vec2(-0.500000, 0.333334), 3289vec2( 0.500000,-0.777778), 3290vec2(-0.750000,-0.111112), 3291vec2( 0.250000, 0.555556), 3292vec2(-0.250000,-0.555556), 3293vec2( 0.750000, 0.111112), 3294vec2(-0.875000, 0.777778), 3295vec2(0.125000, -0.925926), 3296vec2(-0.375000, -0.259260), 3297vec2(0.625000, 0.407408), 3298vec2(-0.625000, -0.703704), 3299vec2(0.375000, -0.037038), 3300vec2(-0.125000, 0.629630), 3301vec2(0.875000, -0.481482), 3302vec2(-0.937500, 0.185186)); 3303 3304// TODO: Pass correct view size 3305vec2 offset = haltonSequence[frameIndex]; 3306offset.x /= resolution.x; 3307offset.y /= resolution.y; 3308 3309vec4 currentPosition = gl_Position; 3310vec4 currentPositionJittered = currentPosition + (vec4(offset.x, offset.y, 0.0, 0.0) * currentPosition.w); 3311 3312// We want to calculate the velocity with unjittered positions 3313// so that things that are not moving get a velocity = 0 3314vCurrentPosition = currentPosition; 3315vPreviousPosition = previousProjectionMatrix * previousModelViewMatrix * vec4(transformed, 1.0); 3316#ifdef OUTLINE_COMPENSATION 3317vPreviousPosition.xy += OUTLINE_COMPENSATION; 3318#endif 3319gl_Position = currentPositionJittered; 3320 3321`,Av=` 3322vec2 oldPos = vPreviousPosition.xy; 3323 oldPos /= vPreviousPosition.w; 3324 oldPos.xy = (oldPos.xy+1.)/2.0; 3325 3326vec2 newPos = vCurrentPosition.xy; 3327 newPos /= vCurrentPosition.w; 3328 newPos.xy = (newPos.xy+1.)/2.0; 3329 3330vec2 velocity = (newPos - oldPos); 3331 3332// Discard fully transparent pixels 3333if (gl_FragColor.a <= 0.0) discard; 3334 3335gVelocity = vec4(velocity, 0.0, 1.0); 3336`,Ay=` 3337layout(location = 1) out vec4 gVelocity; 3338`,Ax=` 3339 // Discard fully transparent pixels 3340 if (gl_FragColor.a <= 0.0) discard; 3341 3342 gVelocity = vec4(0.0, 0.0, 0.0, 1.0); 3343`,Ab=["x","y","z","w"],Aw=["float","vec2","vec3","vec4"],AS={float:"f",vec2:"v2",vec3:"v3",vec4:"v4",mat4:"v4",int:"i",bool:"b","float[]":"f[]","vec4[]":"v4[]"},A_={t:"sampler2D",tc:"samplerCube",b:"bool",i:"int",f:"float",c:"vec3",v2:"vec2",v3:"vec3",v4:"vec4",m3:"mat3",m4:"mat4","f[]":"float[]","v4[]":"vec4[]"},AA=class{constructor(){this.includes={consts:{},functions:{},structs:{}},this.cache="",this.slot="",this.shader="",this.context={},this.needsJitter=!0,this.getIncludesCode=function(){function e(e,t){return e.deps.length-t.deps.length}return function(t,i){let r=this.getIncludes(t,i);if(!r)return"";let a="";r=r.sort(e);for(let e=0;e<r.length;e++)r[e].src&&(a+=r[e].src+` 3344`);return a}}(),this.slots=[],this.caches=[],this.contexts=[],this.keywords={},this.nodeData={},this.fragmentVariables={},this.fragmentParsVariables={},this.vertexParsVariables={},this.requires={uv:[],color:[],transparent:!1,irradiance:!1,position:!1,worldPosition:!1,normal:!1,worldNormal:!1,vWorldViewDir:!1,modelMatrix:!1,viewMatrix:!1,projectionMatrix:!1},this.includes={consts:[],functions:[],structs:[]},this.attributes={}
vendor: 4,744 bytes, lines 3344-3387
3344,this.prefixCode=["#ifdef TEXTURE_LOD_EXT"," #define texCube(a, b) textureCube(a, b)"," #define texCubeBias(a, b, c) textureCubeLodEXT(a, b, c)"," #define tex2D(a, b) texture2D(a, b)"," #define tex2DBias(a, b, c) texture2DLodEXT(a, b, c)","#else"," #define texCube(a, b) textureCube(a, b)"," #define texCubeBias(a, b, c) textureCube(a, b, c)"," #define tex2D(a, b) texture2D(a, b)"," #define tex2DBias(a, b, c) texture2D(a, b, c)","#endif",` 3345 // NOTE: Include Spline's blending modes. This could be part of BlendNode 3346 #define SPE_BLENDING_NORMAL 0 3347 #define SPE_BLENDING_MULTIPLY 1 3348 #define SPE_BLENDING_SCREEN 2 3349 #define SPE_BLENDING_OVERLAY 3 3350 3351 vec3 spe_normalBlend( vec3 a, vec3 b, float alpha ) { 3352 return mix( a, b, alpha ); 3353 } 3354 3355 vec3 spe_multiplyBlend( vec3 a, vec3 b, float alpha ) { 3356 return mix( a, a * b, alpha ); 3357 } 3358 3359 vec3 spe_screenBlend( vec3 a, vec3 b, float alpha ) { 3360 vec3 tmp = 1.0 - ( 1.0 - a ) * ( 1.0 - b ); 3361 return mix( a, tmp, alpha ); 3362 } 3363 3364 vec3 spe_overlayBlend( vec3 a, vec3 b, float alpha ) { 3365 vec3 tmp = mix( 1. - 2. * (1. - a) * (1. - b), 2. * a * b, step( a, vec3(.5) ) ); 3366 return clamp( mix( a, tmp, alpha ), 0.0, 1.0 ); 3367 } 3368 3369 vec3 spe_blend( vec3 a, vec3 b, float alpha, int mode ) { 3370 if ( mode == SPE_BLENDING_NORMAL ) return spe_normalBlend( a, b, alpha ); 3371 else if ( mode == SPE_BLENDING_MULTIPLY ) return spe_multiplyBlend( a, b, alpha ); 3372 else if ( mode == SPE_BLENDING_SCREEN ) return spe_screenBlend( a, b, alpha ); 3373 else if ( mode == SPE_BLENDING_OVERLAY ) return spe_overlayBlend( a, b, alpha ); 3374 return vec3( 1.0 ); 3375 } 3376 `,"#include <packing>","#include <common>"].join(` 3377`),this.parsCode={vertex:["float neighbor_offset = 0.0001;",""].join(` 3378`),fragment:["float accumAlpha = 0.0;",`void accumulateAlpha(float alpha) { 3379 accumAlpha += (1.0 - accumAlpha) * alpha; 3380 }`,""].join(` 3381`)},this.code={vertex:"",fragment:""},this.nodeCode={vertex:"",fragment:""},this.resultCode={vertex:"",fragment:""},this.finalCode={vertex:"",fragment:""},this.inputs={uniforms:{list:[],vertex:[],fragment:[]},arrayUniforms:{list:[],vertex:[],fragment:[]},vars:{varying:[],vertex:[],fragment:[]}},this.defines={},this.uniforms={},this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.updaters=[],this.nodes=[],this.analyzing=!1}build(e,t){this.addVertexParsCode(Af),this.addFragmentParsCode(Am),this.buildShader("vertex",e),this.buildShader("fragment",t);for(let e=0;e<this.requires.uv.length;e++)if(this.requires.uv[e]){let t=e>0?e+1:"";this.addVaryCode("varying vec2 vUv"+t+";"),e>0&&this.addVertexParsCode("attribute vec2 uv"+t+";"),this.addVertexFinalCode("vUv"+t+" = uv"+t+";")}return this.requires.color[0]&&(this.addVaryCode("varying vec4 vColor;"),this.addVertexParsCode("attribute vec4 color;"),this.addVertexFinalCode("vColor = color;")),this.requires.color[1]&&(this.addVaryCode("varying vec4 vColor2;"),this.addVertexParsCode("attribute vec4 color2;"),this.addVertexFinalCode("vColor2 = color2;")),this.requires.position&&(this.addVaryCode("varying vec3 vPosition;"),this.addVertexFinalCode("vPosition = transformed;")),this.requires.worldPosition,this.requires.normal&&(this.addVaryCode("varying vec3 vObjectNormal;"),this.addVertexFinalCode(` 3382 #ifndef SHAPEBLEND 3383 vObjectNormal = normal; 3384 #else 3385 vObjectNormal = objectNormal; 3386 #endif 3387 `)),this.requires.modelMatrix&&this.addFragmentParsCode("uniform mat4 modelMatrix;"),this.requires.viewMatrix&&this.addFragmentParsCode("uniform mat4 viewMatrix;"),this.requires.projectionMatrix&&this.addFragmentParsCode("uniform mat4 projectionMatrix;"),this.requires.worldNormal&&(this.addVaryCode("varying vec3 vWNormal;"),this.addVertexFinalCode("vWNormal = inverseTransformDirection( transformedNormal, viewMatrix ).xyz;")),this.requires.vWorldViewDir&&(this.addVaryCode("varying vec3 vWorldViewDir;"),this.addVertexFinalCode("vWorldViewDir = isPerspectiveMatrix( projectionMatrix ) ? ( (modelMatrix * vec4(position, 1.0)).xyz - cameraPosition ) : vec3( -viewMatrix[0][2], -viewMatrix[1][2], -viewMatrix[2][2] );")),this.needsJitter&&(this.addVertexFinalCode(Ag),this.addFragmentFinalCode(Av)),this}buildShader(e,t){this.resultCode[e]=t.build(this.setShader(e),"v4")}setMaterial(e,t){return this.defines={},this}addFlow(e,t,i){return this.addSlot(e).addCache(t).addContext(i)}removeFlow(){return this.removeSlot().removeCache().removeContext()}addCache(e){return this.cache=e??"",this.caches.push(this.cache),this}removeCache(){return this.caches.pop(),this.cache=this.caches[this.caches.length-1]||"",this}addContext(e){return this.context=Object.assign({},this.context,e),this.context.extra=this.context.extra||{},this.contexts.push(this.context),this}
vendor: 4,493 bytes, lines 3387-3394
3387removeContext(){return this.contexts.pop(),this.context=this.contexts[this.contexts.length-1]||{},this}addSlot(e){return this.slot=e||"",this.slots.push(this.slot),this}removeSlot(){return this.slots.pop(),this.slot=this.slots[this.slots.length-1]||"",this}addFragmentVariable(e,t){void 0===this.fragmentVariables[e]&&(this.addFragmentCode(`${t} ${e};`),this.fragmentVariables[e]="")}addFragmentParsVariable(e,t){void 0===this.fragmentParsVariables[e]&&(this.addFragmentParsCode(`${t} ${e};`),this.fragmentParsVariables[e]="")}addVertexParsVariable(e,t){void 0===this.vertexParsVariables[e]&&(this.addVertexParsCode(`${t} ${e};`),this.vertexParsVariables[e]="")}addVertexCode(e){this.addCode(e,"vertex")}addFragmentCode(e){this.addCode(e,"fragment")}addCode(e,t){this.code[t??this.shader]+=e+` 3388`}addVertexNodeCode(e){this.addNodeCode(e,"vertex")}addFragmentNodeCode(e){this.addNodeCode(e,"fragment")}addNodeCode(e,t){this.nodeCode[t??this.shader]+=e+` 3389`}clearNodeCode(e){e=e??this.shader;let t=this.nodeCode[e];return this.nodeCode[e]="",t}clearVertexNodeCode(){return this.clearNodeCode("vertex")}clearFragmentNodeCode(){return this.clearNodeCode("fragment")}addVertexFinalCode(e){this.addFinalCode(e,"vertex")}addFragmentFinalCode(e){this.addFinalCode(e,"fragment")}addFinalCode(e,t){this.finalCode[t??this.shader]+=e+` 3390`}addVertexParsCode(e){this.addParsCode(e,"vertex")}addFragmentParsCode(e){this.addParsCode(e,"fragment")}addParsCode(e,t){this.parsCode[t??this.shader]+=e+` 3391`}addVaryCode(e){this.addVertexParsCode(e),this.addFragmentParsCode(e)}isCache(e){return -1!==this.caches.indexOf(e)}isSlot(e){return -1!==this.slots.indexOf(e)}define(e,t){this.defines[e]=void 0===t?1:t}require(e){this.requires[e]=!0}isDefined(e){return void 0!==this.defines[e]}getVar(e,t,i,r="varying",a="V",o=""){let l=this.getVars(r),h=l[e];if(!h){let r=l.length;h={name:i||"node"+a+r+(o?"_"+o:""),type:t},l.push(h),l[e]=h}return h}getTempVar(e,t,i,r){return this.getVar(e,t,i,this.shader,"T",r)}getAttribute(e,t){if(!this.attributes[e]){let i=this.getVar(e,t);this.addVertexParsCode("attribute "+t+" "+e+";"),this.addVertexFinalCode(i.name+" = "+e+";"),this.attributes[e]={varying:i,name:e,type:t}}return this.attributes[e]}getCode(e){return[this.prefixCode,this.parsCode[e],this.getVarListCode(this.getVars("varying"),"varying"),this.getVarListCode(this.inputs.uniforms[e],"uniform"),this.getVarListCode(this.inputs.arrayUniforms[e],"uniform"),this.getIncludesCode("consts",e),this.getIncludesCode("structs",e),this.getIncludesCode("functions",e),"void main() {",this.getVarListCode(this.getVars(e)),this.code[e],this.resultCode[e],this.finalCode[e],"}"].join(` 3392`)}getVarListCode(e,t){t=t??"";let i="";for(let r=0,a=e.length;r<a;++r){let a=e[r],o=a.type,l=a.name,h=a.size,c=this.getFormatByType(o);if(void 0===c)throw Error("Node pars "+c+" not found.");c.includes("[]")?i+=t+" "+c.substring(0,c.length-2)+" "+l+`[${h}]; 3393`:i+=t+" "+c+" "+l+`; 3394`}return i}getVars(e){return this.inputs.vars[e??this.shader]}getNodeData(e){let t=e instanceof _X?e.uuid:e;return this.nodeData[t]=this.nodeData[t]||{}}createUniform(e,t,i,r,a,o){if(t.includes("[]")){let l=this.inputs.arrayUniforms,h=l.list.length,c=new _Y({type:t,size:i.size,name:r||"nodeUA"+h+(o?"_"+o:""),node:i,needsUpdate:a});return l.list.push(c),l[e].push(c),l[e][c.name]=c,this.uniforms[c.name]=c,c}{let l=this.inputs.uniforms,h=l.list.length,c=new _Y({type:t,name:r||"nodeU"+h+(o?"_"+o:""),node:i,needsUpdate:a});return l.list.push(c),l[e].push(c),l[e][c.name]=c,this.uniforms[c.name]=c,c}}createVertexUniform(e,t,i,r,a){return this.createUniform("vertex",e,t,i,r,a)}createFragmentUniform(e,t,i,r,a){return this.createUniform("fragment",e,t,i,r,a)}include(e,t,i){let r;if(e="string"==typeof e?_Q.get(e):e,!1===this.context.include)return e.name;e instanceof _4?r=this.includes.functions:e instanceof _6?r=this.includes.consts:e instanceof _7&&(r=this.includes.structs);let a=r[this.shader]=r[this.shader]||[];if(e){let r=a[e.name];if(r||(r=a[e.name]={node:e,deps:[]},a.push(r),r.src=e.build(this,"source")),e instanceof _4&&t&&a[t.name]&&-1===a[t.name].deps.indexOf(e)&&(a[t.name].deps.push(e),e.includes?.length)){let i=0;do this.include(e.includes[i++],t);while(i<e.includes.length)}return i&&(r.src=i),e.name}throw Error("Include not found.")}colorToVectorProperties(e){return e.replace("r","x").replace("g","y").replace("b","z").replace("a","w")}colorToVector(e){return e.replace(/c/g,"v3")}getIncludes(e,t){return this.includes[e][t||this.shader]}
3394getConstructorFromLength(e){return Aw[e-1]}isTypeMatrix(e){return/^m/.test(e)}getTypeLength(e){return"f"===e?1:parseInt(this.colorToVector(e).substr(1))}getTypeFromLength(e){return 1===e?"f":"v"+e}findNode(...e){for(let t=0;t<arguments.length;t++){let i=e[t];if(i?.isNode)return i}}resolve(...e){for(let t=0;t<arguments.length;t++){let i=e[t];if(void 0!==i){if(i.isNode)return i;if(i.isTexture)switch(i.mapping){case 301:case 302:return new Ap(i);case 306:return new Au(new Ar(i));default:return new Ar(i)}if(i.isVector2)return new _J(i);if(i.isVector3)return new _$(i);if(i.isVector4)return new _1(i)}}}format(e,t,i){switch(this.colorToVector(i+" <- "+t)){case"f <- v2":case"f <- v3":case"f <- v4":return e+".x";case"f <- i":case"f <- b":return"float( "+e+" )";case"v2 <- f":return"vec2( "+e+" )";case"v2 <- v3":case"v2 <- v4":return e+".xy";case"v2 <- i":case"v2 <- b":case"v3 <- i":case"v3 <- b":return"vec2( float( "+e+" ) )";case"v3 <- f":return"vec3( "+e+" )";case"v3 <- v2":return"vec3( "+e+", 0.0 )";case"v3 <- v4":return e+".xyz";case"v4 <- f":return"vec4( "+e+" )";case"v4 <- v2":return"vec4( "+e+", 0.0, 1.0 )";case"v4 <- v3":return"vec4( "+e+", 1.0 )";case"v4 <- i":case"v4 <- b":return"vec4( float( "+e+" ) )";case"i <- f":case"i <- b":return"int( "+e+" )";case"i <- v2":case"i <- v3":case"i <- v4":return"int( "+e+".x )";case"b <- f":return"( "+e+" != 0.0 )";case"b <- v2":return"( "+e+" != vec2( 0.0 ) )";case"b <- v3":return"( "+e+" != vec3( 0.0 ) )";case"b <- v4":return"( "+e+" != vec4( 0.0 ) )";case"b <- i":return"( "+e+" != 0 )"}return e}getTypeByFormat(e){return AS[e]||e}getFormatByType(e){return A_[e]||e}getUUID(e,t){return(t=void 0===t||t)&&this.cache&&(e=this.cache+"-"+e),e}getElementByIndex(e){return Ab[e]}getIndexByElement(e){return Ab.indexOf(e)}isShader(e){return this.shader===e}setShader(e){return this.shader=e,this}mergeDefines(e){for(let t in e)this.defines[t]=e[t];return this.defines}mergeUniform(e){for(let t in e)this.uniforms[t]=e[t];return this.uniforms}getTextureEncodingFromMap(e){let t;return e?e.isTexture&&(t=e.encoding):t=3e3,3e3===t&&this.context.gamma&&(t=3001),t}},AM=class extends _K{constructor(e=0,t,i,r){super("c"),this.nodeType="Color",this.value=e instanceof _0?e:new _0(e||0,t,i,r)}setRGBA(e){this.value.setRGBA(e.r,e.g,e.b,e.a)}generate(e,t,i,r,a,o){i=e.getUUID(i??this.getUUID()),r=r??this.getType(e);let l=e.getNodeData(i),h=this.getReadonly()&&void 0!==this.generateReadonly;if(this.alpha){let t=this.alpha.build(e,"f");e.addFragmentNodeCode(`accumAlpha += ( 1.0 - accumAlpha ) * ${t};`)}return h?this.generateReadonly(e,t,i,r,a,o):e.isShader("vertex")?(l.vertex||(l.vertex=e.createVertexUniform(r,this,a,o,this.getLabel())),e.format(l.vertex.name,r,t)):(l.fragment||(l.fragment=e.createFragmentUniform(r,this,a,o,this.getLabel())),e.format(l.fragment.name,r,t))}generateReadonly(e,t,i,r,a,o){return e.format("vec3("+this.value.r+", "+this.value.g+", "+this.value.b+")",r,t)}},AC=class extends _K{constructor(e){super("i"),this.nodeType="Int",this.value=Math.floor(e??0)}generateReadonly(e,t,i,r,a,o){return e.format(this.value.toString(),r,t)}},AE=class extends _K{constructor(e){super("b"),this.nodeType="Bool",this.value=e??!1}generateReadonly(e,t,i,r){return e.format(this.value?"true":"false",r,t)}},AT=class extends _K{constructor(e=1,t){super("f[]"),this.nodeType="FloatArray",this.size=e,this.value=Array.isArray(t)?t:"number"==typeof t?Array(e).fill(t):Array(e).fill(0)}},AP=class extends _K{},AD=class extends AP{constructor(e){super("v3"),this.image=e,this._value=new iD}get value(){return this._value.x=this.image.isVideo?this.image.img.videoWidth??0:this.image.img.width,this._value.y=this.image.isVideo?this.image.img.videoHeight??0:this.image.img.height,this._value}},AO=class extends AP{constructor(e,t,i=1008,r=1006){super("t"),this.image=e,this.wrap=t,this.minFilter=i,this.magFilter=r}get value(){return this.image.getTexture(this.wrap,this.minFilter,this.magFilter)}},AI=class extends _K{constructor(e){super("m3"),this.nodeType="Matrix3",this.value=e??new t7}generateReadonly(e,t,i,r,a,o){return e.format("mat3("+this.value.elements.join(", ")+")",r,t)}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}},AR=class extends _K{constructor(e){super("m4"),this.nodeType="Matrix4",this.value=e??new i6}generateReadonly(e,t,i,r,a,o){return e.format("mat4("+this.value.elements.join(", ")+")",r,t)}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}};function AL(e,t,i,r=0){e.setUvTransform(i[0],i[1],t[0],t[1],0,0,0).premultiply(new t7().makeRotation(r*t8.DEG2RAD))}var AB=class extends AI{constructor(e,t,i=0){super(new t7),this.repeat=e,this.offset=t,this.rotation=i,AL(this.value,e,t,i)}updateMatrix(){AL(this.value,this.repeat,this.offset,this.rotation)}},Az=class extends _K{constructor(e=1,t){super("v4[]"),this.nodeType="Vector4Array",this.size=e,this.value=Array.isArray(t)?t:t instanceof iA?Array(e).fill(t):Array(e).fill(new iA(0))}},AF=class extends _Z{constructor(e,t,i,r){super("v3"),this.nodeType="Blend",this.a=e,this.b=t,this.alpha=i,this.mode=r}generate(e,t){if(!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{let i=[];return i.push(this.a.build(e,"c")),i.push(this.b.build(e,"c")),i.push(this.alpha.build(e,"f")),i.push(this.mode.build(e,"i")),e.format("spe_blend("
3394+i.join(",")+")",this.getType(e),t)}}},AN=class extends _Z{constructor(e,t){super("v3"),this.nodeType="CustomColor",this.color=e,this.alpha=t,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{let i=e.include(AN.Nodes.customColor);e.addFragmentVariable(this.calpha,"float");let r=[];return r.push(this.color.build(e,"v3")),r.push(this.mask?`luminance(${this.mask.build(e,"v3")})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};AN.Nodes={customColor:new _4(`vec3 customColor(vec3 color, float mask, float alpha, out float calpha) { 3395 float lalpha = alpha * mask; 3396 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 3397 accumAlpha += (1.0 - accumAlpha) * lalpha; 3398 3399 return color; 3400 }`)};var AU=class extends _Z{constructor(e,t){super("v3"),this.nodeType="CustomNormal",this.cnormal=e,this.alpha=t,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{let i=e.include(AU.Nodes.customNormal);e.addFragmentVariable(this.calpha,"float");let r=[];return r.push(this.cnormal.build(e,"v3")),r.push("normal"),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};AU.Nodes={customNormal:new _4(`vec3 customNormal(vec3 cnormal, vec3 norm, float mask, float alpha, out float calpha) { 3401 vec3 normal = packNormalToRGB( norm ).rgb; 3402 normal *= step( vec3(0.5), cnormal ); 3403 3404 float lalpha = alpha * mask; 3405 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3406 accumAlpha += ( 1.0 - accumAlpha ) * lalpha; 3407 3408 return normal; 3409 }`)};var Ak=class extends _Z{constructor(e,t,i,r,a,o,l,h,c,d,p,f){super("v3"),this.nodeType="CustomTexture",this.texture=e,this.textureSize=t,this.crop=i,this.projection=r,this.axis=a,this.side=o,this.size=l,this.blending=h,this.mat=c,this.isMask=f,this.alpha=d,this.mode=p,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){e.require("position"),e.require("normal"),e.require("uv"),e.requires.uv=[!0],e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0;let i=`g${this.uuid.toString().replace(/-/g,"")}`,r;switch(this.projection.value){case 3:r=e.include(Ak.Nodes.cylindrical);break;case 2:r=e.include(Ak.Nodes.spherical);break;case 1:let a=["vec3(1.0, 0.0, 0.0)","vec3(0.0, 1.0, 0.0)","vec3(0.0, 0.0, 1.0)"][this.axis.value],o=["zy","xz","xy"][this.axis.value],l=new _4(` 3410 vec3 ${i}_planarTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3411 vec2 projected = (1. + (position.${o})) / 2.; 3412 vec2 uvs = ( mat * vec3( (projected * 2. - 1.) / (size * .5), 1. ) / 2. + 0.5 ).xy; 3413 writeUv = uvs; 3414 3415 vec4 tmp = texture2D( tex, uvs ); 3416 3417 vec3 col = tmp.rgb; 3418 float lalpha = alpha * tmp.a; 3419 ${2===this.side.value?"":`lalpha *= step(0.0, ${1===this.side.value?"-1.0 * ":""}dot(vObjectNormal, ${a}));`} 3420 3421 if ( crop > 0.5 ) { 3422 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3423 lalpha = 0.0; 3424 } 3425 } 3426 3427 lalpha *= mask; 3428 3429 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3430 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3431 3432 return col; 3433 }`);r=e.include(l);break;case 4:r=e.include(Ak.Nodes.triplanar);break;case 0:let h=new _4(Ak.Nodes.uv.src.replace("uvTexture",`${i}_uvTexture`));r=e.include(h);break;default:r=e.include(Ak.Nodes.uv)}e.addFragmentVariable(this.calpha,"float");let c=[];if(c.push("normal"),c.push(this.texture.generate(e,"t")),c.push(this.textureSize.build(e,"v2")),c.push(this.crop.build(e,"f")),c.push(this.mat.build(e,"mat3")),c.push(this.size.build(e,"v2")),c.push(this.blending.build(e,"f")),c.push(this.isMask.build(e,"b")),c.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),c.push(this.alpha.build(e,"f")),c.push(this.mode.build(e,"i")),c.push(this.calpha),4===this.projection.value){let t=`${i}_writeUvs`,r=t+"0",a=t+"1",o=t+"2",l=`${i}_triplanarWeights`;e.addFragmentVariable(r,"vec2"),e.addFragmentVariable(a,"vec2"),e.addFragmentVariable(o,"vec2"),e.addFragmentVariable(l,"vec3"),c.push(r),c.push(a),c.push(o),c.push(l)}else{let t=`${i}_writeUvs`;e.addFragmentVariable(t,"vec2"),c.push(t)}return e.format(r+"("+c.join(",")+")",this.getType(e),t)}};Ak.Nodes={cylindrical:new _4(` 3434vec3 cylindricalTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3435 vec3 posN = normalize(position); 3436 float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415); 3437 float scaledHeight = position.y / (size.y * 0.5); 3438 float v = (scaledHeight / 2.) + .5; 3439 3440 vec2 calculatedUv = vec2(u,v); 3441 vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3442 writeUv = uvs; 3443 3444 vec2 df = fwidth(uvs); 3445 if(df.x > 0.5) df.x = 0.; 3446 3447 #ifdef GL_EXT_shader_texture_lod 3448 vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3449 #else 3450 vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3451 #endif 3452 3453 vec3 col = tmp.rgb;
3454 float lalpha = alpha * tmp.a; 3455 if ( crop > 0.5 ) { 3456 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3457 lalpha = 0.0; 3458 } 3459 } 3460 3461 lalpha *= mask; 3462 3463 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3464 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3465 3466 return col; 3467 } 3468`),spherical:new _4(` 3469vec3 sphericalTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3470 vec3 posN = normalize(vPosition); 3471 float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415); 3472 float v = 0.5 + asin(posN.y) / 3.1415; 3473 3474 vec2 calculatedUv = vec2(u,v); 3475 vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3476 writeUv = uvs; 3477 3478 vec2 df = fwidth(uvs); 3479 if(df.x > 0.5) df.x = 0.; 3480 #ifdef GL_EXT_shader_texture_lod 3481 vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3482 #else 3483 vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y))); 3484 #endif 3485 3486 vec3 col = tmp.rgb; 3487 float lalpha = alpha * tmp.a; 3488 if ( crop > 0.5 ) { 3489 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3490 lalpha = 0.0; 3491 } 3492 } 3493 3494 lalpha *= mask; 3495 3496 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3497 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3498 3499 return col; 3500 } 3501`),uv:new _4(`vec3 uvTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUv) { 3502 vec2 uvs = ( mat * vec3( vUv * 2. - 1., 1. ) / 2. + 0.5 ).xy; 3503 writeUv = uvs; 3504 3505 vec4 tmp = texture2D( tex, uvs ); 3506 3507 vec3 col = tmp.rgb; 3508 3509 float lalpha = alpha * tmp.a; 3510 if ( crop > 0.5 ) { 3511 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 3512 lalpha = 0.0; 3513 } 3514 } 3515 3516 lalpha *= mask; 3517 3518 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 3519 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3520 3521 return col; 3522 }`),triplanar:new _4(`vec3 triplanarTexture(vec3 normal, sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float blending, bool isMask, float mask, float alpha, int mode, out float calpha, out vec2 writeUvs0, out vec2 writeUvs1, out vec2 writeUvs2, out vec3 writeWeights) { 3523 vec3 p = position; 3524 vec2 uv0 = (1.0 + p.xy) / 2.0; 3525 vec2 uv1 = (1.0 + p.zy) / 2.0; 3526 vec2 uv2 = (1.0 + p.xz) / 2.0; 3527 3528 uv0 = (mat * vec3((uv0 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3529 uv1 = (mat * vec3((uv1 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3530 uv2 = (mat * vec3((uv2 * 2.0 - 1.0) / (size * 0.5), 1.0) / 2.0 + 0.5).xy; 3531 3532 // Range from 3 to 128 seems to be good 3533 float exponent = (1.0 - blending) * 125.0 + 3.0; 3534 3535 vec3 n = vObjectNormal; 3536 vec3 weights = abs(normalize(n)); 3537 weights = pow(weights, vec3(exponent)); 3538 weights /= dot(weights, vec3(1.0)); 3539 3540 // Write out all sets of UVs that we generated 3541 writeUvs0 = uv0; 3542 writeUvs1 = uv1; 3543 writeUvs2 = uv2; 3544 writeWeights = weights; 3545 3546 // Derivatives for LOD 3547 vec2 df0 = fwidth(uv0); 3548 vec2 df1 = fwidth(uv1); 3549 vec2 df2 = fwidth(uv2); 3550 if (df0.x > 0.5) df0.x = 0.0; 3551 if (df1.x > 0.5) df1.x = 0.0; 3552 if (df2.x > 0.5) df2.x = 0.0; 3553 3554 #ifdef GL_EXT_shader_texture_lod 3555 vec4 tmp = 3556 texture2DLodEXT(tex, uv0, log2(max(df0.x, df0.y)*min(textureSize.x, textureSize.y))) * weights.z + 3557 texture2DLodEXT(tex, uv1, log2(max(df1.x, df1.y)*min(textureSize.x, textureSize.y))) * weights.x + 3558 texture2DLodEXT(tex, uv2, log2(max(df2.x, df2.y)*min(textureSize.x, textureSize.y))) * weights.y; 3559 #else 3560 vec4 tmp = 3561 textureLod(tex, uv0, log2(max(df0.x, df0.y)*min(textureSize.x, textureSize.y))) * weights.z + 3562 textureLod(tex, uv1, log2(max(df1.x, df1.y)*min(textureSize.x, textureSize.y))) * weights.x + 3563 textureLod(tex, uv2, log2(max(df2.x, df2.y)*min(textureSize.x, textureSize.y))) * weights.y; 3564 #endif 3565 3566 vec3 col = tmp.rgb;
3567 float lalpha = alpha * tmp.a; 3568 3569 // Apply cropping across all 3 planes 3570 if ( crop > 0.5 ) { 3571 if ( uv0.x < 0.0 || uv0.x > 1.0 || uv0.y < 0.0 || uv0.y > 1.0 ) { 3572 lalpha = 0.0; 3573 } 3574 if ( uv1.x < 0.0 || uv1.x > 1.0 || uv1.y < 0.0 || uv1.y > 1.0 ) { 3575 lalpha = 0.0; 3576 } 3577 if ( uv2.x < 0.0 || uv2.x > 1.0 || uv2.y < 0.0 || uv2.y > 1.0 ) { 3578 lalpha = 0.0; 3579 } 3580 } 3581 3582 lalpha *= mask; 3583 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 3584 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3585 3586 return col;//n * 0.5 + 0.5; 3587 } 3588 `)};var AV=class extends _Z{constructor(e,t,i,r,a,o,l,h,c,d,p,f){super("v3"),this.nodeType="Depth",this.gradientType=e,this.smooth=t,this.near=i,this.far=r,this.isVector=a,this.isWorldSpace=o,this.origin=l,this.direction=h,this.colors=c,this.steps=d,this.isMask=f,this.alpha=p,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){let i=`g${this.uuid.toString().replace(/-/g,"")}`,r=new _4(`vec3 ${i}_sdepth(float near, float far, vec3 origin, vec3 direction, vec4 colors[${i}_MAX_COLORS], float steps[${i}_MAX_COLORS], bool isMask, float mask, float alpha, out float calpha) { 3589 vec4 color = colors[0]; 3590 #ifdef ${i}_IS_VECTOR 3591 #ifdef ${i}_LINEAR 3592 #ifdef ${i}_WORLDSPACE 3593 float depth = vectorLinearWorldSpaceDepth(direction, origin, near, far); 3594 #else 3595 float depth = vectorLinearObjectSpaceDepth(direction, origin, near, far); 3596 #endif 3597 #else 3598 #ifdef ${i}_WORLDSPACE 3599 float depth = vectorSphericalWorldSpaceDepth(origin, near, far); 3600 #else 3601 float depth = vectorSphericalObjectSpaceDepth(origin, near, far); 3602 #endif 3603 #endif 3604 #else 3605 float dist = length(vWPosition - cameraPosition); 3606 float depth = ( dist - near ) / ( far - near ); 3607 #endif 3608 3609 3610 float p; 3611 #ifdef ${i}_SMOOTH 3612 for ( int i = 1; i < ${i}_MAX_COLORS; i++ ) { 3613 p = clamp( ( depth - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3614 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 3615 } 3616 #else 3617 for ( int i = 1; i < ${i}_MAX_COLORS; i++ ) { 3618 p = clamp(( depth - steps[i - 1] ) / ( steps[i] - steps[i - 1] ), 0.0, 1.0); 3619 color = mix(color, colors[i], p); 3620 } 3621 #endif 3622 3623 float lalpha = alpha * color.a * mask; 3624 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3625 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3626 3627 return color.rgb; 3628 }`,[AV.Nodes.vectorLinearWorldSpaceDepth,AV.Nodes.vectorLinearObjectSpaceDepth,AV.Nodes.vectorSphericalObjectSpaceDepth,AV.Nodes.vectorSphericalWorldSpaceDepth]);if(!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{e.define(`${i}_MAX_COLORS`,this.colors.value.length),this.smooth.value&&e.define(`${i}_SMOOTH`),this.isVector.value>.5&&e.define(`${i}_IS_VECTOR`),0===this.gradientType.value&&e.define(`${i}_LINEAR`),this.isWorldSpace.value>.5&&e.define(`${i}_WORLDSPACE`),e.require("worldPosition"),e.addFragmentVariable(this.calpha,"float");let a=e.include(r),o=[];return o.push(this.near.build(e,"f")),o.push(this.far.build(e,"f")),o.push(this.origin.build(e,"v3")),o.push(this.direction.build(e,"v3")),o.push(this.colors.build(e,"v4[]")),o.push(this.steps.build(e,"f[]")),o.push(this.isMask.build(e,"b")),o.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),o.push(this.alpha.build(e,"f")),o.push(this.calpha),e.format(a+"("+o.join(",")+")",this.getType(e),t)}}};AV.Nodes={vectorLinearWorldSpaceDepth:new _4(`float vectorLinearWorldSpaceDepth(vec3 direction, vec3 origin, float near, float far) { 3629 vec3 n = normalize(direction); 3630 float dist = (n.x*(vWPosition.x - origin.x) + n.y*(vWPosition.y - origin.y) + n.z*(vWPosition.z - origin.z)); 3631 return ( dist - near ) / ( far - near ); 3632 }`),vectorLinearObjectSpaceDepth:new _4(`float vectorLinearObjectSpaceDepth(vec3 direction, vec3 origin, float near, float far) { 3633 vec3 n = normalize(direction); 3634 float dist = (n.x*(position.x - origin.x) + n.y*(position.y - origin.y) + n.z*(position.z - origin.z)); 3635 return ( dist - near ) / ( far - near ); 3636 }`),vectorSphericalWorldSpaceDepth:new _4(`float vectorSphericalWorldSpaceDepth(vec3 origin, float near, float far) { 3637 float dist = length(vWPosition - origin); 3638 return ( dist - near ) / ( far - near ); 3639 }`),vectorSphericalObjectSpaceDepth:new _4(`float vectorSphericalObjectSpaceDepth(vec3 origin, float near, float far) { 3640 float dist = length(position - origin); 3641 return ( dist - near ) / ( far - near ); 3642 }`)};var Aj=class extends _Z{constructor(e,t,i,r,a,o,l,h){super("v3"),this.nodeType="Fresnel",this.color=e,this.bias=t,this.scale=i,this.intensity=r,this.factor=a,this.isMask=h,this.alpha=o,this.mode=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("vWorldViewDir"),e.require("worldNormal"),!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{e.addFragmentVariable(this.calpha,"float");
3642let i=new _4(`vec3 fresnel(vec3 color, float bias, float scale, float intensity, float factor, bool isMask, float mask, float alpha, int mode, out float calpha) { 3643 float fresnel = bias + scale * pow( abs( factor + dot( normalize( vWorldViewDir ), normalize( vWNormal ) ) ), intensity ); 3644 3645 float lalpha = clamp(fresnel, 0.0, 1.0) * alpha * mask; 3646 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3647 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3648 3649 return color; 3650 }`),r=e.include(i),a=[];return a.push(this.color.build(e,"c")),a.push(this.bias.build(e,"f")),a.push(this.scale.build(e,"f")),a.push(this.intensity.build(e,"f")),a.push(this.factor.build(e,"f")),a.push(this.isMask.build(e,"b")),a.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),a.push(this.alpha.build(e,"f")),a.push(this.mode.build(e,"i")),a.push(this.calpha),e.format(r+"("+a.join(",")+")",this.getType(e),t)}}},AG=class extends _Z{constructor(e,t,i,r,a,o,l,h,c){super("v3"),this.nodeType="Gradient",this.gradientType=e,this.smooth=t,this.colors=i,this.steps=r,this.offset=a,this.morph=o,this.angle=l,this.isMask=c,this.alpha=h,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{e.define("GRAD_MAX",10),e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(AG.Nodes.gradient),r=[];return r.push(this.gradientType.build(e,"i")),r.push(this.smooth.build(e,"b")),r.push(this.colors.build(e,"v4[]")),r.push(this.steps.build(e,"f[]")),r.push(this.offset.build(e,"v2")),r.push(this.morph.build(e,"v2")),r.push(this.angle.build(e,"f")),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};AG.Nodes={gradient:new _4(`vec3 gradient(int gradientType, bool smoothed, vec4 colors[GRAD_MAX], float steps[GRAD_MAX], vec2 offset, vec2 morph, float angle, bool isMask, float mask, float alpha, out float calpha) { 3651 vec4 color = colors[0]; 3652 vec2 m = morph / vUv.xy; 3653 vec2 rot = vec2( 0.5 + m.x, m.y ); 3654 vec2 dt = vec2( 3655 cos( angle ) * rot.x - sin( angle ) * rot.y, 3656 sin( angle ) * rot.x + cos( angle ) * rot.y 3657 ); 3658 vec2 pt = ( vUv - 0.5 + offset ) / 2.0 + dt / 2.0; 3659 float t = dot( pt, dt ) / dot( dt, dt ); 3660 if ( gradientType == 1 ) { 3661 t = distance ( 3662 ( vUv + morph ) * 3.0, 3663 ( vUv + offset ) + 1.0 3664 ) + angle; 3665 } else if ( gradientType == 2 ) { 3666 float polar = atan( 3667 vUv.x + morph.x - 0.5 + offset.x, 3668 vUv.y + morph.y - 0.5 + offset.y 3669 ) * -1.0; 3670 t = fract( ( angle / PI / -2.0 ) + 0.5 * ( polar / PI ) ); 3671 } 3672 3673 float p; 3674 if (smoothed) { 3675 for ( int i = 1; i < GRAD_MAX; i++ ) { 3676 p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3677 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 3678 } 3679 3680 } else { 3681 for ( int i = 1; i < GRAD_MAX; i++ ) { 3682 p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 ); 3683 color = mix(color, colors[i], p); 3684 } 3685 } 3686 3687 float lalpha = alpha * color.a * mask; 3688 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3689 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3690 3691 return color.xyz; 3692 }`)};var AW=class extends _Z{constructor(e,t,i,r,a){super("v3"),this.nodeType="Matcap",this.texture=e,this.isMask=r,this.alpha=t,this.mode=i,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`,this.rotation=a}generate(e,t){if(!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{e.addFragmentVariable(this.calpha,"float");let i=e.include(AW.Nodes.matcap);e.require("normal"),e.requires.normal=!0;let r=[];return r.push(this.texture.generate(e,"t")),r.push("normal"),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.mode.build(e,"i")),r.push(this.calpha),r.push(this.rotation.build(e,"f")),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};
3692AW.Nodes={matcap:new _4(`vec3 matcap(sampler2D matcapTex, vec3 normal, bool isMask, float mask, float alpha, int mode, out float calpha, float rotation) { 3693 vec3 viewDir = normalize( vViewPosition ); 3694 vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); 3695 vec3 y = cross( viewDir, x ); 3696 vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ); 3697 uv = mat2( cos(rotation), sin(rotation), -sin(rotation), cos(rotation) ) * uv; 3698 uv = uv * 0.495 + 0.5; 3699 vec4 matcapColor = texture2D( matcapTex, uv ); 3700 3701 float lalpha = alpha * mask; 3702 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 3703 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 3704 3705 return matcapColor.rgb; 3706 }`)};var AH=(ek=new _4(`vec3 random3(vec3 c) { 3707 float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0))); 3708 vec3 r; 3709 r.z = fract(512.0*j); 3710 j *= .125; 3711 r.x = fract(512.0*j); 3712 j *= .125; 3713 r.y = fract(512.0*j); 3714 return r-0.5; 3715 }`),(eV=new _4(`float simplexFast(vec3 p) { 3716 vec3 s = floor(p + dot(p, vec3(F3))); 3717 mediump vec3 x = p - s + dot(s, vec3(G3)); 3718 mediump vec3 hs = s; 3719 3720 mediump vec3 e = step(vec3(0.0), x - x.yzx); 3721 mediump vec3 i1 = e*(1.0 - e.zxy); 3722 mediump vec3 i2 = 1.0 - e.zxy*(1.0 - e); 3723 3724 mediump vec3 x1 = x - i1 + G3; 3725 mediump vec3 x2 = x - i2 + 2.0*G3; 3726 mediump vec3 x3 = x - 1.0 + 3.0*G3; 3727 3728 mediump vec4 w, d; 3729 3730 w.x = dot(x, x); 3731 w.y = dot(x1, x1); 3732 w.z = dot(x2, x2);
3733 w.w = dot(x3, x3); 3734 3735 w = max(0.6 - w, 0.0); 3736 3737 d.x = dot(random3(hs), x); 3738 d.y = dot(random3(hs + i1), x1); 3739 d.z = dot(random3(hs + i2), x2); 3740 d.w = dot(random3(hs + 1.0), x3); 3741 3742 w *= w; 3743 w *= w; 3744 d *= w; 3745 3746 return dot(d, vec4(52.0)); 3747 }`,[ek])).keywords.F3=new _6("float F3 0.3333333"),eV.keywords.G3=new _6("float G3 0.1666667"),(ej=new _4(`float simplexPrecise(vec3 p) { 3748 vec3 s = floor(p + dot(p, vec3(F3))); 3749 vec3 x = p - s + dot(s, vec3(G3)); 3750 3751 vec3 e = step(vec3(0.0), x - x.yzx); 3752 vec3 i1 = e*(1.0 - e.zxy); 3753 vec3 i2 = 1.0 - e.zxy*(1.0 - e); 3754 3755 vec3 x1 = x - i1 + G3; 3756 vec3 x2 = x - i2 + 2.0*G3; 3757 vec3 x3 = x - 1.0 + 3.0*G3; 3758 3759 vec4 w, d; 3760 3761 w.x = dot(x, x); 3762 w.y = dot(x1, x1); 3763 w.z = dot(x2, x2); 3764 w.w = dot(x3, x3); 3765 3766 w = max(0.6 - w, 0.0); 3767 3768 d.x = dot(random3(s), x); 3769 d.y = dot(random3(s + i1), x1); 3770 d.z = dot(random3(s + i2), x2); 3771 d.w = dot(random3(s + 1.0), x3); 3772 3773 w *= w; 3774 w *= w; 3775 d *= w; 3776 3777 return dot(d, vec4(52.0)); 3778 }`,[ek])).keywords.F3=new _6("float F3 0.3333333"),ej.keywords.G3=new _6("float G3 0.1666667"),eG=new _4(`float simplexFractal(vec3 m) { 3779 mat3 rot1 = mat3(-0.37, 0.36, 0.85,-0.14,-0.93, 0.34,0.92, 0.01,0.4); 3780 mat3 rot2 = mat3(-0.55,-0.39, 0.74, 0.33,-0.91,-0.24,0.77, 0.12,0.63); 3781 mat3 rot3 = mat3(-0.71, 0.52,-0.47,-0.08,-0.72,-0.68,-0.7,-0.45,0.56); 3782 return 0.5333333 * simplexFast(m * rot1) 3783 + 0.2666667 * simplexFast(2.0 * m * rot2) 3784 + 0.1333333 * simplexFast(4.0 * m * rot3) 3785 + 0.0666667 * simplexFast(8.0 * m); 3786 }`,[eV]),eW=new _4("vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}"),eH=new _4("vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}"),eq=new _4(`float simplexAshima(vec3 v) { 3787 const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; 3788 const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); 3789 vec3 i = floor(v + dot(v, C.yyy) ); 3790 vec3 x0 = v - i + dot(i, C.xxx) ; 3791 vec3 g = step(x0.yzx, x0.xyz); 3792 vec3 l = 1.0 - g; 3793 vec3 i1 = min( g.xyz, l.zxy ); 3794 vec3 i2 = max( g.xyz, l.zxy ); 3795 vec3 x1 = x0 - i1 + 1.0 * C.xxx; 3796 vec3 x2 = x0 - i2 + 2.0 * C.xxx; 3797 vec3 x3 = x0 - 1. + 3.0 * C.xxx; 3798 i = mod(i, 289.0 ); 3799 vec4 p = permute( permute( permute( 3800 i.z + vec4(0.0, i1.z, i2.z, 1.0 )) 3801 + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) 3802 + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); 3803 float n_ = 1.0/7.0; // N=7 3804 vec3 ns = n_ * D.wyz - D.xzx; 3805 vec4 j = p - 49.0 * floor(p * ns.z *ns.z); // mod(p,N*N) 3806 vec4 x_ = floor(j * ns.z); 3807 vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) 3808 vec4 x = x_ *ns.x + ns.yyyy; 3809 vec4 y = y_ *ns.x + ns.yyyy; 3810 vec4 h = 1.0 - abs(x) - abs(y); 3811 vec4 b0 = vec4( x.xy, y.xy ); 3812 vec4 b1 = vec4( x.zw, y.zw ); 3813 vec4 s0 = floor(b0)*2.0 + 1.0; 3814 vec4 s1 = floor(b1)*2.0 + 1.0; 3815 vec4 sh = -step(h, vec4(0.0)); 3816 vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; 3817 vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; 3818 vec3 p0 = vec3(a0.xy,h.x); 3819 vec3 p1 = vec3(a0.zw,h.y); 3820 vec3 p2 = vec3(a1.xy,h.z); 3821 vec3 p3 = vec3(a1.zw,h.w); 3822 vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); 3823 p0 *= norm.x; 3824 p1 *= norm.y; 3825 p2 *= norm.z; 3826 p3 *= norm.w; 3827 vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); 3828 m = m * m; 3829 return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), 3830 dot(p2,x2), dot(p3,x3) ) ); 3831 }`,[eW,eH]),eX=new _4("vec4 mod289(vec4 x){return x - floor(x * (1.0 / 289.0)) * 289.0;}"),eY=new _4("vec4 perm(vec4 x){return mod289(((x * 34.0) + 1.0) * x);}",[eX]),eQ=new _4(`float noise(vec3 p){ 3832 vec3 a = floor(p); 3833 vec3 d = p - a; 3834 d = d * d * (3.0 - 2.0 * d); 3835 vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0); 3836 vec4 k1 = perm(b.xyxy); 3837 vec4 k2 = perm(k1.xyxy + b.zzww); 3838 vec4 c = k2 + a.zzzz; 3839 vec4 k3 = perm(c); 3840 vec4 k4 = perm(c + 1.0); 3841 vec4 o1 = fract(k3 * (1.0 / 41.0)); 3842 vec4 o2 = fract(k4 * (1.0 / 41.0)); 3843 vec4 o3 = o2 * d.z + o1 * (1.0 - d.z); 3844 vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x); 3845 return o4.y * d.y + o4.x * (1.0 - d.y); 3846 }`,[eY]),(eZ=new _4(`float fbm(vec3 x) { 3847 float v = 0.0; 3848 float a = 0.5; 3849 vec3 shift = vec3(100); 3850 for (int i = 0; i < NUM_OCTAVES; ++i) { 3851 v += a * noise(x); 3852 x = x * 2.0 + shift; 3853 a *= 0.5; 3854 } 3855 return v; 3856 }`,[eQ])).keywords.NUM_OCTAVES=new _6("int NUM_OCTAVES 5"),eK=new _4("vec3 fade(vec3 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}"),eJ=new _4(`float perlin(vec3 P){ 3857 vec3 Pi0 = floor(P); 3858 vec3 Pi1 = Pi0 + vec3(1.0); 3859 Pi0 = mod(Pi0, 289.0); 3860 Pi1 = mod(Pi1, 289.0); 3861 vec3 Pf0 = fract(P); 3862 vec3 Pf1 = Pf0 - vec3(1.0); 3863 vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); 3864 vec4 iy = vec4(Pi0.yy, Pi1.yy); 3865 vec4 iz0 = Pi0.zzzz; 3866 vec4 iz1 = Pi1.zzzz; 3867 vec4 ixy = permute(permute(ix) + iy); 3868 vec4 ixy0 = permute(ixy + iz0); 3869 vec4 ixy1 = permute(ixy + iz1); 3870 vec4 gx0 = ixy0 / 7.0; 3871 vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5; 3872 gx0 = fract(gx0); 3873 vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); 3874 vec4 sz0 = step(gz0, vec4(0.0)); 3875 gx0 -= sz0 * (step(0.0, gx0) - 0.5); 3876 gy0 -= sz0 * (step(0.0, gy0) - 0.5); 3877 vec4 gx1 = ixy1 / 7.0; 3878 vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5; 3879 gx1 = fract(gx1); 3880 vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); 3881 vec4 sz1 = step(gz1, vec4(0.0)); 3882 gx1 -= sz1 * (step(0.0, gx1) - 0.5); 3883 gy1 -= sz1 * (step(0.0, gy1) - 0.5); 3884 vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); 3885 vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); 3886 vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); 3887 vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); 3888 vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); 3889 vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); 3890 vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); 3891 vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); 3892 vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); 3893 g000 *= norm0.x; 3894 g010 *= norm0.y; 3895 g100 *= norm0.z; 3896 g110 *= norm0.w; 3897 vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); 3898 g001 *= norm1.x; 3899 g011 *= norm1.y; 3900 g101 *= norm1.z; 3901 g111 *= norm1.w; 3902 float n000 = dot(g000, Pf0); 3903 float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); 3904 float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); 3905 float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); 3906 float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); 3907 float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); 3908 float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); 3909 float n111 = dot(g111, Pf1); 3910 vec3 fade_xyz = fade(Pf0); 3911 vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); 3912 vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); 3913 float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); 3914 return 2.2 * n_xyz; 3915 }`,[eW,eH,eK]),e$=new _4(`float hashwithoutsine13(vec3 p3) 3916 { 3917 p3 = fract(p3 * .1031); 3918 p3 += dot(p3, p3.yzx + 33.33); 3919 return fract((p3.x + p3.y) * p3.z); 3920 }`),e0=new _4(`vec3 hashwithoutsine33(vec3 p3) 3921 { 3922 p3 = fract(p3 * vec3(.1031, .1030, .0973)); 3923 p3 += dot(p3, p3.yxz+33.33); 3924 return fract((p3.xxy + p3.yxx)*p3.zyx); 3925 }`),e1=new _4(`float metric(in vec3 p) 3926 { 3927 // L2 3928 return length(p); 3929 3930 // Chebyshev 3931 // vec3 a = abs(p); 3932 // return max(a.x, max(a.y, a.z)); 3933 }`),e2=new _4(`float smin( float a, float b, float k ) 3934 { 3935 float h = smoothstep(0.0, 1.0, 0.5 + 0.5 * (b - a) / k); 3936 float correction = k * h * (1.0 - h); 3937 return mix(b, a, h) - correction; 3938 }`),e3=new _4(`float smax( float a, float b, float k ) 3939 { 3940 float h = smoothstep(1.0, 0.0, 0.5 + 0.5 * (a - b) / k); 3941 float correction = k * h * (1.0 - h); 3942 return mix(a, b, h) + correction; 3943 }`),e4=new _4(`float remap(float value, float input_min, float input_max, float output_min, float output_max) { 3944 // Compute width of each interval 3945 float input_width = input_max - input_min; 3946 float output_width = output_max - output_min; 3947 3948 // Convert input range into a 0-1 range 3949 float scaled = (value - input_min) / input_width; 3950 3951 // Convert the 0-1 range into a value in output range 3952 return output_min + (scaled * output_width); 3953 }
3953`),{simplexFast:eV,simplexPrecise:ej,simplexFractal:eG,simplexAshima:eq,fbm:eZ,perlin:eJ,voronoi:new _4(`float voronoi(in vec3 x, in int style, in float smoothness, in float seed, in int quality) 3954 { 3955 // Integer and fractional parts of this point's coordinates 3956 ivec3 p = ivec3(floor(x)); 3957 vec3 f = fract(x); 3958 3959 // Different variables that we will use to construct noise: 3960 // 3961 // f1: distance to the closest feature point 3962 // f2: distance to the second closest feature point 3963 // e: distance to the closest edge (cell boundary) 3964 // 3965 // We also compute "smooth" versions of all of the above quantites, essentially 3966 // replacing "hard" minimums with "smooth" minimums (described by IQ) 3967 float f1_smooth = 8.0; 3968 float f1 = 8.0; 3969 float f2_smooth = 8.0; 3970 float f2 = 8.0; 3971 float e_smooth = 8.0; 3972 float e = 8.0; 3973 3974 // Variables stored from closest cell 3975 ivec3 mb; 3976 vec3 mr; 3977 3978 int steps = quality; 3979 3980 for (int x = -steps; x <= steps; x++) 3981 for (int y = -steps; y <= steps; y++) 3982 for (int z = -steps; z <= steps; z++) 3983 { 3984 ivec3 b = ivec3(x, y, z); 3985 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 3986 float d = length(r); 3987 3988 f1_smooth = smin(d, f1_smooth, smoothness); 3989 3990 // Store un-smoothed distances too 3991 if (d < f1) 3992 { 3993 f2 = f1; 3994 f1 = d; 3995 3996 mb = ivec3(x, y, z); 3997 mr = r; 3998 } 3999 else if (d < f2) 4000 { 4001 f2 = d; 4002 } 4003 } 4004 4005 // Second pass for edge distance 4006 // skip for styles don't need 4007 if (style != 0 && style != 5 && style != 7) 4008 for (int x = -steps; x <= steps; x++) 4009 for (int y = -steps; y <= steps; y++) 4010 for (int z = -steps; z <= steps; z++) 4011 { 4012 // Start search at the cell that contains the closest point to "x" (found in 1st pass) 4013 ivec3 b = mb + ivec3(x, y, z); 4014 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 4015 float d1 = dot(0.5 * (mr + r), (r - mr)); // IQ normalizes "r - mr" but that breaks things for the smooth version? 4016 float d2 = dot(0.5 * (mr + r), normalize(r - mr)); 4017 4018 e_smooth = smin(d1, e_smooth, smoothness); 4019 4020 e = min(e, d2); 4021 4022 // Also compute a smooth version of F2 in this pass 4023 { 4024 ivec3 b = ivec3(x, y, z); 4025 if (b != mb) 4026 { 4027 vec3 r = vec3(b) + hashwithoutsine33(vec3(p + b) + seed) - f; 4028 float d = length(r); 4029 4030 f2_smooth = smin(d, f2_smooth, smoothness); 4031 } 4032 } 4033 } 4034 4035 // Different visualization modes 4036 if (style == 0) 4037 { 4038 return f1_smooth; 4039 } 4040 if (style == 1) 4041 { 4042 return f2_smooth; 4043 } 4044 if (style == 2) 4045 { 4046 return f2_smooth - f1_smooth; 4047 4048 // "Pebbles" also cool 4049 //return step(0.2, f2_smooth - f1_smooth); 4050 } 4051 if (style == 3) 4052 { 4053 // This one is really good for rock / stone effects 4054 float a = f1; 4055 float b = f2; 4056 float k = 3.0; 4057 float h = max(k - abs(a - b), 0.0) / k; 4058 float final = min(a, b) - h * h * k * (1.0 / 4.0); 4059 return final; 4060 } 4061 if (style == 4) 4062 { 4063 // Some random adjustments to make this style stand out more 4064 return exp(5.0 * e_smooth); 4065 } 4066 if (style == 5) 4067 { 4068 return pow(f1_smooth, 3.0); 4069 } 4070 if (style == 6) 4071 { 4072 const float eps = 0.0125; 4073 4074 // Thicker lines as the user increases the smoothness slider 4075 float thickness = smoothness * 0.25 + eps; 4076 4077 // Blurrier lines as the user increases the smoothness slider 4078 float blur = pow(smoothness, 3.0) * 0.25 + eps; 4079 4080 return smoothstep( 4081 thickness - thickness * blur, 4082 thickness + thickness * blur, 4083 e 4084 ); 4085 } 4086 if (style == 7) 4087 { 4088 return hashwithoutsine13(vec3(p + mb) + seed); 4089 } 4090 } 4091 `,[e$,e0,e1,e2,e3,e4])}),Aq=class extends _Z{constructor(e,t,i,r,a,o,l,h,c,d,p,f,m,g,v,y,x,b,w){super("v3"),this.nodeType="Noise",this.scale=e,this.size=t,this.move=i,this.fA=r,this.fB=a,this.distortion=o,this.colorA=l,this.colorB=h,this.colorC=c,this.colorD=d,this.noiseType=f,this.voronoiStyle=g,this.highCut=v,this.lowCut=y,this.smoothness=x,this.seed=b,this.quality=w,this.isMask=m,this.alpha=p,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t,i,r,a){e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");
4091let o=["simplexFast","simplexFractal","simplexAshima","fbm","perlin","voronoi"][this.noiseType.value],l="voronoi"==o?` 4092 float v = ${o}(st + move, voronoiStyle, smoothness, seed, quality); 4093 4094 // Apply clipping to colors 4095 v = remap(v, lowCut, highCut, 0.0, 1.0); 4096 v = smax(v, 0.0, smoothness * 0.25); 4097 v = smin(v, 1.0, smoothness * 0.25); 4098 4099 // Note that the voronoi mode only uses colors "A" and "C" from the UI 4100 vec4 color = mix(colorA, colorC, v); 4101 `:` 4102 vec3 q = vec3(${o}(st), 4103 ${o}(st + vec3(1.0)), 4104 ${o}(st + vec3(1.0))); 4105 vec3 r = vec3(${o}(st + vec3(distortion, 1.0) * q + vec3(fA, 1.0) + move), 4106 ${o}(st + vec3(distortion, 1.0) * q + vec3(fB, 1.0) + move), 4107 ${o}(st * q)); 4108 float f = ${o}(st + r); 4109 vec4 color; 4110 color = mix(colorA, colorB, clamp((f * f) * 4.0, 0.0, 1.0)); 4111 color = mix(color, colorC, clamp(length(q), 0.0, 1.0)); 4112 color = mix(color, colorD, clamp(length(r.x), 0.0, 1.0)); 4113 `,h=new _4(`vec3 ${o}customNoise(float scale, vec3 size, float move, vec2 fA, vec2 fB, vec2 distortion, vec4 colorA, vec4 colorB, vec4 colorC, vec4 colorD, int voronoiStyle, float highCut, float lowCut, float smoothness, float seed, int quality, bool isMask, float mask, float alpha, out float calpha) 4114 { 4115 // Prevent scale of zero 4116 scale = max(abs(scale), 0.001); 4117 4118 vec3 st = position / size; 4119 st /= scale; 4120 4121 ${l} 4122 4123 float lalpha = alpha * color.a * mask; 4124 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4125 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4126 4127 return clamp(color, 0.0, 1.0).rgb; 4128 }
4128`,[AH.simplexFast,AH.simplexFractal,AH.simplexAshima,AH.fbm,AH.perlin,AH.voronoi]),c=e.include(h),d=[];return d.push(this.scale.build(e,"f")),d.push(this.size.build(e,"v3")),d.push(this.move.build(e,"f")),d.push(this.fA.build(e,"v2")),d.push(this.fB.build(e,"v2")),d.push(this.distortion.build(e,"v2")),d.push(this.colorA.build(e,"v4")),d.push(this.colorB.build(e,"v4")),d.push(this.colorC.build(e,"v4")),d.push(this.colorD.build(e,"v4")),d.push(this.voronoiStyle.build(e,"i")),d.push(this.highCut.build(e,"f")),d.push(this.lowCut.build(e,"f")),d.push(this.smoothness.build(e,"f")),d.push(this.seed.build(e,"f")),d.push(this.quality.build(e,"i")),d.push(this.isMask.build(e,"b")),d.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),d.push(this.alpha.build(e,"f")),d.push(this.calpha),e.format(c+"("+d.join(",")+")",this.getType(e),t)}};Aq.numOctaves=5;var AX=class extends _Z{constructor(e,t,i,r,a,o,l,h,c,d,p,f,m,g,v,y){super("v3"),this.nodeType="Outline",this.firstTime=!0,this.outlineColor=e,this.contourColor=t,this.outlineWidth=i,this.contourWidth=r,this.contourThreshold=a,this.outlineThreshold=o,this.contourFrequency=l,this.outlineSmoothing=h,this.contourDirection=c,this.positionalLines=d,this.compensation=p,this.resolution=f,this.normalMap=m,this.depthMap=g,this.pixelRatio=v,this.alpha=y,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){let i=`g${this.uuid.toString().replace(/-/g,"")}`;if(e.require("vWorldViewDir"),e.require("worldNormal"),e.extensions.derivatives=!0,this.compensation.value&&e.define("OUTLINE_COMPENSATION",`${i}_offset`),this.firstTime){let t=this.outlineWidth.build(e,"f"),r=this.resolution.build(e,"v2"),a=this.compensation.build(e,"b"),o=this.pixelRatio.build(e,"f");e.addVertexParsVariable("randomColor","attribute vec3"),e.addVertexParsVariable("extrudeNormal","attribute vec3"),e.addVertexParsVariable(t,"uniform float"),e.addVertexParsVariable(r,"uniform vec2"),e.addVertexParsVariable(a,"uniform bool"),e.addVertexParsVariable(o,"uniform float"),e.addVertexParsVariable("vID","flat out float"),e.addFragmentParsVariable("vID","flat in float"),e.addVertexFinalCode(` 4129 vID = randomColor.r; 4130 vec2 ${i}_offset = vec2(0.0); 4131 if (${a}) { 4132 vec4 ${i}_clipPosition = projectionMatrix * (modelViewMatrix * vec4(transformed, 1.0)); 4133 // NOTE: For certain shapes, like spheres, we get incorrect extrusion when the 4134 // normals face the camera directly. So we hackily fix this by offsetting the normal 4135 // by a tiny amount. 4136 vec3 ${i}_clipNormal = mat3(projectionMatrix) * (mat3(modelViewMatrix) * extrudeNormal) + 0.0000001; 4137 ${i}_offset = normalize(${i}_clipNormal.xy) / ${r} * (${t} / 2.0) * ${i}_clipPosition.w * 2.0 * ${o}; 4138 ${i}_clipPosition.xy += ${i}_offset; 4139 // TODO(MAX): To handle multiple outline layers, we only want to extrude 4140 // if this offset is the biggest of all the potential offsets 4141 gl_Position = ${i}_clipPosition; 4142 } 4143 `)}if(!e.isShader("fragment"))return"";{e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(AX.Nodes.outline),r=[];return r.push(this.outlineColor.build(e,"c")),r.push(this.contourColor.build(e,"c")),r.push(this.outlineWidth.build(e,"f")),r.push(this.contourWidth.build(e,"f")),r.push(this.contourThreshold.build(e,"f")),r.push(this.outlineThreshold.build(e,"f")),r.push(this.contourFrequency.build(e,"f")),r.push(this.outlineSmoothing.build(e,"f")),r.push(this.contourDirection.build(e,"v3")),r.push(this.positionalLines.build(e,"b")),r.push(this.resolution.build(e,"v2")),r.push(this.normalMap.getTexture(e,"t")),r.push(this.depthMap.getTexture(e,"t")),r.push(this.pixelRatio.build(e,"f")),r.push(this.compensation.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),this.firstTime=!this.firstTime,e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};e5=new _4(` 4144float sobelSample(sampler2D t, sampler2D d, vec2 uv, vec2 resolution, float outlineWidth, float pixelRatio) 4145{ 4146 vec2 halton = haltonSequence[frameIndex]; 4147 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 4148 float temporalAngle = temporalOffset * PI2; 4149 4150 vec2 texelSize = (vec2(1.0) / resolution); 4151 vec2 offsetSize = texelSize * outlineWidth * pixelRatio; 4152 4153 vec2 uvSamples[9]; 4154 vec4 normalSamples[9]; 4155 4156 uvSamples[0] = uv + vec2( -offsetSize.x, -offsetSize.y) + (vogelDiskSample(0, 9, temporalAngle) * texelSize); 4157 uvSamples[1] = uv + vec2(0.0, -offsetSize.y) + (vogelDiskSample(1, 9, temporalAngle) * texelSize); 4158 uvSamples[2] = uv + vec2( offsetSize.x, -offsetSize.y) + (vogelDiskSample(2, 9, temporalAngle) * texelSize);
4159 uvSamples[3] = uv + vec2( -offsetSize.x, 0.0) + (vogelDiskSample(3, 9, temporalAngle) * texelSize); 4160 uvSamples[4] = uv; 4161 uvSamples[5] = uv + vec2( offsetSize.x, 0.0) + (vogelDiskSample(5, 9, temporalAngle) * texelSize); 4162 uvSamples[6] = uv + vec2( -offsetSize.x, offsetSize.y) + (vogelDiskSample(6, 9, temporalAngle) * texelSize); 4163 uvSamples[7] = uv + vec2(0.0, offsetSize.y) + (vogelDiskSample(7, 9, temporalAngle) * texelSize); 4164 uvSamples[8] = uv + vec2( offsetSize.x, offsetSize.y) + (vogelDiskSample(8, 9, temporalAngle) * texelSize); 4165 4166 4167 normalSamples[0] = texture2D(t, uvSamples[0]); 4168 normalSamples[1] = texture2D(t, uvSamples[1]); 4169 normalSamples[2] = texture2D(t, uvSamples[2]); 4170 normalSamples[3] = texture2D(t, uvSamples[3]); 4171 normalSamples[4] = texture2D(t, uvSamples[4]); 4172 normalSamples[5] = texture2D(t, uvSamples[5]); 4173 normalSamples[6] = texture2D(t, uvSamples[6]); 4174 normalSamples[7] = texture2D(t, uvSamples[7]); 4175 normalSamples[8] = texture2D(t, uvSamples[8]); 4176 4177 float depthBias = 0.0001; 4178 // TODO(MAX): Can we somehow reduce the number of conditionals here with MATH?! 4179 if (normalSamples[0].a != vID && normalSamples[0].a != 0.0) { 4180 float depthAtSample = texture2D(d, uvSamples[0]).r + depthBias; 4181 if (gl_FragCoord.z > depthAtSample) { 4182 return 0.0; 4183 } 4184 } 4185 4186 if (normalSamples[1].a != vID && normalSamples[1].a != 0.0) { 4187 float depthAtSample = texture2D(d, uvSamples[1]).r + depthBias; 4188 if (gl_FragCoord.z > depthAtSample) { 4189 return 0.0; 4190 } 4191 } 4192 4193 if (normalSamples[2].a != vID && normalSamples[2].a != 0.0) { 4194 float depthAtSample = texture2D(d, uvSamples[2]).r + depthBias; 4195 if (gl_FragCoord.z > depthAtSample) { 4196 return 0.0; 4197 } 4198 } 4199 4200 if (normalSamples[3].a != vID && normalSamples[3].a != 0.0) { 4201 float depthAtSample = texture2D(d, uvSamples[3]).r + depthBias; 4202 if (gl_FragCoord.z > depthAtSample) { 4203 return 0.0; 4204 } 4205 } 4206 4207 4208 if (normalSamples[4].a != vID && normalSamples[4].a != 0.0) { 4209 float depthAtSample = texture2D(d, uvSamples[4]).r + depthBias; 4210 if (gl_FragCoord.z > depthAtSample) { 4211 return 0.0; 4212 } 4213 } 4214 4215 if (normalSamples[5].a != vID && normalSamples[5].a != 0.0) { 4216 float depthAtSample = texture2D(d, uvSamples[5]).r + depthBias; 4217 if (gl_FragCoord.z > depthAtSample) { 4218 return 0.0; 4219 } 4220 } 4221 4222 if (normalSamples[6].a != vID && normalSamples[6].a != 0.0) { 4223 float depthAtSample = texture2D(d, uvSamples[6]).r + depthBias; 4224 if (gl_FragCoord.z > depthAtSample) { 4225 return 0.0; 4226 } 4227 } 4228 4229 if (normalSamples[7].a != vID && normalSamples[7].a != 0.0) { 4230 float depthAtSample = texture2D(d, uvSamples[7]).r + depthBias; 4231 if (gl_FragCoord.z > depthAtSample) { 4232 return 0.0; 4233 } 4234 } 4235 4236 if (normalSamples[8].a != vID && normalSamples[8].a != 0.0) { 4237 float depthAtSample = texture2D(d, uvSamples[8]).r + depthBias; 4238 if (gl_FragCoord.z > depthAtSample) { 4239 return 0.0; 4240 } 4241 } 4242 4243 vec3 sobel_edge_h = normalSamples[2].rgb + (2.0*normalSamples[5].rgb) + normalSamples[8].rgb - (normalSamples[0].rgb + (2.0*normalSamples[3].rgb) + normalSamples[6].rgb); 4244 vec3 sobel_edge_v = normalSamples[0].rgb + (2.0*normalSamples[1].rgb) + normalSamples[2].rgb - (normalSamples[6].rgb + (2.0*normalSamples[7].rgb) + normalSamples[8].rgb); 4245 4246 float edgeNormal = sqrt(dot(sobel_edge_h, sobel_edge_h) + dot(sobel_edge_v, sobel_edge_v)); 4247 return edgeNormal; 4248} 4249`),AX.Nodes={outline:new _4(`vec3 outline(vec3 outlineColor, vec3 contourColor, float outlineWidth, float contourWidth, float outlineThreshold, float contourThreshold, float outlineSmoothing, float contourFrequency, vec3 contourDirection, bool positionalLines, vec2 resolution, sampler2D normalMap, sampler2D depthMap, float pixelRatio, bool compensation, float mask, float alpha, out float calpha) { 4250 vec3 result = outlineColor; 4251 float resultAlpha = 0.0; 4252 4253 vec3 N = normalize(vWNormal); 4254 vec2 nuv = (gl_FragCoord.xy / resolution); 4255 float sobelSample = compensation ? sobelSample(normalMap, depthMap, nuv, resolution, outlineWidth / 2., pixelRatio) : sobelSample(normalMap, depthMap, nuv, resolution, outlineWidth, pixelRatio); 4256 resultAlpha = smoothstep(outlineThreshold - outlineSmoothing, outlineThreshold + outlineSmoothing, sobelSample); 4257 4258 //resultAlpha = 1.0; 4259 //result = vec3(sobelSample); 4260 4261 float t = 1.0 - contourThreshold; 4262 if(positionalLines) { 4263 vec3 NDir = position * contourDirection; 4264 float NT = NDir.x + NDir.y + NDir.z; 4265 float f = fract(NT * contourFrequency * 0.01); 4266 float df = fwidth(NT * contourFrequency); 4267 4268 float g = smoothstep(df * (contourWidth * 0.01), df * (contourWidth * 0.01 * 2.0), f); 4269 if (g < 1.0 && resultAlpha == 0.0) { 4270 result = contourColor; 4271 resultAlpha = 1.0; 4272 } 4273 } 4274 else { 4275 vec3 NDir = N * contourDirection; 4276 float NT = NDir.x + NDir.y + NDir.z; 4277 float df = fwidth(NT * contourThreshold); 4278 float f = sin(NT * 1.0 * contourFrequency); 4279 float g = smoothstep(0.0, df * contourWidth, 1.0 - f); 4280 4281 if (df > (t * 0.5) && g < 1.0 && resultAlpha == 0.0) { 4282 result = contourColor; 4283 resultAlpha = 1.0 - g; 4284 } 4285 } 4286
4287 float lalpha = alpha * resultAlpha * mask; 4288 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 4289 accumAlpha += ( 1.0 - accumAlpha ) * lalpha; 4290 4291 return result; 4292 }`,[e5])};var AY=class extends _Z{constructor(e,t,i,r,a,o,l,h,c,d,p,f,m,g,v,y,x,b){super("v3"),this.nodeType="Pattern",this.style=e,this.projection=t,this.axis=i,this.blending=r,this.offset=a,this.colorA=o,this.colorB=l,this.frequency=h,this.size=c,this.variation=d,this.smoothness=p,this.zigzag=f,this.rotation=m,this.vertical=g,this.horizontal=v,this.sides=y,this.isMask=b,this.alpha=x,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(!e.isShader("fragment"))return e.format("vec3(0.0)",this.getType(e),t);{let i;switch(e.require("position"),e.require("uv"),e.requires.uv=[!0],e.require("normal"),e.requires.normal=!0,e.addFragmentVariable(this.calpha,"float"),this.style.value){case 0:default:i="circle";break;case 1:i="ring";break;case 2:i="polygon";break;case 3:i="xcross";break;case 4:i="diamond";break;case 5:i="checkerboard";break;case 6:i="line";break;case 7:i="wave"}let r=`g${this.uuid.toString().replace(/-/g,"")}`,a=new _4(`float hashwithoutsine12(vec2 p) 4293 { 4294 vec3 p3 = fract(vec3(p.xyx) * .1031); 4295 p3 += dot(p3, p3.yzx + 33.33); 4296 return fract((p3.x + p3.y) * p3.z); 4297 }`),o=new _4(`vec2 rotate_uv(in vec2 uv, float a, bool repeat) 4298 { 4299 const float mid = 0.5; 4300 float radians = a * (PI / 180.0); 4301 vec2 rotated = vec2( 4302 cos(radians) * (uv.x - mid) + sin(radians) * (uv.y - mid) + mid, 4303 cos(radians) * (uv.y - mid) - sin(radians) * (uv.x - mid) + mid 4304 ); 4305 return repeat ? fract(rotated): rotated; 4306 }`),l="";if(4===this.projection.value){let e=2===this.style.value?`${i}(uv0, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv0, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,t=2===this.style.value?`${i}(uv1, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv1, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,r=2===this.style.value?`${i}(uv2, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(uv2, frequency, size, variation, smoothness_remapped, zigzag, rotation)`;l=` 4307 vec3 p = position; 4308 float factor = 0.0125; 4309 vec2 uv0 = fract(p.xy * factor); 4310 vec2 uv1 = fract(p.zy * factor); 4311 vec2 uv2 = fract(p.xz * factor); 4312 4313 uv0 = rotate_uv(uv0 + offset, rotation, true); 4314 uv1 = rotate_uv(uv1 + offset, rotation, true); 4315 uv2 = rotate_uv(uv2 + offset, rotation, true); 4316 4317 float d0 = ${e}; 4318 float d1 = ${t}; 4319 float d2 = ${r}; 4320 4321 // Range from 3 to 128 seems to be good 4322 float exponent = (1.0 - blending) * 125.0 + 3.0; 4323 4324 vec3 n = vObjectNormal; 4325 vec3 weights = abs(normalize(n)); 4326 weights = pow(weights, vec3(exponent)); 4327 weights /= dot(weights, vec3(1.0)); 4328 d0 *= weights.z; 4329 d1 *= weights.x; 4330 d2 *= weights.y; 4331 float draw = d0 + d1 + d2; 4332 4333 vec2 custom_uv = uv0 * weights.z + uv1 * weights.x + uv2 * weights.y; 4334 `}else{let e=2===this.style.value?`${i}(custom_uv, frequency, size, variation, smoothness_remapped, zigzag, rotation, sides)`:`${i}(custom_uv, frequency, size, variation, smoothness_remapped, zigzag, rotation)`,t="";0===this.axis.value?t=`float radius = length(p); 4335 float theta = atan(p.y, p.z); 4336 float phi = acos(p.x / radius);`:1===this.axis.value?t=`float radius = length(p); 4337 float theta = atan(p.x, p.z); 4338 float phi = acos(p.y / radius);`:(this.axis.value,t=`float radius = length(p); 4339 float theta = atan(p.y, p.x); 4340 float phi = acos(p.z / radius);`);let r="";switch(this.projection.value){case 0:r="custom_uv = vUv.st;";break;case 1:case 3:break;case 2:r=` 4341 vec3 p = position; 4342 ${t} 4343 custom_uv = vec2(theta, phi); 4344 custom_uv /= PI; 4345 `}l=` 4346 vec2 custom_uv; 4347 ${r} 4348 4349 custom_uv += offset; 4350 custom_uv = fract(custom_uv); 4351 custom_uv = rotate_uv(custom_uv, rotation, true); 4352 4353 float draw = ${e}; 4354 `}let h=new _4(`vec3 ${r}_pattern(vec3 normal, float blending, int style, vec2 offset, vec4 colorA, vec4 colorB, vec2 frequency, float size, float variation, float smoothness, float zigzag, float rotation, vec2 vertical, vec2 horizontal, int sides, bool isMask, float mask, float alpha, out float calpha) { 4355 const float TWO_PI = PI * 2.0; 4356 float smoothness_remapped = pow(smoothness, 5.0); 4357 4358 ${l} 4359 4360 // Construct final output color 4361 vec4 color = mix(colorA, colorB, draw); 4362 color.a = clamp(color.a, 0.0, 1.0); 4363 4364 // Apply cuts 4365 color.a *= 4366 step(vertical.x, custom_uv.y) * 4367 step(custom_uv.y, vertical.y); 4368 color.a *= 4369 step(horizontal.x, abs(custom_uv.x)) * 4370 step(abs(custom_uv.x), horizontal.y); 4371 4372 // Accumulate alpha
4373 float lalpha = alpha * clamp(color.a, 0.0, 1.0) * mask; 4374 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4375 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4376 4377 return clamp(color, 0.0, 1.0).rgb; 4378 }`,[o,a,AY.DrawFunctions.circle,AY.DrawFunctions.ring,AY.DrawFunctions.polygon,AY.DrawFunctions.cross,AY.DrawFunctions.diamond,AY.DrawFunctions.checkerboard,AY.DrawFunctions.line,AY.DrawFunctions.wave]),c=e.include(h),d=[];return d.push("normal"),d.push(this.blending.build(e,"f")),d.push(this.style.build(e,"i")),d.push(this.offset.build(e,"v2")),d.push(this.colorA.build(e,"v4")),d.push(this.colorB.build(e,"v4")),d.push(this.frequency.build(e,"v2")),d.push(this.size.build(e,"f")),d.push(this.variation.build(e,"f")),d.push(this.smoothness.build(e,"f")),d.push(this.zigzag.build(e,"f")),d.push(this.rotation.build(e,"f")),d.push(this.vertical.build(e,"v2")),d.push(this.horizontal.build(e,"v2")),d.push(this.sides.build(e,"i")),d.push(this.isMask.build(e,"b")),d.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),d.push(this.alpha.build(e,"f")),d.push(this.calpha),e.format(c+"("+d.join(",")+")",this.getType(e),t)}}};e6=new _4(`float hashwithoutsine12(vec2 p) { 4379 vec3 p3 = fract(vec3(p.xyx) * 0.1031); 4380 p3 += dot(p3, p3.yzx + 33.33); 4381 return fract((p3.x + p3.y) * p3.z); 4382 }`),e8=new _4(`vec2 tile_and_center(in vec2 uv, in vec2 frequency, in float variation, in float zigzag, in float rotation) { 4383 // Create tiles in UV-space 4384 uv *= frequency; 4385 4386 // Integer coords 4387 vec2 i = floor(uv); 4388 4389 // Offset every other row based on zigzag param, then compute fractional coords 4390 float row_offset = mod(i.y, 2.0); 4391 uv.x += row_offset * zigzag; 4392 vec2 f = fract(uv); 4393 4394 // Rotate the tile itself: 4395 // const float mid = 0.5; 4396 // f = vec2( 4397 // cos(rotation) * (f.x - mid) + sin(rotation) * (f.y - mid) + mid, 4398 // cos(rotation) * (f.y - mid) - sin(rotation) * (f.x - mid) + mid 4399 // ); 4400 // f = fract(f); 4401 4402 f = f * 2.0 - 1.0; 4403 4404 // Recompute integer coords after shifting - then, random value per tile 4405 i = floor(uv); 4406 float rand = (hashwithoutsine12(i) * 5.0 + 1.0); 4407 float jitter = mix(1.0, rand, variation); 4408 f *= jitter; 4409 4410 return f; 4411 }`,[e6]),e9=new _4(`float circle(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4412 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4413 return smoothstep( 4414 -smoothness, 4415 smoothness, 4416 length(f) - size 4417 ); 4418 }`,[e8]),e7=new _4(`float ring(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4419 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4420 4421 float d = length(f); 4422 const float inner_width = 0.5; 4423 4424 float outer = smoothstep(-smoothness, smoothness, d - size); 4425 float inner = smoothstep(-smoothness, smoothness, d - size * inner_width); 4426 return outer + (1.0 - inner); 4427 }`,[e8]),te=new _4(`float sdf_ngon(in vec2 p, in float r, in int n) { 4428 float an = (PI * 2.0) / float(n); 4429 float he = r * tan(0.5 * an); 4430 4431 // Rotate to first sector 4432 p = -p.yx; 4433 float bn = an * floor((atan(p.y, p.x) + 0.5 * an) / an); 4434 vec2 cs = vec2(cos(bn), sin(bn)); 4435 p = mat2(cs.x, -cs.y, cs.y, cs.x)*p; 4436 4437 // Side of polygon 4438 return length(p - vec2(r, clamp(p.y, -he, he))) * sign(p.x - r); 4439 } 4440 4441 float polygon(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation, in int sides) { 4442 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4443 return smoothstep(-smoothness, smoothness, sdf_ngon(f, size, sides)); 4444 }`,[e8]),tt=new _4(`float sdf_cross(in vec2 p, in vec2 b, float r ) { 4445 p = abs(p);
4446 p = (p.y > p.x) ? p.yx : p.xy; 4447 vec2 q = p - b; 4448 float k = max(q.y, q.x); 4449 vec2 w = (k > 0.0) ? q : vec2(b.y - p.x, -k); 4450 return sign(k) * length(max(w, 0.0)) + r; 4451 } 4452 4453 // Avoid namespace conflicts 4454 float xcross(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4455 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4456 return smoothstep(-smoothness, smoothness, sdf_cross(f, vec2(size, size * 0.25), smoothness)); 4457 }`,[e8]),ti=new _4(`float ndot(vec2 a, vec2 b) { 4458 return a.x*b.x - a.y*b.y; 4459 } 4460 4461 float sdf_diamond(in vec2 p, in vec2 b) { 4462 p = abs(p); 4463 float h = clamp(ndot(b - 2.0 * p, b) / dot(b, b), -1.0, 1.0); 4464 float d = length(p - 0.5 * b * vec2(1.0 - h, 1.0 + h)); 4465 return d * sign(p.x * b.y + p.y * b.x - b.x * b.y); 4466 } 4467 4468 float diamond(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4469 vec2 f = tile_and_center(uv, frequency, variation, zigzag, rotation); 4470 return smoothstep(-smoothness, smoothness, sdf_diamond(f, vec2(size))); 4471 }`,[e8]),tr=new _4(`float checkerboard(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4472 uv *= frequency; 4473 vec2 i = floor(uv); 4474 4475 float offset = mod(i.y, 2.0); 4476 4477 uv.x += offset + zigzag * offset; 4478 float x = floor(uv.x); 4479 4480 return mod(x, 2.0); 4481 }`),ts=new _4(`float line(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4482 vec2 f = tile_and_center(uv, frequency, 0.0, zigzag, rotation); 4483 4484 // Different approach for variation param here 4485 float row = floor(uv * frequency).y; 4486 float rand = hashwithoutsine12(vec2(row)); 4487 float s = mix(size, size * rand, variation); 4488 4489 return smoothstep( 4490 s - smoothness, 4491 s + smoothness, 4492 abs(f.y) 4493 ); 4494 }`,[e8]),AY.DrawFunctions={tileAndCenter:e8,circle:e9,ring:e7,polygon:te,cross:tt,diamond:ti,checkerboard:tr,line:ts,wave:new _4(`// Uses bisection 4495 float udf_cos(in vec2 p, in float a, in float b, in float c, in float d) { 4496 // Convert all data to a primitive cosine wave 4497 p = c * (p - vec2(d, a)); 4498 4499 const float TWO_PI = PI * 2.0; 4500 4501 // Reduce to principal half cycle 4502 p.x = mod(p.x, TWO_PI); 4503 if (p.x > PI) { 4504 p.x = TWO_PI - p.x; 4505 } 4506 4507 // Find zero of derivative (minimize distance) 4508 float xa = 0.0; 4509 float xb = TWO_PI; 4510 4511 // 24 bit precision 4512 for (int i = 0; i < 24; i++) { 4513 float x = 0.5 * (xa + xb); 4514 float y = x - p.x + b * c * sin(x) * (p.y - b * c * cos(x)); 4515 if (y < 0.0) xa = x; 4516 else xb = x; 4517 } 4518 float x = 0.5 * (xa + xb); 4519 4520 // Compute distance 4521 vec2 q = vec2(x, b * c * cos(x)); 4522 return length(p - q) / c; 4523 } 4524 4525 float wave(in vec2 uv, in vec2 frequency, in float size, in float variation, in float smoothness, in float zigzag, in float rotation) { 4526 float repeat = frequency.x; 4527 uv *= repeat; 4528 vec2 i = floor(uv); 4529 float row_offset = mod(i.y, 2.0); 4530 uv.x += row_offset * zigzag; 4531 vec2 f = vec2(uv.x, fract(uv.y)); 4532 4533 // Generalized cosine: y(x) = a + b * cos(cx + d) 4534 const float amplitude = 0.125; 4535 float wave_frequency = frequency.y * 0.1; 4536 float distance_estimate = udf_cos(f, 0.50, amplitude, wave_frequency * (2.0 * PI), 0.0); 4537 4538 // Different approach for variation param here 4539 float rand = hashwithoutsine12(vec2(i.y)); 4540 float s = mix(size, size * rand, variation); 4541 4542 return smoothstep(-smoothness, smoothness, distance_estimate - s * 0.5); 4543 }`)};var AQ=class extends _Z{constructor(e,t,i,r,a,o,l,h){super("v3"),this.nodeType="Rainbow",this.filmThickness=e,this.movement=t,this.wavelengths=i,this.noiseStrength=r,this.noiseScale=a,this.offset=o,this.isMask=h,this.alpha=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("vWorldViewDir"),e.require("worldNormal"),!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let i=e.include(AQ.Nodes.rainbow),r=[];return r.push(this.filmThickness.build(e,"f")),r.push(this.movement.build(e,"f")),r.push(this.wavelengths.build(e,"v3")),r.push(this.noiseStrength.build(e,"f")),r.push(this.noiseScale.build(e,"f")),r.push(this.offset.build(e,"v3")),r.push(this.isMask.build(e,"b")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};ta=new _4(`vec3 attenuation(vec3 wavelengths, float filmThickness, float movement, float noiseStrength, float noiseScale, vec3 offset) { 4544 float f = 0.0; 4545 4546 if (noiseStrength != 0.0) { 4547 vec3 st = position / noiseScale; 4548 float noise = simplexFast(1.6 * st + vec3(1.8, 1.5, 1.9) * simplexFast(st) + vec3(1.7, 9.2, 1.0)); 4549 f = noise * noiseStrength; 4550 } 4551 4552 vec3 waves = wavelengths * vec3(1.0, 0.8, 0.6) + 1.0; 4553 float angle = dot(normalize(vWorldViewDir + (offset * -0.001)), normalize(vWNormal)); 4554 4555 mediump vec3 color = cos((((filmThickness + f) / waves) * angle) + movement); 4556 return .5 + .5 * color; 4557 }`,[AH.simplexFast]),AQ.Nodes={rainbow:new _4(`vec3 rainbow(float filmThickness, float movement, vec3 wavelengths, float noiseStrength, float noiseScale, vec3 offset, bool isMask, float mask, float alpha, out float calpha) { 4558 mediump vec3 res = clamp(attenuation(wavelengths, filmThickness, movement, noiseStrength, noiseScale, offset), 0.0, 2.0); 4559 4560 float rainbowContribution = clamp(res.r + res.g + res.b, 0.0, 1.0); 4561
4562 float lalpha = alpha * rainbowContribution * mask; 4563 calpha = mix(lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0), lalpha, float(isMask)); 4564 accumAlpha += (1.0 - accumAlpha) * lalpha * (1.0 - float(isMask)); 4565 4566 return res; 4567 }`,[ta])};var AZ=class extends _Z{constructor(e,t,i,r,a,o,l,h,c,d){super("v3"),this.nodeType="Toon",this.positioning=e,this.colors=t,this.steps=i,this.source=r,this.isWorldSpace=a,this.noiseStrength=o,this.noiseScale=l,this.shadowColor=h,this.offset=c,this.alpha=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.require("worldNormal"),e.require("worldPosition"),!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{e.define("COLORS_MAX",10),e.addFragmentVariable(this.calpha,"float");let i=e.include(AZ.Nodes.toon),r=[];return r.push(this.positioning.build(e,"i")),r.push(this.colors.build(e,"v4[]")),r.push(this.steps.build(e,"f[]")),r.push(this.source.build(e,"v3")),r.push(this.isWorldSpace.build(e,"b")),r.push(this.noiseStrength.build(e,"f")),r.push(this.noiseScale.build(e,"f")),r.push(this.shadowColor.build(e,"v4")),r.push(this.offset.build(e,"v3")),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};tn=new _4(`float rand(float n) { 4568 return fract(sin(n) * 43758.5453123); 4569 }`),to=new _4(`float hash1(float p) { 4570 p = fract(p * 0.011); 4571 p *= p + 7.5; 4572 p *= p + p; 4573 return fract(p); 4574 }`),tl=new _4(`float valueNoise(vec3 x) { 4575 const vec3 step = vec3(110, 241, 171); 4576 4577 vec3 i = floor(x); 4578 vec3 f = fract(x); 4579 4580 // For performance, compute the base input to a 1D hash from the integer part of the argument and the 4581 // incremental change to the 1D based on the 3D -> 1D wrapping 4582 float n = dot(i, step); 4583 4584 vec3 u = f * f * (3.0 - 2.0 * f); 4585 return mix(mix(mix( hash1(n + dot(step, vec3(0, 0, 0))), hash1(n + dot(step, vec3(1, 0, 0))), u.x), 4586 mix( hash1(n + dot(step, vec3(0, 1, 0))), hash1(n + dot(step, vec3(1, 1, 0))), u.x), u.y), 4587 mix(mix( hash1(n + dot(step, vec3(0, 0, 1))), hash1(n + dot(step, vec3(1, 0, 1))), u.x), 4588 mix( hash1(n + dot(step, vec3(0, 1, 1))), hash1(n + dot(step, vec3(1, 1, 1))), u.x), u.y), u.z); 4589 }`,[to]),th=new _4(`vec3 hash3(vec3 x) { 4590 x = vec3(dot(x,vec3(127.1, 311.7, 74.7)), 4591 dot(x,vec3(269.5, 183.3, 246.1)), 4592 dot(x,vec3(113.5, 271.9, 124.6))); 4593 4594 return fract(sin(x)*43758.5453123); 4595 }`),tc=new _4(`vec3 voronoiNoise(in vec3 x) 4596 { 4597 vec3 p = floor(x); 4598 vec3 f = fract(x); 4599 4600 float id = 0.0; 4601 vec2 res = vec2(100.0); 4602 4603 for(int k=-1; k<=1; k++) 4604 for(int j=-1; j<=1; j++) 4605 for(int i=-1; i<=1; i++) 4606 { 4607 vec3 b = vec3(float(i), float(j), float(k)); 4608 4609 // Comment out the "+ hash(p + b);" part below to get "square" cells 4610 vec3 r = vec3(b) - f + hash3(p + b); 4611 float d = dot(r, r); 4612 4613 if (d < res.x) 4614 { 4615 id = dot(p + b, vec3(1.0, 57.0, 113.0)); 4616 res = vec2(d, res.x); 4617 } 4618 else if (d < res.y) 4619 { 4620 res.y = d; 4621 } 4622 } 4623 4624 return vec3(sqrt(res), abs(id)); 4625 } 4626 `,[th]),AZ.Nodes={toon:new _4(`vec3 toon(int positioning, vec4 colors[COLORS_MAX], float steps[COLORS_MAX], vec3 source, bool isWorldSpace, float noiseStrength, float noiseScale, vec4 shadowColor, vec3 offset, float mask, float alpha, out float calpha) { 4627 float t = 0.0; 4628 float shadow = 1.0; 4629 4630 if (positioning == 0) { 4631 4632 // Can't do this mode if lighting is "none" 4633 #if (defined(PHONG) || defined(LAMBERT) || defined(STANDARD)) 4634 4635 // Algorithm from Chapter 10 of Graphics Shaders 4636 const vec3 weights = vec3(0.2125, 0.7154, 0.0721); 4637 vec3 lpos; 4638 vec3 l; 4639 float dproduct; 4640 4641 #if (NUM_POINT_LIGHTS > 0) 4642 4643 #if defined(USE_SHADOWMAP) && (NUM_POINT_LIGHT_SHADOWS > 0) 4644 PointLightShadow pointLightShadow; 4645 #endif 4646 4647 #pragma unroll_loop_start 4648 for (int i = 0; i < NUM_POINT_LIGHTS; i++) { 4649 // Light positions are in view-space for some reason? 4650 lpos = (inverse(viewMatrix) * vec4(pointLights[UNROLLED_LOOP_INDEX].position, 1.0
4650)).xyz; 4651 l = normalize(lpos - worldPosition); 4652 4653 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4654 4655 // TODO: we want to use "intensity" but it isn't available in the shader code 4656 //dproduct += dot(pointLights[UNROLLED_LOOP_INDEX].color, weights); 4657 4658 t = max(t, dproduct); 4659 4660 // Accumulate shadow contribution 4661 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS) 4662 pointLightShadow = pointLightShadows[UNROLLED_LOOP_INDEX]; 4663 shadow *= getPointShadow( 4664 pointShadowMap[UNROLLED_LOOP_INDEX], 4665 pointLightShadow.shadowMapSize, 4666 pointLightShadow.shadowBias, 4667 pointLightShadow.shadowRadius, 4668 vPointShadowCoord[UNROLLED_LOOP_INDEX], 4669 pointLightShadow.shadowCameraNear, 4670 pointLightShadow.shadowCameraFar); 4671 #endif 4672 } 4673 #pragma unroll_loop_end 4674 4675 #endif 4676 4677 #if NUM_DIR_LIGHTS > 0 4678 4679 #if defined(USE_SHADOWMAP) && (NUM_DIR_LIGHT_SHADOWS > 0) 4680 DirectionalLightShadow directionalLightShadow; 4681 #endif 4682 4683 #pragma unroll_loop_start 4684 for (int i = 0; i < NUM_DIR_LIGHTS; i++) { 4685 // Use the direction vector for directional lights instead 4686 l = (inverse(viewMatrix) * vec4(directionalLights[UNROLLED_LOOP_INDEX].direction, 0.0)).xyz; 4687 4688 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4689 t = max(t, dproduct); 4690 4691 // Accumulate shadow contribution 4692 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS) 4693 directionalLightShadow = directionalLightShadows[UNROLLED_LOOP_INDEX]; 4694 shadow *= getShadow( 4695 UNROLLED_LOOP_INDEX, 4696 directionalShadowMap[UNROLLED_LOOP_INDEX], 4697 directionalLightShadow.shadowMapSize, 4698 directionalLightShadow.shadowBias, 4699 directionalLightShadow.shadowRadius, 4700 vDirectionalShadowCoord[UNROLLED_LOOP_INDEX]); 4701 #endif 4702 } 4703 #pragma unroll_loop_end 4704 4705 #endif 4706 4707 #if NUM_SPOT_LIGHTS > 0 4708 4709 #if defined(USE_SHADOWMAP) && (NUM_SPOT_LIGHT_SHADOWS > 0) 4710 SpotLightShadow spotLightShadow; 4711 #endif 4712 4713 #pragma unroll_loop_start 4714 for (int i = 0; i < NUM_SPOT_LIGHTS; i++) { 4715 lpos = (inverse(viewMatrix) * vec4(spotLights[UNROLLED_LOOP_INDEX].position, 1.0)).xyz; 4716 l = normalize(lpos - worldPosition); 4717 4718 dproduct = dot(l, normalize(worldNormal)) * 0.5 + 0.5; 4719 t = max(t, dproduct); 4720 4721 // Accumulate shadow contribution 4722 #if defined(USE_SHADOWMAP) && (UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS) 4723 spotLightShadow = spotLightShadows[UNROLLED_LOOP_INDEX]; 4724 shadow *= getShadow( 4725 UNROLLED_LOOP_INDEX, 4726 spotShadowMap[UNROLLED_LOOP_INDEX], 4727 spotLightShadow.shadowMapSize, 4728 spotLightShadow.shadowBias, 4729 spotLightShadow.shadowRadius, 4730 vSpotLightCoord[UNROLLED_LOOP_INDEX]); 4731 #endif 4732 } 4733 #pragma unroll_loop_end 4734 4735 #endif 4736 4737 t = clamp(t, 0.0, 1.0); 4738 4739 #endif 4740 4741 } else if (positioning == 1) { 4742 4743 vec3 origin = mix(position, worldPosition, float(isWorldSpace)); 4744 vec3 direction = normalize(source - origin); 4745 t = dot(direction, normalize(worldNormal)) * 0.5 + 0.5; 4746 4747 } else { 4748 4749 vec3 origin = worldPosition; 4750 vec3 source = cameraPosition - offset; 4751 vec3 direction = normalize(source - origin); 4752 t = dot(direction, normalize(worldNormal)) * 0.5 + 0.5; 4753 4754 } 4755 4756 if (noiseStrength > 0.0) { 4757 // Distort with noise 4758 vec3 st = position / noiseScale; 4759 4760 // Voronoi "smooth" noise 4761 float noise = 1.0 - voronoiNoise(st).x; 4762 4763 // Voronoi cellular noise 4764 //float noise = 1.0 - rand(voronoiNoise(st).z); 4765 4766 // Position warp noise 4767 // vec3 offset = vec3( 4768 // simplexFast(st), 4769 // simplexFast(st + vec3(111.1, 143.89, 217.19)), 4770 // simplexFast(st + vec3(171.1, 247.89, 117.23)) 4771 // ); 4772 // st += offset; 4773 // float noise = valueNoise(st); 4774 4775 t += noise * noiseStrength; 4776 } 4777 4778 t = clamp(t, 0.0, 1.0); 4779 4780 // Compute ramp color 4781 float p; 4782 vec4 color = colors[0]; 4783 for (int i = 1; i < COLORS_MAX; i++) { 4784 p = clamp((t - steps[i-1]) / (steps[i] - steps[i-1]), 0.0, 1.0); 4785 color = mix(color, colors[i], smoothstep(0.0, 1.0, p)); 4786 } 4787 4788 // Incorporate custom shadow color 4789 if (positioning == 0) { 4790 4791 vec3 blendedShadow = mix(color.rgb, shadowColor.rgb, shadowColor.a); 4792 color.rgb = mix(blendedShadow, color.rgb, shadow); 4793 4794 } 4795 4796 // Accumulate alpha as usual
4797 float lalpha = alpha * color.a * mask; 4798 calpha = lalpha / clamp(lalpha + accumAlpha, 0.00001, 1.0); 4799 accumAlpha += (1.0 - accumAlpha) * lalpha; 4800 4801 return color.xyz; 4802 4803 }`,[AH.simplexFast,tn,tl,tc])};var AK={textureBicubic:new _4(`float w0( float a ) { 4804 return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); 4805 } 4806 4807 float w1( float a ) { 4808 return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); 4809 } 4810 4811 float w2( float a ){ 4812 return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); 4813 } 4814 4815 float w3( float a ) { 4816 return ( 1.0 / 6.0 ) * ( a * a * a ); 4817 } 4818 4819 // g0 and g1 are the two amplitude functions 4820 float g0( float a ) { 4821 return w0( a ) + w1( a ); 4822 } 4823 4824 float g1( float a ) { 4825 return w2( a ) + w3( a ); 4826 } 4827 4828 // h0 and h1 are the two offset functions 4829 float h0( float a ) { 4830 return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); 4831 } 4832 4833 float h1( float a ) { 4834 return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); 4835 } 4836 4837 vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { 4838 uv = uv * texelSize.zw + 0.5; 4839 4840 vec2 iuv = floor( uv ); 4841 vec2 fuv = fract( uv ); 4842 4843 float g0x = g0( fuv.x ); 4844 float g1x = g1( fuv.x ); 4845 float h0x = h0( fuv.x ); 4846 float h1x = h1( fuv.x ); 4847 float h0y = h0( fuv.y ); 4848 float h1y = h1( fuv.y ); 4849 4850 vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; 4851 vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; 4852 vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; 4853 vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; 4854 4855 return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + 4856 g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); 4857 } 4858 4859 vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { 4860 vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); 4861 vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); 4862 vec2 fLodSizeInv = 1.0 / fLodSize; 4863 vec2 cLodSizeInv = 1.0 / cLodSize; 4864 vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); 4865 vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); 4866 return mix( fSample, cSample, fract( lod ) ); 4867 }`)},AJ=class extends _Z{constructor(e,t,i,r,a,o,l,h){super("v3"),this.nodeType="Transmission",this.thickness=e,this.ior=t,this.roughness=i,this.transmissionSamplerSize=r,this.transmissionSamplerMap=a,this.transmissionDepthMap=o,this.aspectRatio=l,this.alpha=h,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,t){if(e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0,!e.isShader("fragment"))return e.format("vec3( 0.0 )",this.getType(e),t);{e.define("NUM_SAMPLES",6),e.define("BLUR_SLOD",Math.pow(2,A1.transmissionLod.value)),e.require("worldPosition"),e.requires.worldNormal=!0,e.requires.modelMatrix=!0,e.requires.projectionMatrix=!0,e.addFragmentVariable(this.calpha,"float");let i=e.include(AJ.Nodes.transmission),r=[];return r.push(this.thickness.build(e,"f")),r.push(this.ior.build(e,"f")),r.push(this.roughness.build(e,"f")),r.push(this.transmissionSamplerSize.build(e,"v2")),r.push(this.transmissionSamplerMap.getTexture(e,"t")),r.push(this.transmissionDepthMap.getTexture(e,"t")),r.push(this.aspectRatio.build(e,"v2")),r.push("normal"),r.push(this.mask?`luminance(${this.mask.flow(e,"v3").result})`:"1.0"),r.push(this.alpha.build(e,"f")),r.push(this.calpha),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};td=new _4(`vec3 blur(sampler2D sp, vec2 U, vec2 scale, float lod, sampler2D dm, vec2 unrefractedU, vec2 aspectRatio) { 4868 // Slightly modified version of this: 4869 // https://www.shadertoy.com/view/ltScRG 4870 4871 // Special case for blur == 0.0 4872 if (lod == 0.0) { 4873 #ifdef TEXTURE_LOD_EXT 4874 return texture2DLodEXT( sp, U, 0.0).rgb; 4875 #else 4876 return textureLod( sp, U, 0.0).rgb; 4877 #endif 4878 } 4879 4880 vec2 texelSize = vec2(1.0) / resolution; 4881 vec2 halton = haltonSequence[frameIndex]; 4882 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 4883 float temporalAngle = temporalOffset * PI2; 4884 vec3 res = vec3(0.0); 4885 vec2 uv = vec2(0.0); 4886 vec2 offset = vec2(0.0); 4887 vec2 vogelSample = vec2(0.0); 4888 for (int i = 0; i < NUM_SAMPLES; i++) { 4889 vogelSample = vogelDiskSample(i, NUM_SAMPLES, temporalAngle) * texelSize; 4890 offset = vogelSample * scale * (lod * 10.0); // TODO: used to be hardcoded to 20 4891 uv = U + offset; 4892 float opaqueDepth = unpackRGBAToDepth(textureLod(dm, uv, lod)); 4893 if (opaqueDepth != 0.0 && opaqueDepth < gl_FragCoord.z) { 4894 uv = unrefractedU; 4895 lod = lod > 4.0 ? lod : lod / 2.0; 4896 } 4897 res += textureLod(sp, uv, lod).rgb; 4898 } 4899 return res / float(NUM_SAMPLES); 4900 }`),tu=new _4(`vec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) { 4901 // Direction of refracted light. 4902 vec3 refractionVector = refract( -v, n, 1.0 / ior ); 4903 4904 // Compute rotation-independant scaling of the model matrix. 4905 vec3 modelScale; 4906 modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); 4907 modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); 4908 modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); 4909 4910 // The thickness is specified in local space 4911 return normalize( refractionVector ) * thickness * modelScale; 4912 }`),tp=new _4(`float applyIorToRoughness( float roughness, float ior ) { 4913 // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and 4914 // an IOR of 1.5 results in the default amount of microfacet refraction. 4915 return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); 4916 }`),tf=new _4(`vec3 getTransmissionSample( vec2 fragCoord, float roughness, float ior, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 unrefractedCoords, vec2 aspectRatio) { 4917 // Threejs exports do not pass a depth map to this shader, so we have to fallback to the "Threejs method of blurring" - see 4918 // also the code in convertTransmission.ts, which runs during export 4919 #ifdef IS_THREEJS_EXPORT 4920 float lod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness / 5.0, ior); 4921 return textureBicubic(transmissionSamplerMap, fragCoord.xy, lod).rgb; 4922 #else 4923 float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); 4924 float lod = applyIorToRoughness(roughness, ior); 4925 return blur(transmissionSamplerMap, fragCoord, vec2(lod), min(framebufferLod / 5.5, 8.5), transmissionDepthMap, unrefractedCoords, aspectRatio); 4926 #endif 4927 }`,[AK.textureBicubic,tp,td]),tm=new _4(`vec3 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio ) { 4928 vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); 4929 vec3 refractedRayExit = position + transmissionRay; 4930 4931 // Project refracted vector on the framebuffer, while mapping to normalized device coordinates. 4932 vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); 4933 vec2 refractionCoords = ndcPos.xy / ndcPos.w; 4934 refractionCoords += 1.0; 4935 refractionCoords /= 2.0; 4936 4937 vec4 ndcPosUnrefracted = projMatrix * viewMatrix * vec4(position, 1.0 ); 4938 vec2 unrefractedCoords = ndcPosUnrefracted.xy / ndcPosUnrefracted.w; 4939 unrefractedCoords += 1.0; 4940 unrefractedCoords /= 2.0; 4941 4942 // Sample framebuffer to get pixel the refracted ray hits. 4943 return getTransmissionSample( refractionCoords, roughness, ior, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, unrefractedCoords, aspectRatio ); 4944 }`,[tf,tu]),AJ.Nodes={transmission:new _4(`vec3 transmission(float thickness, float ior, float roughness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio, vec3 normal, float mask, float alpha, out float calpha) { 4945 vec3 v = vec3(0.); 4946 if (isOrthographic) { 4947 v = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); 4948 } else { 4949 v = normalize(vWPosition - cameraPosition); 4950 } 4951 vec3 transmission = getIBLVolumeRefraction(vWNormal, -v, roughness, vWPosition, modelMatrix, viewMatrix, projectionMatrix, ior, thickness, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, aspectRatio ); 4952
4953 float lalpha = alpha * mask; 4954 calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 ); 4955 accumAlpha += ( 1.0 - accumAlpha ) * alpha; 4956 4957 return transmission; 4958 }`,[tm])};var A$=((tg=A$||{}).NOISE="noise",tg.MAP="map",tg),A0=class extends _Z{constructor(e,t,i,r,a,o,l,h,c,d,p){super("v3"),this.displacementTypeIndex=new AC(0),this.nodeType="VertexDisplacement",this.intensity=e,this.movementOrTexture=t,"map"===Object.values(A$)[this.displacementTypeIndex.value]&&(this.mat=new AI(this.movementOrTexture.value.matrix)),this.cropOrOffset=i,this.scale=d,this.noiseFunctionIndex=p,this.voronoiStyle=r,this.smoothness=a,this.seed=o,this.highCut=l,this.lowCut=h,this.quality=c}generate(e,t){if(!e.isShader("vertex"))return e.format("vec3( 0.0 )",this.getType(e),t);{e.define("USE_LAYER_DISPLACE");let i,r=[];switch(r.push("displaced_position"),r.push("displaced_normal"),Object.values(A$)[this.displacementTypeIndex.value]){case"map":i=e.include(A0.Nodes.map),r.push(this.movementOrTexture.getTexture(e,"t")),r.push("uv"),r.push(this.cropOrOffset.build(e,"f")),this.mat&&r.push(this.mat.build(e,"mat3"));break;case"noise":{let t=["simplexPrecise","simplexFractal","simplexAshima","fbm","perlin","voronoi"][this.noiseFunctionIndex.value],a=new _4(`vec3 orthogonal(vec3 v) { 4959 return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y)); 4960 }`),o="voronoi"==t?` 4961 float v = ${t}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1), voronoiStyle, smoothness, seed, quality); 4962 v = remap(v, lowCut, highCut, 0.0, 1.0); 4963 v = smax(v, 0.0, smoothness * 0.25); 4964 v = smin(v, 1.0, smoothness * 0.25); 4965 4966 return p + n * v * intensity; 4967 `:` 4968 return p + n * ${t}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1)) * intensity; 4969 `,l=new _4(`vec3 distorted(vec3 p, vec3 n, float scale, float intensity, vec3 offset, float neighbour_offset, float movement, int voronoiStyle, float smoothness, float seed, float highCut, float lowCut, int quality) { 4970 ${o} 4971 }
4971`,[AH.simplexPrecise,AH.simplexFractal,AH.simplexAshima,AH.fbm,AH.perlin,AH.voronoi]),h=new _4(`vec3 vertexDisplacementNoise(vec3 position, vec3 normal, float scale, vec3 offset, float movement, int voronoiStyle, float smoothness, float seed, float highCut, float lowCut, int quality, float intensity, out vec3 displaced_normal) { 4972 vec3 displaced_position = distorted(position, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4973 vec3 tangent1 = orthogonal(normal); 4974 vec3 tangent2 = normalize(cross(normal, tangent1)); 4975 4976 // TODO(Max): The distance to the neighbors was originally scaled by 0.1. 4977 // This caused some small oval/circular visual artifacts in the lighting. 4978 // For now, simply using neighbors further away betters the problem, 4979 // but we should figure out the underlying cause when we have some time. 4980 // Maybe its related to how we calculate the tangent and bitangent? 4981 vec3 nearby1 = position + tangent1; 4982 vec3 nearby2 = position + tangent2; 4983 vec3 distorted1 = distorted(nearby1, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4984 vec3 distorted2 = distorted(nearby2, normal, scale, intensity, offset, neighbor_offset, movement, voronoiStyle, smoothness, seed, highCut, lowCut, quality); 4985 displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position)); 4986 return displaced_position; 4987 }`,[l,a]);i=e.include(h),r.push(this.scale.build(e,"f")),r.push(this.cropOrOffset.build(e,"v3")),r.push(this.movementOrTexture.build(e,"f")),r.push(this.voronoiStyle.build(e,"i")),r.push(this.smoothness.build(e,"f")),r.push(this.seed.build(e,"f")),r.push(this.highCut.build(e,"f")),r.push(this.lowCut.build(e,"f")),r.push(this.quality.build(e,"i"))}}return r.push(this.intensity.build(e,"f")),r.push("displaced_normal"),e.format(i+"("+r.join(",")+")",this.getType(e),t)}}};tv=new _4(`vec3 orthogonal(vec3 v) { 4988 return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y)); 4989 }`),ty=new _4(`float displacementMapTexture(sampler2D tex, float crop, vec2 uv, mat3 mat, vec2 offset) { 4990 vec2 uvs = (mat * vec3(uv * 2.0 - 1.0, 1.0) / 2.0 + 0.5).xy + offset; 4991 vec4 tmp = texture2D(tex, uvs); 4992 vec3 col = tmp.rgb; 4993 if (crop > 0.5) { 4994 if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) { 4995 return 0.0; 4996 } 4997 } 4998 return col.r; 4999 }`),A0.Nodes={map:new _4(`vec3 vertexDisplacementMap(vec3 position, vec3 normal, sampler2D tex, vec2 uv, float crop, mat3 mat, float intensity, out vec3 displaced_normal) { 5000 vec3 displaced_position = position + normal * displacementMapTexture(tex, crop, uv, mat, vec2(0.0)) * intensity; 5001 vec3 tangent1 = normalize(orthogonal(normal)); 5002 vec3 tangent2 = normalize(cross(normal, tangent1)); 5003 vec3 nearby1 = position + tangent1 * 0.1; 5004 vec3 nearby2 = position + tangent2 * 0.1; 5005 vec3 distorted1 = nearby1 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity; 5006 vec3 distorted2 = nearby2 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity; 5007 displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position)); 5008 return displaced_position; 5009 }`,[tv,ty])};var A1={normalRenderTarget:new Ar,normalRenderTargetDepth:new Ar,transmissionRenderTarget:new Ar,aspectRatio:new _J,transmissionSize:new _J(2048,2048),transmissionRenderTargetDepth:new Ar,aoRenderTarget:new Ar,aoEnabled:new AE,pixelRatioNode:new As(1),resolution:new _J,penumbraSize:new AT(5,.5),frameIndex:new AC(0),transmissionLod:new AC(2),taaEnabled:new AE(!0)};for(let e of Object.values(A1))e.isRenderGlobal=!0;var A2,A3,A4,A5,A6,A8={skiaWasmUrl:"https://unpkg.com/@splinetool/[email protected]/build/ui.wasm"},A9=class extends _X{constructor(){super("basic"),this.nodeType="Basic",this.color=new AM(5526619),this.shadingAlp
vendor: 1,357 bytes, lines 5009-5028
5009ha=new As(1),this.shadingBlend=new AC(0),this.previousModelViewMatrix=new AR,this.previouseProjectionMatrix=new AR}get category(){return"phong"}generate(e){let t;if(e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({resolution:A1.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(sr([sA.fog])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>"].join(` 5010`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5011 #include <skinbase_vertex> 5012 #include <skinnormal_vertex> 5013 #if !defined( USE_LAYER_DISPLACE ) 5014 #include <defaultnormal_vertex> 5015 #endif 5016 5017 vec3 displaced_position = position; 5018 vec3 displaced_normal = normal; 5019 5020 #if defined( USE_LAYER_DISPLACE ) 5021 vec3 transformed; 5022 vec3 transformedNormal; 5023 #endif 5024 `,"#include <normal_vertex>",` 5025 #if !defined( USE_LAYER_DISPLACE ) 5026 #include <begin_vertex> 5027 #endif /* !USE_LAYER_DISPLACE */ 5028 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5028":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5029`)}else{void 0===this.color&&(this.color=new AM(5526619)),this.color.analyze(e,{slot:"color"}),this.alpha&&this.alpha.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"});let i=this.color.flow(e,"c",{slot:"color"}),r=this.alpha?this.alpha.flow(e,"f"):void 0,a=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0,o=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0;e.requires.transparent=void 0!==r,e.addParsCode(["varying vec3 vWPosition;","#include <fog_pars_fragment>","#include <dithering_pars_fragment>","varying vec3 vViewPosition;","#include <normal_pars_fragment>"].join(` 5030`));let l=["#include <normal_fragment_begin>",i.code];r&&l.push(r.code,"#ifdef ALPHATEST"," if ( "+r.result+" <= ALPHATEST ) discard;","#endif"),o?l.push(o.code,`vec3 outgoingLight = ${i.result};`,`vec3 finalColor = spe_blend(outgoingLight, ${o.result}, 1.0, SPE_BLENDING_NORMAL);`):l.push(`vec3 finalColor = ${i.result};`);let h="1.0";this.mask&&(this.mask.analyze(e),h=`luminance(${this.mask.flow(e,"v3").result})`),r?l.push(`gl_FragColor = vec4( finalColor, accumAlpha * ${r.result} * ${h} );`):l.push("gl_FragColor = vec4("+i.result+", 1.0 );"),a&&l.push(`gl_FragColor.a *= ${a.result};`),l.push("#include <fog_fragment>","#include <dithering_fragment>"),t=l.join(` 5031`)}return t}},A7=class extends _X{constructor(){super("lambert"),this.nodeType="Lambert",this.color=new AM(5526619),this.emissive=new AM(0),this.emissiveIntensity=new As(1),this.previousModelViewMatrix=new AR,this.previouseProjectionMatrix=new AR,this.shadingAlpha=new As(1),this.shadingBlend=new AC(0),this.occlusion=new AE(!0)}get category(){return"lambert"}build(e){let t;if(e.define("LAMBERT"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({resolution:A1.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(sr([sA.fog,sA.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED"," #define DOUBLE_SIDED","#endif","#ifdef DOUBLE_SIDED"," varying vec3 vLightBack;"," varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <color_pars_vertex>","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5032`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5033 #include <skinbase_vertex> 5034 #include <skinnormal_vertex> 5035 #ifndef USE_LAYER_DISPLACE 5036 #include <defaultnormal_vertex> 5037 #endif 5038 5039 vec3 displaced_position = position; 5040 vec3 displaced_normal = objectNormal; 5041 5042 #ifdef USE_LAYER_DISPLACE 5043 vec3 transformed; 5044 vec3 transformedNormal; 5045 #endif 5046 `,"#include <normal_vertex>",` 5047 #ifndef USE_LAYER_DISPLACE 5048 #include <begin_vertex> 5049 #endif 5050 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5050":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>",` 5051 vec3 diffuse = vec3( 1.0 ); 5052 GeometricContext geometry; 5053 geometry.position = mvPosition.xyz; 5054 geometry.normal = normalize( transformedNormal ); 5055 geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz ); 5056 `),r.push(` 5057 GeometricContext backGeometry; 5058 backGeometry.position = geometry.position; 5059 backGeometry.normal = -geometry.normal; 5060 backGeometry.viewDir = geometry.viewDir; 5061 vLightFront = vec3( 0.0 ); 5062 vIndirectFront = vec3( 0.0 ); 5063 #ifdef DOUBLE_SIDED 5064 vLightBack = vec3( 0.0 ); 5065 vIndirectBack = vec3( 0.0 ); 5066 #endif 5067 IncidentLight directLight; 5068 float dotNL; 5069 vec3 directLightColor_Diffuse; 5070 vIndirectFront += getAmbientLightIrradiance( ambientLightColor ); 5071 vIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal ); 5072 #ifdef DOUBLE_SIDED 5073 vIndirectBack += getAmbientLightIrradiance( ambientLightColor ); 5074 vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal ); 5075 #endif 5076 #if NUM_POINT_LIGHTS > 0 5077 #pragma unroll_loop_start 5078 for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { 5079 getPointLightInfo( pointLights[ i ], geometry, directLight ); 5080 dotNL = dot( geometry.normal, directLight.direction ); 5081 directLightColor_Diffuse = directLight.color; 5082 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5083 #ifdef DOUBLE_SIDED 5084 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5085 #endif 5086 } 5087 #pragma unroll_loop_end 5088 #endif 5089 #if NUM_SPOT_LIGHTS > 0 5090 #pragma unroll_loop_start 5091 for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { 5092 getSpotLightInfo( spotLights[ i ], geometry, directLight ); 5093 dotNL = dot( geometry.normal, directLight.direction ); 5094 directLightColor_Diffuse = directLight.color; 5095 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5096 #ifdef DOUBLE_SIDED 5097 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5098 #endif 5099 } 5100 #pragma unroll_loop_end 5101 #endif 5102 #if NUM_DIR_LIGHTS > 0 5103 #pragma unroll_loop_start 5104 for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { 5105 getDirectionalLightInfo( directionalLights[ i ], geometry, directLight ); 5106 dotNL = dot( geometry.normal, directLight.direction ); 5107 directLightColor_Diffuse = directLight.color; 5108 vLightFront += saturate( dotNL ) * directLightColor_Diffuse; 5109 #ifdef DOUBLE_SIDED 5110 vLightBack += saturate( -dotNL ) * directLightColor_Diffuse; 5111 #endif 5112 } 5113 #pragma unroll_loop_end 5114 #endif 5115 #if NUM_HEMI_LIGHTS > 0 5116 #pragma unroll_loop_start 5117 for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { 5118 vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal ); 5119 #ifdef DOUBLE_SIDED 5120 vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal ); 5121 #endif 5122 } 5123 #pragma unroll_loop_end 5124 #endif 5125 `," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5126`)}else{e.mergeUniform({penumbraSize:A1.penumbraSize}),e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({aoMap:A1.aoRenderTarget}),e.mergeUniform({aoEnabled:A1.aoEnabled}),void 0===this.color&&(this.color=new AM(5526619)),this.color.analyze(e,{slot:"color"}),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let i=this.color.flow(e,"c",{slot:"color"}),r=this.emissive.flow(e,"c",{slot:"emissive"}),a=this.emissiveIntensity.flow(e,"f",{slot:"emissive"}),o=this.occlusion.flow(e,"b",{slot:"occlusion"}
vendor: 6,225 bytes, lines 5126-5192
5126),l=this.shadingAlpha.flow(e,"f"),h=this.shadingBlend.flow(e,"i"),c=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,d=this.alpha?this.alpha.flow(e,"f"):void 0,p=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==d,e.addParsCode(["uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED"," #define DOUBLE_SIDED","#endif","#include <normal_pars_fragment>","#ifdef DOUBLE_SIDED"," varying vec3 vLightBack;"," varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <fog_pars_fragment>","#include <shadowmap_pars_fragment>","#include <shadowmask_pars_fragment>","#include <clipping_planes_pars_fragment>","#include <dithering_pars_fragment>"].join(` 5127`));let f=["#include <normal_fragment_begin>",` 5128 // NOTE: gl_FrontFacing alternative using face normal estimation. 5129 vec3 viewdx = dFdx(vViewPosition); 5130 vec3 viewdy = dFdy(vViewPosition); 5131 vec3 faceNormal = normalize(cross(viewdx, viewdy)); 5132 bool isFrontFacing = (dot(normal, faceNormal) >= 0.0); 5133 `,"#include <clipping_planes_fragment>"];f.push(i.code,"vec3 diffuseColor = "+i.result+";","ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"),d&&f.push(d.code,"#ifdef ALPHATEST","if ( "+d.result+" <= ALPHATEST ) discard;","#endif"),f.push("#ifdef DOUBLE_SIDED"," reflectedLight.indirectDiffuse += ( isFrontFacing ) ? vIndirectFront : vIndirectBack;","#else"," reflectedLight.indirectDiffuse += vIndirectFront;","#endif","#include <lightmap_fragment>","reflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );","#ifdef DOUBLE_SIDED"," reflectedLight.directDiffuse = ( isFrontFacing ) ? vLightFront : vLightBack;","#else"," reflectedLight.directDiffuse = vLightFront;","#endif","reflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();"),r&&f.push(r.code,"reflectedLight.directDiffuse += "+r.result+" * "+a.result+";"),f.push("vec3 ao = aoEnabled && "+o.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = (reflectedLight.directDiffuse + reflectedLight.indirectDiffuse) ;");let m="1.0";this.mask&&(this.mask.analyze(e),m=`luminance(${this.mask.flow(e,"v3").result})`),f.push(` 5134 if (outgoingLight != diffuseColor) { 5135 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5136 accumAlpha += ( 1.0 - accumAlpha ) * ${l.result} * ${m} * lightAccu; 5137 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${l.result} * ${m}, ${h.result} ); 5138 5139 outgoingLight *= ao; 5140 } 5141 `),c&&f.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),d?f.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${d.result} );`):f.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),p&&f.push(`gl_FragColor.a *= ${p.result};`),f.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=f.join(` 5142`)}return t}},Me={dHdxy:new _4(`vec2 dHdxy(sampler2D bumpMap, vec2 bumpMapUv, float bumpScale) { 5143 5144 // Gradient of UVs w.r.t. X coordinate (in screen-space) 5145 vec2 dSTdx = dFdx(bumpMapUv); 5146 5147 // Gradient of UVs w.r.t. Y coordinate (in screen-space) 5148 vec2 dSTdy = dFdy(bumpMapUv); 5149 5150 // Forward differencing 5151 float Hll = bumpScale * luminance(texture(bumpMap, bumpMapUv).rgb); 5152 float dBx = bumpScale * luminance(texture(bumpMap, bumpMapUv + dSTdx).rgb) - Hll; 5153 float dBy = bumpScale * luminance(texture(bumpMap, bumpMapUv + dSTdy).rgb) - Hll; 5154 5155 return vec2( dBx, dBy ); 5156 }`),perturbNormalArb:new _4(`vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) { 5157 vec3 vSigmaX = dFdx( surf_pos.xyz ); 5158 vec3 vSigmaY = dFdy( surf_pos.xyz ); 5159 vec3 vN = surf_norm; // normalized 5160 5161 vN = normalize(vN); 5162 5163 vec3 R1 = cross( vSigmaY, vN ); 5164 vec3 R2 = cross( vN, vSigmaX ); 5165 5166 R1 = normalize(R1); 5167 R2 = normalize(R2); 5168 5169 float fDet = dot( vSigmaX, R1 ) * faceDirection; 5170 5171 vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); 5172 return normalize( abs( fDet ) * vN - vGrad ); 5173 }`)},Mt=class extends _X{constructor(){super("phong"),this.nodeType="Phong",this.color=new AM(5526619),this.specular=new AM(1118481),this.shininess=new As(30),this.previousModelViewMatrix=new AR,this.previouseProjectionMatrix=new AR,this.shadingAlpha=new As(1),this.shadingBlend=new AC(0),this.occlusion=new AE(!0)}get category(){return"phong"}build(e){let t;if(e.define("PHONG"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({resolution:A1.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(sr([sA.fog,sA.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5174`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5175 #include <skinbase_vertex> 5176 #include <skinnormal_vertex> 5177 #ifndef USE_LAYER_DISPLACE 5178 #include <defaultnormal_vertex> 5179 #endif 5180 5181 vec3 displaced_position = position; 5182 vec3 displaced_normal = objectNormal; 5183 5184 #ifdef USE_LAYER_DISPLACE 5185 vec3 transformed; 5186 vec3 transformedNormal; 5187 #endif 5188 `,"#include <normal_vertex>",` 5189 #ifndef USE_LAYER_DISPLACE 5190 #include <begin_vertex> 5191 #endif 5192 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5192":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>"," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5193`)}else{e.mergeUniform({penumbraSize:A1.penumbraSize}),e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({aoMap:A1.aoRenderTarget}),e.mergeUniform({aoEnabled:A1.aoEnabled}),void 0===this.color&&(this.color=new AM(5526619)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e);let i=this.occlusion.flow(e,"b",{slot:"occlusion"});this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let r=this.color.flow(e,"c",{slot:"color"}),a=this.specular.flow(e,"c"),o=this.shininess.flow(e,"f"),l=this.shadingAlpha.flow(e,"f"),h=this.shadingBlend.flow(e,"i"),c=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,d=this.alpha?this.alpha.flow(e,"f"):void 0,p=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==d,e.addParsCode(["varying vec3 vWPosition;","uniform vec3 emissive;","uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","#include <normal_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_phong_pars_fragment>","#include <shadowmap_pars_fragment>","#include <dithering_pars_fragment>"].join(` 5194`));let f=["#include <normal_fragment_begin>",` 5195 // NOTE: gl_FrontFacing alternative using face normal estimation. 5196 vec3 viewdx = dFdx(vViewPosition); 5197 vec3 viewdy = dFdy(vViewPosition); 5198 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5199 if (dot(normal, faceNormal) < 0.0) { 5200 normal *= -1.0; 5201 } 5202 `," BlinnPhongMaterial material;"];if(this.bumpMap){e.include(Me.dHdxy),e.include(Me.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",a="";a=4===this.bumpMap.projection.value?` 5203 vec3 bumpNormal = vec3(0.0); 5204 { 5205 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5206 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5207 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5208 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5209 5210 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5211 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5212 5213 vec2 grad1 = dHdxy(${t.result}, uv1, ${r}); 5214 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5215 5216 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5217 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5218 5219 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5220 bumpNormal = normalize(bumpNormal); 5221 } 5222 5223 normal = bumpNormal; 5224 `:` 5225 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5226 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5227 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5228 `,f.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5229 ${i.result}; 5230 ${a} 5231 `)}f.push(r.code," vec3 diffuseColor = "+r.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"," vec3 totalEmissiveRadiance = emissive;",a.code," vec3 specular = "+a.result+";",o.code," float shininess = max( 0.0001, "+o.result+" );"," float specularStrength = 1.0;"),d&&f.push(d.code,"#ifdef ALPHATEST","if ( "+d.result+" <= ALPHATEST ) discard;","#endif"),f.push("material.diffuseColor = diffuseColor;"),f.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),f.push("vec3 ao = aoEnabled && "+i.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse)) + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;");let m="1.0";this.mask&&(this.mask.analyze(e),m=`luminance(${this.mask.flow(e,"v3").result})`),f.push(` 5232 if (outgoingLight != diffuseColor) { 5233 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5234 accumAlpha += ( 1.0 - accumAlpha ) * ${l.result} * ${m} * lightAccu; 5235 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${l.result} * ${m}, ${h.result} ); 5236 5237 outgoingLight *= ao; 5238 } 5239 `),c&&f.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),d?f.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${d.result});`):f.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),p&&f.push(`gl_FragColor.a *= ${p.result};`),f.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=f.join(` 5240`)}return t}},Mi=class extends _X{constructor(){super("standard"),this.nodeType="Standard",this.color=new AM(5526619),this.roughness=new As(.3),this.metalness=new As(0),this.reflectivity=new As(.5),this.previousModelViewMatrix=new AR,this.previouseProjectionMatrix=new AR,this.shadingAlp
vendor: 1,580 bytes, lines 5240-5259
5240ha=new As(1),this.shadingBlend=new AC(0),this.occlusion=new AE(!0)}get category(){return"physical"}build(e){let t;if(e.define("STANDARD"),e.requires.lights=!0,e.extensions.derivatives=!0,e.extensions.shaderTextureLOD=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({resolution:A1.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(sr([sA.fog,sA.lights])),sA.LTC_1&&(e.uniforms.ltc_1={value:void 0},e.uniforms.ltc_2={value:void 0}),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5241`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5242 #include <skinbase_vertex> 5243 #include <skinnormal_vertex> 5244 #if !defined( USE_LAYER_DISPLACE ) 5245 #include <defaultnormal_vertex> 5246 #endif 5247 5248 vec3 displaced_position = position; 5249 vec3 displaced_normal = objectNormal; 5250 5251 #if defined( USE_LAYER_DISPLACE ) 5252 vec3 transformed; 5253 vec3 transformedNormal; 5254 #endif 5255 `,"#include <normal_vertex>",` 5256 #if !defined( USE_LAYER_DISPLACE ) 5257 #include <begin_vertex> 5258 #endif /* !USE_LAYER_DISPLACE */ 5259 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5259":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>","#include <shadowmap_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5260`)}else{e.mergeUniform({penumbraSize:A1.penumbraSize}),e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({aoMap:A1.aoRenderTarget}),e.mergeUniform({aoEnabled:A1.aoEnabled});let i={gamma:!0};void 0===this.color&&(this.color=new AM(5526619)),this.color.analyze(e,{slot:"color",context:i}),this.roughness.analyze(e),this.metalness.analyze(e);let r=this.occlusion.flow(e,"b",{slot:"occlusion"});this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e),this.reflectivity&&this.reflectivity.analyze(e);let a=this.color.flow(e,"c",{slot:"color",context:i}),o=this.roughness.flow(e,"f"),l=this.metalness.flow(e,"f"),h=this.shadingAlpha.flow(e,"f"),c=this.shadingBlend.flow(e,"i"),d=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,p=this.alpha?this.alpha.flow(e,"f"):void 0,f=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0,m=this.reflectivity?this.reflectivity.flow(e,"f"):void 0;e.requires.transparent=void 0!==p,e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","#include <normal_pars_fragment>","#include <dithering_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_physical_pars_fragment>","#include <shadowmap_pars_fragment>"].join(` 5261`));let g=["#include <clipping_planes_fragment>"," #include <normal_fragment_begin>",` 5262 // NOTE: gl_FrontFacing alternative using face normal estimation. 5263 vec3 viewdx = dFdx(vViewPosition); 5264 vec3 viewdy = dFdy(vViewPosition); 5265 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5266 if (dot(normal, faceNormal) < 0.0) { 5267 normal *= -1.0; 5268 } 5269 `," PhysicalMaterial material;"," material.diffuseColor = vec3( 1.0 );"];if(this.bumpMap){e.include(Me.dHdxy),e.include(Me.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",a="";a=4===this.bumpMap.projection.value?` 5270 vec3 bumpNormal = vec3(0.0); 5271 { 5272 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5273 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5274 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5275 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5276 5277 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5278 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5279 5280 vec2 grad1 = dHdxy(${t.result}, uv1, ${r}); 5281 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5282 5283 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5284 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5285 5286 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5287 bumpNormal = normalize(bumpNormal); 5288 } 5289 5290 normal = bumpNormal; 5291 `:` 5292 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5293 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5294 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5295 `,g.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5296 ${i.result}; 5297 ${a} 5298 `)}if(g.push(a.code," vec3 diffuseColor = "+a.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",l.code," float metalnessFactor = "+l.result+";"),this.roughnessMap){let t=this.roughnessMap.texture.flow(e,"t"),i=this.roughnessMap.flow(e,"v3"),r="";r=4===this.roughnessMap.projection.value?` 5299 float roughnessChange = 1.0; 5300 { 5301 vec2 uv0 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5302 vec2 uv1 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5303 vec2 uv2 = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5304 vec3 weights = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5305 5306 float r0 = luminance(texture(${t.result}, uv0).rgb) * roughnessScale; 5307 float r1 = luminance(texture(${t.result}, uv1).rgb) * roughnessScale; 5308 float r2 = luminance(texture(${t.result}, uv2).rgb) * roughnessScale; 5309 5310 roughnessChange = (r0 * weights.z + r1 * weights.x + r2 * weights.y); 5311 } 5312 float roughnessFactor = roughnessChange * ${o.result}; 5313 `:` 5314 vec2 roughnessMapCachedUv = g${this.roughnessMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5315 5316 vec4 vals = texture(${t.result}, roughnessMapCachedUv); 5317 float roughnessFactor = luminance(vals.rgb) * ${o.result}; 5318 `,g.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5319 ${i.result}; 5320 5321 const float roughnessScale = 1.0; 5322 5323 ${r} 5324 `)}else g.push(o.code," float roughnessFactor = "+o.result+";");p&&g.push(p.code,"#ifdef ALPHATEST"," if ( "+p.result+" <= ALPHATEST ) discard;","#endif"),g.push("vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );","float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );"),g.push("material.diffuseColor = diffuseColor * ( 1.0 - metalnessFactor );","material.roughness = max( roughnessFactor, 0.0525 );","material.roughness += geometryRoughness;","material.roughness = min( material.roughness, 1.0 );","material.roughness = clamp( roughnessFactor, 0.04, 1.0 );"),m?g.push(m.code,"material.specularColor = mix( vec3( 0.16 * pow2( "+m.result+" ) ), diffuseColor, metalnessFactor );"):g.push("material.specularColor = mix( vec3( 0.04 ), diffuseColor, metalnessFactor );"),g.push("#include <lights_fragment_begin>"),g.push("#include <lights_fragment_end>"),g.push("vec3 ao = aoEnabled && "+r.result+" ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse)) + reflectedLight.directSpecular + reflectedLight.indirectSpecular;");let v="1.0";this.mask&&(this.mask.analyze(e),v=`luminance(${this.mask.flow(e,"v3").result})`),g.push(` 5325 if (outgoingLight != diffuseColor) { 5326 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5327 accumAlpha += ( 1.0 - accumAlpha ) * ${h.result} * ${v} * lightAccu; 5328 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${h.result} * ${v}, ${c.result} ); 5329 5330 outgoingLight *= ao; 5331 } 5332 `),d&&g.push(d.code,`outgoingLight = spe_blend(outgoingLight, ${d.result}, 1.0, SPE_BLENDING_NORMAL);`),p?g.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${p.result} );`):g.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),f&&g.push(`gl_FragColor.a *= ${f.result};`),g.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=g.join(` 5333`)}return t}},Mr=class extends _X{constructor(){super("toon"),this.nodeType="Toon",this.color=new AM(5526619),this.specular=new AM(1118481),this.shininess=new As(30),this.previousModelViewMatrix=new AR,this.previouseProjectionMatrix=new AR,this.shadingAlp
vendor: 1,387 bytes, lines 5333-5352
5333ha=new As(1),this.shadingBlend=new AC(0)}get category(){return"toon"}build(e){let t;if(e.define("TOON"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let i=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({resolution:A1.resolution}),e.mergeUniform({previousModelViewMatrix:this.previousModelViewMatrix}),e.mergeUniform({previousProjectionMatrix:this.previouseProjectionMatrix}),e.mergeUniform(sr([sA.fog,sA.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <skinning_pars_vertex>","#include <normal_pars_vertex>","#include <morphtarget_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(` 5334`));let r=["#include <beginnormal_vertex>","#include <morphnormal_vertex>",` 5335 #include <skinbase_vertex> 5336 #include <skinnormal_vertex> 5337 #ifndef USE_LAYER_DISPLACE 5338 #include <defaultnormal_vertex> 5339 #endif 5340 5341 vec3 displaced_position = position; 5342 vec3 displaced_normal = objectNormal; 5343 5344 #ifdef USE_LAYER_DISPLACE 5345 vec3 transformed; 5346 vec3 transformedNormal; 5347 #endif 5348 `,"#include <normal_vertex>",` 5349 #ifndef USE_LAYER_DISPLACE 5350 #include <begin_vertex> 5351 #endif 5352 `];i&&r.push(i.code,i.result?"displaced_position = "+i.result+";
5352":""),r.push("transformed = displaced_position;","#include <morphtarget_vertex>","#include <skinning_vertex>","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),r.push(" #include <project_vertex>"," #include <fog_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>"," #include <shadowmap_vertex>"," #include <fog_vertex>"),r.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),t=r.join(` 5353`)}else{e.mergeUniform({penumbraSize:A1.penumbraSize}),e.mergeUniform({frameIndex:A1.frameIndex}),e.mergeUniform({aoMap:A1.aoRenderTarget}),e.mergeUniform({aoEnabled:A1.aoEnabled}),void 0===this.color&&(this.color=new AM(5526619)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let i=this.color.flow(e,"c",{slot:"color"}),r=this.specular.flow(e,"c"),a=this.shininess.flow(e,"f"),o=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),h=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,c=this.alpha?this.alpha.flow(e,"f"):void 0,d=this.alphaOverride?this.alphaOverride.flow(e,"f"):void 0;e.requires.transparent=void 0!==c,e.addParsCode(["uniform float penumbraSize[5];","uniform sampler2D aoMap;","uniform bool aoEnabled;","varying vec3 vWPosition;","#include <normal_pars_fragment>","#include <gradientmap_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <dithering_pars_fragment>",` 5354 varying vec3 vViewPosition; 5355 struct ToonMaterial { 5356 vec3 diffuseColor; 5357 vec3 specularColor; 5358 float specularShininess; 5359 float specularStrength; 5360 }; 5361 void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 5362 vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color; 5363 5364 reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 5365 reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; 5366 } 5367 void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { 5368 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); 5369 } 5370 #define RE_Direct RE_Direct_Toon 5371 #define RE_IndirectDiffuse RE_IndirectDiffuse_Toon 5372 #define Material_LightProbeLOD( material ) (0) 5373 `,"#include <shadowmap_pars_fragment>","#include <bumpmap_pars_fragment>","#include <normalmap_pars_fragment>"].join(` 5374`));let p=["#include <normal_fragment_begin>",` 5375 // NOTE: gl_FrontFacing alternative using face normal estimation. 5376 vec3 viewdx = dFdx(vViewPosition); 5377 vec3 viewdy = dFdy(vViewPosition); 5378 vec3 faceNormal = normalize(cross(viewdx,viewdy)); 5379 if (dot(normal, faceNormal) < 0.0) { 5380 normal *= -1.0; 5381 } 5382 `," ToonMaterial material;"];if(this.bumpMap){e.include(Me.dHdxy),e.include(Me.perturbNormalArb);let t=this.bumpMap.texture.flow(e,"t"),i=this.bumpMap.flow(e,"v3"),r=this.bumpMapIntensity?this.bumpMapIntensity.flow(e,"f").result:"1.0",a="";a=4===this.bumpMap.projection.value?` 5383 vec3 bumpNormal = vec3(0.0); 5384 { 5385 vec2 uv0 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs0; 5386 vec2 uv1 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs1; 5387 vec2 uv2 = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs2; 5388 vec3 weights = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_triplanarWeights; 5389 5390 vec2 grad0 = dHdxy(${t.result}, uv0, ${r}); 5391 vec3 n0 = perturbNormalArb(-vViewPosition, normal, grad0, faceDirection); 5392 5393 vec2 grad1 = dHdxy(${t.result}, uv1, ${r});
5394 vec3 n1 = perturbNormalArb(-vViewPosition, normal, grad1, faceDirection); 5395 5396 vec2 grad2 = dHdxy(${t.result}, uv2, ${r}); 5397 vec3 n2 = perturbNormalArb(-vViewPosition, normal, grad2, faceDirection); 5398 5399 bumpNormal = n0 * weights.z + n1 * weights.x + n2 * weights.y; 5400 bumpNormal = normalize(bumpNormal); 5401 } 5402 5403 normal = bumpNormal; 5404 `:` 5405 vec2 bumpMapCachedUv = g${this.bumpMap.uuid.toString().replace(/-/g,"")}_writeUvs; 5406 vec2 grad = dHdxy(${t.result}, bumpMapCachedUv, ${r}); 5407 normal = perturbNormalArb( - vViewPosition, normal, grad, faceDirection ); 5408 `,p.push(`// Call the Texture Layer's function once here so that it writes out its procedural UV coordinates 5409 ${i.result}; 5410 ${a} 5411 `)}p.push(i.code," vec3 diffuseColor = "+i.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",r.code," vec3 specular = "+r.result+";",a.code," float shininess = max( 0.0001, "+a.result+" );"," float specularStrength = 1.0;"),c&&p.push(c.code,"#ifdef ALPHATEST","if ( "+c.result+" <= ALPHATEST ) discard;","#endif"),p.push("material.diffuseColor = diffuseColor;"),p.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),p.push("vec3 ao = aoEnabled ? tex2D(aoMap, gl_FragCoord.xy / resolution).rgb : vec3(1.0);","vec3 outgoingLight = ((reflectedLight.directDiffuse + reflectedLight.indirectDiffuse) * ao) + reflectedLight.directSpecular;");let f="1.0";this.mask&&(this.mask.analyze(e),f=`luminance(${this.mask.flow(e,"v3").result})`),p.push(` 5412 if (outgoingLight != diffuseColor) { 5413 float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 ); 5414 accumAlpha += ( 1.0 - accumAlpha ) * ${o.result} * ${f} * lightAccu; 5415 outgoingLight = spe_blend( diffuseColor, outgoingLight, ${o.result} * ${f}, ${l.result} ); 5416 } 5417 `),h&&p.push(h.code,`outgoingLight = spe_blend(outgoingLight, ${h.result}, 1.0, SPE_BLENDING_NORMAL);`),c?p.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${c.result} );`):p.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),d&&p.push(`gl_FragColor.a *= ${d.result};`),p.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),t=p.join(` 5418`)}return t}},Ms=class{constructor(e=1e4){this.timeout=e,this.cache=new Map,this.head={data:null,time:0,src:null,next:null,prev:null},this.tail={data:null,time:1/0,src:null,next:null,prev:null},this.hasClean=!1,this.cleanupTimer=null,this.head.next=this.tail,this.tail.prev=this.head}log(){}remove(e){let t=this.cache.get(e);t&&(this.dispose(e,t.data),this.cache.delete(e),t.prev.next=t.next,t.next.prev=t.prev,t.next=null,t.prev=null,t.data=null)}scheduleCleanup(){this.hasClean||(this.log("scheduled cleanup"),this.hasClean=!0,this.cleanupTimer=setTimeout(()=>{this.hasClean=!1,this.cleanupTimer=null,this.log("cleaning");let e=Date.now(),t=this.head.next;for(;t.time<e-this.timeout;){this.dispose(t.src,t.data),this.cache.delete(t.src);let e=t;(t=t.next).prev=this.head,this.head.next=t,e.next=null,e.prev=null,e.data=null}this.head.next!==this.tail?this.scheduleCleanup():this.log("no more cleanup")},this.timeout+1e3))}has(e){return this.cache.get(e)?.data}load(e){let t=Date.now(),i=this.cache.get(e);return void 0===i?(i={data:this.create(e),src:e,time:t,next:null,prev:null},this.cache.set(e,i)):(i.time=t,i.prev.next=i.next,i.next.prev=i.prev),i.prev=this.tail.prev,i.next=this.tail,this.tail.prev.next=i,this.tail.prev=i,this.scheduleCleanup(),i.data}disposeAll(){null!==this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null),this.hasClean=!1,this.cache.forEach((e,t)=>{this.dispose(t,e.data),e.next=null,e.prev=null,e.data=null}),this.cache.clear(),this.head.next=this.tail,this.tail.prev=this.head}destroy(){this.disposeAll(),this.head=null,this.tail=null}},Ma=class extends Ms{create(e){return URL.createObjectURL(new Blob([e]))}dispose(e,t){URL.revokeObjectURL(t)}},Mn=class{constructor(e,t){this.data=e,this.cache=t,this.refCount=0}deref(){this.refCount,this.refCount-=1,0===this.refCount&&(this.cache.remove(this),this.dispose())}dispose(){this.refCount}},Mo=class{constructor(){this.cache=new Map}remove(e){this.cache.delete(e.data)}load(e){let t=this.cache.get(e);return void 0===t&&(t=this.create(e),this.cache.set(e,t)),t.refCount+=1,t}},Ml=class extends Mn{constructor(e,t){super(e,t.imageHolderCache),this.data=e,this.shared=t,this.loaded=!1,this.isVideo=!1,this.isBuffer=!1,this._cache={1e3:{},1001:{},1002:{}},this.isVideo="video"===e.type,this.isBuffer=!0===e.isWebGLRenderTarget,this.loadPromise=this.updateSrc(this.isBuffer?e:e.data)}async updateSrc(e){if(typeof document>"u")return;this.disposeTextures(),this.loaded=!1;let t=()=>{for(let e of(this.loaded=!0,Object.values(this._cache)))for(let t of Object.values(e))for(let e of Object.values(t))e&&(e.image=this.img,e.needsUpdate=!0);this.shared.requestRender()};if(this.isBuffer)this.img=e,this.loaded=!0;else if(this.isVideo){if(this.img=document.createElement("video"),this.img.preload="auto",this.img.playsInl
5418ine=!0,this.img.currentTime=.01,"string"!=typeof e){let t;var i=new FileReader;i.readAsDataURL(new Blob([e],{type:"video/mp4"})),await new Promise(e=>{i.onloadend=i=>{t=i.target?.result,e(null)}}),this.img.src=t}else this.img.src=e;this.img.onloadeddata=()=>{t()}}else this.img=new Image,this.img.src="string"==typeof e?e:(A6||(A6=new Ma),A6.load(e)),this.img.onload=t,await new Promise(e=>{this.img.onload=()=>{t(),e(null)}})}getTexture(e,t=1008,i=1006){let r=this._cache[e]?.[t]?.[i];if(r)return r;{let r;return r=this.isBuffer?this.img.texture:this.isVideo?new n4(this.img,void 0,e,e):new i_(this.img,void 0,e,e,i,t),this.loaded&&(r.needsUpdate=!0),void 0===this._cache[e]&&(this._cache[e]={}),void 0===this._cache[e][t]&&(this._cache[e][t]={}),this._cache[e][t][i]=r,r}}setNeedsUpdate(e){for(let t of Object.values(this._cache))for(let i of Object.values(t))for(let t of Object.values(i))t&&(t.needsUpdate=e)}disposeTextures(){for(let[e,t]of Object.entries(this._cache))for(let[i,r]of Object.entries(t))for(let[t,a]of Object.entries(r))a?.dispose(),void 0!==this._cache[e]&&void 0!==this._cache[e][i]&&(this._cache[e][i][t]=void 0)}dispose(){super.dispose(),this.disposeTextures()}},Mh=class extends Ml{},Mc={year:0,month:1,day:2,hour:3,minute:4,second:5},Md={};function Mu(e,t,i,r,a,o,l){var h=new Date(0);return h.setUTCFullYear(e,t,i),h.setUTCHours(r,a,o,l),h}var Mp=/^(Z)$/,Mf=/^([+-]\d{2})$/,Mm=/^([+-]\d{2}):?(\d{2})$/;function Mg(e,t,i){if(!e||(r=Mp.exec(e)))return 0;if(r=Mf.exec(e))return My(o=parseInt(r[1],10))?-(36e5*o):NaN;if(r=Mm.exec(e)){var r,a,o=parseInt(r[1],10),l=parseInt(r[2],10);return My(o,l)?(a=36e5*Math.abs(o)+6e4*l,o>0?-a:a):NaN}if(function(e){if(Mx[e])return!0;try{return new Intl.DateTimeFormat(void 0,{timeZone:e}),Mx[e]=!0,!0}catch{return!1}}(e)){t=new Date(t||Date.now());var h,c=Mv(i?t:Mu((h=t).getFullYear(),h.getMonth(),h.getDate(),h.getHours(),h.getMinutes(),h.getSeconds(),h.getMilliseconds()),e);return-(i?c:function(e,t,i){var r=e.getTime()-t,a=Mv(new Date(r),i);if(t===a)return t;var o=Mv(new Date(r-=a-t),i);return a===o?a:Math.max(a,o)}(t,c,e))}return NaN}function Mv(e,t){var i,r,a,o,l,h=(l=function(e){if(!Md[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z"));Md[e]="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"numeric",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return Md[e]}(t)).formatToParts?function(e,t){try{for(var i=e.formatToParts(t),r=[],a=0;a<i.length;a++){var o=Mc[i[a].type];o>=0&&(r[o]=parseInt(i[a].value,10))}return r}catch(e){if(e instanceof RangeError)return[NaN];throw e}}(l,e):(i=l,r=e,a=i.format(r).replace(/\u200E/g,""),[(o=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(a))[3],o[1],o[2],o[4],o[5],o[6]]),c=Mu(h[0],h[1]-1,h[2],h[3]%24,h[4],h[5],0).getTime(),d=e.getTime(),p=d%1e3;return c-(d-=p>=0?p:1e3+p)}function My(e,t){return -23<=e&&e<=23&&(null==t||0<=t&&t<=59)}var Mx={},Mb=tB(tU(),1),Mw=tB(tk(),1),MS=/^([0-9W+-]+)(T| )(.*)/,M_=/^([0-9W+-]+)(.*)/,MA=/^(\d{2})$/,MM=[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],MC=/^(\d{4})/,ME=[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MT=/^-(\d{2})$/,MP=/^-?(\d{3})$/,MD=/^-?(\d{2})-?(\d{2})$/,MO=/^-?W(\d{2})$/,MI=/^-?W(\d{2})-?(\d{1})$/,MR=/^(\d{2}([.,]\d*)?)$/,ML=/^(\d{2}):?(\d{2}([.,]\d*)?)$/,MB=/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,Mz=/(Z|[+-]\d{2}(?::?\d{2})?| UTC| [a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?)$/;function MF(e,t,i){t=t||0,i=i||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var a=7*t+i+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+a),r}var MN=[31,28,31,30,31,30,31,31,30,31,30,31],MU=[31,29,31,30,31,30,31,31,30,31,30,31];function Mk(e){return e%400==0||e%4==0&&e%100!=0}function MV(e,t,i){if(t<0||t>11)return!1;if(null!=i){if(i<1)return!1;var r=Mk(e);if(r&&i>MU[t]||!r&&i>MN[t])return!1}return!0}function Mj(e,t,i){return!(t<0||t>52||null!=i&&(i<0||i>6))}function MG(e,t,i){return!(null!=e&&(e<0||e>=25)||null!=t&&(t<0||t>=60)||null!=i&&(i<0||i>=60))}function MW(e,t){return t.color(e)}function MH(e=new Date,t){var i,r,a,o,l,h;let c,d,p=t.format,f=e.getSeconds(),m=e;t&&null!==t.timeZone&&(i=new Date,r=t.timeZone,a=function(e,t){if(arguments.length<1)throw TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var i=t||{},r=null==i.additionalDigits?2:(0,Mb.default)(i.additionalDigits);if(2!==r&&1!==r&&0!==r)throw RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"==typeof e&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var a=function(e){var t,i={},r=MS.exec(e);if(r?(i.date=r[1],t=r[3]):(r=M_.exec(e))?(i.date=r[1],t=r[2]):(i.date=null,t=e),t){var a=Mz.exec(t);a?(i.time=t.replace(a[1],""),i.timeZone=a[1].trim()):i.time=t}return i}(e),o=function(e,t){var i,r=MM[t],a=ME[t];if(i=MC.exec(e)||a.exec(e)){var o=i[1];return{year:parseInt(o,10),restDateString:e.slice(o.length)}}if(i=MA.exec(e)||r.exec(e)){var l=i[1];return{year:100*parseInt(l,10),restDateString:e.slice(l.length)}}return{year:null}}(a.date,r),l=o.year,h=function(e,t){if(null===t)return null;if(0===e.length)return(o=new Date(0)).setUTCFullYear(t),o;if(i=MT.exec(e))return o=new Date(0),MV(t,r=parseInt(i[1],10)-1)?(o.setUTCFullYear(t,r),o):new Date(NaN);if(i=MP.exec(e)){var i,r,a,o=new Date(0),l=parseInt(i[1],10);return!function(e,t){if(t<1)return!1;var i=Mk(e);return!(i&&t>366||!i&&t>365)}(t,l)?new Date(NaN):(o.setUTCFullYear(t,0,l),o)}if(i=MD.exec(e)){o=new Date(0),r=parseInt(i[1],10)-1;var h=parseInt(i[2],10);return MV(t,r,h)?(o.setUTCFullYear(t,r,h),o):new Date(NaN)}if(i=MO.exec(e))return Mj(t,a=parseInt(i[1],10)-1)?MF(t,a):new Date(NaN);if(i=MI.exec(e)){a=parseInt(i[1],10)-1;var c=parseInt(i[2],10)-1;return Mj(t,a,c)?MF(t,a,c):new Date(NaN)}return null}(o.restDateString,l);if(isNaN(h)||!h)return new Date(NaN);var c,d=h.getTime(),p=0;if(a.time&&isNaN(p=function(e){var t,i,r;if(t=MR.exec(e))return MG(i=parseFloat(t[1].replace(",",".")))?i%24*36e5:NaN;if(t=ML.exec(e))return MG(i=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?i%24*36e5+6e4*r:NaN;if(t=MB.exec(e)){i=parseInt(t[1],10),r=parseInt(t[2],10);var a=parseFloat(t[3].replace(",","."));return MG(i,r,a)?i%24*36e5+6e4*r+1e3*a:NaN}return null}(a.time)))return new Date(NaN);if(a.timeZone||i.timeZone){if(isNaN(c=Mg(a.timeZone||i.timeZone,new Date(d+p))))return new Date(NaN)}else c=(0,Mw.default)(new Date(d+p)),c=(0,Mw.default)(new Date(d+p+c));return new Date(d+p+c)}(i,void 0),o=Mg(r,a,!0),l=new Date(a.getTime()-o),(h=new Date(0)).setFullYear(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()),h.setHours(l.getUTCHours(),l.getUTCMinutes(),l.getUTCSeconds(),l.getUTCMilliseconds()),m=h);let g=m.getHours(),v=m.getMinutes(),y;"12ampm"===t.format12h24h&&(y=g>=12?"PM":"AM");let x=g;switch("24"!==t.format12h24h&&0==(x=g%12)&&(x=12),p){case"HH:mm:ss":c=[x,v,f];break;case"HH:mm":c=[x,v];break;case"HH":c=[x],y=void 0;break;case"mm":c=[v],y=void 0;break;case"ss":c=[f],y=void 0;break;case"year":d=m.getFullYear();break;case"month":d=m.getMonth()+1;break;case"dayOfYear":d=Math.floor((m.getTime()-new Date(m.getFullYear(),0,0).getTime())/864e5);break;case"dayOfMonth":d=m.getDate();break;case"secondOfDay":d=60*g*60+60*v+f;break;default:d=0}return void 0!==c?{textValue:c,suffix:y}:d}function Mq(e,t){let{alpha:i,mode:r,isMask:a}
5418=e,o="string"==typeof i?(Number(t.getVariable(i))??100)/100:i;return{...{type:e.type},alpha:o,mode:r,isMask:a}}var MX=class extends _0{},MY={noise:["noiseType"],texture:["projection","axis","side"],video:["projection","axis","side"],displace:["noiseType"],light:["roughnessMap","bumpMap"],depth:["smooth","isWorldSpace","gradientType","isVector"],pattern:["style","projection","axis"]},MQ={depth:["colors"]};function MZ(e,t){if(Array.isArray(t)){if(!Array.isArray(e)||e.length!==t.length)return!1;for(let[i,r]of t.entries()){let t=e[i];if("string"==typeof r||"number"==typeof r&&"string"==typeof t)return!0}return!1}let i="string"==typeof e,r="string"==typeof t;return i!==r||i&&r}function MK(e,t,i){let r=i.uniforms[`f${i.id}_texture`];if(!r)return!1;let a=!1;if("image"in e){let i=e.image,a=t.image(i);r.image instanceof Mh||r.image.deref(),r.image=a}if("video"in e){let i=e.video,a=t.video(i);r.image instanceof Mh||r.image.deref(),r.image=a}if("wrapping"in e&&(r.wrap=e.wrapping),"minFilter"in e&&(r.minFilter=e.minFilter),"magFilter"in e&&(r.magFilter=e.magFilter),"rotation"in e&&i.uniforms[`f${i.id}_rotation`])return i.uniforms[`f${i.id}_rotation`].value=(M$(e.rotation??0,t)??0)*t8.DEG2RAD,a;if("repeat"in e||"offset"in e||"rotation"in e){let r=i.uniforms[`f${i.id}_mat`];if(!r)return a;
5418if("repeat"in e){let o=e.repeat;MZ(i.data.texture.repeat,o)&&(a=!0),r.repeat=M2(o,t).map((e,t)=>"string"==typeof o[t]?1/e:e)}if("offset"in e){let o=e.offset;MZ(i.data.texture.offset,o)&&(a=!0),r.offset=M2(o,t).map((e,t)=>"string"==typeof o[t]?-e:e)}if("rotation"in e){let o=i.data.texture.rotation,l=e.rotation??0;(void 0===o||MZ(o,l))&&(a=!0),r.rotation=M$(l,t)??0}r.updateMatrix()}return a}var MJ=(e,t,i)=>Math.max(0,Math.min(1,Number(t.getVariable("number"==typeof e?100*e:e,i)??100)/100))??1,M$=(e,t,i)=>"number"==typeof e?e:t.getVariable(e,i),M0=(e,t)=>(e||(e=new iD),e.x=M$(e.x,t)??0,e.y=M$(e.y,t)??0,e.z=M$(e.z,t)??0,e),M1=(e,t)=>(e||(e=new t9),e.x=M$(e.x,t)??0,e.y=M$(e.y,t)??0,e),M2=(e,t)=>{let i=e.map(e=>M$(e,t)??0);return[i[0],i[1]]},M3=class{constructor(e,t,i,r,a){for(let a in this.id=e,this.uuid=t,this.data=i,this.uniforms={},r)this.uniforms[`f${this.id}_${a}`]=r[a];for(let e in i)M9(e,this,i,a)}get type(){return this.data.type}static create(e,t,i,r){if("light"===i.type)return M6.createLightLayer(e,t,i,r);if("texture"===i.type||"video"===i.type){let a="texture"===i.type?r.uiBuffer(i.texture.image)??r.image(i.texture.image):r.video(i.texture.video),o=new AO(a,i.texture.wrapping,i.texture.minFilter??1008,i.texture.magFilter??1006),l=new AD(a),h=new AB(M2(i.texture.repeat,r),M2(i.texture.offset,r),M$(i.texture.rotation??0,r)),c=new As(+!!i.crop),d=new AC(i.projection??0),p=new AC(["x","y","z"].indexOf(i.axis)??0),f=new AC(i.side??0),m=new _J(i.size?new t9(...M2(i.size,r)):new t9(100,100)),g=new As(i.blending??0),v=new As(MJ(i.alpha,r)),y=new AC(i.mode??0),x=new AE(i.isMask??!1),b=new Ak(o,l,c,d,p,f,m,g,h,v,y,x),w=new Ai(b.calpha,"f");return new M4(e,t,i,{texture:o,textureSize:l,crop:c,projection:d,axis:p,side:f,size:m,blending:g,mat:h,alpha:v,mode:y,isMask:x},b,y,w,x,r)}if("matcap"===i.type){let a=new AO(r.image(i.texture.image),i.texture.wrapping,i.texture.minFilter??1008,i.texture.magFilter??1006),o=new As(MJ(i.alpha,r)),l=new AC(i.mode??0),h=new AE(i.isMask??!1),c=new As((M$(i.texture.rotation??0,r)??0)*t8.DEG2RAD),d=new AW(a,o,l,h,c),p=new Ai(d.calpha,"f");return new M4(e,t,i,{texture:a,alpha:o,mode:l,isMask:h,rotation:c},d,l,p,h,r)}if("displace"!==i.type){var a,o,l,h;let c;return a=e,o=t,c=function(e,t){var i,r,a,o,l,h,c,d,p,f,m,g;switch(e.type){case"fresnel":return function(e,t){let{bias:i,scale:r,intensity:a,factor:o,color:l}=e;return{...Mq(e,t),color:MW(l,t),bias:i,scale:r,intensity:a,factor:o}}(e,t);case"gradient":return function(e,t){let{gradientType:i,smooth:r,colors:a,steps:o,angle:l,offset:h,morph:c}=e;return{...Mq(e,t),gradientType:i,smooth:r,colors:a.map(e=>new iA(e[0],e[1],e[2],e[3])),num:a.length,steps:o,offset:new t9(...h.map(e=>"number"==typeof e?e:0)),morph:new t9(...c.map(e=>"number"==typeof e?e:0)),angle:l}}(e,t);case"depth":return function(e,t){let{gradientType:i,near:r,far:a,isVector:o,isWorldSpace:l,origin:h,direction:c,colors:d,steps:p,smooth:f}=e;return{...Mq(e,t),gradientType:i,near:r,far:a,isVector:o,isWorldSpace:l,origin:new iD(...h),direction:c?new iD(...c):new iD(1,0,0),colors:d.map(e=>void 0!==e?new iA(e[0],e[1],e[2],e[3]):new iA(0,0,0,0)),steps:p.slice(0,d.length),smooth:f}}(e,t);case"normal":return function(e,t){let{cnormal:i}=e;return{...Mq(e,t),cnormal:new iD(i[0],i[1],i[2])}}(e,t);case"noise":return{...Mq(i=e,r=t),scale:i.scale,move:i.move,fA:new t9(...i.fA.map(e=>"number"==typeof e?e:0)),fB:new t9(...i.fB.map(e=>"number"==typeof e?e:0)),size:new iD(...i.size),distortion:new t9(...i.distortion.map(e=>"number"==typeof e?e:0)),colorA:MW(i.colorA,r),colorB:MW(i.colorB,r),colorC:MW(i.colorC,r),colorD:MW(i.colorD,r),noiseType:i.noiseType,voronoiStyle:i.voronoiStyle,highCut:i.highCut,lowCut:i.lowCut,smoothness:i.smoothness,seed:i.seed,quality:i.quality};case"rainbow":return{...Mq(a=e,t),filmThickness:a.filmThickness,movement:a.movement,wavelengths:new iD(...a.wavelengths),noiseStrength:a.noiseStrength,noiseScale:a.noiseScale,offset:new iD(...a.offset)};case"toon":return{...Mq(o=e,l=t),positioning:o.positioning,colors:o.colors.map(e=>new iA(e[0],e[1],e[2],e[3])),num:o.colors.length,steps:o.steps,source:new iD(...o.source),isWorldSpace:o.isWorldSpace,noiseStrength:o.noiseStrength,noiseScale:o.noiseScale,shadowColor:MW(o.shadowColor,l),offset:new iD(...o.offset)};case"outline":return{...Mq(h=e,c=t),outlineColor:MW(h.outlineColor,c),c
5418ontourColor:MW(h.contourColor,c),outlineWidth:h.outlineWidth,contourWidth:h.contourWidth,outlineThreshold:h.outlineThreshold,contourThreshold:h.contourThreshold,outlineSmoothing:h.outlineSmoothing,contourFrequency:h.contourFrequency,contourDirection:new iD(...h.contourDirection),positionalLines:h.positionalLines,compensation:h.compensation};case"transmission":return{...Mq(d=e,t),thickness:d.thickness,ior:d.ior,roughness:d.roughness};case"pattern":return{...Mq(p=e,f=t),style:p.style,projection:p.projection,axis:p.axis,blending:p.blending,offset:new t9(...p.offset.map(e=>"number"==typeof e?e:0)),colorA:MW(p.colorA,f),colorB:MW(p.colorB,f),frequency:new t9(...p.frequency.map(e=>"number"==typeof e?e:0)),size:p.size,variation:p.variation,smoothness:p.smoothness,zigzag:p.zigzag,rotation:p.rotation,vertical:new t9(...p.vertical.map(e=>"number"==typeof e?e:0)),horizontal:new t9(...p.horizontal.map(e=>"number"==typeof e?e:0)),sides:p.sides};default:return{...Mq(m=e,g=t),color:MW(m.color,g)}}}(l=i,h=r),function(e,t,i,r,a){switch(e.type){case"color":{let o=new AM(r.color??5526619),l=M8(r),h=new AN(o,l.alpha),c=new Ai(h.calpha,"f");return new M4(t,i,e,{color:o,...l},h,l.mode,c,l.isMask,a)}case"fresnel":{let o=new AM(r.color??0xffffff),l=new As(M$(r.bias,a)??.1),h=new As(M$(r.scale,a)??1),c=new As(M$(r.intensity,a)??2),d=new As(M$(r.factor,a)??1),p=M8(r),f=new Aj(o,l,h,c,d,p.alpha,p.mode,p.isMask),m=new Ai(f.calpha,"f");return new M4(t,i,e,{color:o,bias:l,scale:h,intensity:c,factor:d,...p},f,p.mode,m,p.isMask,a)}case"rainbow":{let o=new As(M$(r.filmThickness,a)??30),l=new As(M$(r.movement,a)??0),h=new _$(M0(r.wavelengths,a)),c=new As(M$(r.noiseStrength,a)??0),d=new As(M$(r.noiseScale,a)??1),p=new _$(M0(r.offset,a)),f=M8(r),m=new AQ(o,l,h,c,d,p,f.alpha,f.isMask),g=new Ai(m.calpha,"f");return new M4(t,i,e,{filmThickness:o,movement:l,wavelengths:h,noiseStrength:c,noiseScale:d,offset:p,...f},m,f.mode,g,f.isMask,a)}case"transmission":{let o=new As(M$(r.thickness??10,a)),l=new As(M$(r.ior??1.5,a)),h=new As(M$(r.roughness??.5,a)),c=A1.transmissionSize,d=A1.transmissionRenderTarget,p=A1.transmissionRenderTargetDepth,f=window.innerWidth,m=window.innerHeight,g=f>=m?new _J(m/f,1):new _J(1,f/m),v=M8(r),y=new AJ(o,l,h,c,d,p,g,v.alpha),x=new Ai(y.calpha,"f");return new M4(t,i,e,{thickness:o,ior:l,roughness:h,aspectRatio:g,...v},y,v.mode,x,v.isMask,a)}case"toon":{let o,l=new AC(r.positioning??0),h;r.colors?h=new Az(r.colors.length,r.colors):(h=new Az(10,new iA(0,0,0,1))).value[1]=new iA(1,1,1,1),r.steps?o=new AT(r.steps.length,r.steps):(o=new AT(10,1)).value[0]=0;let c=new _$(M0(r.source??new iD(0,0,0),a)),d=new AE(r.isWorldSpace??!0),p=new As(M$(r.noiseStrength??0,a)),f=new As(M$(r.noiseScale??1,a)),m=new _1(r.shadowColor),g=new _$(M0(r.offset??new iD(0,0,0),a)),v=M8(r),y=new AZ(l,h,o,c,d,p,f,m,g,v.alpha),x=new Ai(y.calpha,"f");return new M4(t,i,e,{positioning:l,colors:h,steps:o,source:c,isWorldSpace:d,noiseStrength:p,noiseScale:f,shadowColor:m,offset:g,...v},y,v.mode,x,v.isMask,a)}case"outline":{let o=new AM(r.outlineColor??0xffffff),l=new AM(r.contourColor??0xffffff),h=new As(M$(r.outlineWidth??.1,a)),c=new As(M$(r.contourWidth??.1,a)),d=new As(M$(r.outlineThreshold??.1,a)),p=new As(M$(r.contourThreshold??.1,a)),f=new As(M$(r.outlineSmoothing??.1,a)),m=new As(M$(r.contourFrequency??.1,a)),g=new _$(M0(r.contourDirection??new iD(0,1,0),a)),v=new AE(r.positionalLines??!1),y=new AE(r.compensation??!0),x=A1.normalRenderTarget,b=A1.normalRenderTargetDepth,w=A1.pixelRatioNode,S=A1.resolution,_=M8(r),A=new AX(o,l,h,c,d,p,f,m,g,v,y,S,x,b,w,_.alpha),M=new Ai(A.calpha,"f");return new M4(t,i,e,{outlineColor:o,contourColor:l,outlineWidth:h,contourWidth:c,outlineThreshold:d,contourThreshold:p,outlineSmoothing:f,contourFrequency:m,contourDirection:g,positionalLines:v,compensation:y,..._},A,_.mode,M,_.isMask,a)}case"depth":{let o,l=new AC(r.gradientType??0),h=new AE(r.smooth??!1),c=new As(M$(r.near,a)??50),d=new As(M$(r.far,a)??200),p=new As(r.isVector??1),f=new As(r.isWorldSpace??0),m=new _$(M0(r.origin,a)),g=new _$(M0(r.direction,a)),v;r.colors?v=new Az(r.colors.length,r.colors):(v=new Az(2,new iA(0,0,0,1))).value[1]=new iA(1,1,1,1),r.steps?o=new AT(r.steps.length,r.steps):(o=new AT(2,1)).value[0]=0;let y=M8(r),x=new AV(l,h,c,d,p,f,m,g,v,o,y.alpha,y.isMask),b=new Ai(x.calpha,"f");return new M4(t,i,e,{gradientType:l,smooth:h,near:c,far:d,isVector:p,isWorldSpace:f,origin:m,direction:g,colors:v,steps:o,...y},x,y.mode,b,y.isMask,a)}case"noise":{let o=new As(M$(r.scale,a)??1),l=new _$(M0(r.size??new iD(100,100,100),a)),h=new As(M$(r.move,a)??1),c=new _J(M1(r.fA??new t9(1.7,9.2),a)),d=new _J(M1(r.fB??new t9(8.3,2.8),a)),p=new _J(M1(r.distortion??new t9(1,1),a)),f=new _1(r.colorA),m=new _1(r.colorB),g=new _1(r.colorC),v=new _1(r.colorD),y=new AC(r.noiseType??0),x=new AC(r.voronoiStyle??0),b=new As(M$(r.highCut,a)??1),w=new As(M$(r.lowCut,a)??0),S=new As(M$(r.smoothness,a)??.5),_=new As(M$(r.seed,a)??.5),A=new AC(r.quality??1),M=M8(r),C=new Aq(o,l,h,c,d,p,f,m,g,v,M.alpha,y,M.isMask,x,b,w,S,_,A),E=new Ai(C.calpha,"f");return new M4(t,i,e,{scale:o,size:l,move:h,fA:c,fB:d,distortion:p,colorA:f,colorB:m,colorC:g,colorD:v,noiseType:y,...M,voronoiStyle:x,highCut:b,lowCut:w,smoothness:S,seed:_,quality:A},C,M.mode,E,M.isMask,a)}
5418case"normal":{let o=new _$(r.cnormal??new iD(1,1,1)),l=M8(r),h=new AU(o,l.alpha),c=new Ai(h.calpha,"f");return new M4(t,i,e,{cnormal:o,...l},h,l.mode,c,l.isMask,a)}case"gradient":{let o,l=new AC(r.gradientType??0),h=new AE(r.smooth??!1),c;r.colors?c=new Az(r.colors.length,r.colors):(c=new Az(10,new iA(0,0,0,1))).value[1]=new iA(1,1,1,1),r.steps?o=new AT(r.steps.length,r.steps):(o=new AT(10,1)).value[0]=0;let d=new _J(M1(r.offset??new t9(0,0),a)),p=new _J(M1(r.morph??new t9(0,0),a)),f=new As(M$(r.angle??0,a)),m=M8(r),g=new AG(l,h,c,o,d,p,f,m.alpha,m.isMask),v=new Ai(g.calpha,"f");return new M4(t,i,e,{gradientType:l,smooth:h,colors:c,steps:o,offset:d,morph:p,angle:f,...m},g,m.mode,v,m.isMask,a)}case"pattern":{let o=new AC(r.style??0),l=new AC(r.projection??0),h=new AC(["x","y","z"].indexOf(r.axis)??0),c=new As(M$(r.blending??0,a)),d=new _J(M1(r.offset,a)),p=new _1(r.colorA),f=new _1(r.colorB),m=new _J(M1(r.frequency??new t9(10,10),a)),g=new As(M$(r.size??.5,a)),v=new As(M$(r.variation??0,a)),y=new As(M$(r.smoothness??.5,a)),x=new As(M$(r.zigzag??0,a)),b=new As(M$(r.rotation??0,a)),w=new _J(M1(r.vertical??new t9(0,1),a)),S=new _J(M1(r.horizontal??new t9(0,1),a)),_=new AC(r.sides??6),A=M8(r),M=new AY(o,l,h,c,d,p,f,m,g,v,y,x,b,w,S,_,A.alpha,A.isMask),C=new Ai(M.calpha,"f");return new M4(t,i,e,{style:o,projection:l,axis:h,blending:c,offset:d,colorA:p,colorB:f,frequency:m,size:g,variation:v,smoothness:y,zigzag:x,rotation:b,vertical:w,horizontal:S,sides:_,...A},M,A.mode,C,A.isMask,a)}default:{let o=new AM(1,0,0,1),l=M8(r),h=new AN(o,l.alpha),c=new Ai(h.calpha,"f");return new M4(t,i,e,{color:o,...l},h,l.mode,c,l.isMask,a)}}}(l,a,o,c,h)}if("noise"===i.displacementType){let a=new _$(new iD(...i.offset.map(e=>M$(e,r)??0))),o=new As(M$(i.scale,r)??10),l=new As(M$(i.intensity,r)??8),h=new As(M$(i.movement,r)??1),c=new AC(i.noiseType??0),d=new AC(i.voronoiStyle??0),p=new As(M$(i.smoothness,r)??.5),f=new As(M$(i.seed,r)??0),m=new As(M$(i.highCut,r)??1),g=new As(M$(i.lowCut,r)??0),v=new AC(M$(i.quality,r)??1),y=new A0(l,h,a,d,p,f,m,g,v,o,c);return new M5(e,t,i,{offset:a,scale:o,intensity:l,movement:h,noiseType:c,voronoiStyle:d,smoothness:p,seed:f,highCut:m,lowCut:g,quality:v},y,r)}throw Error()}updateByOp(e,t,i){let r=!1;if(void 0===e.path[0]){for(let i of Object.keys(e.props))try{let e=this.data[i],a=t[i];if(Array.isArray(e)&&Array.isArray(a)){for(let[t,i]of a.entries()){let a=e[t];if("string"==typeof i||"number"==typeof i&&"string"==typeof a){r=!0;break}}if(r)break}else if("string"==typeof a&&"number"==typeof e||"number"==typeof a&&"string"==typeof e||"string"==typeof a&&"string"==typeof e&&a!==e){r=!0;break}}catch{}if(0===e.type)return"type"in e.props||"category"in e.props||"visible"in e.props||"noiseType"in e.props?(i.scene.markNeedsUpdateRendererDirty(),!0):function(e,t,i,r){let a=!1;for(let[o,l]of Object.entries(e)){if("bumpMap"===o||"roughnessMap"===o){a=!0;continue}if(!o||void 0===l)continue;if(M9(o,i,r,t)){"visible"===o&&"light"===i.type&&(a=!0);continue}i.visible=r.visible;let e=i.uniforms[`f${i.id}_${o}`];if(e&&!(e instanceof AP))switch(a=a||function(e,t,i){if("isMask"===t)return!0;let r=MY[e.type],a=MQ[e.type];if(void 0!==a){let r=e.color;if(a.includes(t)){let e=r[t]?.value?.length;if(void 0!==e&&e!==i.length)return!0}}return void 0!==r&&r.includes(t)}(i,o,l),e.constructor){case AM:if("string"==typeof l){let i=t.getColor(l);i&&(e.value=i);break}e.value instanceof MX?e.value=new _0(l.r,l.g,l.b,l.a):e.setRGBA(l);break;case _1:if("string"==typeof l){let i=t.getColor(l);i&&(e.value=i);break}e.value instanceof MX?e.value=new _0(l.r,l.g,l.b,l.a):e.value.setRGBA(l.r,l.g,l.b,l.a);break;case _J:e.value.setX(l[0]),e.value.setY(l[1]);break;case _$:e.value.setX(l[0]),e.value.setY(l[1]),e.value.setZ(l[2]);break;case Ar:MK(l,t,i);break;case Az:e.value=l.map(e=>new iA(...e));break;default:e.value=l}}return a}(e.props,i.shared,this,t)||r}else if("texture"===e.path[0])return!("texture"in t)&&!("video"in t)||MK(e.props,i.shared,this)||r;return r}dispose(){var e;let t;if(e=this,"texture"===(t=e instanceof M3?e.type:e)||"video"===t||"displace_map"===t||"matcap"===t){let e=this.uniforms[`f${this.id}_texture`];if(!e)return!1;e.image instanceof Mh||e.image.deref()}}hasValueByKey(e){return void 0!==this.uniforms[e]}hasValue(e){return this.hasValueByKey(`f${this.id}_${e}`)}setValue(e,t){let i=`f${this.id}_${e}`;this.hasValueByKey(i)&&void 0!==t&&(this.uniforms[i].value=t)}
vendor: 1,717 bytes, line 5418
5418getNode(e){let t=`f${this.id}_${e}`;if(this.hasValueByKey(t))return this.uniforms[t]}getValue(e){let t=`f${this.id}_${e}`;if(this.hasValueByKey(t))return this.uniforms[t].value}getName(e){let t=/f\d+_(.*)/.exec(e);if(t&&t.length>1)return t[1]}getNames(){let e=[];for(let t in this.uniforms){let i=this.getName(t);i&&e.push(i)}return e}},M4=class extends M3{constructor(e,t,i,r,a,o,l,h,c){super(e,t,i,r,c),this.params=r,this.color=a,this.mode=o,this.alpha=l,this.isMask=h}},M5=class extends M3{constructor(e,t,i,r,a,o){super(e,t,i,r,o),this.position=a}},M6=class extends M3{constructor(e,t,i,r,a,o){super(e,t,i,a,o),this.node=r}static createLightLayer(e,t,i,r){let a,o=new As(MJ(i.alpha,r)),l=new AC(i.mode),h=new As(i.bumpMapIntensity),c=new As(MJ(i.alphaOverride,r)),d;if(i.visible)if("lambert"===i.category){a=new A7;let e=new AM(r.color(i.emissive)??0),t=new AE(i.occlusion??!0);d={emissive:e,occlusion:t},a.emissive=e,a.occlusion=t}else if("toon"===i.category){a=new Mr;let e=new As(i.shininess??30),t=new AM(r.color(i.specular)??1118481);d={shininess:e,specular:t},a.shininess=e,a.specular=t}else if("physical"===i.category){a=new Mi;let e=new As(i.roughness??.3),t=new As(i.metalness??0),r=new As(i.reflectivity??.5),o=new AE(i.occlusion??!0);d={roughness:e,metalness:t,reflectivity:r,occlusion:o},a.roughness=e,a.metalness=t,a.reflectivity=r,a.occlusion=o}else{a=new Mt;let e=new As(i.shininess??30),t=new AM(void 0!==i.specular?r.color(i.specular)??1118481:1118481),o=new AE(i.occlusion??!0);d={shininess:e,specular:t,occlusion:o},a.shininess=e,a.specular=t,a.occlusion=o}else a=new A9,d={};return a.alpha=new As(1),a.shadingAlpha=o,a.shadingBlend=l,a.bumpMapIntensity=h,a.alphaOverride=c,d.alpha=a.shadingAlp
5418ha,d.mode=a.shadingBlend,d.bumpMapIntensity=a.bumpMapIntensity,d.alphaOverride=a.alphaOverride,new M6(e,t,i,a,d,r)}get category(){return this.node.category}};function M8(e){return{alpha:new As(e.alpha??1),mode:new AC(e.mode??0),isMask:new AE(e.isMask??!1)}}function M9(e,t,i,r){if("displace"===i.type&&("intensity"===e||"visible"===e)){let e=t.uniforms[`f${t.id}_intensity`];return e?(e.value=(M$(i.intensity,r)??1)*!!i.visible,e):void 0}if("displace"!==i.type&&("alpha"===e||"visible"===e)){let a=t.uniforms[`f${t.id}_alpha`];if(!a)return;if(a.value=MJ(i.alpha,r)*!!i.visible,"outline"===i.type&&"visible"===e){let e=t.uniforms[`f${t.id}_compensation`];e&&(e.value=i.compensation&&i.visible)}return a}}function M7(e,t,i,r,a,o,l=[]){let h=i;for(let e of l)e in h&&(h=h[e]);for(let t of e)t in h&&a.getVariable(h[t],["material",o,"layer",r,...l,String(t)]);for(let e of t)e in h&&h[e].forEach((t,i)=>{a.getVariable(t,["material",o,"layer",r,...l,String(e),0===i?"x":1===i?"y":"z"])})}function Ce(e,t){let i=0,r=e.layers.find(e=>"light"===e.data.type);if(r){let e=r.data,i=Number(t.getVariable(e.alphaOverride));if(("string"==typeof e.alphaOverride?i/100:e.alphaOverride)<1)return!0}for(let r of e.layers){if("displace"!==r.data.type&&r.data.isMask)return!0;if("displace"!==r.data.type&&"alpha"in r.data&&"light"!==r.data.type&&"fresnel"!==r.data.type&&"texture"!==r.data.type&&"matcap"!==r.data.type&&"rainbow"!==r.data.type&&"outline"!==r.data.type&&"pattern"!==r.data.type){let e=r.data.visible?r.data.alpha:0;if("string"==typeof e&&(e=Math.max(0,Math.min(1,Number(t.getVariable(e)??100)/100))),1===e&&"depth"===r.data.type||"gradient"===r.data.type){for(let t of r.data.colors)if(t[3]<1){e=t[3];break}}else if(1===e&&"noise"===r.data.type){let i=Math.min(t.color(r.data.colorA).a,Math.min(t.color(r.data.colorB).a,Math.min(t.color(r.data.colorC).a,t.color(r.data.colorD).a)));i<1&&(e=i)}i+=(1-i)*e}}return i<1}var Ct=class extends so{constructor(){super(void 0),this.flatShading=!1,this.needsJitter=!0,this.shadersPatchedForShapeBlend=!1,this.nodeContextUuid=0,this.fog=!0,this.dithering=!0,this.vertexColors=!0,this.setTransparent
5418(!0)}customProgramCacheKey(){return""}setTransparent(e){this.transparent=e;let t=!1;if(e)try{t=this.getLayersOfType("transmission").length>0}catch{t=!1}this.depthWrite=!e||t}},Ci=class extends Ct{constructor(e,t,i,r){super(),this.flatShading=e,this.side=t,this.wireframe=i,this.root=r}updateAfterBuild(){let e=this.root;this.lights=e.lights,this.vertexShader=e.vertexShader,this.fragmentShader=e.fragmentShader,Object.assign(this.defines,e.defines),Object.assign(this.uniforms,e.uniforms),this.extensions=e.extensions,this.setTransparent(e.transparent),this.cacheKey=e.customProgramCacheKey()+"flat"+this.flatShading+this.side}onBeforeCompile(e,t){this.root.onBeforeCompile(e)}get data(){return this.root.data}get category(){return this.root.category}get hasAO(){return this.root.hasAO}getFlavor(e,t,i,r){return this.root.getFlavor(e,t,i,r)}get layers(){return this.root.layers}get fragment(){return this.root.fragment}getLayersOfType(e){return this.root.getLayersOfType(e)}getLayerByUuid(e){return this.root.getLayerByUuid(e)}updateByOp(e,t,i){this.root.updateByOp(e,t,i)}nodeMaterialDispose(){this.root.nodeMaterialDispose()}},Cr=class extends Ct{constructor(e,t,i=!0){super(),this.data=e,this.allowVariableSaves=i,this.layerIdGen=0,this.flavors=[],this.masks={},this.type="NodeMaterial",this.updaters=[],this.needsJitter=t.shared.needsJitter,_X.startContext(this),this.reset0(e,t),_X.endContext(this)}get nodeMaterial(){return this}getFlavor(e,t,i,r){let a=i?6:3*!!e+t;if(0===(a+=((r?.resolutionLevel??0)-4*!!r?.useChildrenColors)*7))return this;void 0===this.flavors&&(this.flavors=[]),a-=1;let o=this.flavors[a];return void 0===o&&((o=new Ci(e,t,i,this)).needsJitter=this.needsJitter,this.flavors[a]=o,o.flatShading=e,o.side=t,o.updateAfterBuild(),r&&(o.defines.SHAPEBLEND=r.resolutionLevel,o.defines.SHAPEBLEND_C=+!!r.useChildrenColors)),o}get fragment(){return this.lightLayer.node}get category(){return this.lightLayer.category}get hasAO(){return this.lightLayer.getNode("occlusion")?.value??!1}reset(e,t,i=!1){_X.startContext(this),(this.data!==e||i)&&this.reset0(e,t),_X.endContext(this)}reset0(e,t){this.data=e;let i=e.layers??vE.defaultTwoLayerData("phong").layers;try{this.layers=i.map(e=>M3.create(this.layerIdGen++,e.id,e.data,t.shared))}catch{this.layers=[]}this.layers.reverse(),this.name=e.name??"Untitled Material",this.onUpdate(t.shared),this.setTransparent
vendor: 7,940 bytes, line 5418
5418(Ce(e,t.shared)),this.saveVariableLocations(t)}onVariableUpdate(e,t,i){if("alphaOverride"===e[0])this.setTransparent(Ce(this.data,i.shared)),this.lightLayer.setValue("alphaOverride",Math.max(0,Math.min(Number(t)/100,1)));else if("layer"===e[0]){let r=e[1],a=e[2];if(r&&a){let o=this.layers.find(e=>e.uuid===r);if(o?.hasValue(a))if("alpha"===a)this.setTransparent(Ce(this.data,i.shared)),o.setValue(a,Math.max(0,Math.min(Number(t)/100,1)));else{let r=o.getValue(a),l=e[3],h=e[4];if(r instanceof i_){let e=r[l],a;"number"==typeof e?a=Number(t):e.isVector2&&(a=e.toArray(),"x"===h?a[0]=Number(t):"y"===h&&(a[1]=Number(t))),MK({[l]:a},i.shared,o);return}("x"===l||"y"===l||"z"===l)&&r.isVector3||("x"===l||"y"===l)&&r.isVector2?r[l]=Number(t):o.setValue(a,t)}}}}saveVariableLocations(e){if(!this.allowVariableSaves)return;let t=this.data.layers.find(e=>"light"===e.data.type);t&&e.shared.getVariable(t.data.alphaOverride,["material",this.uuid,"alphaOverride"]),this.data.layers.forEach(t=>{"alpha"in t.data&&"string"==typeof t.data.alpha&&e.shared.getVariable(t.data.alpha,["material",this.uuid,"layer",t.id,"alpha"]),"displace"===t.data.type?"noise"===t.data.displacementType?M7(["intensity","scale","movement","smoothness","seed","highCut","lowCut"],["offset"],t.data,t.id,e.shared,this.uuid):M7(["intensity"],[],t.data,t.id,e.shared,this.uuid):"depth"===t.data.type?M7(["near","far"],["origin","direction"],t.data,t.id,e.shared,this.uuid):"fresnel"===t.data.type?M7(["bias","scale","intensity","factor"],[],t.data,t.id,e.shared,this.uuid):"rainbow"===t.data.type?M7(["filmThickness","movement","noiseStrength","noiseScale"],["offset","wavelengths"],t.data,t.id,e.shared,this.uuid):"noise"===t.data.type?M7(["scale","move","seed","highCut","lowCut","smoothness"],["size","distortion","fA","fB"],t.data,t.id,e.shared,this.uuid):"pattern"===t.data.type?M7(["blending","size","variation","smoothness","zigzag","rotation"],["offset","frequency","vertical","horizontal"],t.data,t.id,e.shared,this.uuid):"outline"===t.data.type?M7(["outlineWidth","contourWidth","outlineThreshold","contourThreshold","outlineSmoothing","contourFrequency"],["contourDirection"],t.data,t.id,e.shared,this.uuid):"toon"===t.data.type?M7(["noiseStrength","noiseScale"],["offset","source"],t.data,t.id,e.shared,this.uuid):"transmission"===t.data.type?M7(["roughness","thickness","ior"],[],t.data,t.id,e.shared,this.uuid):"texture"===t.data.type||"video"===t.data.type?(M7([],["size"],t.data,t.id,e.shared,this.uuid),M7(["rotation"],["repeat","offset"],t.data,t.id,e.shared,this.uuid,["texture"])):"gradient"===t.data.type?M7(["angle"],["offset","morph"],t.data,t.id,e.shared,this.uuid):"matcap"===t.data.type&&M7(["rotation"],[],t.data,t.id,e.shared,this.uuid,["texture"])})}getLayersOfType(e){return this.layers.filter(t=>t.type===e)}getLayerByUuid(e){return this.layers.find(t=>t.uuid===e)}onUpdate(e){for(let t of(this.lightLayer=this.layers.find(e=>e instanceof M6),void 0===this.lightLayer&&(this.lightLayer=new M6(0,"",{...vt.defaultData("light","phong"),visible:!1},new A9,{},e)),this.dispose(),this.flavors))t&&t.dispose();this.applyTextureMaps(),this.applyMasks(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),this.build(),this.nodeContextUuid=0}applyTextureMaps(){let e=this.layers.find(e=>e instanceof M6);if(!e)return;let t=e.data,i=t.bumpMap,r=t.roughnessMap;e.node.bumpMap=void 0,e.node.roughnessMap=void 0;for(let t=0;t<this.layers.length;++t){let a=this.layers[t];a instanceof M4&&a.color instanceof Ak&&(a.uuid===i&&(e.node.bumpMap=a.color),a.uuid===r&&(e.node.roughnessMap=a.color))}}updateByOp(e,t,i){if(_X.startContext(this),void 0!==t?this.data=t:t=this.data,this.setTransparent(Ce(t,i.shared)),"layers"===e.path[0]){let r=i.shared,a=e.path[1];if(void 0===a)i.scene.markNeedsUpdateRendererDirty(),this.reset0(t,i);else{0===e.type&&void 0!==e.props.occlusion&&i.scene.markNeedsUpdateRendererDirty();let o=this.layers.find(e=>e.uuid===a);if(o){let l=t.layers.data(a),h;0===e.type&&("alpha"in e.props||"alphaOverride"in e.props)&&(h="alpha"in e.props?{...e.props,alpha:MJ(e.props.alpha,r,["material",this.uuid,"layer",a,"alpha"])}:{...e.props,alphaOverride:MJ(e.props.alphaOverride,r,["material",this.uuid,"alphaOverride"])}),o.updateByOp({...e,...h?{props:h}:{},path:e.path.slice(2)},l,i)&&this.reset0(t,i)}}}else this.reset0(t,i);_X.endContext(this)}applyMasks(){for(let e=0;e<this.layers.length;++e){let t=this.layers[e];t instanceof M4?t.color.mask=void 0:t instanceof M6&&(t.node.mask=void 0)}for(let e=0;e<this.layers.length;++e){let t=this.layers[e];if(t instanceof M4&&t.isMask.value&&t.data.visible&&e>0){let i=e-1,r=this.layers[i];r instanceof M6?r.node.mask=new An(t.color,t.alpha,An.MUL):r instanceof M4&&(r.isMask.value||(r.color.mask=new An(t.color,t.alpha,An.MUL)))}}}blendColors(){let e=this.layers.findIndex(e=>e instanceof M4),t=this.layers.findIndex(e=>e instanceof M6);if(-1!==e&&e<t){let i=this.layers[e].color;for(let r=e+1;r<t;++r){let e=this.layers[r];if(e instanceof M4){if(e.isMask.value)continue;i=new AF(i,e.color,e.alpha,e.mode)}}this.fragment.color=i}else this.fragment.color=void 0}blendAfterColors(){let e=new Ai("outgoingLight","f"),t=this.layers.findIndex(e=>e instanceof M6);if(this.layers.length>t+1){for(let i=t+1;i<this.layers.length;++i){let t=this.layers[i];if(t instanceof M4){if(t.isMask.value)continue;e=new AF(e,t.color,t.alpha,t.mode)}}this.fragment.afterColor=e}else this.fragment.afterColor=void 0}blendPositions(){let e=this.layers.filter(e=>e instanceof M5);if(e.length>0){let t=e[0].position;for(let i=1;i<e.length;++i)e[i]&&(t=new An(t,e[i].position,An.ADD),t=new An(t,new As(.5).setReadonly(!0),An.MUL));this.fragment.position=t}else this.fragment.position=void 0}getDefines(){return this.defines}getUniforms(){return this.uniforms}getVertexShader(){return this.vertexShader}getFragmentShader(){return this.fragmentShader}onBeforeCompile(e){this.shapeBlendhack&&this.shapeBlendhack(this),e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.extensionDerivatives=!0===this.extensions.derivatives,e.extensionFragDepth=!0===this.extensions.fragDepth,e.extensionDrawBuffers=!0===this.extensions.drawBuffers,e.extensionShaderTextureLOD=!0===this.extensions.shaderTextureLOD}clampUniformsForPreview(e,t){let i=(e,t,i)=>Math.min(Math.max(e,t),i);for(let r of this.layers)if("displace"===r.type){let a=i(r.uniforms[`f${r.id}_intensity`].value,e,t);r.uniforms[`f${r.id}_intensity`].value=a}}updateFrame(e){for(let t=0;t<this.updaters.length;++t)e.updateNode(this.updaters[t])}build(){let e=new AA;for(let t of(e.needsJitter=this.needsJitter,this.lights=this.lightLayer.data.visible,e.build(this.fragment,this.fragment),this.vertexShader=e.getCode("vertex"),this.fragmentShader=e.getCode("fragment"),this.defines=e.defines,this.uniforms=e.uniforms,this.extensions=e.extensions,this.updaters=e.updaters,this.flavors))t&&t.updateAfterBuild();return this.shadersPatchedForShapeBlend=!1,this}nodeMaterialDispose(){for(let e of(this.layers.forEach(e=>e.dispose()),super.dispose(),this.flavors))e&&e.dispose()}assetsLoaded(){for(let e of this.layers)if(e instanceof M4){let t=e.params.texture;if(t instanceof AO&&!t.image.loaded)return!1}return!0}};Object.defineProperties(Ct.prototype,{properties:{get:function(){return this.fragment.properties}}});var Cs,Ca=class extends Cr{constructor(e,t,i){super(e,t,!1),this.uuid=i,this.allowVariableSaves=!0,this.saveVariableLocations(t)}},Cn=new Map,Co=new Promise(e=>{Cs=e}),Cl=!1;function Ch(e,t){e.forEach(e=>{"dragDropActions"in e.data?(t.push(...e.data.dragDropActions.drag),t.push(...e.data.dragDropActions.drop)):"inActions"in e.data?(t.push(...e.data.inActions),t.push(...e.data.outActions)):"gameActions"in e.data?(t.push(...e.data.gameActions.idle),t.push(...e.data.gameActions.move),t.push(...e.data.gameActions.jump),t.push(...e.data.gameActions.run)):"breakpoints"in e.data?e.data.breakpoints.forEac
5418h(e=>{t.push(...e.data.actions)}):"actions"in e.data&&(t.push(...e.data.actions),e.data.actions.forEach(e=>{"Conditional"===e.data.type&&e.data.ifActions&&(t.push(...e.data.ifActions),t.push(...e.data.elseActions))}))})}Co.then(e=>Cd=e);var Cc,Cd,Cu,Cp=class{constructor({src:e,volume:t,delay:i,loop:r}){let a;this._volume=1,this.delay=0,this._loop=1,this.loopsRemaining=0,this._status="stopped",this.onEnd=()=>{this.loopsRemaining===1/0?this.replay():this.loopsRemaining>1?(this.replay(),this.loopsRemaining--):(this._status="stopped",this.loopsRemaining=this._loop)},a="string"==typeof e?{src:e}:{src:function(e){if("string"==typeof e)return e;let t=Cn.get(e);return t||(t={url:URL.createObjectURL(new Blob([e]))},Cn.set(e,t)),t.url}(e),format:"wav"},this.sound=new Cd.Howl(a),this.sound.on("end",this.onEnd),this.src=e,void 0!==t&&(this.volume=t),void 0!==i&&(this.delay=i),void 0!==r&&(this.loop=r)}get status(){return this._status}get volume(){return this._volume}set volume(e){this._volume=e,this.sound.volume(e)}get loop(){return this._loop}set loop(e){this._loop=e,this.loopsRemaining=e}replay(){this.clearDelay(),this.delayTimerId=window.setTimeout(()=>{this.sound.play(),this.clearDelay()},this.delay)}fade(e,t=1e3){e?(this.sound.volume(this._volume),this.clearFade(),this.fadeTimerId=window.setTimeout(()=>{this.sound.fade(this._volume,0,t),this.clearFade()},e)):this.sound.fade(this._volume,0,t)}on(e,t,i){this.sound.on(e,t,i)}off(e,t,i){this.sound.off(e,t,i)}play(){"playing"===this._status||this.sound.playing()||("paused"===this._status?(0===this.sound.seek()?this.replay():this.sound.play(),this._status="playing"):"stopped"===this._status&&(this.replay(),this._status="playing"))}pause(){"playing"===this._status&&(this.sound.pause(),this.clearFade(),this.clearDelay(),this._status="paused")}stop(){this.sound.stop(),this.loopsRemaining=this._loop,this.clearFade(),this.clearDelay(),this._status="stopped"}clearFade(){this.fadeTimerId&&(clearTimeout(this.fadeTimerId),delete this.fadeTimerId)}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}dispose(e=!1){this.off(),this.stop(),this.clearFade(),this.clearDelay()}},Cf=class{constructor(){this.type="ShapePath",this.color=new iv,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new ov,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath?.lineTo(e,t),this}quadraticCurveTo(e,t,i,r){return this.currentPath?.quadraticCurveTo(e,t,i,r),this}bezierCurveTo(e,t,i,r,a,o){return this.currentPath?.bezierCurveTo(e,t,i,r,a,o),this}splineThru(e){return this.currentPath?.splineThru(e),this}toShapes(){let e={loc:0,t:0};function t(t,i,r){let a=r.x-i.x,o=r.y-i.y,l=t.x-i.x,h=t.y-i.y,c=a*h-l*o;if(t.x===i.x&&t.y===i.y){e.loc=0,e.t=0;return}if(t.x===r.x&&t.y===r.y){e.loc=1,e.t=1;return}if(c<-Number.EPSILON){e.loc=3;return}if(c>Number.EPSILON){e.loc=4;return}if(a*l<0||o*h<0){e.loc=5;return}if(Math.sqrt(a*a+o*o)<Math.sqrt(l*l+h*h)){e.loc=6;return}e.loc=2,e.t=0!==a?l/a:h/o}let i=0,r=0x3b9ac9ff,a=-0x3b9ac9ff,o=[];this.subPaths.forEach(e=>{let t=e.getPoints(),l=-0x3b9ac9ff,h=0x3b9ac9ff,c=-0x3b9ac9ff,d=0x3b9ac9ff;for(let e=0;e<t.length;e++){let i=t[e];i.y>l&&(l=i.y),i.y<h&&(h=i.y),i.x>c&&(c=i.x),i.x<d&&(d=i.x)}a<=c&&(a=c+1),r>=d&&(r=d-1),t.length&&o.push({curves:e.curves,points:t,isCW:ok.isClockWise(t),identifier:i++,boundingBox:new lY(new t9(d,h),new t9(c,l))})});let l=o.map(i=>(function(i,r,a,o,l){var h,c;let d,p;(null==l||""===l)&&(l="nonzero");let f=new t9;i.boundingBox.getCenter(f);let m=(h=[new t9(a,f.y),new t9(o,f.y)],c=i.boundingBox,d=new t9,c.getCenter(d),p=[],r.forEach(i=>{i.boundingBox.containsPoint(d)&&(function(i,r){let a=[],o=[];for(let l=1;l<i.length;l++){let h=i[l-1],c=i[l];for(let i=1;i<r.length;i++){let l=function(i,r,a,o){let l=i.x,h=r.x,c=a.x,d=o.x,p=i.y,f=r.y,m=a.y,g=o.y,v=(d-c)*(p-m)-(g-m)*(l-c),y=(g-m)*(h-l)-(d-c)*(f-p),x=v/y,b=((h-l)*(p-m)-(f-p)*(l-c))/y;if(0===y&&0!==v||x<=0||x>=1||b<0||b>1)return null;if(0===v&&0===y){for(let c=0;c<2;c++)if(t(0===c?a:o,i,r),0===e.loc){let t=0===c?a:o;return{x:t.x,y:t.y,t:e.t}}else if(2===e.loc)return{x:+(l+e.t*(h-l)).toPrecision(10),y:+(p+e.t*(f-p)).toPrecision(10),t:e.t};return null}for(let l=0;l<2;l++)if(t(0===l?a:o,i,r),0===e.loc){let t=0===l?a:o;return{x:t.x,y:t.y,t:e.t}}return{x:+(l+x*(h-l)).toPrecision(10),y:+(p+x*(f-p)).toPrecision(10),t:x}}
5418(h,c,r[i-1],r[i]);null!==l&&void 0===a.find(e=>e.t<=l.t+Number.EPSILON&&e.t>=l.t-Number.EPSILON)&&(a.push(l),o.push(new t9(l.x,l.y)))}}return o})(h,i.points).forEach(e=>{p.push({identifier:i.identifier,isCW:i.isCW,point:e})})}),p.sort((e,t)=>e.point.x-t.point.x),p);m.sort((e,t)=>e.point.x-t.point.x);let g=[],v=[];m.forEach(e=>{e.identifier===i.identifier?g.push(e):v.push(e)});let y=g[0].point.x,x=[],b=0;for(;b<v.length&&v[b].point.x<y;)x.length>0&&x[x.length-1]===v[b].identifier?x.pop():x.push(v[b].identifier),b++;if(x.push(i.identifier),"evenodd"===l){let e=x.length%2==0,t=x[x.length-2];return{identifier:i.identifier,isHole:e,for:t}}if("nonzero"===l){let e=!0,t=null,a=null;for(let i=0;i<x.length;i++){let o=x[i];r[o]&&(e?(a=r[o].isCW,e=!1,t=o):a!==r[o].isCW&&(a=r[o].isCW,e=!0))}return{identifier:i.identifier,isHole:e,for:t}}})(i,o,r,a,this.userData?.style.fillRule)),h=[];return o.forEach(e=>{let t=l[e.identifier];if(t&&!t.isHole){let t=new o_;t.curves=e.curves,l.filter(t=>t?.isHole&&t.for===e.identifier).forEach(e=>{if(e){let i=o[e.identifier],r=new ov;r.curves=i.curves,t.holes.push(r)}}),h.push(t)}}),h}},Cm=!1,Cg=new Promise(e=>{Cu=e}),Cv=!1;async function Cy(e){return await (await fetch(e)).arrayBuffer()}var Cx=new class{async load(e,t,i=()=>{}){let{load:r}=await Cg;r(e,(e,r)=>{e||!r?i(e??"Something went wrong"):t(r)})}async parse(e){let{parse:t,Bidi:i}=await Cg;try{let r=t(e),a=new i;return a.registerModifier("glyphIndex",null,e=>r.charToGlyphIndex(e.char)),a.applyFeatures(r,r.defaultRenderOptions.features),{font:r,bidi:a}}catch{}}};async function Cb(e){let t,i,r=!1;if(e.url?(t=await Cy(e.url),i=e.url,r=e.url.startsWith("/")):e.data&&(t=e.data.buffer.slice(e.data.byteOffset,e.data.byteOffset+e.data.byteLength)),t)if(!Cm)return{font:void 0,url:i,intercepted:r,arr:t,bidi:null};else{let e=await Cx.parse(t);if(e)return{font:e.font,url:i,intercepted:r,arr:t,bidi:e.bidi}}}var Cw=class{constructor(e){this._arrayBuffer=new ArrayBuffer(1),this._isLoaded=!1,this._intercepted=!1,this._isUserFont=e.isUserFont??!1,this._loadingPromise=Cb(e).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}update(e){this._isLoaded=!1,this._isUserFont=e.isUserFont??!1,this._loadingPromise=Cb(e).then(e=>{e&&(this._arrayBuffer=e.arr,this._url=e.url,this.font=e.font,this._intercepted=e.intercepted,this._isLoaded=!0,this._bidi=e.bidi)})}get url(){return this._url}get intercepted(){return this._intercepted}get isLoaded(){return this._isLoaded}get loadingPromise(){return this._loadingPromise}reverseLigaturesTable(e,t,i){if(!this._bidi)return[];let r=this._bidi;r.getTextGlyphs(t);let a=r.tokenizer.tokens,o=[],l=0,h=i.length===a.length;for(let r=0;r<i.length;r++){let c=i[r].index,d=String.fromCharCode(i[r].unicode),p=a[l];if(p.state.glyphIndex===c||p.state.fina===c||p.state.medi===c||p.state.init===c||h)o.push({char:d,index:c,replacements:[p.state.glyphIndex],replacementChars:[p.char]}),l++;else{let i=p.char,r="",a=[p.state.glyphIndex],h=[],f=!1;for(;!f;)l++,i+=r=t.charAt(l),a.push(e.charToGlyphIndex(r)),1===(h=e.stringToGlyphs(i)).length&&h[0].index===c&&(f=!0),l>t.length&&(f=!0);o.push({char:d,index:c,replacements:a,replacementChars:Array.from(i)}),l++}}return o}generateShapes(e,t,i){if(!this._isLoaded)return;let r=this.font,a=t.fontSize/this.unitsPerEm,o=t.fontSize*t.lineHeight,l=e.map(e=>this.getTextWidth(e,t)),h="string"==typeof t.width?Number(i.getVariable(t.width)):t.width,c="string"==typeof t.height?Number(i.getVariable(t.height)):t.height,d=this.getCharWidth(` 5419`,t),p=1===t.horizontalAlign?d:0,f=this.getLineInitialOffsetX(l[0],h,t.horizontalAlign,e[0],d),m=this.getLineInitialOffsetY(o,e.length,c,a,t.verticalAlign),g=[],v=e.map(e=>[]),y=e.map(e=>[]);for(let c=0;c<e.length;c++){let x=e[c],b={features:{liga:!0},letterSpacing:t.letterSpacing},w=[];try{w=r.stringToGlyphs(x,b)}catch{}f=this.getLineInitialOffsetX(l[c],h,t.horizontalAlign,x,d);let S=[];try{S=this.reverseLigaturesTable(r,x,w)}catch{}let _=this.computeSpaceWidthForLine(e,c,t,i),A=0,M=w[0];M&&2===t.horizontalAlign&&void 0!==M.leftSideBearing&&(f-=M.leftSideBearing*a),this.font?.forEachGlyph(x,f,m,t.fontSize,b,(e,i,o,l,h)=>{let d=0===e.index?` 5420`:e.unicode?String.fromCharCode(e.unicode):void 0,f=S[A],m=0;if(d===` 5421`)m=p;else if(" "===d)m=_;else{let r=this.createPath(e,a,i,o,t);r&&(m=r.offsetX,g.push(r.path))}if(1===f.replacements.length)y[c].push([i,o]),v[c].push(m);else{let e=f.replacements.map(e=>(r.glyphs.get(e).advanceWidth??0)*a),t=e.reduce((e,t)=>
5421e+=t,0),l=e.map(e=>e/t),h=i;for(let e=0;e<l.length;e++){let t=m*l[e];y[c].push([h,o]),v[c].push(t),h+=t}}A++}),m-=o}let x=[];for(let e=0,t=g.length;e<t;e++)x.push(...g[e].toShapes());return{shapes:x,charWidths:v,lineWidths:l,charCoords:y}}get isUserFont(){return this._isUserFont}get arrayBuffer(){return this._arrayBuffer}get ascender(){return this.font?.ascender??0}get descender(){return this.font?.descender??0}get familyName(){return this.font?.names.fontFamily??""}get subfamilyName(){return this.font?.names.fontSubfamily??""}get unitsPerEm(){return this.font?.unitsPerEm??1}getLineInitialOffsetX(e,t,i,r,a){return(3===i||2===i)&&r.indexOf(` 5422`)>=0&&(e-=a),3===i?.5*t-.5*e:2===i?t-e:0}getLineInitialOffsetY(e,t,i,r,a){let o=t*e,l=Math.abs(this.ascender-this.descender)*r,h=-this.ascender*r-(e-l)/2;return 3===a?-(i-o-h):2===a?-(.5*i-.5*o-h):h}createPath(e,t,i,r,a){let o=e.getPath(i,-r,a.fontSize,{kerning:!1,letterSpacing:a.letterSpacing});if(!o)return;let l=new Cf,h=(e.advanceWidth??1)*t;if(e)for(let e of o.commands){let t=l.currentPath?.currentPoint;if(!(t&&"Z"!==e.type&&t.x===e.x&&-t.y===e.y))switch(e.type){case"M":l.moveTo(e.x,-e.y);break;case"L":l.lineTo(e.x,-e.y);break;case"Q":l.quadraticCurveTo(e.x1,-e.y1,e.x,-e.y);break;case"C":l.bezierCurveTo(e.x1,-e.y1,e.x2,-e.y2,e.x,-e.y)}}return l.subPaths.forEach(e=>{let t=function(e){if(e.length){let t=e[0];if(t instanceof oc)return t.v1;if(t instanceof ol||t instanceof ou)return t.v0}}(e.curves);void 0!==t&&e.currentPoint.distanceTo(t)>0&&e.lineTo(t.x,t.y)}),{offsetX:h,path:l}}getCharWidth(e,t){return this.font?.getAdvanceWidth(e,t.fontSize,{kerning:!0,letterSpacing:t.letterSpacing})??0}getTextWidth(e,t){return this.font?.getAdvanceWidth(e,t.fontSize,{kerning:!0,letterSpacing:t.letterSpacing})??0}computeSpaceWidthForLine(e,t,i,r){let a=this.getCharWidth(" ",i),o=e[t];if(o){let l=this.countSpaces(o.trimEnd());if(4===i.horizontalAlign&&t<e.length-1&&l)return(("string"==typeof i.width?Number(r.getVariable(i.width)):i.width)-(this.getTextWidth(o,i)-l*a))/l}return a}countSpaces(e){return(e.match(/ /g)||[]).length}},CS=class{constructor(){this.objects=new Map,this.unreachable=new Set}getCached(e){return this.objects.get(e)}get size(){return this.objects.size}get(e,t,i){let r=this.objects.get(e);return void 0===r?(r=this.createObject(e,t,i),this.objects.set(e,r)):r.isShared=!0,r}forceDelete(e){let t=this.objects.get(e);t&&(this.disposeObject(t),this.objects.delete(e))}mutateIfUnique(e,t){let i=this.objects.get(e);if(i&&!0!==i.isShared)return this.objects.delete(e),this.objects.set(t,i),i}startGc(){this.unreachable=new Set(this.objects.keys())}markAsReachable(e,t){t===this.objects.get(e)&&this.unreachable.delete(e)}endGc(){this.unreachable.forEach(e=>{this.disposeObject(this.objects.get(e)),this.objects.delete(e)}),this.unreachable.clear()}dispose(){this.objects.forEach(e=>{this.disposeObject(e)}),this.objects.clear()}},C_=class extends CS{constructor(e){super(),this.flatShading=e}disposeObject(e){e.dispose()}createObject(e,t,i){let r=_l(e,t,this.flatShading,i);return r.computeBoundingSphere(),r}},CA={markNeedsUpdateRendererDirty:()=>{}},CM=class{constructor(e,t){this.id=e,this.userWebhook=t,this.result=void 0,this._connected=!1,this.emitter=SX(),this.reconnectWaitFor=1e3,this._onError=e=>{this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this._scheduleReconnect()},this._onConnected=e=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=1e3,this._connected=!0},this._onDisconnected=()=>{clearTimeout(this.scheduledReconnectHandle),this.reconnectWaitFor=1e3,this._connected=!1},this._onMessage=e=>{let t=e.data,i;try{i=JSON.parse(t)}catch{}if(i){let e=!1;this.userWebhook.parametersSchemas.forEach(({data:t})=>{var r,a;let o;void 0!==i[t.name]&&(r=i[t.name],a=t.type,o=typeof r,("string"===a||"number"===a)&&o===a||"boolean"===a&&("true"===r||"false"===r||!0===r||!1===r)||"image"===a&&"string"===o&&r.startsWith("http"))&&(void 0===this.result&&(this.result={}),this.result[t.name]=i[t.name],e=!0)}),e&&this.emitter.emit("message",{userWebhookId:this.id})}}}connect(){clearTimeout(this.scheduledReconnectHandle),this.userWebhook.url&&(this.eventSource=new EventSource("https://hooks.spline.design/events?hashFile="+this.userWebhook.url),this.eventSource.addEventListener("message",this._onMessage),this.eventSource.addEventListener("error",this._onError),this.eventSource.addEventListener("open",this._onConnected))}disconnect(){this.eventSource?.removeEventListener("message",this._onMessage),this.eventSource?.removeEventListener("error",this._onError),this.eventSource?.removeEventListener("open",this._onConnected),this.eventSource?.close(),this._onDisconnected(),clearTimeout(this.scheduledReconnectHandle)}_scheduleReconnect(){this.reconnectWaitFor*=2,this.reconnectWaitFor>512e3&&(this.reconnectWaitFor=512e3),clearTimeout(this.scheduledReconnectHandle),this.scheduledReconnectHandle=setTimeout(()=>{this.scheduledReconnectHandle=void 0,this.connect()},this.reconnectWaitFor)}update(e){this.userWebhook=e}dispose(){this._connected&&this.disconnect()}get connected(){return this._connected}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}getParametersKeys(){return this.userWebhook.parametersSchemas.map(e=>e.data.name)}getParameterValue(e){if(this.getParametersKeys().includes(e)){if(this.result)return this.result?.[e];for(let t of this.userWebhook.parametersSchemas)if(t.data.name===e)return xA.defaultParameterValueByType(t.data.type)}}},CC=[4186.01,4434.92,4698.63,4978.03,5274.04,5587.65,5919.91,6271.93,6644.88,7040,7458.62,7902.13],CE=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],CT=[],CP=[];for(let e=1;e<=8;e++)for(let t=0;t<CC.length;t++){let i=CC[t];CT.push(i/Math.pow(2,8-e)),CP.push(CE[t]+e)}var CD=CT.filter((e,t)=>
5422CT[t]>32&&CT[t]<2e3),CO=CP.filter((e,t)=>CT[t]>32&&CT[t]<2e3),CI=class{static getFrequencies(e,t,i,r="frequency",a=-100,o=-30){i||(i=new Float32Array(e.frequencyBinCount),e.getFloatFrequencyData(i));let l=1/i.length*(t/2),h,c,d;if("music"===r||"voice"===r){let e="voice"===r?CD:CT,t=Array(e.length).fill(a);for(let r=0;r<i.length;r++){let a=r*l,o=i[r];for(let i=e.length-1;i>=0;i--)if(a>e[i]){t[i]=Math.max(t[i],o);break}}h=t,c="voice"===r?CD:CT,d="voice"===r?CO:CP}else d=(c=(h=Array.from(i)).map((e,t)=>l*t)).map(e=>`${e.toFixed(2)} Hz`);return{values:new Float32Array(h.map(e=>Math.max(0,Math.min((e-a)/(o-a),1)))),frequencies:c,labels:d}}};async function CR(e){try{return(await (await fetch("https://relayserver.spline.design/session?uuidfile="+e)).json()).token}catch{}}var CL=class{constructor(e){this.value=0,this.frequencies=new Float32Array(0);let t=new AudioContext;this.source=t.createMediaStreamSource(e),this.analyser=t.createAnalyser(),this.source.connect(this.analyser),this.analyser.fftSize=8192,this.analyser.smoothingTimeConstant=.1}getFrequencies(e=-100,t=-30){if(!this.analyser)throw Error("Not connected, please call .connect() first");return CI.getFrequencies(this.analyser,44100,void 0,"voice",e,t)}update(){let e=this.getFrequencies(),t=e.values.reduce((e,t)=>e+t,0)/e.values.length;this.value=t,this.frequencies=e.values}disconnect(){this.source.disconnect(),this.analyser.disconnect()}},CB=class{constructor(e,t,i){this.data=e,this.id=t,this.shared=i,this.emitter=SX(),this.rafId=0,this.voice=0,this.frequencies=new Float32Array([0]),this.events=[],this.isConnected=!1,this.isToolsAdded=!1,this.tools=[],this.onMessage=e=>{let t=JSON.parse(e.data);if(this.appendEvent(t),"session.created"===t.type&&this.onSessionCreated(),"response.done"===t.type&&t.response?.output){for(let e of t.response.output)if("function_call"===e.type)for(let[t,i]of this.tools)e.name===t.name&&(i(JSON.parse(e.arguments)),setTimeout(()=>{this.sendClientEvent({type:"response.create",response:{instructions:"notice the user about what you just did"}})}))}},this.onSessionCreated=()=>{this.isToolsAdded||this.registerTools()},this.onOpen=()=>{this.events=[],this.isConnected=!0,this.sendClientEvent({type:"response.create",response:{instructions:"Say hi"}})},this.animate=()=>{if(this.rafId=requestAnimationFrame(this.animate),this.isConnected&&this.analyser){this.analyser.update();let e=this.analyser.value,t=this.analyser.frequencies;this.voice=e,this.frequencies=t,this.emitter.emit("voice",{value:e,frequencies:t})}}}update(e){this.data=e}setColorByName(e,t){let i=this.shared.getColorByName(e);if(i){let{id:e}=i,{r:r,g:a,b:o}=Sj(t)??{r:0,g:0,b:0};this.shared.updateColor(e,{r:r/255,g:a/255,b:o/255})}}async connect(){if(this.isConnected)return;let e=await CR(this.data.integration.hash);this.pc=new RTCPeerConnection,this.audioElement=document.createElement("audio"),this.audioElement.autoplay=!0,this.pc.ontrack=e=>{let t=e.streams[0];this.audioElement.srcObject=t,this.analyser=new CL(t)};let t=await navigator.mediaDevices.getUserMedia({audio:!0});this.pc.addTrack(t.getAudioTracks()[0],t),this.dc=this.pc.createDataChannel("oai-events"),this.dc.addEventListener("message",this.onMessage),this.dc.addEventListener("open",this.onOpen);let i=await this.pc.createOffer();await this.pc.setLocalDescription(i);let r={type:"answer",sdp:await (await fetch("https://api.openai.com/v1/realtime/calls",{method:"POST",body:i.sdp,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/sdp"}})).text()};await this.pc.setRemoteDescription(r),this.animate()}appendEvent(e){this.events=[e,...this.events]}sendClientEvent(e){this.dc&&(e.event_id=e.event_id||crypto.randomUUID(),this.dc.send(JSON.stringify(e)),this.appendEvent(e))}registerTools(){this.isToolsAdded=!0,this.registerTool({type:"function",name:"set_personality_color",description:"returns a color based on the voice personality of the ai assistant. This should be called by the voice assistant each time it is asks to speak differently. If a color cannot be associated to the personality, the color should be a neutral color.",parameters:{type:"object",properties:{color:{type:"string",description:"css hex color string, reflecting the personality"},personality:{type:"string",description:"the personality of the voice assistant"}},required:["color","personality"]}},({color:e})=>{this.setColorByName("Voice Assistant Color",e)});let e=this.shared.getVariablesNames().join(", ");this.registerTool({type:"function",name:"set_variable",description:"Sets a Spline variable value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the variable that needs to be set. Here's a list of available variables: ${e}. It the variable does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"The new value for this variable, should always be a string even for number and boolean variables, assume that the value will be cast to the proper type afterwards."}},required:["name","value","type"]}},({name:e,value:t})=>{let i=this.shared.getVariableByName(e);
5422if(i){let e=this.shared.getVariable(i.id),r;r="number"==typeof e?parseFloat(t):"boolean"==typeof e?"true"===t.toLowerCase():{textValue:t},this.shared.updateVariable(i.id,r)}});let t=this.shared.getColorNames().join(", ");this.registerTool({type:"function",name:"set_color",description:"Sets a Spline color asset value when asked by the user.",parameters:{type:"object",properties:{name:{type:"string",description:`The name of the color asset that needs to be set. Here's a list of available color assets: ${t}. It the color asset does not exist, don't call the function and warn the user about it.`},value:{type:"string",description:"css hex color string"}},required:["name","value"]}},({name:e,value:t})=>{this.setColorByName(e,t)});let i=this.shared.scene,r=[];i.traverseEntity(e=>{e.data.events.forEach(e=>{if("AIAssistantTrigger"===e.data.type){let{description:t}=e.data;r.push(t)}})}),this.registerTool({type:"function",name:"trigger_event",description:"Trigger an event by name, here are the available events, please match what the user is asking for to one of these if it applies, otherwise don't call the function and warn the user.",parameters:{type:"object",properties:{description:{type:"string",description:`The name of the event that needs to be triggered. Here's a list of available events: ${JSON.stringify(r)}.`},direction:{type:"string",description:"default is forward, but can be forward or backward. Always set to forward unless the user ask to reverse or cancel the event, then set to backward."}},required:["description","direction"]}},({description:e,direction:t})=>{this.emitter.emit("trigger_event",{description:e,direction:t})}),this.sendClientEvent({type:"session.update",session:{type:"realtime",model:"gpt-realtime-2",tools:this.tools.map(([e])=>e),audio:{input:{turn_detection:{type:"server_vad"}}}}})}registerTool(e,t){this.tools.push([e,t])}disconnect(){cancelAnimationFrame(this.rafId),this.analyser?.disconnect(),this.voice=0,this.isConnected=!1,this.isToolsAdded=!1,this.dc?.removeEventListener("message",this.onMessage),this.dc?.removeEventListener("open",this.onOpen),this.dc?.close(),this.pc?.getSenders().forEach(e=>{e.track&&e.track.stop()}),this.pc?.close(),this.pc=void 0}computeAnalysisForListenerEvent(e){if("range"===e.analysis){let t=this.frequencies.slice(...e.analysisRange);return t.reduce((e,t)=>e+t,0)/t.length}return"single"===e.analysis?this.frequencies[e.analysisSingle]:this.voice}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}};function Cz(e){return"variable_"+e}var CF=class extends Mo{constructor(e){super(),this.shared=e}create(e){return new Ml(e,this.shared)}},CN=class{constructor(e,t={},i=!0,r=!1){if(this.data=e,this.needsJitter=i,this.enableLocalStorageForPersistentVariables=r,this.geometryCache=new C_(!0),this.geometryCache2=new C_(!1),this.imageHolderCache=new CF(this),this.thisContext={scene:CA,shared:this},this.deletedMaterial=new Ca(vE.defaultTwoLayerData("phong"),this.thisContext,""),this.deletedImage=new Mh(xB.emptyImage,this),this.deletedVideo=new Mh(g9.defaultVideo,this),this.materials={},this.images={},this.uiBuffers={},this.videos={},this.colors={},this.audios={},this.particles={},this.fonts={},this.timelineAnimations={},this.variables={},this.userAPIs={},this.userWebhooks={},this.mouseProperty=null,this.raycastProperty=null,this.requestRender=()=>{this._requestRender&&this._requestRender()},t.images)for(let[e,i]of Object.entries(t.images))this.addImage(e,i);if(t.videos)for(let[e,i]of Object.entries(t.videos))this.addVideo(e,i);if(t.audios)for(let[e,i]of Object.entries(t.audios))this.addAudio(e,i);if(t.particles)for(let[e,i]of Object.entries(t.particles))this.addParticle(e,i);this.reset(e)}setRequestRender(e){this._requestRender=e}getImageLoadPromises(){return Object.values(this.images).map(e=>e.loadPromise)}setEntityOpContext(e){this.entityOpContext=e}reset(e,t=!1,i=!1){for(let{id:i,data:r}of(this.data=e,this.resetLib(e.lib),e.variables))this.addVariableHolder(i,r),t&&this.updateVariableHolder(i,r);for(let[t,i]of Object.entries(e.userAPIs??{}))this.addUserAPI(t,i);for(let[t,i]of Object.entries(e.userWebhooks??{}))this.addUserWebhook(t,i);if(!i){for(let[t,i]of Object.entries(e.images))this.addImage(t,i);for(let[t,i]of Object.entries(e.videos))this.addVideo(t,i)}
vendor: 8,674 bytes, line 5422
5422for(let[t,i]of Object.entries(e.colors))this.addColor(t,i);for(let[t,i]of Object.entries(e.materials))this.addMaterial(t,i);for(let[t,i]of Object.entries(e.audios))this.addAudio(t,i);for(let[t,i]of Object.entries(e.particles))this.addParticle(t,i);for(let[t,i]of Object.entries(e.fonts))this.addFont(t,i);for(let[t,i]of Object.entries(e.timelineAnimations??{}))this.addAnimation(t,i)}addMaterial(e,t){if(void 0!==t.layers)if(this.materials[e]){let i=this.materials[e];i.reset(t,this.thisContext),i.dispose()}else{let i=new Ca(t,this.thisContext,e);this.materials[e]=i}}deleteMaterial(e){this.materials[e]&&(this.materials[e].nodeMaterialDispose(),delete this.materials[e])}getMaterial(e){return this.materials[e]}getMaterialOrDeletedPlaceholder(e){return this.materials[e]??this.deletedMaterial}material(e){return"string"==typeof e?this.getMaterialOrDeletedPlaceholder(e):null==e?this.deletedMaterial:new Cr(e,this.thisContext)}getMaterials(){return this.materials}addImage(e,t){return this.images[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.images[e].updateSrc(t.data),!0):(this.images[e]=new Mh(t,this),!1)}deleteImage(e){let t=this.images[e];t&&(t.dispose(),delete this.images[e])}getDefaultImage(){return this.images.image_0}getImage(e){return this.images[e]??this.deletedImage}image(e){return"string"==typeof e?this.getImage(e):this.imageHolderCache.load(e)}addUIBuffer(e,t){return this.uiBuffers[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),this.uiBuffers[e].updateSrc(t),!0):(this.uiBuffers[e]=new Mh(t,this),!1)}uiBuffer(e){return this.uiBuffers[e]}addVideo(e,t){return this.videos[e]?(this.videos[e].updateSrc(t.data),!0):(this.videos[e]=new Mh(t,this),!1)}deleteVideo(e){let t=this.videos[e];t&&(t.dispose(),delete this.videos[e])}getVideo(e){return this.videos[e]??this.deletedVideo}video(e){return"string"==typeof e?this.getVideo(e):this.imageHolderCache.load(e)}addColor(e,t){return this.colors[e]?(this.onColorOrImageUpdate&&this.onColorOrImageUpdate(),"a"in t?this.colors[e].setRGBA(t.r,t.g,t.b,t.a):this.colors[e].setRGBA(t.r,t.g,t.b,1),!0):("a"in t?this.colors[e]=new MX(t.r,t.g,t.b,t.a):this.colors[e]=new MX(t.r,t.g,t.b,1),!1)}updateColor(e,t){if(this.colors[e]){this.onColorOrImageUpdate&&this.onColorOrImageUpdate();let i=this.colors[e];return this.colors[e].r=t.r??i.r,this.colors[e].g=t.g??i.g,this.colors[e].b=t.b??i.b,this.colors[e].a=t.a??i.a,!0}return!1}deleteColor(e){this.colors[e]&&delete this.colors[e]}getColor(e){return this.colors[e]}getColorNames(){return Object.values(this.data.colors).map(e=>e.name)}getColorByName(e){for(let t in this.data.colors)if(this.data.colors[t].name===e)return{color:this.colors[t],id:t}}color(e){let t;if("string"!=typeof e)return"a"in e?new _0(e.r,e.g,e.b,e.a):new _0(e.r,e.g,e.b,1);{let i=this.getColor(e);t=i?i:new _0(0,0,0,0)}return t}addAudio(e,t){this.audios[e]=t}getAudio(e){let t=this.audios[e];if(t instanceof Cp)return t;{let i=new Cp({src:t.data});return this.audios[e]=i,i}}addParticle(e,t){this.particles[e]=t}getParticle(e){return this.particles[e]}deleteParticle(e){this.particles[e]&&delete this.particles[e]}deleteAudio(e){let t=this.audios[e];t&&(t instanceof Cp&&t.dispose(),delete this.audios[e])}addFont(e,t){this.fonts[e]=new Cw(t),this.fonts[e].loadingPromise.then(()=>this.requestRender())}getFont(e){return this.fonts[e]}deleteFont(e){this.fonts[e]&&delete this.fonts[e]}addAnimation(e,t){this.timelineAnimations[e]=t}getAnimation(e){return this.timelineAnimations[e]}deleteAniamtion(e){this.timelineAnimations[e]&&delete this.timelineAnimations[e]}dispose(){Object.keys(this.materials).forEach(e=>this.deleteMaterial(e)),this._requestRender=void 0,Object.values(this.audios).forEach(e=>{e instanceof Cp&&e.dispose()}),this.audios={},this.particles={},this.geometryCache.dispose(),this.geometryCache2.dispose()}addVariableHolder(e,t){if(void 0===this.variables[e]){let i=t.value;if(this.enableLocalStorageForPersistentVariables&&t.persistent){let r=localStorage.getItem(Cz(e));i=null!==r?JSON.parse(r):t.value}return this.variables[e]={value:i,locations:[],persistent:t.persistent},"dynamicVariableType"in t&&(this.variables[e].dynamicVariablePlayState="Playing",this.variables[e].dynamicVariableToggleIsForward=void 0),!0}return this.variables[e].value=t.value,!1}resetDynamicVariablePlayState(){for(let e in this.variables)void 0!==this.variables[e].dynamicVariablePlayState&&(this.variables[e].dynamicVariablePlayState="Playing",this.variables[e].dynamicVariableToggleIsForward=void 0)}updateVariableHolder(e,t){this.updateVariable(e,t.value)}updateVariable(e,t){if(void 0===this.variables[e])return!1;this.variables[e].value=t,this.enableLocalStorageForPersistentVariables&&this.variables[e].persistent&&localStorage.setItem(Cz(e),JSON.stringify(t));let i=t;for(;"string"==typeof i;)i=this.variables[i].value;let r=this.entityOpContext.scene;for(let t=this.variables[e].locations.length-1;t>=0;t--){let a=this.variables[e].locations[t];if("material"===a[0]){let e=a[1],t=i,o={scene:r,shared:this},l=a.slice(2);r.traverseMaterial(i=>{let r=i.root??i;r.uuid===e&&r.onVariableUpdate(l,t,o)});let h=this.materials[e];h&&h.onVariableUpdate(l,t,o)}else{let o=r.find(a[0]);if(void 0===o){this.variables[e].locations.splice(t,1);continue}if("geometry"!==a[1]&&"particles"!==a[1]){for(let e=1;e<a.length-1;e++)o=o[a[e]];"rotation"===a[1]?o[a[a.length-1]]=i*t8.DEG2RAD:o[a[a.length-1]]=i}if("ParticleEmitter"===(o=r.find(a[0])).type&&o.updateVariableState(i,a),S7.is(o))if("position"===a[1]||"rotation"===a[1]||"scale"===a[1])o.onVariableUpdate();else if("geometry"===a[1]){let e=o;o.component&&(e=o.component);let t=e.dataPatched;e.chooseGeoemtryCache(this).forceDelete(t.geometry),e.createGeometryDelayed(this.entityOpContext),e.onVariableUpdate(!0),e.invalidateDownstreamBooleanData(),e.instances.forEach(e=>{let t=e.dataPatched;e.chooseGeoemtryCache(this).forceDelete(t.geometry),e.createGeometryDelayed(this.entityOpContext),e.onVariableUpdate(!0),e.invalidateDownstreamBooleanData()})}else"morphTargetInfluences"===a[1]&&o.updateMorphInfluences(a[2],i)}}return this.requestRender(),!0}deleteVariable(e){this.variables[e]&&delete this.variables[e]}getVariable(e,t){if(Array.isArray(e)){if("mouse"===e[0])return this.mouseProperty?.[e[1]]??0;if("raycast"===e[0])return this.raycastProperty?.[e[1]]??0;let t=this.entityOpContext.scene.find(e[0]);if("width"===e[1]||"height"===e[1]||"depth"===e[1])return t.geometry.userData.parameters[e[1]];for(let i=1;i<e.length;i++)t=t[e[i]];return"rotation"===e[1]&&(t*=t8.RAD2DEG),t}for(let e in this.variables){if(void 0===t)break;let i=this.variables[e],r=i.locations?.findIndex(e=>fM.equal(e,t));void 0!==r&&-1!==r&&i.locations.splice(r,1)}if("string"!=typeof e)return e;{let i=e,r=e;do{if(r=i,void 0===this.variables[i])break;let e=this.variables[i].value;t&&void 0!==this.variables[r]&&this.variables[r].locations.push(t),i=e}while("string"==typeof i)return i}}getVariables(){return this.variables}getVariablesNames(){return this.data.variables.map(e=>e.data.name)}getVariableByName(e){for(let t of this.data.variables)if(t.data.name===e)return{variable:t.data,id:t.id}}getDynamicVariablePlayState(e){return this.variables[e]?.dynamicVariablePlayState}setDynamicVariablePlayState(e,t){void 0!==this.variables[e]&&(this.variables[e].dynamicVariablePlayState=t)}getDynamicVariableToggleIsForward(e){return this.variables[e]?.dynamicVariableToggleIsForward}setDynamicVariableToggleIsForward(e,t){void 0!==this.variables[e]&&(this.variables[e].dynamicVariableToggleIsForward=t)}resetLib(e){for(let[t,i]of Object.entries(e.images))this.addImage(t,i.asset);for(let[t,i]of Object.entries(e.audios))this.addAudio(t,i.asset);for(let[t,i]of Object.entries(e.particles))this.addParticle(t,i.asset);for(let[t,i]of Object.entries(e.colors))this.addColor(t,i.asset);for(let[t,i]of Object.entries(e.fonts))this.addFont(t,i.asset);for(let[t,i]of Object.entries(e.materials))this.addMaterial(t,i.asset);for(let[t,i]of Object.entries(e.videos))this.addVideo(t,i.asset);for(let[t,i]of Object.entries(e.variables))this.addVariableHolder(t,i.asset)}updateLibByOp(e,t){"images"===e.path[0]?1===e.path.length&&1===e.type?this.addImage(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteImage(e.id):"videos"===e.path[0]?1===e.path.length&&1===e.type?this.addVideo(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteVideo(e.id):"audios"===e.path[0]?1===e.path.length&&1===e.type?this.addAudio(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteAudio(e.id):"particles"===e.path[0]?1===e.path.length&&1===e.type?this.addParticle(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteParticle(e.id):"c
5422olors"===e.path[0]?1===e.path.length&&1===e.type?this.addColor(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteColor(e.id):"materials"===e.path[0]?1===e.path.length&&1===e.type?this.addMaterial(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteMaterial(e.id):"fonts"===e.path[0]?1===e.path.length&&1===e.type?this.addFont(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteFont(e.id):"variables"===e.path[0]?1===e.path.length&&1===e.type?this.addVariableHolder(e.id,e.data.asset):1===e.path.length&&2===e.type&&this.deleteVariable(e.id):"components"===e.path[0]&&t.updateByLibOp(e,this)}updateByOp(e,t,i){if(this.data=t,"images"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.getImage(e.path[1]).updateSrc(e.props.data):1===e.path.length&&1===e.type?this.addImage(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteImage(e.id);else if("videos"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.getVideo(e.path[1]).updateSrc(e.props.data):1===e.path.length&&1===e.type?this.addVideo(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteVideo(e.id);else if("audios"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.addAudio(e.path[1],t.audios[e.path[1]]):1===e.path.length&&1===e.type?this.addAudio(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteAudio(e.id);else if("particles"===e.path[0])2===e.path.length&&0===e.type?e.props.data&&this.addParticle(e.path[1],t.particles[e.path[1]]):1===e.path.length&&1===e.type?this.addParticle(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteParticle(e.id);else if("colors"===e.path[0])2===e.path.length&&0===e.type?this.updateColor(e.path[1],e.props):1===e.path.length&&1===e.type?this.addColor(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteColor(e.id);else if("materials"===e.path[0])1===e.path.length&&1===e.type?this.addMaterial(e.id,e.data):1===e.path.length&&2===e.type?this.deleteMaterial(e.id):e.path.length>1&&this.getMaterial(e.path[1]).updateByOp(f_.drop(e,2),t.materials[e.path[1]],{shared:this,scene:i});else if("fonts"===e.path[0])2===e.path.length&&0===e.type?this.updateFont(e.path[1],e,i):1===e.path.length&&1===e.type?this.addFont(e.id,e.data):1===e.path.length&&2===e.type&&this.deleteFont(e.id);else if("variables"===e.path[0])2===e.path.length&&0===e.type?"value"in e.props?this.updateVariable(e.path[1],e.props.value):"persistent"in e.props&&(this.variables[e.path[1]].persistent=e.props.persistent):1===e.path.length&&4===e.type?this.addVariableHolder(e.id,e.data):1===e.path.length&&5===e.type&&this.deleteVariable(e.id);else if("userAPIs"===e.path[0]){if(1===e.path.length&&1===e.type)this.addUserAPI(e.id,e.data);else if(1===e.path.length&&2===e.type)this.deleteUserAPI(e.id);else if("string"==typeof e.path[1]){let i=t.userAPIs[e.path[1]];if(i){let t=0===e.type&&void 0===e.props.debounce,r=this.getUserAPI(e.path[1]);r instanceof CB?r.update(i):r?.update(i,this,t)}}}else if("userWebhooks"===e.path[0]){if(1===e.path.length&&1===e.type)this.addUserWebhook(e.id,e.data);else if(1===e.path.length&&2===e.type)this.deleteUserWebhook(e.id);else if("string"==typeof e.path[1]){let i=t.userWebhooks[e.path[1]];i&&this.getUserWebhook(e.path[1])?.update(i)}}else"lib"===e.path[0]&&this.updateLibByOp(f_.drop(e,1),i)}updateFont(e,t,i){if(t.props.url){let r=this.getFont(e),a={...this.data.fonts[e],url:t.props.url};r.update(a),r.loadingPromise.then(()=>this.requestRender()),i.updateFont(e,this)}}addUserAPI(e,t){return this.userAPIs[e]?(this.userAPIs[e].update(t,this),!0):this.openAIRealtime?.id===e?(this.openAIRealtime.update(t),!0):(t.integration?.type==="VoiceAssistant"?this.openAIRealtime=new CB(t,e,this):this.userAPIs[e]=new SY(e,t,this),!1)}getUserAPI(e){return this.openAIRealtime?.id===e?this.openAIRealtime:this.userAPIs[e]}getUserAPIs(){return this.userAPIs}deleteUserAPI(e){let t=this.userAPIs[e];t&&(t.dispose(),delete this.userAPIs[e])}addUserWebhook(e,t){return this.userWebhooks[e]?(this.userWebhooks[e].update(t),!0):(this.userWebhooks[e]=new CM(e,t),!1)}getUserWebhook(e){return this.userWebhooks[e]}getUserWebhooks(){return this.userWebhooks}deleteUserWebhook(e){let t=this.userWebhooks[e];t&&(t.dispose(),delete this.userWebhooks[e])}get scene(){return this.entityOpContext.scene}};new CN(xO.emptyData());var CU=class extends _H{updateByPatchedOp(e,t,i){if(super.updateByPatchedOp(e,t,i),null!==function(e,t){let i=[];if(t.length!==e.length)return null;for(var r=0;r<e.length;){if("*"===t[r])i.push(e[r]);else if(e[r]!==t[r])return null;r+=1}return i}(e.path,["materials"])&&0===e.type&&Array.isArray(this.material))for(let[t,r]of Object.entries(e.props)){let e=i.shared.material(r);this.material[Number(t)]=e}else if(fv(e.path,["material"])&&this.material instanceof Ct)"material"in t&&"string"!=typeof t.material&&this.material.updateByOp(f_.drop(e,1),t.material,i);else if(fv(e.path,["materials","*"])&&Array.isArray(this.material)){let r=e.path[1];if("materials"in t&&r<this.material.length){let a=t.materials[r];"string"!=typeof a&&this.material[r].updateByOp(f_.drop(e,2),a,i)}}}get needsAO(){return void 0!==this.material&&(Array.isArray(this.material)?this.material[0]:this.material).hasAO}updateState(e,t){let i;super.updateState(e,t),void 0!==e.castShadow&&(this.castShadow=e.castShadow),void 0!==e.receiveShadow&&(this.receiveShadow=e.receiveShadow);let r=this.dataPatched;"Mesh"===this.dataPatched.type&&this.dataPatched.geometry.shapeBlendNode&&this.layers.set(9),"Mesh"===this.dataPatched.type&&"ShapeBlendGeometry"===this.dataPatched.geometry.type&&(i={resolutionLevel:this.dataPatched.geometry.resolutionLevel,useChildrenColors:this.dataPatched.geometry.useChildrenColors}),e.geometry?.type!=="NonParametricGeometry"&&"material"in e&&void 0!==e.material&&(this.disposeMaterial(),this.material=t.shared.material(e.material).getFlavor(r.flatShading,r.side,r.wireframe,i),t.scene.markNeedsUpdateRendererDirty()),(e.geometry?.type==="NonParametricGeometry"||"materials"in e)&&("materials"in e&&void 0!==e.materials?(this.disposeMaterial(),this.material=e.materials.map(e=>t.shared.material(e).getFlavor(r.flatShading,r.side,r.wireframe)),t.scene.markNeedsUpdateRendererDirty()):"material"in e&&void 0!==e.material&&(this.disposeMaterial(),this.material=[t.shared.material(e.material).getFlavor(r.flatShading,r.side,r.wireframe)],t.scene.markNeedsUpdateRendererDirty()));let a=this.data;if(a.geometry?.type!=="NonParametricGeometry"&&"materials"in a&&void 0!==a.materials&&(this.disposeMaterial(),this.material=t.shared.material(a.materials[0]).getFlavor(r.flatShading,r.side,r.wireframe)),void 0!==e.flatShading||void 0!==e.wireframe||void 0!==e.side)if(Array.isArray(this.material))for(let e=0;e<this.material.length;e++)this.material[e]=this.material[e].getFlavor(r.flatShading,r.side,r.wireframe);else this.material=this.material.getFlavor(r.flatShading,r.side,r.wireframe,i)}
vendor: 10,517 bytes, line 5422
5422disposeMaterial(){this.material&&vb(this.material).forEach(e=>{e instanceof Ct&&(e instanceof Ca||e.nodeMaterialDispose())})}dispose(){this.disposeMaterial(),super.dispose()}},Ck=new iD,CV=new iA,Cj=new iA,CG=new iD,CW=new i6,CH=class extends CU{constructor(e,t,i){super(e,t),this.data=t,this.isSkinnedMesh=!1,this.localGeometry=void 0,t.bindMode&&t.bindMatrix&&(this.bindMode=t.bindMode,this.bindMatrix=new i6().fromArray(t.bindMatrix),this.bindMatrixInverse=new i6)}chooseGeoemtryCache(e){return e.geometryCache}markGeometryAsReachable(e){this.geometryCreateDeleyed instanceof rQ&&this.chooseGeoemtryCache(e).markAsReachable(this.dataPatched.geometry,this.geometryCreateDeleyed)}get geometry(){if(void 0!==this.localGeometry)return this.localGeometry;if(this.geometryCreateDeleyed instanceof CN){let e=this.geometryCreateDeleyed,t=this.chooseGeoemtryCache(e);this.geometryCreateDeleyed=t.get(this.dataPatched.geometry,e,this)}return this.geometryCreateDeleyed}set geometry(e){this.localGeometry=e}get is2DAndNoDepth(){let e=this.dataPatched.geometry;return vO.is2DParametricMesh(e.type)&&0===e.depth}get is2DType(){return vO.is2DParametricMesh(this.geometry.userData.type)}get isNonParametric(){return"NonParametricGeometry"===this.geometry.userData.type}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),fv(e.path,["geometry"])&&this.updateByPatchedOpGeometry(f_.drop(e,1),t.geometry,i)}removeInteractionGeometry(e){this.localGeometry?.dispose(),this.localGeometry=void 0}updateGeometryInteractions(e,t){this.invalidateDownstreamBooleanData();let i=this.data.geometry.type;if("NonParametricGeometry"===i||"SubdivGeometry"===i){let i,r,a;if(void 0===this.localGeometry){let i={...this.data.geometry,...e};this.localGeometry=_l(i,t,this.data.flatShading,this)}e.scaleBaked?[i,r,a]=e.scaleBaked:{width:i,height:r,depth:a}=e;let o=this.localGeometry.userData,l="number"==typeof i?i:1,h="number"==typeof r?r:1,c="number"==typeof a?a:1;void 0!==o.sxPrev&&_c(this.localGeometry.attributes,l/o.sxPrev,h/o.syPrev,c/o.szPrev),o.sxPrev=l,o.syPrev=h,o.szPrev=c}else{let i={...this.data.geometry,...e};this.localGeometry?.dispose(),this.localGeometry=_l(i,t,this.data.flatShading,this)}}refreshAttachedClonersInteractions(e){for(let t of this.attachedSurfaceCloners)t.update(e)}refreshAttachedCloners(e){for(let t of this.attachedSurfaceCloners)e.scene.addPendingUpdateCloner(t.object)}refreshAttachedPaths(e){for(let t of this.attachedPaths)e.scene.addPendingCommand(()=>t.updateShape())}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.refreshAttachedCloners(e),this.refreshAttachedPaths(e)}updateByPatchedOpGeometry(e,t,i){let r=!1;0===e.type&&0===e.path.length&&Object.keys(e.props).includes("scaleBaked")&&this.geometryCreateDeleyed instanceof _y&&this.chooseGeoemtryCache(i.shared).mutateIfUnique(this.geometryCreateDeleyed.data,t)===this.geometryCreateDeleyed&&(r=!0,this.geometryCreateDeleyed.mutateDirectlyScaleBaked(t,e.props.scaleBaked),this.refreshAttachedCloners(i),this.refreshAttachedPaths(i)),r||(i.scene?.markGeometryCacheDirty(),this.createGeometryDelayed(i)),this.resetBBoxNeedsUpdate(),this.invalidateDownstreamBooleanData()}updateGeometryOnStateUpdate(e,t){this.createGeometryDelayed(t)}updateState(e,t){void 0!==e.geometry&&this.updateGeometryOnStateUpdate(e.geometry,t);let i=e.morphTargetInfluences;if(i)for(let{data:{name:e,value:r}}of(this.updateMorphTargets(),this.geometry.morphTargetsRelative=!0,i))this.updateMorphInfluences(e,t.shared.getVariable(r,[this.uuid,"morphTargetInfluences",e]));super.updateState(e,t)}updateMorphInfluences(e,t){if(void 0===this.morphTargetDictionary)return;let i=this.morphTargetDictionary[e];void 0!==i&&(this.morphTargetInfluences[i]=t)}updateGeometryGroupsIfNeeded(){Array.isArray(this.material)&&0===this.geometry.groups.length&&this.geometry.addGroup(0,Math.max(this.geometry.getIndex()?.count??0,this.geometry.getAttribute("position").count),0)}updateEntityBoxSize(e,t){let i=this.geometry.userData.parameters;this.is2DType?e.set(0,0,.5*i.depth):this.isNonParametric?(e.setScalar(0),this.geometry.boundingSphere&&e.copy(this.geometry.boundingSphere.center),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)):i.centerOffset?e.fromArray(i.centerOffset):e.setScalar(0),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}updateMatrixWorld(e){super.updateMatrixWorld(e),"attached"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():"detached"===this.bindMode&&this.bindMatrixInverse.copy(this.bindMatrix).invert()}bind(e,t){this.skeleton=e,this.isSkinnedMesh=!0,void 0===t&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld),this.bindMatrix.copy(t),this.bindMatrixInverse.copy(t).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(e){let t=new iA,i=this.geometry.attributes.skinWeight;for(let e=0,r=i.count;e<r;e++){t.fromBufferAttribute(i,e);let r=1/t.manhattanLength();r!==1/0?t.multiplyScalar(r):t.set(1,0,0,0),i.setXYZW(e,t.x,t.y,t.z,t.w)}}boneTransform(e,t){let i=this.skeleton;if(void 0===i)return;let r=this.geometry;CV.fromBufferAttribute(r.attributes.skinIndex,e),Cj.fromBufferAttribute(r.attributes.skinWeight,e),Ck.copy(t).applyMatrix4(this.bindMatrix),t.set(0,0,0);for(let e=0;e<4;e++){let r=Cj.getComponent(e);if(0!==r){let a=CV.getComponent(e);CW.multiplyMatrices(i.bones[a].matrixWorld,i.boneInverses[a]),t.addScaledVector(CG.copy(Ck).applyMatrix4(CW),r)}}return t.applyMatrix4(this.bindMatrixInverse)}};function Cq(e){if(Array.isArray(e.material)){for(let t of e.material)if(0===t.getLayersOfType("outline").length)return}else if(!(e.material instanceof Ct)||0===e.material.getLayersOfType("outline").length)return;e instanceof CH&&e.is2DAndNoDepth?function(e){if(e.geometry.attributes.extrudeNormals||!e.geometry.attributes.position)return;let t=e.geometry.attributes.position.array,i=new Float32Array(t.length),r=new iD;for(let e=0;e<t.length;e+=3)r.set(t[e],t[e+1],t[e+2]).normalize(),i[e]=r.x,i[e+1]=r.y,i[e+2]=r.z;e.geometry.setAttribute("extrudeNormal",new rV(i,3))}(e):function(e){if(e.geometry.attributes.extrudeNormal||!e.geometry.attributes.position||!e.geometry.attributes.normal)return;let t=new Map,i=e.geometry.attributes,r=i.position.array,a=i.normal.array,o=new Float32Array(r.length);for(let e=0;e<r.length;e+=3){let i=`${r[e]}_${r[e+1]}_${r[e+2]}`,o=new iD(a[e],a[e+1],a[e+2]);t.has(i)?t.get(i)?.normals.push(o):t.set(i,{normals:[o],result:new iD})}t.forEach((e,t)=>{for(let t of e.normals)e.result.add(t);e.result.divideScalar(e.normals.length)});for(let e=0;e<r.length;e+=3){let i=`${r[e]}_${r[e+1]}_${r[e+2]}`,a=t.get(i)?.result;a&&(o[e]=a.x,o[e+1]=a.y,o[e+2]=a.z)}e.geometry.setAttribute("extrudeNormal",new rV(o,3))}(e)}function CX(e){if(!e.geometry.attributes.position)return;let t=e.geometry.attributes.position.array,i=new Float32Array(t.length),r=parseInt(e.uuid.replace(/\D/g,"")),a=[t8.seededRandom(r),t8.seededRandom(r+1e4),t8.seededRandom(r+2e4)];for(let e=0;e<t.length;e++)i[e]=a[e%3];e.geometry.setAttribute("randomColor",new rN(i,3))}var CY=new iR,CQ=new iD,CZ=class extends CH{constructor(e,t,i){super(e,t,i),this.data=t,this.hiddenMatrixOld=new i6,this.smoothShading=!0,this.skipReactionUpdate=!1}chooseGeoemtryCache(e){return this.dataPatched.flatShading?e.geometryCache:e.geometryCache2}get subdivPointerNew(){return void 0!==this.localGeometry?this.subdivPointer:this.geometry.ensureSubdivPointer()}get originalGeometryNew(){return void 0!==this.localGeometry?this.originalGeometry:this.geometry.originalGeometry}get phongAngle(){return this.data.geometry.phongAngle??45}updateEntityBoxSize(e,t){let i=this.geometry.userData.parameters;e.copy(this.originalGeometryNew.boundingSphere.center),t.set(i.width,i.height,i.depth??0).multiplyScalar(.5)}createGeometryByControls(e){if(!0===this.skipReactionUpdate)return;let t=this.localGeometry?.uuid,{originalGeometry:i,subdividedGeometry:r,subdivPointer:a}=_y.build(e,this.subdivPointer,this.smoothShading,this.hasNonUniformScale?this.shearScale:void 0);this.subdivPointer=a,void 0!==i&&(this.originalGeometry?.dispose(),this.originalGeometry=i),void 0!==r&&(this.subdividedGeometry?.dispose(),this.subdividedGeometry=r??void 0),this.localGeometry=this.subdividedGeometry??this.originalGeometry,Cq(this),CX(this),this.calcBoundingBox(),t&&(this.localGeometry.uuid=t)}updateState(e,t){if(super.updateState(e,t),void 0!==e.flatShading){let i=this.material;this.material=Array.isArray(i)?i.map(e=>e.getFlavor(!1,e.side,e.wireframe)):i.getFlavor(!1,i.side,i.wireframe),this.smoothShading=!e.flatShading,this.createGeometryDelayed(t)}}updateMesh(e=!1){_y.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1,this.originalGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0),this.subdividedGeometry&&_y.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1,this.subdividedGeometry,e&&this.hasNonUniformScale?this.shearScaleInv:void 0)}updateTopology(){this.originalGeometry.dispose(),this.originalGeometry=_y.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1),this.subdividedGeometry&&(this.subdividedGeometry.dispose(),this.subdividedGeometry=_y.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1)),this.localGeometry=this.subdividedGeometry??this.originalGeometry}raycast(e,t){let i=this.localGeometry;this.localGeometry=this.originalGeometryNew,_H.prototype.raycast.call(this,e,t),this.localGeometry=i}activateSVDCompensation(){this.hasNonUniformScale&&(this.matrix.copy(this.matrixWorldRigid),this.hiddenMatrixOld.copy(this.hiddenMatrix),this.hiddenMatrix.copy(this.parent.matrixWorld).invert())}deactivateSVDCompensation(){this.hasNonUniformScale&&(this.updateMatrix(),this.hasNonUniformScale=void 0,this.hiddenMatrix.copy(this.hiddenMatrixOld))}calcBoundingBox(){let e=this.originalGeometry;null===e.boundingSphere&&(e.boundingSphere=new iK,this.subdividedGeometry&&(this.subdividedGeometry.boundingSphere=e.boundingSphere));let t=e.attributes.position,i=e.boundingSphere.center;CY.setFromBufferAttribute(t),CY.getCenter(i),e.boundingSphere.radius=i.distanceTo(CY.max),isNaN(e.boundingSphere.radius),CY.getSize(CQ),this.hasNonUniformScale&&CQ.divide(this.scale);let r={width:CQ.x,height:CQ.y,depth:CQ.z};return this.geometry.userData.parameters=r,r}updateBoundingSphere(e){let t=this.originalGeometry;CY.min.set(e[0],e[2],e[4]),CY.max.set(e[1],e[3],e[5]),this.hasNonUniformScale&&(CY.min.applyMatrix4(this.shearScaleInv),CY.max.applyMatrix4(this.shearScaleInv)),null===t.boundingSphere&&(t.boun
5422dingSphere=new iK);let i=t.boundingSphere.center;CY.getCenter(i),t.boundingSphere.radius=i.distanceTo(CY.max)}freeSubdivPointer(){this.subdivPointer&&(_y.freeSubdivPointer(this.subdivPointer),this.subdivPointer=0),this.localGeometry=void 0,this.originalGeometry?.dispose(),this.subdividedGeometry?.dispose()}dispose(){super.dispose(),this.freeSubdivPointer()}updateByPatchedOpGeometry(e,t,i){super.updateByPatchedOpGeometry(e,t,i),this.localGeometry&&this.createGeometryByControls(t)}},CK={x:[1,0,0],"-x":[-1,0,0],y:[0,1,0],"-y":[0,-1,0],z:[0,0,1],"-z":[0,0,-1]},CJ={polygon_center:0,edge:1,vertex:2},C$=(e,t)=>(i,r)=>t&&0!==i&&0!==e?e*r/100:0,C0=(e,t)=>{let i=Math.abs(t),r=-1*i;return(e- -1)*(i-r)/2+r},C1=new iD,C2=new iD,C3=new iD,C4=new iD;function C5(e,t){let i=C3.fromArray(e),r=C4.fromArray(t);C2.copy(r).sub(i);let a=C2.length();return C2.normalize().multiplyScalar(.5*a),C1.copy(i).add(C2).toArray()}var C6=new rI,C8=new iD,C9=new iD,C7=new iD,Ee=e=>.5*(1-Math.cos(e*Math.PI)),Et=class{constructor(){this.perlin=Array(4096)}noise(e,t=0,i=0){if(null==this.perlin){this.perlin=Array(4096);for(let e=0;e<4096;e++)this.perlin[e]=Math.random()}e<0&&(e=-e),t<0&&(t=-t),i<0&&(i=-i);let r=Math.floor(e),a=Math.floor(t),o=Math.floor(i),l=e-r,h=t-a,c=i-o,d,p,f=0,m=.5,g,v,y;for(let e=0;e<4;e++){let e=r+(a<<4)+(o<<8);d=Ee(l),p=Ee(h),g=this.perlin[4095&e],g+=d*(this.perlin[e+1&4095]-g),v=this.perlin[e+16&4095],v+=d*(this.perlin[e+16+1&4095]-v),g+=p*(v-g),e+=256,v=this.perlin[4095&e],v+=d*(this.perlin[e+1&4095]-v),y=this.perlin[e+16&4095],y+=d*(this.perlin[e+16+1&4095]-y),v+=p*(y-v),g+=Ee(c)*(v-g),f+=g*m,m*=.5,r<<=1,a<<=1,h*=2,o<<=1,c*=2,(l*=2)>=1&&(r++,l--),h>=1&&(a++,h--),c>=1&&(o++,c--)}return f}noiseSeed(e){let t,i,r={setSeed(e){i=t=(e??0x100000000*Math.random())>>>0},getSeed:()=>t,rand:()=>(i=(1664525*i+0x3c6ef35f)%0x100000000)/0x100000000};r.setSeed(e),this.perlin=Array(4096);for(let e=0;e<4096;e++)this.perlin[e]=r.rand()}},Ei=new iD,Er=new i6,Es=new i5;function Ea(e){let t=!1;return e.scene.objects.traverse((e,i)=>{"Mesh"===i.type&&("TextGeometry"===i.geometry.type||"InputGeometry"===i.geometry.type)&&(t=!0)}),t}var En,Eo,El,Eh,Ec,Ed=class extends CH{constructor(e,t,i){super(e,t,i),this.data=t}get textGeometry(){return this.geometry}get charWidths(){return this.textGeometry.charWidths}get charCoords(){return this.textGeometry.charCoords}get wrappedText(){return this.textGeometry.wrappedText}get font(){return this.textGeometry.font}get initialOffsetY(){let e=this.dataPatched;return this.font?.getLineInitialOffsetY(this.lineHeight,this.wrappedText.length,"number"==typeof e.geometry.height?e.geometry.height:1,this.fontScale,e.geometry.verticalAlign)??0}get fontScale(){let e=this.dataPatched;return this.font?e.geometry.fontSize/this.font.unitsPerEm:1}get AD(){return Math.abs(this.ascender-this.descender)}get ascender(){return(this.font?.ascender??1)*this.fontScale}get descender(){return(this.font?.descender??1)*this.fontScale}get lineHeight(){let e=this.dataPatched;return e.geometry.fontSize*e.geometry.lineHeight}raycast(e,t){let{matrixWorld:i}=this;if(!(isNaN(e.ray.origin.x)||0===this.scale.x||0===this.scale.y||0===this.scale.z)&&(Er.copy(i).invert(),Es.copy(e.ray).applyMatrix4(Er),Es.intersectBox(this.singleBBox,Ei))){let r=Ei.applyMatrix4(i),a=e.ray.origin.distanceTo(r);t.push({distance:a,point:r.clone(),object:this})}}},Eu=new iD,Ep=new iD;_a.then(e=>{El=[(Eo=e).get_face_center,Eo.get_edge_midpoint,Eo.get_vertex_position],Eh=[Eo.get_face_normal,Eo.get_edge_normal,Eo.get_vertex_normal],Ec=[Eo.face_count,Eo.edge_count,Eo.vertex_count]});var Ef=new i6,Em=new i6,Eg=new iD,Ev=new iD,Ey=new iD,Ex=new iD,Eb=new iD,Ew=new iD;function ES(e,t){return["number"==typeof e?.[0]?e[0]:"string"==typeof e?.[0]&&t?parseFloat(String(t.shared.getVariable(e[0])??"0")):0,"number"==typeof e?.[1]?e[1]:"string"==typeof e?.[1]&&t?parseFloat(String(t.shared.getVariable(e[1])??"0")):0,"number"==typeof e?.[2]?e[2]:"string"==typeof e?.[2]&&t?parseFloat(String(t.shared.getVariable(e[2])??"0")):0]}var E_=class{constructor(e,t){this.data=e,this.is3D=t,this.perlin=new Et,"perlin"===e.n
5422oiseType?(this.perlin.noiseSeed(e.seed),t?this.noise=(e,t,i)=>this.perlin.noise(e,t,i):this.noise=e=>this.perlin.noise(e)):t?this.noise=function(e=Math.random){let t=bw(e),i=new Float64Array(t).map(e=>bb[e%12*3]),r=new Float64Array(t).map(e=>bb[e%12*3+1]),a=new Float64Array(t).map(e=>bb[e%12*3+2]);return function(e,o,l){let h,c,d,p,f=(e+o+l)*bg,m=by(e+f),g=by(o+f),v=by(l+f),y=(m+g+v)*bv,x=e-(m-y),b=o-(g-y),w=l-(v-y),S,_,A,M,C,E;x>=b?b>=w?(S=1,_=0,A=0,M=1,C=1,E=0):(x>=w?(S=1,_=0,A=0):(S=0,_=0,A=1),M=1,C=0,E=1):b<w?(S=0,_=0,A=1,M=0,C=1,E=1):x<w?(S=0,_=1,A=0,M=0,C=1,E=1):(S=0,_=1,A=0,M=1,C=1,E=0);let T=x-S+bv,P=b-_+bv,D=w-A+bv,O=x-M+2*bv,I=b-C+2*bv,R=w-E+2*bv,L=x-1+3*bv,B=b-1+3*bv,z=w-1+3*bv,F=255&m,N=255&g,U=255&v,k=.6-x*x-b*b-w*w;if(k<0)h=0;else{let e=F+t[N+t[U]];k*=k,h=k*k*(i[e]*x+r[e]*b+a[e]*w)}let V=.6-T*T-P*P-D*D;if(V<0)c=0;else{let e=F+S+t[N+_+t[U+A]];V*=V,c=V*V*(i[e]*T+r[e]*P+a[e]*D)}let j=.6-O*O-I*I-R*R;if(j<0)d=0;else{let e=F+M+t[N+C+t[U+E]];j*=j,d=j*j*(i[e]*O+r[e]*I+a[e]*R)}let G=.6-L*L-B*B-z*z;if(G<0)p=0;else{let e=F+1+t[N+1+t[U+1]];G*=G,p=G*G*(i[e]*L+r[e]*B+a[e]*z)}return 32*(h+c+d+p)}}((0,bp.default)(e.seed)):this.noise=function(e=Math.random){let t=bw(e),i=new Float64Array(t).map(e=>bx[e%12*2]),r=new Float64Array(t).map(e=>bx[e%12*2+1]);return function(e,a){let o=0,l=0,h=0,c=(e+a)*bf,d=by(e+c),p=by(a+c),f=(d+p)*bm,m=e-(d-f),g=a-(p-f),v,y;m>g?(v=1,y=0):(v=0,y=1);let x=m-v+bm,b=g-y+bm,w=m-1+2*bm,S=g-1+2*bm,_=255&d,A=255&p,M=.5-m*m-g*g;if(M>=0){let e=_+t[A],a=i[e],l=r[e];M*=M,o=M*M*(a*m+l*g)}let C=.5-x*x-b*b;if(C>=0){let e=_+v+t[A+y],a=i[e],o=r[e];C*=C,l=C*C*(a*x+o*b)}let E=.5-w*w-S*S;if(E>=0){let e=_+1+t[A+1],a=i[e],o=r[e];E*=E,h=E*E*(a*w+o*S)}return 70*(o+l+h)}}((0,bp.default)(e.seed??""))}},EA=class extends bP(rw){constructor(e,t){super(),this.parameters=t,this.objectForSample=void 0,this._pendingMediaLoad=!1,this.random=null,this.object=e}resetOnMove(){this.removeFromParent(),this.parent=null}expandClones(e){if(null===this.parent)this.updateState(this.parameters,e);else for(let e of this.children)e instanceof bO&&e.expand()}invalidateTransform(e){this.matrixWorldNeedsUpdate=!0,this.traverse(t=>{t instanceof bO&&t.object===e&&(t.matrixWorldNeedsUpdate=!0)})}onObjUpdateMatrix(){"toObject"!==this.parameters.type&&(this.matrixWorldNeedsUpdate=!0)}update(e){switch(this._updateCount(e),this.parameters.type){case"radial":this._updateRadial(this.parameters,e);break;case"linear":this._updateLinear(this.parameters,e);break;case"grid":this._updateGrid(this.parameters,e);break;case"toObject":this._updateToObject(this.parameters,e)}for(let e of this.children)e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD())}_updateCount(e,t){let i;if(void 0!==t)i=t;else{let t=ES(this.parameters.grid.count,e);i="grid"===this.parameters.type?Math.round(t[0])*Math.round(t[1])*Math.round(t[2]):this.parameters.count}if("toObject"===this.parameters.type)if(this.parameters.toObject.object){if(void 0===t&&"random"!==this.parameters.toObject.spreadType)return}else i=0;if("toObject"===this.parameters.type&&this.objectForSample){let e=this.children;if(e.length===i)return;if(e.length<i)for(let t=0,r=i-e.length;t<r;++t){let e=new bO(this.object);e.expand(),this.add(e)}else for(let t=0,r=e.length-i;t<r;++t)this.remove(e[t])}else{if(this.children.length===i)return;if(this.children.length<i)for(let e=0,t=i-this.children.length;e<t;++e){let e=new bO(this.object);e.expand(),this.add(e)}else for(let e=0,t=this.children.length-i;e<t;++e)this.remove(this.children[e])}}getRandom(e,t=!1){return(null===this.random||this.random.data.seed!==e.seed||this.random.is3D!==t)&&(this.random=new E_(e,t)),this.random}_updateRadial(e,t){let i=e.radial,r=i.start*t8.DEG2RAD,a=r-i.end*t8.DEG2RAD,o=ES(i.rotation,t),l=new rn(o[0],o[1],o[2]),h;switch(i.axis){case"z":h=new iD(0,0,1);break;case"y":h=new iD(0,1,0);break;default:h=new iD(1,0,0)}let c=e.randomnessObject??gQ.defaultData([1,1,1]).randomnessObject,d=this.getRandom(c),p=C$(c.strength,this.parameters.randomness);for(let[o,f]of this.children.entries()){let m=o*(c.freqScale/10)+c.movement,g=d.noise(m,m,m),v=o+1,y=ES(i.scale,t),x=ES(c.scale,t);f.scale.x=y[0]+p(v,C0(g,x[0]))||1e-4,f.scale.y=y[1]+p(v,C0(g,x[1]))||1e-4,f.scale.z
5422=y[2]+p(v,C0(g,x[2]))||1e-4,f.position.setScalar(0);let b=a/e.count*o-r;switch(i.axis){case"x":f.rotation.set(0,b,0);break;case"y":f.rotation.set(0,0,b);break;case"z":f.rotation.set(b,0,0)}f.translateOnAxis(h,i.radius);let w=ES(i.position,t),S=ES(c.position,t);f.position.x+=w[0]+p(v,C0(g,S[0])),f.position.y+=w[1]+p(v,C0(g,S[1])),f.position.z+=w[2]+p(v,C0(g,S[2]));let _=ES(c.rotation,t),A=p(v,C0(g,_[0])),M=p(v,C0(g,_[1])),C=p(v,C0(g,_[2]));!0===i.alignment?(f.rotation.x+=l.x+A,f.rotation.y+=l.y+M,f.rotation.z+=l.z+C):f.rotation.set(l.x+A,l.y+M,l.z+C)}}_updateLinear(e,t){if("linear"!==e.type)throw Error();let i=e.linear,r=ES(i.rotation,t),a=ES(i.scale,t),o=ES(i.position,t),l=new rn(r[0]??0,r[1]??0,r[2]??0),h=e.randomnessObject??gQ.defaultData([1,1,1]).randomnessObject,c=ES(h.rotation,t),d=ES(h.scale,t),p=ES(h.position,t),f=this.getRandom(h),m=C$(h.strength,this.parameters.randomness);for(let[e,t]of this.children.entries()){let i=e*(h.freqScale/10)+h.movement,r=f.noise(i,i,i),g=e+1,v=m(g,C0(r,c[0])),y=m(g,C0(r,c[1])),x=m(g,C0(r,c[2]));t.scale.x=1+(a[0]-1)*e+m(g,C0(r,d[0]))||1e-4,t.scale.y=1+(a[1]-1)*e+m(g,C0(r,d[1]))||1e-4,t.scale.z=1+(a[2]-1)*e+m(g,C0(r,d[2]))||1e-4,t.rotation.x=l.x*e+v,t.rotation.y=l.y*e+y,t.rotation.z=l.z*e+x,t.position.x=o[0]*e+m(g,C0(r,p[0])),t.position.y=o[1]*e+m(g,C0(r,p[1])),t.position.z=o[2]*e+m(g,C0(r,p[2]))}}_updateGrid(e,t){let i=0,r=e.grid,a=e.randomnessObject??gQ.defaultData([1,1,1]).randomnessObject,o=ES(a.scale,t),l=ES(a.rotation,t),h=ES(a.position,t),c=this.getRandom(a,!0),d=C$(a.strength,this.parameters.randomness),p=ES(r.count,t),f=ES(r.size,t);if(!0===r.useCenter){let e={x:p[0]%2==0?2:1,y:p[1]%2==0?2:1,z:p[2]%2==0?2:1},t=new iD(f[0]*(p[0]-e.x)*.5,f[1]*(p[1]-e.y)*.5,f[2]*(p[2]-e.z)*.5);for(let e=0;e<p[0];e++)for(let r=0;r<p[1];r++)for(let m=0;m<p[2];m++){let p=c.noise((e+1)*(a.freqScale/10)+a.movement,(r+1)*(a.freqScale/10)+a.movement,(m+1)*(a.freqScale/10)+a.movement),g=this.children[i++];if(!g)continue;g.scale.x=1+d(i,C0(p,o[0]))||1e-4,g.scale.y=1+d(i,C0(p,o[1]))||1e-4,g.scale.z=1+d(i,C0(p,o[2]))||1e-4;let v=d(i,C0(p,l[0])),y=d(i,C0(p,l[1])),x=d(i,C0(p,l[2]));g.rotation.set(v,y,x),g.position.x=f[0]*e-t.x+d(i,C0(p,h[0])),g.position.y=f[1]*r-t.y+d(i,C0(p,h[1])),g.position.z=f[2]*m-t.z+d(i,C0(p,h[2]))}}else for(let e=0;e<p[0];e++)for(let t=0;t<p[1];t++)for(let r=0;r<p[2];r++){let p=c.noise((e+1)*(a.freqScale/10)+a.movement,(t+1)*(a.freqScale/10)+a.movement,(r+1)*(a.freqScale/10)+a.movement),m=this.children[i++];if(!m)continue;m.scale.x=1+d(i,C0(p,o[0]))||1e-4,m.scale.y=1+d(i,C0(p,o[1]))||1e-4,m.scale.z=1+d(i,C0(p,o[2]))||1e-4;let g=d(i,C0(p,l[0])),v=d(i,C0(p,l[1])),y=d(i,C0(p,l[2]));m.rotation.set(g,v,y),m.position.x=f[0]*e+d(i,C0(p,h[0])),m.position.y=-f[1]*t+d(i,C0(p,h[1])),m.position.z=-f[2]*r+d(i,C0(p,h[2]))}}_updateToObject(e,t){if("toObject"!==e.type)throw Error();let{toObject:i}=e,r=ES(i.rotation,t),a=ES(i.position,t),o=ES(i.scale,t),l=new rn(r[0],r[1],r[2]),h=e.randomnessObject??gQ.defaultData([1,1,1]).randomnessObject,c=ES(h.rotation,t),d=ES(h.position,t),p=ES(h.scale,t),f=this.getRandom(h),m=C$(h.strength,this.parameters.randomness);if(!i.object){for(let[,e]of this.children.entries())e.position.set(0,0,0),e.scale.setScalar(1),e.rotation.set(0,0,0);this.objectForSample=void 0;return}if(!this.objectForSample)return;if(this.objectForSample instanceof Ed)if(this.objectForSample.font?.isLoaded&&void 0!==this.objectForSample.geometry.attributes.position)this._pendingMediaLoad=!1;else{this._pendingMediaLoad=!0;return}if(void 0===this.objectForSample.geometry&&this.objectForSample.isAncestorOf(this.object.uuid))return;let g=this.getSubdivData();if(g.length>0){let e=Math.round(g.length*i.count/100);this._updateCount(t,e)}else{let e=this.objectForSample.geometry.getAttribute("position");if(!e||isNaN(e.count)||0===e.count)return}this.objectForSample.updateMatrixWorld();let v=new bA(this.objectForSample).build(),y=CK[i.axis],x=this.children;for(let[e,t]of(v.setRandomGenerator((0,bp.default)(this.object.uuid+i.seed)),x.entries())){let r=e*(h.freqScale/10)+h.movement,x=f.noise(r,r,r),b=e+1,w=m(b,C0(x,c[0])),S=m(b,C0(x,c[1])),_=m(b,C0(x,c[2]));"random"===i.spreadType?v.sample(Ey,Ex):(g.length&&(Ey.fromArray(g[e].pos),Ex.fromArray(g[e].norm)),this.objectForSample instanceof CZ&&Ey.applyMatrix4(Ef.copy(this.objectForSample.matrixWorld).invert())),Ey.applyMatrix4(this.object.hiddenMatrix.clone().invert()),t.position.copy(Ey),Eg.fromArray(y);let A="normal"===i.align?Ex:this.object.getWorldDirection(Ew),M=Ev.fromArray(a);Ev.x+=m(b,C0(x,d[0])),Ev.y+=m(b,C0(x,d[1])),Ev.z+=m(b,C0(x,d[2]));let C=Math.acos(A.dot(Eg)),E=Eb.crossVectors(Eg,A).normalize(),T=Em.makeRotationAxis(E,C),P=A.clone().cross(this.object.up).normalize(),D=P.clone().cross(A).normalize(),O=new i6().makeBasis(P,A,D),I=new iD(Eg.y,Eg.z,Eg.x).normalize(),R=I.clone().cross(Eg).normalize(),L=new i6().makeBasis(I,Eg,R).invert(),B=new i6().multiplyMatrices(O,L);t.rotation.setFromRotationMatrix(B),M.applyMatrix4(T),t.position.add(M),t.rotation.x=t.rotation.x+l.x+w,t.rotation.y=t.rotation.y+l.y+S,t.rotation.z=t.rotation.z+l.z+_,t.scale.setScalar(1),t.scale.x=t.scale.x+o[0]+m(b,C0(x,p[0]))||1e-4,t.scale.y=t.scale.y+o[1]+m(b,C0(x,p[1]))||1e-4,t.scale.z
5422=t.scale.z+o[2]+m(b,C0(x,p[2]))||1e-4,t.scale.multiply(this.object.scale),t.hiddenMatrix=this.object.hiddenMatrix}}getSubdivData(){if(!this.objectForSample)return[];let e=this.parameters.toObject.spreadType,t=new Map,i=(e,i)=>{let r=Math.round(1e4*e[0])+"_"+Math.round(1e4*e[1])+"_"+Math.round(1e4*e[2]),a=t.get(r);a?(a.pos[0]+=e[0],a.pos[1]+=e[1],a.pos[2]+=e[2],a.norm[0]+=i[0],a.norm[1]+=i[1],a.norm[2]+=i[2],a.count+=1):t.set(r,{pos:[...e],norm:[...i],count:1})};if("random"===e)return[];if(this.objectForSample instanceof CZ){let t=this.objectForSample,r=CJ[e],a=Ec[r],o=El[r],l=Eh[r],h=a(t.subdivPointerNew);for(let e=0;e<=h-1;e++){let r=o(t.subdivPointerNew,e),a=l(t.subdivPointerNew,e);Eu.fromArray(r).applyMatrix4(t.matrixWorld),Ep.fromArray(a),i(Eu.toArray(),Ep.toArray())}}else(this.objectForSample.geometry.index?function(e){let t=[];for(let i=0;i<=e.index.count;i++)if(C8.fromArray(e.index.array,3*i),C6.setFromAttributeAndIndices(e.attributes.position,C8.x,C8.y,C8.z),C6.getNormal(C9),C6.getMidpoint(C7),!(isNaN(C7.x)||isNaN(C7.y)||isNaN(C7.z))){let{a:e,b:i,c:r}=C6,a=e.toArray(),o=i.toArray(),l=r.toArray(),h=e.distanceTo(i),c=i.distanceTo(r),d=r.distanceTo(e),p=C5(a,o),f=C5(o,l),m=C5(l,a),g=[h,c,d],v=Math.max(...g),y=g.filter(e=>Math.round(e)===Math.round(v)).length>1,x=[],b=C6.getMidpoint(C7).toArray();v!==h||y||(x=[f,m,m],b=p),v!==c||y||(x=[p,m,m],b=f),v!==d||y||(x=[p,f,f],b=m),y&&(x=[p,f,m]),t.push({vertices:[a,o,l],faceCenters:x,midpoint:b,norm:C6.getNormal(C9).toArray()})}return t}(this.objectForSample.geometry):function(e){let t=[],{position:i}=e.attributes;for(let e=0;e<i.count;e++){C6.setFromAttributeAndIndices(i,3*e,3*e+1,3*e+2),C6.getNormal(C9),C6.getMidpoint(C7);let r=C6.a.toArray(),a=C6.b.toArray(),o=C6.c.toArray();t.push({vertices:[r,a,o],faceCenters:[C5(r,a),C5(a,o),C5(o,r)],midpoint:C7.toArray(),norm:C9.toArray()})}return t}(this.objectForSample.geometry)).forEach((t,r)=>{"polygon_center"===e&&i(t.midpoint,t.norm),"vertex"===e&&(i(t.vertices[0],t.norm),i(t.vertices[1],t.norm),i(t.vertices[2],t.norm)),"edge"===e&&(i(t.faceCenters[0],t.norm),i(t.faceCenters[1],t.norm),i(t.faceCenters[2],t.norm))});let r=Array.from(t.values());for(let e of r)e.pos[0]/=e.count,e.pos[1]/=e.count,e.pos[2]/=e.count,e.norm[0]/=e.count,e.norm[1]/=e.count,e.norm[2]/=e.count;return r}updateState(e,t){if(this.parameters=uV(e),"toObject"!==this.parameters.type)(null===this.parent||this.parent!==this.object)&&(this.removeFromParent(),this.object.parent?.add(this),this.matrix=this.object.matrix,this.hiddenMatrix=this.object.hiddenMatrix,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1);else if(null===this.parent||this.parent.uuid!==this.parameters.toObject.object){this.removeFromParent();let e=t.scene.find(this.parameters.toObject.object);e instanceof _H?this.objectForSample=e:this.objectForSample=void 0,this.matrix=new i6,this.hiddenMatrix=new i6,this.matrixWorldNeedsUpdate=!0,this.matrixAutoUpdate=!1,e&&e.add(this)}this.update(t)}get pendingMediaLoad(){return this._pendingMediaLoad}},EM=e=>{var t;return(t=class extends e{}).geometryHelper=new st(30,30,30),t},EC=new i5,EE=new iK,ET=new i6,EP=(e,t,i,r,a=!1,o=e)=>{let l=o.matrixWorld;if(null===t.boundingSphere&&t.computeBoundingSphere(),EE.copy(t.boundingSphere),EE.applyMatrix4(l),!1===i.ray.intersectsSphere(EE)||(ET.copy(l).invert(),EC.copy(i.ray).applyMatrix4(ET),null!==t.boundingBox&&!1===EC.intersectsBox(t.boundingBox)))return;let h,c,d=t.index,p=t.attributes.position,f=t.drawRange,m;if(!1===a){let t=Math.max(0,f.start),a=Math.min(d.count,f.start+f.count);for(m=t;m<a;m+=3)if(c=d.getX(m),h=function(e,t,i,r,a,o,l){let h=new iD,c=new iD,d=new iD,p=new iD,f=new iD;if(h.fromBufferAttribute(r,a),c.fromBufferAttribute(r,o),d.fromBufferAttribute(r,l),null===i.intersectTriangle(h,c,d,!1,p))return null;f.copy(p),f.applyMatrix4(e.matrixWorld);let m=t.ray.origin.distanceTo(f);return m<t.near||m>t.far?null:{faceIndex:1,distance:m,point:f.clone(),object:e}}(e,i,EC,p,c,d.getX(m+1),d.getX(m+2))){h.faceIndex=Math.floor(m/3),r.push(h);return}}else{let a=t.attributes.position,l=new iD,h=new iD,c=new iD,d=new iD,p=1/((o.scale.x+o.scale.y+o.scale.z)/3),m=p*p,g=Math.max(0,f.start),v=Math.min(a.count,f.start+f.count);for(let t=g,p=v-1;t<p;t+=2){if(l.fromBufferAttribute(a,t),h.fromBufferAttribute(a,t+1),EC.distanceSqToSegment(l,h,d,c)>m)continue;d.applyMatrix4(o.matrixWorld);let p=i.ray.origin.distanceTo(d);p<i.near||p>i.far||r.push({distance:p,point:c.clone().applyMatrix4(o.matrixWorld),object:e})}}},ED=new iD,EO=new sl,EI=class extends n3{constructor(e){let t=new rQ,i=new nY({color:0xffffff,vertexColors:!0,toneMapped:!1}),r=[],a=[],o={},l=new iv(0xefbc22),h=new iv(0xefbc22),c=new iv(2857471);function d(e,t,i){p(e,i),p(t,i)}function p(e,t){r.push(0,0,0),a.push(t.r,t.g,t.b),void 0===o[e]&&(o[e]=[]),o[e].push(r.length/3-1)}d("n1","n2",l),d("n2","n4",l),d("n4","n3",l),d("n3","n1",l),d("f1","f2",l),d("f2","f4",l),d("f4","f3",l),d("f3","f1",l),d("n1","f1",l),d("n2","f2",l),d("n3","f3",l),d("n4","f4",l),d("p","n1",h),d("p","n2",h),d("p","n3",h),d("p","n4",h),d("u1","u2",c),d("u2","u3",c),d("u3","u1",c),t.setAttribute("position",new rV(r,3)),t.setAttribute("color",new rV(a,3)),super(t,i),this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=o,this.update()}update(){let e=this.geometry,t=this.pointMap;EO.projectionMatrixInverse.elements=[.5112609807824982,-0,-0,-0,-0,.41421356237309503,-0,-0,-0,-0,-0,-.099999,-0,-0,-1.0000000000000002,.100001];ER("n1",t,e,EO,-1,-1,.8),ER("n2",t,e,EO,1,-1,.8),ER("n3",t,e,EO,-1,1,.8),ER("n4",t,e,EO,1,1,.8),ER("f1",t,e,
5422EO,-1,-1,.8),ER("f2",t,e,EO,1,-1,.8),ER("f3",t,e,EO,-1,1,.8),ER("f4",t,e,EO,1,1,.8),ER("u1",t,e,EO,.35,1.1,.8),ER("u2",t,e,EO,-.35,1.1,.8),ER("u3",t,e,EO,0,1.55,.8),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function ER(e,t,i,r,a,o,l){ED.set(a,o,l).unproject(r);let h=t[e];if(void 0!==h){let e=i.getAttribute("position");for(let t=0,i=h.length;t<i;t++)e.setXYZ(h[t],ED.x,ED.y,ED.z)}}var EL=class extends EM(EI){constructor(e){super(e),this.object=e,this.object=e,this.name=`CombinedCameraHelper: ${e.uuid}`}updateMatrixWorld(e){super.updateMatrixWorld(e),this.updateTarget()}updateTarget(){let e=this.object.getTarget();this.updateWorldMatrix(!0,!1),this.worldToLocal(e)}raycast(e,t){EP(this.object,this.geometry,e,t,!0)}};(Di||(Di={})).is=e=>"objectHelper"in e;var EB=(e,t)=>class extends b$(e){constructor(){super(...arguments),this.objectHelper=new t(this),this.gizmos={}}get geometryHelper(){return t.geometryHelper}raycast(e,t){this.objectHelper.raycast(e,t)}showGizmos(){for(let e in this.gizmos){let t=this.gizmos[e];t instanceof l7&&(t.visible=!0)}}updateEntityBoxSize(e,t){this.objectHelper.visible&&this.geometryHelper instanceof st?(e.setScalar(0),t.set(this.geometryHelper.parameters.width,this.geometryHelper.parameters.height,this.geometryHelper.parameters.height).multiplyScalar(.5)):super.updateEntityBoxSize(e,t)}hideGizmos(){for(let e in this.gizmos){let t=this.gizmos[e];t instanceof l7&&(t.visible=!1)}}},Ez=new iD,EF=new iD,EN=new iP,EU=new iD,Ek=new iD,EV=new iD,Ej=class extends EB(sl,EL){constructor(e="",t={...xh.defaultData,name:""}){super(),this._cameraType="OrthographicCamera",this.targetOffset=gY.DefaultTargetOffset,this.isUpVectorFlipped=!1,this.angleOffsetFromUp=0,this.wasMovedByUser=!1,this.wasMovedBySwitchCameraAction=!1,this.super_Entity(e,t),this.previousProjectionMatrix=new i6,this.matrixAutoUpdate=!0,this.width=window.innerWidth,this.height=window.innerHeight;let i=this.width,r=this.height;this.orthoCamera=new sR(-.5*i,.5*i,.5*r,-.5*r,-5e4,1e4),this.perspCamera=new sh(45,i/r,50,1e4),this.left=this.orthoCamera.left,this.right=this.orthoCamera.right,this.top=this.orthoCamera.top,this.bottom=this.orthoCamera.bottom,this.far=this.orthoCamera.far,this.view=this.orthoCamera.view,this.aspect=this.perspCamera.aspect,this.focus=this.perspCamera.focus,this.filmGauge=this.perspCamera.filmGauge,this.filmOffset=this.perspCamera.filmOffset,this.objectHelper.update()}get isPerspectiveCamera(){return"PerspectiveCamera"===this.cameraType}get isOrthographicCamera(){return!this.isPerspectiveCamera}get cameraType(){return this._cameraType}set fov(e){this.perspCamera.fov=e}get fov(){return this.perspCamera.fov}setNear(e,t){"PerspectiveCamera"===e?this.perspCamera.near=t:this.orthoCamera.near=t}setZoom(e,t){t>=0&&("PerspectiveCamera"===e?this.perspCamera.zoom=t:this.orthoCamera.zoom=t)}set cameraType(e){"PerspectiveCamera"===e?this.toPerspective():"OrthographicCamera"===e&&this.toOrthographic()}get near(){return"PerspectiveCamera"===this._cameraType?this.perspCamera.near:this.orthoCamera.near}set near(e){"PerspectiveCamera"===this._cameraType?this.perspCamera.near=e:this.orthoCamera.near=e}get zoom(){return"PerspectiveCamera"===this._cameraType?this.perspCamera.zoom:this.orthoCamera.zoom}set zoom(e){e>=0&&("PerspectiveCamera"===this._cameraType?this.perspCamera.zoom=e:this.orthoCamera.zoom=e)}lookAt(e,t,i){"number"==typeof e&&(e=new iD(e,t,i)),super.lookAt(e),this.getWorldPosition(Ez),this.targetOffset=Ez.distanceTo(e)}getTarget(e=new iD){return this.getWorldDirection(EF),this.getWorldPosition(Ez),EF.multiplyScalar(this.targetOffset),e.copy(Ez).add(EF),e}getDistanceToTarget(){let e=this.getTarget();return this.getWorldPosition(Ez),Ez.distanceTo(e)}updateUp(){this.getWorldQuaternion(EN),EU.set(0,0,1).applyQuaternion(EN),Ek.copy(rw.DEFAULT_UP),this.isUpVectorFlipped&&Ek.negate(),Ek.applyQuaternion(EN),EV.copy(rw.DEFAULT_UP).projectOnPlane(EU),this.angleOffsetFromUp=EV.angleTo(Ek),this.angleOffsetFromUp*=EV.cross(Ek).dot(EU)>=0?1:-1}updateTransformState(e,t){let i=super.updateTransformState(e,t);return void 0!==e.isUpVectorFlipped&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateUp(),i}getViewFrontToObject(e){let t=e.getWorldPosition(new iD),i=e.getWorldDirection(new iD).multiplyScalar(this.targetOffset);return{position:t.clone().add(i),target:t}}getViewToTarget(e){let t=this.getWorldDirection(new iD).multiplyScalar(this.targetOffset);return{position:e.clone().sub(t),target:e}}getViewToObject(e){let t=new iD;return e.getWorldPosition(t),this.getViewToTarget(t)}setViewplaneSize(e,t,i=!1){if(this.aspect=e/t,i){let i=e>t?this.aspect:1,r=e>t?1:this.aspect;this.left=-395*i,this.right=395*i,this.top=1/r*395,this.bottom=-(1/r*395)}else this.left=-(.5*e),this.right=.5*e,this.top=.5*t,this.bottom=-(.5*t);this.updateProjectionMatrix()}copyViewPlaneSize(e){this.aspect=e.aspect,this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.updateProjectionMatrix()}toOrthographic(){this.orthoCamera.left=this.left,this.orthoCamera.right=this.right,this.orthoCamera.top=this.top,this.orthoCamera.bottom=this.bottom,this.orthoCamera.view=this.view,this.orthoCamera.far=this.far,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.projectionMatrixInverse=this.orthoCamera.projectionMatrixInverse,this._cameraType="Orthogra
5422phicCamera",this.objectHelper&&this.objectHelper.update()}toPerspective(){this.perspCamera.aspect=this.aspect,this.perspCamera.fov=this.fov,this.perspCamera.view=this.view,this.perspCamera.far=this.far,this.perspCamera.updateProjectionMatrix(),this.projectionMatrix=this.perspCamera.projectionMatrix,this.projectionMatrixInverse=this.perspCamera.projectionMatrixInverse,this._cameraType="PerspectiveCamera",this.objectHelper&&this.objectHelper.update()}setFocalLength(e){this.perspCamera.setFocalLength(e),this.toPerspective()}getFocalLength(){return this.perspCamera.getFocalLength()}getEffectiveFOV(){return this.perspCamera.getEffectiveFOV()}getFilmWidth(){return this.perspCamera.getFilmWidth()}getFilmHeight(){return this.perspCamera.getFilmHeight()}setViewOffset(e,t,i,r,a,o){"PerspectiveCamera"===this._cameraType?this.perspCamera.setViewOffset(e,t,i,r,a,o):this.orthoCamera.setViewOffset(e,t,i,r,a,o)}clearViewOffset(){"PerspectiveCamera"===this._cameraType?(this.perspCamera.clearViewOffset(),this.toPerspective()):(this.orthoCamera.clearViewOffset(),this.toOrthographic())}copyHistory(){this.previousProjectionMatrix&&this.previousProjectionMatrix.copy(this.projectionMatrix)}updateProjectionMatrix(){"PerspectiveCamera"===this._cameraType?this.toPerspective():"OrthographicCamera"===this._cameraType&&this.toOrthographic()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}copy(e,t){return super.copy(e,t),this.parent=e.parent,this.orthoCamera.copy(e.orthoCamera),this.perspCamera.copy(e.perspCamera),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.far=e.far,this.view=null===e.view?null:Object.assign({},e.view),this._cameraType=e._cameraType,this.aspect=e.aspect,this.fov=e.fov,this.focus=e.focus,this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this.targetOffset=e.targetOffset,this.updateProjectionMatrix(),this}toCameraState(e=[]){return pa({type:this.cameraType,far:this.far,orthographic:{near:this.orthoCamera.near,zoom:this.orthoCamera.zoom},perspective:{near:this.perspCamera.near,fov:this.perspCamera.fov,zoom:this.perspCamera.zoom},up:this.up.toArray(),targetOffset:this.targetOffset,isUpVectorFlipped:this.isUpVectorFlipped},e)}updateCameraSubtype(e,t){let i="perspective"===e?"PerspectiveCamera":"OrthographicCamera";void 0!==t.zoom&&this.setZoom(i,t.zoom),void 0!==t.near&&this.setNear(i,t.near),void 0!==t.fov&&"PerspectiveCamera"===i&&(this.fov=t.fov)}updateState(e,t){this.updateCameraState(e,t)}updateCameraState(e,t){this.updateState_Entity(e,t),void 0!==e.far&&(this.far=e.far),void 0!==e.orthographic&&this.updateCameraSubtype("orthographic",e.orthographic),void 0!==e.perspective&&this.updateCameraSubtype("perspective",e.perspective),void 0!==e.type&&(this.cameraType=e.type),void 0!==e.up&&this.up.fromArray(e.up.map(e=>"number"==typeof e?e:0)),void 0!==e.targetOffset&&(this.targetOffset=e.targetOffset),void 0!==e.isUpVectorFlipped&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateProjectionMatrix()}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),1===e.path.length&&0===e.type&&this.updateCameraSubtype(e.path[0],e.props)}toState(e){return{...super.toState(e),...this.toCameraState(e),type:this.cameraType}}},EG=new i6,EW=new i6;function EH(e){let t=!1;return e.scene.objects.traverse((e,i)=>{i.geometry?.type==="BooleanGeometry"&&(t=!0)}),t}var Eq=class extends CU{constructor(e,t,i){super(e,t),this.data=t,this.meshSetAddresses=[],this.needsTransformForDownstream=!1,this.geometry=new rQ,this.onAfterRender=(e,t,i,r,a,o)=>{super.onAfterRender(e,t,i,r,a,o),this.recomputeBoolean()},this.geometry.userData.parameters={width:0,height:0,depth:0}}get booleanOp(){return this.data.geometry.operation}get phongAngle(){return this.data.geometry.phongAngle??45}get isLOD(){return this.recomputeBoolean(),!1}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),1===e.path.length&&"geometry"===e.path[0]&&0===e.type&&void 0!==e.props.operation&&(this.freeBooleanPointer(),this.resetBBoxNeedsUpdate())}freeBooleanPointer(){super.freeBooleanPointer(),this.geometry.dispose()}recomputeBoolean(e,t=!0){if(-1!==this.booleanMeshSetAddress&&!e)return;for(let i=0;i<this.children.length;i++){let r=this.children[i];r instanceof Eq&&!0===r.dataPatched.visible&&r.recomputeBoolean(!0===e,t)}this.meshSetAddresses=[];for(let i=0;i<this.children.length;i++){let r=this.children[i];if(r instanceof _H&&!0===r.dataPatched.visible&&r.geometry.attributes.position?.count>0&&r.geometry.drawRange.count>0&&0!==r.booleanMeshSetAddress){EG.multiplyMatrices(r.hiddenMatrix,r.matrix).multiply(r.pivotMatrix);try{if(-1===r.booleanMeshSetAddress){if((r.geometry.index??r.geometry.getAttribute("position")).count/3<15e5&&(r.booleanMeshSetAddress=_C.getMeshSet(r.geometry,!0===e,t)),-1===r.booleanMeshSetAddress)return;_C.transformMeshSet(r.booleanMeshSetAddress,EG),r.booleanMatrixInvOld.copy(EG).invert(),r.booleanWasTransformed=!1}else r instanceof Eq&&!0===r.needsTransformForDownstream?(_C.transformMeshSet(r.booleanMeshSetAddress,EG),r.needsTransformForDownstream=!1):!0===r.booleanWasTransformed&&(_C.transformMeshSet(r.booleanMeshSetAddress,EW.multiplyMatrices(EG,r.booleanMatrixInvOld)),r.booleanMatrixInvOld.copy(EG).invert(),r.booleanWasTransformed=!1)}catch{r.booleanMeshSetAddress=0,r.geometry.userData.booleanOperationDidFail=!0;continue}!1===_C.hasOpenEdges(r.booleanMeshSetAddress)||i===this.children.length-1&&2===this.booleanOp?(this.meshSetAddresses.push(r.booleanMeshSetAddress),r.geometry.userData.booleanOperationDidFail=!1):r.geometry.userData.booleanOperationDidFail="openEdges"}}if(0===this.meshSetAddresses.length){this.geometry.setAttribute("position",new rV([],0)),this.geometry.setDrawRange(0,0);return}if(!0===e)return _C.calcBooleanTopological(this.meshSetAddresses,this.booleanOp);let i=this.geometry;i.dispose(),this.geometry=new rQ,this.geometry.userData=i.userData,this.geometry.boundingSphere=i.boundingSphere;try{this.booleanMeshSetAddress=_C.calcBoolean(this.meshSetAddresses,this.booleanOp,this.geometry,this.phongAngle)}catch{this.booleanMeshSetAddress=0,this.geometry.userData.booleanOperationDidFail=!0}
vendor: 16,384 bytes, lines 5422-5541
5422this.booleanMatrixInvOld.copy(this.matrix).invert(),this.needsTransformForDownstream=!0,Cq(this),CX(this)}dispose(){super.dispose(),this.geometry.dispose()}};(Dr||(Dr={})).is=function(e){return S7.is(e)&&e instanceof ld};var EX=(e,t)=>class extends EB(e,t){updateState_Light(e,t){this.updateState_Entity(e,t),void 0!==e.color&&(this.color=t.shared.color(e.color)),void 0!==e.intensity&&(this.intensity=e.intensity),void 0!==e.depth&&(this.shadow.camera.far=e.depth,this.shadow.needsUpdate=!0),void 0!==e.shadows&&(this.castShadow=e.shadows)}},EY=e=>e instanceof _H,EQ=e=>null!==e&&e instanceof Eq,EZ=e=>Di.is(e),EK=new iD(1,1,1),EJ=new iD,E$=new iD,E0=new iP,E1=class extends EM(he){constructor(e,t=15){super(t),this.object=e,this.dummy=new n_,this.object.updateMatrixWorld(),this.name=`EmptyObjectHelper: ${e.uuid}`,this.matrix=this.dummy.matrixWorld,this.matrixAutoUpdate=!1,this.object.isBone&&(this.visible=!1)}raycast(e,t){EP(this.object,E1.geometryHelper,e,t,!1,this.dummy)}update(){}updateMatrix(){}updateMatrixWorld(e){this.object.matrixWorld.decompose(EJ,E0,E$),this.matrix.compose(EJ,E0,EK),super.updateMatrixWorld(e)}updateWorldMatrix(e,t){}},E2=class extends EB(n_,E1){constructor(e,t){super(),this.super_Entity(e,t),this.objectHelper.update()}updateState(e,t){this.updateState_Entity(e,t),"buffer"in e&&1===Object.keys(e).length&&t.scene.reloadSplats()}},E3=class extends EB(n_,E1){constructor(e,t,i){super(),this.super_Entity(e,t),this.context=i,this.objectHelper.update()}updateState(e,t){this.updateState_Entity(e,t)}},E4="varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}",E5=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5423uniform mediump sampler2D inputBuffer; 5424#else 5425uniform lowp sampler2D inputBuffer; 5426#endif 5427uniform lowp sampler2D cocBuffer;uniform vec2 texelSize;uniform float scale;uniform vec4 kernel64[32];varying vec2 vUv;void main(){ 5428#ifdef FOREGROUND 5429vec2 CoCNearFar=texture2D(cocBuffer,vUv).rg;float CoC=CoCNearFar.r*scale; 5430#else 5431float CoC=texture2D(cocBuffer,vUv).g*scale; 5432#endif 5433if(CoC==0.0){gl_FragColor=texture2D(inputBuffer,vUv);}else{ 5434#ifdef FOREGROUND 5435vec2 step=texelSize*max(CoC,CoCNearFar.g*scale); 5436#else 5437vec2 step=texelSize*CoC; 5438#endif 5439vec4 acc=vec4(0.0);for(int i=0;i<32;++i){vec4 kernel=kernel64[i];vec2 uv=step*kernel.xy+vUv;acc+=texture2D(inputBuffer,uv);uv=step*kernel.zw+vUv;acc+=texture2D(inputBuffer,uv);}gl_FragColor=acc/64.0;}}`,E6=class extends so{constructor(e=!1,t=!1){super({name:"BokehMaterial",defines:{PASS:e?"2":"1"},uniforms:{kernel64:new lj(null),kernel16:new lj(null),inputBuffer:new lj(null),cocBuffer:new lj(null),texelSize:new lj(new t9),scale:new lj(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:E5,vertexShader:E4}),this.toneMapped=!1,t&&(this.defines.FOREGROUND="1"),this.generateKernel()}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set cocBuffer(e){this.uniforms.cocBuffer.value=e}setCoCBuffer(e){this.uniforms.cocBuffer.value=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(e){return this.uniforms.scale.value=e}setScale(e){this.uniforms.scale.value=e}generateKernel(){let e=new Float32Array(128),t=new Float32Array(32),i=0,r=0;for(let a=0;a<80;++a){let o=2.39996323*a,l=Math.sqrt(a)/Math.sqrt(80),h=l*Math.cos(o),c=l*Math.sin(o);a%5==0?(t[r++]=h,t[r++]=c):(e[i++]=h,e[i++]=c)}let a=[],o=[];for(let t=0;t<128;)a.push(new iA(e[t++],e[t++],e[t++],e[t++]));for(let e=0;e<32;)o.push(new iA(t[e++],t[e++],t[e++],t[e++]));this.uniforms.kernel64.value=a,this.uniforms.kernel16.value=o}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t)}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}};function E8(e,t,i){return Math.min(Math.max((e+t)/(t-i),0),1)}var E9=`#include <common> 5440#include <packing> 5441#ifdef GL_FRAGMENT_PRECISION_HIGH 5442uniform highp sampler2D depthBuffer; 5443#else 5444uniform mediump sampler2D depthBuffer; 5445#endif 5446uniform float focusDistance;uniform float focusRange;uniform float cameraNear;uniform float cameraFar;varying vec2 vUv;float readDepth(const in vec2 uv){ 5447#if DEPTH_PACKING == 3201 5448return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5449#else 5450return texture2D(depthBuffer,uv).r; 5451#endif 5452}void main(){float depth=readDepth(vUv); 5453#ifdef PERSPECTIVE_CAMERA 5454float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar);float linearDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar); 5455#else 5456float linearDepth=depth; 5457#endif 5458float signedDistance=linearDepth-focusDistance;float magnitude=smoothstep(0.0,focusRange,abs(signedDistance));gl_FragColor.rg=magnitude*vec2(step(signedDistance,0.0),step(0.0,signedDistance));}`,E7=class extends so{constructor(e){super({name:"CircleOfConfusionMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new lj(null),focusDistance:new lj(0),focusRange:new lj(0),cameraNear:new lj(.3),cameraFar:new lj(1e3)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:E9,vertexShader:E4}),this.toneMapped=!1,this.uniforms.focalLength=this.uniforms.focusRange,this.adoptCameraSettings(e)}get near(){return this.uniforms.cameraNear.value}get far(){return this.uniforms.cameraFar.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}get focusDistance(){return this.uniforms.focusDistance.value}set focusDistance(e){this.uniforms.focusDistance.value=e}get worldFocusDistance(){var e,t;return-(e=this.focusDistance,e*((t=this.near)-this.far)-t)}set worldFocusDistance(e){this.focusDistance=E8(-e,this.near,this.far)}getFocusDistance(e){this.uniforms.focusDistance.value=e}setFocusDistance(e){this.uniforms.focusDistance.value=e}get focalLength(){return this.focusRange}set focalLength(e){this.focusRange=e}get focusRange(){return this.uniforms.focusRange.value}set focusRange(e){this.uniforms.focusRange.value=e}get worldFocusRange(){var e,t;return-(e=this.focusRange,e*((t=this.near)-this.far)-t)}set worldFocusRange(e){this.focusRange=E8(-e,this.near,this.far)}getFocalLength(e){return this.focusRange}setFocalLength(e){this.focusRange=e}adoptCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof sh?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},Te=`#include <common> 5459#include <dithering_pars_fragment> 5460#ifdef FRAMEBUFFER_PRECISION_HIGH 5461uniform mediump sampler2D inputBuffer; 5462#else 5463uniform lowp sampler2D inputBuffer; 5464#endif 5465varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec4 sum=texture2D(inputBuffer,vUv0);sum+=texture2D(inputBuffer,vUv1);sum+=texture2D(inputBuffer,vUv2);sum+=texture2D(inputBuffer,vUv3);gl_FragColor=sum*0.25; 5466#include <encodings_fragment> 5467#include <dithering_fragment> 5468}`,Tt=class extends so{constructor(e=new t9){super({name:"KawaseBlurMaterial",uniforms:{inputBuffer:new lj(null),texelSize:new lj(new t9),halfTexelSize:new lj(new t9),kernel:new lj(0),scale:new lj(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Te,vertexShader:"uniform vec2 texelSize;uniform vec2 halfTexelSize;uniform float kernel;uniform float scale;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vec2 dUv=(texelSize*vec2(kernel)+halfTexelSize)*scale;vUv0=vec2(uv.x-dUv.x,uv.y+dUv.y);vUv1=vec2(uv.x+dUv.x,uv.y+dUv.y);vUv2=vec2(uv.x+dUv.x,uv.y-dUv.y);vUv3=vec2(uv.x-dUv.x,uv.y-dUv.y);gl_Position=vec4(position.xy,1.0,1.0);}"}),this.toneMapped=!1,this.setTexelSize(e.x,e.y)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.inputBuffer=e}get scale(){return this.uniforms.scale.value}set scale(e){this.uniforms.scale.value=e}getScale(){return this.uniforms.scale.value}setScale(e){this.uniforms.scale.value=e}getKernel(){return null}get kernel(){return this.uniforms.kernel.value}set kernel(e){this.uniforms.kernel.value=e}setKernel(e){this.kernel=e}setTexelSize(e,t){this.uniforms.texelSize.value.set(e,t),this.uniforms.halfTexelSize.value.set(e,t).multiplyScalar(.5)}setSize(e,t){let i=this.uniforms;i.texelSize.value.set(1/e,1/t),i.halfTexelSize.value.copy(i.texelSize.value).multiplyScalar(.5)}},Ti=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5469uniform mediump sampler2D inputBuffer; 5470#else 5471uniform lowp sampler2D inputBuffer; 5472#endif 5473uniform float opacity;varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);gl_FragColor=opacity*texel; 5474#include <encodings_fragment> 5475}`,Tr=class extends so{constructor(){super({name:"CopyMaterial",uniforms:{inputBuffer:new lj(null),opacity:new lj(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Ti,vertexShader:E4}),this.toneMapped=!1}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}getOpacity(e){return this.uniforms.opacity.value}setOpacity(e){this.uniforms.opacity.value=e}},Ts=`varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; 5476#if THREE_REVISION < 143 5477#define luminance(v) linearToRelativeLuminance(v) 5478#endif 5479#if EDGE_DETECTION_MODE != 0 5480varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; 5481#endif 5482#if EDGE_DETECTION_MODE == 1 5483#include <common> 5484#endif 5485#if EDGE_DETECTION_MODE == 0 || PREDICATION_MODE == 1 5486#ifdef GL_FRAGMENT_PRECISION_HIGH 5487uniform highp sampler2D depthBuffer; 5488#else 5489uniform mediump sampler2D depthBuffer; 5490#endif 5491float readDepth(const in vec2 uv){ 5492#if DEPTH_PACKING == 3201 5493return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5494#else 5495return texture2D(depthBuffer,uv).r; 5496#endif 5497}vec3 gatherNeighbors(){float p=readDepth(vUv);float pLeft=readDepth(vUv0);float pTop=readDepth(vUv1);return vec3(p,pLeft,pTop);} 5498#elif PREDICATION_MODE == 2 5499uniform sampler2D predicationBuffer;vec3 gatherNeighbors(){float p=texture2D(predicationBuffer,vUv).r;float pLeft=texture2D(predicationBuffer,vUv0).r;float pTop=texture2D(predicationBuffer,vUv1).r;return vec3(p,pLeft,pTop);} 5500#endif 5501#if PREDICATION_MODE != 0 5502vec2 calculatePredicatedThreshold(){vec3 neighbours=gatherNeighbors();vec2 delta=abs(neighbours.xx-neighbours.yz);vec2 edges=step(PREDICATION_THRESHOLD,delta);return PREDICATION_SCALE*EDGE_THRESHOLD*(1.0-PREDICATION_STRENGTH*edges);} 5503#endif 5504#if EDGE_DETECTION_MODE != 0 5505uniform sampler2D inputBuffer; 5506#endif 5507void main(){ 5508#if EDGE_DETECTION_MODE == 0 5509const vec2 threshold=vec2(DEPTH_THRESHOLD); 5510#elif PREDICATION_MODE != 0 5511vec2 threshold=calculatePredicatedThreshold(); 5512#else 5513const vec2 threshold=vec2(EDGE_THRESHOLD); 5514#endif 5515#if EDGE_DETECTION_MODE == 0 5516vec3 neighbors=gatherNeighbors();vec2 delta=abs(neighbors.xx-vec2(neighbors.y,neighbors.z));vec2 edges=step(threshold,delta);if(dot(edges,vec2(1.0))==0.0){discard;}gl_FragColor=vec4(edges,0.0,1.0); 5517#elif EDGE_DETECTION_MODE == 1 5518float l=luminance(texture2D(inputBuffer,vUv).rgb);float lLeft=luminance(texture2D(inputBuffer,vUv0).rgb);float lTop=luminance(texture2D(inputBuffer,vUv1).rgb);vec4 delta;delta.xy=abs(l-vec2(lLeft,lTop));vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}float lRight=luminance(texture2D(inputBuffer,vUv2).rgb);float lBottom=luminance(texture2D(inputBuffer,vUv3).rgb);delta.zw=abs(l-vec2(lRight,lBottom));vec2 maxDelta=max(delta.xy,delta.zw);float lLeftLeft=luminance(texture2D(inputBuffer,vUv4).rgb);float lTopTop=luminance(texture2D(inputBuffer,vUv5).rgb);delta.zw=abs(vec2(lLeft,lTop)-vec2(lLeftLeft,lTopTop));maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges.xy*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); 5519#elif EDGE_DETECTION_MODE == 2 5520vec4 delta;vec3 c=texture2D(inputBuffer,vUv).rgb;vec3 cLeft=texture2D(inputBuffer,vUv0).rgb;vec3 t=abs(c-cLeft);delta.x=max(max(t.r,t.g),t.b);vec3 cTop=texture2D(inputBuffer,vUv1).rgb;t=abs(c-cTop);delta.y=max(max(t.r,t.g),t.b);vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}vec3 cRight=texture2D(inputBuffer,vUv2).rgb;t=abs(c-cRight);delta.z=max(max(t.r,t.g),t.b);vec3 cBottom=texture2D(inputBuffer,vUv3).rgb;t=abs(c-cBottom);delta.w=max(max(t.r,t.g),t.b);vec2 maxDelta=max(delta.xy,delta.zw);vec3 cLeftLeft=texture2D(inputBuffer,vUv4).rgb;t=abs(c-cLeftLeft);delta.z=max(max(t.r,t.g),t.b);vec3 cTopTop=texture2D(inputBuffer,vUv5).rgb;t=abs(c-cTopTop);delta.w=max(max(t.r,t.g),t.b);maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); 5521#endif 5522}`,Ta=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; 5523#if EDGE_DETECTION_MODE != 0 5524varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; 5525#endif 5526void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,0.0);vUv1=vUv+texelSize*vec2(0.0,-1.0); 5527#if EDGE_DETECTION_MODE != 0 5528vUv2=vUv+texelSize*vec2(1.0,0.0);vUv3=vUv+texelSize*vec2(0.0,1.0);vUv4=vUv+texelSize*vec2(-2.0,0.0);vUv5=vUv+texelSize*vec2(0.0,-2.0); 5529#endif 5530gl_Position=vec4(position.xy,1.0,1.0);}`,Tn=class extends so{constructor(e=new t9,t=2){super({name:"EdgeDetectionMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,""),LOCAL_CONTRAST_ADAPTATION_FACTOR:"2.0",EDGE_THRESHOLD:"0.1",DEPTH_THRESHOLD:"0.01",PREDICATION_MODE:"0",PREDICATION_THRESHOLD:"0.01",PREDICATION_SCALE:"2.0",PREDICATION_STRENGTH:"1.0",DEPTH_PACKING:"0"},uniforms:{inputBuffer:new lj(null),depthBuffer:new lj(null),predicationBuffer:new lj(null),texelSize:new lj(e)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Ts,vertexShader:Ta}),this.toneMapped=!1,this.edgeDetectionMode=t}set depthBuffer(e){this.uniforms.depthBuffer.value=e}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}get edgeDetectionMode(){return Number(this.defines.EDGE_DETECTION_MODE)}set edgeDetectionMode(e){this.defines.EDGE_DETECTION_MODE=e.toFixed(0),this.needsUpdate=!0}getEdgeDetectionMode(){return this.edgeDetectionMode}setEdgeDetectionMode(e){this.edgeDetectionMode=e}get localContrastAdaptationFactor(){return Number(this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR)}set localContrastAdaptationFactor(e){this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR=e.toFixed("6"),this.needsUpdate=!0}getLocalContrastAdaptationFactor(){return this.localContrastAdaptationFactor}setLocalContrastAdaptationFactor(e){this.localContrastAdaptationFactor=e}get edgeDetectionThreshold(){return Number(this.defines.EDGE_THRESHOLD)}set edgeDetectionThreshold(e){this.defines.EDGE_THRESHOLD=e.toFixed("6"),this.defines.DEPTH_THRESHOLD=(.1*e).toFixed("6"),this.needsUpdate=!0}getEdgeDetectionThreshold(){return this.edgeDetectionThreshold}setEdgeDetectionThreshold(e){this.edgeDetectionThreshold=e}get predicationMode(){return Number(this.defines.PREDICATION_MODE)}set predicationMode(e){this.defines.PREDICATION_MODE=e.toFixed(0),this.needsUpdate=!0}getPredicationMode(){return this.predicationMode}setPredicationMode(e){this.predicationMode=e}set predicationBuffer(e){this.uniforms.predicationBuffer.value=e}setPredicationBuffer(e){this.uniforms.predicationBuffer.value=e}get predicationThreshold(){return Number(this.defines.PREDICATION_THRESHOLD)}set predicationThreshold(e){this.defines.PREDICATION_THRESHOLD=e.toFixed("6"),this.needsUpdate=!0}getPredicationThreshold(){return this.predicationThreshold}setPredicationThreshold(e){this.predicationThreshold=e}get predicationScale(){return Number(this.defines.PREDICATION_SCALE)}set predicationScale(e){this.defines.PREDICATION_SCALE=e.toFixed("6"),this.needsUpdate=!0}getPredicationScale(){return this.predicationScale}setPredicationScale(e){this.predicationScale=e}get predicationStrength(){return Number(this.defines.PREDICATION_STRENGTH)}set predicationStrength(e){this.defines.PREDICATION_STRENGTH=e.toFixed("6"),this.needsUpdate=!0}getPredicationStrength(){return this.predicationStrength}setPredicationStrength(e){this.predicationStrength=e}setSize(e,t){this.uniforms.texelSize.value.set(1/e,1/t)}},To=`#include <common> 5531#include <packing> 5532#include <dithering_pars_fragment> 5533#define packFloatToRGBA(v) packDepthToRGBA(v) 5534#define unpackRGBAToFloat(v) unpackRGBAToDepth(v) 5535#ifdef FRAMEBUFFER_PRECISION_HIGH 5536uniform mediump sampler2D inputBuffer; 5537#else 5538uniform lowp sampler2D inputBuffer; 5539#endif 5540#ifdef GL_FRAGMENT_PRECISION_HIGH 5541uniform highp sampler2D depthBuf
5541fer; 5542#else 5543uniform mediump sampler2D depthBuffer; 5544#endif 5545uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv; 5546#if THREE_REVISION < 143 5547#define luminance(v) linearToRelativeLuminance(v) 5548#endif 5549#if THREE_REVISION >= 137 5550vec4 sRGBToLinear(const in vec4 value){return vec4(mix(pow(value.rgb*0.9478672986+vec3(0.0521327014),vec3(2.4)),value.rgb*0.0773993808,vec3(lessThanEqual(value.rgb,vec3(0.04045)))),value.a);} 5551#endif 5552float readDepth(const in vec2 uv){ 5553#if DEPTH_PACKING == 3201 5554return unpackRGBAToDepth(texture2D(depthBuffer,uv)); 5555#else 5556return texture2D(depthBuffer,uv).r; 5557#endif 5558}float getViewZ(const in float depth){ 5559#ifdef PERSPECTIVE_CAMERA 5560return perspectiveDepthToViewZ(depth,cameraNear,cameraFar); 5561#else 5562return orthographicDepthToViewZ(depth,cameraNear,cameraFar); 5563#endif 5564}FRAGMENT_HEADvoid main(){FRAGMENT_MAIN_UVvec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);FRAGMENT_MAIN_IMAGEgl_FragColor=color0; 5565#ifdef ENCODE_OUTPUT 5566#include <encodings_fragment> 5567#endif 5568#include <dithering_fragment> 5569}`,Tl={FRAGMENT_HEAD:"FRAGMENT_HEAD",FRAGMENT_MAIN_UV:"FRAGMENT_MAIN_UV",FRAGMENT_MAIN_IMAGE:"FRAGMENT_MAIN_IMAGE",VERTEX_HEAD:"VERTEX_HEAD",VERTEX_MAIN_SUPPORT:"VERTEX_MAIN_SUPPORT"},Th=class extends so{constructor(e,t,i,r,a=!1){super({name:"EffectMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,""),DEPTH_PACKING:"0",ENCODE_OUTPUT:"1"},uniforms:{inputBuffer:new lj(null),depthBuffer:new lj(null),resolution:new lj(new t9),texelSize:new lj(new t9),cameraNear:new lj(.3),cameraFar:new lj(1e3),aspect:new lj(1),time:new lj(0)},blending:0,depthWrite:!1,depthTest:!1,dithering:a}),this.toneMapped=!1,e&&this.setShaderParts(e),t&&this.setDefines(t),i&&this.setUniforms(i),this.adoptCameraSettings(r)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(e){this.uniforms.depthBuffer.value=e}get depthPacking(){return Number(this.defines.DEPTH_PACKING)}set depthPacking(e){this.defines.DEPTH_PACKING=e.toFixed(0),this.needsUpdate=!0}setDepthBuffer(e,t=3200){this.depthBuffer=e,this.depthPacking=t}setShaderParts(e){return this.fragmentShader=To.replace(Tl.FRAGMENT_HEAD,e.get(Tl.FRAGMENT_HEAD)).replace(Tl.FRAGMENT_MAIN_UV,e.get(Tl.FRAGMENT_MAIN_UV)).replace(Tl.FRAGMENT_MAIN_IMAGE,e.get(Tl.FRAGMENT_MAIN_IMAGE)),this.vertexShader="uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;VERTEX_HEADvoid main(){vUv=position.xy*0.5+0.5;VERTEX_MAIN_SUPPORTgl_Position=vec4(position.xy,1.0,1.0);}".replace(Tl.VERTEX_HEAD,e.get(Tl.VERTEX_HEAD)).replace(Tl.VERTEX_MAIN_SUPPORT,e.get(Tl.VERTEX_MAIN_SUPPORT)),this.needsUpdate=!0,this}setDefines(e){for(let t of e.entries())this.defines[t[0]]=t[1];return this.needsUpdate=!0,this}setUniforms(e){for(let t of e.entries())this.uniforms[t[0]]=t[1];return this}setExtensions(e){for(let t of(this.extensions={},e))this.extensions[t]=!0;return this}get encodeOutput(){return void 0!==this.defines.ENCODE_OUTPUT}set encodeOutput(e){this.encodeOutput!==e&&(e?this.defines.ENCODE_OUTPUT="1":delete this.defines.ENCODE_OUTPUT,this.needsUpdate=!0)}isOutputEncodingEnabled(e){return this.encodeOutput}setOutputEncodingEnabled(e){this.encodeOutput=e}get time(){return this.uniforms.time.value}set time(e){this.uniforms.time.value=e}setDeltaTime(e){this.uniforms.time.value+=e}adoptCameraSettings(e){e&&(this.uniforms.cameraNear.value=e.near,this.uniforms.cameraFar.value=e.far,e instanceof sh?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(e,t){let i=this.uniforms;i.resolution.value.set(e,t),i.texelSize.value.set(1/e,1/t),i.aspect.value=e/t}static get Section(){return Tl}},Tc=`#include <common> 5570#if THREE_REVISION < 143 5571#define luminance(v) linearToRelativeLuminance(v) 5572#endif 5573#ifdef FRAMEBUFFER_PRECISION_HIGH 5574uniform mediump sampler2D inputBuffer; 5575#else 5576uniform lowp sampler2D inputBuffer; 5577#endif 5578#ifdef RANGE 5579uniform vec2 range; 5580#elif defined(THRESHOLD) 5581uniform float threshold;uniform float smoothing; 5582#endif 5583varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);float l=luminance(texel.rgb); 5584#ifdef RANGE 5585float low=step(range.x,l);float high=step(l,range.y);l*=low*high; 5586#elif defined(THRESHOLD) 5587l=smoothstep(threshold,threshold+smoothing,l); 5588#endif 5589#ifdef COLOR 5590gl_FragColor=vec4(texel.rgb*l,l); 5591#else 5592gl_FragColor=vec4(l); 5593#endif 5594}`,Td=class extends so{constructor(e=!1,t=null){super({name:"LuminanceMaterial",defines:{THREE_REVISION:"149".replace(/\D+/g,"")},uniforms:{inputBuffer:new lj(null),threshold:new lj(0),smoothing:new lj(1),range:new lj(null)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Tc,vertexShader:E4}),this.toneMapped=!1,this.colorOutput=e,this.luminanceRange=t}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get threshold(){return this.uniforms.threshold.value}set threshold(e){this.smoothing>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.threshold.value=e}getThreshold(){return this.threshold}setThreshold(e){this.threshold=e}get smoothing(){return this.uniforms.smoothing.value}set smoothing(e){this.threshold>0||e>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.smoothing.value=e}getSmoothingFactor(){return this.smoothing}setSmoothingFactor(e){this.smoothing=e}get useThreshold(){return this.threshold>0||this.smoothing>0}set useThreshold(e){}get colorOutput(){return void 0!==this.defines.COLOR}set colorOutput(e){e?this.defines.COLOR="1":delete this.defines.COLOR,this.needsUpdate=!0}isColorOutputEnabled(e){return this.colorOutput}setColorOutputEnabled(e){this.colorOutput=e}get useRange(){return null!==this.luminanceRange}set useRange(e){this.luminanceRange=null}get luminanceRange(){return this.uniforms.range.value}set luminanceRange(e){null!==e?this.defines.RANGE="1":delete this.defines.RANGE,this.uniforms.range.value=e,this.needsUpdate=!0}getLuminanceRange(){return this.luminanceRange}setLuminanceRange(e){this.luminanceRange=e}},Tu=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5595uniform mediump sampler2D inputBuffer; 5596#else 5597uniform lowp sampler2D inputBuffer; 5598#endif 5599#ifdef MASK_PRECISION_HIGH 5600uniform mediump sampler2D maskTexture; 5601#else 5602uniform lowp sampler2D maskTexture; 5603#endif 5604#if MASK_FUNCTION != 0 5605uniform float strength; 5606#endif 5607varying vec2 vUv;void main(){ 5608#if COLOR_CHANNEL == 0 5609float mask=texture2D(maskTexture,vUv).r; 5610#elif COLOR_CHANNEL == 1 5611float mask=texture2D(maskTexture,vUv).g; 5612#elif COLOR_CHANNEL == 2 5613float mask=texture2D(maskTexture,vUv).b; 5614#else 5615float mask=texture2D(maskTexture,vUv).a; 5616#endif 5617#if MASK_FUNCTION == 0 5618#ifdef INVERTED 5619mask=step(mask,0.0); 5620#else 5621mask=1.0-step(mask,0.0); 5622#endif 5623#else 5624mask=clamp(mask*strength,0.0,1.0); 5625#ifdef INVERTED 5626mask=1.0-mask; 5627#endif 5628#endif 5629#if MASK_FUNCTION == 2 5630gl_FragColor=vec4(mask*texture2D(inputBuffer,vUv).rgb,mask); 5631#else 5632gl_FragColor=mask*texture2D(inputBuffer,vUv); 5633#endif 5634}`,Tp=class extends so{constructor(e=null){super({name:"MaskMaterial",uniforms:{maskTexture:new lj(e),inputBuffer:new lj(null),strength:new lj(1)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Tu,vertexShader:E4}),this.toneMapped=!1,this.setColorChannel(0),this.setMaskFunction(0)}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}set maskTexture(e){this.uniforms.maskTexture.value=e,delete this.defines.MASK_PRECISION_HIGH,1009!==e.type&&(this.defines.MASK_PRECISION_HIGH="1"),this.needsUpdate=!0}setMaskTexture(e){this.maskTexture=e}set colorChannel(e){this.defines.COLOR_CHANNEL=e.toFixed(0),this.needsUpdate=!0}setColorChannel(e){this.colorChannel=e}set maskFunction(e){this.defines.MASK_FUNCTION=e.toFixed(0),this.needsUpdate=!0}setMaskFunction(e){this.maskFunction=e}get inverted(){return void 0!==this.defines.INVERTED}set inverted(e){this.inverted&&!e?delete this.defines.INVERTED:e&&(this.defines.INVERTED="1"),this.needsUpdate=!0}isInverted(){return this.inverted}setInverted(e){this.inverted=e}get strength(){return this.uniforms.strength.value}set strength(e){this.uniforms.strength.value=e}getStrength(){return this.strength}setStrength(e){this.strength=e}},Tf
vendor: 7,736 bytes, lines 5634-5659
5634=`#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + offset * texelSize) 5635#if __VERSION__ < 300 5636#define round(v) floor(v + 0.5) 5637#endif 5638#ifdef FRAMEBUFFER_PRECISION_HIGH 5639uniform mediump sampler2D inputBuffer; 5640#else 5641uniform lowp sampler2D inputBuffer; 5642#endif 5643uniform lowp sampler2D areaTexture;uniform lowp sampler2D searchTexture;uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}vec2 decodeDiagBilinearAccess(in vec2 e){e.r=e.r*abs(5.0*e.r-5.0*0.75);return round(e);}vec4 decodeDiagBilinearAccess(in vec4 e){e.rb=e.rb*abs(5.0*e.rb-5.0*0.75);return round(e);}vec2 searchDiag1(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 searchDiag2(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);coord.x+=0.25*texelSize.x;vec3 t=vec3(texelSize,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(coord.z<float(MAX_SEARCH_STEPS_DIAG_INT-1)&&coord.w>0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;e=decodeDiagBilinearAccess(e);coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 areaDiag(const in vec2 dist,const in vec2 e,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE_DIAG,AREATEX_MAX_DISTANCE_DIAG)*e+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.x+=0.5;texCoord.y+=AREATEX_SUBTEX_SIZE*offset;return texture2D(areaTexture,texCoord).rg;}vec2 calculateDiagWeights(const in vec2 texCoord,const in vec2 e,const in vec4 subsampleIndices){vec2 weights=vec2(0.0);vec4 d;vec2 end;if(e.r>0.0){d.xz=searchDiag1(texCoord,vec2(-1.0,1.0),end);d.x+=float(end.y>0.9);}else{d.xz=vec2(0.0);}d.yw=searchDiag1(texCoord,vec2(1.0,-1.0),end);if(d.x+d.y>2.0){vec4 coords=vec4(-d.x+0.25,d.x,d.y,-d.y-0.25)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.xy=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).rg;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).rg;c.yxwz=decodeDiagBilinearAccess(c.xyzw);vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.z);}d.xz=searchDiag2(texCoord,vec2(-1.0,-1.0),end);if(sampleLevelZeroOffset(inputBuffer,texCoord,vec2(1,0)).r>0.0){d.yw=searchDiag2(texCoord,vec2(1.0),end);d.y+=float(end.y>0.9);}else{d.yw=vec2(0.0);}if(d.x+d.y>2.0){vec4 coords=vec4(-d.x,-d.x,d.y,d.y)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.x=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).g;c.y=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(0,-1)).r;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).gr;vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.w).gr;}return weights;}float searchLength(const in vec2 e,const in float offset){vec2 scale=SEARCHTEX_SIZE*vec2(0.5,-1.0);vec2 bias=SEARCHTEX_SIZE*vec2(offset,1.0);scale+=vec2(-1.0,1.0);bias+=vec2(0.5,-0.5);scale*=1.0/SEARCHTEX_PACKED_SIZE;bias*=1.0/SEARCHTEX_PACKED_SIZE;return texture2D(searchTexture,scale*e+bias).r;}float searchXLeft(in vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x>end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(-2.0,0.0)*texelSize+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.0)+3.25;return texelSize.x*offset+texCoord.x;}float searchXRight(vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.x<end&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(2.0,0.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.5)+3.25;return-texelSize.x*offset+texCoord.x;}float searchYUp(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;++i){if(!(texCoord.y>end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=-vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.0)+3.25;return texelSize.y*offset+texCoord.y;}float searchYDown(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i<MAX_SEARCH_STEPS_INT;i++){if(!(texCoord.y<end&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.5)+3.25;return-texelSize.y*offset+texCoord.y;}vec2 area(const in vec2 dist,const in float e1,const in float e2,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE)*round(4.0*vec2(e1,e2))+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.y=AREATEX_SUBTEX_SIZE*offset+texCoord.y;return texture2D(areaTexture,texCoord).rg;}void detectHorizontalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ 5644#if !defined(DISABLE_CORNER_DETECTION) 5645vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,1)).r;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).r;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,-2)).r;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,-2)).r;weights*=clamp(factor,0.0,1.0); 5646#endif 5647}void detectVerticalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ 5648#if !defined(DISABLE_CORNER_DETECTION) 5649vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(1,0)).g;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).g;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(-2,0)).g;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(-2,1)).g;weights*=clamp(factor,0.0,1.0); 5650#endif 5651}void main(){vec4 weights=vec4(0.0);vec4 subsampleIndices=vec4(0.0);vec2 e=texture2D(inputBuffer,vUv).rg;if(e.g>0.0){ 5652#if !defined(DISABLE_DIAG_DETECTION) 5653weights.rg=calculateDiagWeights(vUv,e,subsampleIndices);if(weights.r==-weights.g){ 5654#endif 5655vec2 d;vec3 coords;coords.x=searchXLeft(vOffset[0].xy,vOffset[2].x);coords.y=vOffset[1].y;d.x=coords.x;float e1=texture2D(inputBuffer,coords.xy).r;coords.z=searchXRight(vOffset[0].zw,vOffset[2].y);d.y=coords.z;d=round(resolution.xx*d+-vPixCoord.xx);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.zy,vec2(1,0)).r;weights.rg=area(sqrtD,e1,e2,subsampleIndices.y);coords.y=vUv.y;detectHorizontalCornerPattern(weights.rg,coords.xyzy,d); 5656#if !defined(DISABLE_DIAG_DETECTION) 5657}else{e.r=0.0;} 5658#endif 5659}if(e.r>0.0){vec2 d;vec3 coords;coords.y=searchYUp(vOffset[1].xy,vOffset[2].z);coords.x=vOffset[0].x;d.x=coords.y;float e1=texture2D(inputBuffer,coords.xy).g;coords.z=searchYDown(vOffset[1].zw,vOffset[2].w);d.y=coords.z;d=round(resolution.yy*d-vPixCoord.yy);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.xz,vec2(0,1)).g;weights.ba=area(sqrtD,e1,e2,subsampleIndices.x);coords.x=vUv.x;detectVerticalCornerPattern(weights.ba,coords.xyxz,d);}gl_FragColor=weights;}`,
vendor: 4,345 bytes, line 5659
5659Tm=class extends so{constructor(e=new t9,t=new t9){super({name:"SMAAWeightsMaterial",defines:{MAX_SEARCH_STEPS_INT:"16",MAX_SEARCH_STEPS_FLOAT:"16.0",MAX_SEARCH_STEPS_DIAG_INT:"8",MAX_SEARCH_STEPS_DIAG_FLOAT:"8.0",CORNER_ROUNDING:"25",CORNER_ROUNDING_NORM:"0.25",AREATEX_MAX_DISTANCE:"16.0",AREATEX_MAX_DISTANCE_DIAG:"20.0",AREATEX_PIXEL_SIZE:"(1.0 / vec2(160.0, 560.0))",AREATEX_SUBTEX_SIZE:"(1.0 / 7.0)",SEARCHTEX_SIZE:"vec2(66.0, 33.0)",SEARCHTEX_PACKED_SIZE:"vec2(64.0, 16.0)"},uniforms:{inputBuffer:new lj(null),searchTexture:new lj(null),areaTexture:new lj(null),resolution:new lj(t),texelSize:new lj(e)},blending:0,depthWrite:!1,depthTest:!1,fragmentShader:Tf,vertexShader:"uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void main(){vUv=position.xy*0.5+0.5;vPixCoord=vUv*resolution;vOffset[0]=vUv.xyxy+texelSize.xyxy*vec4(-0.25,-0.125,1.25,-0.125);vOffset[1]=vUv.xyxy+texelSize.xyxy*vec4(-0.125,-0.25,-0.125,1.25);vOffset[2]=vec4(vOffset[0].xz,vOffset[1].yw)+vec4(-2.0,2.0,-2.0,2.0)*texelSize.xxyy*MAX_SEARCH_STEPS_FLOAT;gl_Position=vec4(position.xy,1.0,1.0);}"}),this.toneMapped=!1}set inputBuffer(e){this.uniforms.inputBuffer.value=e}setInputBuffer(e){this.uniforms.inputBuffer.value=e}get searchTexture(){return this.uniforms.searchTexture.value}set searchTexture(e){this.uniforms.searchTexture.value=e}get areaTexture(){return this.uniforms.areaTexture.value}set areaTexture(e){this.uniforms.areaTexture.value=e}setLookupTextures(e,t){this.searchTexture=e,this.areaTexture=t}get orthogonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_INT)}set orthogonalSearchSteps(e){let t=Math.min(Math.max(e,0),112);this.defines.MAX_SEARCH_STEPS_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setOrthogonalSearchSteps(e){this.orthogonalSearchSteps=e}get diagonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_DIAG_INT)}set diagonalSearchSteps(e){let t=Math.min(Math.max(e,0),20);this.defines.MAX_SEARCH_STEPS_DIAG_INT=t.toFixed("0"),this.defines.MAX_SEARCH_STEPS_DIAG_FLOAT=t.toFixed("1"),this.needsUpdate=!0}setDiagonalSearchSteps(e){this.diagonalSearchSteps=e}get diagonalDetection(){return void 0===this.defines.DISABLE_DIAG_DETECTION}set diagonalDetection(e){e?delete this.defines.DISABLE_DIAG_DETECTION:this.defines.DISABLE_DIAG_DETECTION="1",this.needsUpdate=!0}isDiagonalDetectionEnabled(){return this.diagonalDetection}setDiagonalDetectionEnabled(e){this.diagonalDetection=e}get cornerRounding(){return Number(this.defines.CORNER_ROUNDING)}set cornerRounding(e){let t=Math.min(Math.max(e,0),100);this.defines.CORNER_ROUNDING=t.toFixed("4"),this.defines.CORNER_ROUNDING_NORM=(t/100).toFixed("4"),this.needsUpdate=!0}setCornerRounding(e){this.cornerRounding=e}get cornerDetection(){return void 0===this.defines.DISABLE_CORNER_DETECTION}set cornerDetection(e){e?delete this.defines.DISABLE_CORNER_DETECTION:this.defines.DISABLE_CORNER_DETECTION="1",this.needsUpdate=!0}isCornerRoundingEnabled(){return this.cornerDetection}setCornerRoundingEnabled(e){this.cornerDetection=e}setSize(e,t){let i=this.uniforms;i.texelSize.value.set(1/e,1/t),i.resolution.value.set(e,t)}},Tg=new sl,Tv=null,Ty=class{constructor(e="Pass",t=new nI,i=Tg){this.name=e,this.renderer=null,this.scene=t,this.camera=i,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(e){if(this.rtt===e){let t=this.getFullscreenMaterial();null!==t&&(t.needsUpdate=!0),this.rtt=!e}}setRenderer(e){this.renderer=e}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e}get fullscreenMaterial(){return null!==this.screen?this.screen.material:null}set fullscreenMaterial(e){let t=this.screen;null!==t?t.material=e:((t=new r7(function(){if(null===Tv){let e=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),t=new Float32Array([0,0,2,0,0,2]);void 0!==(Tv=new rQ).setAttribute?(Tv.setAttribute("position",new rN(e,3)),Tv.setAttribute("uv",new rN(t,2))):(Tv.addAttribute("position",new rN(e,3)),Tv.addAttribute("uv",new rN(t,2)))}return Tv}(),e)).frustumCulled=!1,null===this.scene&&(this.scene=new nI),this.scene.add(t),this.screen=t)}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(e){this.fullscreenMaterial=e}getDepthTexture(){return null}
5659setDepthTexture(e,t=3200){}render(e,t,i,r,a){throw Error("Render method not implemented!")}setSize(e,t){}initialize(e,t,i){}dispose(){for(let e of Object.keys(this)){let t=this[e];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof nI||t===this.renderer)continue;this[e].dispose()}}}},Tx=class extends Ty{constructor(e,t=!0){super("CopyPass"),this.fullscreenMaterial=new Tr,this.needsSwap=!1,this.renderTarget=e,void 0===e&&(this.renderTarget=new iM(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="CopyPass.Target"),this.autoResize=t}get resize(){return this.autoResize}set resize(e){this.autoResize=e}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}setAutoResizeEnabled(e){this.autoResize=e}render(e,t,i,r,a){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){this.autoResize&&this.renderTarget.setSize(e,t)}initialize(e,t,i){void 0!==i&&(this.renderTarget.texture.type=i,1009!==i?this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1":3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001))}},Tb=class extends Ty{constructor(){super("ClearMaskPass",null,null),this.needsSwap=!1}render(e,t,i,r,a){let o=e.state.buffers.stencil;o.setLocked(!1),o.setTest(!1)}},Tw=new iv,TS=class extends Ty{constructor(e=!0,t=!0,i=!1){super("ClearPass",null,null),this.needsSwap=!1,this.color=e,this.depth=t,this.stencil=i,this.overrideClearColor=null,this.overrideClearAlpha=-1}setClearFlags(e,t,i){this.color=e,this.depth=t,this.stencil=i}getOverrideClearColor(){return this.overrideClearColor}setOverrideClearColor(e){this.overrideClearColor=e}getOverrideClearAlpha(){return this.overrideClearAlpha}setOverrideClearAlpha(e){this.overrideClearAlpha=e}render(e,t,i,r,a){let o=this.overrideClearColor,l=this.overrideClearAlpha,h=e.getClearAlpha(),c=null!==o,d=l>=0;c?(Tw.copy(e.getClearColor(Tw)),e.setClearColor(o,d?l:h)):d&&e.setClearAlpha(l),e.setRenderTarget(this.renderToScreen?null:t),e.clear(this.color,this.depth,this.stencil),c?e.setClearColor(Tw,h):d&&e.setClearAlpha(h)}},T_=class extends tX{constructor(e,t=-1,i=-1,r=1){super(),this.resizable=e,this.base=new t9(1,1),this.preferred=new t9(t,i),this.target=this.preferred,this.s=r}get width(){let{base:e,preferred:t,scale:i}=this;return -1!==t.width?t.width:-1!==t.height?Math.round(t.height*(e.width/Math.max(e.height,1))):Math.round(e.width*i)}set width(e){this.preferredWidth=e}get height(){let{base:e,preferred:t,scale:i}=this;return -1!==t.height?t.height:-1!==t.width?Math.round(t.width/Math.max(e.width/Math.max(e.height,1),1)):Math.round(e.height*i)}set height(e){this.preferredHeight=e}getWidth(){return this.width}getHeight(){return this.height}get scale(){return this.s}set scale(e){this.s!==e&&(this.s=e,this.preferred.setScalar(-1),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getScale(){return this.scale}setScale(e){this.scale=e}get baseWidth(){return this.base.width}set baseWidth(e){this.base.width!==e&&(this.base.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getBaseWidth(){return this.base.width}setBaseWidth(e){this.base.width!==e&&(this.base.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}get baseHeight(){return this.base.height}set baseHeight(e){this.base.height!==e&&(this.base.height=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getBaseHeight(){return this.baseHeight}setBaseHeight(e){this.baseHeight=e}setBaseSize(e,t){(this.base.width!==e||this.base.height!==t)&&(this.base.set(e,t),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}get preferredWidth(){return this.preferred.width}set preferredWidth(e){this.preferred.width!==e&&(this.preferred.width=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getPreferredWidth(){return this.preferredWidth}setPreferredWidth(e){this.preferredWidth=e}get preferredHeight(){return this.preferred.height}set preferredHeight(e){this.preferred.height!==e&&(this.preferred.height=e,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}getPreferredHeight(){return this.preferredHeight}setPreferredHeight(e){this.preferredHeight=e}setPreferredSize(e,t){(this.preferred.width!==e||this.preferred.height!==t)&&(this.preferred.set(e,t),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height))}copy(e){this.base.set(e.getBaseWidth(),e.getBaseHeight()),this.preferred.set(e.getPreferredWidth(),e.getPreferredHeight()),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.base.width,this.base.height)}static get AUTO_SIZE(){return -1}},TA=!1,TM=class{constructor(e=null){this.originalMaterials=new Map,this.material=null,this.materials=null,this.materialsBackSide=null,this.materialsDoubleSide=null,this.materialsFlatShaded=null,this.materialsFlatShadedBackSide=null,this.materialsFlatShadedDoubleSide=null,this.setMaterial(e),this.meshCount=0,this.replaceMaterial=e=>{if(e.isMesh){let t;if(e.material.flatShading)switch(e.material.side){case 2:t=this.materialsFlatShadedDoubleSide;break;case 1:t=this.materialsFlatShadedBackSide;break;default:t=this.materialsFlatShaded}else switch(e.material.side){case 2:t=this.materialsDoubleSide;break;case 1:t=this.materialsBackSide;break;default:t=this.materials}this.originalMaterials.set(e,e.material),e.isSkinnedMesh?e.material=t[2]:e.isInstancedMesh?e.material=t[1]:e.material=t[0],++this.meshCount}}}setMaterial(e){if(this.disposeMaterials(),this.material=e,null!==e){let t=this.materials=[e.clone(),e.clone(),e.clone()];for(let i of t)i.uniforms=Object.assign({},e.uniforms),i.side=0;t[2].skinning=!0,this.materialsBackSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.side=1,i}),this.materialsDoubleSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.side=2,i}),this.materialsFlatShaded=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i}),this.materialsFlatShadedBackSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i.side=1,i}),this.materialsFlatShadedDoubleSide=t.map(t=>{let i=t.clone();return i.uniforms=Object.assign({},e.uniforms),i.flatShading=!0,i.side=2,i})}}render(e,t,i){let r=e.shadowMap.enabled;if(e.shadowMap.enabled=!1,TA){let r=this.originalMaterials;for(let a of(this.meshCount=0,t.traverse(this.replaceMaterial),e.render(t,i),r))a[0].material=a[1];this.meshCount!==r.size&&r.clear()}else{let r=t.overrideMaterial;t.overrideMaterial=this.material,e.render(t,i),t.overrideMaterial=r}e.shadowMap.enabled=r}disposeMaterials(){if(null!==this.material)for(let e of this.materials.concat(this.materialsBackSide).concat(this.materialsDoubleSide).concat(this.materialsFlatShaded).concat(this.materialsFlatShadedBackSide).concat(this.materialsFlatShadedDoubleSide))e.dispose()}dispose(){this.originalMaterials.clear(),this.disposeMaterials()}static get workaroundEnabled(){return TA}static set workaroundEnabled(e){TA=e}},TC=class extends Ty{constructor(e,t,i=null){super("RenderPass",e,t),this.needsSwap=!1,this.clearPass=new TS,this.overrideMaterialManager=null===i?null:new TM(i),this.ignoreBackgroun
vendor: 5,069 bytes, line 5659
5659d=!1,this.skipShadowMapUpdate=!1,this.selection=null}get renderToScreen(){return super.renderToScreen}set renderToScreen(e){super.renderToScreen=e,this.clearPass.renderToScreen=e}get overrideMaterial(){let e=this.overrideMaterialManager;return null!==e?e.material:null}set overrideMaterial(e){let t=this.overrideMaterialManager;null!==e?null!==t?t.setMaterial(e):this.overrideMaterialManager=new TM(e):null!==t&&(t.dispose(),this.overrideMaterialManager=null)}getOverrideMaterial(){return this.overrideMaterial}setOverrideMaterial(e){this.overrideMaterial=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getSelection(){return this.selection}setSelection(e){this.selection=e}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(e){this.ignoreBackground=e}isShadowMapDisabled(){return this.skipShadowMapUpdate}setShadowMapDisabled(e){this.skipShadowMapUpdate=e}getClearPass(){return this.clearPass}render(e,t,i,r,a){let o=this.scene,l=this.camera,h=this.selection,c=l.layers.mask,d=o.background,p=e.shadowMap.autoUpdate,f=this.renderToScreen?null:t;null!==h&&l.layers.set(h.getLayer()),this.skipShadowMapUpdate&&(e.shadowMap.autoUpdate=!1),(this.ignoreBackground||null!==this.clearPass.overrideClearColor)&&(o.background=null),this.clearPass.enabled&&this.clearPass.render(e,t),e.setRenderTarget(f),null!==this.overrideMaterialManager?this.overrideMaterialManager.render(e,o,l):e.render(o,l),l.layers.mask=c,o.background=d,e.shadowMap.autoUpdate=p}},TE=class extends Ty{constructor(e,t,{resolutionScale:i=1,width:r=T_.AUTO_SIZE,height:a=T_.AUTO_SIZE,renderTarget:o}={}){super("DepthPass"),this.needsSwap=!1,this.renderPass=new TC(e,t,new nf({depthPacking:3201}));let l=this.renderPass;l.skipShadowMapUpdate=!0,l.ignoreBackground=!0;let h=l.getClearPass();h.overrideClearColor=new iv(0xffffff),h.overrideClearAlpha=1,this.renderTarget=o,void 0===this.renderTarget&&(this.renderTarget=new iM(1,1,{minFilter:1003,magFilter:1003,stencilBuffer:!1}),this.renderTarget.texture.name="DepthPass.Target");let c=this.resolution=new T_(this,r,a,i);c.addEventListener("change",e=>this.setSize(c.baseWidth,c.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,i,r,a){let o=this.renderToScreen?null:this.renderTarget;this.renderPass.render(e,o)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height)}};new Float32Array([255/256/0x1000000,255/256/65536,255/256/256,255/256]);var TT={SKIP:0,ADD:1,ALPHA:2,AVERAGE:3,COLOR_BURN:4,COLOR_DODGE:5,DARKEN:6,DIFFERENCE:7,EXCLUSION:8,LIGHTEN:9,MULTIPLY:10,DIVIDE:11,NEGATION:12,NORMAL:13,OVERLAY:14,REFLECT:15,SCREEN:16,SOFT_LIGHT:17,SUBTRACT:18},TP=new Map([[TT.SKIP,null],[TT.ADD,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x+y,1.0)*opacity+x*(1.0-opacity);}"],[TT.ALPHA,"vec3 blend(const in vec3 x,const in vec3 y,const in float opacity){return y*opacity+x*(1.0-opacity);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){float a=min(y.a,opacity);return vec4(blend(x.rgb,y.rgb,a),max(x.a,a));}"],[TT.AVERAGE,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y)*0.5*opacity+x*(1.0-opacity);}"],[TT.COLOR_BURN,"float blend(const in float x,const in float y){return(y==0.0)?y:max(1.0-(1.0-x)/y,0.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[TT.COLOR_DODGE,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[TT.DARKEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return min(x,y)*opacity+x*(1.0-opacity);}"],[TT.DIFFERENCE,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return abs(x-y)*opacity+x*(1.0-opacity);}"],[TT.EXCLUSION,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(x+y-2.0*x*y)*opacity+x*(1.0-opacity);}"],[TT.LIGHTEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x,y)*opacity+x*(1.0-opacity);}"],[TT.MULTIPLY,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return x*y*opacity+x*(1.0-opacity);}"],[TT.DIVIDE,"float blend(const in float x,const in float y){return(y>0.0)?min(x/y,1.0):1.0;}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[TT.NEGATION,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-abs(1.0-x-y))*opacity+x*(1.0-opacity);}"],[TT.NORMAL,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return y*
5659opacity+x*(1.0-opacity);}"],[TT.OVERLAY,"float blend(const in float x,const in float y){return(x<0.5)?(2.0*x*y):(1.0-2.0*(1.0-x)*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[TT.REFLECT,"float blend(const in float x,const in float y){return(y==1.0)?y:min(x*x/(1.0-y),1.0);}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[TT.SCREEN,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return(1.0-(1.0-x)*(1.0-y))*opacity+x*(1.0-opacity);}"],[TT.SOFT_LIGHT,"float blend(const in float x,const in float y){return(y<0.5)?(2.0*x*y+x*x*(1.0-2.0*y)):(sqrt(x)*(2.0*y-1.0)+2.0*x*(1.0-y));}vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=vec4(blend(x.r,y.r),blend(x.g,y.g),blend(x.b,y.b),blend(x.a,y.a));return z*opacity+x*(1.0-opacity);}"],[TT.SUBTRACT,"vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return max(x+y-1.0,0.0)*opacity+x*(1.0-opacity);}"]]),TD=class extends tX{constructor(e,t=1){super(),this.f=e,this.opacity=new lj(t)}getOpacity(){return this.opacity.value}setOpacity(e){this.opacity.value=e}get blendFunction(){return this.f}set blendFunction(e){this.f=e,this.dispatchEvent({type:"change"})}getBlendFunction(){return this.blendFunction}setBlendFunction(e){this.blendFunction=e}getShaderCode(){return TP.get(this.blendFunction)}},TO=class extends tX{constructor(e,t,{attributes:i=0,blendFunction:r=TT.SCREEN,defines:a=new Map,uniforms:o=new Map,extensions:l=null,vertexShader:h=null}={}){super(),this.name=e,this.renderer=null,this.attributes=i,this.fragmentShader=t,this.vertexShader=h,this.defines=a,this.uniforms=o,this.extensions=l,this.blendMode=new TD(r),this.blendMode.addEventListener("change",e=>this.setChanged())}getName(){return this.name}setRenderer(e){this.renderer=e}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(e){this.attributes=e,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(e){this.fragmentShader=e,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(e){this.vertexShader=e,this.setChanged()}setChanged(){this.dispatchEvent({type:"change"})}setDepthTexture(e,t=3200){}update(e,t,i){}setSize(e,t){}initialize(e,t,i){}dispose(){for(let e of Object.keys(this)){let t=this[e];if(null!==t&&"object"==typeof t&&"function"==typeof t.dispose){if(t instanceof nI||t===this.renderer)continue;this[e].dispose()}}}};function TI(e,t,i){for(let r of t){let t="$1"+e+r.charAt(0).toUpperCase()+r.slice(1),a=RegExp("([^\\.])(\\b"+r+"\\b)","g");for(let e of i.entries())null!==e[1]&&i.set(e[0],e[1].replace(a,t))}}var TR=class extends Ty{constructor(e,...t){super("EffectPass"),this.fullscreenMaterial=new Th(null,null,null,e),this.effects=t.sort((e,t)=>t.attributes-e.attributes),this.skipRendering=!1,this.uniformCount=0,this.varyingCount=0,this.minTime=1,this.maxTime=1/0}get encodeOutput(){return this.fullscreenMaterial.encodeOutput}set encodeOutput(e){this.fullscreenMaterial.encodeOutput=e}get dithering(){return this.fullscreenMaterial.dithering}set dithering(e){let t=this.fullscreenMaterial;t.dithering=e,t.needsUpdate=!0}verifyResources(){let e=this.renderer.capabilities,t=Math.min(e.maxFragmentUniforms,e.maxVertexUniforms);this.uniformCount,e.maxVaryings,this.varyingCount}updateMaterial(){let e=Th.Section,t=new Map([[e.FRAGMENT_HEAD,""],[e.FRAGMENT_MAIN_UV,""],[e.FRAGMENT_MAIN_IMAGE,""],[e.VERTEX_HEAD,""],[e.VERTEX_MAIN_SUPPORT,""]]),i=new Map,r=new Map,a=new Map,o=new Set,l=0,h=0,c=0,d=!1,p=!1;for(let e of this.effects)if(e.blendMode.blendFunction===TT.SKIP)c|=1&e.getAttributes();else if((c&e.getAttributes()&2)!=0);else{c|=e.getAttributes();let f=function(e,t,i,r,a,o,l){let h=new Map([["fragment",t.getFragmentShader()],["vertex",t.getVertexShader()]]),c=void 0!==h.get("fragment")&&/mainImage/.test(h.get("fragment")),d=void 0!==h.get("fragment")&&/mainUv/.test(h.get("fragment")),p=[],f=[],m=!1,g=!1;if(void 0===h.get("fragment"));else if(d&&(2&l)!=0);else if(c||d){let v=/(?:\w+\s+(\w+)\([\w\s,]*\)\s*{[^}]+}
vendor: 13,523 bytes, lines 5659-5679
5659)/g,y=Th.Section;if(d){let t=` ${e}MainUv(UV); 5660`;i.set(y.FRAGMENT_MAIN_UV,i.get(y.FRAGMENT_MAIN_UV)+t),m=!0}if(null!==h.get("vertex")&&/mainSupport/.test(h.get("vertex"))){let t=` ${e}MainSupport(`;t+=/mainSupport *\([\w\s]*?uv\s*?\)/.test(h.get("vertex"))?`vUv); 5661`:`); 5662`,i.set(y.VERTEX_MAIN_SUPPORT,i.get(y.VERTEX_MAIN_SUPPORT)+t),p=p.concat([...h.get("vertex").matchAll(/(?:varying\s+\w+\s+(\w*))/g)].map(e=>e[1])),f=f.concat(p).concat([...h.get("vertex").matchAll(v)].map(e=>e[1]))}f=(f=(f=f.concat([...h.get("fragment").matchAll(v)].map(e=>e[1]))).concat([...t.defines.keys()].map(e=>e.replace(/\([\w\s,]*\)/g,"")))).concat([...t.uniforms.keys()]),t.uniforms.forEach((t,i)=>o.set(e+i.charAt(0).toUpperCase()+i.slice(1),t)),t.defines.forEach((t,i)=>a.set(e+i.charAt(0).toUpperCase()+i.slice(1),t)),TI(e,f,a),TI(e,f,h);let x=t.blendMode;if(r.set(x.blendFunction,x),c){let t=`${e}MainImage(color0, UV, `;(1&l)!=0&&/MainImage *\([\w\s,]*?depth[\w\s,]*?\)/.test(h.get("fragment"))&&(t+="depth, ",g=!0),t+=`color1); 5663 `;let r=e+"BlendOpacity";o.set(r,x.opacity),t+=`color0 = blend${x.blendFunction}(color0, color1, ${r}); 5664 5665 `,i.set(y.FRAGMENT_MAIN_IMAGE,i.get(y.FRAGMENT_MAIN_IMAGE)+t),t=`uniform float ${r}; 5666 5667`,i.set(y.FRAGMENT_HEAD,i.get(y.FRAGMENT_HEAD)+t)}i.set(y.FRAGMENT_HEAD,i.get(y.FRAGMENT_HEAD)+h.get("fragment")+` 5668`),null!==h.get("vertex")&&i.set(y.VERTEX_HEAD,i.get(y.VERTEX_HEAD)+h.get("vertex")+` 5669`)}return{varyings:p,transformedUv:m,readDepth:g}}("e"+l++,e,t,i,r,a,c);if(h+=f.varyings.length,d=d||f.transformedUv,p=p||f.readDepth,null!==e.extensions)for(let t of e.extensions)o.add(t)}let f=/\bblend\b/g;for(let r of i.values()){let i=r.getShaderCode().replace(f,`blend${r.blendFunction}`);t.set(e.FRAGMENT_HEAD,t.get(e.FRAGMENT_HEAD)+i+` 5670`)}if((1&c)!=0){if(p){let i=`float depth = readDepth(UV); 5671 5672 `;t.set(e.FRAGMENT_MAIN_IMAGE,i+t.get(e.FRAGMENT_MAIN_IMAGE))}this.needsDepthTexture=null===this.getDepthTexture()}else this.needsDepthTexture=!1;if(d){let i=`vec2 transformedUv = vUv; 5673`;t.set(e.FRAGMENT_MAIN_UV,i+t.get(e.FRAGMENT_MAIN_UV)),r.set("UV","transformedUv")}else r.set("UV","vUv");t.forEach((e,t,i)=>i.set(t,e.trim().replace(/^#/,` 5674#`))),this.uniformCount=a.size,this.varyingCount=h,this.skipRendering=0===l,this.needsSwap=!this.skipRendering,this.fullscreenMaterial.setShaderParts(t).setExtensions(o).setUniforms(a).setDefines(r)}recompile(){this.updateMaterial(),this.verifyResources()}getDepthTexture(){return this.fullscreenMaterial.depthBuffer}setDepthTexture(e,t=3200){for(let i of(this.fullscreenMaterial.depthBuffer=e,this.fullscreenMaterial.depthPacking=t,this.effects))i.setDepthTexture(e,t)}render(e,t,i,r,a){for(let i of this.effects)i.update(e,t,r);if(!this.skipRendering||this.renderToScreen){let a=this.fullscreenMaterial;a.inputBuffer=t.texture,a.time+=r,e.setRenderTarget(this.renderToScreen?null:i),e.render(this.scene,this.camera)}}setSize(e,t){for(let i of(this.fullscreenMaterial.setSize(e,t),this.effects))i.setSize(e,t)}initialize(e,t,i){for(let r of(this.renderer=e,this.effects))r.initialize(e,t,i),r.addEventListener("change",e=>this.handleEvent(e));this.updateMaterial(),this.verifyResources(),void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}dispose(){for(let e of(super.dispose(),this.effects))e.dispose()}handleEvent(e){"change"===e.type&&this.recompile()}},TL=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],TB=class extends Ty{constructor({resolutionScale:e=.5,width:t=T_.AUTO_SIZE,height:i=T_.AUTO_SIZE,kernelSize:r=Tk.LARGE}={}){super("KawaseBlurPass"),this.renderTargetA=new iM(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTargetA.texture.name="Blur.Target.A",this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name="Blur.Target.B";let a=this.resolution=new T_(this,t,i,e);a.addEventListener("change",e=>this.setSize(a.baseWidth,a.baseHeight)),this.blurMaterial=new Tt,this.ditheredBlurMaterial=new Tt,this.ditheredBlurMaterial.uniforms.scale=this.blurMaterial.uniforms.scale,this.ditheredBlurMaterial.dithering=!0,this.dithering=!1,this.kernelSize=r}getResolution(){return this.resolution}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get scale(){return this.blurMaterial.scale}set scale(e){this.blurMaterial.scale=e}getScale(){return this.blurMaterial.scale}setScale(e){this.blurMaterial.scale=e}getKernelSize(){return this.kernelSize}setKernelSize(e){this.kernelSize=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}render(e,t,i,r,a){let o=this.scene,l=this.camera,h=this.renderTargetA,c=this.renderTargetB,d=TL[this.kernelSize],p=this.blurMaterial,f=t,m,g;for(this.fullscreenMaterial=p,m=0,g=d.length-1;m<g;++m){let t=(1&m)==0?h:c;p.kernel=d[m],p.inputBuffer=f.texture,e.setRenderTarget(t),e.render(o,l),f=t}this.dithering&&(p=this.ditheredBlurMaterial,this.fullscreenMaterial=p),p.kernel=d[m],p.inputBuffer=f.texture,e.setRenderTarget(this.renderToScreen?null:i),e.render(o,l)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t);let r=i.width,a=i.height;this.renderTargetA.setSize(r,a),this.renderTargetB.setSize(r,a),this.blurMaterial.setSize(r,a),this.ditheredBlurMaterial.setSize(r,a)}initialize(e,t,i){void 0!==i&&(this.renderTargetA.texture.type=i,this.renderTargetB.texture.type=i,1009!==i?(this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1",this.ditheredBlurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1"):3001===e.outputEncoding&&(this.renderTargetA.texture.encoding=3001,this.renderTargetB.texture.encoding=3001))}static get AUTO_SIZE(){return T_.AUTO_SIZE}},Tz=class extends Ty{constructor({width:e=T_.AUTO_SIZE,height:t=T_.AUTO_SIZE,renderTarget:i,luminanceRange:r,colorOutput:a}={}){super("LuminancePass"),this.fullscreenMaterial=new Td(a,r),this.needsSwap=!1,this.renderTarget=i,void 0===this.renderTarget&&(this.renderTarget=new iM(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="LuminancePass.Target",this.renderTarget.texture.generateMipmaps=!1);let o=this.resolution=new T_(this,e,t);o.addEventListener("change",e=>this.setSize(o.baseWidth,o.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}render(e,t,i,r,a){this.fullscreenMaterial.inputBuffer=t.texture,e.setRenderTarget(this.renderToScreen?null:this.renderTarget),e.render(this.scene,this.camera)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height)}initialize(e,t,i){void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},TF=class extends Ty{constructor(e,t){super("MaskPass",e,t),this.needsSwap=!1,this.clearPass=new TS(!1,!1,!0),this.inverse=!1}get inverted(){return this.inverse}set inverted(e){this.inverse=e}get clear(){return this.clearPass.enabled}set clear(e){this.clearPass.enabled=e}getClearPass(){return this.clearPass}isInverted(){return this.inverted}setInverted(e){this.inverted=e}render(e,t,i,r,a){let o=e.getContext(),l=e.state.buffers,h=this.scene,c=this.camera,d=this.clearPass,p=+!this.inverted;l.color.setMask(!1),l.depth.setMask(!1),l.color.setLocked(!0),l.depth.setLocked(!0),l.stencil.setTest(!0),l.stencil.setOp(o.REPLACE,o.REPLACE,o.REPLACE),l.stencil.setFunc(o.ALWAYS,p,0xffffffff),l.stencil.setClear(1-p),l.stencil.setLocked(!0),this.clearPass.enabled&&(this.renderToScreen?d.render(e,null):(d.render(e,t),d.render(e,i))),this.renderToScreen?e.setRenderTarget(null):(e.setRenderTarget(t),e.render(h,c),e.setRenderTarget(i)),e.render(h,c),l.color.setLocked(!1),l.depth.setLocked(!1),l.stencil.setLocked(!1),l.stencil.setFunc(o.EQUAL,1,0xffffffff),l.stencil.setOp(o.KEEP,o.KEEP,o.KEEP),l.stencil.setLocked(!0)}},TN=class extends Ty{constructor(e,t="inputBuffer"){super("ShaderPass"),this.fullscreenMaterial=e,this.inputBufferUniform=null,this.setInput(t)}setInput(e){if(this.inputBufferUniform=null,null!==this.fullscreenMaterial){let t=this.fullscreenMaterial.uniforms;void 0!==t&&void 0!==t[e]&&(this.inputBufferUniform=t[e])}}render(e,t,i,r,a){null!==this.inputBufferUniform&&null!==t&&(this.inputBufferUniform.value=t.texture),e.setRenderTarget(this.renderToScreen?null:i),e.render(this.scene,this.camera)}initialize(e,t,i){void 0!==i&&1009!==i&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},TU=class{constructor(){this.previousTime=0,this.currentTime=0,this.delta=0,this.fixedDelta=1e3/60,this.elapsed=0,this.timescale=1,this.fixedDeltaEnabled=!1,this.autoReset=!1}setFixedDeltaEnabled(e){return this.fixedDeltaEnabled=e,this}isAutoResetEnabled(e){return this.autoReset}setAutoResetEnabled(e){return"u">typeof document&&void 0!==document.hidden&&(e?document.addEventListener("visibilitychange",this):document.removeEventListener("visibilitychange",this),this.autoReset=e),this}getDelta(){return .001*this.delta}getFixedDelta(){return .001*this.fixedDelta}setFixedDelta(e){return this.fixedDelta=1e3*e,this}getElapsed(){return .001*this.elapsed}getTimescale(){return this.timescale}setTimescale(e){return this.timescale=e,this}update(e){return this.fixedDeltaEnabled?this.delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=void 0!==e?e:performance.now(),this.delta=this.currentTime-this.previousTime),this.delta*=this.timescale,this.elapsed+=this.delta,this}reset(){return this.delta=0,this.elapsed=0,this.currentTime=performance.now(),this}handleEvent(e){document.hidden||(this.currentTime=performance.now())}dispose(){this.setAutoResetEnabled(!1)}},Tk={MEDIUM:2,LARGE:3,HUGE:5},TV=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5675uniform mediump sampler2D map; 5676#else 5677uniform lowp sampler2D map; 5678#endif 5679uniform float intensity;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=clamp(texture2D(map,uv)*intensity,0.0,1.0);}`,Tj=class extends TO{constructor({blendFunction:e=TT.SCREEN,luminanceThreshold:t=.9,luminanceSmoothing:i=.025,resolutionScale:r=.5,intensity:a=1,width:o=T_.AUTO_SIZE,height:l=T_.AUTO_SIZE,kernelSize:h=Tk.LARGE}={}){super("BloomEffect",TV,{blendFunction:e,uniforms:new Map([["map",new lj(null)],["intensity",new lj(a)]])}),this.renderTarget=new iM(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="Bloom.Target",this.renderTarget.texture.generateMipmaps=!1,this.uniforms.get("map").value=this.renderTarget.texture,this.luminancePass=new Tz({renderTarget:this.renderTarget,colorOutput:!0}),this.luminanceMaterial.threshold=t,this.luminanceMaterial.smoothingFactor=i,this.blurPass=new TB({resolutionScale:r,width:o,height:l,kernelSize:h});let c=this.blurPass.getResolution();c.addEventListener("change",e=>this.setSize(c.baseWidth,c.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}get resolution(){return this.blurPass.resolution}getResolution(){return this.blurPass.resolution}getBlurPass(){return this.blurPass}getLuminancePass(){return this.luminancePass}get luminanceMaterial(){return this.luminancePass.fullscreenMaterial}getLuminanceMaterial(){return this.luminancePass.fullscreenMaterial}get width(){return this.resolution.width}set width(e){this.resolution.preferredWidth=e}get height(){return this.resolution.height}set height(e){this.resolution.preferredHeight=e}get dithering(){return this.blurPass.dithering}set dithering(e){this.blurPass.dithering=e}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(e){this.blurPass.kernelSize=e}get distinction(){return 1}set distinction(e){}get intensity(){return this.uniforms.get("intensity").value}set intensity(e){this.uniforms.get("intensity").value=e}getIntensity(){return this.intensity}setIntensity(e){this.intensity=e}getResolutionScale(){return this.resolution.scale}setResolutionScale(e){this.resolution.scale=e}update(e,t,i){let r=this.renderTarget;this.luminancePass.enabled?(this.luminancePass.render(e,t,r),this.blurPass.render(e,r,r)):this.blurPass.render(e,t,r)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t),this.renderTarget.setSize(i.width,i.height),this.luminancePass.resolution.copy(i)}initialize(e,t,i){this.blurPass.initialize(e,t,i),void 0!==i&&(this.renderTarget.texture.type=i,3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001))}},TG=class extends TO{constructor({blendFunction:e=TT.NORMAL,brightness:t=0,contrast:i=0}={}){super("BrightnessContrastEffect","uniform float brightness;uniform float contrast;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=inputColor.rgb+vec3(brightness-0.5);if(contrast>0.0){color/=vec3(1.0-contrast);}else{color*=vec3(1.0+contrast);}outputColor=vec4(min(color+vec3(0.5),1.0),inputColor.a);}",{blendFunction:e,uniforms:new Map([["brightness",new lj(t)],["contrast",new lj(i)]])})}get brightness(){return this.uniforms.get("brightness").value}set brightness(e){this.uniforms.get("brightness").value=e}getBrightness(e){return this.brightness}setBrightness(e){this.brightness=e}get contrast(){return this.uniforms.get("contrast").value}set contrast(e){this.uniforms.get("contrast").value=e}getContrast(e){return this.contrast}setContrast(e){this.contrast=e}},TW=class extends TO{constructor(e=TT.NORMAL){super("ColorAverageEffe
5679ct","void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=vec4(vec3(average(inputColor.rgb)),inputColor.a);}",{blendFunction:e})}},TH=class extends TO{constructor({blendFunction:e=TT.NORMAL,offset:t=new t9(.001,5e-4)}={}){super("ChromaticAberrationEffect","varying vec2 vUvR;varying vec2 vUvB;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 ra=texture2D(inputBuffer,vUvR).ra;vec2 ba=texture2D(inputBuffer,vUvB).ba;outputColor=vec4(ra.x,inputColor.g,ba.x,max(max(ra.y,ba.y),inputColor.a));}",{vertexShader:"uniform vec2 offset;varying vec2 vUvR;varying vec2 vUvB;void mainSupport(const in vec2 uv){vec2 shift=offset*vec2(1.0,aspect);vUvR=uv+shift;vUvB=uv-shift;}",blendFunction:e,attributes:2,uniforms:new Map([["offset",new lj(t)]])})}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}},Tq=`#ifdef FRAMEBUFFER_PRECISION_HIGH 5680uniform mediump sampler2D nearColorBuffer;uniform mediump sampler2D farColorBuffer; 5681#else 5682uniform lowp sampler2D nearColorBuffer;uniform lowp sampler2D farColorBuffer; 5683#endif 5684uniform lowp sampler2D nearCoCBuffer;uniform float scale;void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){vec4 colorNear=texture2D(nearColorBuffer,uv);vec4 colorFar=texture2D(farColorBuffer,uv);float CoCNear=texture2D(nearCoCBuffer,uv).r;CoCNear=min(CoCNear*scale,1.0);vec4 result=inputColor*(1.0-colorFar.a)+colorFar;result=mix(result,colorNear,CoCNear);outputColor=result;}`,TX=class extends TO{constructor(e,{blendFunction:t=TT.NORMAL,worldFocusDistance:i,worldFocusRange:r,focusDistance:a=0,focalLength:o=.1,focusRange:l=o,bokehScale:h=1,width:c=T_.AUTO_SIZE,height:d=T_.AUTO_SIZE}={}){super("DepthOfFieldEffect",Tq,{blendFunction:t,attributes:1,uniforms:new Map([["nearColorBuffer",new lj(null)],["farColorBuffer",new lj(null)],["nearCoCBuffer",new lj(null)],["scale",new lj(1)]])}),this.camera=e,this.renderTarget=new iM(1,1,{minFilter:1006,magFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="DoF.Intermediate",this.renderTarget.texture.generateMipmaps=!1,this.renderTargetMasked=this.renderTarget.clone(),this.renderTargetMasked.texture.name="DoF.Masked.Far",this.renderTargetNear=this.renderTarget.clone(),this.renderTargetNear.texture.name="DoF.Bokeh.Near",this.uniforms.get("nearColorBuffer").value=this.renderTargetNear.texture,this.renderTargetFar=this.renderTarget.clone(),this.renderTargetFar.texture.name="DoF.Bokeh.Far",this.uniforms.get("farColorBuffer").value=this.renderTargetFar.texture,this.renderTargetCoC=this.renderTarget.clone(),this.renderTargetCoC.texture.name="DoF.CoC",this.renderTargetCoCBlurred=this.renderTargetCoC.clone(),this.renderTargetCoCBlurred.texture.name="DoF.CoC.Blurred",this.uniforms.get("nearCoCBuffer").value=this.renderTargetCoCBlurred.texture,this.cocPass=new TN(new E7(e));let p=this.cocMaterial;p.focusDistance=a,p.focusRange=l,void 0!==i&&(p.worldFocusDistance=i),void 0!==r&&(p.worldFocusRange=r),this.blurPass=new TB({kernelSize:Tk.MEDIUM,width:c,height:d});let f=this.blurPass.getResolution();f.addEventListener("change",e=>this.setSize(f.getBaseWidth(),f.getBaseHeight())),this.maskPass=new TN(new Tp(this.renderTargetCoC.texture));let m=this.maskPass.fullscreenMaterial;m.maskFunction=1,m.colorChannel=1,this.bokehNearBasePass=new TN(new E6(!1,!0)),this.bokehNearBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehNearFillPass=new TN(new E6(!0,!0)),this.bokehNearFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehFarBasePass=new TN(new E6(!1,!1)),this.bokehFarBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.bokehFarFillPass=new TN(new E6(!0,!1)),this.bokehFarFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.target=null,this.bokehScale=h}get cocTexture(){return this.renderTargetCoC.texture}get cocMaterial(){return this.cocPass.fullscreenMaterial}get circleOfConfusionMaterial(){return this.cocMaterial}getCircleOfConfusionMaterial(){return this.circleOfConfusionMaterial}getBlurPass(){return this.blurPass}get resolution(){return this.blurPass.getResolution()}getResolution(){return this.blurPass.getResolution()}get bokehScale(){return this.uniforms.get("scale").value}set bokehScale(e){for(let t of[this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass])t.fullscreenMaterial.setScale(e);this.maskPass.fullscreenMaterial.setStrength(e),this.uniforms.get("scale").value=e}getBokehScale(){return this.bokehScale}setBokehScale(e){this.bokehScale=e}getTarget(){return this.target}setTarget(e){this.target=e}calculateFocusDistance(e){let t=this.camera;return E8(-t.position.distanceTo(e),t.near,t.far)}
5684setDepthTexture(e,t=3200){this.circleOfConfusionMaterial.depthBuffer=e,this.circleOfConfusionMaterial.depthPacking=t}update(e,t,i){let r=this.renderTarget,a=this.renderTargetCoC,o=this.renderTargetCoCBlurred,l=this.renderTargetMasked;if(null!==this.target){let e=this.calculateFocusDistance(this.target);this.circleOfConfusionMaterial.focusDistance=e}this.cocPass.render(e,null,a),this.blurPass.render(e,a,o),this.maskPass.render(e,t,l),this.bokehFarBasePass.render(e,l,r),this.bokehFarFillPass.render(e,r,this.renderTargetFar),this.bokehNearBasePass.render(e,t,r),this.bokehNearFillPass.render(e,r,this.renderTargetNear)}setSize(e,t){let i=this.resolution;i.setBaseSize(e,t);let r=i.width,a=i.height,o=[this.cocPass,this.blurPass,this.maskPass,this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass];o.push(this.renderTargetCoC,this.renderTargetMasked),o.forEach(i=>i.setSize(e,t)),(o=[this.renderTarget,this.renderTargetNear,this.renderTargetFar,this.renderTargetCoCBlurred]).forEach(e=>e.setSize(r,a)),[this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass].forEach(e=>e.fullscreenMaterial.setSize(r,a))}initialize(e,t,i){[this.cocPass,this.maskPass,this.bokehNearBasePass,this.bokehNearFillPass,this.bokehFarBasePass,this.bokehFarFillPass].forEach(r=>r.initialize(e,t,i)),this.blurPass.initialize(e,t,1009),void 0!==i&&(this.renderTarget.texture.type=i,this.renderTargetNear.texture.type=i,this.renderTargetFar.texture.type=i,this.renderTargetMasked.texture.type=i,3001===e.outputEncoding&&(this.renderTarget.texture.encoding=3001,this.renderTargetNear.texture.encoding=3001,this.renderTargetFar.texture.encoding=3001,this.renderTargetMasked.texture.encoding=3001))}};new iD,new i6;var TY=class extends TO{constructor({blendFunction:e=TT.NORMAL,hue:t=0,saturation:i=0}={}){super("HueSaturationEffect","uniform vec3 hue;uniform float saturation;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 color=vec3(dot(inputColor.rgb,hue.xyz),dot(inputColor.rgb,hue.zxy),dot(inputColor.rgb,hue.yzx));float average=(color.r+color.g+color.b)/3.0;vec3 diff=average-color;if(saturation>0.0){color+=diff*(1.0-1.0/(1.001-saturation));}else{color+=diff*-saturation;}outputColor=vec4(min(color,1.0),inputColor.a);}",{blendFunction:e,uniforms:new Map([["hue",new lj(new iD)],["saturation",new lj(i)]])}),this.hue=t}get saturation(){return this.uniforms.get("saturation").value}set saturation(e){this.uniforms.get("saturation").value=e}getSaturation(){return this.saturation}setSaturation(e){this.saturation=e}get hue(){return Math.acos((3*this.uniforms.get("hue").value.x-1)/2)}set hue(e){let t=Math.sin(e),i=Math.cos(e);this.uniforms.get("hue").value.set((2*i+1)/3,(-Math.sqrt(3)*t-i+1)/3,(Math.sqrt(3)*t-i+1)/3)}getHue(){return this.hue}setHue(e){this.hue=e}};new iv;var TQ=`void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 noise=vec3(rand(uv*time)); 5685#ifdef PREMULTIPLY 5686outputColor=vec4(min(inputColor.rgb*noise,vec3(1.0)),inputColor.a); 5687#else 5688outputColor=vec4(noise,inputColor.a); 5689#endif 5690}`,TZ=class extends TO{constructor({blendFunction:e=TT.SCREEN,premultiply:t=!1}={}){super("NoiseEffect",TQ,{blendFunction:e}),this.premultiply=t}get premultiply(){return this.defines.has("PREMULTIPLY")}set premultiply(e){this.premultiply!==e&&(e?this.defines.set("PREMULTIPLY","1"):this.defines.delete("PREMULTIPLY"),this.setChanged())}isPremultiplied(){return this.premultiply}setPremultiplied(e){this.premultiply=e}},TK=class extends TO{constructor(e=30){super("PixelationEffect","uniform bool active;uniform vec2 d;void mainUv(inout vec2 uv){if(active){uv=vec2(d.x*(floor(uv.x/d.x)+0.5),d.y*(floor(uv.y/d.y)+0.5));}}",{uniforms:new Map([["active",new lj(!1)],["d",new lj(new t9)]])}),this.resolution=new t9,this.d=0,this.granularity=e}get granularity(){return this.d}set granularity(e){let t=Math.floor(e);t%2>0&&(t+=1),this.d=t,this.uniforms.get("active").value=t>0,this.setSize(this.resolution.width,this.resolution.height)}getGranularity(){return this.granularity}setGranularity(e){this.granularity=e}setSize(e,t){this.resolution.set(e,t),this.uniforms.get("d").value.setScalar(this.d).divide(this.resolution)}};new iD,new iD;var TJ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAAeElEQVRYR+2XSwqAMAxEJ168ePEqwRSKhIIiuHjJqiU0gWE+1CQdApcVAMUAuARaMGCX1MIL/Ow13++9lW2s3mW9MWvsnWc/2fvGygwPAN4E8QzAA4CXAB6AHjG4JTHYI1ey3pcx6FHnEfhLDOIBKAmUBK6/ANUDTlROXAHd9EC1AAAAAElFTkSuQmCC",T$="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAYAAAABNmBHAAAgAElEQVR4Xuy9CbhlV1ktOvbpq09DkiIkUBI6kxASIH0DlAQiIK1wRfSJTx+i4JX7vKIigs8HXpXvqVcvrcC9agQ7IDTSSWgqCQQliDRBJKkkhDSkqVPNqVOnP+8b//rH3P+eZ+199tlznVTlvVrft7+1T7OaueZY42/m37QALKNk2wHg1pITlB17mC+Pp11W3X/LHyT32vhg48/5SOv+PnwpsHA70JoGlueB1iKApeqzvOzn44GatTB76Xzhd7suBR7+WWADgDEAwwCG/L54b/poDLrHuvvm70Z2Avhsc+PVcxscBU8F8C8ADg5+ipIjD/PlGwfgju8B924E5seARUfLsiNmqQW0IjL8+7L2NYD/7COBzfcCm+aB8SVgdAkYIRCXKyDax4EdAanL5PuNPllNvXDlAHwFgP8AcC2AhRIoDXbsYb48dl5WkVFTE3LGDcC9m4CZCWBuFFgeAZaGAYJQQCRqDHT+McJrVb8zwATUXH02MHYfMHEIGFsAxgjApQqACYQORjtd/B7Axt/z79sC0+cMPgjjlwPwVwHcA+
5690DfAHzTxcVgWBroqMN8+cYBeM71wH0TwKExYHYUWCIAHYRLTlkCYgcIBcAgU/n3qy8GRu4HRgnAOWBkERhddPAJhGJDBxkvw7cqimr+zFM/ZLnZF64cgL8BYD+AWwB8x/dlWuWagHiYL984AJ/0RWBy1AE4AizyM1yxYAcTigW55xMbAkxEiwEdkJ/ZCQxPAiOHgBECcKEC4TBZcKkSv+mTieNcNPNC26mLNsj45QD8LQDTAO4GcJt/7iw2bfoG4WG+vAGwm9ExiEg69zpg/wgwPQLMjgALzn4E4aIzoJjQ9g4024uygkj+pyuAoX0VAIfngOH5NgCHMhAm8Sv2y3XDZeBhNIp8OzJE8OsBzAKYBHAXgDt8/4O+MVT0j4f58o0D8Pxrgf3DwMwIMEPQEYRkNwfgsuuDZLskip0No0gWMD/9HGDoADAkAC4Aw/wsAgZAgs2Z0ABI0GU6IVmKv+f28KDnHxkA/G0A8y6G73N9kOCjXnh/Ebb6OvgwX75xAF5wLTA1VIHPADgMLDj4yIA5AAm6aCUnv4oz46eeDwxNAUMzwJAz4BABSNDFTwSfg7DDKHE23MG5PqIY8A1u/dINs9dBdy8AgnGPM2NfUBrsnw7z5RsH4IXXAAcJviFgluAbygBINnSLWOAjGxJ4pgOKDV0v/OSLKp8iGXBovhLBBOCQM2ACoTOhnYrAdItYbCij5JFzRyIAqRccAnDAQUjg6UNQ7hsMXP0cRQAexss3DsCLCECCLwCQzMcPwUi2MwAScAKbfnY/YRLFQ8DHX+IAJAMSfDkAF13kLvleIjhjQQHxUVS3jjgGpKeeNzYVQEjgUS8k+PghONdhIwAP4+XXBYCHKIJbwJyDTgaIAdCBJx3Q2M8tYAHP9m4df/ylQOsQ0JqtRLCx30K1wtLBggScQOgsKBGcWHAJeOwRC0BSM1mQIKRbhh+Bj98JQP6t4U0APEyXXxcAEnxkQAFwoVUxID9kvQg+c1C7vidRbIDkc24B//hTQGumDcCWA5DgMxASdNIFBUI5pCML8v8API5zfEQx4BudgqiczviSnJhQwCP4BMCGl+wO8+U7AJi/W4O4YS6+pmK/2ciADsAOBhTIIiAJnPB7AvNjP+0AnANaYkAHX2JBAc+tYaJXOqBZv24Vc386XW5dtkHGW+4HFAJonpOe+YYQZAShgKjv3PNvPQaxVoI8zJdfFwASfPzMUwS3Kt1v0UFIlos6oDFdAGFcliMAP/ryAEAGNwQRnDOgLbdlIEwrIs6AZ/QgkMMHQF6ZAKQcJAsSYPwIeAIk9wJgoPK1gi7+PwF4GC/fOAAvIQPSs0URTPBJ/Pp3GSEGRHfBCIQ0xowBtUbcAj7ys5X4Jfu1HIAGQrIgQRXEsAFQIORDFhiDY/rMHmrU4QUgR08AkgUjCAW6CD6CkwBsAIQC4GG6fPMA3OXiNzCg2I9gNCMksmAAoemDzoimFwL48M85AKkiuQVMAAp8CYRRDAt8GQiJ67N6GJODAXAHlsGguscA2AJg1IPGYmxOpBxFWkRN9LsATgIwXnNs/v/5z/9XCf8BO3YAtxbc/46/KDt+5+ea1Yku2VUxHz/z0v24FwMGK1gWsK2OUUxHHdCBeRUB6OxHABr4ZICIBd0QWSF+XRdMTAjgCdTrG9cBNwE4F8CpDkICyYLGsuhFt6zs+gISwUen8zEAjgMw4cfx2H6O/90yAFo84Cbg4ID3/9TfLTt+5+ebnRABkODjx0SwPi5ec/FrYpmqSAxM8Dn60CsqAFI6GfhqAMiDE/gokmvEr0C4PgDkBQm40wE8zMFEUDKEVoxIMLl/KS73mE7H9d+vcKHQQcjwW0Yu9nP8m8sAmOIBuWY6wP2/4s0ezjjg8TuvaR6ABJ70vxUApGrm7EbGE+i472BAB+WHfqHS/eoAaEwY2E9+wLSXTqhI7CXgnB6LCoOJ4BiST+hTnG0HcCwAglCx3ARoZEVFXnBPp/O/A/hXACc7CPs9/i1lAOyIB+RDX+P9/+pbQjjjAMfv/PL6AFDs1wFAgs/9fgKfgdE/ZEpuiQlbwAde6QAMBgiRmsSwA9BY0JfjovGRDBMH4TlcXGhcBOc6HkF0gjPhZgchxTLZMAci/04W/B6Ab3t09EPXcPyflgFwRTwgJ2MN9/8bf5qFM67x+B/aW4XQz42FeL0YrRyikztUFw0704mf9kXgxhOAqc3AAsPyRxxQCs/PdXOFY0W1KHy3QIUGtx+6vdnx1vsB+dsTncm2AogglFgVEAlUWrOMB2RyEmMCGQ/Y7/HvKns6tfGAnJQ+r/9b76oJZ1zD8WdyQjYBh8aBhVEHjELouQ8ukQ7VRSCJAALwkr+sALhnGzDD3JAJYJHg9uhoi4bx8ytkWUtvHT/7+Zc4dw1uZ3612fH2dkQf7yxIEEockwkJQn4IQoq8unhAhmPRKKFx0uv4K8ueTs94wD7u//VX9ghn7OP4c+4G7h8HpseB+dF2AKlFLwuAIZ8jD6NPrOhAffmfA9/ZBuzZCkyRWSeqBCWyoYGQ5yQrBpDbum/ME1HoPo0XEkSD2zlfbna8q6+EUJcTCxKEtHL5EQjP6BEPyIgYAZBvYt3xHyx7OqvGA65y/7/9wVXCGVc5/sl7qxD66dEqiYgRzAqhN1A4CBNAAlDyAFI+iZ9/N3DLJuC+jcDUBmCWyUnOrmTYCMIOkNclLg0B8/RsNLg9+UvNjnd1APLmmQpFHyEBROuWACQT8nN+H/GAvY7/VNnT6SsesMf13/CpahGnZzhjj+PPmwX2MYdDIfQexWyBAwEUOQDrRDN/98p3A7dvAO6fAA5sqHJDBEAyoUVGkwEd6HR12XU4kwzfl6fCXTZzjy57vvnR513X7Hj7AyDvggAUi9EyFgiZqNxPQF6345nOWbD1HQ/Y5fpvuLa/2+82/vNHgAPDFQDnhoF5j2C2qBWCI8bw1eRw5CL5l94L3DEOTI4DB8Y9OWmsEu/zBJ3rgsaybqBob/7A4C7jtWcooRrczr+u2fH2D0AOQgAUCxKEP7aGgLy64+m6KdjWFA9Yc/03/Osa4glrjr+AupqHz1sEs0cxG0BC9HIePLoit9eNkVf9L+DuUWByDJgaq4ybGYLPAWgiXmLedUE7dwC7saL7CqfPKXi4NYdaykCD410bAHlDEsNiwZ9wAPYbkJcfz6T2gm3N8YDZ9d/wHxUA+739fPwXPrSKYGb+BuP3jAFDElFH9HIWwbzCIGkBr/or4J4RYO8oMOW6ZVcAuvi1Cgoha04BCwT5gfMKHm7NoRde2+x41w5A3hQZkADk5+cGiAeMx3+/7AENFA8Yrv/G71cAXFM4Yzj+otOAaQLQA0gZxaIIZtMDFTigKJV8H9Iq6aZ59ZXAvSPAvpEKgBTtBODcSCWCZeRYtpzrmLyeGNCAyFl1v+Hei8qeb370Rdc2O97BAMi7EgB/2QG41nhAHU9LuWAbOB7Qr//GPRUA13r7Gv9FZwIMoVcEswEwfDoimEP0shKKtIphaZQAXv1+YM+wA3DEdcvRKkGJADQQEsQuhi1Tjt95vBsh5nx2IO59SsHDrTmUOStNjndwAAqEry0IyCMICkOyiuIBNwBvPFQQT7gBuPjc9oRYAIHyOEL4vIFEYVNaOou5vCGE/tV/A0wOVcnpzI47NOri3QFIBpSeaSDUdYLOSWvYImSGgftpJDa4MWJbAGxivGUA5MAOc0Be6eVLj7/4Mk+hzCOYPYpZDBiNkLh+G/M3yFyv/ltgL3W3YQfgcFUhgRY2PwY+Z7/EhAR1SFyXCOb57r28QfQBsJQBMn5D4y0HYLPje9Cd7RIC0PM3EiMofF4gVCBp1P840ix/gyz56r+vAMjk9Gl375iB4+CzveuZdLkkEPJ8ZEfX/6R73vOjzT5Si9hucLxHAVg4PwJgRwh9CKOXK8YA4ZEqKZXSQWh5P+5AftXfA/uGKvYjCKn72cctbFrZNECka5L5CPwIPtMH3TVz17MLB5gdLgA2Nd6jACycHwLQxFEUSR5ASvARDB0h9AQb9bXIgCGk6lUfAPYTgEPAITKgg1BObk58srTJgG58WMkWMaAbQQT1nc8rHGANAJsc71EAFs4PAagQestgC1lsBJ4BMCSOK6dDUcwqqaFiQr/0QeAAAdjy+jBiQQeeMSBZT3nCPUDIa9z+/MIB1gCwyfEeBWDh/BCAeQSzgkjFfGLBBD5nxQ4DxN0wv3hVxX5TBGDwL5obxvVA5YqYL5BeMLd66YYxJpRB0gK+96LCAdYAsMnxHgVg4fwIgMrhUPKQ2C+Bz0PmBTqBMQehAbDlIjj4F80KJguSVZ0FuXpjoCOgXawLjALhbT9eOMAuAGxqvEcBWDg/l1IE05Ed0ygZnyHdz0VwCqEPIfNyx0QQvvLDFQCp+8nfZk5und8tXwIgWcHSNX0N2CJmnAl3v6RwgNnhl17T7HiPArBwfghAS7mV/hey2JS9FvM3BLpUUi1YwDRMXvkRYJoAlAh2l0dcZ04s6JUTDIjyBcrl4yDc/dLCAdYAsMnxHgVg4fxwKVwJgGEJNmWtxpQMpX9on2eRhVA+O56AjMfnP+e3Xvf3NwG4xIPTleiY55bpGh6UbafNU0l0z0p+5Jh5HqYJ6b51nP6XP8cx12XNHQVgIQB/bFPVg2OC7Q+WgVFWng/FvtWLI06uWh5oguKEcXVS/9sEAF//VGD7t4ETDgJbF4CNi8CGZWBs2fPL/H6Vwp2KEtVk4fJ+v/EIYPN9wKa5qu+IncfPwXHVZe/aOL3EbwS7xv8A1rQvnO0j8PArTgTGZ4BxFv9mIxhOCGsv+0OPYDRghcLfkWkEuq0+G00x4OtfDGz+d2DbHmDLjL8si8AYP/7CGIAiEEMTG92zXqSbH+d9R2aA0XnvO+JjthiIrOVDHHPOkBrzUQAWAPsZp3oPDpa/Xag6EVkLBK+5rAnJC3/nYk/APD704WiEAV8OTHwX2LQH2DgFbJgFNrBhjd8r79deGoEwsllgNBOzy8CdjweG9wBj08AIAci2D6HafmyAk4/Z7SJ72hGYRwFYAMDLTwOGp4FRFgD3HhzqRGQiyeurqOdG6r0Rm8IEZjzRlkiqCWoEgK8Axm4BJu4HJhyAbFhDxmbDGnZO4j0SgLGDkpibgEq66TJw/1nA0F5gdLpq+zDqFfd5LMeWqu5HNST0uJOIllg+qgMWgI+HPv0xwLA3gWHpW2sC441gCECbmKziaGrnUdMO4aHeh6MxAP4SMHI7ML4HGD8AjHvHJGNAgpDgY/ck3stipRemvVhc+uASMPUEYGh/9dIRgGx8Y+MNbR/00uVtH0wEx94j/v0oAxaA8Ed+GBieAYZZg5kADC0QWGOFzGJlcGPzl1BxNLXD8sk4xftwNAbA/wwM3wGMUmxOOQBnHXzetIYvibonmSiuYTNjriVg7glAiwBk0fNZH6+PmX9P6kfNmCXGpftJ7TgKwBIAnln14BAAYxMYm5C6RjCyCoOyr0qkD/c+HI0B8DXA8N3AyCQwesD1VQKH7EcASm1Q+y4CkN9pUKiVF5nLvy+fBbTUd8QBaH1HvNBROiZvfsNnrF4kcvPwpdsBLBeU18Nf7AB23Dp4ecHC8oBgUlJJecLS+7+WOpE3gbE+HKw+yoevCYkMGKqPJrdEKARutaFYRs1fiEZ0wP8CDN8LDO8FRqYq3W10pgKgfYLaYCzootgA6KXaTA90y374TKB1sBozy77xHFZ536utRgAmEaw6g5kUSFZwSXnA330qsOlfgHMPDlZesLA8IOjoLypPWHj/11EnCiVwkz7kAExtsGraYUWdSDX5TmsagL8KDBGA7Bd30JsW0oWivnEOQNP7yGTSB
5690R101AlZSUtGyfgZDkCWY1HnJdcBVe6325hTvelg2CQjZNDygG/2An0j1wKnL6y9vGBheUC8prQ8YeH9X39OVQSc7Mc6fCaKvAeHdCIVf4yMYCynTpX+nb97NJmlSQb8r8DQHm9YOFUZTKOzoXGhs6AxF0HIexcLBvWBuiHN8s2ne98R3qc6L4Vyb2oBVjfm9MIFHbjDCh6kPOBbQoG+oW8CO5bWVl6wsDwgfr20PGHh/X/1iaEIuDcCTIW/1Q4rFv8OnYiW3c+W2iKwUjKbyjQNwL1uuR6sAEgDgq1brXOmV81PxhNB6DUDBSYzQJwFtz623XcktX1Q1VWKaTF/zZhVazBVYA1tX5MazsGvobwe/jQr0Ne6BTh5uf/ygoXlAfG60vKEhff/rSe1i4DnTWDUACY1guFTDqLYdCBvf6DJYSMYATBfOx1kLfj1v1axH10nQ3Sd0GUkBnTfpemtBJgseIKQAHLQcVxa2TnuMW0Aqui5es8xBIegVdVVE8VhzHnLh65WMB9An+X18K6aAn2tO4ETl6vqbKuVFywsDwhevqg8YeH93/Rk70JE90nowxZbIJjvS3WYNSGUwGHJTpPxwwcbBuBrgRYBeKACn7VtpdUu/c0NJxO9BIxcKu4TTODzbkonPLoaL0vyUQRb2y8HsL1ckfWzMeuFi40Qezqi+yiPhyt7FOjr6/gCFwgP7Xb5vssTFt7/nQRg6MGRWmDRoeyTlpgw68GRTwgZgo1gGmXAX6/8dtaylSKY/koyID9BhzML3q1gAos2AcOrZYSoq/pJp1VtODRm9Z3LS/7WjVkvXOzEtOpKyGrlAT+4SoG+VY8vBGCvy/dVnrDw/vee65NBJiAjBIVcAJQjOm+DkCZEeiGAMw6sAwDZsJrAdhFM9rPGhd4904Co5oVuCZPV6kD40Ec6+9W8dBTBsfdc3nkpvnB82fp2RPcs79dHgb51LA9ofsDV6vut5/3PnxcAmLVBiDqgevDaJLkYrpuQxzcNwN8AWgIgRbB8loEBzXDwl4cGiDGft58SCOWGedgjvOJ+bPvgRkiuA+ZjzhnQQOiFNVbloa7l/fos0LdO5QENgEXlCfs8Qbf7HyMA3QVjYihYhLENgjX9y/qwxQmRU/asfd0ZcLU2CHVGyusJQLKfVi98CS12T5f7iECkHpsMkAhCF8+nshWH2I/jXsOYO144GV/9ApAIrS3vt4YCfetQHtAA2G+/4PW4/2PPbzMgmUMi2NoeSCRxIt2/FvuxWURIWCXg357gfTjEDNIHnTRXRCpH5ugKwGl3HpMBXQc0v6WLYVm/5limj04rG762K2uYY9jBkr9+rI03NL5ZbczS/dJ+LQyoga4o77fGAn0NlwdMAOy3vl/T938KAcj121z8Bn+Y9eWQJRz8Y6kNagDh2ey5EvxjxQD8TWdAuneCCO4An1vw5vdzQMmdktwq7pLZQR+dM34+ZumAxvY1Y04uqOAJ6FsExzeto7zfAAX6GiwPaLWR1lrfr8n7f/Rl3QGzmsis+/uO71V9OFgP2gpPhgr7TGRqRUT6dyvr4aIs/pm/2zVUNbBSv6G8e5pEv0Cvec7Po7+bTtjlBRlkvAMBkDeQyvsNWKCvofKACYBrre/X1P0/oWEAnnFD1YdjhtXxR73mX10FfCHHE9pVWcGAI/S0gKsfA2y+twrFZw6Hxf/F0Pk8Ri/kpGSnMuDx5T0iACgQHioo0NdAecBUHW6QdsV2/cL7v/Cyqr5gnc42CCOcfX1VIZ/V8We9IDmTzVXwPDJiXuKXPxtDBma8+lzP4WAgKkPxCUAPE4v5GzEuMX0PYJPLhB6FJsc7MAMmkVxaYC/K9gG+F1++8AQ7Gwbgk78I7GFpXgIwFiRXOwaJZPUbiR0yCUDRk+cHf+YpwMj9HgfI8ClGPyvsSiH0WSKRuYlitLb/zHM/JOSs5C/YIC9cMQDZr/dwxgOW9gtGYUBi0wA8l304vDQvAchilFbpIBQhZ7Ejq6ZQ0/Yhil8y4j89Axie9DAsD6FX9HOK3QtROTFkviN83kG4felIY8DCeLrSeMDSfsEovAECUFsTjHD+tcB+tkFgcXKvBRir7qtFl9owmO4Xy/1G3bAFfPrZHorFNWBFwHjQAFctIghj2kBarw06If/+MM9ZqTN6DgsDojCerjQesLRfMApvoGkAWh8Ob/tgAPSKWCp8ngNQtadjmTdltvNvn3peFYhgQQgh+iUmEaUAUoXM1yRLmWuFLaE9Z+XIAWBhPF1pPGBpv2AU3kDTALzwmqo6qtVh9kJErAudABia38TC5wJgS2xIhAwBn3yhByL4EhzXfRXxYsDTJ4IvrNN2JFMxZcBzVo4cABbG05XGA5b2C0bhDTQNQLZBYH1AVsQSAAU+imI1obHyblnjG/kJk3U8BHz8xVUQAhnQIl5CyNgKAGp5LKSSCoAySh5Jj79vTagcxUaIBeRNe79g9gq+DXig4wGzy+PONfT7RWFA4noAkGXZVAhcBckJQgNgrLiaNb3paIDo1vHHX+oA9LQBi4DxJcOUPJUnTgU2NJUyROs8irGARxQAC+PpCtsFd40H/AEf0gMQkLgeACT41PiGoLOKqyrJq3K/Ya9mNyr5FusN/uPLPIeDa8Bc+w3rtyl4VFHaMZc3i9RWBM9jjzgAFsbTFbYLRmm/YBTeQNMAtD4cBKDXBTQGdAB2MGBo8SCLmEuS1AFVAJ3A/NhPt0PoCcA8bSDG76XI7aySg6JYuGfKwJHFgH0E5B3ueMCe/Y4L+xVHAOZ+9EHcEgQgwbeiEYx6jwTdz4qfu7EhEJqxGqruf/RnHIAEnxgwBM0aC8aUAYWNBRCmoIll4HTqO122QcZbrgMWxtMVtgvuOx6wa7/jwhtoGoDWh4MBJ16WN4lfr8AqI0TVV1O1fa9BbQzovkAy4Ed+NgCQUSxZCFWvCOaOFREXyUwZOPIA2GdA3uGOB6wPaOz+QPv5S+MA3OXiN9aclghW+d3IgupBF2pPqxcxGenDPxfSRh2ASiKKiVP2PaZScvAKoA0VDc6cOlIB2GdA3uGOB1zR77iwX/F6AFB9ONSOQW0frA50sILVcckWJyIDSgwPAVcJgFbYuZ3FJvAlEHbJ3IsgJLGedeBIA+AAAXmHOx6wo99xYb/i9QKg2iAIfDJEJHqj4SExbEty0gkdhB/6P9oZbBZIGiKYVb9GKaN50lRHBLOvhDxh/5EKwDUG5B3ueMB2QGM/grb7/6wHAPNGMAY+GSGUjC52VX2f2CD4+HO0gqkZfegXKgBaHkcWtS0AWii9xG1ImrLlN5XR8L8fmQD05BVrmEENmpYSP9QX+KHiqj2/82+HqqDWwnbBRfGATdzAegGwru2DpRq7Mzq2fpAf0Nq0Rl2wBXzglZ4yUAPAmDSVWDBPHQjLcgTqOZ6zUvdKHh4ruDCerox/Dnu7YqwXAC1NI/QcEQuK6WK/kdgCTGC0PYAP/KIDMBgglq+hIkrOfsaCviLSofcJgJ5AdM7kkSaCj/HqQKVIGvD4swF8bcBjmzjsaQ2H5D/6acBd9wALB4DFWWB5AVherMp4GKIYEOp7+26UF0aSfT/xYuDG7wDjrIpAERytXf2vajj7ueryQXSFl10K/ON3gIWDwCLvjfGB8Z54O+Ee4ve6513uB2R1yzsqC+twbC8HcNVhfAeaBuDP/TvwtS3A/ePAIfYFVlPq2HHTuyulZCTlhbjhETF5yxTQGgPGhoHhIWC4VSXGD3n0tLkMHXHxu+YyB+MlPwDuZs5K6FlsbCzdVO9DuKfkHM8AEkP7B8fOkwDcD+B7np42+JkGOvKdAL4E4K8P0zvQdET0b14D3DgB3D0B7B8HZka9WzrD88N6sFm+YcUjrn7E1ZDvMtF9DBgeAYaHgSGB0PNHCD4BLwLRsByAyX/ij0/dDUxuqlIG5hix7eFhvLcOVUAtyPSydAFmOQNe6EYGV/9ZESiKgIEgtbaD/gHALQC4ovY5r5KwtjOU/XfTAHzzLuCmIeDuMWDvKHBwpMoN0WQzNtAaYSs0K4ZlOSAjGG9kPjCBRwZ0ABKEBJexYAZEAU3A7Oi1BeDym4EDnjQ1TwCGWMW8MXcKks0YOyZNlQOQjcgYIUHllEzYQ0ktm+r6oz8G4F4AXwXwRd8/kO9A0wB8y65KmPxgGJgcqYJTKYpTv2CCzyddQJRDOjKivn+Deh8BF8BnwBtaCUA+YYEyAU8h+c6Az9gNHHRmrgOgmDA3jHQ+iWupCeUAvNSrA9HNwqx+muk9nJVNg/CTfrmbAPwbgK8D+PcHkIibjob5o13A3XypWsAkG1cPA9PDFQDZM1id0i1KxsWfOrKnAFXlifCFFMMRcASigOcs2MGAIfE9iWXplS6On7UbmPaUUTXQrgsVMzcRj5Folg2V5ayUA5BWYKwOxKUafnosWjcJwk+7W5F2EKvlE3xcXaNYfiCYsGkA/smuqug6hcleAnAImPbO6YwRpMgjCAVAm/yQmKTv5hNsAf/i7SyNBSl2a8Qv/4/M1yF+BZSYlNQCnnVrpbC+mToAACAASURBVJcaI7sOSEY2NpaDXLqpR+vE/OVksDgImgGgghH
5690oYJbTWc7oJtFWc65/cg2AYvh2ALsB3AzgVv95nS/f4QdsIkT9T3cBrGtITWZfC5hqtQHInsEGQn3UDDvEDEY/ICf7SxMOrAg8T+c00JGkvHGd2DABUYZIAONzCUDppCFhSukCBsLQrFtZe/IixYQpSyEoJoqnuPWrVRAubQh83HNlZB23z7j1ywmj6CIIqUPxw2Xeu9bx2jx10wz4Z7sqTYZaDD8EIDuoE3hMVEphWg66JIp90k0sBxBcy+iPIIaT1RtEsHS/yIAqw+VSNPWQfe5tlVEk8auXgVa5BUsEJuT5uoliAbE5AGotmIAjCPnR9xDG3TQernYAUupTdBGEFMf83OkApHG+XlvTAPwfuyrgSZOhas3u6cwTsUBVn2gTwyFMi8wjHZAA1M9fYGHDULJD1m8Cpa8fRxDad+l+Ykf/3XNvd11U+qiL39SxXevSsshdDFvgbI1O2AwAtRZMZzTBRuDFjxe1Xg8QEIB8yyj5yYIUxfQIkfkIRnmHCM712JoG4FsdgHHp3ACoMH2G6jM4lWzoQarSvwQ6MSB/vporVaFkh+mCLlpVR8Z+dqDZLoDOpHSiQeAFDkBjPrlgCHgCUaFifg67H/9uYjn4Ai1vpTERTAASBaoQJBAKeNqHlL6mwPDZYAOROag/EYRkPX34MwHIvzW9rQcA+TLpI22G7EcQKlJGsYIJhC6ClUMiXfBTbFUQAej6nPS/OuAl9pOOqIc2BLzg++3VmWgIEUz82cRuCAtLIHQQm0gO52uOAb22sC3JEWgRfPpZf2sQBQIgLydPEIFGwPEj8MlF2bSbsulghLftqsCXq9HGgHysznrGgi5qzTUTFH8FLhAUn3hIJwCN0HLncw37qaF2zoYvuKNivmQIuUNc7GvWt6sHNs26twA6vhyq8NEMAHlyntFrDCcQehyaPTl+FwAbXDcmAKMRThakEk8Q8kPg8SPL0qzLBl+A9QCgR6uZGs3vfHz8TtBZvkgGQrEPBVAUg2Sij50QAOjiVKI3saADJRm7dSLYWfSFDkCem/dhZeMy9pPY5QvSDYQyUJoDIK8qMezh3wY6fSL49PcGgCAA8pScJLIgAUYQEmz8RPA17StvGoBv39W24eREiBoNQSgWNI1HBkdgxJSw1AI+dFIbgOYmkjimQ1r6XXC3rAbCHycAgytohf8vsB/r2KRaRq7zpZ+D37HMX0s3DDcCUGLYaw53MJ4YUODzusqlGCQAOQCejuxA8UULUkxIwAmMAp8Wa3qkN/R9W+sBwOhIEPjk5SLr8HeKFbTQfb77csPIMHGl/4MPbReslPhNe4+MiTpi9AFGV4nI7MfvagNQLh/pfrYnDAS8aJQ42A2w4em2cAyWQUuJVQTGWLs1uL7DG9J1RjhA+jvYk4t3KXeMqijpzrud4At9z3XtP16yGfjKZmCGooYh1tZzvv8xXPFl4PoJYC97k9FlwZWD+Azi/deMZWeP13eQCGEyoERudChIjbb3mJYwH7V0QIKuCwj/gfMj0asn2I0FXRSHXfL/iRkNgLyeVj8ccMY//J1fyxzTAXT2+xoQViKYD/1hDqLxPiYxTgSvQrphphG97tz4Slqafnj7uk1kIQDZrvWTw8B3jwEW+RLxPgSiCERdPwPR7+wCPg/gulFgfruDkOMQkFc5x84e708JAMmCuRNBXi4TIg5CGRzGiBGE/D4E/C2r2vcAYJoify62i0aJSMhB+2IHoNwu0fkcjQ85pu3ack5nIBREqneYFyWLkAXIJHESe00Cyx5QyeL6F/tyEcDcrOW2n7fX8df0mME+/vQ/PQjhoy3gzo3AISYf80MQaQx1peH9wb7v2mrtmCBkIMMejp3jIJD1MsaxaMZ8v5N/67INAsB3BAYU4JL4DSo1J15AFPAEwuQHZJzkKfUAtOHLJSOQRWndBYQvCQA01cfnNopfsaCJaD2baBn79QjSTiOEP1EcawIpkq2kegBTNgHWEpOKF8Uwq2NRFPM4AqCf46/rA2U9/uVDvurB01zvAJpiiwOl3fEeciCGF+Ij11f+QkbSfMPfIzqw57mEFZ9Dl3Ps5HXWAYByHJAJKV7N+s0cCQQhwSlfm4lGZ0KB8C/rABgZUS6ZHITBSEhCowUYAAksF7cStWREyxRwtuPpOlgw+5s9sq6OaIJIIlUgEhA1edoTgHxa9HVw5jibZNF+j/9yGQA/7pbujZ4bwv2+cWB6tFo0NzYnkxFA+cvEAo43VBoEo2e+48EMXEOmD9F6xhCE8RwZEJ80VblKvDlmzwicfqy93/o+8K8TwB2jVSgW138FrJQTXBNlnJgmrjZwanow9CBP/rL9wF0jwAGWDtFyoN9PHutnIHT05mPXz93dMGQAPniJsjiBXiTbxDZFMF9NLUPQxKR5qezz1Y6/YZDH0D6GkdAkYJIvRalAdHAMmPZoYhb6NhDWvEyf/ma737CXN7R1ZC7hUbPgcFgqt/ZZjADnM1xqEVhYBpb4CUk5UsL7jQvj///5buDrLeCOEeD+YQchYwG9VIfyg1NaZszFiCH6DkRGLze5/dgk8IMWcMCjdCiCzR8od1B8OTwvJM8JEShFut1fzMhi+eRJr6LI7hYP2M/xVLwKNoZjUTwRMAQQmYyhWGQxsSADOflZ4kukj7PhZ75bETjBpkAGahMkcrGgwhsXeCyBHBj1wmOBQwvAwqKzoFeRV8ZaerjKYAuirmPY/o9X7q5Cyr7fAvYMAftCPGAEoYlBiVtFwLjtp2U4irj7yOANbi+crHyrfCbTquJV44O0F1FrwQGIMZFqdQDyP/gGSZ8TC0ZRRsOlVzzgasd/u+zpMByLehAfCgMQCDyGZJHFCCgLZ2f8mgI5qauEcVx9e5vACTgCTwEMWr5TdIpWKJb5MvrnoocDswvAPAG4VLGg6UKeqmi4iuDz4er30oX0FP7u5moMvIf7W8B+jwlUNAzFnlZCIhvGFRCeWzrgXSSIBreXTFZSgVLHAp4UHOFuociEEsn2PJwl/XEk0dzfSojeerFg1IOo5BKAveIBex1P67lgUzgWQaJwLAKRH04i14ItgDKEtGsRnWx49b2Vkk9wUefTGrKCF7R0JxZMqxN8cmPAxWcAcxGABKEAKPA5u9lEaAbCmKMI+sDN1X3z+ro24wEZFc0VEE64ABgT180PF9ZdBcDb6JpqcPtPk+1ACbmKjJnllwyuILunEAWjZHkBsrsRUnfD0qEiC5IJfyisgMhzWhcP2O14Ro4WbASgAMQJ48SJwchmBCDFa8qpyBbSP7OvU4PQ0p2W7+LSnSJUFOrI4V7w5IoBTQQTfJ6oTSYk2mQcpGRyH2syGjIF6EM3V/fM++C1CfwUExhCsmzCaQT43lZC3e1hBpEHh36XEqrB7Scmq5dV0XZxmV8WuDFzAF9iwhow9seAGoBcGtKjqAc+1l9rLb/1igesO55ysmCrC8ei6IxRMAKTWNBi6Xw98xNTFUi0jEcmpYgRAPhddpVi9OIEPP5cYD4CcLkCooHPwaW9kV+iwWrQHT8uA1fd3F7DFvgUHUP2k8jTiogAqLoxFpDgbMj9jXSuN7i9dLIdaxzBp5XVBMIMgFEnFAPKT9qPd6A9BIGI7MfPmf4U+40HzI8nWgq2PBxL4FEkjKJixGRRFyQQPzzd1iAUzCAQas1YOmAEoFjwkecDC/PAwhKw6CxIkCXwOdVJLxTobMjBdyIgfvimNvNJ7Evf4jWtdnRYD1YNGVuG93VWuWs4Jf+mlZCCZxwP/cnJ6mXVKk2+tK8lQQVHRTGc64SDAZB3Ey3JcxyACkToJx4wHl+YwqloGDICmYmTFgMQFBET8yyYzyAG/AfWX8mCGQg0BTRoHwt9KVaPE/HQ890AIfgWK+CRAaMRYnVdxHbhdY8Wslw1V93UDsmPIj9GxgiAioRRMIJNvoti+SW/Ikd0gwAU8+XxJcbGITJPDvI6XdCFREFSknTB83xka40H1PGF9dnycCxFwygkK0bASJQSVAbAYeD98xUAe5U3jKIwBosSgNsuABYogl3/IwgFPrOIg1Xc4ZrpAsSrvruykl2ucykapkMMh4CExD5DwJfWAYAxwk4MKPAJgOIjGSEGwuCakRhemw6Yv0UUwRf7L00L9pnsNx6Qx4feY4O8pDEcixOjsoTKKpMYjSFYYjOC8Eq3Wnnr0YYS+0Tmi2HysrPGLqwASNYzBnT2Mz2QD91laxLB0gs12GAh81cf/o/OcHyJ+qj0S/zxnhUZbSyYWaL8+Rq2S29wowiWkJPan4MvgrDDGAlRe7KIywDIgR3meEDWg9HbJgApNTkXo8o0i7oVgxnEgFr8F7jEdnU5GvqfJQKQKyEOPlsNIQvyvupAGHS/Okv4qv9oh+PHxMLk8ggBCRxvAmEN+AiEzz2iQfQBeNmkh4K52hJBKOaNe/FSLobLRXCz43rQnu2yi9oMSMDxs2jo8303ERz1wsCGZECF4kd3DwEYYwJjhoNlQrgIjlYodbBPrwMAZfEmyzcIv27gs6XDzC/IR1DOgA9a6DRz4wZAsZ+LYXvQYsHoD4ziOFklna6YD3+nnU6dZ7bGDAcBUImIAmEUw/zbJ1i/scGNDJiLXmle3RhQ+l/aq57gUQCWzwwBKPeLsZ/LFrGg/ShRXAe64Ajkv30kALAjF8R11Dy3K7KRwJcsUTaqWScARou3w/INVnCH+A36n8RvM3nB5XP4oD6DATBYwGb5ajlOLOh6X8JaBKRG77+7ygGYp1bn+V25/01AzBnwQ1ypanD7KWfA1QDYC3zJIj7KgOUzc9nFbetX/r+O5biwNhyX5uSEDr5o0xsJwLp8/m4A7GaJUv/j3/5+HQFYJ3oFPPkho/hNeqBcMkcB2BAA6XrxmMBkfFAci/m0JpwzXw0TXvXtzrz+PKc/Ml/ugzM9MDqCAbz/keVjjGcQA/YLvjoguo1mRslRI6RwfsiA5nqhL5D6nscF8gfTdfxpS+/hLzvWfzMQCoB1Fq/8b3
5690VWaPIDZqsRV64DALsZHVHs1gEvsqFAeBSApQC8pHK90Oql4UEAyvCwNeGcBXNLOPMLftgZsI75ouUr9ousp2TEyIJ/sU4AzC1e+WIFshyAHPZREVwItrrD3wGAhibTYBhxVpe/xePyrNBuWaoNp3DgFwC81O+RAepK/a5Lfe51jxr7JwA83nPXYgq1asl0yX5N48+f4VEGLATlK1vAo5YB1gBSRmsM+NFE57lcfPD5pPFWCJImtyvGgGfOAacBYO59zFglgHgPefZsXV6/gPXBYeC0RVgyJNOGYuJjPka9eHWgjL9bWzhWk0/n/wPn+k8bgFNmgYcsVflZnBRmIShtJM/m7JGibGBoOIIez9wKPP4AcNpylfbNlGfdI+9NjBjz8JVzppckZuJ+dBw4aQ44drk6j1LIY9JkPD7P4s2lwVEGLHwJnncscNIh4Nh5YMsSsHm5ndOu1BGFThJ8/K6JrZtoslST2+XHA6ftB05ZAE5crgAups5TfaL6EF+UyIif3gAcOwtsXep82eIYY9JkXpMgMp/AeZQBC2b8OduBYw8C2+aALQvARgJwGZhY7swEzbNa88IRvAVO1qkF91J36DNOBE7eD2yfB45fqphLnevzdGeBKBfL8UX5/CZgyyyweRHYsFwxYHzRNK6oetSBMDLjUQAWTPqPngpsnQK2zgKbCMAlYMMSME4ALrcnR6JYQIwsoUnjpDRstOLy7cBJB4CHUGwuAtuW2nUDVH1EFUhycSwWjGD64mZg0xywcaECoI0z5P3X5P6nWlHdgHgUgAUAfOYOYMtBYNMssHEe2LgITBCADkIzSJZXpCOnIg25uPrhgnupO/TyhwLHHwSOmwW2LVSik2pCrDsQskzNIBGIpBdGI+VfNgMb5oENCxX4yPRjPj4xaJ0+WGeEHRXBDUz2Mx4FbDoIbJypADixUAFwzAFI8KUJChMV2SUaAGc1cE/xFJef3FYRti64nkqWDrqqEhbrsm5zvZCdPCd8nHzJOLZuABRz9hTHZwPL7LnLnoNMIY2VyaKcjtZLHOAbNgNPngKe4BacfGF1pnydD+hphQ/8XV5UiEueLGnDN1tWXj/3/4cTwAUzwGPcRcFJiDpPt3FLmf5vjwE2HAQ2zPrEzDv7OQg5OSM+ScYQy5Xbo8465u/ZfLTJ7fKHAdumKxVh8wKwealSE6inEoSy2MWCdbUHIghv3AqMzwHji9VLZuDzD8cXxxWZs5c7apmW0fMBnIHKn5X7d6I5npvRz94O7LgXuGIReJSb+Xl1tzqflybwRwqf9i97BQRWomWJQ7oZVFtJoqDX/b/oGODsvcBTATB9gsfGqmzdjtVz+G+PAyamgYmZCoDjFE2anCVg1CeJwOMnTRB/DmUINVkkgia3y08BtkwDW+YqAFJFMD1VAAw6XG61R31O9/fdrcDYPDDmY0zjc1UjivBuAMx1QdMB+WAYXU8dhEU16dOSkppbcHFSrng8MHwnsGMPcN5ypURHp2xMIa7zDz2z8Gn/kVe0YomO0wEwBYKujL7v/zHA6C3AxfOVh58g5AsZxx4fZM7sf3h6BcDxWWeGBZ+cMEFiwGEHHRnDzun7ONHs/djkRgBunql0VDOSHIDU3cxSD4aEajhFXS4H4S1bgVGN0V8we7E0Fh9jVDG6Obr1LJMRwn+kOCaTEYT0dsfqZHXl/p7PrLi9wIY7gO0H2yAgCAWCWCowKrYE8nMLn/a7PQn9X7zIJPPkCcK+758y7x7guNsB6l98gZjLLYet3Ay5n0sv4R+fCYxPA2MOwLEAQLIDPyP8uBg2cRYmzFweAYilKkn+OC8/Fdh0CNhEA4nGA40kd6FES13WLO8v1qHKAfh9B+DoYjU2Ak/js/8NAIwg7OUb7LCC+WAfB4CpBJoIiTRNRmS1l13kqWh3Adv2A8cdqqp1MB+aIOSxWv6pq5D2kkIAvt8rF7BLJksN/jMqfa7v+7/Ak4B3A6ceqpasKMq5akAmlLWY37t8ZW97PDB2qALg2BxgAFwANEGcnI5JcrDZRPlkaXL4u1KJUAfAjbTQ59x6dSvdLPXAgGYshZWR6JIRaXB/NwFI8C1WwLMXzMeSwLfcXuKrA2G+wrLCDcN/IIg4ERRn0qvyySAQX6mG1XuA4fuAbTOVwktRRr2MLCoQyvEZ/UY/WwjA
5690j3jtFJZkU79g1ghkgEBf98+0Umb/3A2M3lkBl/fOcdMok2EjkZyv8773LAfgHDDKjwNwxEUw9yailpwdxBAEYhBbAuGzG3aKkQEJwAkCkOCjlb7Y6SYyf2UwlAS+vKYnAXjfNmDEX7DEfA5CjUcsnzvbu1nDtUMmCDkRZEEyGdlAk6G6lQTSa6m0MP6HuY73AxNTlcJLZ6WOJYC5/CNxLpHMgdKIKNl69Qvu6/75AjHOiTU87gKOOViJb748BKCWrnK/maTA+58AjM0Ao7PA6Lx/xBAupoYDC9okBRAmPdBZ47lNA/DhwMRsxX7mPgl+SrmK5EaRNRslXFQ9CKB9DkADn79cZtkHFkysJ103eBbqlh97DpmTQTYgk9VNxu+xYbXKU3lhFoJPOgdFGY+lPkgQxokkgF9Xgj4AvfoFs84eX4Ke9x9fIC+tRfDxvvniif358sSir2LCj5wNjBKAc8CIi2AxxLCzIAGY9L7AhGIKgpATw4l8wToB0JjPrfTkp+SLQbHrOqm5jNyajS6VCMIpApDAWwQ4LrGgXqzIfnq5cv0vN0ZXHTInME5GBNLb1DGdOYQsI7AfGKFjlgqve8wJwG4T+fuFAFytXzCLb+VgWnH/fIGYfc46Hs7iHC8ZkPcdXx4VfVXJw8+cA4wIgM6AHSLKWZCTESfLfg7WsIyRF3ckiRQ+HACXkwHptyP4KHrpJvKVGnOhRF9eBF9wE0mUEogz2wC+WGI/vVxiQQIxAs9+rmHA6E1YFYB8DJwQMZl0OrLZ++i7sfT8zroYHLS9df4RACWKxSZvLXzG/fQLZqk2gqn2/vUCUQ9UZaM9wDaPeSPrC4A5C1KV+NITKwCS/SiCR/jRBDlLmP7nHynsxno1IPwJSyRpbiMADXzuPDYfZfBTEoAmcuVQdiaW0zwXwQsCYDYmMaDA1wG8TBSvaoR0G77EcGSET6hjOvVApfRPAUN0zjr45JzVcSqiTxD+VeGzXku/4Nr7JwDJOkxFIwt6j6+RqUrlkO4bXzp1gCAAv04AzgLDDsBhKugLFUvQUhTwCEKbnKCw14HwJ9cDgGQ9WegRgDI8XEcVEDvAl7lVlglAgi+I4CR+Zf1mLGgMmDFhBGFfDCicRJFERviSABjLS7FC0MFKMU+07wOPE0kGvaoQgGvtF9z1/iODkwn3VWoEXxres5ib9xx1wZufBAwLgAQexbAD0JiQwJOuJBA68/
5690H3Zhk6+3CifqqwWNMKN8wjKgbk6gWJgC+FMaBb5vJVmsUbV2vCqo3cRWZcCIACoax53+ulkqNd7iqOcU1WcC9cxEm5kQBUdZ+sTnSL/jEtTWngi21jhJNJBivZBukXvOL+yYBkcOqxKjJ4AGgxzMrBVwdAMmHrZOAYF2l6y/mwV6xD17zmWo6MbRyeWtOHwxJ91IIhr6rqZS70DPPLXDVUrfBwzHKr1EUp6/h0T/6L/GcCqslt4IhoTcwdAqDSs7I60WQH6R329pHuFyuXDJmEjuOSbdB+wSvuP5bGUjmsA5XoUvcvBXKKAQnApUdXwah0b8jXR2YzJTsC0ZHB33FL+2yiX3h/1YeD1fFZGT81g/H6yqkVa9YEpqMhTADle8erHA6t7Mh6j4ZBXdBGjFyO4CSIm9wGBiBvgqxwIAJQlXIyEJLyI/i0SkAG/FbhaEr6BXfcv+5dLKhCg4z1C1HEBJ8+BODQGZXfk/quAZC6ketAZEQCTWAU8PIJt0fgwHzZvVWNaKqi7JLOmtDWFy42g1FxH/XfqGkII0C+a0tnDkfsGxQjn3VPsk7tXmuy+Xp0JhtoJosAaFcUAJUYKiYJxcqHqKAH9rPlG2cMrmCUbMX9guMLpGTcCMKDlZGhMK8IPnPIn1X5PA2AwegwEEYmDGBMjOI5whGQP3NPBT7VJlRNaKvF4t2IWHbDErtDlSk1p4lJ7/zd246tglGZryIfrFhQ7pU8WCAX0ZENG+57U14Z4YrCeLrSxXdev6TfLwrbxT7znMrfKQXfHLQCnyvmRIv0Q3430ezMmL98P393G3wqz6am1NYzzoGn+svqRmTAU2citctqAX/2EI8F9ACEmLHXLZGoFxtSl2xyK2bAYwrj6Xr12+1noL/jUTCD9vvFrn6u0v1/nvGkaoVBAQi0eummMAuXQHMWJAA7gCixG8U0gFfcXdlBKk4Z6zELgAJfZEKrxpC1xOIl/+Sk7jkcdYlSco90y9+gK6vJrRiADD0piad7RuFo3udNCgft94vCdrGXn+tujgV3QAcHLcFnroelivHkchEL8ue0uQ74S3eubAITS3IQhKkMRjBMokgWG3L//2z3VSnP4VDgQWxUEEUxAZFHL0eR3HDfm3IRbDHkBfF0zy4EIKNhSvr9goGEBdvTz/MIYQLQdVsTwRTFDj5jQmdArRDYJQNDSs961R3tPhx5NXoVgoxleHnarjohgLec3D2HI492yQNvIwvqO9fJm9zKGbAwnu6FhaP5pFuMg/b7tTbpBdvTz68cz/zI8azVj8iAHTqgmFHXDUB89R2dtaC7tUGw4kDOgFb0R2wYRDGZ8g9O8aU4XwPOczhiwGlMjqqLWiFYGu570wADFsbTvaxg8nkow7E8nM/atfKzln6/1mS4YHv6BQ4+Z0BbqHcd0NwwYbVD3+1yWhXJxPBrbq8AqE/XApSqAxiBV2MZ/54DMOZwKE00rnDUWcR5KiV/brjtSAMALIyn+/mCyeehjIYp6fdrvVELth8RAClyHXxmhPi6r1m8FM0ucgk8+y4RHC1kAK/5XgW+2hZYofafWcPq1B5AqDqEYsQ3nepR2gqhV2yiol1COkD0C+aOaoGx4aL7DQCwMJ7uVwomn4fm7VrX2u/XAlELth+5sHPtN+l/Ap6sX2dCsZ/phZkIJgv9l++1wbcq+2WFv2NXIjNKAPzuw7MUAV8DTuynFIEsQy83RgTAhiv+NgBABaQOGE/3mwWTLwAqHnaQfr9GnwUbARgDNBUlkpzQboyYCyYDYdILdf0l4NduW9kGoa4geNdazLElKoA3Prx7DofiETtC6XvE7hGEzJlpcis3Qgrj6d5UOJoYDcMglrX2+y0NPtl5UZUjkfx/Hqbecoe0OZzdF1gHQrln9Bhee4s3f3Zxm4MvAk9VSFdUIw0i+Q2PaBtISiBSSFgCYMjMW00MP7pwvvLDmwFgQTzdHxcOSGvBg/b7ZRZByWYAlOERluKM3Ra9CKWc0q73dTBhMFT4ZwIw9l5Lrpes+HjeBiGCUOKXeuBvPcKTiEIOR0f+RhDBMYi0Lhea4GTaa5NbOQAVDzhgPB1La5RssV3rIP1+7yy5OAADoAchEHBkFbKfGRpiweAPtMs5IFNokyOGk/7rAYC9OhBFwNXVY1at5tftCBHaWVS2AJdEcEinrDNC+Lumiyc1B8AB4+muLARAXTDCWvr93lR4/Z0Xt6ODFQkj8WtumEwHTKDLQejAfN3uds/dfjoQdatGLxb8jQBAYz6/boxiFgAVudzNIc2/s3xLk1szAORoB4yn+2DhaATAGJCtbpkCYq9+v4V+aBgAQ4i66XtaC85YkDog/zdZvzUgfN1N7a633Xqv6fe9msDIHfNaB6Ay2JRE1AHAEDIfI5nzZCLeN4Nbm9yaA+CA8XSsul6yqV0rJ2WQfr+splCyCYBR/HJyKX4phs0PKBZ0lqOYTpvniAiUAmAd+HKjo1cvDjHgr+3wPJQsVCymUZrPMuRsRBDG4AQCsunyJtFGHwAAIABJREFUcc0BUJlxQoH62q8ST8cggpKNAFRGwCD9fkuvbwAkyGgJE3C+Nz1P1q9/T3F1EZBxvZh50s6AEYC5yyUHXt5/Q8zI5/KrAmAIkkipkyGPYwXz1aRT8v5ZO6jJrRyAvKOvNXlLazsXs9bo/ztc29Pohgotp5J49Rcj/pzfIwGS//3OM4CNd1dpntQpFUmjEH4LYIgnyn/OLjL8FeDGhwJbNgFjI8DIEDA8BAy1PFK7FSKf43cNKrvHx+8C/vmxwMgmYHgEaA35J0StpvvzL/nP8RbLAfhyT207TChgDRiu/ZL9DsfWNABvYzbhCDBKoBAk/pEobGWTqp819hzQ1/0k0PoaMDEJbJjxVZFgDad0SaUO5LksWVj+XScDmw5UEUDJ6U4d0nVbC91S3ovfVHp5al64cgC+k7mZAP768KCA0WD3A/ieLz090CDceVmlAuhBljLgrfcAw6PAyDAwPFwBkCAbItM4a/FiNtERjBl76W9ffD2AbwJDdwFj+6syImRXrd5Y2FjIYcnzWPLEqnsfC0zsr6qBMQmfIDR/pyJ6xMhKyMrSDiKD2xja6TADTt0/AGAs1KcAUCFrOLF6tbtiRVFavT/wuMCa7MfVTlH098YBeBcwNAIMEYAUlS4uBULOmK3LCnwOPANlEIOSoF9+C4DvVoWXhvdWZVOYqWgi3vOXDUQhgieB0EElViMYJ08HxqeqnG8D4IIDkAzo51DKQQJvBKUmKACzbM4+5hUivwrgiwC4LzvjmgCh6nBcgiMTcv9Abo0D8E6g5eCjfpUA6AxoQIzgi8ALmWwC4z//DxcPPwBak8DQFDB8yJPpPZHeGCyC0KN5DFCByfh9/+OAsekKgEzCTwD047X0SCPM1IYQjCv2E/MJoGVwUUQoPboq0MdqkWVn7RtDDMahB4g+P6qhXFpjVtkDtRGA2nKjos7IyOyHFUbIrXe0FXsTuzIYfNb4O2M3ATGIYQOmPn6hG6gi3eUkQQAeAIYOAUOzALMVh2pAlESqGFBAXAYOMQVjxll03iO/yYKRAT0FQXkwZkjp1pz51LO2XAT3KtD3AIAwj4Wg05kfiuUHYlsXAJLVnP0INLM0OYFx78AzcRySeTsw2AJueI+Dj2Fne4EWKz5MA0MzDkCCkAByUWqsJzarEanzj2zXwjEGFHuGY+pYsMojzZL1G9EBexXou339IRBrC3lJGmNDuSHX+w7WC4Cm6wWxm8DngLTImgC8pBcGBuTXf/1fXnyTugnFwxTQOgi0CECyIFlsvvJfEnh0mhsYI/s5uxFYi1xZof7oOqSAawwYjRGBzYGXbtWXaCIrlvHUagX6SP/ruMVYCEbEqECXAMjfree2HgA0ESur1/0vtnNwGSsG0RsZME20/+/XWH6Mugk/yngPAGy5GDYALjiIHIgRUIrsZjM7Ax+BSx1S4pfffQVIep8dL7dMDsTGjJB+CvQxTHmdtrw4l0CovFruC2NOe975egDQsCXRK/eK634JhBK90q2C7I1i+Gt0jxF40k1cPJAB7UP2m3MGJAAFQrGei9iUTH9yBUDTHfU3B5+BOIKQ43BWtNtPcWIOzEZE8FoK9K0DCGNxLi3FqaKA9gTgeoFwPQAoI0OulWT11oEwiFz7cwbErzNxWtEYBB+VY76Vh4DWrH8IOoGQ7Ocg1CqMRLPltmxvs1/SHaP4dcAJePYyyUCRIzrTB8tE8FoL9DUMwl61kQQ87Rmy2PS2rgB0a1ci18RudEJH57OsY02y/+83/sZdBKr4FXQTApBvprGgQCg9UEAM+h9F6ugJDkC3gJPBEvRGrYoYCBX9IxEcS5K4i6cZAHIw8oXQ4mL
5690Bb35YH5d7OekadtTV1UZSjaEIPH4nQzYNwgjAHNwDuWGYpZc7lzPfX1cQur5oBorfzDf+zi0yVTuSkuxBI2Q+PhQDIUEnMLo1TBCZLufGw/ixbQa0KB8CTODjPohdY78IQmfDjmW7Yo/doAX6GqIiAtDHaYswSmeMubV81kp11L6hy2PdAcgblfslOKC1IiKRmyRxZgV/8++DS8BFrxXi5Hd/U6MeSKdqEsEKhpBRsgRMbAtuG4KU/+9ry5brzP/lPVMv1EPOQegharrVcgZUhVHFxNPcp9VFtlOWkL437C0WABWypFRGsV0sb5Hn2zYBwvUGoKl10v1knDgo0y7XA8Pfv0UACnjaK33Co9gJQAOe64FkNvtZAHQdjz9v2Nz2GSa3jYej2W3KGuZ9ixGdIVSoKT13B2s5AHkGheST6qn0erHv5AIgAAU+LVfw/wq3CEAV7clBKDDGZG9/5oVXx/oyYARczcqH5GyH8eFplTawFvAtrtXLGpNrQDGbejupB3omlIHQGc/ErzOcGSRs8zrhAbbuL1Tco/JfbLlNwHOmi2kIcs3owbdwNpYtynDQhsFcgvuG9/YapGFvYX22zZcAU0/GwA2LJ/4AmGF9mwEbBu98Y3cMF+uAGQCj2HVp3BbPuo3IlqxAy5wHAq4OfARmEBXGfNIBa0BIsG0ecwC67merHgRpZLwocrWaovuTxew/V0txJQ2DWeae3WAGbdhb2DB4+wRw7w5g8Qpv88liyGtoWHzMi4C9fAEHbBi8kwUKu2xNAdBxaGBLbJdZux1LwAGECYAEm6wyfpelJrEgFnRDxESwgyUxIUsVMwjVy5AYO0bG89Auu1/5BF38KqjBHlUAYXsteNCGwTeWNuwtk4JMkrlzGNizA1hm69g1Nix+zDOBW0aBeRZZGqBh8M4emfWNADDT+zqMjQyESdQFHfDbZECCLRgdHeCTe8CBaKJY1rDnBRCIAuGW4TYAZeFG8ZuMkGiQ1IEwGCJtHZBmy1obBsvVMnDD3jIAerti3LEBOMjGcOpa3WfD4ic9t6oveDtLfw7QMHjnH6wPAybW6yaG4+8D4HIQfvtDIVtLejpBFsVvUI7NIBHw3DUjRzL3rDVtsYPOkAScuX3coNDynT2VYJCkn+PjqvUD8hVbS8NgjphGxcANe8sAGNoVY/824BCBtIaGxRe8pLKZdpMkTvXiJ2toGHzSNHDPScAyq3er4qPyGaNc7JCRXWLT2TjwGmCOeQashq6+qSpZmp8vojQpheF58ncdZVjLnjWPHr4VWKTKxrHGUqq97qXu3jp0wPy+eEC/DYNZsZAO6IEb9pY9lNCuGPcNV830ZmkM9dmw+OKfbdcXvJMPdY0Ng0/7GnDXKcDMccBS7MwdKz8KCAKQIgY0MWGCtr4TOHAasMwOkTqf6unyuLykfd254nkb7qsw/iVg7jhgmSX31Vpd9yRHeLx+zRhjEGRbB6wDYT8NdymyubzDzCCGfpMJWfSRYfr9HP/aMgBm7YoxNQHMbQHm+ID6aFh8yS93tAvGQb7da2gYfPoXgbtPAqaPA+a3AEubgGU1RM6B060fgkRoCzj+TcD+04CFE4BldZdRc4/YxlxgjJMewSiwN1zWfsOngdljq3EmY08vm5i/7j5yIMqpvupKyGoNg9lngYosl9wY/0dZdrMzYl8Ne8sAWNOu2MA3zw/F2CoNiy99XbvftrcLriz6PhsGn3U9cM9xMODObQYWCMANwPJ49UliuW6SaqqBn/gGYP8pwPyJwNIxwDK76ahDeN6uXYCuYyABkEza4LbpY5WEWdSLxjF26/dQB0SJ6r4ByAN6NQxmkWcqrnQ00x1DEDJFjR8CcNWGvWVPp6ZdMQ6OVOCb3wAscPJ6NCy+7PerkP5Q3tBY1PrT9tEw+JwbgPu2AlNbgVkCcCOwtAFYcgAuiwWlM/XqDjMEbP9t4MB2YO54YJFMo/5gHIcALV1TRZ17FXOhPtvgtvkqf9H4kvHDlyKK4l6VzvVSBF22uwjOb7pbw+CfcwBSkyeFEHAUx/yw9JTyEbo27C17Ol3aFWNuAlgIn9QxO2tYfNlbK6MvaxeMRYquvL9rTcPgJ30TuH8LcHAzMOugX3QALo21WXBZLEHwRF1OgHS2eOgbgIPHA7PHAezNu7QFWFZ7JnXJ5rnqxHEulvlzwyVNN3+wern5Yovl7SXLGwvn4riLWO4fgMRJXcPd/+pmOymELEhRzBxJAo9gVL4kwVnbsLccgHEpWi3epocCAMeBRU5eTcPiy/6qtl0wpvhA+2gYfO7NwOQm4OBGYGaDs+5ExYDGgqP+ccAkINaVpB8GTv4d4OBxwNw2YGFrxYCmV0YxLNYheCXau7EhV3ga3Lb8g4+R45uoGLADgHWqhsBXA8K1AZADyRvuvtkBSArh+i9DsQhCOtf0UUgW/7aiYW/Z0+nRrhizoxXwFhyAi5y4rGHxU66qAFhT3rDSIVdpGHzencDejcDBDcDsBDBP1uX1CMJRwFiQIBzxieL3KIY1YW5MPOxNwLRb8gs0aghAss1GZ1O+SFHsdRPt0i/PLHu++dFb/x4mXfhcbWxhfCtYMFr/uWvKxfDaAcg7ipPCvFOVpuo3HrCjYW/ZA+rRrti6TS6MVQ+L4NPH2nx698GnXF0BsKa8Iab4dFZpGHz+JLBvApieqAA4J8CPOQuOBBAOV0CUYbIskRkAecrvAdNbXc/aDCxSpyT4CEIyTgRgneiLIp3nP6fs+a4A4N8B8/48CUC+ZGJA29fpuLmxJW+5h5kNFg2jiWHSi0r0Uv4pCoZsxw8DUfnhd4Vk0XGdGvaWPaBV2hVjdjgA0BlpkQ/K9bmn/HOVqtClvKEBqlfD4AtmgP3jDsBxB6DA7tdbcvYzJvQJkii2n4NOeMpbgJktbYPGACiF3wFoEx1ZMNe/4jnPLXu+KwD4t/5SO/iMBcXuesHylyACMBPDgzGg7opM8mEHIGdwrfGA1rC37AH10a64Yr4APvvOSdwEPOVbKxu+K2pdKRTmdI3dqkPPVgbSTBGAY8AsATjWniBdx0QxJylOFCcr6HBiw1P/CDgU3EgEIMW52M8YkLolQRddIN1AyKWiBretf9MJQN6HsaCPxe4rvgDdHOcOxDIAcmDFDXvLnk4f7Yqt63gEIB/Yoj+4p9xaAbBHeUPM8qF2aRh84QQwNQYcGgdmx4C50WqCFngNsgSvQ+Dxu4MuiawhwIAXVk1O+e/A7CZgThY1dcno1nHL2oDIyZULpBsAFTBZ9pjT0QQgn2V6ufRicS8QRgbs5ZYpEsENDejBfpoLrwAOjgIzZMBRZ0AHoUC+SOA56xJwNlEyTFw5FxBPeWvlzpnbANCdQ1eSGTRybMuydgMggVBsKmtYoC6Mt8znZxsZMLzAxoAOvsh+ydDqtXx4FIDl8L/omQ7A0QqA82S/ERdTI22mNfaTuBIIxR4BhKe+y61punQC+MytI/Zz/c9EuvyBeetLAfGZ5WOMZ9j2/gqABB1fMLsHAVBqhfTcyH5d9MByEdzs+B50Z7voGZX+NzNSsd8cwUcG5ASRKYbdHRNYwhhDIHRgGmO0gFP+HJh15jOXjnyKblVT5Cbfoq+yJOszF8P8+VnNPlICkMAzds/YLxlYznrJwIpO6egTPMqA5ZNDAB6iCCYAyYBcBqTRQ0e4630SxZyQJQIvMJ8mSeLrYe+p/GzGfnTpEIBy6US/out+K1wg+brs88rHmDOgAVCMnrEfxxMte1Mt6j7u9zzKgIXzczEBOJIB0BnCJoqgIfDEhM58SWzJEPGJe9hfVH42un/Mfxl9bgSiBySIBWnAJBDGEDAB8QWFA8wO3/a+wH4+rg4RLPYLul8tCI8CsJmJMQAOuwFC9qMI9g9Z0CxhZz65K0wfFBPqu7PEyVdWAOTHVlTcpxhXHZLz1w0ZA6EDLhkCskRf0sw4dRYC0PQ/vVSRAYPo7QCdj7GqVOSMeBSAzUzMxZcDMwLgcKX/zbv45SQlHXDIgagJc+bjZBqAWhUoH/Y+B2D0J7rFa6LYDRmzomsAaOeKqxEvbWacHQB08JkRIteSXiSBLYJOLB+X4xrzAzY7vgfd2S4RAKkDDgPzNEAIxMASSWF38WsgkuXLyXTRSRCe/DduSZMBMwe6ObTd8JBj24Aot07uDObPP9XsIzUGFPs5+JJ/M6oT4buxHv9X7BeY8KgOWDg/Z58GTC9Xq5FxTXOw9c3Cm6k5fPcjgbHbgAlvVG2tH1T3Oavoq6BlniZ+12n5u/2sDbOvasqoFg8x2Lnbcd1GdhSAhXN+7qMrAC4sA8sORJ6yHwD28z+Ft4fdv8UyqUDrDmCEBcpZ39kLS6aq9l4D2rLb/KYsFTPWdfbvh86vQu2s1K/K+zIjTsXIVQ9a59Egs4Y6sZfIA/EcSp/jEXv8BWcAhxaA+SVgSQAkGAMICcwVlNLlqTc9Gbv/HAA7MrL4+f1VlXwrUq7SvCoyGcrrWpGhuur2fNGYwM8YT67hT3s1LaZvqn5MLM0bzmHMmIFSgdFNj/mIBct63
5690NhFZwEzDsBFgpDPeanNgATfCtGsX9TIKwNrg9tuVkhlng7TI/YArX1VkXKrEe1l2SynN1RCsFJsqnQv3UIMxhwIRjU5AGN9QUteVz3BUAvahuNgjC3HxLAND7nBp/cgONXF5wCz8xUDGgCjKPbvevlzcKUHH2ag6cnYzepYBB9Zi2FxDJdjoXJv1WDFiLJ6MKqKZUzoQFTfj2HmwTKcTpVWvcxHKm6kKgoORAEvVclPD6NdzLXpMT8IYNPcLV7yJGB2AVhYrAC4SNA5AxKM9ryDPE5fs6eeVKWGZ2M3S3MQfEyJUKV8L1ZpJXpVJ9pLilmlAxWkVJHKwIhjjD9TtVXVm1HdOy/pJiaMFRWM+bo0rWl4yM1N7oPhTJecC8wRgAttBjQWdBBGESwgSiV0Pb9DRgu0TY19N+M1mRKh8niqFx3rRDsLqjgl9yaGXT80vcL1wnE252PAZCzAHQCoiqoW3yYWFIt664fUpKaREr1NPakH6XkuOQ+YDwy4FMSwgU8GSRSz0UJx3Vx/5vFNbrs/EiLRY+v4ACITww6iJEodQKwBIyBRv9vwhKzUW6z66TUGEwhDS3ezqusAyNxnJn8xa1KRPSFts9YfFB/QDZcAm78CnDBT5U8rCqjfc3yh8Gn/hGd/MsKf1+QzYJ4891Jye13iy1cAE9cDJ+6FpYrEkidxDN3OtXR+FwBGMezoMmxJLOumAuD4J4rxJrfdH/XCoLGFVKiUbw+LAPQqWWaMMLrd6/+JycSIm85w9lOpt1j1MwAwFTiqAWEUxeYH5ENn/jInUVHeMXQ/f/jRePvCa4DhTwLHfBc4frGqqaNJzLPw6iZxV+HTplFGvZrXZT45N39+HW3TujlZv8D6fp8HRq8Dts9XIOR5YtakgBgdrrrt5Qsq8Ssd0BhQ4HMwmVitAWHAY/LbLDQNQDaTVJ8Q6W4qVB51OOqDZDPVB3TLOBepW5jmqaLbec3jGgBGMSxvvemDYkQ9GoKF1ShUCSKCqBeQrvmfVZPC1keBjXcCmw911tTJ8q5XgOLaQgA+x/OdWA2EGZ98gbjleTHdQHQN+2iwls3nK3/Zhj3VeQhovYzdxmArSwQgDRA3QiSCJUrTnjfl4KozRCSCCeYmt90EoJJbVCk/1+FiCwFZxLk4dRfLFia6x8LbYkD9v9cXtLG6+O4AYQRfrgPygVIcqyhTXcWFOJH8fh3rz7EKwnUArq8mcGwK2MCC1i7WY7Zenh56feHT/jE3yliE4TZncd636gPFCKWavGhcRx2J+cvs9MlSw0Ty3cCm+c7n0G0MExdW4BMIbTXE9UCynvyCCX+Ovm4gbByA/xisVgJPpXrzLj4EoRJjJIZrWHArS9iprK+KcefgiyB0XVKGjOmCmW9xhRVMUSyRFnNeFGEdI2q+/HFXclkp9WsAbgTG9wGj08CI64WxRk/OTDcUAvBHXSLQxcVCDMQSWbzv+1e7WVbz+k5w2tJtsbcCYV6WJY7hmAsDA7r1Sz3OgOgoM+KTOJbcjSI5yGIaNE1uuwlAAU/MF+tF5/0sIghVLdVdM2S0bSzHx2Mi+FTxXf8X925NC4BycK8QwfmgVX1LlcFiykEMcL2BndJJ7aQfijKfxLGDwAhByM7aC5U4qwPzNwufNnNuOH4VZaCPlPo2AahqFqoPVFc14ga2m+WEEL0cAz9kdPrOmMu8r1o/rTsXz7f9oswFs+jO6LAqkvC3Ggg5Fg6mwW03CUI6X12h8lyfcz3QHqr3DIl64DbqaQKc9mI87QXACD6vpJqY0EVxz2CEyCI5eMSGX2e7VtI5J4yTRyZhscrvt1nQuivOAaNLlYESwcySgiVbr37Bfd0/u31yEgg2FVaiPCeVOguqAfGov0iR0R9JABJ0bnwk9nMxw+fOh55EbgRhzozrBUA1polN9CLwok5HEEUQBjFMQB7D+j656PW+IrJ8O/bBCo4sGFdGejqiyYCx3mKe9/JtTiBvmI5OFiTisg9LtJFF7gZGDrUbHKs79+hyu5hSaUvh1foFr3r/6vZJCiXgCDwVVFJ7MVmRLsrGltuFCc68yFdACMDAflwR4QM3HPoKgIExt4gz42SuaQb8hBOE2oZmlu+KFlKR3QSssMJxDPWbbjpfLoJrxG8CYT8MKGZSVTCxYFTIb84nkCxCIPLDiby30gXFghaF4c2ReR466Uu2fvoFr3r/fKAEFxvpqMcd9yonIrkuK5LLV7MVCM+/uDJCyIC2J8a0z1iwqyESgMl15Sa33QKgmtPEBnp11mwuXgO70Ud4DHWzfgDYC3zBEOk7HlA6XKyHQzb8HgGoCSQLqsxorIy1Bxie7Wx0rFaf+wr9Xv32C+56/7HbJ5VHtRYT+GJrsehHcya57PyKAQk6+vBkBZPpjPEExlwU59awg3C24W6KBsC6tqHR+MidyVG3i3rdAnAsH2T093XT+zLr197MTA80h3SfsZP2UqpCrPQ46oF317VrpeiKXTJ9MhMLkgGdCacKG/mupV9w1/vnwyGgCDCKWzJe3lqsyzLWZWe6/kc/oKzgKH4jC7oolhdC4jiuzM0WPo+cPQ2AsX1obFCTO5Jzn566PwbReiwnfTWjI4KvDoh1juh+aT+WKSYD3i8Aql2rJk+VsVQly5kkddv2FvHT61icqO7Fr71/IkLNXOi0FQjV0046oBy6wZ922Q95ICqDEaL4XWw3COcf9Mw73DFB9AqE6wZAAS8XuzGQIDKf+oVkqxt00ttAc+YT0PJ9qRFSB8xoye5Xu1ZVeCSgCLbYLVNswoncHxoeLwCzBGjBNki/4BX3z9lXgUCyIIGmhova83cRgO5Te9yLgP3MfmsBS8xs8/U67ePQOqy9umBUruDchqo8sHSd3PMfT5ifo+ack8eFHI6QEcnT5GvdOnVdXof+ptJ+BVPWceiaRHA8Us/nkACo8mzqlqmWrbFDppT5A5UIZm7CPA2Vgm3QfsEd909kKIqB1qJAKCBG8ZstZz3xHOAAiwmpDIdng1maZQAkZzsHZ537YfQrwNyxoQ+HakrnS0h1mUA1C96TdJTmORyhC3oeqdwROi+GDhkFI6bYNrcNDEDeAkXwQizPRpmnIs3OdqZPSaRFUcbchHlgie6agq2kX7Dd/+d8lUJVXuUzk8ERmS+2vfd4uvN2VOV5rSwb0y3JhgIh9wJeN3YMQCIgR78Q+nDEVYBYZUrUpbXFnM7COSdf7N4IPvtDnT2BY/h8Chh10MXQeYGS+7GGjaQiABpuNIFiECnzdWJMIUHcazLptC7YivsF8/7FgLFMqpiQL5TuNbKfA/DC46rqqAbAwIKWK+timRUBEiNGsOQsyQm+Gpjd4n046hbT84KPuYjOmHHyp92gcgDS2OoIuVIeh/xyUkaVwyEWdLrewHE3uBUDcKIwnq40HpDXL+n3CzbaKdguel5VnFJl2awaghLQBTzteZ0cjLq2A2n0M6EPh2pC57Wg41poLzZsAZNso0Hw6eVR/J8bF9YjWGmVCpGKwQLBRCcrbiSxNLgVAxCF8XSl8YDHHFPW7xeFBRwv/rGqOKUBkODzqgdWPYAM53vTASMQu4Bx9J+69OHIF+N71F1O1gUB+AsBfFqKC+4Wi4BWX+CYgOTAU36wdMVNVKka3MoBWBhPxyiuko3xkSX9fvGMkqsDlzzHC1N6SQ4DoINOe7KelWWTheziObeKCdARApD1AdVnRH048gKUAmAEYi6Oh4DJV4VoGDWqjq4XLbO5o1jBoimEPhPJmwu9FvnTLgdgYTwd2wyXbMyRKen3i2eXXB245FlVYUpVxUpGiLtmGBlrTEhVUwV8dEkVKAq3MHJ1uzRbRx+OOgDWFX6MsXJU/36lJoEoA2AKvw8+uwTEDIBbStdOs8ddDsDCeDom7ZdszBIs6fcL9ror2C75US9IxJJsEsHdGFBil4yYuUwknofJgF4XcEUfjrz+X7fKo4EJJ//PkMORO6FrVjQMeL5kJhZMMXzLwNZCt1nzDFgYT8cQwpLt4hDON0i/X7ys5OrAJVe0S/ISgFY7j9ZvnQ7I3+lyqpYaL98CWp/N+nDkZdhi6bW8An1kP3fRTLKVWlwF6RZCH2L4zDDR0k1IqeTNb2OQSYNbOQMWxtMxeqtkY6I+ny9VEz6btfb7xc+XXB249AoXv85+tIBVgJJ6n4lf6oV+mfjdDJNMH0wAVFX90GMk1f5TxlS3Fggh92DyN0IORy5665KIfCktsl+K3VsGtpVOWOMiuDCerlSnjQ2rB+n3C+pIBdulz8wqonrNPLKgwKaC5B3s53qhXVq6oDNg6sOhqvqhEr3V2VNLBjmnSSNdrOLJ1zkAu6VPRjFcFz4fXDJ8i45hG94Gt3IGjOFYA8TTlQZ/qGH1oP1+8ZtlT1MAtHK8mQg25zOZUSCLIliWcbw8wfW5Ln04ssqnHX04euiCk6/3de66MPpuAQVZAEFkw2MKFw6a1wEL4+lSBvmAOMhD8vkOkFX77feLNw14YT/ssmc4A6oOdHBEkwXlgjH2k4Nal6wB4fIuX9LzZjAmorNeHMo5Tc0OewHwDTUh9HXxfGJsYkAbAAAgAElEQVS/uvCpoAcew6zBBrdyBlQwwoDxdLZWXLDFkHyF8xGE/fb7xR8XXByAAVC1oB18HQYIT+8uGfP75SCUs1o64he8v4j6cIQ+IqkPhxrBCHjdjBH6AblQkAeY1ondukSiELmsUPpjbyp7XuvDgAXxdNZVvWCLIfmKg6Bbhrjup98v3lVwcQLw8gqA5v9zC9jErutltg8gMxDWWMBaMVkmANWFyEV6R0uH2I1IzW7ypbkQOTP5f2ch9KsFkwp0kQlDAOmxzHpscGuGAQvi6VD4RgmAg/b7xZVlT5MATNXwqQc6KGwf2U2uGV2uzg3D4ua7fDnPwZcKgIdq9GaIBPZb0YdD7hgyIFWMXiH0eQ5vXS5HcMkc++9lz2t9GLAgns7KxxZsCkgdtN8vWD+vYDMAUpcja7lOR9eLVcIP4tcuob/3AOHCdW02VTX62ApB4Mv1v24gnPy9HiH03fJ366KYHYTHsgBBg1s5AxbG0+HLZaOp65i+ln6/YM5EwdYBwGj1cmUkE7+8THLNdAHhwrUOXtcrO/pwhF4cct2oN68BMDCfmsJM/n6PEPoYPp8bH3kCkbtjji2tJJA962YAWBBPZ0WBCrbYsFoOf9pDAiENk179fkuvf9nTXewKcBSjsn7ldonWbgQpx+26otaLIwAlfi2QQSJY3Yjy5i9dmsFM/oEDMM/Z7Uf0RiYUA7J+ToNbOQC3e0WBBm9qLad6HICG1ZK1XB5PoxnuOOIcxSXe/Of8xHV/P+FpwN47gKUpYHmuSve0pKZgCKSq5wqniWE1WZz/xouBm74KTMwBI17lVBXwtWSs+8/vL45Ff3vhpcAnvwos8d48DZX3M2hx9X
5690IAnu0IIO0chu35AOgLL0yuG/jOmwbg028G/mNz1YWdETbm4I5BrFlov+EtD2wIo7l+Atg8D2xY7iw3V5diEqO54mnj6XdMAYcU+6gon7A3NSO2qFjlyZYDkAX6uD5Iam44YaUfVNDNxaJcLIPXcGGpfi6PnZdVD1wPspQBX/wl4OaNwN6Jqg+xwrxslcVFuYJblehkcYYZGPS3L20BxueBcS8nwg5H5kZkx6TQSbXFZcCQKadx5Cz5mPurAFxrRaa17pAR2PFC+ElSHKQ/0QjQcgCyGyM9v3SnsDBRJgL6msWCf6IfWeUJac8UFlpY8500DcCfvgb43hiwZwyYVhd2D/VSrKGAmIDnBkiafEcN9cprHgKMzgNjS1V7rRjRlceyrqif6KAkMgXIM+6tAnDl+zSL36O9+U8p9jGHQo285/2XA/AnXeNnKAorDXH/AILwbSvLEz6Ql2+cAf/3XcCdw8DkKHBwpOpFbE2wadzIdyh3jjNQirYWEwYq+/zJwMh8pf+xKNSwM6DZMmzNRRbM2K+2Ii6TlFrAWfd5V3i/F7IgT2LBF5LbIdkqxLPWvtzlAGQ3RpU3Y7AiixMxLOUB2t7pKQ8M0qCTnp8HkojJgNqaMEJesQv4AR3Iw8DB4QqAs+6SWRiqgJgY0HVDAdBA4Ba4xN7ndlSFAAjAYX4IPO5dBDMAdS2i+Jx7XTf1eEdTDfgAQnR34p/wQkRmjNAoByDT/ugFphXAmjAEn8qaPQAgZCs0lSckCNmVigEbFMsPBBE3DcBX7gLuawH7hoAD7EM8DMw48AhATrjtQwiXoqkTEwWd7LOneXNCbz6Tiq/TInb2M8ZzIFrTQbGiy92oGz7pXl/7jvdAJnb2470IbB3T77Sai+hyAP5voTqW6sKwFAc/TAdc5+3dvcsTrvPVYSK4SQb8xV3+6IaAqSHg0FDVh3iOIFTIFxtit9orL5Z/LD1Q4s+B8OnHVuXwhhdd5DoLGsgCCJ04q66X/Ju/vSaeAxDPvbdtmdtKDV90gVEPIl/xySkviOhmAEjrlzSkwj40SlQZYZ39I+8JBMx8mZryhOsKwqYB+KpdVSDFvhYwPVR9BD7uyX4SwRS59nNI+bRck/DzJ05v12M0nY8fAk8iWL5BB5qASPGRCi8EVjzv3mqpkC9ACrrwhKukB67GhpqRRowQMqCiYbj8oOoHeUWpdYIBAUj8c8WjrjyhNIJ1unzjDPjqXdUjJAAP8TMEzLYq9uOHICQALe/EwWe+QgddAqCzzD8+vgIgg0qp+5nYjaDzCgjmnCYone0klqP4JSgvvK+6LoFPoFMlkPGh+0rPWta4RHTNJJQz4M8EAGoNTPVU8opS64CC9zoAWTFChcq7lCdch6s3L4J/2QFIEBKA1P9mHIBmhPh3Ai354RyAAmWsR/PRs6vOR8Z8FMPS97yxtIlYgVB/I7jC0rIKSfLXF1EEB+BFFjQ3jCLA49OWsRTTEPzvzQEwry7VrZ5KwzAQAPssT9jw1dcHgCrORQCS/bgn+1HsCYQSveaHkzvGv1scgU/6R55Y1YIxhvOm1EZekQWl8wVDxJgwc88QiJc6AKX/meHDawX9z16M/Em7bO8Q08GBP/jEkAEVjMBoAFWXUjRA3KtNwOBXW3EkAZhrALktpC6lKtTV4OU7RHB+3kHWgv/zrnYZl2kCkF4uF8MGQGc+MqEYUCA0n1tkwxbw4ScHAHr71Q7W4++c8czwcBAmHVB/c7Bcek9b3FuwbdD/kjGWgzJjQ3thGmVA3jhfOyU+RxB6FamOFp8NrhsTgLy8Cpzm5QlVptAU+6CiNgXCaIQ0BcDYV8b0P4pi30vfIxD5+w72C9aliegW8MHzqrmh/meuFhYi0pKbs6D9fsh/n1XFMrYMbPgUByCZz6J+uEknDA9AornWFRb01WZEsACoHhOqyC7wdetT0QAK2KqOb5MCUvPyhLE0oQxzqaYNXL5xBvyVXe12vByLADjXAvgxBvSPGFGMIjCmJbEW8HfntxtQmxT0cmxp9UPAdKAZ1upA6EB7qgDo6oCUxXRtPVSpAwJpnUhuxAqWCCYK1MBExZljY5S8SYr+pxAFAuBayhNG26jw8usCQLX0SAAkwwcAEngyQizaXoziIli+Oe7/9kJvNk1LmBMe9ECO3XRB7aPeF0EYHNVPdT8gj016YBcWtBfBVYJuz7mF7VgGY/pO8f5WdQ1/7U67nIKNS7j0wIbDPFZsyNHHY7od/xdlEHj8CcC3TgCWHgGAPSxiSdt4312u/8SPAl8/Dlh4pDeZW2PD4J1c9+uyDaIDkgEJQKnTfG/N8nUAmu5HUnMW5ARbPfEuIHy/ACjRK7FL5pOR4RaxgTHofKl8r/S1ZWBnAGDKefbn3AFIPRPXB7sFiVQimKVgGdl5ooNwLQ1/1U+DQGSXQ9r5Evy1q9rZbP1lGQDZsPpzI8APHgXgod7qUx11YtBbFzC+/C+BL7SAWwhgdoLkONSLqy5oLogYft3ZI1F7EAC+phsAnekokhP4HIzml/PvthQWmPB9LJ7jxkcSr14jWj4/0wFlgJD5eoDw6fe4DzAYPHokWhHJZ3TFSkn4h7YOSOBwEtiMTv1aY0uktFYTmI2/43EMQmCuAJmUE0gmVD8EFdPpdnxhVhqzDr8F4NMtYM9Jfg98EVTeNu9Q2OFZBX7vr9vtgm/lcezczZ61ZNN8DCvilYCdPXqNDQpAlfGTKm0M6AA0PTAyoMSx64cRfPQHXsniOTI+fEWDFGp+Qb9BeySRBV2kpl0QxxGAlHDmkI56X6z+EP7UDYSdRgh/IouwIZ36lHabBE0GJ0r10Rgb/xA/tt/j/6aMAf+7R4CxzuBXWRGULwBfIrY6UNfpvLae7n0I+LO/reoLMqiVMbW38oUhkNkQIzZO7tIweGePcmWlAFTjAYHPVGwXxWoLYblEDkLuTT8MDPhXLJ4jALpaJB+ggU6xfgJknT7IKXIQXh4Y0FZCog+wxiUTwSkXUbSMV1rB/A31OXWuFpPUda/mRHKi1e6U+hA7Zq7l+A+UAfDtHg/LrptkQpZ727cRWOL9542Pa3rOvuOqagUltgtmJM08j4/PILbIDKz6w5PAHsbraTnMGdZWIwIzxIfeK0rn578J3LAVuH8CODRahV/FFQ/1IumIvXP1QudNfyNT8oVqcHviPcBd48A0g2RDuoDqHdb2SalZAdG9dnfDkAE0gXnH5ijWCDbKCq5/MRiV0QD8HgHQ63jG0hdsLGxA3x9Bw1Asli7hO3BwApgng/Gjvq01IHrXJ7q3Cz7E++YziF2rs1ZLZ+8H9jJsSoECWXj6igmR87aLgfbGq4GvbgLu2gjsHwdmCEIPSI1h+SkCRjpfUC3iNWcpoRrcnrYbuGsUOMBo7QBCxSTG/igxVcBIVGPWM1h1JYQPnyKNExGZMDIJ9b66eEBGxPDY1Y5nv+GCjfGAxD+DDpiawphABWZPjwNzNLAEIH4XCH0M7/5c93bBfI8Yk2cgVAdvdT10ifDkBWC/r9lGH51NhIsnsWHOfPmEUKT94WeAG8eAO8aAfWPAwVEHISNQlKQUglJjJExqC+H6Nq93kOpUg9szbwLuHa66QzFWkaFieXxi6hgVHOMCYGRuJ+5V4jYJIDKI9KlsAvFDq8QDrnb8NWVPh9EwdFkQ79TlSMIsN0Mi5s9MoOGno4U6f3YAvefL7Y7rvdoFLxOANSA8f7xSgWmd0kCQbmZ6mTLEnJ0UqWLhUkxlrBn6n3wWuGkYuGukCsufGq2iojnRFpafsU7MDxErJuZhYCsJosHtWTcBe1oeq+hxigJgXBrMmTBPnJKLrr+VED54ibHYvZos8sO+DNcrHrDX8YVVyglAKud0LtMjFPtNMz6QLDY7VomLJd671AEH4Xu+3g7nWq28ISvX58/hguOBg8vtFQvV/hEzxfqOevuTfpjri8vAWz8L3NYCfjBc6ZYHmBcitnFd06pxyb8W4gPlgonBqffTtdTg9pybqiVNBssyUsdUD7eGO9amnf3sXtxQipl7Wg/sD4A8AwHIyZMYky50Tp/xgN2OL8y051qw2hXzwRCEdT2nmck1RxHG+w5jeO9NFQBpR6ldMIMXlFWgVndqF2dVFsJzuOgRwMElB6DcI6rznemD0RnbwQiSRS3g7Z+tVIl7PC9kahiYZm6IizuLigliT/VoUog+p8P9l3wJ7qGEanB77k3VczroUToWLCsABud4ypaLCUoxf9i/9w9ADiICULrQRWuIB6w7nuZrwaZwLBGwClSqSyz3AhHbaRGEFGOmC44D72UVgjW2C2Z4lIF4ArjodODQcqUGqAxfcpG4mJVuVqcL
56905tbs2z/veV0tYK/nhTAqesYNHdO5PCJZos+WuzxHJIViuXFyJxupNLg976ZK2lizUKodilGUgzyGhokF8yw5Mf+qRkjdjfuDtwkkm7DTkNaBaQ2ox1q3eMD8+B6O3H6em8Kx1Ccx9ptWl9iYIUAAWrI3I3nHgPdOtsO5eOuxXXBdj0V1vOL/so3Cxef60tlSpYwveKf0pAu6ohfdJ8k4CUqgvr5jV6VGTBKALeCAh+VbZLTnh5gu6D44A6H8cVlkNK95O1WkBrfn31R5HSy+JCwPplAxRegE/2T+AloGncNmbQyogUQx/KwB4gHj8YWNTwRAOW0FIIIndoqNkTAxz/bd09XDGLBdMM6/pLKi5whAX60gCK2ujxzEAqGL2pQ1Jis5AJEAFHvTujYAKjRf+SEugm1d2COQLU/DAwQ44caEw8AtZzSIPgAvuKkdrWMM6M7xCMBoiBn4YpCE2NCfxWAA5MEuwvCCEICwlnhAHV+YORfDsWJGgPpMKwg1b9QpFnzHbD2BK2JGul9s8KkYW17vLALQRTCBpzXZpS4gtCXXMAkduuAy8E7PijPWprXJ5CR38ygw1fJDohh2BlRAgq2OeN7uTWc1D0AFNtmL54ESBsCaJcLkDajxj5ZXRiCIGA0waDwgjy8sk5+HY+X9ppUbJSCp6TnFCMXwny1WAFQ8rUAc2wUrRL6mXTAefWnFfnz3FpbagQKLAqAzoZjAKkkpXkNO5GCEvOMLFXOnnC4xIKOjnQGNdWSM+GqHQGd7JSsxUf+JzQLwhTdV4je1nQvr1MkPGtlf9yP2Dy+gAqZ6rQytfvdHSDxgLwBF8AmAYjHWluEDiKGMiqOVvtejXTBOuRSYJwDJAARgZAGWL9Nk+IM3SzgTydE4eec1nZHbtDaNAf1Dpd/SMx2END6kD0oXtFhBXmcY+OY6AFChnKnzl7NfdMR3qCAae2B+VVMYXASvDs3/X/zHJZcB84vuiqABEo0QPnhnwqQLyRURmZBPytnwHde0M1vN2lR6picoKULaxHDIEdHkW2iWg4/7b5zb7DSQAVd0/griV2JYojfpwRGEYsGBrOBmx/OgP5sAKANkcbFzNWTRnX/GSGImMYH/LYlk+gGvdT+bW+SWH+Ig1GqL5QeTtR2EYj5LVHfjw/ZDwL8yJ6TB7UU3VVoTjTYxYDK+Ivv7dzNAZIxpZSiU8jjKgIWTcykZkBawDBBnQdMr5QeTKI5iWCB09AmEb7+ucnOQ/aTPWn6wuzyS4u+R0Ob6CUGqJpIDA97AdqINbgRgBJ69CG4Jp6q/ckjXqB/RKla4WpkO2ODgHoynigA0JiLwaNiEt95YQKJ4FRC+7brKzRH9jZbN6iJYuSHm9I5iOAOhHNJfZkh+gxsBKPbLu3+JgaWDdojhMO5kkDWSlNTg4B6MpyIAjf3IggJgMD4MCARjFMU9QCgAykhSKnUCYHB9JB0wy5aTRUxmup4h+Q1uAmDs+hpXgFLnB6ULONOn5xACNJqxghsc3IPxVBGAiQG9aLeilWUJW1FvVXEN0TKp1C6At19TMSCBpz1dHtT/JH7N9yaxp6QkF73KBxYIr10nAMproB44qQGTj6sjUrtOFPtLeFQHLES9AdDFrq1E6M13MaxVCTNAXNFThIylLcor40zxtgDAPKuVwDMrOKw+SBTbtR2MND7sZwC7Qvm4wqHa4T/uIrhb+7n0EgbQdTijoyg+agWXT8llDsAFWr/B8qP1K7bT0pvtVwHhW6+t2C/m8svvZlawi2CKe37nhFtapkDnILRqBQA+v04AjMyn79EIkXO/DnzyCBwVweX4wxs9B4rRZgyPVFqykgDd+5JSpBU5r0vHyHz+jsc3ub0KABsZMCyQgeExKyFPVIz3lmcM6OfPAGCADYPE67Jfs6h7G0o+xvi7oyK4cLZfOgpsXwC2Lq9MwuuVERonKn4nSJrcXnQKcM7dwMMXgYcsVxkSebJgzOWPqdB1ad2f3gpsnwK2LXWeR9m3danUIV1lBSCPArBwtp+7DThuBti6UDWDmWA/DvXk8LRptfPtNUlihYZTOPCi04GH3wFsnwGOW6iAs5n3GeJJ+KLoE+9VDClQ8R6vOQHYegDYwuY3S6H/iJ8jb11ck0q9Qhoc9QMWgPBZJwFbpoFN88DGRWBiqQIgWyJY3lPozaGJ1KTEPh36zpTkJrcXPRE44S7g+Cng2DlgyyKwaclfFoIwvCwx9Zn3Q1DmIPx/2/sSaMuusszvjfXq1ZRUElJkKsBEGQyYhJCBSkUqAW1tsBdpuxEVaBzowXZqe1g90G2LotjQdmMjKqtBxQERdAWUAkUlZNBGkQRNyIAEMAkxpFKpqjfUG3t9//m/c/+737njPq9uVeqcte66b7jnnn32/s6///3v//++Tz0dmD0KzC4DM6vAFpd/0L3Gh6yTDgnvLwKzAWDGiH/ThcC2OWDrErB1pRgQisIQhAa+AED+HEEY6uNLyrRnZLSl6tSbrgLOeBQ44yiw8ziwfaV4UGbdegmA5QMTLFlqsfn7XecDW+eAmePAltXiXnkuZSBkRcm4UGXtU2uo3xsAZgz6y54JzMwDWzkgBOAqMMVBCSAUObh8QuN/CiTgcWAuyWhL1amvvBbY+VgxbW477paa7gIBqCnUrbUBiQuhAKDUot13IbBlDtiyBEyvtO5VDxvvVfxW/JkWNFrCeK8NAGsY7BsvKQC4hQCkJNaKy2LRIsg6SJ3IQSe1onKKC2CsOYMeN+0Dtj0ObDsGbFsEZmWp5S74g2Ir2uA22BScAJGA+dJFwPQ8ML0ETAUAkgDTPq9zdK/+sMWpPF19NxYwA4g3PtsHxAE4SQC6FdSgmGWRRIJLZJll8EGKjHiX1jwaN10HzD4BbD0GzC4WrsKMW2pNobZoCu6CLCDfCTqzgg6sr+wFphaAKQfgZHKvpRSYg7HN5XCL2AbAZwPrZGaj6ippXhgn0kqmU1woxnHedg5AATuWHig2FE1uVRwoxoX+Wcbg89S3AqCKPONcCi8oPtVP+9++G3j+oSK2xRBFDElUxbTS+3nvc4FpDsjxllXQoJg8FgdCQoGJJTTicLcQ6vPL6wbg9cDM4cJv27oAzFA5ky9/UOSvmg8oP86n0dICBn25JwjARWDSAUgBHN6vfdbv10AbARh8X91vDM2ss+NvAECKPVLCsHoyUgRqrlbnRwB933OBc+4DXrIC0IEmiLnE75di8HsyAcjzWUVGUi6uICMpVwwJVMXdeOk3XAxc+Hng+vV2esAYw+sWoP31r3eLcLwQBeQUrEHh4Jo2h4vDmJPuAyMLGAeEn7uqbgB+I7DlSWBGCwe31Gb9aL20kGDb/EGRxY6WTz8f2wtM8l4pgL1SgM8esHCvsuylME4nn9cfQLtldg6TZ0kUKorAfij23vAPCmqp3fcCl60XFINid1PlZrf41/dnApB6wSQjutUfIDJR8CGIQOwWEH7DywpKrWc8CFzqRLHkVYrB2jS2FQH5vkuBycXCAlIUUAAkCM2iRBA6+ARCe7DjYmQduLYTleiQ/XTTS4DpI+6nLhZW2nzVCEBaMLd+soIGqjD1ampdugiYWCpeBKA9bBJC9ActAk8LES26SqsftInLZ44dQif4Igdhym5WLrPDyuYH/7HTCNwDnPko8LXrBccjQaioe6BiKad3+QY/MGTH6rS3OBvCnQDuAIyqhiDkQ9RX+29yE3on8IwjxQPI8zkTiApGU3oVkD/4fGDieAuAdMw5MFQjEgg1DYsUku+a3uI0TGBfV7PotwHwaOEmbHEATvuDIutni6UAQoFRIFRYhfe/dhEw7tbe9Of0Si1g8HkrwRcevDajz07gIJ7n05rYyWIpb4ya/7vv8PRdFpj/LXDmkQLAnA4jCCOlTBRN/rFMAJKgkkVHpGUjySSBSFeg7/azqk8EgbSEq8UDRACLKDXSyaQ7Br//DcA4LSCtwnKhTEkQcmAIQhtM+Uaajl0uS9NatITXWzpzfcdNB4DpY+6nBgDaCtanYLN6fCj4u1ay0QIqtML/EYC61wSA9tAJeP6eWsAoDysFpg1eB0HIQRCIIkVeCqQf/05P3WCB+UPA+CPAzvmCaFWDKEuYcl1yMN+Y2dckqGTeHPEvvWDSNhOAfbefX0A6rS8CUw8X9066bFIfdqMHJID++DJgLACQumyc3gyAEYRRKFCLD1eu5ODLF6QvXedx0w3A1BwwxdAJLTXjd8seQnGrZ9bPFxLyA7WIKON63tYtCQBN/sv9QPm6BkLp0vl9t/m6ietR6fbyBA4gnXtORwRRpNnTtPpW6gWLH83lKqcOFTEnDiKtoHwy8RNFhrefyeztbnrBfbWfgttsP+kIyO32ELD1cHHvInrlvWs6TsnB7qAUlg/suFtAWkE55zYQ0QpqcALoNCXTEt7A3KoaDwGQfqoAOEUBa7fUbKctltwCajVbxvSiyvoasM0BaBKwwdKb9fN7NfcqBWGiSWykWXER0umeacUEonQgCKRfIgDFjya5yq8Wfsfs8dYgiuMxgpAg/vnMzu6mF0z6Zj5APdvPQec0TEosnvQosGOhaLuIYvnwEYSithE52F1XFAA0p5yigD4otCqygFKnpHUpLYP0OcKURYv6Mj4MNR433QhM0gL6QongawOg+6rl9CswKoSkEIxPyTsuAPigCYBmAXVfYcVf+n0SRYw6dP1YwNgHsgSajiJP429RrpWOM6cxDiJB6NINM4w7LbUGMQUwB/M9mZ3dSy+YVG0EoBiDBST5ddZ+PkCsAiIlQZDa3LVatJ0WXG2PbL98AB+4omB3oP/HgTUhmGgBfRqWf2TTrUSjExDSP/qWzQDgfAFAWyzR8rkFtDAKX75jo6nUguZxZ8
5690NByHbvvqBQ36T1swcsBaBAGGRg40Ir+rt9WUDhQ5ZAU7Es2e9LLzglqHRxNkbeuW+oQRRls5jaMjnK0a9ecNf2R4LAwO829kQB3LTtEYQPUwzQAWgW0AGo8AQH0ljp/V17pm0KRcEifGuNOnocO1rACQbKPXhs8TtNwVr5uh+n6Zf3wDgu29g2FdMtOc8B6PdpFj08ZFrplw+ZA5FTvAQQ0/BT36FPDkRqBT9Jag7xYlQItY0f88j78sZzCcKPZlrAQfSCK9uvB4h577SCotUiEJ8opq8IQFl/PUBPEoBLxbRE62LSqG4dFB8r5bHcOtiOQSqT5T7RKzYDgJx+BUCCTxZQCwhaQc9oKcEnEBKknj5FsJ1LAPo9xoWWPWDy+6IIoqbeaO0VA+zHB0zxIQDKkn1GgtXiRxMIAx0Vn0Db+lkuFjLRCt5WEwD71Qvu2H5OfekD5FaciQay/GIbFgBXriwAyGmJADR1ck3DwTE3TQ4B0LetzBJErTYAr2BBSI3HTS8tLKBZPo/fWQDZp197Z3scjGb5BDp/L3+njMweB6B83Gj9wj3atOsPWin9WgXCFlVO/3ctf4iD8XkBkH5USlAZlNPZAQqARr5vxu1yjmH0givbX0UQKI63o0Wun/xHuR8E4VnPK5JQLd4VNttTBvK2uoiKOUf/f+GjwMNBh0NMV6J0c0NpcRv7mrYv3kh8/uHxYp+bVpwLp3R7sts2YzouSq3KGa+q7+x7Co4nazAerRKsVlV1QitF59dyyFZaYY0HMu9mWL3gtvZXMbymBIFMZ1ov2h0B+LTLisxgW+Eq5uU92iZ72ud9vvR+4JFp4NjkRh2ONi0OB1/UBCkvEYRhfuNs4OmhhiPKnFQlx6aAjMnSXJUAACAASURBVPjmz1w41nnwO4cCIBvBwZgTAOUHRq3gyDExD4zRGVYEnpm5LqmQc0M5esFt7acFl0SlHiBxuTkYxxdaihUC4QVXFu5FCUD5QtJl85sjGA0ziQxqeu/fem+hw0F2fLLQGxFlYMRvo7v1WmIVtpt1DFkXvOR7LwJ2HSkyoZmEypoVVe8p7b6qEMnidGG/Vl/L2aPOIwuA1pAIQE3DAmFa4j9f7CPaFpCHKujr5xzZesGdHqAqKz5X+FLRAl58le+jui+kTBALMcgZ73CDBkpN2/7+bfcWOhwUyCEAjQTcAVhKdjkPc2RajewKyu/n1//qJcA2uhBMRGXQOcn9U6JIOjXHQqSYOsVoQp1HNgAvz8yny80H5PVz9H6RqVd849WtXQ/zA0Ow2ayGLJ474L0G79vvbulwkJi8BGCg4S01SKqofoNvSIC+5zkhFUupV8rUTpJN06KpaBkFQm5M1HlkA3AyM5/u9Zl38zrk6f0iU6/4hmscgK5ISUtCTowyDqb7UxwsqFJW3fo/vbuIBJEZ1YRgyHwQKNi0KEl1OKTCZJdxtPDn//v8ooaDaVgqFyiTD2IKfcjZS4Fo+7g+HXOPv84jG4DIzKfLzQf8KVfI/FNKrQ6h94tfz+vOA9cGAAbrpylY2SDlVTTt+uCnV3/V3a7DQQAysJAwobZJgUXi78Qayhd812WeiOAZzEyUiAkHMeu5BF5FwZQAWLPwknkLQy9CrPMy8+lIHZFzvN3T+YbV+8X7c64OHHix74V6zIxB+RJ0wQ+UU992tYoFy3fcXcTDxQkoPsCUhFIczKVCegSg5B8A/PILN9ZwxBSxtiKiUAOi7JW0dLTustF8AGbm0/1o3vjjnSGdj+lYlGwdRO8XN+c1wABIoHk6k61yuSCJITq3jDY9Vx0BqK++uwAfX6JkI/hME0SC1EGguiQ+isqcQRLrF6/0jO2w+6FMnZhyZYsQ1W50qOHgPX1NXndtODsfgMwHzMin+0+ZN0S9YOllMzWfLwKQSS396P3iY3kNOLDPM1y065H4gOW3p4uTDkB8zWdb7FgbdDhEgJkCUDRvogTmd/vPv3BVAUBuvylNzAAYi4hisVQnEHoIqWblrxqm4Mx8ujfljT+YjsWBYgIOc0oJPsq1slCpH71fKybJOEoAuuVTRSCnYlmU6P/Z4iSJEcbLv+Yu9/1EAh7JKEXDKxq4ChUiKymRbwjgHdcUWTARgLYXHSr2LOU+BV7MVwzxwOfkOWybYAGZD5iRT0edjpxD6VhcOQ6j94tP51wdOHBdMeXa9OqWRcmWXA1XLUIUH6zyCwlAs3z+YBkfs1u+VIejJEF3ckrjI9T0y/aMA2+/tgAg08VURKT8vbKMUgAMIGzzAcOi5HknHQAz8+l+MW/829KxhtH7tTz+jIMAJPCYMULAWd6fvi+EY9ouoZBM/Kx/4LUBgFLgNC5o16FrE8JJVJgkiFhaQQBv3+dVbMrWVsC8UxFRkjjaVsW2DtRdOJ/vAyohVYK7A+bTvTdj8HlqTMcaRu/XxHkzjgNkIOWuDr8jnYYDKDutgpUhra0uAlAyCCUAK8BXcjBXgLCk/h0D/hcByDxFAdAzoFUqUBYRJTUcMWdPP7ONL6i5bLQeALJRQ+bT/W7G4AuAOXq/lsGdcRgAY+glLkYclJVTsa6ptCX3uQjAKINQstFrAZKIwWxQIhIJuovB/Nx+r2LzFCwlj8Y0evl/MYk0kieVtcvrwGUnHQCVjjVkPl3mItQsIPuElx9G79dOzDgMgGkAWlNyBJn8xKprBRC+zgEo4LWRgcdVcOCjjlNvmx84DrzNAahaFZWLygKWxUNibIhTcPD9BMLLa65bzreAMSGVoXvJ/Cgh1WUfO+XTZS5CDYDs9GH1fnOrIDcAkABTTDCCLYK0Cwi/586WcKJUiEpC8CCBYDsiiSplqUIUmOjf+o2tIiKVUJbgU5uSWl4DWwX4+PcXnrQATBNS+8yny1yEopdcay+930y5YhgAg+9n2OoUeI5TdQer+32fdhmGoOBZanBo+g1yEKU4dYgFSvqB//vZBIBt9RshkTbW8ZZZ2hUgvDL3iU3uux4LSBM0ZD7dPRnTH08VAIfV+2XAOucQAMuVcKfFSD/+IAABsEoGwYAoHZIKEEYxRIHwLS8pUuhjFVs6/ZZhIVWyxVKBBIRXnbQATBNS+8ynI4tBzkEACv+chlUVIKE/5cRGsWmlKfIzudc3APLQSlg3E2OCyVRc1kpU3DgBmKoQsWtlBcswjPu+nfTYtBL+GQdgOf16GCZW6pXlBCqWSgqJypoOAFfXXDifbwFJLvi5HAjlnUsiIe6AjOp4iQNQHRlT2PlgJCUbbc2s+v/hFwFb/q7gm6HlYpBbmTV2sscQyy/qFBj2v0/cAdz/HGD7NDA1AUyOOU+1CwWOewNjKj6/O03F1/WuugW4/XJgfBoYmwDGdH7IxB5kLPIB+I8AfNwZgga5ck2fJbEm8V9zNWPfrasbgMuPAcuseJ8Exsb9FdBhA+7gaQNKB6TfcgCYug+YJT+g89aoBDMmIMScP12uTKj13uDv8zsKig/uJ1uQOsnojm3qB5P5ACRBH3OhPuzzRN9DV88HqQLEWPJnvTy5nm/t/1s4BcuSpRZtGAu4fi+wtBVYEyccrYwn6hF8/FkJp9bKxAKVFsn/d8urgbHPA9NPOEOWl4+2cfoFHhfVrJTZPKHSj5daOtup6JyCpPx8rHWRVQ7WOlrYCMx8AHIzlxkALPD9c0VB+x/A3E/+E2fUYHXdF7KTGwdvTd0AHP9r4PgWYG0KWBdfsBdsMPfPrKKsoL9XAVLAvO2fFylCE4cKliyrDVZNcGS1CqEYhWFiAZV+XntaURdTLmpCEbpchTYLqi6NrkMCzLzt5Xc4HwyJmmkJ+Z73jQOh4NWeDUZiK1K08f0EXt7CMHVawIk7gaVpYJUA9LI1Ao8bzKX1cytoFtFfpdCIWz7rgzHgth8u0oPGDwETc8CEMySUzFaikgtlpW1Ta8JqNba7lVljSRgW+Q6ZP/57WQvj6fydBjXfAjKbgEvMLwWCvhNoipgNpnQshlS4IGFWzIk6ylWwAz93ETLxGWB5ClidLABoIOS7pmGfG+33YAG5mND0G8F4678vkiPJczNOAC4UyQm2N8w94kirFlfIAl7i402d6dbPWWAtrsjOFiuCvAJZOQE0pHTFsckHYDeCvhNgipQNxoAz8/8IPr5nbvH2jd+6AThJAE4AqwTdZKEBLDoDgU4+YVkPHIBoPwareOt/BkDexsMFAFnbzNJYm0IDnVwbt4uyur1kwL7Tp+iZM/08WT9Rc7DHUmuYTr/x+6o4ovvu9fjBbgR9JyA+omwwxvZI5ULg6ZW7y9FPf9QNwKm/CgCcKABovh8ByVy/UCtJq2f+X1yYJPGU27lIZLbuEWDsWBHesZeDz4iURLUWa1TE47LqK12fZmd3OXidFctqm92KatVs1jAEsNv6sdymaa2g8+xUL4I+Pn2beCgbLGWHI/h8G3oTr45iK86POlbBU9yKI/AcfLR+ouQwH9BfmmbLlTHboOnZ/T9+5vaf8FUaAThXsFOQ45mUcgZCWTAxe0UQ+urYMO1/37GtxQmoLCBtRSp30LrDp2SFdzYMgk/R+VNwvwR9mwQDsaspGSfJgYDYNTbp8psCQFJxEIBkQjDrxt8dXCUIY+COH5MVFPi8SOn2n/QYLZ9Gp0cxANIP5IvAkzVzxivRydnKNzBa8fddM84b6AFyAriMF2pajk9kYIeoClXmA3AQgr5NQEHMBqMVFMNaIOayNRL/vhlH3RZwmhbQQUcAasrVVGz4EtjCu/3dfb/ID3PbT7uKAZ/MhcIC0vqRTo4W0IBIEAmEtFwCYqjW03bcmdwBYeoWgetUbrR8snrloiR2drpACf+rD4D9EvTVjIJu7HBV+781X752Czj9lwUZkTEgcPoNPp5Nv4oBRhCG6dd+1DkMz1JIhR1BAHJ7zwqO3fIRRM5tmDK5CoQKsSgOeBYBKFZULTqcB9r6Ni5KYmd3WKDUA0BlhNLM8EbT1Q
5690BXBU72aI5ZjUcVOxz7WLkQ8d37vsart/uA6RcPsxNSAtAXHDYNC1AEpf9s01kKwuBwGU7HgVt/1jtD1e60fgQigSe/j5bQp+KYpGB+H62jT7P8/ZypBIC8Dhcx8eY9wF015abhmnoAyJ5WSrKeNgKO9SHxnT/LSasJBim5lRjWBEIVeROInKL1qunybRawLgASdEy74qjaNNzJCgqEEYzBGvK0297mAFSHEIB6ebKDgc8J1ksmV8t29f1en6L5v6cxIK5iK6Xne/5jCTiFcTqVn/r/tWDPWwXnEPTVgIKUHU7ljASawKefIwDpMdRxRB+wFgD+RREDJABpwSzz2c0LfxczVjkVKwaYgtBBezu3SvX08d39P5uO3QKahXMQciourZRAGKZWar/YZ1xXRPe8wQr2AUK7TvbOVTZBXx4MBECRnConUBSFEXT6mf/TK+/qmzAF/0UBOPqBZYF52HrTFCw2LH5G8UCzJEko5nZqmRnPh/uCXmpnVpDTsIPPwKApOaSA2QLDLSHf97iPx0tpISLfz7bl4iFfsUsnj+HZWEeOYDCDnDmCvZkEgedcCjxGseIhBYt3vx049HwMLRh8gA9gh2MoH9ABqKJzxf0McO7XlSAU4HzhYYFq+5D7hwBu/98OQLlIBCKnW39SlXNY+nqeiq2dkQg+gnGPb9/ZpT0lq6MV5D96gLCwgDmCwbdnCvZmCgY/dxy47xxg5SWuUjigYPHFbwA+fyGwfr2rXrMvPB+vp3L3GHCgi9JOHQCkRVPppeUBigXLFymyejYTB4YsgfA20ofRAlYB0FfAlvQqP0/TsX5PLOB5DNu471cmIwiBaRww/F01J+mz2pqChxUMZvpJlmBv3iTocsW4dzewfhkGFix+2febXDAeJO/YEILBB7pU1g8LQFo98QASVGYNQ6DZfEG3fnEqrgLhbf/HV15anbkFNCvohWSl9XPQ2XTM/2s3I4DwPIZwBEDfgitH0Ek6N6x+u/iD7T4g/YdBBYPpWHEaHlqwNw+AQa4Yj54JrJO+aQDB4pt+oCAyYvOPEIQDCgYfeF/9U3AbAMX7ItAlVtAspKZdz5SOlvA2pstxjES3wJ+92NgAGK2gwi78QoVfEhBeQACqNNP1RdoA18kKdgDhxkUI/zKIYDCnqyzB3jwAJnLFOEIW7QEEi1/1Y21ywVglCAcQDD5/Efj7M4CVrZ5AKlkhxeQUaxBI4nvFzxf8IfCVC4HV7cC6ZEX5nen3VX1vAGLZq8ysrvHY+QBwbGfI2E6JpLvdX+ksthpUvQrmX/sVDGZVUJZgb17vJHLFeGQcmCdVb5+Cxd/5xjZ6QzzMLOQBBIOfTV2Ps4HFHQ7CLQUQmUrV0rgKJMsCjsxGAqTn/hzw0EXA4tnAyg5gbTYBorKkUyLnkB9YVhTxu+kT13iccwtwdBewPAus+b2ar9xJAafqfgMQO4dh+J9+BHe5gqZZZzYok1JJUcpaR6bp93P+W/N6p0KuGIemgEWKgPQhWPxdP7NBLhiHKYHUp2DwpZ8rLOD8tmJQVplOLxAqmbRKC6EDYC7/CeCRPcCx3cDSrsISrs04CPm9ArZk55UvKAspYLqPaPdR4/H0g8DRHcDyVr/X6VabLHk2PhjpPVZY7d5xwF6CwS9y/4LbbVyQsEKIufGiKe0p2JvXOx3kinF0GjhOQY+oNRtljji9TQPf/fOV9IZY4Gq4D8Hgy/4W+Oo2YG5bUUy04vUcLCqSJVRWszJbNgxSmMau+q/Ao2cBR88EjtOqbgNWWaTkIFz3YiWrF4nAjtN0nBZrJnU+/8PA3CxwfMYB6LUra3oglL0tps6wlVha5rLiqd9AdDfB4Je6U0s/0BXTDYh80Sr2FOzNA2AXuWIszABL1JaKWq1R+nwGeM17OsoFY5XTVw/B4Cv+Djg0C8xvLYqJCECzgsxmZlq9T8e0XGUyaUizavPtxoFr/zvw2BnA0Z3A8e2FVV3x6c4sqwObckeyhiXAowUSADhD1XhceDMwx37lvU4XxVN2n3rJIocygkr/Vbs7fe+EdBLcfaXXQ3IPWIrpBB6XlnwpR76jYG9e7/SQKzarxM7qJFj8mg8UarMV9IZ4gvNDD8HgKx8HDs8A8zMFAFnPYQPDl0Co2g4fpDZLqKCxT0/7fhJ4fCdwbFvhRiwRgJruCOwUgCpeCvUjZmEFxhfk9W969kW/B8xvKQqnVgg+B6CB0MsI7P70AHgmd2n1NQ0rv7FvALIlVYK73MnQCDLThSGZoDpuP7uCeuX5n8zroB5yxThGnQ0CgyBMxY63Aq/5aBHG6EBviDlOLV0Eg1+0AByZLgbl+HRxnZXJoqqttA4ODovlJZVuSjTQFtq+NwNPbHMAzramdVpVs6wEoPtdNg37wJfvsYiJP9NFqvHY+7vAwjSwxAeNxVO8T6aNVRRRlT6hHrJ0Ovaw0WDJCKng7g86APvNB9wg2JvXO33IFWOBgn8EIf2nRLD4tbe1+AU7yAWbZeskGHwVdd2mgAUCcNKnJgLQrZ/V9/Jnn5JUYmnAE3hCmv3+t8AWQfSzyPK/POOgJgDdsgqA5nfJAvLdLV+bz0kK4RqPZ3wQWJxyAPqDVhZQyQr7gyaXI9axWCFVAGLvRUhV46PgLnUWBs0HbBPszeudPuWKsTRZAJDTo8l8ui/42juL5veQC7ZpsEow+OrZQlqVVuH4FLA8WVyDAOTAmHUQCAWQkOlsQAwDt/9/AE8SgPQpNa07+AhAA6HLXbb5Xr4IaAMfv/eGvP5NzyYA7UGjBWTWjh40v9fSyscHLtaxhJWxFVsNNAXH1khw983+DYPmA5aCvXkdNIBccemfceooAfhAAcA+6A2xLuAGucxrzgKOMexDfV9OwbS2BB/BEoqLSrBoYGgJ3E8qLcIEsP/ngCPuUy7S13L3wb6PU56/m/Xj4Ps0TKCXQA6AXuNeZY3HMz5QANAeND1kwcKXlj6wOZQ+b7R+Pi0PD0DeFAfk590CKg8qncfoFzIRVWVqfFfBhgn25vXOAHLFWCDbvPstBsJZ4LUPt+jdesgFg+qVptWq11bg2gtgfuLiRAAgQeg+oEmsOujsXb5SsAoCIN/3vx04OlNM6Yv0tdx1MKvK7/TFjVmeCD4HQQQhf159eV7/pmc/kwCcKABoeYvR0oept7SEoZQ0Tr1lPuPQFlAtO0nyAcWhpzw/FSjFzGjLx+RGvxzoSeC1hwsA9klvaFN5FAy+9mJgnhaQ0qqagglADo4c9AhCDpJPl5ZommQ8738HcGw6AJBW1VecZv0cePwOY0/wl1lAD/WUCx0mMlDLr8bjmb+Dwp3x4nkDYbD0thIO5aNtfmDi/xGEeRawxhs7Vb/q2huABQJwAlhyy2cC0xoggjAAUCWWAkksOiIY978TmOOqeqqwqAx3WGhHK06n7TDwOcAV/iipPAKjwgrZm2o8nkUA0gKmAHTrp+o9MTrEYvq44o9pZIOtgmu8mafCV72YAKT/RwAy5OPOuVlAAk9Oule6xQRTWUKlWtkU/IvAHAHti5oIwDK841ZPFtCmdr0U8PaC9hVultd4CIC8P2Ztt/m5/qC11TJXlJDGGpfGAmYODgFoCxACkLpuWh3KCgqE8gNVZK4KtxgjJAB/2X1Krao1rfN7CWZf3LSBT4uAEIyWBVpipL7GgwA0AW25GbGENBTRx3rm1M2w39mmrFVwjTd1Kn+VAZALEE5LtIDyMWUBvbLNLGHgd5H/V07BDp7r3uU+Jadgn3ptxekA5MBri0/Wp4wzBjDbCnkMWMqVpE8GJwLQqvfc0pqbkVj5aNk7gbCxgJno30cAjntowtXNaZ1suvSKNhsYTcVKmw9F5xGE+94dfEoP+JYhD/8OC8eIPUsUHokVVKB78XszbzAF4Pvd//PCKVGIpOAr78mn4DZOm8YC1jco+w6EFTDDPJqeCEBZBa5GffVbhmQ8DtZW5TYOvPhXip0GTuu22lTMLSw+aAVl9QhEWjurI/aQiLJkTMLsX9R3r/ymZ73fp1+37OU9hunXSkdl7T3QrhKCtlCM59k2i5CMMSIAGdqxEIwrmptzTsCEut5yilKoJLAcxCq3fe8tLCDBFwO+tKjyuxSCMdYEXoeDrHcHvu0tTwLzmwHA4N/Gh6zNCqqeOSxC2lb8tQSiMwbuqXIqAcjFh2JjBKGJyShQG6ygVbfJegULWBYcMR3rvb6oCRaQwFPgl1M5rR7/JtBZOIZWx/0+s4QeY5z/1/X2tFnAxPpFELaVkdLN8MWGVr4pCBsfMHN8bmTKfCjZ0Ncp456/x58zLzfw6Qf3ABd8pUgEYmqk5bG
5690yek06IQl1bkXScnlN/u8L24Gdx1qVq91KQvrpgwaAAw9p+wnXPw1YjyWMGtDo2ASOFGMU7SIEUzdYD34vMPmXwLbHgdkFYAtlGiim6DpxJtvq9LtlVr/aWKEB8pUXAOOPAFPzwBTZ9r04vdQ9Ts4pAZ3cd+yHxgfMAOH+vcA69/9Uxijmz/AerYpdar1lNSMYzV+vWY/34I8DY58Gph8Bpo8A04vAFEFIknIHohGVR62QhFRSYjQE6qFri2z3iaPAhHNNlxKwArI0Q1IAxwfReacbC5gBPp66/5ICgLKCtqnsrKKlrFZUFPKOr7osMTtdsxzqQRZ93Q1MPARMPllohUxRqkEK6gShOP0S+dY2hlRv99y+ovRi7IiTnTvLqmg6xDPYpqAUgRgsoR7MxgJmgHD/c4E1FXu7FRRbvEgd7evXWlbPpp9EgUjiJpwe6zwOMlvpAWCMVusJYPIYMOlSDZRpoGiNxKzbdIQlXONMWJbGtw4svdgz3El47nzTRvPrrKptAJT6ZrzfintvAJgx4vsvdQvIXK5VYF3sUZxmJUvgA1FOvwF8spKyBtM1y6EepI4LqVMedbEaTp0EIKdPKh5FqYYqSxgo2jgFr13j6XXHnOiSZOeBVSvyC8qC2r05FVvVw9cAMAOA178AWPMp2LJaaekiCPXExwHw660n1oB/niGQazwOkkSepbJ/72I1x4CJ+cJ6lYI1riccrVicUuVSmIW82pkwnHHVOKbFsOozQGkFkwewnBES37ABYMaAX39ZAUCCb82nIlo+40p2gNnvsoKunxH1xGwA/LOzdQOQJPIuHzV2GBg7Cow7AI0l33XfjOsv6oVodes6ISbBsAZMX+kJxU56KY7pkmFVhOciuvTzSt05v0+ryuT/9gDrZNe4wPMsI7VJP3GcP7gUOOdvgL1rRYJ0ZI5IV3hV4/wrGYPPU3/AiRhYusy2K7mU999P+z90ObD7LuBZK0Xdkeq9NSX2+o4HLwfWlopFCC0fgciBMtAFC8CGrYXVoVjnU2G7rTXrzh4kfRzLY1kyGwBoeiGcPiXb5eAzdXWnazPCSScb4j3xfmav8Cx2p50lAMW0VXINitCogl2r9H2dcctWwQxQsn6ZTBbMNtcgdKIbiZj51VcBk38CXPxoQcfCUg8pjcYgZScw/momACnXyr4leBhs5QaBTHpf7X8dMPYJYO8XgAv9e8QJlAZZq8D4xSuANYKPJQn0AR2AHKy1MACKe9nfFI6IEqduEWoHIJ9wlsVKLekoMCa9EAegSTYQeM4TXco2SEMkAHEbBZoj4bbYtdyCVrFqGXgTSxgXYTZeHLi9AMjEQRCVUXP/n4KUaaT8vVTi+Rtg7GPAuYcAWlMCgUVkQfJ2Q12yBvPXMwHImhDWwf81imsTiLSEvHZkr+jY/p9CQRD4p8DOBwteItai05qn31FFdfLlFxYWgCDUIkRkj/TxbCEi/89jfPZ3X2VqYSJQbmUNQY3HQT7hbv2sLoerVwKQHNEEoCsm8R4MhPRjXUGzVEIKIoY7yaEYuY4dgGb5RXruoSgtSCLLarkICQ9f6QNykGjFdjsIBaI4kGlt8W+Rg5g0HJ8qAp47nihAzFpuWtPIMBZJlASILvR6fQ0DCVbJCkJOJCqnk4pGpb99tZ8MopyiKDX7WWDiwYKXiEQOehCrgKh+eJQ+EQHo1Lby/zRlyf8TIbf9XS5ftIb8I92YugH4ay2pLusorl7dAoonWtMwQSTdOFuQSLTGHyIC8kxSIQuA4hwU2WUAoO4/grBcDbsfWElSzg+JCoYDoEGM1ixSkHzgF/wG7y8sIa3J7JPAGWuFJSQIaU01iJHUiYP4e33BrPOHmG/JMaOfTZVYRhwGav87vWKPJ9/rSH4IOGO5sITqg/ggxXs4TOaBAECbeoOsgfl+DrQShFqcEIhyyt0MbMusEkx76iAZXKM8BvXiZAGlF+Ka
5690IbaadYpem4aDgpJZQz6YJABV5VcHAJZ0v4FxX6KG5UpYs0KnqjhRuagEVgPglYAl9ciHf8mdUrJh0Qx9vkDBzBywfbkYQIGwahA/kglATsHsDzKA0BATiPyZ4NEDwIeoa/uFYKKXL2f24nQoIgd9R3yQCMTFqwIAfdBWI7+yB5ZLECYLETd85YJl+2YAUNosLIel/xYlu4Jsl6bhNhD6it4WJCvA2Zc4Gxo73RcgJeOqFmGR6rcChLYACyGojmEYdj59KnZ+tIQRhH9IvWA2hiREjDeRI9Cly7fMF3EtWRFawhQIf5IJwE56wdTIYdt7tp9ys1K8JnoJvod9Wn682PNkP4hUy1ndWgstAtBDMLYN5/6PAc5DGNoF4SrZfN+4+IhT8jqwg2Cp8ThIJ5vfSWBXAVCrWN9SMxDK+skaOvhoAc8me654pmUB3f0wyt+E8FyRAGmPlOEoiSD2qgvmAKoOm52fAuiTDHSyIRxx+lI0QxxADubfF5vffMmSajrWlP7nmZ3dSy+4r/ZzAUEHnQ8R70HsXlK+PgJsW68G4XYGZj0EY2EYATCAT6tAhmE0DXcC4faapcwMgAIfLb0kuzT9Qmw5uwAAIABJREFUSi+EfeALkSrpBovbrQDnkm8wAo8/E3i+CCsZ98NCpAp8cUekZyBavI4ET/TnaAk/RQCyAXy6uNSPA0i+wMeB6ePA5HFgZq2wpNGK3FUDAHmv3fSCe7afX8CB4UNEEOolVi/3obastNwJ9cO5BOBKEQMsAcifHWzRAigWWAlCn5K2bQYAOe1KMjTIR2kRUhKVS7IrLia0v+3xwHMZMCbYNP0KfG79zAqK5DxOvyEuWu6VD5KSHy2YAEQAfpaRdl5UkuUctIpBnCIIl4psD03FtIIP1ADAlBuJM47EqqUX3LX9kSBQcuuyftK78xUkHyQ+RLqHZ3Fv1KcgLj5kAQ1s0Qo6IA1nHhNLQzA8ZxvBXuNx8DcS5UYpNnoYxsCnUIqvZo0F3wPTMa7Hv53HOJVbS/l+5bumX7d+5WLE44hxIRJB2NMCqj9ixwuE90svWCaIA6bAp959EKeWChAyA0PTOV2unGMQveCO7bfqHbcS4rJR7Ewqnw5AWhLuImg2uFQAXAVs8RGmntW4+g2hB3P79L/EJ9zGvqrxOPibiVi
5690hAOgrWQOf/EBfBcsPNBBqW9Hv6zzGqFzmoXz3B9AePgXiq6bgiv4YOB9QHS8AfpkAFMMjrWAcQA0iO9XJiQyAnos2vV7ESHOOQfWCO7Zf7F40mZFQScRKAYBaSU6vAVcTgN7xXHiUFpDTMK2dFh56912BTiDcvpkATIXzCL4g3WXTZ4jpGfjoF/oihL+fx+0yWUABLwIwtYKKIabgCzHQvi2ggBKn0McEQDaKT5cGkIOo6SuyYzEfjQB0EM5nZgAPoxe8of3sgSqCQM3jkdFLvpRvR13+7UVRuhUFSavNO6otwp88ZZ3+t4M6HLtch6OT9AG/q9cmtf//gV1JDYcnQ2zY6/YakfSrU+Pg1M45NqPt3IEtoM7WFHokyrWKkooglCMWLYjiUXMtK3g8Uzd1WL3gDe3vRRCoUEYCwGtYFxxqgA2E/jI20F5hhmQod98BHNnlxOTig1aGiDanO21yV4DygWuB8YeB6fnC9WEtiKVVKeE0ZGiXWczeJoWMIig5a9V5DA1ANoKDeDylZ9NSXxyAsiKawrQqmCv2HVf5e8aRoxfc1n7xs+khItAUvojvyWryxVcWJZksVSyZoQRA3dcAoHzax4Gj2wtu6FVKM7gMgti02jbV476oUJJs1j/AbA1mQ3Pm8eTRsoZDtR+xZKCiEKmMXTIeXHPGdhYArX8FwG4DGMEnAHIK4yvT58nWC2b73cexaZgWWaEKgU1gjNbPP7PvOYGsUSBkv3hBtmRWNzxjTk9RWktvxp6POj0vARjY9sWkFel8RWxegjIF4RjwAOnZWMPBTGjqvHmszxJOBUD3xyznL2bqROvoP3N3q84jG4C7M/PpcvMBef0cvV9k6hXv+2Yno5QfGArRbaCC0mWv2YtF3ecerNDhkNZIIsXQRv5dlTtGADJSz2gEE1EJQM//026HdIEZLC8B6A0tk0g1Ja8DuzJdphS82QBEZj5dbj7gxZN5er/IZI+67pscgE7QaDOUMyC0Wb8+gXjuR4F5J6YsaXnFhBoAGEVvUhb60jISgCQnoh/OLBgvIrL8v7DdFkEYM5dtNg97tvz5zJqzdfIBmJlPl5sP+DJP5xtW7xffnzeh7H+Z+3+RpkyWT1YxuURJYVtx6T0fCTocouQV85VkHRIGegEuEv/YKpkA/JceVmL8kv6t5/9pu62tfiPWcFQVEa0DZ9WcLJEPwMx8uvfnjT9IgZyj94t/ldeA/S9tMaGa9SNdmsIxbvVscVJ1GScoMt4UPwhAsmMZ0aXzQBsvdGRBjQz0FUpEJRAJQOq4KAnBdz+sfiPJ3bOYn8fsykyVWMfiN3BOzckS+QDMzKe7OW/88aqQzsfE5kH1fvGjeQ0wADodmVGwOeiMsUqHrGOnS4UFy9P/wAEojkEnI+IqOIJQNLgpCXhcmLAtD/D+kgQE235L93tj+YBqgTX9BiCeW/NedT4AmQ+YkU/3sbzxBymQuZhm8g1T+QbV+wWFdjKO/Te2mEFNlCb6gPF708VJ1TXHgKd91GnZpDfi1k/gM2vqU3DUnCuBmNQe3P9vw6pe229KOvB0K1k+ZS+rnrfM2AlA3JMZtah/EZKZT3drxuDz1O/yxAwu9JgJxr3lQfR+8aa8Buy/wdWQZAVl+ZzCrG3q9c/YrkmHy3IRYryAAqAkEBIlopJxNNUbER+fA/H+/+AAdP9PmS9dazicJybm7mlB8nR2dI1HvgVkOlZGPt2nM29GCamcGZjAwlQ+vvrV+8X/zGsAAUiLVPp/wd+zaTMFWw+/kAA0GQQnpCw5mDsAMIrcRB5mC/+MAffTwgfwKY2KfmCZ6ZIkUShrxXxBX4yYaV8Hzmcn13jUA8CMfDqWYeQcSkhVOl8U6uxH7xekrsg49h8oiCENgC5TUG5vKxxT8f2aRtOtcAKQ1s8soPuOVUIwpchNlEEIOyNSIrrvv3hwnckWIZPZsnbcDyzTpvg3lU8mpZQqozyfK74aj3wAKh1LgrsD5tMxiz/nkGD1sHq/YNFOxkEAcuW7oqmXlisuQOT7VV2jwi/kTgj1RkoZhBje8Z83SCAEEJZW0C3gff8tADCt4VASaWIBK0HI9q8BF5yUAMzIp8tNx5Jg9bB6v/jdDPSRns0BWIZeUitIo9IhHmhXTvzCPQddccnZ76U1V/IvC4SBCFyg26DFNg7c++Mhhb6qiCikT7WVUmr6lYn2nRKyrdZ51GMBlZIc07GUBdMjny6XCiUmpA6j94vMZbgBMFo552pu27PXAqXTyAUQcitOQjAm9xX0N9pIwIPmSCmH5QuPqER0L4kDYgp9zOUL6fYxkbZcFceyAreAF3GlV+NRDwAz8uksnT3jiILVSmpWNlhMze+k94vMZfgGAPJeHDjpCrgM01Tdry9OzvmYAzAqLVWIwEShwzbRwwSEn+MqP6bQK5tZlWyhjCCCsC19Xv7gOnBRbgp7cu/5AOyVjqVMmA75dJZ9nHF0yohWNlhMxKnS+0XmMtwAmFq4imnYbrEqNJPc+9kfd62RKh0On8qV9hXZ9askEPgAfI56ziocUgVbzGT28lEtRMoKtg7lBHtznfZNA+CQ+XQWM8k4uglWK/NLYKzS+8U9GReXD0g/Tyvh4Ne17Yb4Zbr6g6y7/aNWcoPpjKRTsJIags5IJwkEAv6en05S6GUBfRWsUExZyVZVQCQwrgN7Wfdd41GPBczIp8ODeXfTSbBa6YYxlY8/p3q/udc3C+jTbtvqt2oadnB2m4oNgMn0W0p+hYWHWbwg9yU/0Kb9EIy+5y2hiCit4UgKyTeAkN8Valk4Le/ldlONRz4AWWBRM6fdIPfHstw/G+SE5rMnVQ/kA5AkLHS0ak7V7reXfhgACaBqDtD3e/nmc5k9kA/A80JReq+U38zGVp3ObJo/BvAOD3dtwiWar9zEHsgHIGlFubqSx7+Jja36anLLcDvvgwA+NDpDfILv+qlzuXwAXuSjrkKemlO2e3U1uWUYnL8dwB/5e2apca9LNv+vsQfyAUheX4VguB+mzIsaG9ntqxhF4Xbe3QD+n7/uHLAW9wQ1tblMRQ/UA0CaHC7plXEh+q4T0OWcfhleYTSHBK0EH/mi+fcRuKQn4I6fWpeoB4AevCz3HOOm9yb3F5mBlZBNclYCj1aRfyfrbgPCTR6AzK+vD4CyglX7jpmN7HY66d1E0ctdIrEEE4wEIMlam+Pk7YF6AMj7EwAVbU82vTerCwhAXopJN9zVI+AYrOeULLZgErY2x8nZA/kAJGWr0naUWdFpy2cT+oCWjpdjLFxE5UzYIBBpEUX5nLnlvAktb76SPVAfAOUHpiAMm96bsVtCAMaKALICMyxDq6cXfycA+b/mOLl6oF4AiqBRIEzBp7/X2Af0+fi1XIioMIlAI+AIPIGPmeROWV3j1Zuvyu2B+gHoFfZiDS2lC0LiY52WUADkQoTTMH1BFSYRdHoRfKSu5v9qrizMHYPT+vx6ARhSuDcAzzmDo5ZGHT1PAKYMwQxME2jiSo/gEwBrrq+u41ZOy++oD4BaCcsXTPiSI3ey8s4KGoG8QwCMFM+0ggQhLR0BF19SXuD/ayakz7uR0/TsMcxg3SjfqWNA0hsrga/ojaq/8WPcC+YIk4Ke4CMSuB2XVht1Oj8zIfXlU8BtU8DhmYRXWdfrdF1fgr3+S8At48CD04DVjXQSDO70PTUnaJ5uOCwsIIFHSSFy1pKPWCDsZxCpw8UVgKSPxLXM937OzxxAljzcPAbcswU4Qh4V3UN8mKoeKm/bu78IfKJQa8VD48CylHQiL3O3/qg5Rf30BKACMtJXjXKQcfBSK8Dfqc3KVCwuN2VFGRnm/yKZtq4Re5ifyQQgM2A+BeB3GHaZBo5MAIue0l7Kt3cC4xhw+5eL7TuCkJk1jBtyerbUfYG5ExjZ/pqrxE5fAOrOq5SmowVIrRp1IyT2R6+fg0bgVYG4CsyZe2UsaiOGKXr4Sfp9k8CxCYAFSKyvXeY1o1BxQux91yMtfsHPutgnnyUuUvhc0ZsgUXib+nVkq6+ZKaABIHsgVZnuwD9sVo66rrR4ImdhLGSQ8zPL/JgBQxeU1ouWkO9PTgDzbgmXxrzMkatl3keivfG5x4r4IRcz5BfkO5vEZ0kgpIfBZ8yKjlL17syy0tMNcOn9dl4Fy6dLFabj1Mpvow9Ify+I4Nlo9Xt+ZqU9VdJpqZh4QDDyxUyYOYJwHDg+DhgI/WUVZl7aSEt93+GO9Ia2iuZKOfA7lhp9JpvAVy61w2mOwO5hmCgMHC1H9O24gu6UD9jP+ZmbtLRaSsei9SL4XDPbAEh/kGQ/pSUcc0lbApFWb67lQUhpVnLBsoKqqZclFMmUtrxPcwxl3X7vOCAtYLSCcugFQmqhdssH7HU+RznjiOlYXA8wqkOfkItTAom+oKygca4ES8jY+N3z7fSG4hfUtp3ihUHruVSsFy1iRvNP+1N7A5BdJACmVpAgZPhGOyCigEjlPLudn7kvFtOxuB4g6OjD8UWLRkCZFRwrLCEXJQQhp2K+37lQeBCRX1A7KPQto1prFEmSYn2mB9EAsO+kYfk8KQhZF8yjVz5gp/MztyOUjiW9bCUhEBhKRCCgSis45uQ/PhX/xfFWMgOnWu2gxB0TF/o0kEZ/kCDM1Ts+3RHYnwVUL6XhDFrAswfIB6w6P1MrTulY0sum1VICglKwCEACqvQFCUK3gHcsFQCM/ILayqP1k9JshVqrncMalOYYvgcGAyCvIwuod8YBJQmZpmGJeyRwkGw4n8jJOJQNw3idLFhMRNB0SgASTJyKoy/4ieXCeFfJBUeV2SoAclFyR0bbm1OHTUiN0/DTAw
5690D7zQeM52dqj8VsGEkVE2jKetG7AEhQ0frJAv6RC0trC1skl+IWlNinGLbSaZg7Mc0xfA8MbgF1LQV1z08A2G8+oM7PVF9Ms2GUE0gQyp+Lwu2yagLgR9ZaYpkSypQ6a6Q2DCqzpkvietXIFdoZfuieGmcOD0DeP0HEbBhNwYPmA/L8zJQsATAKnguEqS+XTqkE4YfWWwCUFZTksYAYwZfIBeN9Tw0cjOwu8gDIZqsoSSvhEeQDiiGYFoyWiSDRypWgi69UP5sc5fIcquSCNeXqe2X9ZAHfM7Khe2pcOB+AT41+aO5iRD3QAHBEHd9ctuiBBoANEkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cvAFgg4GR9kADwJF2f3PxBoANBkbaAw0AR9r9zcUbADYYGGkPNAAcafc3F28A2GBgpD3QAHCk3d9cfOxqYJ2au9RdPtdp/khoEOlglDYT39V1PzQFXLsMXAlgt9PCxJKPbufyf8/KHIPfBPAZABf79Xc5XQ0ZQ1Q7360NbxoHrlsDvs5ZRsgo0une06by6X1mZvtP99PNAp4F4LsBXA5gjw8EGTeqaGF4QhzQF80CX7cAvGIdeDYAfhdZ2sTKUcVrpE7nd31N5gj8e2dIo2osk7NZpMdK0Z19tv+bJ4F9K8D1ACj8yfNSikHeg+5Z969m57Y/8/ZP+dPLKZhP/rcA+AYAF7g1oRUhEMUzFMt6eSJfX78b2DkPfM0i8GIAX+uWlAMppreUUErn8p2gzTl+2flg/sDbTkvIOik+CP20//mzwAXzwDcCuNTPJeFXpEpM6QEjIHm/zTF8D7T5gATYNQCe69aAloRTGulfBESBSYNyxR5g/Bhw7hKwZwl4vk9LnM5JmsBzUyDGAX3B8G23Mz/g9BuUa/0IiutfMkj7zwKmngAuXSvOpUvAWYBtF4BTnspIj/O8zPaf7qdvWITw6eZA0JLQEhKEGgxZhUj/dz3NzSKwbR44exnYvVKcy+mM5Km0JhxInUtrGkmzCPicg3W5LMGkQiZZTm9xS9Z3+4m2o8C5c4X15pTKW2Lb+fCx7WLtjYxzqiql29Icw/dA5SqYf6RTTilg+lYCIXmICKQ4IK9wxfSJY8AZK8CuFWDnanEua9ZTAMsaCog3Dt92O/MvnRGBtGwkqKRmMEkqCaa+2k+0LQDTh4rP88UHj74kF1WaATo9QHQ7mmP4HugYhtEKj4PB6ZQ+FS0hQahpldPya1kXTOqNY8DscgG+HavAttUCvBxInitrkgL4lcO33c7spBdM3kAuSnq2nx9gQfAh4JyVwvrxwel2z3p4aMlzH6DM2z/lT+8aB+Q/OT4EEqckWQSBkGD6EQKQnDCLwBSnYgcf32fXioGUFawC4esyu7CXXnDP9tOCsyD4KLB1rmgvX7zfbu2WG/Jtme0/3U/vKxBNAMoi0KcjkATCN3HOEr3UAjDrwOP71rXixYEkeKMFlSX8ocwR6KUXTJ7AaNE2tF8WfA4Ye7Kw1mwvX/yZn+eKnvcrfzC6IK/ObP/pfnpfAGQnySoISBqUXyAASS1AK0JfagWYcRDOrAF66TxZQU7jBOEbM0egH71gcgXSFZAV54NQtj9YcNIpbONCyh8Ygi8CVospApDuB63g92W2/3Q/vW8AsqM4gLIKBBIH8bcJwMCNMX68BTqBb8s6sGWtsIA6jwDk662ZI9CvXjA5A6NVa2t/IAicnC/aGV+8T74IQPm/AmGuBc+8/VP+9IEAyLslAKMV/LgAyIUInfnjwPQqMOOgI/DstQ5Mr7UAqMF8V2YXDqoXXNl+EQQ6N9v29aKdesUpWJZbAPyPme0/3U8fGIDssDid/pUASCvCaXgJmFguAEfgEXT27gDkuwaUg/nbmSMwjF7whvbLhSDL5TwwvdRqo9oqHzACkCB8U2b7T/fThwIgO01T1IMCoAZxGRhbKoAXQUcQTjkI+a4B5e5FzjGsXvCG9gdqrLGFYrpVG/UuHzBOw2/LaXxzbh43DKeoJwlAHqLndSs4udoCoIBHQE45EPk3DuitmYOQoxdctp8+rFwIWsGFYiFFoLGNchcEQC6e+OJC5J2Z7T/dTx/aApYdJ37AyJK/DIwvFxYvWr0IwEn/H1Opco5sveDUhSAAF4HJpQJkWixp6k2n4IYfMGf0amDHev2I8+l4/UbvNw8Eozw72wJePOJ8und7EkKj9ztKGA1/7WwATo44n45pWI3e7/AAGPWZ2QBkYHCU+XTMfGGQmYIxjd7vqOE0+PXzATjifDrKtTZ6v4MP/MlyRj4AR5xPF+VaqZLJF1UzKdPV6P2eLDDr3I58AI44n07ZMARbo/d78gMubWE+AEecT8e9YOn2Uheu0fs9tUCYD8AR59MpG6bR+z21gKfW1gNAz4geRT5dTEZo9H5PPRDmAzBmRM8BJzqfLiYjSKKr0fs9dYBYDwBHmE9XtRfMsIz04aQZ1+j9npygrA+Akqs8wfl0BCCTWRq935MTYL1aVQ8Ao1zlAnAi8+kEQGZTNXq/vYb75Pt/fQAcUT5dBGCj93vyAaxXi+oDoFLyT3A+3Rcavd9eY3xS/z8fgCQX/LPR3SOzkon55jg1eyAfgD8M4NcAPD6aDmBtB1e4NMDNcer1QD4AbwbwxwDe4UvRE9wHZG1gNSXDLlwLNcep1QP5APxzzwj9IIAPnXhT5ORc5EYCA9HNcWr1QD4AmRH6FQBMTSZZH98ZmD5Bh5g1FopiNns1x6nTA/kAvAfAEwDudnI+EvQxPfkEzYfaCXRSBluQMB7YHKdGD+QDsBNBH/9+AkAobqTADGK7Inw1x8nfA/kA7EXQt8kgrGAGMfBxZ5Cv5ji5eyAfgL0I+r68uR0QmUFoBQU8vfNvzXHy9kA9AORoMw7CdGQCjoUZDwL4kv/+8OZ1gJhBIjGDgMh3vTavBc035/RAPgD7JegjODfhiMwgoqeJwNPPTaB6Ezq/hq+sB4AcXeXEP+ZhGVo9vRimIQD5v5oPAZCupgDI9wg8/qz/1Xz55usyeyAfgMMQ9GU2Op4eAchpOIJQQEz/VuPlm6/K7IH6AMjgGzdl6QtyX5jWjpQFevF3lq3xf6yhrOlIAUgQCojR8gmE+l9Nl2++JrMH6gEgR5UA5KYsc+AZmCbQCDi+IvgEQMob1XBEAHIajgBMLV+0kCdws6aGu3zqfkV9AGTwjftg3JRVVRAtHQEXX/wbAcoXP5d5CID8GoJKvqDAloKOoIz/y7x8c3pmD4zhaqwjRzCYyQg5gr2ZgsFTLweWr8XQgsXjbwLWrnNtMlKgNoLBmZAa7PTCAuYIBlMvlWQswwr2UlUw45jdDSx8HbD+Ctd+HVCwePKbgJV9aASDM8Yg59TWFDysYPBtmYK91IbNOHaPA/M7gUXKXA4hWDz79cA8+W0aweCMURj+1HYfcBjBYO54MMY3tGDv8I3nmWSHOzYOLJ0LLPGXAQWLz3oB8MQUsEa16kYwOG8whjh74yJkUMFgbsNlCfYO0epwissVY34bsHw2sEIRkAEEi/dcU0SP5qhF1ggG5w3GEGdXr4L5134Fg4kAjuDQgr1DtDqcUmZETwArZwAru4BVqsv0KVh8/o3F4v0QXZBGMDhvMIY4u3MYhv95Zh+Cu1xBcxuOU/HfeDIq5cv7FuwdotXhlCBXjOXZAnyrO4BV6in0IVh8wStLuWCsUAyvEQzOG5ABz+4eB+R/ewnu/kOP/3G/l4kJTERlljQtIot2e53/IwO2OPl4FLtcnCqAp9cahT56CBZf+LpSLhhz1N5qBIPzBmTAs/sLRHcTDKbiNHdBGGymOC/3hglEvgjAnoK9A7Y4+XgiV4zVWYDAs/etxaubYPFFP1QkLtCIP8neaASD8wZkwLP7AyC/tJNg8L/xLNBu+YBdBXsHbHEFAINcMVamgdWZAoRrfPdXm8KitLdmgYveWAq+2y7iMqfuRjA4b1AGOLt/APJLqwSD3+y5T1yI0AoSbAxMMzGV1o8/My2ro2DvAK2t+GgiV4zj4+3AIwDXtwBrVJeuECze+9aW4Dut4PxkIhYsdetGMDhvoDqcPRgA+SWp4O4veQ5Uv/mAGwR78+6rQq4Yq9PAOi2fA4/vBkKudKVU7VZw77uKvWFuZbtcMNb5v0YwOG9g+jx7cADyi6Pg7gccgIxlcA5TKhaD01yYKBmVFpBZMfx/m2Bvny3t8LGqoqTliZbVI+gMgHwnMAnCIFi897cLAAZ6QyzFzzSCwXkD1OPs4QDIL5XgLmk5JHk/SD5gKdibd38VcsVYGmuBTaAzEHLHgyCcaokB7/1IkUET5IKxwF5pBIPzBqbPs4cHIC/AaeqvPL9pmHxAE+zts6VdLCD/lcgVY3UyWD0Bj1ZwqgCggXA7sPfWAoAJvaEtZBrB4Lyx6efsPADyCtmCvf00s/NnOsgVY3m8BTRZPZuGBUACdArY+5lWDqGmYbIrLHEx0ggG5w1OH2fnA7CPizQfaXqgUw80AGywMdIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0BxoAjrT7m4s3AGwwMNIeaAA40u5vLt4AsMHASHugAeBIu7+5eAPABgMj7YEGgCPt/ubiDQAbDIy0B8ZYNMbkX+ZekpuIiOQrPar+xs889HJg6jZg5jAwvVZ8B+ll9PlO5/Fc/o+ECjnHfi8zYfkvM5ulmp4qJXVqx5deD4zfAkw/CGxdAZgoHfuh131QkaI5hu8Bs4Ds8B0AWLnIRGCBsFfn87JffDMwdjOw5R5g8giwZa34jnQQUwDo99wBfJ4TM7COiNdlaj2rA/jeV/vfDeATAP4UGH8I2Lrc6gc+SHqY4oMZ74VSKM0xfA+UUzB/oBUUCKMl6zSQ/PsXqZD5KQC/A0w/DEwcAcYXgYnVwppwADuBkefnCim90FmBWXwnK87Uen53BI8sbuwqaz9p5UgnQhBS+ZN1zE8Ak0utviCwq8DI8/nx5hi+Bzb4gJzKZE1SEFZZgS9/2pWR/gTAJ4HJQ8DEMWB8ARhfBsaWCwDquwQKvvNgHXvOcYVbPFJPkw+dDxC/W1Y4tWDpw/Rlgo4lo1T4/KxTihDNpJwj3/UiMLXemprjffC7eWpzDN8DlYsQDiKtVxzEqoHkyX9HRizW+nIgaQnvAiaeBCbmC0s4tgSMu2rMePAR9X252jXklaTFU108K0MHav/nvJ6ZxVVk9OI7GR2IZoGQNc/HgbHgIwqILIVujuF7oOMqWFawCoRxkfEIB5CWgkREBCNf9wMTc8A4QciBWyoGz16rwNgaML5eWKpctYZL3N+TWLX0gvtuP0HHk2n16JDyxXmVhfU0qywbJbr5GSuXKxA/sV5Y9UYWdnjwyS3qKKgarWA69Wg6fjQOIK0HadnIjPVFB+AiME4AuiUkCFnESyCSkmAuU7Cjm15wX+2X2ifBRn9A8mKcW2UFjULVQcgVDl80u40SYh763FfvquhLCxitoBYUsoJfjXKttByMq9CKcHn4sPuCbgXNJwyWkECcz5Q376UX3LNncZyQAAADEklEQVT9fFgIJ
5690s6lBBwtn3Tt6FpIz4RWnuQxPh2XIGzm4CwQ9hWIFgBTK0gQHiIAJddKq0ELQh+KL1qUR4MvSEsoENIKrgALHNiMox+94K7tl9qnnMio8MSf6SNwGpYVjCDk/Ju7isq496fCqX0BkDeqlWwKwic1gAQSpzGREnFgREz01eALLvvq2Kfi45m6cf3qBXdsfxRbJMho8dimqOhEK8cXQRr9QVpvPoDNMXQP9A3ACELFxPh+jACkP0fLIKFCCRRqKuPUdqjlC9o07JZwKVNHeBC94DQcZO0XAAkmgotAk9QYrR9f/BvByYfMSATDVMzwTXMM3QMDAVAgVHCZ7/MaQK4QZUHiNCbBQlqUw74YCb7gcmYkelC9YFlwvVv7RRAorTuBkECU9asCID9/x9B935zYzyKkqpfiNHxcA0gLQgvBAaPVkCqm3h2AtC5m/RyEqzw/4xhGL3hD++MmslgqCbgUfLKAcRrmTlBzDN0DA1tAXUlWcDm1IOIIJAjlT/Fd05lbFQFwjdtgGcewesFt7Rc/Gx8iWjUCjGCT1YvWT1MwgUqrf3NG45tTbcu0aximWx9xENcEQHGbcYAEwtSXSqY0gnCdgeuMI0cvuGx/FUGgFhwEYrR80QckWN+X0fjm1DwAWv8RgJFilJZBznz0pQg+AZAAlVWh1GvGka0XzB0cCQi30aSGVa9AF62fLOB7MhrfnJoPwPER59Px+o3e76mL5Kwp2G57xPl0kxc3er+nLvyKtLmhfUC78RHn081ONnq/pzcAR5xPR9mRRu/31IVgvgUccT4dNaobvd/TGYAjzqejumqj93s6A3DE+XRUg2VSCjdaGr3fUw+I+VPwiPPpqJjO8J1Nw43e7ymHwHoAKMFd7QErAeEE5NNJMb3R+z3lsGcNzgfgiPPpomJ6o/d76oGwPgCOKJ8uKqY3er+nKwBHmE+noqRG7/fUA199U/AI8+kEwEbv93QHoEhZTnA+nYqSGr3fBoAtaiqBUImdm5hPJwA2er+nKwBHnE+X1gUzSbnR+z11wPj/AeCpPDD3t7rvAAAAAElFTkSuQmCC",T0=class extends TO{constructor({preset:e=1,edgeDetectionMode:t=2,predicationMode:i=0}={}){let r,a;super("SMAAEffect","uniform sampler2D weightMap;varying vec2 vOffset0;varying vec2 vOffset1;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 a;a.x=texture2D(weightMap,vOffset0).a;a.y=texture2D(weightMap,vOffset1).g;a.wz=texture2D(weightMap,uv).rb;vec4 color=inputColor;if(dot(a,vec4(1.0))>=1e-5){bool h=max(a.x,a.z)>max(a.y,a.w);vec4 blendingOffset=vec4(0.0,a.y,0.0,a.w);vec2 blendingWeight=a.yw;movec(bvec4(h),blendingOffset,vec4(a.x,0.0,a.z,0.0));movec(bvec2(h),blendingWeight,a.xz);blendingWeight/=dot(blendingWeight,vec2(1.0));vec4 blendingCoord=blendingOffset*vec4(texelSize,-texelSize)+uv.xyxy;color=blendingWeight.x*texture2D(inputBuffer,blendingCoord.xy);color+=blendingWeight.y*texture2D(inputBuffer,blendingCoord.zw);}outputColor=color;}",{vertexShader:"varying vec2 vOffset0;varying vec2 vOffset1;void mainSupport(const in vec2 uv){vOffset0=uv+texelSize*vec2(1.0,0.0);vOffset1=uv+texelSize*vec2(0.0,1.0);}",blendFunction:TT.NORMAL,attributes:3,uniforms:new Map([["weightMap",new lj(null)]])}),arguments.length>1&&(r=arguments[0],a=arguments[1],arguments.length>2&&(e=arguments[2]),arguments.length>3&&(t=arguments[3])),this.renderTargetEdges=new iM(1,1,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.renderTargetEdges.texture.name="SMAA.Edges",this.renderTargetWeights=this.renderTargetEdges.clone(),this.renderTargetWeights.texture.name="SMAA.Weights",this.uniforms.get("weightMap").value=this.renderTargetWeights.texture,this.clearPass=new TS(!0,!1,!1),this.clearPass.overrideClearColor=new iv(0),this.clearPass.overrideClearAlpha=1,this.edgeDetectionPass=new TN(new Tn),this.edgeDetectionMaterial.edgeDetectionMode=t,this.edgeDetectionMaterial.predicationMode=i,this.weightsPass=new TN(new Tm);let o=new lr;o.onLoad=()=>{let e=new i_(r);e.name="SMAA.Search",e.magFilter=1003,e.minFilter=1003,e.generateMipmaps=!1,e.needsUpdate=!0,e.flipY=!0,this.weightsMaterial.searchTexture=e;let t=new i_(a);t.name="SMAA.Area",t.magFilter=1006,t.minFilter=1006,t.generateMipmaps=!1,t.needsUpdate=!0,t.flipY=!1,this.weightsMaterial.areaTexture=t,this.dispatchEvent({type:"load"})},o.itemStart("search"),o.itemStart("area"),void 0!==r&&void 0!==a?(o.itemEnd("search"),o.itemEnd("area")):"u">typeof Image&&(r=new Image,a=new Image,r.addEventListener("load",()=>o.itemEnd("search")),a.addEventListener("load",()=>o.itemEnd("area")),r.src=TJ,a.src=T$),this.applyPreset(e)}get edgesTexture(){return this.renderTargetEdges.texture}getEdgesTexture(){return this.edgesTexture}get weightsTexture(){return this.renderTargetWeights.texture}getWeightsTexture(){return this.weightsTexture}get edgeDetectionMaterial(){return this.edgeDetectionPass.fullscreenMaterial}
5690get colorEdgesMaterial(){return this.edgeDetectionMaterial}getEdgeDetectionMaterial(){return this.edgeDetectionMaterial}get weightsMaterial(){return this.weightsPass.fullscreenMaterial}getWeightsMaterial(){return this.weightsMaterial}setEdgeDetectionThreshold(e){this.edgeDetectionMaterial.edgeDetectionThreshold=e}setOrthogonalSearchSteps(e){this.weightsMaterial.orthogonalSearchSteps=e}applyPreset(e){let t=this.edgeDetectionMaterial,i=this.weightsMaterial;switch(e){case 0:t.edgeDetectionThreshold=.15,i.orthogonalSearchSteps=4,i.diagonalDetection=!1,i.cornerDetection=!1;break;case 1:t.edgeDetectionThreshold=.1,i.orthogonalSearchSteps=8,i.diagonalDetection=!1,i.cornerDetection=!1;break;case 2:t.edgeDetectionThreshold=.1,i.orthogonalSearchSteps=16,i.diagonalSearchSteps=8,i.cornerRounding=25,i.diagonalDetection=!0,i.cornerDetection=!0;break;case 3:t.edgeDetectionThreshold=.05,i.orthogonalSearchSteps=32,i.diagonalSearchSteps=16,i.cornerRounding=25,i.diagonalDetection=!0,i.cornerDetection=!0}}setDepthTexture(e,t=3200){this.edgeDetectionMaterial.depthBuffer=e,this.edgeDetectionMaterial.depthPacking=t}update(e,t,i){this.clearPass.render(e,this.renderTargetEdges),this.edgeDetectionPass.render(e,t,this.renderTargetEdges),this.weightsPass.render(e,this.renderTargetEdges,this.renderTargetWeights)}setSize(e,t){this.edgeDetectionMaterial.setSize(e,t),this.weightsMaterial.setSize(e,t),this.renderTargetEdges.setSize(e,t),this.renderTargetWeights.setSize(e,t)}dispose(){let{searchTexture:e,areaTexture:t}=this.weightsMaterial;null!==e&&null!==t&&(e.dispose(),t.dispose()),super.dispose()}static get searchImageDataURL(){return TJ}static get areaImageDataURL(){return T$}},T1=`uniform float offset;uniform float darkness;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){const vec2 center=vec2(0.5);vec3 color=inputColor.rgb; 5691#if VIGNETTE_TECHNIQUE == 0 5692float d=distance(uv,center);color*=smoothstep(0.8,offset*0.799,d*(darkness+offset)); 5693#else 5694vec2 coord=(uv-center)*vec2(offset);color=mix(color,vec3(1.0-darkness),dot(coord,coord)); 5695#endif 5696outputColor=vec4(color,inputColor.a);}`,T2=class extends TO{constructor({blendFunction:e=TT.NORMAL,technique:t=0,eskil:i=!1,offset:r=.5,darkness:a=.5}={}){super("VignetteEffect",T1,{blendFunction:e,defines:new Map([["VIGNETTE_TECHNIQUE",t.toFixed(0)]]),uniforms:new Map([["offset",new lj(r)],["darkness",new lj(a)]])})}get technique(){return Number(this.defines.get("VIGNETTE_TECHNIQUE"))}set technique(e){this.technique!==e&&(this.defines.set("VIGNETTE_TECHNIQUE",e.toFixed(0)),this.setChanged())}get eskil(){return 1===this.technique}set eskil(e){this.technique=1*!!e}getTechnique(){return this.technique}setTechnique(e){this.technique=e}get offset(){return this.uniforms.get("offset").value}set offset(e){this.uniforms.get("offset").value=e}getOffset(){return this.offset}setOffset(e){this.offset=e}get darkness(){return this.uniforms.get("darkness").value}set darkness(e){this.uniforms.get("darkness").value=e}getDarkness(){return this.darkness}setDarkness(e){this.darkness=e}};function T3(e,t,i,r){var a;return(a=e+(t-e)*.75)+(i+(r-i)*.75-a)*.875}new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1]),new Float32Array(2),new Float32Array(2),new Float32Array([0,-.25,.25,-.125,.125,-.375,.375]),new Float32Array([0,0]),new Float32Array([.25,-.25]),new Float32Array([-.25,.25]),new Float32Array([.125,-.125]),new Float32Array([-.125,.125]),new Uint8Array([0,0]),new Uint8Array([3,0]),new Uint8Array([0,3]),new Uint8Array([3,3]),new Uint8Array([1,0]),new Uint8Array([4,0]),new Uint8Array([1,3]),new Uint8Array([4,3]),new Uint8Array([0,1]),new Uint8Array([3,1]),new Uint8Array([0,4]),new Uint8Array([3,4]),new Uint8Array([1,1]),new Uint8Array([4,1]),new Uint8Array([1,4]),new Uint8Array([4,4]),new Uint8Array([0,0]),new Uint8Array([1,0]),new Uint8Array([0,2]),new Uint8Array([1,2]),new Uint8Array([2,0]),new Uint8Array([3,0]),new Uint8Array([2,2]),new Uint8Array([3,2]),new Uint8Array([0,1]),new Uint8Array([1,1]),new Uint8Array([0,3]),new Uint8Array([1,3]),new Uint8Array([2,1]),new Uint8Array([3,1]),new Uint8Array([2,3]),new Uint8Array([3,3]),T3(0,0,0,0),new Float32Array([0,0,0,0]),T3(0,0,0,1),new Float32Array([0,0,0,1]),T3(0,0,1,0),new Float32Array([0,0,1,0]),T3(0,0,1,1),new Float32Array([0,0,1,1]),T3(0,1,0,0),new Float32Array([0,1,0,0]),T3(0,1,0,1),new Float32Array([0,1,0,1]),T3(0,1,1,0),new Float32Array([0,1,1,0]),T3(0,1,1,1),new Float32Array([0,1,1,1]),T3(1,0,0,0),new Float32Array([1,0,0,0]),T3(1,0,0,1),new Float32Array([1,0,0,1]),T3(1,0,1,0),new Float32Array([1,0,1,0]),T3(1,0,1,1),new Float32Array([1,0,1,1]),T3(1,1,0,0),new Float32Array([1,1,0,0]),T3(1,1,0,1),new Float32Array([1,1,0,1]),T3(1,1,1,0),new Float32Array([1,1,1,0]),T3(1,1,1,1),new Float32Array([1,1,1,1]);var T4=class{constructor(e,t){this.enabled=!1,this.effect=new e(t),Object.defineProperty(this,"opacity",{enumerable:!0,set(e){this.effect.blendMode.opacity.value=e},get(){return this.effect.blendMode.opacity.value}}),Object.defineProperty(this,"blendFunction",{enumerable:!0,set(e){this.effect.blendMode.setBlendFunction(Number(e))},get(){return this.effect.blendMode.blendFunction}}),this.blendFunction=TT.NORMAL}dispose(){this.effect.dispose()}},T5=class extends T4{constructor(){super(Tj),this.blendFunction=TT.SCREEN}set intensity(e){this.effect.intensity=e}get intensity(){return this.effect.intensity}set luminanceThreshold(e){this.effect.luminanceMaterial.threshold=e}get luminanceThreshold(){return this.effect.luminanceMaterial.threshold}set luminanceSmoothing(e){this.effect.luminanceMaterial.smoothing=e}get luminanceSmoothing(){return this.effect.luminanceMaterial.smoothing}set blurScale(e){this.effect.blurPass.scale=e}get blurScale(){return this.effect.blurPass.scale}set kernelSize(e){this.effect.blurPass.kernelSize=e}get kernelSize(){return this.effect.blurPass.kernelSize}},T6=class extends T4{constructor(){super(TG)}set contrast(e){this.effect.uniforms.get("contrast").value=e}get contrast(){return this.effect.uniforms.get("contrast").value}set brightness(e){this.effect.uniforms.get("brightness").value=e}get brightness(){return this.effect.uniforms.get("brightness").value}},T8=class extends T4{constructor(){super(TH),this.effect.offset=new t9(.01,.01)}set offset(e){this.effect.offset.set(e[0]/1e3,e[1]/1e3)}get offset(){return[1e3*this.effect.offset.x,1e3*this.effect.offset.y]}},T9=class extends T4{constructor(){super(TW)}},T7=class extends T4{constructor(){super(TY),this._hue=0}set hue(e){this._hue=e,this.effect.setHue(e)}get hue(){return this._hue}set saturation(e){this.effect.uniforms.get("saturation").value=e}get saturation(){return this.effect.uniforms.get("saturation").value}},Pe=class extends T4{constructor(){super(TZ),this.blendFunction=TT.OVERLAY}},Pt=class extends T4{constructor(){super(T2)}get eskil(){return this.effect.eskil}
vendor: 5,773 bytes, lines 5696-5723
5696set eskil(e){this.effect.eskil=e}get darkness(){return this.effect.uniforms.get("darkness").value}set darkness(e){this.effect.uniforms.get("darkness").value=e}get offset(){return this.effect.uniforms.get("offset").value}set offset(e){this.effect.uniforms.get("offset").value=e}},Pi=class extends T4{constructor(e){super(TX)}set focalLength(e){this.effect.circleOfConfusionMaterial.uniforms.focalLength.value=e/2e3}get focalLength(){return this.effect.circleOfConfusionMaterial.uniforms.focalLength.value}set focusDistance(e){this.effect.circleOfConfusionMaterial.uniforms.focusDistance.value=this.isPerspectiveCamera?e/2e3:(e+992)/2e3}get focusDistance(){return this.effect.circleOfConfusionMaterial.uniforms.focusDistance.value}get bokehScale(){return this.effect.bokehScale}set bokehScale(e){this.effect.bokehScale=e}setCamera(e){let t=!1;(e.isPerspectiveCamera&&!1===this.isPerspectiveCamera||!e.isPerspectiveCamera&&!0===this.isPerspectiveCamera)&&(t=!0),e.isPerspectiveCamera?(this.effect.circleOfConfusionMaterial.adoptCameraSettings(e.perspCamera),this.isPerspectiveCamera=!0):(this.effect.circleOfConfusionMaterial.adoptCameraSettings(e),this.isPerspectiveCamera=!1),t&&this.effect.setChanged()}},Pr=class extends T4{constructor(){super(TK)}get granularity(){return this.effect.getGranularity()}set granularity(e){this.effect.setGranularity(e)}},Ps=`#define GLSLIFY 1 5697varying vec2 vUv;varying vec2 vTexCoords[9];uniform vec2 resolution;void main(){vUv=position.xy*0.5+0.5;vec2 texelSize=vec2(1.0)/resolution;vTexCoords[0]=vUv+vec2(-texelSize.x,-texelSize.y);vTexCoords[1]=vUv+vec2(0.0,-texelSize.y);vTexCoords[2]=vUv+vec2(texelSize.x,-texelSize.y);vTexCoords[3]=vUv+vec2(-texelSize.x,0.0);vTexCoords[4]=vUv+vec2(0.0,0.0);vTexCoords[5]=vUv+vec2(texelSize.x,0.0);vTexCoords[6]=vUv+vec2(-texelSize.x,texelSize.y);vTexCoords[7]=vUv+vec2(0.0,texelSize.y);vTexCoords[8]=vUv+vec2(texelSize.x,texelSize.y);gl_Position=vec4(position.xy,1.0,1.0);}`,Pa=`#define GLSLIFY 1 5698#include <common> 5699varying vec2 vUv;varying vec2 vTexCoords[9];uniform sampler2D inputBuffer;uniform sampler2D historyBuffer;uniform sampler2D velocityBuffer;uniform sampler2D depthBuffer;uniform vec2 resolution; 5700#define USE_YCOCG 5701#define USE_CATMULL_ROM 5702const float feedback_min=0.5;const float feedback_max=0.95;vec3 RGB_YCoCg(vec3 c){return vec3(c.x/4.0+c.y/2.0+c.z/4.0,c.x/2.0-c.z/2.0,-c.x/4.0+c.y/2.0-c.z/4.0);}vec3 YCoCg_RGB(vec3 c){return clamp(vec3(c.x+c.y-c.z,c.x+c.z,c.x-c.y-c.z),vec3(0.0),vec3(1.0));}vec4 sample_color(sampler2D tex,vec2 uv){ 5703#ifdef USE_YCOCG 5704vec4 c=texture(tex,uv);return vec4(RGB_YCoCg(c.rgb),c.a); 5705#else 5706return texture(tex,uv); 5707#endif 5708}vec4 sample_catmull_rom(sampler2D tex,vec2 uv,vec2 texSize){vec2 samplePos=uv*texSize;vec2 texPos1=floor(samplePos-0.5)+0.5;vec2 f=samplePos-texPos1;vec2 w0=f*(-0.5+f*(1.0-0.5*f));vec2 w1=1.0+f*f*(-2.5+1.5*f);vec2 w2=f*(0.5+f*(2.0-1.5*f));vec2 w3=f*f*(-0.5+0.5*f);vec2 w12=w1+w2;vec2 offset12=w2/(w1+w2);vec2 texPos0=texPos1-1.0;vec2 texPos3=texPos1+2.0;vec2 texPos12=texPos1+offset12;texPos0/=texSize;texPos3/=texSize;texPos12/=texSize;vec4 result=vec4(0.0);result+=texture2D(tex,vec2(texPos12.x,texPos0.y))*w12.x*w0.y;result+=texture2D(tex,vec2(texPos0.x,texPos12.y))*w0.x*w12.y;result+=texture2D(tex,vec2(texPos12.x,texPos12.y))*w12.x*w12.y;result+=texture2D(tex,vec2(texPos3.x,texPos12.y))*w3.x*w12.y;result+=texture2D(tex,vec2(texPos12.x,texPos3.y))*w12.x*w3.y;return result;}vec3 choose_motion_vector(){ 5709#ifdef CHOOSE_LONGEST_MOTION_VECTOR 5710float longest=-1.0;vec3 v_choose=vec3(-1.0);for(int i=0;i<9;i++){vec3 v=texture2D(velocityBuffer,vTexCoords[i]).rgb;float l=length(v.xy);if(l>longest){longest=l;v_choose=v;}}return v_choose; 5711#else 5712float closest_depth=1000.0;vec2 closest_uv_offset=vec2(0.0);for(int i=0;i<9;i++){float neighbor_depth=texture2D(depthBuffer,vTexCoords[i]).r;if(neighbor_depth<closest_depth){closest_uv_offset=vTexCoords[i];closest_depth=neighbor_depth;}}return texture2D(velocityBuffer,closest_uv_offset).rgb; 5713#endif 5714}vec4 clipAabb(vec3 aabb_min,vec3 aabb_max,vec4 avg,vec4 input_texel){const float FLT_EPS=0.00000001;vec3 p_clip=0.5*(aabb_max+aabb_min);vec3 e_clip=0.5*(aabb_max-aabb_min)+FLT_EPS;vec4 v_clip=input_texel-vec4(p_clip,avg.w);vec3 v_unit=v_clip.xyz/e_clip;vec3 a_unit=abs(v_unit);float ma_unit=max(a_unit.x,max(a_unit.y,a_unit.z));if(ma_unit>1.0){return vec4(p_clip,avg.w)+v_clip/ma_unit;}else{return input_texel;}}vec3 clip_aabb_variance(in vec3 cOld,in vec3 cNew,in vec3 centre,in vec3 halfSize){if(all(lessThanEqual(abs(cOld-centre),halfSize))){return cOld;}vec3 dir=(cNew-cOld);vec3 near=centre-sign(dir)*halfSize;vec3 tAll=(near-cOld)/dir;float t=0.0001;for(int i=0;i<3;i++){if(tAll[i]>=0.0&&tAll[i]<t){t=tAll[i];}}if(t>=0.0001){return cOld;}return cOld+dir*t;}void main(){vec3 v=choose_motion_vector();vec2 velocity=v.rg;vec2 previousPixelPos=vUv-velocity;vec4 currentColor=sample_color(inputBuffer,vUv); 5715#ifdef USE_CATMULL_ROM 5716vec4 previousColor=sample_catmull_rom(historyBuffer,previousPixelPos,resolution); 5717#else 5718vec4 previousColor=sample_color(historyBuffer,previousPixelPos); 5719#endif 5720#ifdef USE_YCOCG 5721previousColor=vec4(RGB_YCoCg(previousColor.rgb),previousColor.a); 5722#endif 5723vec4 ctl=sample_color(inputBuffer,vTexCoords[0]);vec4 ctc=sample_color(inputBuffer,vTexCoords[1]);vec4 ctr=sample_color(inputBuffer,vTexCoords[2]);vec4 cml=sample_color(inputBuffer,vTexCoords[3]);vec4 cmc=sample_color(inputBuffer,vTexCoords[4]);vec4 cmr=sample_color(inputBuffer,vTexCoords[5]);vec4 cbl=sample_color(inputBuffer,vTexCoords[6]);vec4 cbc=sample_color(inputBuffer,vTexCoords[7]);vec4 cbr=sample_color(inputBuffer,vTexCoords[8]);vec4 cmin=min(ctl,min(ctc,min(ctr,min(cml,min(cmc,min(cmr,min(cbl,min(cbc,cbr))))))));vec4 cmax=max(ctl,max(ctc,max(ctr,max(cml,max(cmc,max(cmr,max(cbl,max(cbc,cbr))))))));
5723vec4 cavg=(ctl+ctc+ctr+cml+cmc+cmr+cbl+cbc+cbr)/9.0;vec4 cmin5=min(ctc,min(cml,min(cmc,min(cmr,cbc))));vec4 cmax5=max(ctc,max(cml,max(cmc,max(cmr,cbc))));vec4 cavg5=(ctc+cml+cmc+cmr+cbc)/5.0;cmin=0.5*(cmin+cmin5);cmax=0.5*(cmax+cmax5);cavg=0.5*(cavg+cavg5); 5724#ifdef USE_YCOCG 5725vec2 chroma_extent=vec2(0.25*0.5*(cmax.r-cmin.r));vec2 chroma_center=currentColor.gb;cmin.yz=chroma_center-chroma_extent;cmax.yz=chroma_center+chroma_extent;cavg.yz=chroma_center; 5726#endif 5727vec4 previousColorClipped=clamp(previousColor,cmin,cmax); 5728#ifdef LUMINANCE_DIFFERENCES 5729#ifdef USE_YCOCG 5730float lum0=currentColor.r;float lum1=previousColorClipped.r; 5731#else 5732float lum0=luminance(currentColor.rgb);float lum1=luminance(previousColorClipped.rgb); 5733#endif 5734float unbiased_diff=abs(lum0-lum1)/max(lum0,max(lum1,0.2));float unbiased_weight=1.0-unbiased_diff;float unbiased_weight_sqr=unbiased_weight*unbiased_weight;float k_feedback=mix(feedback_min,feedback_max,unbiased_weight_sqr);vec4 result=mix(currentColor,previousColorClipped,vec4(k_feedback)); 5735#else 5736const float alpha=0.1;vec4 result=mix(currentColor,previousColorClipped,1.0-alpha); 5737#endif 5738#ifdef USE_YCOCG 5739gl_FragColor=vec4(YCoCg_RGB(result.rgb).rgb,result.a); 5740#else 5741gl_FragColor=result; 5742#endif 5743}`,Pn=`#define GLSLIFY 1 5744varying vec2 vUv;void main(){gl_Position=vec4(position.xy,1.0,1.0);vUv=position.xy*0.5+0.5;}`,Po=`#define GLSLIFY 1 5745layout(location=1)out vec4 gVelocity;varying vec2 vUv;uniform sampler2D inputBuffer;void main(){gl_FragColor=texture2D(inputBuffer,vUv);gVelocity=vec4(0.0);}`,Pl=class extends so{constructor(){super({name:"PassthroughMaterial",uniforms:{inputBuffer:new lj(null)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:Pn,fragmentShader:Po})}set inputBuffer(e){this.uniforms.inputBuffer.value=e}},Ph=class extends Ty{constructor(){super("TAAResolvePass"),this.MRTCompatible=!0,this.needsSwap=!1,this.passThroughMaterial=new Pl,this.resolutionVector=new t9,this.resolveMaterial=new so({name:"TAAResolveMaterial",uniforms:{inputBuffer:new lj(null),historyBuffer:new lj(null),velocityBuffer:new lj(null),depthBuffer:new lj(null),resolution:new lj(new t9)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:Ps,fragmentShader:Pa}),this.historyRenderTarget=new iM(1024,1024,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.historyRenderTarget.texture.name="TAA.History",this.resultRenderTarget=new iM(1024,1024,{minFilter:1006,stencilBuffer:!1,depthBuffer:!1}),this.resultRenderTarget.texture.name="TAA.Output"}setSize(e,t){this.historyRenderTarget.setSize(e,t),this.resultRenderTarget.setSize(e,t)}render(e,t){this.fullscreenMaterial=this.resolveMaterial,this.resolveMaterial.uniforms.inputBuffer.value=t.texture[0],this.resolveMaterial.uniforms.velocityBuffer.value=t.texture[1],this.resolveMaterial.uniforms.depthBuffer.value=t.depthTexture,this.resolveMaterial.uniforms.historyBuffer.value=this.historyRenderTarget.texture,this.resolveMaterial.uniforms.resolution.value.set(t.width,t.height),e.setRenderTarget(this.resultRenderTarget),e.render(this.scene,this.camera),this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=this.resultRenderTarget.texture,e.setRenderTarget(this.historyRenderTarget),e.render(this.scene,this.camera);let i=this.renderToScreen?null:t;this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=this.resultRenderTarget.texture,e.setRenderTarget(i),e.render(this.scene,this.camera)}dispose(){super.dispose(),this.resultRenderTarget.dispose(),this.historyRenderTarget.dispose(),this.resolveMaterial.dispose(),this.passThroughMaterial.dispose()}},Pc=class extends Ty{constructor(e,t,i){super("TransmissionPass",void 0,t),this.MRTCompatible=!0,this.depthPass=new TE(e,t,{renderTarget:i.transmissionDepthTarget}),this.passThroughMaterial=new Pl,this.splineScene=e,this.needsSwap=!1}updatePasses(e){this.passThroughMaterial.dispose(),this.passThroughMaterial=new Pl,this.depthPass.dispose(),this.depthPass=new TE(this.splineScene,this.camera,{renderTarget:e.transmissionDepthTarget})}setCamera(e){this.camera=e}setScene(e){this.splineScene=e}render(e,t,i){let r=this.camera.layers.mask;e.setRenderTarget(e.transmissionRenderTarget),this.fullscreenMaterial=this.passThroughMaterial,this.passThroughMaterial.inputBuffer=t.texture[0],e.clear(),e.render(this.scene,this.camera),this.camera.layers.disable(3),this.depthPass.render(e,t,i),e.shadowMap.needsUpdate=!1,e.shadowMap.autoUpdate=!1;let a=this.renderToScreen?null:t;this.camera.layers.set(3),e.setRenderTarget(a),e.render(this.splineScene,this.camera),this.camera.layers.mask=r}dispose(){super.dispose(),this.depthPass?.renderPass.dispose(),this.depthPass.dispose(),this.passThroughMaterial.dispose(),this.depthPass=void 0,this.passThroughMaterial=void 0,this.splineScene=void 0,this.scene=void 0,this.camera=void 0}}
5745,Pd=new nI,Pu=new so({transparent:!0,vertexShader:` 5746 void main() { 5747 gl_Position = vec4(0.0); 5748 } 5749 `,fragmentShader:` 5750 layout(location = 1) out vec4 gVelocity; 5751 5752 void main() { 5753 gl_FragColor = vec4(0.0); 5754 gVelocity = vec4(0.0); 5755 } 5756 `}),Pp=class extends Ty{constructor(e,t,i){super("OpaquePass",t??Pd,i),this.MRTCompatible=!0,this.originalMaterials=[],this.hasTransmissionPass=!1,this.clear=!0,this.clearColorOnly=!1,this.clearDepth=!1,this.needsSwap=!1,this.MRTCompatible=e}setCamera(e){this.camera=e}setScene(e){this.scene=e??Pd}getScene(){return this.scene}render(e,t){this.camera.layers.enable(3),this.hasTransmissionPass&&(this.originalMaterials.length=0,this.scene.traverse(e=>{e.layers.isEnabled(3)&&e instanceof _H&&(this.originalMaterials.push([e,e.material]),e.material=Pu)}),e.shadowMap.needsUpdate=!0,e.shadowMap.autoUpdate=!0),this.camera.layers.enable(8);let i=this.renderToScreen?null:t;e.setRenderTarget(i),this.clearColorOnly&&e.clear(!0,!1,!0),this.clear&&e.clear(),e.render(this.scene,this.camera),this.clearDepth&&e.clear(!1,!0,!1),this.hasTransmissionPass&&this.originalMaterials.forEach(e=>{e[0].material=e[1]})}dispose(){super.dispose(),this.originalMaterials.length=0,this.scene=void 0,this.camera=void 0}},Pf=new nI,Pm=new so({transparent:!0,vertexShader:` 5757 void main() { 5758 gl_Position = vec4(0.0); 5759 } 5760 `,fragmentShader:` 5761 layout(location = 1) out vec4 gVelocity; 5762 5763 void main() { 5764 gl_FragColor = vec4(0.0); 5765 gVelocity = vec4(0.0); 5766 } 5767 `}),Pg=class extends Ty{constructor(e,t){super("DepthFillPass",e??Pf,t),this.MRTCompatible=!0,this.forcedOn=[],this.ghosted=[],this.needsSwap=!1}setCamera(e){this.camera=e}setScene(e){this.scene=e??Pf}render(e,t){let i=this.camera.layers.mask,r=e.shadowMap.autoUpdate;this.forcedOn.length=0,this.ghosted.length=0;try{this.scene.traverse(e=>{if(!(e instanceof _H))return;let t=Array.isArray(e.material)?e.material:[e.material];if(e.layers.isEnabled(3)||t.some(e=>e instanceof Ct&&e.getLayersOfType("transmission").length>0)){this.ghosted.push([e,e.material]),e.material=Pm;return}for(let e of t)e instanceof Ct&&e.transparent&&!e.depthWrite&&(e.depthWrite=!0,this.forcedOn.push(e))}),this.camera.layers.enable(3),this.camera.layers.enable(8),e.shadowMap.autoUpdate=!1,e.setRenderTarget(t),e.state.buffers.color.setMask(!1),e.render(this.scene,this.camera)}finally{for(let t of(e.state.buffers.color.setMask(!0),e.shadowMap.autoUpdate=r,this.camera.layers.mask=i,this.forcedOn))t.depthWrite=!1;for(let[e,t]of this.ghosted)e.material=t;this.forcedOn.length=0,this.ghosted.length=0}}dispose(){super.dispose(),this.forcedOn.length=0,this.ghosted.length=0,this.scene=void 0,this.camera=void 0}},Pv=class{constructor(e,{depthBuffer:t=!0,stencilBuffer:i=!1,multisampling:r=0,frameBufferType:a=0}={}){this.renderer=e,this.helperStartIndex=0,this.copyPass=new Tx,this.depthTexture=null,this.timer=new TU,this._width=1,this._height=1,this.passes=[],this.helperPasses=[],this.autoRenderToScreen=!0,this.inputBuffer=this.createBuffer(t,i,a,r,!0,"input buffer mrt"),this.inputBufferSingle=this.createBuffer(t,i,a,r,!1," input buffer single"),this.inputBufferSingle.texture.dispose(),this.inputBufferSingle.depthTexture.dispose(),this.inputBufferSingle.texture=this.inputBuffer.texture[0],this.inputBufferSingle.depthTexture=this.inputBuffer.depthTexture,this.outputBuffer=this.inputBuffer.clone(),this.outputBuffer.name="output buffer mrt",this.outputBufferSingle=this.createBuffer(t,i,a,r,!1,"output buffer single"),this.outputBufferSingle.texture.dispose(),this.outputBufferSingle.depthTexture.dispose(),this.outputBufferSingle.texture=this.outputBuffer.texture[0],this.outputBufferSingle.depthTexture=this.outputBuffer.depthTexture,this.setRenderer(e)}get multisampling(){return this.inputBuffer.samples||0}set multisampling(e){let t=this.inputBuffer,i=this.multisampling;i>0&&e>0?(this.inputBuffer.samples=e,this.outputBuffer.samples=e,this.inputBuffer.dispose(),this.outputBuffer.dispose()):i!==e&&(this.inputBuffer.dispose(),this.outputBuffer.dispose(),this.inputBuffer=this.createBuffer(t.depthBuffer,t.stencilBuffer,t.texture.type,e,!0,"new input buffer"),this.inputBuffer.depthTexture=this.depthTexture,this.outputBuffer=this.inputBuffer.clone())}getTimer(){return this.timer}getRenderer(){return this.renderer}setRenderer(e){if(this.renderer=e,null!==e){let t=e.getSize(new t9),i=e.getContext().getContextAttributes()?.alpha??!1,r=this.inputBuffer.texture[0].type;for(let a of(1009===r&&3001===e.outputEncoding&&(this.inputBuffer.texture[0].encoding=3001,this.outputBuffer.texture[0].encoding=3001,this.inputBuffer.dispose(),this.outputBuffer.dispose()),e.autoClear=!1,this.setSize(t.width,t.height,!1),this.passes))a.initialize(e,i,r)}}replaceRenderer(e,t=!0){let i=this.renderer,r=i.domElement.parentNode;return this.setRenderer(e),t&&null!==r&&(r.removeChild(i.domElement),r.appendChild(e.domElement)),i}createDepthTexture(){let e=this.depthTexture=new nC(this._width,this._height);return this.inputBuffer.depthTexture=e,this.inputBuffer.stencilBuffer?(e.format=1027,e.type=1020):e.type=1014,e}deleteDepthTexture(){if(null!==this.depthTexture)for(let e of(this.depthTexture.dispose(),this.depthTexture=null,this.inputBuffer.depthTexture=null,this.inputBuffer.dispose(),this.passes))e.setDepthTexture(null)}createBuffer(e,t,i,r,a,o){let l=this.renderer,h=null===l?new t9:l.getDrawingBufferSize(new t9),c={minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,stencilBuffer:t,depthBuffer:e},d;return r>0?(d=new iM(h.width,h.height,c)).samples=r:(a?(d=new iT(h.width,h.height,2,c)).texture[1].type=1016:d=new iM(h.width,h.height,c),d.depthTexture=new nC(2048,2048),d.depthTexture.type=1015),1009===i&&null!==l&&3001===l.outputEncoding&&(Array.isArray(d.texture)?d.texture.forEach(e
5767=>e.encoding=3001):d.texture.encoding=3001),Array.isArray(d.texture)?d.texture.forEach((e,t)=>{e.name=`EffectComposer.Buffer ${a} ${t}`,e.generateMipmaps=!1}):(d.texture.name=`EffectComposer.Buffer ${a}`,d.texture.generateMipmaps=!1),d.name=o,d}addPass(e,t){let i=this.passes,r=this.renderer,a=r.getDrawingBufferSize(new t9),o=r.getContext().getContextAttributes()?.alpha??!1,l;if(e.MRTCompatible&&(l=this.inputBuffer.texture[0].type),e.MRTCompatible||(l=this.inputBuffer.texture.type),e.setRenderer(r),e.setSize(a.width,a.height),e.initialize(r,o,l),this.autoRenderToScreen&&(i.length>0&&(i[i.length-1].renderToScreen=!1),e.renderToScreen&&(this.autoRenderToScreen=!1)),void 0!==t?i.splice(t,0,e):i.push(e),this.autoRenderToScreen&&(i[i.length-1].renderToScreen=!0),e.needsDepthTexture||null!==this.depthTexture)if(null===this.depthTexture){let t=this.createDepthTexture();for(e of i)e.setDepthTexture(t)}else e.setDepthTexture(this.depthTexture)}setHelperStartIndex(e){this.helperStartIndex=e}removePass(e){let t=this.passes,i=t.indexOf(e);-1!==i&&t.splice(i,1).length>0&&(null!==this.depthTexture&&(t.reduce((e,t)=>e||t.needsDepthTexture,!1)||e.getDepthTexture()===this.depthTexture&&e.setDepthTexture(null)),this.autoRenderToScreen&&i===t.length&&(e.renderToScreen=!1,t.length>0&&(t[t.length-1].renderToScreen=!0)))}removeAllPasses(){let e=this.passes;e.length>0&&(this.autoRenderToScreen&&(e[e.length-1].renderToScreen=!1),this.passes=[])}render(e){let t=this.renderer,i=this.copyPass,r=this.inputBuffer,a=this.outputBuffer,o=this.inputBufferSingle,l=this.outputBufferSingle,h=!1,c,d,p,f;
5767for(let m of(void 0===e&&(e=this.timer.update().getDelta()),this.passes))m.enabled&&(m.MRTCompatible?m.render(t,r,a,e,h):m.render(t,o,l,e,h),m.needsSwap&&(h&&(i.renderToScreen=m.renderToScreen,c=t.getContext(),(d=t.state.buffers.stencil).setFunc(c.NOTEQUAL,1,0xffffffff),i.render(t,r,a,e,h),d.setFunc(c.EQUAL,1,0xffffffff)),p=r,f=o,r=a,o=l,a=p,l=f),m instanceof TF?h=!0:m instanceof Tb&&(h=!1))}setSize(e,t,i){let r=this.renderer;if(this._width=e,this._height=t,void 0===e||void 0===t){let i=r.getSize(new t9);e=i.width,t=i.height}r.setSize(e,t,i);let a=r.getDrawingBufferSize(new t9);for(let e of(this.inputBuffer.setSize(a.width,a.height),this.outputBuffer.setSize(a.width,a.height),this.inputBufferSingle.setSize(a.width,a.height),this.outputBufferSingle.setSize(a.width,a.height),this.passes))e.setSize(a.width,a.height)}reset(){let e=this.timer.isAutoResetEnabled();this.dispose(),this.autoRenderToScreen=!0,this.timer.setAutoResetEnabled(e)}dispose(){for(let e of this.passes)e.dispose();this.passes=[],null!==this.inputBuffer&&this.inputBuffer.dispose(),null!==this.outputBuffer&&this.outputBuffer.dispose(),null!==this.inputBufferSingle&&this.inputBufferSingle.dispose(),null!==this.outputBufferSingle&&this.outputBufferSingle.dispose(),this.deleteDepthTexture(),this.copyPass.dispose(),this.timer.dispose()}},Py=new so({name:"CombineMaterial",uniforms:{inputBufferA:new lj(null),inputBufferB:new lj(null)},blending:0,depthWrite:!1,depthTest:!1,vertexShader:` 5768varying vec2 vUv; 5769void main() { 5770 gl_Position = vec4(position.xy, 1.0, 1.0); 5771 vUv = position.xy * 0.5 + 0.5; 5772} 5773`,fragmentShader:` 5774 varying vec2 vUv; 5775 uniform sampler2D inputBufferA; 5776 uniform sampler2D inputBufferB; 5777 5778 // TODO: Why do we need these when postpro of framemode is enabled??? 5779 layout(location = 1) out vec4 gVelocity; 5780 5781 void main() { 5782 vec4 resA = texture2D(inputBufferA, vUv); 5783 vec4 resB = texture2D(inputBufferB, vUv); 5784 float a = resA.a + resB.a * ( 1.0 - resA.a ); 5785 5786 vec4 res; 5787 res.rgb = resA.rgb + (resB.rgb * (1.0 - resA.a)); 5788 res.a = resA.a + resB.a * (1.0 - resA.a); 5789 gl_FragColor = res; 5790 gVelocity = vec4(0.0); 5791 } 5792`}),Px=class extends Ty{constructor(e){super("HelperPass",void 0,e),this.MRTCompatible=!1,this.fullscreenMaterial=Py,this.helperPass=new Pp(!1,void 0,this.camera),this.helperPass.hasTransmissionPass=!1,this.helperPass.clear=!1,this.helperPass.renderToScreen=!1,this.helperPassOnTop=new Pp(!1,void 0,this.camera),this.helperPassOnTop.hasTransmissionPass=!1,this.helperPassOnTop.clear=!1,this.helperPassOnTop.renderToScreen=!1;let t=new T0({preset:0,edgeDetectionMode:2});this.effectPass=new TR(this.camera,t),this.rt=new iM(10,10,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!0})}setSize(e,t){this.rt.setSize(e,t),this.effectPass.setSize(e,t)}set sceneHelpers(e){this.helperPass.setScene(e)}get sceneHelpers(){return this.helperPass.getScene()}set sceneHelpersOnTop(e){this.helperPassOnTop.setScene(e)}get sceneHelpersOnTop(){return this.helperPassOnTop.getScene()}setCamera(e){this.helperPass.setCamera(e),this.helperPassOnTop.setCamera(e)}initialize(e,t,i){super.initialize(e,t,i),this.effectPass.initialize(e,t,i)}dispose(){super.dispose(),this.rt.dispose(),this.effectPass.dispose(),this.helperPass.dispose(),this.helperPassOnTop.dispose()}render(e,t,i){this.rt.depthTexture=t.depthTexture;let r=e.getClearAlpha();e.setClearAlpha(0),this.helperPass.clearDepth=!0,this.helperPass.clearColorOnly=!0,this.helperPass.render(e,this.rt),this.helperPassOnTop.render(e,this.rt),this.effectPass.renderToScreen=!1,this.effectPass.render(e,this.rt,i),this.fullscreenMaterial.uniforms.inputBufferA.value=i.texture,this.fullscreenMaterial.uniforms.inputBufferB.value=t.texture,e.setClearAlpha(r),e.setRenderTarget(null),e.clear(),e.render(this.scene,this.camera)}},Pb=`#define GLSLIFY 1 5793out vec2 v_uv;void main(){v_uv=uv;gl_Position=vec4(position.xy,1.0,1.0);}`,Pw=`precision highp float;precision highp int;precision highp sampler2D; 5794#define GLSLIFY 1 5795in vec2 v_uv;const float pi=3.14159265;const float num_steps=4.0;const float num_directions=4.0;uniform float near;uniform float far;uniform float fov;uniform vec4 proj_info;uniform bool is_ortho;uniform vec2 resolution;uniform float radius_of_influence;uniform float radius_in_screen_space;uniform float exponent;uniform vec3 ao_color;uniform float bias;uniform sampler2D texture_depth;uniform sampler2D texture_normals;uniform sampler2D texture_blue_noise;uniform sampler2D texture_blue_noise_in_disk;uniform sampler2D texture_color_pass;uniform int frame_index;uniform bool fog_enabled;uniform float fog_near;uniform float fog_far;vec3 uv_to_view_space(vec2 uv,float eye_z){return vec3((uv*proj_info.xy+proj_info.zw)*(is_ortho ? 1.0 : eye_z),eye_z);}float linearize_depth(float depth_sampled){float z=is_ortho ? depth_sampled : depth_sampled*2.0-1.0;return mix((2.0*near*far)/(far+near-z*(far-near)),near+z*(far-near),float(is_ortho));}vec3 get_view_position(vec2 uv_coords){float linear_depth=linearize_depth(texture(texture_depth,uv_coords).x);return uv_to_view_space(uv_coords,linear_depth);}vec3 min_difference(vec3 p,vec3 right,vec3 left){vec3 v1=right-p;vec3 v2=p-left;return(dot(v1,v1)<dot(v2,v2))? v1 : v2;}vec3 rebuild_normal(in vec2 uv,in vec3 p){vec2 one_over_resolution=1.0/resolution;vec3 r=get_view_position(uv+vec2(one_over_resolution.x,0));vec3 l=get_view_position(uv+vec2(-one_over_resolution.x,0));vec3 t=get_view_position(uv+vec2(0,one_over_resolution.y));vec3 b=get_view_position(uv+vec2(0,-one_over_resolution.y));return normalize(cross(min_difference(p,r,l),min_difference(p,t,b)));}float falloff(float distance_squared){float neg_inv_r2=-1.0/(radius_of_influence*radius_of_influence);return distance_squared*neg_inv_r2+1.0;}float ao_contribution(vec3 P,vec3 N,vec3 S){vec3 to_sample=S-P;float norm_squared=dot(to_sample,to_sample);float norm=sqrt(norm_squared);float cos_theta=dot(N,to_sample)/norm;return clamp(cos_theta-bias,0.0,1.0)*clamp(falloff(norm_squared),0.0,1.0);}float compute_ambient_occlusion(vec2 uv,float radius_in_screen_space,vec3 pc,vec3 view_space_n){vec2 one_over_resolution=1.0/resolution;ivec2 noise_uv=ivec2(gl_FragCoord.xy)&ivec2(127);float noise=texelFetch(texture_blue_noise,noise_uv,0).r;noise=fract(noise+0.61803398875*float(frame_index));float theta=noise*2.0*3.1415;float ct=cos(theta);float st=sin(theta);float step_size=radius_in_screen_space/(num_steps+1.0);const float angle_step=2.0*pi/num_directions;float contribution=0.0;for(int i=0;i<int(num_directions);++i){float current_pixel=step_size+1.0;for(int j=0;j<int(num_steps);++j){int index=i*int(num_steps)+j;vec2 blue_noise_sample=texelFetch(texture_blue_noise_in_disk,ivec2(index,0),0).rg;vec2 disk_point;disk_point.x=blue_noise_sample.x*ct-blue_noise_sample.y*st;disk_point.y=blue_noise_sample.x*st+blue_noise_sample.y*ct;vec2 sample_direction=disk_point;vec2 snapped_uv=round(current_pixel*sample_direction)*one_over_resolution+uv;vec3 ps=get_view_position(snapped_uv);current_pixel+=step_size;contribution+=ao_contribution(pc,view_space_n,ps);}}float mult=1.0/(1.0-bias);contribution*=mult/(num_directions*num_steps);return clamp(1.0-contribution*2.0,0.0,1.0);} 5796#define USE_GBUFFER_NORMALS 5797void main(){vec3 view_space_p=get_view_position(v_uv); 5798#ifdef USE_GBUFFER_NORMALS 5799vec3 view_space_n=texture(texture_normals,v_uv).rgb;view_space_n.z*=-1.0; 5800#else 5801vec3 view_space_n=-rebuild_normal(v_uv,view_space_p); 5802#endif 5803float radius_ss=radius_in_screen_space/(is_ortho ? 1.0 : view_space_p.z);float ao=compute_ambient_occlusion(v_uv,radius_ss,view_space_p,view_space_n);float final=pow(ao,exponent);if(view_space_p.z>
5803=far){final=1.0;}vec3 color=mix(ao_color,vec3(1.0),final);if(fog_enabled){float fog_factor=smoothstep(fog_near,fog_far,view_space_p.z);color=mix(color,vec3(1.0),fog_factor);}gl_FragColor=vec4(color,1.0);}`,PS=`#define GLSLIFY 1 5804out vec2 v_uv;void main(){gl_Position=vec4(position.xy,1.0,1.0);v_uv=uv;}`,P_=`#define GLSLIFY 1 5805in vec2 v_uv;uniform sampler2D texture_ao_lrez;uniform sampler2D texture_depth_lrez;uniform sampler2D texture_depth_hrez;uniform float near;uniform float far;float linearize_depth(float depth_sampled){float z=depth_sampled*2.0-1.0;return(2.0*near*far)/(far+near-z*(far-near));}vec2 nearest_depth_filter(in vec2 uv){vec2 resolution=vec2(textureSize(texture_depth_lrez,0));vec2 texel_size=1.0/resolution;vec2 offset=uv-0.5*texel_size;float d_hrez=texture(texture_depth_hrez,uv).r;float a=abs(d_hrez-texture(texture_depth_lrez,offset).r);float b=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(texel_size.x,0.0)).r);float c=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(0.0,texel_size.y)).r);float d=abs(d_hrez-texture(texture_depth_lrez,offset+vec2(texel_size.x,texel_size.y)).r);float min_diff=min(a,min(b,min(c,d)));if(min_diff==a)return offset;if(min_diff==b)return offset+vec2(texel_size.x,0.0);if(min_diff==c)return offset+vec2(0.0,texel_size.y);if(min_diff==d)return offset+vec2(texel_size.x,texel_size.y);}void main(){ 5806#ifdef DEBUG 5807float d_lrez=texture(texture_depth_lrez,v_uv).r;float d_hrez=texture(texture_depth_hrez,v_uv).r;float output_d=mix(linearize_depth(d_lrez)/far,linearize_depth(d_hrez)/far,step(0.5,v_uv.x));gl_FragColor=vec4(vec3(output_d),1.0); 5808#else 5809vec2 filtered_uv=nearest_depth_filter(v_uv);vec4 ao=texture(texture_ao_lrez,filtered_uv);gl_FragColor=vec4(ao.rgb,1.0);gl_FragColor=ao; 5810#endif 5811}`,PA=[[.478712,.875764],[-.337956,-.793959],[-.955259,-.028164],[.864527,.325689],[.209342,-.395657],[-.106779,.672585],[.156213,.235113],[-.413644,-.082856],[-.415667,.323909],[.141896,-.93998],[.954932,-.182516],[-.766184,.410799],[-.434912,-.458845],[.415242,-.078724],[.728335,-.491777],[-.058086,-.066401],[.20299,.686837],[-.808362,-.556402],[.507386,-.640839],[-.723494,-.22924],[.48974,.317826],[-.622663,.765301],[-.01064,.929347],[.663146,.647618],[-.096674,-.413835],[.525945,-.321063],[-.122533,.366019],[.195235,-.687983],[-.563203,.098748],[.418563,.561335],[-.378595,.800367],[.826922,.001024],[-.085372,-.766651],[-.92192,.183673],[-.590008,-.721799],[.167751,-.164393],[.032961,-.56253],[.6329,-.107059],[-.46408,.569669],[-.173676,-.958758],[-.242648,-.234303],[-.275362,.157163],[.382295,-.795131],[.562955,.115562],[.190586,.470121],[.770764,-.297576],[.237281,.93105],[-.666642,-.455871],[-.905649,-.298379],[.33952,.157829],[.701438,-.7041],[-.062758,.160346],[-.220674,.957141],[.642692,.432706],[-.77339,-.015272],[-.671467,.24688],[.158051,.062859],[.806009,.527232],[-.05762,-.247071],[.333436,-.51671],[-.550658,-.315773],[-.652078,.589846],[.008818,.530556],[-.210004,.519896]],PM=new so({vertexShader:`#define GLSLIFY 1 5812#include <skinning_pars_vertex> 5813#include <morphtarget_pars_vertex> 5814out vec3 n;void main(){ 5815#include <beginnormal_vertex> 5816#include <morphnormal_vertex> 5817#include <skinbase_vertex> 5818#include <skinnormal_vertex> 5819#include <defaultnormal_vertex> 5820#include <begin_vertex> 5821#include <morphtarget_vertex> 5822#include <skinning_vertex> 5823vec4 view_space=viewMatrix*modelMatrix*vec4(transformed,1.0);gl_Position=projectionMatrix*view_space;n=normalize(transformedNormal);}`,fragmentShader:`#define GLSLIFY 1 5824in vec3 n;void main(){gl_FragColor=vec4(n,1.0);}`}),PC=new so({vertexShader:PS,fragmentShader:P_,uniforms:{texture_ao_lrez:new lj(null),texture_depth_lrez:new lj(null),texture_depth_hrez:new lj(null),near:new lj(null),far:new lj(null)}}),PE=class extends Ty{constructor(e,t){super("AmbientOcclusionPass",void 0,t),this.fogEnabled=!1,this.fogNear=1,this.fogFar=1e3,this.frameIndex=0,this.sanitizeViewport=!1,this._runHalfRes=!0,this._width=1,this._height=1,this.gBuffer=new iM(1024,1024,{type:pf?1016:1015,depthTexture:new nC(1024,1024),minFilter:1006,magFilter:1006}),this.depthBufferHighRes=new iM(1024,1024,{depthTexture:new nC(1024,1024)}),this.aoBuffer=new iM(1024,1024,{minFilter:1006,magFilter:1006}
5824),this.splineScene=e,this.splineCamera=t;let i=new Float32Array(2*PA.length);for(let e=0;e<PA.length;e++){let t=2*e;i[t+0]=PA[e][0],i[t+1]=PA[e][1]}this.blueNoiseInDiskTexture=new nF(i,PA.length,1,1030,1015),this.blueNoiseInDiskTexture.wrapS=1e3,this.blueNoiseInDiskTexture.wrapT=1e3,this.blueNoiseInDiskTexture.needsUpdate=!0,this.hbaoMaterial=new so({vertexShader:Pb,fragmentShader:Pw,uniforms:{near:new lj(null),far:new lj(null),fov:new lj(null),proj_info:new lj(new iA),is_ortho:new lj(!1),resolution:new lj(new t9),radius_of_influence:new lj(8),radius_in_screen_space:new lj(1),exponent:new lj(1),ao_color:new lj(new iD),bias:new lj(.5),texture_depth:new lj(null),texture_normals:new lj(null),texture_blue_noise:new lj(null),texture_blue_noise_in_disk:new lj(this.blueNoiseInDiskTexture),frame_index:new lj(0),fog_enabled:new lj(!1),fog_near:new lj(1),fog_far:new lj(1e3)}}),this.radius=128,this.aoColor={r:0,g:0,b:0},this.bias=.5,this.hbaoMaterial.uniforms.texture_depth.value=this.gBuffer.depthTexture,this.hbaoMaterial.uniforms.texture_normals.value=this.gBuffer.texture,this.needsSwap=!0,this.aaBuffer=new iM(1024,1024,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1,type:1015});let r=new T0({preset:3,edgeDetectionMode:2});this.effectPass=new TR(this.camera,r)}initialize(e,t,i){super.initialize(e,t,i),this.effectPass.initialize(e,t,i)}setBlueNoiseTexture(e){this.hbaoMaterial.uniforms.texture_blue_noise.value=e}setSize(e,t){this._width=e,this._height=t,this.depthBufferHighRes.setSize(e,t);let i=this._runHalfRes?.5:1,r=e*i,a=t*i;this.gBuffer.setSize(r,a),this.aoBuffer.setSize(r,a),this.hbaoMaterial.uniforms.resolution.value.set(r,a),this.aaBuffer.setSize(r,a),this.effectPass.setSize(r,a)}get runHalfRes(){return this._runHalfRes}set runHalfRes(e){this._runHalfRes=e,this.setSize(this._width,this._height)}setCamera(e){this.splineCamera=e}setScene(e){this.splineScene=e}setDepthTexture(e){this.depthBufferHighRes.depthTexture=e,PC.uniforms.texture_depth_hrez.value=e,PC.needsUpdate=!0}render(e,t,i){let r=null,a=null,o=null,l=null,h=t=>{e.setViewport(0,0,t.width,t.height)};this.sanitizeViewport&&(r=new iA,a=new iA,e.getViewport(r),e.getScissor(a),o=e.getScissorTest(),l=e.getRenderTarget(),e.setScissorTest(!1)),this.splineScene.overrideMaterial=PM;let c=this.splineCamera.layers.mask;if(this.splineCamera.layers.set(5),e.setRenderTarget(this.gBuffer),this.sanitizeViewport&&h(this.gBuffer),e.clear(),e.render(this.splineScene,this.splineCamera),e.setRenderTarget(this.depthBufferHighRes),this.sanitizeViewport&&h(this.depthBufferHighRes),e.clear(),e.render(this.splineScene,this.splineCamera),this.splineScene.overrideMaterial=null,this.splineCamera.layers.mask=c,this.hbaoMaterial.uniforms.radius_of_influence.value=this.radius,this.hbaoMaterial.uniforms.ao_color.value.set(this.aoColor.r,this.aoColor.g,this.aoColor.b),this.hbaoMaterial.uniforms.bias.value=this.bias,this.hbaoMaterial.uniforms.fog_enabled.value=this.fogEnabled,this.hbaoMaterial.uniforms.fog_near.value=this.fogNear,this.hbaoMaterial.uniforms.fog_far.value=this.fogFar,this.hbaoMaterial.uniforms.frame_index.value=this.frameIndex,this.frameIndex++,this.splineCamera.isPerspectiveCamera){this.hbaoMaterial.uniforms.near.value=this.splineCamera.perspCamera.near,this.hbaoMaterial.uniforms.far.value=this.splineCamera.perspCamera.far;let e=this.splineCamera.perspCamera.projectionMatrix.elements,t=2/e[0],i=2/e[5],r=-(1-e[8])/e[0],a=-(1+e[9])/e[5];this.hbaoMaterial.uniforms.proj_info.value.set(t,i,r,a);let o=this.splineCamera.perspCamera.fov*(Math.PI/180),l=this.hbaoMaterial.uniforms.resolution.value.y/(2*Math.tan(.5*o)),h=.5*this.hbaoMaterial.uniforms.radius_of_influence.value*l;this.hbaoMaterial.uniforms.radius_in_screen_space.value=h,this.hbaoMaterial.uniforms.is_ortho.value=!1}else{this.hbaoMaterial.uniforms.near.value=this.splineCamera.orthoCamera.near,this.hbaoMaterial.uniforms.far.value=this.splineCamera.orthoCamera.far;let e=this.splineCamera.orthoCamera.projectionMatrix.elements,t=2/e[0],i=2/e[5],r=-(1+e[12])/e[0],a=-(1-e[13])/e[5];this.hbaoMaterial.uniforms.proj_info.value.set(t,i,r,a);let o=.5*(this.hbaoMaterial.uniforms.resolution.value.y/i),l=this.hbaoMaterial.uniforms.radius_of_influence.value*o;this.hbaoMaterial.uniforms.radius_in_screen_space.value=l,this.hbaoMaterial.uniforms.is_ortho.value=!0}let d=e.aoRenderTarget;this.runHalfRes?(this.fullscreenMaterial=this.hbaoMaterial,e.setRenderTarget(this.aoBuffer),this.sanitizeViewport&&h(this.aoBuffer),e.clear(),e.render(this.scene,this.camera),this.fullscreenMaterial=PC,PC.uniforms.texture_ao_lrez.value=this.aoBuffer.texture,PC.uniforms.texture_depth_lrez.value=this.gBuffer.depthTexture,PC.uniforms.texture_depth_hrez.value=this.depthBufferHighRes.depthTexture,e.setRenderTarget(d),this.sanitizeViewport&&h(d),e.clear(),e.render(this.scene,this.camera)):(this.fullscreenMaterial=this.hbaoMaterial,e.setRenderTarget(this.aaBuffer),this.sanitizeViewport&&h(this.aaBuffer),e.clear(),e.render(this.scene,this.camera),this.effectPass.renderToScreen=!1,this.effectPass.render(e,this.aaBuffer,d)),this.sanitizeViewport&&r&&a&&null!==o&&(e.setRenderTarget(l),e.setViewport(r.x,r.y,r.z,r.w),e.setScissor(a.x,a.y,a.z,a.w),e.setScissorTest(o))}dispose(){super.dispose(),this.gBuffer.dispose(),this.depthBufferHighRes.dispose(),this.aoBuffer.dispose(),this.aaBuffer.dispose(),this.effectPass.dispose(),this.hbaoMaterial.dispose(),this.blueNoiseInDiskTexture.dispose(),this.splineScene=null,this.splineCamera=null}},PT=` 5825varying vec2 vUv; 5826void main() { 5827 vUv = uv; 5828 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 5829}`,PP=` 5830uniform sampler2D tInput; 5831uniform sampler2D tMap; 5832uniform vec2 resolution; 5833varying vec2 vUv; 5834 5835uniform vec2 uResolution; 5836uniform vec2 uCoords; 5837 5838// Draws a rectangle at center <st> with size <size> 5839float rectangle(vec2 st, vec2 size) { 5840 size = vec2(0.5) - size * 0.5; 5841 vec2 uv = vec2(step(size.x, st.x), step(size.y, st.y)); 5842 uv *= vec2(step(size.x, 1.0 - st.x), step(size.y, 1.0 - st.y)); 5843 5844 return uv.x * uv.y; 5845} 5846 5847uniform vec2 uSize; 5848uniform float uScale; 5849uniform float uDPR; 5850uniform float uCurrent; 5851uniform vec3 uSceneColor; 5852 5853void main() { 5854 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 5855 screenUv *= 1.0 / uDPR; 5856 5857 vec2 center = vec2(0.5, -0.5); 5858 vec2 outsideUv = screenUv; 5859 outsideUv += center; 5860 outsideUv -= uCoords.xy / uResolution.xy; 5861 outsideUv = (outsideUv - 0.5) + 0.5; 5862 outsideUv -= center; 5863 vec2 s = (uSize / uResolution) * uScale; 5864 float isOutside = 1.0 - rectangle(outsideUv, s); 5865 5866 vec2 mid = vec2(0.5); 5867 vec2 insideUv = (screenUv - mid + s * mid) / s; 5868 vec4 background = texture2D(tInput, screenUv); 5869 vec4 image = texture2D(tMap, insideUv); 5870 gl_FragColor = mix(image, background, isOutside); 5871} 5872`,PD=class extends TN{constructor(){super(new so({vertexShader:PT,fragmentShader:PP,uniforms:{tInput:new lj(null),tMap:new lj(null),uResolution:new lj(new t9),uSize:new lj(new t9),uCoords:new lj(new t9),uScale:new lj(1),uSceneColor:new lj(new iv(0xff0000)),uDPR:new lj(1),uCurrent:ne
5872w lj(0)}}),"tInput"),this.needsSwap=!0}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.tMap.value}set texture(e){this.uniforms.tMap.value=e}},PO=` 5873void main() { 5874 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 5875}`,PI=` 5876uniform sampler2D toScene; 5877uniform sampler2D fromScene; 5878uniform vec2 resolution; 5879 5880uniform vec2 uResolution; 5881uniform float uDPR; 5882 5883uniform float mixRatio; 5884uniform sampler2D tMixTexture; 5885uniform int useTexture; 5886uniform float threshold; 5887 5888void main() { 5889 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 5890 screenUv *= 1.0 / uDPR; 5891 5892 vec4 texel1 = texture2D( fromScene, screenUv ); 5893 vec4 texel2 = texture2D( toScene, screenUv ); 5894 5895 if (useTexture==1) { 5896 5897 vec4 transitionTexel = texture2D( tMixTexture, screenUv ); 5898 float r = mixRatio * (1.0 + threshold * 2.0) - threshold; 5899 float mixf=clamp((transitionTexel.r - r)*(1.0/threshold), 0.0, 1.0); 5900 5901 gl_FragColor = mix( texel1, texel2, mixf ); 5902 } else { 5903 5904 gl_FragColor = mix( texel1, texel2, mixRatio ); 5905 5906 } 5907} 5908`,PR=class extends TN{constructor(){super(new so({vertexShader:PO,fragmentShader:PI,uniforms:{toScene:new lj(null),fromScene:new lj(null),uResolution:new lj(new t9),uDPR:new lj(1),mixRatio:new lj(0),threshold:new lj(.1),useTexture:new lj(0),tMixTexture:{value:void 0}}}),"toScene"),this.needsSwap=!0}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.fromScene.value}set texture(e){this.uniforms.fromScene.value=e}},PL=` 5909void main() { 5910 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 5911}`,PB=` 5912uniform sampler2D inputBuffer; 5913uniform sampler2D blurredInputBuffer; 5914uniform sampler2D overlay; 5915uniform float blurIntensity; 5916 5917uniform vec2 uResolution; 5918uniform float uDPR; 5919 5920void main() { 5921 vec2 screenUv = gl_FragCoord.xy / uResolution.xy; 5922 screenUv *= 1.0 / uDPR; 5923 5924 vec4 texel1 = texture2D( overlay, screenUv ); 5925 vec4 texel2 = texture2D( inputBuffer, screenUv ); 5926 vec4 texel3 = texture2D( blurredInputBuffer, screenUv ); 5927 5928 float blurMask2 = max(sign(texel1.a), 0.0) * blurIntensity; 5929 gl_FragColor = mix( mix(texel2, texel3, blurMask2), texel1, texel1.a ); 5930} 5931`,Pz=class extends TN{constructor(){super(new so({vertexShader:PL,fragmentShader:PB,uniforms:{inputBuffer:new lj(null),blurredInputBuffer:new lj(null),overlay:new lj(null),uResolution:new lj(new t9),uDPR:new lj(1),blurIntensity:new lj(0)}})),this._blurEnabled=!1,this.blurTarget=new iM(1,1,{minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001}),this.blurPass=new TB({width:window.innerWidth,height:window.innerHeight,kernelSize:Tk.HUGE,resolutionScale:.25}),this.blurPass.renderToScreen=!1,this.uniforms.blurredInputBuffer.value=this.blurTarget.texture}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.overlay.value}set texture(e){this.uniforms.overlay.value=e}setResolution(e,t,i=1){this.uniforms.uResolution.value.set(e,t),this.uniforms.uDPR.value=i,this.blurPass.setSize(e,t),this.blurTarget.setSize(e,t),this.blurPass.setSize(e,t)}get uiCanvas(){return this._uiCanvas}set uiCanvas(e){this._uiCanvas=e,e.texture&&(this.uniforms.overlay.value=e.texture);let t=e.frame;if(t){let e=t.data.backgroundBlur,i=e.radius;this._blurEnabled=e.enabled,this.uniforms.blurIntensity.value=+!!this._blurEnabled,this.blurPass.scale=i/3}}render(e,t,i,r,a){this._blurEnabled&&(this.blurPass.setDepthTexture(this.getDepthTexture()),this.blurPass.render(e,t,this.blurTarget,r,a)),super.render(e,t,i,r,a)}dispose(){super.dispose(),this.blurTarget.dispose(),this.blurPass.dispose(),this.fullscreenMaterial.dispose(),this._uiCanvas=void 0}},PF=` 5932varying vec2 vUv; 5933void main() { 5934 vUv = uv; 5935 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 5936}`,PN=` 5937uniform sampler2D tInput; 5938uniform sampler2D tOverlayImage; 5939varying vec2 vUv; 5940uniform vec2 uResolution; 5941uniform vec2 uRightBottom; 5942uniform vec2 uImageSize; 5943uniform float uScale; 5944uniform float uDPR; 5945 5946vec3 blendNormal(vec3 base, vec3 blend) { 5947 return blend; 5948} 5949 5950vec3 blendNormal(vec3 base, vec3 blend, float opacity) { 5951 return (blendNormal(base, blend) * opacity + base * (1.0 - opacity)); 5952} 5953 5954vec4 drawFixedSizeImage(sampler2D image, vec2 screenUV, vec2 imageSize, vec2 imageCoords, vec2 screenSize, float dpr) { 5955 vec2 uv = (screenUV * screenSize * dpr - imageCoords) / (imageSize * dpr); 5956 if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) { 5957 return vec4(0.0); 5958 } 5959 return texture2D(image, uv); 5960} 5961 5962void main() { 5963 vec2 screenUV = gl_FragCoord.xy / (uResolution.xy * uDPR); 5964 vec2 imageCoords = vec2(uResolution.x * uDPR - uImageSize.x * uScale * uDPR - uRightBottom.x * uDPR, uRightBottom.y * uDPR); 5965 vec4 background = texture2D(tInput, screenUV); 5966 vec4 image = drawFixedSizeImage(tOverlayImage, screenUV, uImageSize * uScale, imageCoords, uResolution, uDPR); 5967 gl_FragColor = vec4(blendNormal(background.rgb, image.rgb, image.a), max(background.a, image.a)); 5968} 5969`,PU=class extends TN{constructor(){super(new so({vertexShader:PF,fragmentShader:PN,uniforms:{tInput:new lj(null),tOverlayImage:new lj(null),uResolution:new lj(new t9),uImageSize:new lj(new t9),uRightBottom:new lj(new t9(20,20)),uScale:new lj(.25),uDPR:new lj(1)}}),"tInput")}get uniforms(){return this.fullscreenMaterial.uniforms}get texture(){return this.uniforms.tOverlayImage.value}set texture(e){this.uniforms.tOverlayImage.value=e,this.uniforms.uImageSize.value.set(e.image.width,e.image.height)}};function Pk(e,t){return t&&t.enabled&&e.push(t.effect),e}var PV=e=>Object.values(TT).includes(e)?e:TT.NORMAL,Pj=class extends tX{constructor(e,t){super(),this._needsDOFResize=t,this.postprocessingState=vB.defaultData,this._scene=new nI,this._camera=new Ej,this.effects=new Map,this.blueNoiseTexture=new nF,this._renderToScreen=!0,this._isUIOverlayEnabled=!1,this.clock=new lT,this.renderer=e,this.debug=!1,this.effects.set("bloom",new T5),this.effects.set("chromaticAberration",new T8),this.effects.set("vignette",new Pt),this.effects.set("noise",new Pe),this.effects.set("colorAverage",new T9),this.effects.set("hueSaturation",new T7),this.effects.set("brightnessContrast",new T6),this.effects.set("depthOfField",new Pi),this.effects.set("pixelation",new Pr),this.effectComposer=new Pv(this.renderer),this.effectComposer.autoRenderToScreen=!1,this.opaquePass=new Pp(!0,this.scene,this.camera),this.opaquePass.clear=!0,this.depthFillPass=new Pg(this.scene,this.camera),this.transmissionPass=new Pc(this.scene,this.camera,this.renderer),this.aoPass=new PE(this.scene,this.camera),this.taaPass=new Ph,this.taaPass.renderToScreen=!1,this.helperPass=new Px(this.camera),this.helperPass.renderToScreen=!1,this.stylesOverlayPass=new PD,this.stylesOverlayPass.enabled=!1,this.uiOverlayPass=new Pz,this.uiOverlayPass.enabled=!1,this.logoOverlayPass=new PU,this.logoOverlayPass.enabled=!1,this.sceneTransitionPass=new PR,this.sceneTransitionPass.enabled=!1,this._initCopyPass(),this._initPasses()}set overlayTexture(e){void 0!==e?(this.stylesOverlayPass.texture=e,this.stylesOverlayPass.enabled=!0):this.stylesOverlayPass.enabled=!1}get overlayTexture(){return this.stylesOverlayPass.texture}set sceneHelpers(e){this.helperPass.sceneHelpers=e}get sceneHelpers(){return this.helperPass.sceneHelpers}set sceneHelpersOnTop(e){this.helperPass.sceneHelpersOnTop=e}get sceneHelpersOnTop(){return this.helperPass.sceneHelpersOnTop}get scene(){return this._scene}set scene(e){this._scene=e,this.opaquePass.setScene(e),this.depthFillPass.setScene(e),this.transmissionPass.setScene(e),this.aoPass.setScene(e)}get camera(){return this._camera}set camera(e){let t=this._camera!==e;this._camera=e,this.opaquePass.setCamera(e),this.depthFillPass.setCamera(e),this.transmissionPass.setCamera(e),t&&this.transmissionPass.updatePasses(this.renderer),this.aoPass.setCamera(e),this.helperPass.setCamera(e),this.effects.get("depthOfField").setCamera(e)}updateRenderToScreen(){let e=!1;for(let t=this.effectComposer.passes.length-1;t>=0;t--){let i=this.effectComposer.passes[t];if(!0===i.enabled&&!e&&this._renderToScreen){i.renderToScreen=!0,e=!0;continue}i.renderToScreen=!1}}get isUIOverlayEnabled(){return this._isUIOverlayEnabled}disableUIOverlay(){this._isUIOverlayEnabled=!1}enableUIOverlay(){this._isUIOverlayEnabled=!0}disableHelpers(){this.helperPass.enabled=!1,this.updateRenderToScreen()}enableHelpers(){this.helperPass.enabled=!0,this.updateRenderToScreen()}updateBlueNoiseTexture(e){this.blueNoiseTexture=new nF(e,128,128),this.blueNoiseTexture.wrapS=1e3,this.blueNoiseTexture.wrapT=1e3,this.blueNoiseTexture.minFilter=1003,this.blueNoiseTexture.magFilter=1003,this.blueNoiseTexture.needsUpdate=!0}setAmbientOcclusionParams(e,t,i,r,a,o,l,h){this.aoPass.enabled=e,this.aoPass.radius=t,this.aoPass.bias=i,this.aoPass.aoColor=r,this.aoPass.fogEnabled=a,this.aoPass.fogNear=o,this.aoPass.fogFar=l,!h!==this.aoPass.runHalfRes&&(this.aoPass.runHalfRes=!h)}setTransmissionPassEnabled(e){this.transmissionPass.enabled=e,this.opaquePass.hasTransmissionPass=e}
5969_initPasses(){if(this.uvEffectPass?.dispose(),this.effectPass?.dispose(),this.effectComposer.removeAllPasses(),this.transmissionPass.updatePasses(this.renderer),this.effectComposer.addPass(this.aoPass),this.effectComposer.addPass(this.opaquePass),this.effectComposer.addPass(this.depthFillPass),this.effectComposer.addPass(this.transmissionPass),this.effectComposer.addPass(this.taaPass),this.postprocessingState.enabled){let e=[this.effects.get("pixelation")].reduce(Pk,[]);e.length>0&&(this.uvEffectPass=new TR(this.camera,...e),this.uvEffectPass.renderToScreen=!1,this.effectComposer.addPass(this.uvEffectPass));let t=[this.effects.get("chromaticAberration"),this.effects.get("bloom"),this.effects.get("depthOfField"),this.effects.get("colorAverage"),this.effects.get("hueSaturation"),this.effects.get("brightnessContrast"),this.effects.get("vignette"),this.effects.get("noise")].reduce(Pk,[]);if(t.length>0&&(this.effectPass=new TR(this.camera,...t),this.effectPass.renderToScreen=!1,this.effectComposer.addPass(this.effectPass),this._needsDOFResize&&this.effects.get("depthOfField")?.enabled&&void 0!==window)){let e=this.renderer.viewportWidth,t=this.renderer.viewportHeight;this.renderer.setSize(e-1,t-1),this.renderer.setSize(e,t)}}this.effectComposer.addPass(this.stylesOverlayPass),this.effectComposer.addPass(this.uiOverlayPass),this.effectComposer.addPass(this.sceneTransitionPass),this.effectComposer.addPass(this.helperPass),this.effectComposer.addPass(this.logoOverlayPass)}_initCopyPass(){if(this._savePass)return;let e=new t9;this.renderer.getDrawingBufferSize(e),this._rt=new iM(e.x,e.y,{depthBuffer:!1,stencilBuffer:!1,wrapS:1e3,wrapT:1e3}),this._rt.samples=0,this._savePass=new Tx(this._rt,!1),this._savePass.renderToScreen=!1}setCopyPass(e){this._rt=e,this._savePass=new Tx(this._rt,!1),this.renderToScreen=!1}get renderToScreen(){return this._renderToScreen}set renderToScreen(e){if(this._renderToScreen===e)return;let t=this.effectComposer;t&&(!0===e?t.removePass(this._savePass):t.addPass(this._savePass),this._renderToScreen=e,this.updateRenderToScreen())}set sceneTransitionFromTexture(e){e!==this.sceneTransitionPass.texture&&(null!==e?this.sceneTransitionPass.enabled=!0:(this.sceneTransitionPass.enabled=!1,this.updateRenderToScreen()),this.sceneTransitionPass.texture=e)}setWatermark(e){this.logoOverlayPass.enabled=null!==e,e&&(this.logoOverlayPass.texture=e)}get texture(){return this._rt&&this._rt.texture}get renderTarget(){return this._rt}updatePostprocessing(e){let{enabled:t,...i}=e,r=!1;for(let e of(t!==this.postprocessingState.enabled&&(r=!0),Object.entries(i))){let t=e[1],i=this.effects.get(e[0]);if(i)for(let[e,a]of(i.enabled!==t.enabled&&(r=!0),i.enabled=t.enabled,Object.entries(t)))"blendFunction"===e?i.blendFunction=PV(a):i[e]=a}this.postprocessingState=e,r&&this._initPasses()}render(){this.depthFillPass.enabled=this.taaPass.enabled||this.postprocessingState.enabled&&this.effects.get("depthOfField")?.enabled===!0,this.effectComposer.render(this.clock.getDelta())}setScissor(e,t,i,r){e instanceof iA?(this.effectComposer.inputBuffer.scissor.set(e.x,e.y,e.z,e.w),this.effectComposer.outputBuffer.scissor.set(e.x,e.y,e.z,e.w)):(this.effectComposer.inputBuffer.scissor.set(e,t,i,r),this.effectComposer.outputBuffer.scissor.set(e,t,i,r));let a=this.renderer.getPixelRatio();this.effectComposer.inputBuffer.scissor.multiplyScalar(a),this.effectComposer.outputBuffer.scissor.multiplyScalar(a),this.renderer.setScissor(e,t,i,r)}setScissorTest(e){this.effectComposer.inputBuffer.scissorTest=e,this.effectComposer.outputBuffer.scissorTest=e,this.renderer.setScissorTest(e)}setViewport(e,t,i,r){e instanceof iA?(this.effectComposer.inputBuffer.viewport.copy(e),this.effectComposer.outputBuffer.viewport.copy(e)):(this.effectComposer.inputBuffer.viewport.set(e,t,i,r),this.effectComposer.outputBuffer.viewport.set(e,t,i,r))}resize(e,t,i){if(this.effectComposer.setSize(e,t,i),this._rt){let i=this.renderer.getPixelRatio();this._rt.setSize(e*i,t*i)}}dispose(){this.uvEffectPass?.dispose(),this.effectPass?.dispose(),this.effectComposer.dispose(),this.blueNoiseTexture.dispose(),this._rt?.dispose(),this.effects.forEac
5969h(e=>e.dispose()),this.effects.clear(),this._scene=void 0,this._camera=void 0,this.renderer=void 0}},PG=s_.lights_fragment_begin,PW=s_.shadowmask_pars_fragment,PH=null,Pq=new so({vertexShader:` 5970attribute vec3 randomColor; 5971varying vec3 vNormal; 5972flat out vec3 vColor; 5973#include <skinning_pars_vertex> 5974#include <morphtarget_pars_vertex> 5975 5976void main() 5977{ 5978#include <beginnormal_vertex> 5979#include <morphnormal_vertex> 5980#include <skinbase_vertex> 5981#include <skinnormal_vertex> 5982vec3 transformed = vec3(position); 5983#include <morphtarget_vertex> 5984#include <skinning_vertex> 5985 5986vNormal = normal; 5987vColor = randomColor; 5988gl_Position = projectionMatrix * (modelViewMatrix * vec4(transformed, 1.0)); 5989} 5990`,fragmentShader:` 5991uniform float depthContrast; 5992varying vec3 vNormal; 5993flat in vec3 vColor; 5994void main() 5995{ 5996vec3 normal = (normalize(vNormal)).rgb; 5997 5998float contrastDepth = (gl_FragCoord.z - 0.5) * depthContrast + 0.5; 5999 6000vec3 resultColor = mix(mix(vColor, normal, 0.2), vec3(contrastDepth), 0.4); 6001gl_FragColor = vec4(resultColor, vColor.r); 6002gl_FragColor = vec4(resultColor, vColor.r); 6003} 6004`,uniforms:{depthContrast:{value:1}}}),PX=new i_,PY=new t9,PQ=class extends nD{constructor(e){super(e),this._pixelRatio=this.getPixelRatio(),this.viewportWidth=1,this.viewportHeight=1,this.resolution=new t9,this.dummyCamera=new Ej,this.sceneTransitionDuration=0,this.sceneTransitionTimeRemaining=-1,this.isXRCopyPassSet=!1,this.clear=(e=!0,t=!0,i=!0)=>{let r=this.getContext(),a=0;e&&(a|=r.COLOR_BUFFER_BIT),t&&(a|=r.DEPTH_BUFFER_BIT),i&&(a|=r.STENCIL_BUFFER_BIT),r.clear(a),r.clearBufferfv(r.COLOR,1,[0,0,0,1])},this.pipeline=new Pj(this,e?.needsDOFResize??!1),this.autoClear=!1;let t=this.setPixelRatio.bind(this),i=this.setSize.bind(this);this.shadowMap.enabled=!0,this.shadowMap.type=1,this.dummyCamera.matrixAutoUpdate=!1,this.domElement.removeAttribute("data-engine");let r=this.getContext();if(r&&"drawingBufferColorSpace"in r)try{r.drawingBufferColorSpace="display-p3"}catch{}this.setPixelRatio=e=>{this._pixelRatio!==e&&(this._pixelRatio=e,t(e))},this.setSize=(e,t,r=!0)=>{(this.viewportWidth!==e||this.viewportHeight!==t)&&(this.viewportWidth=e,this.viewportHeight=t,i(e,t,r),this.normalRenderTarget?.setSize(e*this._pixelRatio,t*this._pixelRatio),this._resizeTransmission(e,t),this.transmissionDepthTarget?.setSize(e*this._pixelRatio/2,t*this._pixelRatio/2),this.pipeline.resize(e,t,r))},this._superDispose=this.dispose,this.dispose=this._currentDispose}createAORenderTarget(){void 0===this.aoRenderTarget&&(this.aoRenderTarget=new iM(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio,{generateMipmaps:!1,minFilter:1006,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1}))}_resizeTransmission(e,t){this.transmissionRenderTarget?.setSize(e*this._pixelRatio/(this.hdTransmission?1:2),t*this._pixelRatio/(this.hdTransmission?1:2)),this.aoRenderTarget?.setSize(e*this._pixelRatio/1,t*this._pixelRatio/1)}get hdTransmission(){return 1===A1.transmissionLod.value}set hdTransmission(e){A1.transmissionLod.value=!0===e?1:2,this._resizeTransmission(this.viewportWidth,this.viewportHeight)}createTransmissionRenderTarget(){void 0===this.transmissionRenderTarget&&(this.transmissionRenderTarget=new iM(this.viewportWidth*this._pixelRatio/(this.hdTransmission?1:2),this.viewportHeight*this._pixelRatio/(this.hdTransmission?1:2),{generateMipmaps:!0,minFilter:1008,magFilter:1006,wrapS:1001,wrapT:1001,depthBuffer:!1}),this.transmissionDepthTarget=new iM(this.viewportWidth*this._pixelRatio/2,this.viewportHeight*this._pixelRatio/2,{minFilter:1003,magFilter:1003,depthBuffer:!1}))}createNormalRenderTarget(){void 0===this.normalRenderTarget&&(this.normalRenderTarget=new iM(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio,{generateMipmaps:!1,minFilter:1003,magFilter:1003,type:1015,depthTexture:new nC(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio)}))}renderNormal(e,t,i){this.normalRenderTarget&&(this.setClearColor(0),i.layers.enable(8),i.layers.disable(0),i.layers.disable(3),t.traverseEntity(e=>{e.layers.isEnabled(8)&&(e.copyPreviousMatrix=!1)}),this.setRenderTarget(this.normalRenderTarget),this.clear(),i instanceof Ej?Pq.uniforms.depthContrast.value=(i.far-i.near)/1e4:Pq.uniforms.depthContrast.value=1,t.overrideMaterial=Pq,this.render(t,i),this.setClearColor(t.bgColor,t.bgColor.a),this.setRenderTarget(null),t.overrideMaterial=e.wireframeState?O6:null,i.layers.enable(0),i.layers.enable(3),t.traverseEntity(e=>{e.layers.isEnabled(8)&&(e.copyPreviousMatrix=!0)}))}renderSplineSceneWithDummyCamera(e,t,i=1){this.dummyCamera.updateCameraState(t.dataPatched),this.dummyCamera.matrix.copy(t.matrixWorld);
6004let r=t.height,a=t.width,o=this.viewportWidth/this.viewportHeight;a<r?a=r*o:r=a/o,this.dummyCamera.setViewplaneSize(a,r);for(let t=0;t<i;t++)this.renderSplineScene(e,this.dummyCamera)}renderSplineScene(e,t,{sceneHelpers:i=this.sceneHelpers,sceneHelpersOnTop:r=this.sceneHelpersOnTop,overrideTransmission:a,overrideNormal:o}={}){let l=e instanceof O9?e.activePage:e,h=l.visible;l.visible=!0;let c=l.scene;this.xr.enabled&&(!1===this.isXRCopyPassSet&&null!==this.getRenderTarget()&&(this.pipeline.setCopyPass(this.getRenderTarget()),this.isXRCopyPassSet=!0),this.xr.updateCamera(t)),this.setClearColor(l.bgColor,l.bgColor.a),l.penumbraSizeArray.forEach((e,t)=>{A1.penumbraSize.value[t]=e}),A1.pixelRatioNode.value=this.getPixelRatio(),0!==this.resolution.x&&0!==this.resolution.y?A1.resolution.value.set(this.resolution.x,this.resolution.y):A1.resolution.value.set(this.viewportWidth*this._pixelRatio,this.viewportHeight*this._pixelRatio),void 0!==o?(A1.normalRenderTarget.value=o,A1.normalRenderTargetDepth.value=PX):c.needsNormal()&&(this.createNormalRenderTarget(),A1.normalRenderTarget.value=this.normalRenderTarget.texture,A1.normalRenderTargetDepth.value=this.normalRenderTarget.depthTexture,this.renderNormal(c,l,t));let d=l.data.ao,p=d.occlusion;if(p&&(this.createAORenderTarget(),A1.aoRenderTarget.value=this.aoRenderTarget.texture),A1.aoEnabled.value=p,this.pipeline.setAmbientOcclusionParams(d.occlusion,d.radius,d.bias,l.aoColor,null!==l.fog,l.backupFog.near,l.backupFog.far,d.aoFullRes&&!pf),this.pipeline.aoPass.setBlueNoiseTexture(this.pipeline.blueNoiseTexture),this.pipeline.isUIOverlayEnabled&&l.uiCanvas?.enabled&&l.uiCanvas.texture&&l.uiCanvas.texture.image.width>0){let e=this.getSize(PY),t=this.getPixelRatio();(l.uiCanvas.width!==this.viewportWidth||l.uiCanvas.height!==this.viewportHeight||l.uiCanvas.dpr!==t)&&l.uiCanvas.applySize({width:this.viewportWidth,height:this.viewportHeight},t),l.uiCanvas.render(this),this.pipeline.uiOverlayPass.uiCanvas=l.uiCanvas,this.pipeline.uiOverlayPass.enabled=!0,this.pipeline.uiOverlayPass.setResolution(e.x,e.y,t),this.pipeline.updateRenderToScreen()}else this.pipeline.uiOverlayPass.enabled=!1,this.pipeline.updateRenderToScreen();if(this.pipeline.logoOverlayPass.enabled){let e=this.getSize(PY),t=this.getPixelRatio();this.pipeline.logoOverlayPass.uniforms.uResolution.value.set(e.x,e.y),this.pipeline.logoOverlayPass.uniforms.uDPR.value=t}let f=!1;if(void 0!==a)A1.transmissionRenderTarget.value=a,A1.transmissionRenderTargetDepth.value=PX,this.pipeline.setTransmissionPassEnabled(!1);else{var m,g;let e=c.needsTransmission();e&&(void 0===this.transmissionRenderTarget&&(f=!0),this.createTransmissionRenderTarget(),A1.transmissionRenderTarget.value=this.transmissionRenderTarget.texture,A1.aspectRatio.value=(m=this.viewportWidth)>=(g=this.viewportHeight)?new t9(g/m,1):new t9(1,m/g),A1.transmissionRenderTargetDepth.value=this.transmissionDepthTarget.texture),this.pipeline.setTransmissionPassEnabled(e)}t.layers.enable(3),t.layers.enable(8),this.pipeline.sceneHelpers=i,this.pipeline.sceneHelpersOnTop=r,this.pipeline.taaPass.enabled=A1.taaEnabled.value,this.pipeline.scene=l,this.pipeline.camera=t,f&&this.pipeline.transmissionPass.updatePasses(this),this.pipeline.postprocessingState!==l.postprocessing&&(this.pipeline.updatePostprocessing(l.postprocessing),i||r||this.pipeline.disableHelpers()),void 0!==this.clearAlphaOverride&&this.setClearAlpha(this.clearAlphaOverride),c.shapeBlendIntances.forEach(e=>{e.onBeforeShadowPass(this)}),l.overrideMaterial=c.wireframeState?O6:null,this.pipeline.render(),A1.taaEnabled.value&&(A1.frameIndex.value=(A1.frameIndex.value+1)%16),t instanceof Ej&&t.copyHistory(),l.visible=h}renderFromSceneForSceneTransitionPass(e,t,i){this.pipeline.renderToScreen=!1,this.pipeline.renderTarget,this.renderSplineScene(e,t),this.pipeline.sceneTransitionFromTexture=this.pipeline.renderTarget.texture,this.sceneTransitionDuration=i,this.sceneTransitionTimeRemaining=i,this.pipeline.renderToScreen=!0;let r=this.pipeline.sceneTransitionPass.uniforms;r.uDPR.value=window.devicePixelRatio,r.uResolution.value.set(this.domElement.width,this.domElement.height).divideScalar(window.devicePixelRatio)}_currentDispose(){this._superDispose(),this.pipeline.dispose(),this.aoRenderTarget?.dispose(),this.aoRenderTarget=void 0,this.transmissionRenderTarget?.dispose(),this.transmissionRenderTarget=void 0,this.transmissionDepthTarget?.dispose(),this.transmissionDepthTarget=void 0,this.normalRenderTarget?.depthTexture?.dispose(),this.normalRenderTarget?.dispose(),this.normalRenderTarget=void 0,this.dummyCamera.dispose(),this.dummyCamera=void 0,A1.normalRenderTarget.value=PX,A1.normalRenderTargetDepth.value=PX,A1.transmissionRenderTarget.value=PX,A1.transmissionRenderTargetDepth.value=PX,A1.aoRenderTarget.value=PX}}
6004,PZ=class extends EM(l4){constructor(e,t=15,i=0x999999){super(e,t,i),this.object=e,this.added=!1,this.name=`DirectionalLightHelper: ${e.uuid}`}raycast(e,t){EP(this.object,PZ.geometryHelper,e,t)}},PK=class extends EM(l0){constructor(e,t=15,i=6710886){super(e,t,i),this.object=e,this.name=`PointLightHelper: ${e.uuid}`}raycast(e,t){EP(this.object,PK.geometryHelper,e,t)}},PJ=class extends EM(l$){constructor(e,t=6710886){super(e,t),this.object=e,this.name=`SpotLightHelper: ${e.uuid}`}raycast(e,t){EP(this.object,PJ.geometryHelper,e,t)}update(){if(void 0!==this.object){let e=PJ._vector,t=this.object.distance?this.object.distance:1e3,i=t*Math.tan(this.object.angle);this.cone.scale.set(i,i,t),e.setFromMatrixPosition(this.object.target.matrixWorld),this.cone.lookAt(e);let r=void 0!==this.color?this.color:this.light.color;if(this.cone.material instanceof Array)for(let e=0,t=this.cone.material.length;e<t;e++)this.cone.material[e].color.set(r);else this.cone.material.color.set(r)}}},P$=PJ;P$._vector=new iD;var P0=class extends n_{constructor(){super(),this.caretIndex=0,this._caretVisibleAlpha=1,this._selectionVisibleAlpha=.3,this.current={start:0,end:void 0},this.matrixAutoUpdate=!1,this.caretMesh=new r7(new sS(1,1),new rB({transparent:!0,opacity:0,side:2})),this.add(this.caretMesh),this.selectionMesh=new r7(new sS(1,1),new rB({color:2857471,transparent:!0,depthTest:!1,depthWrite:!1,opacity:0,side:2})),this.add(this.selectionMesh),this.hide()}get caretHeight(){return this.object?.AD??0}show(e){this.visible=!0,this.object=e,this.caretMesh.scale.set(1,this.caretHeight,1),this.caretMesh.position.y=-(.5*this.caretHeight),this.setCaretPosition(this.caretIndex),this.update()}hide(){this.visible=!1}update(){if(void 0===this.object)return;this.updateHelperMatrix();let{depth:e}=this.object.geometry.userData.parameters;this.caretMesh.position.z=e,this.selectionMesh.position.z=e}updateHelperMatrix(){if(void 0===this.object)return;let e=this.object,t=e.parent;for(let i of(null!==t&&t.updateWorldMatrix(!0,!1),e.matrixAutoUpdate&&e.updateMatrix(),null!==t?(this.matrixWorld.multiplyMatrices(t.matrixWorld,e.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,e.matrix)):this.matrixWorld.multiplyMatrices(e.hiddenMatrix,e.matrix),this.matrix.copy(this.matrixWorld),this.children))i.matrixWorld.copy(this.matrixWorld);e.updateWorldMatrix(!0,!0)}setCaretColor(e){let t=this.caretMesh.material;t.color.setRGB(e.r,e.g,e.b);let i=this._caretVisibleAlpha===t.opacity;this._caretVisibleAlpha=e.a,i&&(t.opacity=this._caretVisibleAlpha)}setSelectionColor(e){this.selectionMesh.material.color.setRGB(e.r,e.g,e.b)}setCaretPosition(e,t={}){if(void 0===this.object)return;this.caretIndex=e;let i=this.object.wrappedText,[r,a]=P2(i,e),[o,l]=e>0?P2(i,e-1):[null,null];(e>0&&i.length?i[o].charAt(l):null)===` 6005`&&(r++,a=0),this.current.start=e,this.current.end=void 0;let[h,c]=P1(this.object,r,a),{AD:d,descender:p}=this.object,{width:f,height:m,depth:g}=this.object.geometry.userData.parameters;this.caretMesh.scale.set(1,this.caretHeight,1),this.caretMesh.position.set(h-.5*("string"==typeof f?0:f),c+(p+.5*d)+.5*("string"==typeof m?0:m),g),this.hideSelectionMesh(),this.showCaretMesh()}setSelection(e,t){if(void 0===this.object)return;let i=this.object.wrappedText;this.current.start=e,this.current.end=t;let r=[],a=[],o=function(e,t,i){let[r,a]=P2(e,t),[o,l]=P2(e,i),h=[];a>=e[r].length&&(r++,a=0);for(let t=r;t<=o;t++){let i=e[t],c=t===r?a:0,d=t===o?l:i.length;h.push([t,c,d])}return h}(i,e,t),{lineHeight:l,AD:h,descender:c}=this.object,d=c+.5*h-.5*l;for(let[e,t,i]of o)if(t!==i){let[o,h]=P1(this.object,e,t),[c,p]=P1(this.object,e,i);h+=d,p+=d,p+=l;let f=r.length/3;r.push(o,h,0),r.push(c,h,0),r.push(c,p,0),r.push(o,p,0),a.push(f+0,f+1,f+2),a.push(f+2,f+3,f+0)}let p=new rQ;p.setIndex(a),p.setAttribute("position",new rV(r,3));let{width:f,height:m,depth:g}=this.object.geometry.userData.parameters;this.selectionMesh.geometry.dispose(),this.selectionMesh.geometry=p,this.selectionMesh.position.x=-(.5*("string"==typeof f?0:f)),this.selectionMesh.position.y=.5*("string"==typeof m?0:m),this.selectionMesh.position.z=g,this.showSelectionMesh(),this.hideCaretMesh()}getSelectionFromPosition(e,t,i="previous"){if(void 0===this.object||void 0===this.object.font)return;let r=this.object.wrappedText,a=r.length,o=this.object.lineHeight,l=a*o,{height:h,verticalAlign:c}=this.object.geometry.userData.parameters,d="string"==typeof h?0:h,p=0;3===c?p=d-l:2===c&&(p=.5*d-.5*l);let f=Math.min(Math.floor(Math.max(Math.min(-t-p,l),0)/o),a-1),m=this.object.charCoords[f],g=this.object.charWidths[f],v=0,y=!1;if("previous"===i){for(let t=0;t<m.length;t++)if(m[t][0]+.5*g[t]-e>0){v=t,y=!0;break}}else if("closest"===i){let t=1/0;for(let i=0;i<m.length;i++){let r=Math.abs(m[i][0]+.5*g[i]-e);r<t&&(t=r,v=i,y=!0)}}else for(let t=0;t<m.length;t++){let i=m[t][0],r=m[t][0]+g[t];if(e>=i&&e<r){v=t,y=!0;break}}return y||(v=m.length),{index:this.getGlobalIndexFromLineAndCharIndexes(r,f,v),lineIndex:f,characterIndex:v}}getGlobalIndexFromLineAndCharIndexes(e,t,i){return e.slice(0,t).reduce((e,t)=>
6005e+=t.length,0)+i}showSelectionMesh(){this.selectionMesh.material.opacity=this._selectionVisibleAlpha}hideSelectionMesh(){this.selectionMesh.material.opacity=0}showCaretMesh(){this.caretMesh.material.opacity=this._caretVisibleAlpha}hideCaretMesh(){this.caretMesh.material.opacity=0}};function P1(e,t,i){let{charCoords:r,charWidths:a,initialOffsetY:o,lineHeight:l}=e;if(r[t]&&0===r[t].length||0===r.length){let i=0,{horizontalAlign:r}=e.data.geometry,a=e.wrappedText,{width:h}=e.geometry.userData.parameters;return 1===a.length&&0===a[0].length&&(3===r?i=.5*h:2===r&&(i=h)),[i,o-l*t]}let h=r[t];if(void 0===h||0===h.length)return[0,0];let[c,d]=h[Math.min(i,h.length-1)];return i>=h.length&&(c+=a[t][i-1]),[c,d]}function P2(e,t){let i=0;for(let r=0;r<e.length;r++){let a=e[r],o=t-i;if(o<=a.length)return[r,o];i+=a.length}return[Math.max(0,e.length-1),e[e.length-1]?.length??0]}var P3=class extends EX(lM,PZ){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=2048,this.shadow.mapSize.height=2048,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.top=1250,r.bottom=-1250,r.right=1250,r.left=-1250,r.near=-1e4,r.far=2500;let a=new l8(this.shadow.camera);a.visible=!1,this.gizmos.shadowmap=a}update(){for(let e in this.shadow.camera.updateProjectionMatrix(),this.gizmos){let t=this.gizmos[e];t instanceof l8&&t.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.objectHelper&&this.objectHelper.update()}updateState(e,t){var i;this.updateState_Light(e,t);let r=void 0!==e.depth&&e.depth!==this.shadow.camera.far||void 0!==e.size&&e.size/2!==this.shadow.camera.right;void 0!==e.size&&(i=e.size,this.shadow.camera.right=i/2,this.shadow.camera.left=-i/2,this.shadow.camera.top=i/2,this.shadow.camera.bottom=-i/2,this.shadow.needsUpdate=!0),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null)),void 0!==e.penumbraSize&&t.scene.markPenumbraSizeDirty(),r&&this.update()}},P4=new iD,P5=new iD,P6=new iP,P8=class extends EX(ly,P$){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.fov=2*t8.RAD2DEG*this.angle,r.aspect=1,r.near=100,r.far=2500;let a=new l8(this.shadow.camera);a.visible=!1,this.gizmos.shadowmap=a,this.update()}update(){for(let e in this.shadow.camera.updateProjectionMatrix(),this.gizmos){let t=this.gizmos[e];t instanceof l8&&t.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),P5.setFromMatrixPosition(this.matrixWorld),P6.setFromRotationMatrix(this.matrixWorld),P4.copy(this.up).applyQuaternion(P6).negate().multiplyScalar(this.distance),this.target.position.copy(P5).add(P4),this.target.updateMatrixWorld(),this.objectHelper&&this.objectHelper.update()}updateState(e,t){this.updateState_Light(e,t),void 0!==e.distance&&(this.distance=e.distance),void 0!==e.decay&&(this.decay=e.decay),void 0!==e.angle&&(this.angle=e.angle),void 0!==e.penumbra&&(this.penumbra=e.penumbra),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.penumbraSize&&t.scene.markPenumbraSizeDirty(),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null))}};function P9(e,t){return[[e[0][0]*t[0][0]+e[0][1]*t[1][0],e[0][0]*t[0][1]+e[0][1]*t[1][1]],[e[1][0]*t[0][0]+e[1][1]*t[1][0],e[1][0]*t[0][1]+e[1][1]*t[1][1]]]}function P7(e){return[[e[0][0],e[1][0]],[e[0][1],e[1][1]]]}var De=Ds||(Ds={});function Dt(e){return[e[0],e[3],e[1],e[4],e[2],e[5]]}De.identity=function(){return[1,0,0,0,1,0,0,0,1]},De.copy=function(e,t=De.identity()){for(let i=0,r=e.length;i<r;i++)t[i]=e[i];return t},De.create=function(e,t,i,r,a,o){return De.setAbcdef(De.identity(),e,t,i,r,a,o)},De.setAbcdef=function(e,t,i,r,a,o,l){return e[0]=t,e[1]=r,e[2]=o,e[3]=i,e[4]=a,e[5]=l,e},De.append=function(e,t){let[i,r,a,o,l,h]=Dt(e),[c,d,p,f,m,g]=Dt(t);
6005return De.create(c*i+d*a,c*r+d*o,p*i+f*a,p*r+f*o,m*i+g*a+l,m*r+g*o+h)},De.prepend=function(e,t){let[i,r,a,o,l,h]=Dt(e),[c,d,p,f,m,g]=Dt(t),v=i,y=r,x=a,b=o;return(1!==c||0!==d||0!==p||1!==f)&&(v=i*c+r*p,y=i*d+r*f,x=a*c+o*p,b=a*d+o*f),De.create(v,y,x,b,l*c+h*p+m,l*d+h*f+g)},De.getAbcdef=Dt,De.invert=function(e){let[t,i,r,a,o,l]=De.getAbcdef(e),h=t*a-i*r;return De.create(a/h,-i/h,-r/h,t/h,(r*l-a*o)/h,-(t*l-i*o)/h)},De.apply=function([e,t],i){let[r,a,o,l,h,c]=De.getAbcdef(i);return[r*e+o*t+h,a*e+l*t+c]},De.applyInverse=function(e,t){let[i,r,a,o,l,h]=De.getAbcdef(t),c=1/(i*o+-(a*r)),[d,p]=e;return[o*c*d+-a*c*p+(h*a-l*o)*c,i*c*p+-r*c*d+(-h*i+l*r)*c]},De.scale=function(e,t,i=t){let[r,a,o,l,h,c]=De.getAbcdef(e);return De.setAbcdef(e,r*t,a*i,o*t,l*i,h*t,c*i),e},De.rotate=function(e,t){let i=Math.cos(t),r=Math.sin(t),[a,o,l,h,c,d]=De.getAbcdef(e);return De.setAbcdef(e,a*i-o*r,a*r+o*i,l*i-h*r,l*r+h*i,c*i-d*r,c*r+d*i),e},De.rotateAround=function(e,t,i){let[r,a]=i,o=De.translate(e,-r,-a);return o=De.rotate(o,t),o=De.translate(o,r,a)},De.translate=function(e,t,i){let[r,a,o,l,h,c]=De.getAbcdef(e);return De.setAbcdef(e,r,a,o,l,h+t,c+i),e},De.setTranslate=function(e,t,i){let[r,a,o,l]=De.getAbcdef(e);return De.setAbcdef(e,r,a,o,l,t,i),e},De.setPosition=function(e,t,i){let[r,a,o,l]=De.getAbcdef(e);return De.setAbcdef(e,r,a,o,l,t,i),e},De.getScale=function(e){let[t,i,r,a]=De.getAbcdef(e);return[Math.sqrt(t*t+i*i),Math.sqrt(r*r+a*a)]},De.getPosition=function(e){let[,,,,t,i]=De.getAbcdef(e);return[t,i]},De.getRotation=function(e,t){return De.decompose(e,t).rotation},De.decompose=function(e,t){let[i,r,a,o,l,h]=De.getAbcdef(e),{rotation:c,scale:d,shear:p}=function(e){let t,i,r,a,o,l,h,c,d,p,f,m,[g,v,y]=(t=(e[0][0]+e[1][1])/2,i=(e[0][0]-e[1][1])/2,r=(e[1][0]+e[0][1])/2,o=Math.sqrt(t*t+(a=(e[1][0]-e[0][1])/2)*a),l=Math.sqrt(i*i+r*r),h=Math.atan2(r,i),d=((c=Math.atan2(a,t))-h)/2,f=[[Math.cos(p=(c+h)/2),Math.sin(p)],[-Math.sin(p),Math.cos(p)]],m=[[Math.cos(d),Math.sin(d)],[-Math.sin(d),Math.cos(d)]],f[0][0]*=-1,f[0][1]*=-1,m[0][0]*=-1,m[1][0]*=-1,[f,[[o+l,0],[0,o-l]],m]),x=P9(g,P7(y)),b=P9(P9(y,v),P7(y));return{rotation:Math.atan2(x[1][0],x[0][0]),scale:[b[0][0],b[1][1]],shear:[b[0][1]/b[1][1],b[1][0]/b[0][0]]}}([[i,a],[r,o]]);return{position:[l+(t[0]*i+t[1]*a)-t[0],h+(t[0]*r+t[1]*o)-t[1]],scale:d,rotation:c,shear:p,pivot:t}},De.compose=function(e,t,i,r,a=[0,0]){let[o,l]=e,[h,c]=r,[d,p,f,m]=function({rotation:e,scale:t,shear:i}){let r=Math.cos(e),a=Math.sin(e),o=P9([[r,-a],[a,r]],[[t[0],i[0]*t[1]],[i[1]*t[0],t[1]]]);return[o[0][0],o[1][0],o[0][1],o[1][1]]}({rotation:i,scale:t,shear:a});return De.create(d,p,f,m,o-(h*d+c*f)+h,l-(h*p+c*m)+c)};var Di,Dr,Ds,Da,Dn=Math.PI/180,Do=class{constructor(e,t,i){this.uuid=e,this.data=t,this.localMatrix=Ds.identity(),this.worldMatrix=Ds.identity(),this.ignoreCameraZoom=!1,this.visible=!0,this._singleBBox=new Du,this._recursiveBBox=new Du,this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this.stateSelection=null,this.prevState=null,this.currentState=null,this.reversibleToState=null,this.currentTransitionEvent=null,this.previousAction=null,this.name="",this.position=[0,0],this.scale=[1,1],this.rotation=0,this.shear=[0,0],this.emitter=SX(),this.dpr=i.dpr??1,this.dataPatched=t}project(e,t){let i=this.worldMatrix;return t&&(i=Ds.append(t.worldMatrix,i)),Ds.applyInverse(e,i)}intersects(e,t,i,r=!1){return this.visible&&!this.data.raycastLock&&this.intersectsInLocalSpace(...this.project([e,t],i),r)}intersectsInLocalSpace(e,t,i=!1){let{min:r,max:a}=i?this.recursiveBBox:this.singleBBox;return e>=r[0]&&e<=a[0]&&t>=r[1]&&t<=a[1]}applyTransforms(e){e.setTransform(this.worldMatrix,this.ignoreCameraZoom)}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges()),this._recursiveBBox}updateLocalMatrix(){this.localMatrix=Ds.compose(this.position,this.scale,this.rotation*Dn,xJ.getPivot(this.dataPatched),this.shear)}updateWorldMatrix(e,t,i){let r=this.parent;t&&null!=r&&r.updateWorldMatrix(e,!0,!1),e&&this.updateLocalMatrix(),this.parent?this.worldMatrix=Ds.append(this.parent.worldMatrix,this.localMatrix):this.worldMatrix=Ds.copy(this.localMatrix),this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}get pivot(){return xJ.getPivot(this.data)}getCenter(){return[0,0]}getHalfSize(){return[0,0]}get id(){return this.uuid}resetBBoxNeedsUpdateSelf(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0}resetBBoxNeedsUpdate(){this.resetBBoxNeedsUpdateSelf(),this.traverseAncestors(e=>{e.resetBBoxNeedsUpdateSelf()})}updateTransformState(e){let t=!1;void 0!==e.position&&(t=!0,this.position=e.position),void 0!==e.rotation&&(t=!0,this.rotation=e.rotation),void 0!==e.scale&&(t=!0,this.scale=e.scale),void 0!==e.shear&&(t=!0,this.shear=e.shear),t&&(this.updateWorldMatrix(!0,!1,!0),this.resetBBoxNeedsUpdate())}updateByOp(e,t,i){0===e.type&&void 0!==e.props.visible&&(this.visible=e.props.visible),this.data=t,this.data=t;let r=e,a=fv(e.path,["states","*"]);if(null!==a){if(0===e.type){let[t]=a;if(this?.stateSelection===t){let t={...e.props};if(delete t.name,Object.values(e.props).some(e=>void 0===e)){let i=this.data;if(void 0!==i){let r=fM.zoom(i,e.path.slice(2));if(r)for(let i in e.props)void 0===e.props[i]&&i in r&&(t[i]=r[i])}}r={...e,props:t,path:e.path.slice(2)}}}}else if(0===e.type){let t=this.stateSelection?this.data.states.data(this.stateSelection):void 0;if(void 0!==t){if(void 0!==e.props.name&&t.name){let{name:e,...i}=t;t=i}let i=fM.removeOverridden(e.path,e.props,t);r={...e,props:i}}}this.updateByPatchedOpBase(r,xV.patch(this.data,this.stateSelection?this.data.states.data(this.stateSelection):void 0),i)}changeSelectedState(e,t,i=!1){if(!(0===this.data.states.length&&!i)){for(let e of this.data.states)xV.toOps(this.data,e.data).forEac
vendor: 4,150 bytes, line 6005
6005h(e=>{let i=fS.replaceProps(e,this.data);this.dataPatched=this.data,this.updateByPatchedOp(i,this.data,t)});if(null!==e){let i=this.data.states.data(e);i&&(this.dataPatched=xV.patch(this.data,i),xV.toOps(this.data,i).forEach(e=>{this.updateByPatchedOp(e,this.dataPatched,t)}))}i&&this.updateTransformState(this.dataPatched),this.stateSelection=e}}updateState(e,t){void 0!==e.name&&(this.name=e.name),void 0!==e.visible&&(this.visible=e.visible),this.updateTransformState(e)}updateByPatchedOpBase(e,t,i){this.dataPatched=t,this.updateByPatchedOp(e,t,i)}updateByPatchedOp(e,t,i){0===e.path.length&&0===e.type&&this.updateState(e.props,i),this.requestRender()}traverseFrameAncestors(e){this.traverseAncestors(t=>{"frame2d"===t.data.type&&e(t)})}traverseAncestors(e){let t=this.parent;for(;t;)e(t),t=t.parent}requestRender(){this.traverseFrameAncestors(e=>{e.requestRender()})}clone(e){let t=new Do(this.uuid,this.data,e);return t.parent=void 0,t}addEventListener(e,t){this.emitter.on(e,t)}removeEventListener(e,t){this.emitter.off(e,t)}dispatchEvent(e){this.emitter.emit(e.type,{...e,target:e.target??this})}traverseSortNextHelper(){let e=this.parent;if(e){let t=e.children;if(t){let i=t.indexOf(this)+1;return t[i]?t[i]:e.traverseSortNextHelper()}}}sortNext(){let e=this.children;return e&&e.length>0&&e[0]?e[0]:this.traverseSortNextHelper()}isDescendantOf(e){e instanceof Do&&(e=e.uuid);let t=this;for(;t.parent;){if(t.parent.uuid===e)return!0;t=t.parent}return!1}},Dl=class extends Do{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.context=i,this.children=[]}add(e){e.parent&&e.parent instanceof Dl&&e.parent.remove(e),this.children.push(e),e.parent=this}remove(e){let t=this.children.indexOf(e);t>=0&&(this.children.splice(t,1),e.parent=void 0)}traverse(e){let t=e(this);if(!0!==t)for(let i of this.children)i instanceof Dl?i.traverse(e):t=e(i)}intersectsChildrenHelper(e,t,i,r,a){for(let o of this.children)if(o.intersects(e,t,i,!1)&&(a.push(o),r)||o instanceof Dl&&o.intersectsChildrenHelper(e,t,i,r,a))return!0;return!1}intersectsChildren(e,t,i,r=!1,a=[],o=!1){return this.intersectsChildrenHelper(e,t,i,r,a),a}intersectsChildrenHelperReverse(e,t,i,r,a){for(let o of this.children)if(o instanceof Dl&&o.intersectsChildrenHelperReverse(e,t,i,r,a)||o.intersects(e,t,i,!1)&&(a.push(o),r))return!0;return!1}intersectsChildrenReverse(e,t,i,r=!1,a=[],o=!1){return this.intersectsChildrenHelperReverse(e,t,i,r,a),a}updateWorldMatrix(e,t,i){if(super.updateWorldMatrix(e,t,i),i&&this.children)for(let t of this.children)t.updateWorldMatrix(e,!1,!0)}find(e){let t;return this.traverse(i=>{i.uuid===e&&(t=i)}),t}innerDrawChildren(e){for(let t=this.children.length-1;t>=0;t--)this.children[t].draw(e)}resetBBoxNeedsUpdate(){super.resetBBoxNeedsUpdate(),this.traverse(e=>{e.resetBBoxNeedsUpdateSelf()})}clone(e){let t=new Dl(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},Dh=class extends Dl{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.updateState(t,i)}draw(e){this.visible&&(e.save(),this.applyTransforms(e),this.innerDrawChildren(e),e.restore())}clone(e){let t=new Dh(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},Dc=[[-1,1],[-1,-1],[1,-1],[1,1]],Dd=(e,t,i)=>{let r=e.getCenter(),a=e.getHalfSize(),o=Ds.append(t,e.worldMatrix);0===a[0]&&0===a[1]?i.push(Ds.apply(r,o)):Dc.forEach(e=>{let t=[e[0]*a[0]+r[0],e[1]*a[1]+r[1]];i.push(Ds.apply(t,o))})},Du=class{constructor(){this.matrix=Ds.identity(),this.min=[1/0,1/0],this.max=[-1/0,-1/0],this.vertices=[],this.edges=[]}setFromObjectSize(e,t=!1){e.updateWorldMatrix(),this.makeEmpty(),Ds.copy(e.worldMatrix,this.matrix);let i=Ds.invert(e.worldMatrix);this.expandByObjectSize(e,i,t)}expandByObjectSize(e,t,i=!1){let r=[];!0===i&&e instanceof Dl?e.traverse(e=>{e.visible&&Dd(e,t,r)}):Dd(e,t,r),this.setFromPoints(r)}setFromSize(e,t,i){this.makeEmpty(),Ds.copy(i,this.matrix),this.expandBySize(e,t,i)}expandBySize(e,t,i){[Ds.apply([0,0],i),Ds.apply([0,t],i),Ds.apply([e,t],i),Ds.apply([e,0],i)].forEach(e=>this.expandByPoint(e))}getCenter(){let[e,t]=this.min,[i,r]=this.getHalfSize();
6005return Ds.apply([e+i,t+r],this.matrix)}getSize(){return[this.max[0]-this.min[0],this.max[1]-this.min[1]]}getHalfSize(){return[(this.max[0]-this.min[0])*.5,(this.max[1]-this.min[1])*.5]}makeEmpty(){this.min=[1/0,1/0],this.max=[-1/0,-1/0]}setFromPoints(e){for(let t of(this.makeEmpty(),e))this.expandByPoint(t)}expandByPoint(e){this.min=[Math.min(this.min[0],e[0]),Math.min(this.min[1],e[1])],this.max=[Math.max(this.max[0],e[0]),Math.max(this.max[1],e[1])]}computeVertices(){let[e,t]=this.getHalfSize(),i=this.getCenter(),[r,a,o,l]=Ds.getAbcdef(this.matrix),h=Ds.create(r,a,o,l,i[0],i[1]);this.vertices=Dc.map(([i,r])=>Ds.apply([i*e,r*t],h))}computeEdges(){this.edges=[];for(let e=0,t=this.vertices.length;e<t;++e)this.edges.push([this.vertices[e],this.vertices[(e+1)%t]])}project(e,t){let i=this.matrix;return t&&(i=Ds.append(t.worldMatrix,i)),Ds.applyInverse(e,i)}intersects(e,t,i){return this.intersectsInLocalSpace(...this.project([e,t],i))}intersectsInLocalSpace(e,t){let{min:i,max:r}=this;return e>=i[0]&&e<=r[0]&&t>=i[1]&&t<=r[1]}containsPoint(e){let[t,i]=e,[r,a]=this.min,[o,l]=this.max;return t>=r&&t<=o&&i>=a&&i<=l}intersectsBBox2D(e){for(let t=0,i=this.edges.length;t<i;t++){let i=this.edges[t];for(let t=0,r=e.edges.length;t<r;t++)if(function(e,t){let[[i,r],[a,o]]=e,[[l,h],[c,d]]=t,p=(i-a)*(h-d)-(r-o)*(l-c);if(0===p)return!1;let f=((i-l)*(h-d)-(r-h)*(l-c))/p,m=-((i-a)*(r-h)-(r-o)*(i-l))/p;return f>=0&&f<=1&&m>=0&&m<=1}(i,e.edges[t]))return!0}for(let t=0,i=e.vertices.length;t<i;t++){let i=e.vertices[t];if(this.containsPoint(i))return!0}return!1}ensureMinMax(){let e=this.min,t=this.max;this.min=[Math.min(e[0],t[0]),Math.min(e[1],t[1])],this.max=[Math.max(e[0],t[0]),Math.max(e[1],t[1])]}copy(e){this.min=[...e.min],this.max=[...e.max],Ds.copy(e.matrix,this.matrix),this.computeVertices(),this.computeEdges()}clone(){let e=new Du;return e.copy(this),e}},Dp=new Promise(e=>{Da=e}),Df=!1;function Dm(e){let t=!1;return e.scene.objects.traverse((e,i)=>{("Mesh"===i.type&&"UIGeometry"===i.geometry.type||"Page"===i.type&&void 0!==i.uiFrame)&&(t=!0)}),t}async function Dg(e){let t=await Dp;DS||(D_||(D_=t({locateFile:()=>e})),DS=await D_)}var Dv=Ds.identity(),Dy=class{constructor(e,t=1){this.canvas=e,this._dpr=t,this._width=0,this._height=0,this._strokeMode="inside",this._layerBlur=0,this._backgroundBlur=0,this._dropShadowBlur=0,this._dropShadowOffsetX=0,this._dropShadowOffsetY=0,this._dropShadowColor=gP.transparent,this._innerShadowBlur=0,this._innerShadowOffsetX=0,this._innerShadowOffsetY=0,this._innerShadowSpread=0,this._innerShadowColor=gP.transparent,this._fonts=new Map,this._isSizeDirty=!1;try{let i=e.getBoundingClientRect();e.width=i.width*t,e.height=i.height*t}catch{}this._currentM3Transform=Dv,this._currentTransform=new Float32Array(Dv)}get dpr(){return this._dpr}set dpr(e){this._dpr=e,this._isSizeDirty=!0}
6005async init(){if(!this.wasmURL)throw Error("Your must set the wasm binary url with renderer.wasmURL = ... before you can call renderer.init");await Dg(this.wasmURL),this._surface=DS.MakeWebGLCanvasSurface(this.canvas),this.ctx=this._surface?.getCanvas(),this._paint=new DS.Paint,this._paint.setAntiAlias(!0),this._paintFill=this._paint.copy(),this._paintFill.setStyle(DS.PaintStyle.Fill),this._paintStroke=this._paint.copy(),this._paintStroke.setStyle(DS.PaintStyle.Stroke),this.ctx?.scale(this.dpr,this.dpr)}get currentTransform(){return this._currentM3Transform}get currentTransformBuffer(){return this._currentTransform}set currentTransform(e){this._currentM3Transform=e,this._currentTransform.set(e)}async loadFont(e,t){let i=await (await fetch(e)).arrayBuffer();this.registerFont(i,t)}registerFont(e,t){if(this._fonts.has(t))return;let i=DS.FontMgr.FromData(e);if(i)this._fonts.set(t,i);else throw Error("Invalid font data for "+t)}get width(){return this._width}get height(){return this._height}set strokeColor(e){this._paintStroke&&this._paintStroke.setColor(Db(e),DS.ColorSpace.DISPLAY_P3)}set fillColor(e){this._paintFill&&this._paintFill.setColor(Db(e),DS.ColorSpace.DISPLAY_P3)}set lineWidth(e){this._paintStroke&&this._paintStroke.setStrokeWidth("center"===this._strokeMode?e:2*e)}set strokeMode(e){this._strokeMode=e}set dropShadowBlur(e){this._dropShadowBlur=e}set dropShadowColor(e){this._dropShadowColor=e}set dropShadowOffsetX(e){this._dropShadowOffsetX=e}set dropShadowOffsetY(e){this._dropShadowOffsetY=e}set innerShadowBlur(e){this._innerShadowBlur=e}set innerShadowColor(e){this._innerShadowColor=e}set innerShadowOffsetX(e){this._innerShadowOffsetX=e}set innerShadowOffsetY(e){this._innerShadowOffsetY=e}set innerShadowSpread(e){this._innerShadowSpread=e}set layerBlur(e){this._layerBlur=e}set backgroundBlur(e){this._backgroundBlur=e}clear(){this.ctx?.clear(DS.TRANSPARENT)}save(){this.ctx?.save()}restore(){this.ctx?.restore()}beginPath(){this._currentPath?.delete(),this._currentPath=new DS.Path}closePath(){let e=this._currentPath;if(e){if(e.isEmpty())return;let t=e.getBounds();(t[3]-t[1]||t[2]-t[0])&&e.close()}}fill(){this._paintInner(this._paintFill,!0)}stroke(){this._paintInner(this._paintStroke,!1)}clipRect(e,t,i,r,a=0,o=0,l=0,h=0){let c=DS.XYWHRect(e,t,i,r);if(0===a&&0===o&&0===h&&0===l)this.ctx?.clipRect(c,DS.ClipOp.Intersect,!0);else{let e=DS.RRectXY(c,a,a);e[4]=e[5]=a,e[6]=e[7]=o,e[8]=e[9]=l,e[10]=e[11]=h,this.ctx?.clipRRect(e,DS.ClipOp.Intersect,!0)}}_applyShadowOffsetMatrix(){if(this.ctx){let e=Ds.invert(this.currentTransform);this.ctx.concat(e);let t=Ds.translate(Ds.identity(),this._dropShadowOffsetX,this._dropShadowOffsetY);this.ctx.concat(t),this.ctx.concat(this._currentTransform)}}_applyEffectsToPaint(e,t,i=!0){if(this.ctx&&this._currentPath){let r,a=!1;if(i&&this._hasDropShadow()){let i,r=e.copy();r.setColor(Db(this._dropShadowColor)),this._dropShadowBlur>0&&(i=DS.MaskFilter.MakeBlur(DS.BlurStyle.Normal,this._dropShadowBlur*this.dpr*(this.camera?.scale??1),!1),r.setMaskFilter(i)),this.ctx.save(),this.ctx.clipPath(this._currentPath,DS.ClipOp.Difference,!0),this._applyShadowOffsetMatrix(),t(r),this.ctx.restore(),r.delete(),i?.delete()}if(this._backgroundBlur>0&&i){this.ctx.save(),this.ctx.clipPath(this._currentPath,DS.ClipOp.Intersect,!0);let t=DS.ImageFilter.MakeBlur(this._backgroundBlur,this._backgroundBlur,DS.TileMode.Clamp,null),i=e.copy();i.setImageFilter(t),i.setAlphaf(1);let r=this._currentPath.computeTightBounds();this.ctx.saveLayer(i,r,null,DS.SaveLayerInitWithPrevious),this.ctx.drawColor(e.getColor()),this.ctx.restore(),this.ctx.restore(),i.delete(),t.delete(),a=!0}if(this._layerBlur>0){let i=e.copy();r=DS.MaskFilter.MakeBlur(DS.BlurStyle.Normal,this._layerBlur*this.dpr*(this.camera?.scale??1),!1),i.setMaskFilter(r),t(i),i.delete(),r.delete(),a=!0}if(a||t(e),i&&this._hasInnerShadow()){let e,t=new DS.Paint;t.setAntiAlias(!0),t.setStyle(DS.PaintStyle.Fill),t.setColor(Db(this._innerShadowColor)),this._innerShadowBlur>0&&(e=DS.MaskFilter.MakeBlur(DS.BlurStyle.Normal,this._innerShadowBlur*this.dpr*(this.camera?.scale??1),!1),t.setMaskFilter(e));let i=this._currentPath.computeTightBounds(),[r,a,o,l]=i;this.ctx.save(),this.ctx.clipPath(this._currentPath,DS.ClipOp.Intersect,!0),this.ctx.saveLayer(t,i,null,DS.SaveLayerInitWithPrevious),this.ctx?.translate(this._innerShadowOffsetX,this._innerShadowOffsetY),this.ctx.drawRect(DS.XYWHRect(-1e3-this._innerShadowOffsetX,-1e3-this._innerShadowOffsetY,2e3+(o-r)+Math.abs(2*this._innerShadowOffsetX),2e3+(l-a)+Math.abs(2*this._innerShadowOffsetY)),t),t.setBlendMode(DS.BlendMode.Clear),this.ctx.drawPath(this._currentPath,t),this.ctx.restore(
6005),this.ctx.restore(),t.delete(),e?.delete()}}}_paintInner(e,t=!0){if(this.ctx&&this._currentPath&&e){let i=this.ctx,r=this._currentPath;this._applyEffectsToPaint(e,e=>{let a=!1;t||"center"===this._strokeMode||(i.save(),i.clipPath(r,"outside"===this._strokeMode?DS.ClipOp.Difference:DS.ClipOp.Intersect,!0),a=!0),i.drawPath(r,e),a&&i.restore()},t)}}_hasDropShadow(){return this._dropShadowColor?.a>0}_hasInnerShadow(){return this._innerShadowColor?.a>0}path(e){this._currentPath?.addPath(DS.Path.MakeFromSVGString(e))}ellipse(e,t,i,r,a,o,l,h){if(!Dx([e,t,i,r])||!this._currentPath)return;if(i<0||r<0)throw Error("radii cannot be negative");let c=DS.XYWHRect(e-i,t-r,2*i,2*r);this._currentPath?.addOval(c)}rect(e,t,i,r,a=0,o=0,l=0,h=0){let c=DS.XYWHRect(e,t,i,r);if(Dx(c))if(0===a&&0===o&&0===h&&0===l)this._currentPath?.addRect(c);else{let e=DS.RRectXY(c,a,a);e[4]=e[5]=a,e[6]=e[7]=o,e[8]=e[9]=l,e[10]=e[11]=h,this._currentPath?.addRRect(e)}}getHorizontalAlign(e){switch(e){case 2:return DS.TextAlign.Right;case 3:return DS.TextAlign.Center;case 4:return DS.TextAlign.Justify;default:return DS.TextAlign.Left}}drawTextInner(e,t,i,[r,a,o,l],h,c,d=!0){let p=0,{ctx:f}=this;if(!f)return p;let m=c.copy(),g=c.copy();return g.setAlphaf(0),this._applyEffectsToPaint(m,c=>{t.pushPaintStyle(i,c,g),t.addText(e);let d=t.build();d.layout(o);let m=a;2===h?m+=(l-d.getHeight())/2:3===h&&(m+=l-d.getHeight()),f.drawParagraph(d,r,m),p=d.getHeight(),t.reset(),d.delete()},d),m.delete(),g.delete(),p}drawText(e,t){let i=0,r=this._fonts.get(t.font),{ctx:a,_paintFill:o,_paintStroke:l}=this;if(r&&a){let a=new DS.TextStyle({fontFamilies:[t.font],fontSize:t.fontSize,heightMultiplier:t.lineHeight,letterSpacing:t.letterSpacing}),h=new DS.ParagraphStyle({textStyle:a,textAlign:this.getHorizontalAlign(t.horizontalAlign)}),c=DS.XYWHRect(t.x,t.y,t.width,t.height),d=DS.ParagraphBuilder.Make(h,r);o&&(i=this.drawTextInner(e,d,a,c,t.verticalAlign,o,!0)),l&&(i=this.drawTextInner(e,d,a,c,t.verticalAlign,l,!1)),d.delete()}return{height:i}}render(){this._surface?.flush()}moveTo(e,t){this._currentPath?.moveTo(e,t)}lineTo(e,t){this._currentPath?.lineTo(e,t)}bezierCurveTo(e,t,i,r,a,o){this._currentPath?.cubicTo(e,t,i,r,a,o)}quadraticCurveTo(e,t,i,r){this._currentPath?.quadTo(e,t,i,r)}setTransform(e,t=!1){if(!this.ctx)return;let i=this.ctx.getTotalMatrix(),r=Ds.invert(i);if(r&&this.ctx.concat(r),this.ctx?.scale(this.dpr,this.dpr),this.camera?.enabled&&(this.ctx?.concat(this.camera.worldMatrix),t)){let e=Ds.getScale(this.camera.worldMatrix);this.ctx?.scale(1/e[0],1/e[1])}this.ctx?.concat(e),this.currentTransform=e}transform(e){this.ctx?.concat(e)}setSize(e,t){!this._isSizeDirty&&e===this._width&&t===this._height||(this._isSizeDirty=!1,this._width=e,this._height=t,this.canvas.style.width=e+"px",this.canvas.style.height=t+"px",this.canvas.width=e*this.dpr,this.canvas.height=t*this.dpr,this._surface&&(this._surface=DS.MakeWebGLCanvasSurface(this.canvas),this.ctx=this._surface?.getCanvas()))}};function Dx(e){for(let t=0;t<e.length;t++)if(void 0!==e[t]&&!Number.isFinite(e[t]))return!1;return!0}function Db({r:e,g:t,b:i,a:r}){return DS.Color4f(e,t,i,r)}var Dw,DS,D_,DA,DM=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=gP.transparent,this.blurRadius=0,this.offset=[0,0],this.spread=0,this.update(t)}update(e){void 0!==e.color&&(this.color=e.color),void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.blurRadius&&(this.blurRadius=e.blurRadius),void 0!==e.offset&&(this.offset=e.offset),void 0!==e.spread&&(this.spread=e.spread)}},DC=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.radius=0,this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.radius&&(this.radius=e.radius)}},DE=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=gP.transparent,this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.color&&(this.color=e.color)}},DT=class{constructor(e,t,i){this.uuid=e,this.data=t,this.enabled=!1,this.color=gP.transparent,this.thickness=0,this.mode="inside",this.update(t)}update(e){void 0!==e.enabled&&(this.enabled=e.enabled),void 0!==e.color&&(this.color=e.color),void 0!==e.thickness&&(this.thickness=e.thickness),void 0!==e.mode&&(this.mode=e.mode)}},DP=class extends Do{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.autoClose=!0,this.fill=new DE(e+"-fill",t.fill,i),this.stroke=new DT(e+"-stroke",t.stroke,i),this.dropShadow=new DM(e+"-dropShadow",t.dropShadow,i),this.innerShadow=new DM(e+"-innerShadow",t.innerShadow,i),this.backgroundBlur=new DC(e+"-backgroundBlur",t.backgroundBlur,i),this.layerBlur=new DC(e+"-layerBlur",t.layerBlur,i)}applyFillStroke(e){e.fillColor=this.fill.enabled?this.fill.color:gP.transparent,e.strokeColor=this.stroke.enabled&&this.stroke.thickness>0?this.stroke.color:gP.transparent,e.strokeMode=this.stroke.mode,e.lineWidth=this.stroke.thickness}applyFilters(e){this.layerBlur.enabled?e.layerBlur=5*this.layerBlur.radius:e.layerBlur=0,this.backgroundBlur.enabled?e.backgroundBlur=5*this.backgroundBlur.radius:e.backgroundBlur=0,this.dropShadow.enabled?(e.dropShadowBlur=5*this.dropShadow.blurRadius,e.dropShadowColor=this.dropShadow.color,e.dropShadowOffsetX=this.dropShadow.offset[0],e.dropShadowOffsetY=this.dropShadow.offset[1]):e.dropShadowColor=gP.transparent,this.innerShadow.enabled?(e.innerShadowSpread=this.innerShadow.spread,e.innerShadowBlur=5*this.innerShadow.blurRadius,e.innerShadowColor=this.innerShadow.color,e.innerShadowOffsetX=this.innerShadow.offset[0],e.innerShadowOffsetY=this.innerShadow.offset[1]):e.innerShadowColor=gP.transparent}innerDraw(e){}draw(e){this.visible&&(e.save(),this.applyTransforms(e),this.applyFilters(e),this.applyFillStroke(e),e.beginPath(),this.innerDraw(e),this.autoClose&&e.closePath(),this.fill.enabled&&e.fill(),this.stroke.enabled&&e.stroke(),e.restore(
vendor: 5,368 bytes, line 6005
6005))}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),0===e.type&&(fv(e.path,["fill"])?this.fill.update(e.props):fv(e.path,["stroke"])?this.stroke.update(e.props):fv(e.path,["dropShadow"])?this.dropShadow.update(e.props):fv(e.path,["innerShadow"])?this.innerShadow.update(e.props):fv(e.path,["layerBlur"])?this.layerBlur.update(e.props):fv(e.path,["backgroundBlur"])?this.backgroundBlur.update(e.props):this.resetBBoxNeedsUpdate())}updateState(e,t){super.updateState(e,t),void 0!==e.fill&&this.fill.update(e.fill),void 0!==e.stroke&&this.stroke.update(e.stroke),void 0!==e.dropShadow&&this.dropShadow.update(e.dropShadow),void 0!==e.innerShadow&&this.innerShadow.update(e.innerShadow),void 0!==e.layerBlur&&this.layerBlur.update(e.layerBlur),void 0!==e.backgroundBlur&&this.backgroundBlur.update(e.backgroundBlur)}clone(e){let t=new DP(this.uuid,this.data,e);return t.parent=void 0,t}},DD=class extends DP{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.width=0,this.height=0,this.updateState(t,i)}innerDraw(e){e.ellipse(.5*this.width,.5*this.height,.5*this.width,.5*this.height,0,0,2*Math.PI)}intersectsInLocalSpace(e,t){var i,r,a,o;let l,h;return i=.5*this.width,r=.5*this.height,a=.5*this.width,o=.5*this.height,(l=e-i)*l/(a*a)+(h=t-r)*h/(o*o)<=1}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e)}clone(e){let t=new DD(this.uuid,this.data,e);return t.parent=void 0,t}},DO=class extends DP{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.width=0,this.height=0,this.cornerRadius=[0,0,0,0],this.updateState(t,i)}innerDraw(e){e.rect(0,0,this.width,this.height,...this.cornerRadius)}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateCornerState(e){void 0!==e.cornerRadius&&(this.cornerRadius=e.cornerRadius)}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateCornerState(e)}clone(e){let t=new DO(this.uuid,this.data,e);return t.parent=void 0,t}},DI=class extends DP{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this._textHeight=0,this._textHeightDirty=!0,this.width=0,this.height=0,this.updateState(t,i)}get textHeight(){return this._textHeight}applyFillStroke(e){e.fillColor=this.fill.enabled?this.fill.color:gP.transparent,e.strokeColor=this.stroke.enabled&&this.stroke.thickness>0?this.stroke.color:gP.transparent,e.strokeMode="center",e.lineWidth=this.stroke.thickness}innerDraw(e){this._fontHolder?.arrayBuffer&&this._fontHolder.arrayBuffer.byteLength>1&&this.data.font&&e.registerFont(this._fontHolder.arrayBuffer,this.data.font);let t=this.data.textTransform,i=this.data.text.textValue.toString(),r=2===t?i.toUpperCase():3===t?i.toLowerCase():i,{height:a}=e.drawText(r,{x:0,y:0,width:this.width,height:this.height,fontSize:this.data.fontSize,lineHeight:this.data.lineHeight??1,letterSpacing:this.data.letterSpacing??0,horizontalAlign:this.data.horizontalAlign,verticalAlign:this.data.verticalAlign,font:this.data.font});this._textHeight=a}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateFontState(e,{shared:t}){void 0!==e.font&&(this._fontHolder=t.getFont(e.font),this._fontHolder&&!this._fontHolder.isLoaded&&this._fontHolder.loadingPromise.then(()=>{this.requestRender()}))}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateFontState(e,t)}clone(e){let t=new DI(this.uuid,this.data,e);return t.parent=void 0,t}},DR=class extends DP{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this.curves=[],this.extremasBBox={min:[0,0],max:[0,0]},this.updateState(t,i)}computeExtremas(){0===this.curves.length&&this.computeCurves();let e=this.curves.map(e=>DA.extremas(e)),t=[1/0,1/0],i=[-1/0,-1/0];for(let r=0,a=e.length;r<a;r++){let a=e[r];a[0][0]<t[0]&&(t[0]=a[0][0]),a[0][1]<t[1]&&(t[1]=a[0][1]),a[1][0]>i[0]&&(i[0]=a[1][0]),a[1][1]>i[1]&&(i[1]=a[1][1])}return this.extremasBBox.min=[t[0],t[1]],this.extremasBBox.max=[i[0],i[1]],this.extremasBBox}computeCurves(){this.curves=[];for(let e=1,t=this.data.points.length;e<t;e++){let t=this.data.points[e].data,i=this.data.points[e-1].data,r={start:i.position,cp1:i.controlNext.position,cp2:t.controlPrevious.position,end:t.position};this.curves.push(r)}let e=this.data.points[0].data,t=this.data.points[this.data.points.length-1].data;if(this.data.isClosed){let i={start:t.position,cp1:t.controlNext.position,cp2:e.controlPrevious.position,end:e.position};this.curves.push(i)}}getCenter(){let[e,t]=this.extremasBBox.min,[i,r]=this.getHalfSize();return[e+i,t+r]}getHalfSize(){let{min:e,max:t}=this.extremasBBox;
vendor: 6,674 bytes, line 6005
6005return[(t[0]-e[0])*.5,(t[1]-e[1])*.5]}innerDraw(e){for(let t=0,i=this.data.points.length;t<i;t++){let i=this.data.points[t].data;if(0===t){let[t,r]=i.position;e.moveTo(t,r)}else{let r=this.data.points[t-1].data,[a,o]=r.controlNext.position,[l,h]=i.controlPrevious.position,[c,d]=i.position,p={start:r.position,cp1:r.controlNext.position,cp2:i.controlPrevious.position,end:i.position};DA.derive(p),e.bezierCurveTo(a,o,l,h,c,d)}}let t=this.data.points[0].data,i=this.data.points[this.data.points.length-1].data;if(this.data.isClosed){let[r,a]=i.controlNext.position,[o,l]=t.controlPrevious.position,[h,c]=t.position;e.bezierCurveTo(r,a,o,l,h,c)}}updateState(e,t){super.updateState(e,t),this.computeExtremas()}clone(e){let t=new DR(this.uuid,this.data,e);return t.parent=void 0,t}},DL=DA||(DA={});function DB(e,t,i,r=!1){let a=e-2*t+i;if(0!==a){let r=-Math.sqrt(Math.abs(t*t-e*i)),o=-e+t;return[-(r+o)/a,-(-r+o)/a]}return t!==i&&0===a?[(2*t-i)/(2*(t-i))]:[]}DL.derive=function(e){let t=e.start,i=e.cp1,r=e.cp2,a=e.end,o={start:[3*(i[0]-t[0]),3*(i[1]-t[1])],cp:[3*(r[0]-i[0]),3*(r[1]-i[1])],end:[3*(a[0]-r[0]),3*(a[1]-r[1])]};return e.derivative=o,o.derivative=O$.derive(o),o},DL.droot=function(e){let t=e.derivative??DL.derive(e),i=t.start,r=t.cp,a=t.end;return[DB(i[0],r[0],a[0]),DB(i[1],r[1],a[1])]},DL.extremas=function(e){let[t,i]=DL.droot(e),r=[e.start[0],e.end[0]],a=[e.start[1],e.end[1]];for(let i of t)r.push(DL.compute(e,Math.min(1,Math.max(0,i)))[0]);for(let t of i)a.push(DL.compute(e,Math.min(1,Math.max(0,t)))[1]);return r.sort((e,t)=>e-t),a.sort((e,t)=>e-t),[[r[0],a[0]],[r[r.length-1],a[a.length-1]]]},DL.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=1-t,r=i*i,a=t*t,o=r*i,l=r*t*3,h=i*a*3,c=t*a;return[o*e.start[0]+l*e.cp1[0]+h*e.cp2[0]+c*e.end[0],o*e.start[1]+l*e.cp1[1]+h*e.cp2[1]+c*e.end[1]]},(OK=O$||(O$={})).derive=function(e){let t=e.start,i=e.cp,r=e.end,a={start:[2*(i[0]-t[0]),2*(i[1]-t[1])],end:[2*(r[0]-i[0]),2*(r[1]-i[1])]};return a.derivative=O0.derive(a),e.derivative=a,a},OK.droot=function(e){let t=e.derivative??OK.derive(e),i=t.start,r=t.end;return[i[0]!==r[0]?i[0]/(i[0]-r[0]):0,i[1]!==r[1]?i[1]/(i[1]-r[1]):0]},OK.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=1-t,r=i*i,a=i*t*2,o=t*t;return[r*e.start[0]+a*e.cp[0]+o*e.end[0],r*e.start[1]+a*e.cp[1]+o*e.end[1]]},(OJ=O0||(O0={})).derive=function(e){let t=e.start,i=e.end;return e.derivative=[i[0]-t[0],i[1]-t[1]],e.derivative},OJ.compute=function(e,t){if(0===t)return[...e.start];if(1===t)return[...e.end];let i=e.start,r=e.end;return[i[0]+(r[0]-i[0])*t,i[1]+(r[1]-i[1])*t]};var Dz=class extends Dl{constructor(e,t,i){super(e,t,i),this.uuid=e,this.width=0,this.height=0,this.clipped=!0,this.background=new DO(e+"-background",xq.defaultData,i),this.background.parent=this,this.updateState(t,i)}get fill(){return this.background.fill}get stroke(){return this.background.stroke}get backgroundBlur(){return this.background.backgroundBlur}get layerBlur(){return this.background.layerBlur}get dropShadow(){return this.background.dropShadow}get innerShadow(){return this.background.innerShadow}get cornerRadius(){return this.background.cornerRadius}set cornerRadius(e){this.background.cornerRadius=e}updateLocalMatrix(){super.updateLocalMatrix(),this.background?.updateLocalMatrix()}updateWorldMatrix(e,t,i){super.updateWorldMatrix(e,t,i),this.background?.updateWorldMatrix(e,t,i)}draw(e){if(!this.visible)return;e.save();let t=this.width,i=this.height;this.applyTransforms(e),this.background.width=t,this.background.height=i,this.background.draw(e),this.clipped&&e.clipRect(0,0,t,i,...this.cornerRadius),this.innerDrawChildren(e),e.restore()}getCenter(){return[.5*this.width,.5*this.height]}getHalfSize(){return[.5*this.width,.5*this.height]}updateCornerState(e){void 0!==e.cornerRadius&&(this.cornerRadius=e.cornerRadius)}updateSizeState(e){let t=!1;void 0!==e.width&&(this.width="number"==typeof e.width?e.width:this.width,t=!0),void 0!==e.height&&(this.height="number"==typeof e.height?e.height:this.height,t=!0),t&&this.updateWorldMatrix(!0,!1,!0)}updateState(e,t){super.updateState(e,t),this.updateSizeState(e),this.updateCornerState(e),void 0!==e.fill&&this.fill.update(e.fill),void 0!==e.stroke&&this.stroke.update(e.stroke),void 0!==e.dropShadow&&this.dropShadow.update(e.dropShadow),void 0!==e.innerShadow&&this.innerShadow.update(e.innerShadow),void 0!==e.layerBlur&&this.layerBlur.update(e.layerBlur),void 0!==e.backgroundBlur&&this.backgroundBlur.update(e.backgroundBlur),void 0!==e.clipped&&(this.clipped=e.clipped)}requestRender(){super.requestRender(),this.dispatchEvent({type:"render"})}dispose(){this.removeEventListener("render")}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),0===e.type&&(fv(e.path,["fill"])?this.fill.update(e.props):fv(e.path,["stroke"])?this.stroke.update(e.props):fv(e.path,["dropShadow"])?this.dropShadow.update(e.props):fv(e.path,["innerShadow"])?this.innerShadow.update(e.props):fv(e.path,["layerBlur"])?this.layerBlur.update(e.props):fv(e.path,["backgroundBlur"])?this.backgroundBlur.update(e.props):this.resetBBoxNeedsUpdate())}clone(e){let t=new Dz(this.uuid,this.data,e);for(let i of(t.parent=void 0,this.children))t.add(i.clone(e));return t}},DF=tB(tj(),1),DN=class extends DP{constructor(e,t,i){super(e,t,i),this.uuid=e,this.data=t,this._pathBBox=new DOMRect,this.path="",this.updateState(t,i),this.autoClose=!1,this.computeSVGBBox()}computeSVGBBox(){var e;let t=this.path;e=this.path,/NaN/.test(e)&&(t="");let i=document.createElementNS("http://www.w3.org/2000/svg","svg"),r=document.createElementNS("http://www.w3.org/2000/svg","path");document.body.appendChild(i),r.setAttribute("d",t),i.appendChild(r),this._pathBBox=r.getBBox(),i.remove()}innerDraw(e){e.path(this.path)}intersectsInLocalSpace(e,t){return e>=this._pathBBox.x&&e<=this._pathBBox.x+this._pathBBox.width&&t>=this._pathBBox.y&&t<=this._pathBBox.y+this._pathBBox.height}getCenter(){return[(this._pathBBox.x+this._pathBBox.width)/2,(this._pathBBox.y+this._pathBBox.height)/2]}getHalfSize(){return[(this._pathBBox.x+this._pathBBox.width)/2,(this._pathBBox.y+this._pathBBox.height)/2]}updateState(e,t){super.updateState(e,t),void 0!==e.path&&(this.path=e.path,this.computeSVGBBox())}clone(e){let t=new DN(this.uuid,this.data,e);return t.parent=void 0,t}};function DU(e){let t=["rx","ry","xAxisRotation","largeArc","sweep","x1","y1","x2","y2","x","y"],i;return e.map(e=>{let r=[];t.forEach(t=>{if(t in e){let i=+e[t];r.length&&i>=0&&r.push(","),r.push(i)}});let a=(i===e.code?r[0]<0?"":",":e.code)+r.join("");return i=e.code,a}).join("")}var Dk=class{constructor(e,t,i){this.uuid=e,this.data=t,this.group=new D
6005h(Dk.GROUP_ID,{...xZ.defaultData},i),this.createChildrenObjects(t.objects,this.group,i)}createObject(e,t,i,r,a,o){let l=function(e,t,i){switch(t.type){case"ellipse2d":return new DD(e,t,i);case"rectangle2d":return new DO(e,t,i);case"text2d":return new DI(e,t,i);case"vector2d":return new DR(e,t,i);case"path2d":return new DN(e,t,i);case"frame2d":return new Dz(e,t,i);default:return new Dh(e,t,i)}}(e,t,o);l&&(r.add(l),r.children.splice(a,0,r.children.pop()),l.updateWorldMatrix(),i.length>0&&(l instanceof Dh||l instanceof Dz)&&this.createChildrenObjects(i,l,o))}createChildrenObjects(e,t,i){let r=0;for(let a of e)this.createObject(a.id,a.data,a.children,t,r,i),r+=1}draw(e){this.group.draw(e)}updateEntityByOp(e,t,i,r){let a=this.find(e);if(a)try{a.updateByOp(t,i,{shared:r})}catch(e){}}updateTreeByOp(e,t){if(0===e.path.length&&7===e.type){let i=null===e.parent?this.group:this.find(e.parent);void 0!==i&&i instanceof Dl&&(this.createObject(e.id,e.data,e.children,i,e.localIndex,t),i.requestRender())}else if(0===e.path.length&&8===e.type){let t=this.find(e.id);if(void 0!==t&&void 0!==t.parent&&t.parent instanceof Dl){let e=t.parent;t.resetBBoxNeedsUpdate(),e?.remove(t),e?.requestRender()}}else if(0===e.path.length&&9===e.type){let t=this.find(e.id);if(void 0!==t){let i=t.parent,r=null===e.parent?this:this.find(e.parent);if(r instanceof Dl||r===this){r.add(t);let a=e.localIndex;r.children.splice(a,0,r.children.pop()),t.updateWorldMatrix(!0,!1,!0),i?.requestRender(),t.requestRender()}t.resetBBoxNeedsUpdate()}}}add(e){this.group.add(e)}remove(e){this.group.remove(e)}traverse(e){this.group.traverse(t=>{t!==this.group&&e(t)})}intersectsChildren(e,t,i,r=!1,a=[]){return this.group.intersectsChildren(e,t,i,r,a,!0)}intersectsChildrenReverse(e,t,i,r=!1,a=[]){return this.group.intersectsChildrenReverse(e,t,i,r,a,!0)}find(e){return this.group.find(e)}get children(){return this.group.children}project(e,t){return this.group.project(e,t)}getWithSortKey(e){let t=this.find(e);if(void 0===t)return;let i=[],r=t;for(;r!==this.group;){let e=r,t=(r=r.parent).children.indexOf(e);i.splice(0,0,t)}return{entity:t,sortKey:i}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push(e)}return t.sort((e,t)=>vw(e.sortKey,t.sortKey)),t.map(e=>e.entity)}};function DV({constraints:e,newParentWidth:t,newParentHeight:i,initialParentWidth:r,initialParentHeight:a,objectInitialWidth:o,objectInitialHeight:l,objectInitialPosition:h}){let{horizontalConstraint:c,verticalConstraint:d}=e,p=t-r,f=i-a,m=o,g=l,v=h[0],y=h[1];if(0!==c){if(1===c)v+=p;else if(3===c)v+=p/2;else if(2===c)m=Math.max(1,m+p);else if(4===c){let e=t/r;m*=e,v*=e}}if(0!==d){if(1===d)y+=f;else if(3===d)y+=f/2;else if(2===d)g=Math.max(1,g+f);else if(4===d){let e=i/a;g*=e,y*=e}}return{width:m,height:g,position:[v,y]}}Dk.GROUP_ID="scene2d",tB(tj(),1);var Dj=` 6006 varying vec2 vUv; 6007 void main() { 6008 vUv = uv; 6009 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 6010 }`,DG=` 6011 uniform sampler2D tDiffuse; 6012 varying vec2 vUv; 6013 void main() { 6014 vec4 texel = texture2D( tDiffuse, vUv ); 6015 gl_FragColor = texel; 6016 }`,DW=new sR(-1,1,1,-1,0,1),DH=new class extends rQ{constructor(){super(),this.setAttribute("position",new rV([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new rV([0,2,0,0,2,0],2))}},Dq=class{constructor(e){this._mesh=new r7(DH,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,DW)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}},DX=new so({defines:{},uniforms:{tDiffuse:new lj(null)},vertexShader:Dj,fragmentShader:DG}),DY=new Dq(DX),DQ=null,DZ=null,DK=Ds.identity(),DJ=class{constructor(e,t,i,r){this.uuid=e,this.width=t,this.height=i,this.context=r,this.enabled=!0,this.isScreenSpace=!1,this.dpr=window.devicePixelRatio,this.isFrameDirty=!1,this.onRenderRequestedDownstream=()=>{this.isFrameDirty=!0,this.context.shared.requestRender()},this._innerApplySize=()=>{let e=this.width,t=this.height,i=this.dpr;this.renderer.dpr=this.isScreenSpace?i:Math.floor(2048/Math.max(e,t)),this.renderer.setSize(e,t)},this.onFrameOverrideObjectEvent=e=>{if(e.target?.uuid!==void 0){let t=this.frameRoot?.find(e.target.uuid);t&&t.dispatchEvent({...e,target:t})}},this.scene2d=new Dk(t8.generateUUID(),x$.defaultData,{dpr:window.devicePixelRatio,shared:r.shared}),this.canvas=(null===DQ&&(DQ=document.createElement("canvas")),D
6016Q),this.renderer=(e=>(null===DZ&&(DZ=new Dy(e)),DZ))(this.canvas),this.promise=this.init(),this.renderTarget=new iM(1,1,{type:1016,stencilBuffer:!1,depthBuffer:!1}),r.shared.addUIBuffer(this.uuid,this.renderTarget),this.textureHolder=r.shared.uiBuffer(this.uuid)}get canvasTexture(){return this._canvasTexture||(this._canvasTexture=new n5(this.canvas)),this._canvasTexture}async init(){this.renderer instanceof Dy&&(this.renderer.wasmURL=A8.skiaWasmUrl),await this.renderer.init()}render(e){if(this.isFrameDirty){this.isFrameDirty=!1,this._innerApplySize(),this.renderer.clear(),this.frameOverride?.draw(this.renderer),this.renderer.render(),DX.uniforms.tDiffuse.value=this.canvasTexture,this.canvasTexture.needsUpdate=!0;let t=e.getRenderTarget();e.setRenderTarget(this.renderTarget),e.clear(),DY.render(e),e.setRenderTarget(t),this.textureHolder?.setNeedsUpdate(!0)}}updateEntity2DByOp(e,t,i,r){this.scene2d.updateEntityByOp(e,t,i,r),this.applySize()}updateTreeByOp(e,t){this.scene2d.updateTreeByOp(e,t),this.applySize()}applyOverrides(e){if(this.frameOverride&&this.frameRoot){this.frameOverride.position=[0,0],this.frameOverride.rotation=0;let t=e?.width??this.width,i=e?.height??this.height;this.frameOverride.width=t,this.frameOverride.height=i,this.frameOverride.localMatrix=DK,this.isScreenSpace&&(this.frameOverride.fill.color=gP.from0to1([0,0,0,0])),this.frameOverride.data={...this.frameOverride.data,width:t,height:i},function e({objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:a,initialParentWidth:o,initialParentHeight:l}){if(t instanceof Dz&&i instanceof Dz||t instanceof Dh&&i instanceof Dh)for(let h=0,c=t.children.length;h<c;h++){let c=t.children[h],d=i.children[h];c&&d&&c.uuid===d.uuid&&function({objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:a,initialParentWidth:o,initialParentHeight:l}){let[h,c]=function(e){if(D$(e))return[e.width,e.height];if(e instanceof DN){let[t,i]=e.getHalfSize();return[2*t,2*i]}if(e instanceof Dh){let[t,i]=e.recursiveBBox.getHalfSize();return[2*t,2*i]}return[0,0]}(i),{width:d,height:p,position:f}=DV({constraints:t.data,newParentWidth:r,newParentHeight:a,initialParentWidth:o,initialParentHeight:l,objectInitialWidth:h,objectInitialHeight:c,objectInitialPosition:i.position});if(t.position=f,t.data={...t.data,position:f},t.states)for(let e in t.states)!function({stateId:e,objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:a,initialParentWidth:o,initialParentHeight:l}){let h=t.states?.[e],c=i.states?.[e];if(h&&c){let{width:i,height:d,position:p}=DV({constraints:t.data,newParentWidth:r,newParentHeight:a,initialParentWidth:o,initialParentHeight:l,objectInitialWidth:xJ.isResizeable(c)?c.width:0,objectInitialHeight:xJ.isResizeable(c)?c.height:0,objectInitialPosition:c.position});Object.assign(t.states[e],{position:p}),xJ.isResizeable(h)&&Object.assign(t.states[e],{width:i,height:d})}}({stateId:e,objectOverride:t,objectRoot:i,newParentWidth:r,newParentHeight:a,initialParentWidth:o,initialParentHeight:l});if(D$(t)||t instanceof Dh)D$(t)&&(t.width=d,t.height=p,t.data={...t.data,width:d,height:p}),e({objectOverride:t,objectRoot:i,newParentWidth:d,newParentHeight:p,initialParentWidth:h,initialParentHeight:c});else if(t instanceof DN){let e=0!==h?d/h:1,r=0!==c?p/c:1;t.path=function(e,t=1,i=1){if(t<=0||i<=0)return e;if(/NaN/.test(e))return DU([]);try{let r=(0,DF.parseSVG)(e).map(e=>{let r={...e};return"x"in r&&(r.x=r.x*t),"y"in r&&(r.y=r.y*i),"x1"in r&&(r.x1=r.x1*t),"x2"in r&&(r.x2=r.x2*t),"y1"in r&&(r.y1=r.y1*i),"y2"in r&&(r.y2=r.y2*i),"rx"in r&&(r.rx=r.rx*t),"ry"in r&&(r.ry=r.ry*i),r});return DU(r)}catch{return DU([])}}(i.path,e,r),t.data={...t.data,path:t.path}}}({objectOverride:c,objectRoot:d,newParentWidth:r,newParentHeight:a,initialParentWidth:o,initialParentHeight:l})}}({objectOverride:this.frameOverride,objectRoot:this.frameRoot,newParentWidth:this.frameOverride.width,newParentHeight:this.frameOverride.height,initialParentWidth:this.frameRoot.width,initialParentHeight:this.frameRoot.height}),this.frameOverride.updateWorldMatrix(!0,!1,!0)}}applySize(e,t=window.devicePixelRatio){let i=Math.max(1,e?.width??this.width),r=Math.max(1,e?.height??this.height);this.dpr=t,this.width=i,this.height=r,this._innerApplySize();let a=1;(i*t<512||r*t<512)&&(a=Math.max(512/(i*t),512/(r*t))),this.renderTarget.setSize(i*t*a,r*t*a),this._canvasTexture?.dispose(),this._canvasTexture=void 0,this.applyOverrides(e),this.frameOverride?.requestRender()}applyFrame(e){let t=this.context.scene.find2D(e);if(!(!t||!(t instanceof Dz)))return this.disposeFrameOverride(),this.frameRoot=t,this.frameOverride=t.clone({dpr:this.renderer.dpr,shared:this.context.shared}),this.scene2d.add(this.frameOverride),this.applySize(),this.frame?.addEventListener("render",this.onRenderRequestedDownstream),this.frameOverride.traverse(e=>{e.addEventListener("beginState",this.onFrameOverrideObjectEvent)}),this.frameOverride.traverse(e=>{e.addEventListener("completeState",this.onFrameOverrideObjectEvent)}),this.frame?.requestRender(),t}get frame(){return this.frameOverride}get frameId(){return this.frame?.uuid}find(e){return this.scene2d.find(e)}get texture(){return this.textureHolder?.getTexture(1001)}disposeFrameOverride(){this.frameOverride?.removeEventListener("render",this.onRenderRequestedDownstream),this.frameOverride?.traverse(e=>{e.removeEventListener("beginStateChange",this.onFrameOverrideObjectEvent)}),this.frameOverride?.traverse(e=>{e.removeEventListener("completeState",this.onFrameOverrideObjectEvent)}),this.frameOverride&&this.scene2d.remove(this.frameOverride)}};function D$(e){return e instanceof DO||e instanceof Dz||e instanceof DD||e instanceof DI}var D0=class extends b$(nI){constructor(e,t,i){super(),this.data=t,this.bgColor=new _0(1,1,1,1),this.fog=null,this.backupFog=new nO(0xffffff,.1,2e3),this.fogUseBGColor=!1,this.isActive=!1,this.aoColor=new iv,this.penumbraSizeArrayCache=null,this.super_Entity(e,t),this.personalCamera=new Ej(gg,{...xh.defaultData,...t.camera,name:"Personal Camera"}),this.personalCamera.objectHelper.visible=!1,this.add(this.personalCamera),this.activeCamera=this.personalCamera,this.ambientLight=new lu(0xd3d3d3,8553090,.75),this.ambientLight.name="Default Ambient Light",this.ambientLight.layers.enable(3),this.ambientLight.removeFromParent(),this.add(this.ambientLight),t.uiScene?this.uiScene=new Dk((Array.isArray(e)?e[0]:e)+"-ui",t.uiScene,{dpr:window.devicePixelRatio,shared:i.shared}):t.uiFrame&&this.createUICanvas(t.uiFrame,i)}get scene(){return this.parent}get postprocessing(){return this.data.postprocessing}get frameId(){return this.data.uiFrame}get frame(){return this.uiCanvas?.frame}createUICanvas(e,t){this.uiCanvas=new DJ(this.uuid+"-uiscreen",window.innerWidth,window.innerHeight,t),this.uiCanvas.isScreenSpace=!0,this.uiCanvas.promise.then(()=>{this.uiCanvas?.applyFrame(e),this.uiCanvas?.applySize()})}updateVisible(){}
6016setBackgroundColor(e){this.bgColor=e,!0===this.fogUseBGColor&&(this.backupFog.color=e)}entityChildrenCount(){return this.uiScene?this.uiScene.children.length:super.entityChildrenCount()}updateAmbientLight(e,t){void 0!==e.color&&(this.ambientLight.color=MW(e.color,t)),void 0!==e.intensity&&(this.ambientLight.intensity=e.intensity),void 0!==e.enabled&&(e.enabled?this.add(this.ambientLight):this.remove(this.ambientLight))}onDeactive(){this.isActive=!1}onActive(e){this.isActive=!0,e.fog=this.fog,this.traverseEntity(e=>{e instanceof Eq&&e.recomputeBoolean()}),this.updateShadow(this.data.shadow)}forceMaterialsUpdate(){this.traverseEntity(e=>{if(e instanceof CU)if(Array.isArray(e.material))for(let t of e.material)t.needsUpdate=!0;else e.material.needsUpdate=!0,e.material.dispose()})}updateShadow(e){void 0!==e.softShadowQuality&&this.isActive&&((e="medium")=>{let t;if(PH===e)return!1;PH=e,t=(e=>{switch(e){case"low":return 8;case"medium":default:return 16;case"high":return 32}})(e),s_.shadowmap_pars_fragment=` 6017 6018// PCSS implementation based on: 6019// https://www.gamedev.net/articles/programming/graphics/contact-hardening-soft-shadows-made-fast-r4906/ 6020// NOTE: This number affects how big the shadow blur can 6021// possibly get. Bigger number == bigger blur, but less precise results 6022 6023const float gPenumbraFilterSize = 80.0; 6024const int gPenumbraSamples = ${t}; 6025const int gShadowSamples = ${t}; 6026const float gShadowSamplesRpc = 1.0f / float(gShadowSamples); 6027 6028#ifdef USE_SHADOWMAP 6029 #if NUM_DIR_LIGHT_SHADOWS > 0 6030 6031 uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; 6032 varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; 6033 6034 struct DirectionalLightShadow { 6035 float shadowBias; 6036 float shadowNormalBias; 6037 float shadowRadius; 6038 vec2 shadowMapSize; 6039 }; 6040 6041 uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; 6042 6043 #endif 6044 6045 #if NUM_SPOT_LIGHT_SHADOWS > 0 6046 6047 uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; 6048 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_SHADOWS ]; 6049 6050 struct SpotLightShadow { 6051 float shadowBias; 6052 float shadowNormalBias; 6053 float shadowRadius; 6054 vec2 shadowMapSize; 6055 }; 6056 6057 uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; 6058 6059 #endif 6060 6061 #if NUM_POINT_LIGHT_SHADOWS > 0 6062 6063 uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; 6064 varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; 6065 6066 struct PointLightShadow { 6067 float shadowBias; 6068 float shadowNormalBias; 6069 float shadowRadius; 6070 vec2 shadowMapSize; 6071 float shadowCameraNear; 6072 float shadowCameraFar; 6073 }; 6074 6075 uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; 6076 6077 #endif 6078 6079 /* 6080 #if NUM_RECT_AREA_LIGHTS > 0 6081 6082 // TODO (abelnation): create uniforms for area light shadows 6083 6084 #endif 6085 */ 6086 6087float computePenumbra(int index, sampler2D shadowMap, float temporalAngle, float texelSize, vec2 uv, float compare, float texelScalar, float shadowRadius) 6088{ 6089 float penumbra = 1.0; 6090 float blockerDepthAvg = 0.0; 6091 float blockerCount = 0.0; 6092 6093 #pragma unroll_loop_start 6094 for(int i = 0; i < gPenumbraSamples; i ++) 6095 { 6096 vec2 offset = (vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize) * texelScalar; 6097 float depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ); 6098 6099 if(depth < compare + 0.0001) 6100 { 6101 blockerDepthAvg += depth; 6102 blockerCount++; 6103 } 6104 } 6105 #pragma unroll_loop_end 6106 6107 if (blockerCount > 0.0) 6108 { 6109 blockerDepthAvg /= blockerCount; 6110 6111 // Compute penumbra 6112 penumbra = (compare - blockerDepthAvg) / (blockerDepthAvg); 6113 penumbra *= penumbra; 6114 penumbra *= 200.0 * penumbraSize[min(index, 5 - 1)]; // Magic number that affects how quickly the penumbra grows 6115 6116 return clamp(penumbra, 0.00, 1.0); 6117 } 6118 return 0.0; 6119} 6120 6121float vogelShadow(int index, sampler2D shadowMap, vec2 uv, float texelSize, float compare, float shadowRadius) 6122{ 6123 float shadow = 0.0f; 6124 6125 // NOTE: When using TAA, we should use screen space interleaved gradient noise 6126 vec2 halton = haltonSequence[frameIndex]; 6127 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 6128 float temporalAngle = temporalOffset * PI2; 6129 6130 float texelScalar = (gPenumbraFilterSize) / (texelSize * 1024.); 6131 float penumbra = computePenumbra(index, shadowMap, temporalAngle, texelSize, uv, compare, texelScalar, shadowRadius); 6132 if (penumbra == -1.0) { 6133 return 1.0; 6134 } 6135 6136 #pragma unroll_loop_start 6137 for (int i = 0; i < gShadowSamples; i++) 6138 { 6139 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6140 // Overall blurring offset 6141 vec2 offset = vogelSample * (shadowRadius * 2.); 6142 6143 // Penumbra offset 6144 offset += vogelSample * (penumbra * texelScalar); 6145 6146 shadow += step( compare, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) ); 6147 } 6148 #pragma unroll_loop_end 6149 6150 return shadow * gShadowSamplesRpc; 6151} 6152 6153 6154 float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { 6155 6156 return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); 6157 6158 } 6159 6160 vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { 6161 6162 return unpackRGBATo2Half( texture2D( shadow, uv ) ); 6163 6164 } 6165 6166 float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ 6167 6168 float occlusion = 1.0; 6169 6170 vec2 distribution = texture2DDistribution( shadow, uv ); 6171 6172 float hard_shadow = step( compare , distribution.x ); // Hard Shadow 6173 6174 if (hard_shadow != 1.0 ) { 6175 6176 float distance = compare - distribution.x ; 6177 float variance = max( 0.00000, distribution.y * distribution.y ); 6178 float softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality 6179 softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed 6180 occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); 6181 6182 } 6183 return occlusion; 6184 6185 } 6186 6187 float getShadow( int i, sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) { 6188 6189 float shadow = 1.0; 6190 6191 shadowCoord.xyz /= shadowCoord.w; 6192 shadowCoord.z += shadowBias; 6193 6194 // if ( something && something ) breaks ATI OpenGL shader compiler 6195 // if ( all( something, something ) ) using this instead 6196 6197 bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 ); 6198 bool inFrustum = all( inFrustumVec ); 6199 6200 bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 ); 6201 6202 bool frustumTest = all( frustumTestVec ); 6203 6204 if ( frustumTest ) { 6205 6206 #if defined( SHADOWMAP_TYPE_PCF ) 6207 6208 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 6209 return vogelShadow(i, shadowMap, shadowCoord.xy, texelSize.x, shadowCoord.z, shadowRadius ); 6210 6211 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 6212 6213 vec2 texelSize = vec2( 1.0 ) / shadowMapSize; 6214 float dx = texelSize.x; 6215 float dy = texelSize.y; 6216 6217 vec2 uv = shadowCoord.xy;
6218 vec2 f = fract( uv * shadowMapSize + 0.5 ); 6219 uv -= f * texelSize; 6220 6221 shadow = ( 6222 texture2DCompare( shadowMap, uv, shadowCoord.z ) + 6223 texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + 6224 texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + 6225 texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + 6226 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), 6227 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), 6228 f.x ) + 6229 mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), 6230 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), 6231 f.x ) + 6232 mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), 6233 texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), 6234 f.y ) + 6235 mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), 6236 texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), 6237 f.y ) + 6238 mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), 6239 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), 6240 f.x ), 6241 mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), 6242 texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), 6243 f.x ), 6244 f.y ) 6245 ) * ( 1.0 / 9.0 ); 6246 6247 #elif defined( SHADOWMAP_TYPE_VSM ) 6248 6249 shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); 6250 6251 #else // no percentage-closer filtering: 6252 6253 shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); 6254 6255 #endif 6256 6257 } 6258 6259 return shadow; 6260 6261 } 6262 6263 // cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D 6264 // vector suitable for 2D texture mapping. This code uses the following layout for the 6265 // 2D texture: 6266 // 6267 // xzXZ 6268 // y Y 6269 // 6270 // Y - Positive y direction 6271 // y - Negative y direction 6272 // X - Positive x direction 6273 // x - Negative x direction 6274 // Z - Positive z direction 6275 // z - Negative z direction 6276 // 6277 // Source and test bed: 6278 // https://gist.github.com/tschw/da10c43c467ce8afd0c4 6279 6280 vec2 cubeToUV( vec3 v, float texelSizeY ) { 6281 6282 // Number of texels to avoid at the edge of each square 6283 6284 vec3 absV = abs( v ); 6285 6286 // Intersect unit cube 6287 6288 float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); 6289 absV *= scaleToCube; 6290 6291 // Apply scale to avoid seams 6292 6293 // two texels less per square (one texel will do for NEAREST) 6294 v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); 6295 6296 // Unwrap 6297 6298 // space: -1 ... 1 range for each square 6299 // 6300 // #X## dim := ( 4 , 2 ) 6301 // # # center := ( 1 , 1 ) 6302 6303 vec2 planar = v.xy; 6304 6305 float almostATexel = 1.5 * texelSizeY; 6306 float almostOne = 1.0 - almostATexel; 6307 6308 if ( absV.z >= almostOne ) { 6309 6310 if ( v.z > 0.0 ) 6311 planar.x = 4.0 - v.x; 6312 6313 } else if ( absV.x >= almostOne ) { 6314 6315 float signX = sign( v.x ); 6316 planar.x = v.z * signX + 2.0 * signX; 6317 6318 } else if ( absV.y >= almostOne ) { 6319 6320 float signY = sign( v.y ); 6321 planar.x = v.x + 2.0 * signY + 2.0; 6322 planar.y = v.z * signY - 2.0; 6323 6324 } 6325 6326 // Transform to UV space 6327 6328 // scale := 0.5 / dim 6329 // translate := ( center + 0.5 ) / dim 6330 return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); 6331 6332 } 6333 6334 float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { 6335 6336 float shadow = 1.0; 6337 vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); 6338 6339 // for point lights, the uniform @vShadowCoord is re-purposed to hold 6340 // the vector from the light to the world-space position of the fragment. 6341 vec3 lightToPosition = shadowCoord.xyz; 6342 6343 // dp = normalized distance from light to fragment position 6344 float compare = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp? 6345 compare += shadowBias; 6346 6347 // bd3D = base direction 3D 6348 vec3 bd3D = normalize( lightToPosition ); 6349 6350 vec2 halton = haltonSequence[frameIndex]; 6351 float temporalOffset = getNoiseInterleavedGradient(gl_FragCoord.xy + halton); 6352 float temporalAngle = temporalOffset * PI2; 6353 6354 #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_VSM ) 6355 for (int i = 0; i < gShadowSamples; i++) { 6356 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6357 6358 // Overall blurring offset 6359 vec3 offset = vec3(vogelSample.x, vogelSample.y, -vogelSample.x) * (shadowRadius + 5.); 6360 6361 // NOTE: Removed for now 6362 // Penumbra offset 6363 //offset += vec3(vogelSample.x, vogelSample.y, vogelSample.y) * (penumbra * gPenumbraFilterSize); 6364 6365 shadow += texture2DCompare( shadowMap, cubeToUV( bd3D + offset, texelSize.y ), compare ); 6366 6367 } 6368 return shadow * gShadowSamplesRpc; 6369 6370 #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) 6371 for (int i = 0; i < 16; i++) { 6372 vec2 vogelSample = vogelDiskSample(i, gShadowSamples, temporalAngle) * texelSize; 6373 6374 // Overall blurring offset 6375 vec3 offset = vec3(vogelSample.x, vogelSample.y, -vogelSample.x) * (shadowRadius + 5.); 6376 6377 shadow += texture2DCompare( shadowMap, cubeToUV( bd3D + offset, texelSize.y ), compare ); 6378 6379 } 6380 return shadow * (1.0 / 16.0); 6381 #else // no percentage-closer filtering 6382 6383 return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), compare ); 6384 6385 #endif 6386 6387 } 6388 6389#endif 6390`;let i=PG.slice();s_.lights_fragment_begin=i=(i=i.replace("getShadow( spotShadowMap[ i ]","getShadow( UNROLLED_LOOP_INDEX + 3, spotShadowMap[ i ]")).replace("getShadow( directionalShadowMap[ i ]","getShadow( UNROLLED_LOOP_INDEX, directionalShadowMap[ i ]");let r=PW.slice();return s_.shadowmask_pars_fragment=r=r.replaceAll("getShadow(","getShadow( UNROLLED_LOOP_INDEX, "),!0}
6390)(e.softShadowQuality)&&this.forceMaterialsUpdate()}updateFog(e,t){e.enabled?this.fog=this.backupFog:this.fog=null,this.isActive&&(this.scene.fog=this.fog),this.fogUseBGColor=e.useBackgroundColor,e.useBackgroundColor?this.backupFog.color.set(this.bgColor):this.backupFog.color=MW(e.color,t),this.backupFog.near=e.near,this.backupFog.far=e.far}updateAo(e,t){void 0!==e.aoColor&&(this.aoColor=MW(e.aoColor,t))}updateByOp(e,t,i,r){let a=this.data.uiFrame;super.updateByOp(e,t,i,r),fv(e.path,["fog"])?this.updateFog(t.fog,i.shared):fv(e.path,["ao"])?this.updateAo(t.ao,i.shared):fv(e.path,["ambient"])?this.updateAmbientLight(t.ambient,i.shared):fv(e.path,["shadow"])?this.updateShadow(t.shadow):0===e.type&&0===e.path.length&&(void 0!==e.props.uiFrame||a!==t.uiFrame)&&this.updateUIFrame(e.props.uiFrame,i)}updateUIFrame(e,t){e?(this.uiCanvas||this.createUICanvas(e,t),this.uiCanvas.enabled=!0,this.uiCanvas.applyFrame(e)):this.uiCanvas&&(this.uiCanvas.enabled=!1)}updateState(e,t){this.updateState_Entity(e,t),void 0!==e.backgroundColor&&this.setBackgroundColor(MW(e.backgroundColor,t.shared)),void 0!==e.fog&&this.updateFog(e.fog,t.shared),void 0!==e.ambient&&this.updateAmbientLight(e.ambient,t.shared),void 0!==e.ao&&this.updateAo(e.ao,t.shared),void 0!==e.shadow&&this.updateShadow(e.shadow)}createFrame(e,t){}raycast(e,t){super.raycast(e,t)}switchActiveCamera(e){e&&e.isDescendantOf(this)&&(this.activeCamera!==this.personalCamera&&(this.activeCamera.objectHelper.visible=!0),this.activeCamera=e,e.objectHelper.visible=!1)}get playCamera(){return this.scene?.find(this.data.publish.playCamera)??this.personalCamera}switchToPlayCamera(){this.switchActiveCamera(this.playCamera)}get penumbraSizeArray(){return null===this.penumbraSizeArrayCache&&this.updatePenumbraSizeArray(),this.penumbraSizeArrayCache}updatePenumbraSizeArray(){this.penumbraSizeArrayCache=[,,,,,].fill(.5);let e=0,t=0;this.traverseEntity(i=>{if(!i.visible)return!0;i instanceof P3&&i.visible&&e<3&&(this.penumbraSizeArrayCache[e]=i.data.penumbraSize??.5,e+=1),i instanceof P8&&i.visible&&e<2&&(this.penumbraSizeArrayCache[3+t]=i.data.penumbraSize??.5,t+=1)})}raycastWithClones(e){let t=[],i=r=>{for(let a of r.children){let r=a.cloner;S7.is(a)&&(a.visible||r?.object.data.visible)&&((EY(a)||EZ(a)&&this.scene.enableHelpers&&a.objectHelper.visible)&&(e.intersectObject(a,!1,t),OW(a,e,t,!0)),i(a))}};return i(this),t}updateEntity2DByOp(e,t,i,r){this.uiCanvas?.updateEntity2DByOp(e,t,i,r)}},D1=class extends EX(l_,PK){constructor(e,t,i){super(),this.super_Entity(e,t),this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1,this.layers.enable(3);let r=this.shadow.camera;r.fov=90,r.aspect=1,r.near=100,r.far=2500;let a=new l7(new iR(new iD(-r.far+this.position.x,-r.far+this.position.y,-r.far+this.position.z),new iD(r.far+this.position.x,r.far+this.position.y,r.far+this.position.z)),new iv(0xffaa00));a.visible=!1,this.gizmos.shadowmap=a,this.update()}update(){if(this.shadow&&(this.shadow.camera.updateProjectionMatrix(),this.gizmos))for(let e in this.gizmos){let t=this.gizmos[e];if(t instanceof l7){let e=this.shadow.camera,i=new iD(-e.far+this.position.x,-e.far+this.position.y,-e.far+this.position.z),r=new iD(e.far+this.position.x,e.far+this.position.y,e.far+this.position.z);t.box.set(i,r),t.updateMatrixWorld(!0)}}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.objectHelper&&this.objectHelper.update()}updateState(e,t){this.updateState_Light(e,t),void 0!==e.distance&&(this.distance=e.distance),void 0!==e.decay&&(this.decay=e.decay),void 0!==e.shadowRadius&&(this.shadow.radius=e.shadowRadius),void 0!==e.shadowResolution&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null))}},D2=class extends CH{get forceComputeSize(){return!0}get shape(){return this.geometry.userData.shape}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?_j(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}},D3=class extends CH{constructor(e,t,i){super(e,t,i),this._shapeId=null,this._context=i}updateState(e,t){super.updateState(e,t),this.updateShape(),this.refreshAttachedCloners(t)}updateShape(){let e,t={...this.data.geometry.extrusion.shape};for(let e in t)"string"==typeof t[e]&&(t[e]=this._context.shared.getVariable(t[e],[this.uuid,"geometry","extrusion","shape",e]));if("Custom"===t.type){let i=t.shapeId;if(i!==this._shapeId&&this.detachShape(),i){this._shapeId=i;let t=this._context.scene.find(i);t?.data&&(t.attachedPaths.add(this),e=t.geometry.userData?.shape),e||this._context.scene.addPendingCommand(()=>this.updateShape())}}else{let i;switch(t.type){case"Rectangle":i=SI;break;case"Ellipse":i=w4;break;case"Polygon":i=SE;break;case"Star":i=SF;break;default:throw Error(`Unknown shape type: ${t.type}`)}e=i.create({parameters:t}).userData.shape}let i=this.geometry;e&&i.inputs&&(i.inputs.shapeData=e,i.build())}detachShape(){null!==this._shapeId&&this._context.scene.find(this._shapeId)?.attachedPaths.delete(this)}createGeometryDelayed(e){this.geometryCreateDeleyed=e.shared,this.updateShape(),this.refreshAttachedPaths(e)}updateTransformState(e,t){return super.updateTransformState(e,t)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.updateShape()}updateEntityBoxSize(e,t){let i=this.geometry.getAttribute("position");void 0!==i?_j(i,this.geometry.drawRange.start,this.geometry.drawRange.count<1/0?this.geometry.drawRange.count:i.count,e,t):super.updateEntityBoxSize(e,t)}}
6390,D4=class extends Ed{constructor(e,t,i){super(e,t,i),this.data=t}},D5=class extends EB(n_,E1){constructor(e,t,i){super(),"Instance"===t.type&&"string"==typeof e&&(t=this.transformAssignData(t,i)),this.super_Entity(e,t),this.objectHelper.update()}get isComponentRoot(){return"Component"===this.data.type&&"string"==typeof this.identity}get isInstanceRoot(){return"Instance"===this.data.type&&"string"==typeof this.identity}transformAssignData(e,t){let i=xL.getComponentData({scene:t.scene.data,shared:t.shared.data},e.component);if(!i)return{...vH.defaultData,...e,...pl(vH.defaultData,xu.rootOverrideProps)};{let t,r;for(let a of xu.rootOverrideProps)void 0===e[a]?(void 0===t&&(t={...e}),t[a]=i.data[a]):(void 0===r&&(r={}),r[a]=e[a],void 0===t&&(t={...e}),t[a]=pJ.apply(i.data[a],e[a]));return this.overrideData=r,t}}updateByOp(e,t,i,r){let a;if(this.isInstanceRoot&&!r){if(t=this.transformAssignData(t,i),0===e.type&&0===e.path.length&&this.component)for(let t of xu.rootOverrideProps)t in e.props&&void 0===e.props[t]&&(void 0===a&&(a={...e,props:{...e.props}}),a.props[t]=this.component.data[t]);else if(0===e.type&&e.path.length>0&&xu.rootOverrideProps.includes(e.path[0])){let i=e.path[0];void 0===a&&(a={...e,path:[],props:{[i]:t[i]}})}}super.updateByOp(a??e,t,i,r)}updateState(e,t){this.updateState_Entity(e,t)}expandInstanceChildren(e){let t=this.data;if(void 0===this.component){let i=e.scene.find(t.component)??null,r=!1;if(i!==this.oldComponent){if(this.oldComponent){let t=0;for(let i of this.children)if(S7.is(i))e.scene.disposeAndUnregisterEntityRecursivelyIfNotReregistered(i),D6(i),t+=1;else break;this.children.splice(0,t)}r=!0}if(i){let a={};for(let o of(function e(t,i,r,a,o,l,h,c,d){if(h>50)return!1;if(a.component!==o){if(a.component){let e=a.component.instances.indexOf(a);e>=0&&a.component.instances.splice(e,1)}o.instances.find(e=>e===a)||o.instances.push(a),a.component=o}o instanceof D5&&o.isInstanceRoot&&o.expandInstanceChildren(t);let p=0;for(let f of o.children)if(S7.is(f)){let o=[...i,..."string"==typeof f.identity?[f.identity]:f.identity],m=xd.resolve(r,o,1);null==m||m instanceof p$||Object.setPrototypeOf(m,p$.prototype);let g=null,v;if(!c){let e=a.children[p];if(null!==(g=S7.is(e)?e:null)){let e=D8(g,f,m,o);v=e>=1?g.stateSelection:void 0,2!==e&&(g=null)}if(null===g&&null!==(g=t.scene.findInstance(o)??null)){let e=D8(g,f,m,o);if(v=e>=1?g.stateSelection:void 0,2!==e)g=null;else{let e=g.parent.children.indexOf(g);g.parent.children.splice(e,1),a.children.splice(p,0,g),g.parent===a||(g.parent=a,g.matrixWorldNeedsUpdate=!0,g.resetBBoxNeedsUpdate(),g.updateVisible(),t.pendingDeletes.delete(g))}}}if(null===g){let e=m?pJ.apply(f.data,m):f.data;gX.is(e.type)&&(e={...e,type:"Empty"}),(g=bk.createEntity(o,e,t)).overrideData=m,a.add(g),a.children.splice(a.children.length-1,1),a.children.splice(p,0,g),g.updateState(g.data,t),v&&g.changeSelectedState(v,t),t.scene.registerInstanceAndSetUuid(g)}g.isBone&&(d[g.identity[g.identity.length-1]]=g.uuid),p+=1,e(t,i,r,g,f,l,h+1,c,d)}if(!c){let e=p;for(;;){let e=a.children[p];if(S7.is(e))t.pendingDeletes.add(e);else break;p+=1}a.children.splice(e,p-e)}return!0}(e,[this.uuid],t.overrides,this,i,i,0,r,a),this.children))if(S7.is(o)){let t=o.data;"Empty"===t.type&&t.animations&&o.traverseEntity(t=>{let i=t.dataPatched;if(t instanceof CH&&i.bones&&i.boneInverses){let i=t.dataPatched;if(i.bones&&i.boneInverses){let r=new nk(i.bones.map(t=>e.scene.find(a[t])),i.boneInverses.map(e=>new i6().fromArray(e)));t.bind(r,t.bindMatrix)}}else t.matrixAutoUpdate=!0})}}this.oldComponent=this.component}}};function D6(e){if(e.component){let t=e.component.instances.indexOf(e);for(let i of(t>=0&&e.component.instances.splice(t,1),e.children))S7.is(i)&&D6(i)}}function D8(e,t,i,r){return e.component===t&&pt(e.identity,r)?e.overrideData===i?2:1:0}var D9=class extends EB(nz,E1){constructor(e,t){super(),this.super_Entity(e,t),this.objectHelper.update(),this.matrixAutoUpdate=!0}updateState(e,t){this.updateState_Entity(e,t)}},D7=class extends CH{constructor(e,t,i){super(e,t,i),this.onBeforeRender=e=>{this.uiCanvas.render(e)},this.uiCanvas=new DJ(e+"-canvas",t.geometry.width,t.geometry.height,i),this.uiCanvas.promise.then(()=>{this.applyFrame(this.dataPatched.geometry.frame,i.shared)})}updateByPatchedOpGeometry(e,t,i){super.updateByPatchedOpGeometry(e,t,i),0===e.type&&(void 0!==e.props.frame&&this.applyFrame(e.props.frame,i.shared),(void 0!==e.props.width||void 0!==e.props.height)&&this.applySize(e.props,i.shared))}applySize(e,t){let i=e?.width??this.dataPatched.geometry.width,r=e?.height??this.dataPatched.geometry.height;this.uiCanvas.applySize({width:i,height:r}
6390),this.applyGeometryParametersFromFrame(t)}applyFrame(e,t){this.uiCanvas.applyFrame(e),this.applyGeometryParametersFromFrame(t),this.applyMaterialParametersFromFrame({shared:t})}applyGeometryParametersFromFrame(e){let t=this.frame;t&&(Object.assign(this.data,{geometry:Object.assign(this.data.geometry,{cornerRadius:t.cornerRadius,cornerType:0})}),Object.assign(this.dataPatched,{geometry:Object.assign(this.dataPatched.geometry,{cornerRadius:t.cornerRadius,cornerType:0})}),this.localGeometry?.dispose(),this.localGeometry=_l(this.dataPatched.geometry,e,this.data.flatShading,this))}applyMaterialParametersFromFrame(e){let t=this.frame;if(t){let i=t.data.backgroundBlur;Object.assign(this.data.material.layers[0].data.texture,{image:this.uiCanvas.uuid}),Object.assign(this.data.material.layers[1].data,{roughness:i.radius,alpha:+!!i.enabled}),Object.assign(this.dataPatched.material.layers[0].data.texture,{image:this.uiCanvas.uuid}),Object.assign(this.dataPatched.material.layers[1].data,{roughness:i.radius,alpha:+!!i.enabled}),this.material.reset?.(this.dataPatched.material,e,!0)}}updateEntity2DByOp(e,t,i,r){this.uiCanvas.updateEntity2DByOp(e,t,i,r),e===this.frameId&&0===t.type&&(void 0!==t.props.cornerRadius?this.applyGeometryParametersFromFrame(r):fv(t.path,["backgroundBlur"])&&this.applyMaterialParametersFromFrame({shared:r}))}get frame(){return this.uiCanvas.frame}get frameId(){return this.frame?.uuid}removeInteractionGeometry(e){super.removeInteractionGeometry(e),this.applySize({},e)}updateGeometryInteractions(e,t){super.updateGeometryInteractions(e,t),this.applySize({width:e.width,height:e.height},t);let i={...this.data.geometry,...e};this.localGeometry?.dispose(),this.localGeometry=_l(i,t,this.data.flatShading,this)}},Oe=class{constructor(e,t,i){this.variables=[],this.currentTextureIndex=0;let r=1015,a=new nI,o=new sl;o.position.z=1;let l={passThruTexture:{value:null}},h=p(`uniform sampler2D passThruTexture; 6391 6392void main() { 6393 6394 vec2 uv = gl_FragCoord.xy / resolution.xy; 6395 6396 gl_FragColor = texture2D( passThruTexture, uv ); 6397 6398} 6399`,l),c=new r7(new sS(2,2),h);function d(i){i.defines.resolution="vec2( "+e.toFixed(1)+", "+t.toFixed(1)+" )"}function p(e,t){let i=new so({uniforms:t=t||{},vertexShader:`void main() { 6400 6401 gl_Position = vec4( position, 1.0 ); 6402 6403} 6404`,fragmentShader:e});return d(i),i}a.add(c),this.setDataType=function(e){return r=e,this},this.addVariable=function(e,t,i){let r={name:e,initialValueTexture:i,material:this.createShaderMaterial(t),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:1003,magFilter:1003};return this.variables.push(r),r},this.setVariableDependencies=function(e,t){e.dependencies=t},this.init=function(){if(!1===i.capabilities.isWebGL2&&!1===i.extensions.has("OES_texture_float"))return"No OES_texture_float support for float textures.";if(0===i.capabilities.maxVertexTextures)return"No support for vertex shader textures.";for(let i=0;i<this.variables.length;i++){let r=this.variables[i];r.renderTargets[0]=this.createRenderTarget(e,t,r.wrapS,r.wrapT,r.minFilter,r.magFilter),r.renderTargets[1]=this.createRenderTarget(e,t,r.wrapS,r.wrapT,r.minFilter,r.magFilter),this.renderTexture(r.initialValueTexture,r.renderTargets[0]),this.renderTexture(r.initialValueTexture,r.renderTargets[1]);let a=r.material,o=a.uniforms;if(null!==r.dependencies)for(let e=0;e<r.dependencies.length;e++){let t=r.dependencies[e];if(t.name!==r.name){let e=!1;for(let i=0;i<this.variables.length;i++)if(t.name===this.variables[i].name){e=!0;break}if(!e)return"Variable dependency not found. Variable="+r.name+", dependency="+t.name}o[t.name]={value:null},a.fragmentShader=` 6405uniform sampler2D `+t.name+`; 6406`+a.fragmentShader}}return this.currentTextureIndex=0,null},this.compute=function(){let e=this.currentTextureIndex,t=+(0===this.currentTextureIndex);for(let i=0,r=this.variables.length;i<r;i++){let r=this.variables[i];if(null!==r.dependencies){let t=r.material.uniforms;for(let i=0,a=r.dependencies.length;i<a;i++){let a=r.dependencies[i];t[a.name].value=a.renderTargets[e].texture}}this.doRenderTarget(r.material,r.renderTargets[t])}this.currentTextureIndex=t},this.getCurrentRenderTarget=function(e){return e.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(e){return e.renderTargets[+(0===this.currentTextureIndex)]},this.dispose=function(){c.geometry.dispose(),c.material.dispose();let e=this.variables;for(let t=0;t<e.length;t++){let i=e[t];i.initialValueTexture&&i.initialValueTexture.dispose();let r=i.renderTargets;for(let e=0;e<r.length;e++)r[e].dispose()}},this.addResolutionDefine=d,this.createShaderMaterial=p,this.createRenderTarget=function(i,a,o,l,h,c){return o=o||1001,l=l||1001,h=h||1003,c=c||1003,new iM(i=i||e,a=a||t,{wrapS:o,wrapT:l,minFilter:h,magFilter:c,format:1023,type:r,depthBuffer:!1})},this.createTexture=function(){let i=new nF(new Float32Array(e*t*4),e,t,1023,1015);return i.needsUpdate=!0,i},this.renderTexture=function(e,t){l.passThruTexture.value=e,this.doRenderTarget(h,t),l.passThruTexture.value=null},this.doRenderTarget=function(e,t){let r=i.getRenderTarget(),l=i.xr.enabled,d=i.shadowMap.autoUpdate,p=i.outputEncoding,f=i.toneMapping;i.xr.enabled=!1,i.shadowMap.autoUpdate=!1,i.outputEncoding=3e3,i.toneMapping=0,c.material=e,i.setRenderTarget(t),i.render(a,o),c.material=h,i.xr.enabled=l,i.shadowMap.autoUpdate=d,i.outputEncoding=p,i.toneMapping=f,i.setRenderTarget(r)}}},Ot=new rI,Oi=new iD,Or=class{constructor(e){let t=e.geometry;if(!t.isBufferGeometry||3!==t.attributes.position.itemSize)throw Error("THREE.MeshSurfaceSampler: Requires BufferGeometry triangle mesh.");t.index&&(t=t.toNonIndexed()),this.geometry=t,this.randomFunction=Math.random,this.positionAttribute=this.geometry.getAttribute("position"),this.colorAttribute=this.geometry.getAttribute("color"),this.weightAttribute=null,this.distribution=null}setWeightAttribute(e){return this.weightAttribute=e?this.geometry.getAttribute(e):null,this}build(){let e=this.positionAttribute,t=this.weightAttribute,i=new Float32Array(e.count/3);for(let r=0;r<e.count;r+=3){let a=1;t&&(a=t.getX(r)+t.getX(r+1)+t.getX(r+2)),Ot.a.fromBufferAttribute(e,r),Ot.b.fromBufferAttribute(e,r+1),Ot.c.fromBufferAttribute(e,r+2),a*=Ot.getArea(),i[r/3]=a}this.distribution=new Float32Array(e.count/3);let r=0;for(let e=0;e<i.length;e++)r+=i[e],this.distribution[e]=r;return this}setRandomGenerator(e){return this.randomFunction=e,this}sample(e,t,i){let r=this.distribution[this.distribution.length-1],a=this.binarySearch(this.randomFunction()*r);return this.sampleFace(a,e,t,i)}binarySearch(e){let t=this.distribution,i=0,r=t.length-1,a=-1;for(;i<=r;){let o=Math.ceil((i+r)/2);if(0===o||t[o-1]<=e&&t[o]>e){a=o;break}e<t[o]?r=o-1:i=o+1}return a}sampleFace(e,t,i,r){let a=this.randomFunction(),o=this.randomFunction();return a+o>1&&(a=1-a,o=1-o),Ot.a.fromBufferAttribute(this.positionAttribute,3*e),Ot.b.fromBufferAttribute(this.positionAttribute,3*e+1),Ot.c.fromBufferAttribute(this.positionAttribute,3*e+2),t.set(0,0,0).addScaledVector(Ot.a,a).addScaledVector(Ot.b,o).addScaledVector(Ot.c,1-(a+o)),void 0!==i&&Ot.getNormal(i),void 0!==r&&void 0!==this.colorAttribute&&(Ot.a.fromBufferAttribute(this.colorAttribute,3*e),Ot.b.fromBufferAttribute(this.colorAttribute,3*e+1),Ot.c.fromBufferAttribute(this.colorAttribute,3*e+2),Oi.set(0,0,0).addScaledVector(Ot.a,a).addScaledVector(Ot.b,o).addScaledVector(Ot.c,1-(a+o)),r.r=Oi.x,r.g=Oi.y,r.b=Oi.z),this}};function Os(e,t){let i=new Float32Array(4*t*t);for(let r=0;r<t*t;r++)i[4*r]=e[3*r],i[4*r+1]=e[3*r+1],i[4*r+2]=e[3*r+2],i[4*r+3]=0;let r=new nF(i,t,t,1023,1015);return r.needsUpdate=!0,r}var Oa=` 6407// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 6408// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 6409// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 6410uniform sampler2D uOriginalPosition; 6411uniform float uTime; 6412uniform float uSpeed; // update speed of the particles 6413uniform vec3 uWorldOffset; 6414uniform vec4 uWorldQuaternion; 6415uniform float uMaxLifeTime; 6416uniform vec3 uEmitterSize; 6417uniform float uFPSRatio; // 1 for 60 FPS 6418 6419float random (vec2 st) { 6420 return fract(sin(dot(st.xy, 6421 vec2(12.9898,78.233)))* 6422 43758.5453123); 6423} 6424vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 6425 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 6426} 6427 6428vec3 applyForce(vec3 force, float mass) { 6429 vec3 acceleration = force / mass; 6430 6431 return acceleration; 6432 } 6433 6434 6435void main() { 6436 vec2 vUv = gl_FragCoord.xy / resolution.xy; 6437 vec3 position = texture2D( uCurrentPosition, vUv ).xyz; 6438 float currentLife = texture2D( uCurrentPosition, vUv ).w; // from 1 to 0
6439 float isSpawning = texture2D( uCurrentEmissionRate, vUv ).r; // 1. = spawning, 0. = not spawning 6440 float isActive = texture2D( uCurrentEmissionRate, vUv ).g; // 1. = active, 0. = not active 6441 float timeStart = texture2D( uCurrentEmissionRate, vUv ).b; // timeStart in seconds when the particle was emitted 6442 vec3 originalPosition = ((texture2D( uOriginalPosition, vUv ).xyz) * uEmitterSize); 6443 vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz; 6444 float collisionFlag = texture2D( uCurrentVelocity, vUv ).w; // 1. = collided, 0. = not collided 6445 float lifeTime = uMaxLifeTime; 6446 6447 // Calculate the position adjustment based on collision 6448 // if (collisionFlag > .5) { 6449 float isColliding = step(0.5, collisionFlag); // 1.0 if collisionFlag > 0.5, otherwise 0.0 6450 float bounceOffset = 3.0 * isColliding; // Becomes 3.0 if colliding, 0.0 otherwise 6451 vec3 collisionAdjustedVelocity = velocity * (1.0 + bounceOffset); 6452 6453 // Update position based on collision or normal movement 6454 vec3 fpsVelocity = velocity * min(uFPSRatio, 5.0); 6455 position += mix(fpsVelocity, collisionAdjustedVelocity, isColliding); 6456 6457 // EMISSION RATE - BIRTH 6458 // if (isSpawning == 1.0) { 6459 // Better Approach to avoid If statement 6460 vec3 newPosition = applyQuaternionToVector(uWorldQuaternion, originalPosition) + uWorldOffset; 6461 originalPosition = mix(originalPosition, newPosition, isSpawning); 6462 position = mix(position, originalPosition, isSpawning);; 6463 timeStart = mix(timeStart, uTime, isSpawning); 6464 6465 // Calculate timeLeft for life normalization
6466 float timeLeft = max(lifeTime - (uTime - timeStart), 0.0); 6467 float life_Normalize = timeLeft / lifeTime; 6468 6469 // Use isActive to blend between the calculated color and black 6470 vec4 activeColor = vec4(position, life_Normalize); 6471 // if (isActive == 1.0) { 6472 gl_FragColor = mix(vec4(0.0), activeColor, isActive); 6473 6474} 6475`,On=` 6476 #ifdef USE_COLLIDER 6477 float restitution = max(uBounce * 2., .01); // Energy Loss 6478 // SPHERE COLLIDER 6479 // ************************************************************** 6480 #ifdef USE_SPHERE_COLLIDER 6481 // Convert collider size to radii (assuming uColliderSize is the diameter in each axis) 6482 vec3 radii = uColliderSize; 6483 // Adjust position relative to collider 6484 vec3 relPos = position - uColliderPos; 6485 // Apply rotation of the collider to the relative position 6486 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6487 // Scale relative position by radii (for ellipsoid collision detection) 6488 vec3 scaledPos = relPos / radii; 6489 // Calculate ellipsoidal distance 6490 float dist = length(scaledPos); // Distance in terms of ellipsoid 6491
6492 // Check for collision 6493 if (dist <= 1. + particleSize / length(radii) && collisionFlag == 0.0) { 6494 // Compute the normal at the collision point, accounting for particle size 6495 vec3 adjustedPos = scaledPos * (1.0 + particleSize / length(radii)); 6496 // Compute the normal at the collision point 6497 vec3 normal = ellipsoidNormal(adjustedPos, radii); 6498 // Rotate the normal back to world space 6499 normal = applyQuaternionToVector(uColliderQuaternion, normal); 6500 // Reflect the velocity vector off the normal 6501 velocity = reflect(velocity, normal) * restitution; 6502 6503 collisionFlag = 1.0; 6504 } else { 6505 collisionFlag = 0.0; 6506 } 6507 #endif 6508 6509 // BOX COLLIDER or PLANE COLLIDER 6510 // ************************************************************** 6511 #ifdef USE_BOX_COLLIDER 6512 // Box dimensions and repulsion variables 6513 vec3 boxHalfSize = uColliderSize / 2.0; 6514 // Convert world position to box's local space 6515 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6516 // Collision detection 6517 vec3 localDistance = abs(localPos) - boxHalfSize; 6518 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6519 6520 // Collision Detected 6521 if (distToSurface <= particleSize * 0.5 && collisionFlag == 0.0) { 6522 // Find the nearest face normal for bounce direction 6523 vec3 normal; 6524 if (localDistance.x > localDistance.y && localDistance.x > localDistance.z) { 6525 normal = vec3(sign(localPos.x), 0.0, 0.0); 6526 } else if (localDistance.y > localDistance.z) { 6527 normal = vec3(0.0, sign(localPos.y), 0.0); 6528 } else { 6529 normal = vec3(0.0, 0.0, sign(localPos.z)); 6530 } 6531 // Rotate normal back to world space 6532 normal = applyQuaternionToVector(uColliderQuaternion, normal); 6533 // Reflect velocity and apply repulsion force 6534 velocity = reflect(velocity, normal) * restitution; 6535 6536 collisionFlag = 1.0; 6537 } else { 6538 collisionFlag = 0.0; 6539 } 6540 #endif 6541 #endif 6542 // END COLLIDER 6543`,Oo=` 6544 #ifdef USE_ATTRACTOR 6545 6546 #ifdef USE_SPHERE_COLLIDER 6547 // Convert collider size to radii (assuming uColliderSize is the diameter in each axis) 6548 vec3 radii = uColliderSize; 6549 // Adjust position relative to collider 6550 vec3 relPos = position - uColliderPos; 6551 // Apply rotation of the collider to the relative position 6552 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6553 // Scale relative position by radii (for ellipsoid collision detection) 6554 vec3 scaledPos = relPos / radii; 6555 // Calculate ellipsoidal distance 6556 float distToSurface = length(scaledPos); // Distance in terms of ellipsoid 6557 float insideCheck = 1.0; 6558 6559 #endif 6560 6561 6562 #ifdef USE_BOX_COLLIDER 6563 // Box dimensions 6564 vec3 boxHalfSize = uColliderSize / 2.0; 6565 // Convert world position to box's local space 6566 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6567 vec3 localDistance = abs(localPos) - boxHalfSize; 6568 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6569 float insideCheck = particleSize; 6570 #endif 6571 6572 // Apply vortex force inside the Helper 6573 #ifdef USE_FORCE_LOCAL_SPACE 6574 if (distToSurface <= insideCheck ) { 6575 // Define parameters for the attractor field 6576 #ifdef USE_SPHERE_COLLIDER 6577 float attractorStrength = (1.0 - distToSurface ) * uForceIntensity; // Adjust as needed 6578 #endif 6579 6580 #ifdef USE_BOX_COLLIDER 6581 float attractorStrength = max((1.0 - insideCheck / distToSurface), 0.) * uForceIntensity; // Adjust as needed 6582 #endif 6583 6584 float attractorDamping = uForceDamping; // Adjust as needed (higher values will attenuate velocity more) 6585 6586 // Use the same radii calculation code as for the collider 6587 vec3 attractorRadii = uColliderSize; 6588 // Adjust position relative to attractor center 6589 vec3 relPos = position - uColliderPos; 6590 // Apply rotation of the collider to the relative position 6591 relPos = applyQuaternionToVector(uColliderQuaternionInvert, relPos); 6592 // Scale relative position by radii (for ellipsoid attraction) 6593 vec3 scaledPos = relPos / attractorRadii; 6594 6595 // Calculate ellipsoidal distance as attractor radius 6596 float attractorRadius = length(scaledPos); 6597 // Calculate the distance from the attractor center 6598 vec3 relativePosition = position - uColliderPos; 6599 // Calculate the force vector towards the attractor center 6600 vec3 attractorForce = normalize(relativePosition) * attractorStrength; 6601 // Apply the attractor force to the particle 6602 velocity -= attractorForce; 6603 // Attenuate the particle's velocity 6604 velocity *= attractorDamping; 6605 } 6606 #else 6607 // Calculate the distance from the attractor center 6608 vec3 relativePosition = position - uColliderPos; 6609 // Calculate the force vector towards the attractor center 6610 vec3 attractorForce = normalize(relativePosition) * uForceIntensity; 6611 // Apply the attractor force to the particle 6612 velocity -= attractorForce; 6613 // Attenuate the particle's velocity 6614 velocity *= uForceDamping; 6615 #endif 6616 #endif 6617`,Ol=` 6618 #ifdef USE_VORTEX 6619 // Box dimensions 6620 vec3 boxHalfSize = uColliderSize / 2.0; 6621 // Convert world position to box's local space 6622 vec3 localPos = applyQuaternionToVector(uColliderQuaternionInvert, position - uColliderPos); 6623 vec3 localDistance = abs(localPos) - boxHalfSize; 6624 float distToSurface = max(localDistance.x, max(localDistance.y, localDistance.z)); 6625 6626 // Apply vortex force inside the box 6627 if (distToSurface <= particleSize) { 6628 float vortexStrength = uForceIntensity; 6629 vec3 localTopCenter = vec3(0.0, 0., 0.0); 6630 6631 // Transform the local top center to the world space 6632 vec3 vortexCenter = uColliderPos + applyQuaternionToVector(uColliderQuaternion, localTopCenter); 6633 // Calculate the vector from particle to vortex center 6634 vec3 vortexVector = vortexCenter - position; 6635 6636 // Calculate the rotation axis from the inverse of the collider's quaternion and the fixed up vector 6637 // Note: important to add a tiny z component to the up vector to avoid instability 6638 vec3 upVector = vec3(0.0, 1.0, 0.01); 6639 vec3 rotationAxis = cross(upVector, applyQuaternionToVector(uColliderQuaternion, vortexVector)); 6640 rotationAxis = normalize(rotationAxis); 6641 6642 // Add rotational component to velocity 6643 float rotationSpeed = length(vortexVector * vortexStrength * 3.0) ; 6644 6645 vec3 rotationVelocity = rotationAxis * rotationSpeed; 6646 // velocity += rotationVelocity * 0.005 ; 6647 velocity = rotationVelocity * 0.005 ; 6648 6649 // Calculate vortex force 6650 // vec3 vortexForce = normalize(vortexVector) * uSpeed * .1 ; 6651 // Apply the vortex force to the particle 6652 vec3 originDirection = applyQuaternionToVector(uWorldQuaternion, directions); 6653 velocity += applyForce( originDirection * uSpeed * (1. - uForceDamping) , mass * .5); 6654 } 6655 #endif 6656`,Oh=` 6657// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 6658// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 6659// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 6660uniform sampler2D uOriginalPosition; 6661uniform sampler2D uDirections; 6662uniform vec3 uDirectionsAxis; 6663uniform vec4 uWorldQuaternion; 6664uniform vec3 uGravity; 6665uniform float uNoiseStrength; // Variation of the noise 6666uniform float uNoiseScale; // Scale of the noise 6667uniform float uNoiseSeed; // Seed of the noise 6668uniform float particleSize; 6669uniform float uSpeed; // update speed of the particles
6670uniform float uRandomMassFactor; 6671 6672// COLLIDER 6673uniform vec3 uColliderPos; // Collider Position 6674uniform vec3 uColliderSize; // Collider Dimension 6675uniform vec4 uColliderQuaternion; // Collider Rotation 6676uniform vec4 uColliderQuaternionInvert; // Collider Rotation 6677uniform float uBounce; // Bounce factor 6678uniform float uForceDamping; 6679uniform float uForceIntensity; 6680 6681 6682 6683 6684 vec3 mod289(vec3 x) { 6685 return x - floor(x * (1.0 / 289.0)) * 289.0; 6686 } 6687 6688 vec4 mod289(vec4 x) { 6689 return x - floor(x * (1.0 / 289.0)) * 289.0; 6690 } 6691 6692 vec4 permute(vec4 x) { 6693 return mod289(((x*34.0)+1.0)*x); 6694 } 6695 6696 vec4 taylorInvSqrt(vec4 r) 6697 { 6698 return 1.79284291400159 - 0.85373472095314 * r; 6699 } 6700 6701 vec3 fade(vec3 t) { 6702 return t*t*t*(t*(t*6.0-15.0)+10.0); 6703} 6704 6705 float snoise(vec3 v) 6706 { 6707 const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; 6708 const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); 6709 vec3 i = floor(v + dot(v, C.yyy) ); 6710 vec3 x0 = v - i + dot(i, C.xxx) ; 6711 vec3 g = step(x0.yzx, x0.xyz); 6712 vec3 l = 1.0 - g; 6713 vec3 i1 = min( g.xyz, l.zxy ); 6714 vec3 i2 = max( g.xyz, l.zxy ); 6715 vec3 x1 = x0 - i1 + C.xxx; 6716 vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y 6717 vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y 6718 6719 // Permutations 6720 i = mod289(i); 6721 vec4 p = permute( permute( permute( 6722 i.z + vec4(0.0, i1.z, i2.z, 1.0 )) 6723 + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) 6724 + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); 6725 6726 // Gradients: 7x7 points over a square, mapped onto an octahedron. 6727 // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) 6728 float n_ = 0.142857142857; // 1.0/7.0 6729 vec3 ns = n_ * D.wyz - D.xzx; 6730 6731 vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) 6732 6733 vec4 x_ = floor(j * ns.z); 6734 vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) 6735 6736 vec4 x = x_ *ns.x + ns.yyyy; 6737 vec4 y = y_ *ns.x + ns.yyyy; 6738 vec4 h = 1.0 - abs(x) - abs(y); 6739 6740 vec4 b0 = vec4( x.xy, y.xy ); 6741 vec4 b1 = vec4( x.zw, y.zw ); 6742 6743 vec4 s0 = floor(b0)*2.0 + 1.0; 6744 vec4 s1 = floor(b1)*2.0 + 1.0; 6745 vec4 sh = -step(h, vec4(0.0)); 6746 6747 vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; 6748 vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; 6749 6750 vec3 p0 = vec3(a0.xy,h.x); 6751 vec3 p1 = vec3(a0.zw,h.y); 6752 vec3 p2 = vec3(a1.xy,h.z); 6753 vec3 p3 = vec3(a1.zw,h.w); 6754 6755 //Normalise gradients 6756 vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); 6757 p0 *= norm.x; 6758 p1 *= norm.y; 6759 p2 *= norm.z; 6760 p3 *= norm.w; 6761 6762 // Mix final noise value 6763 vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); 6764 m = m * m; 6765 return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), 6766 dot(p2,x2), dot(p3,x3) ) ); 6767 } 6768 6769 vec3 snoiseVec3( vec3 x ){ 6770 6771 float s = snoise(vec3( x )); 6772 float s1 = snoise(vec3( x.y - 19.1 , x.z + 33.4 , x.x + 47.2 )); 6773 float s2 = snoise(vec3( x.z + 74.2 , x.x - 124.5 , x.y + 99.4 )); 6774 vec3 c = vec3( s , s1 , s2 ); 6775 return c; 6776 6777 } 6778 6779 6780 vec3 curlNoise( vec3 p, float seed){ 6781 p += seed; 6782 const float e = .1; 6783 vec3 dx = vec3( e , 0.0 , 0.0 ); 6784 vec3 dy = vec3( 0.0 , e , 0.0 ); 6785 vec3 dz = vec3( 0.0 , 0.0 , e ); 6786 6787 vec3 p_x0 = snoiseVec3( p - dx ); 6788 vec3 p_x1 = snoiseVec3( p + dx ); 6789 vec3 p_y0 = snoiseVec3( p - dy ); 6790 vec3 p_y1 = snoiseVec3( p + dy ); 6791 vec3 p_z0 = snoiseVec3( p - dz ); 6792 vec3 p_z1 = snoiseVec3( p + dz ); 6793 6794 float x = p_y1.z - p_y0.z - p_z1.y + p_z0.y; 6795 float y = p_z1.x - p_z0.x - p_x1.z + p_x0.z; 6796 float z = p_x1.y - p_x0.y - p_y1.x + p_y0.x; 6797 6798 const float divisor = 1.0 / ( 2.0 * e ); 6799 return normalize( vec3( x , y , z ) * divisor ); 6800 6801 } 6802 6803 6804// Classic Perlin noise 6805float cnoise(vec3 P) 6806{ 6807 vec3 Pi0 = floor(P); // Integer part for indexing 6808 vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1 6809 Pi0 = mod289(Pi0); 6810 Pi1 = mod289(Pi1); 6811 vec3 Pf0 = fract(P); // Fractional part for interpolation 6812 vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0 6813 vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); 6814 vec4 iy = vec4(Pi0.yy, Pi1.yy); 6815 vec4 iz0 = Pi0.zzzz; 6816 vec4 iz1 = Pi1.zzzz; 6817 6818 vec4 ixy = permute(permute(ix) + iy); 6819 vec4 ixy0 = permute(ixy + iz0); 6820 vec4 ixy1 = permute(ixy + iz1); 6821 6822 vec4 gx0 = ixy0 * (1.0 / 7.0); 6823 vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; 6824 gx0 = fract(gx0); 6825 vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); 6826 vec4 sz0 = step(gz0, vec4(0.0)); 6827 gx0 -= sz0 * (step(0.0, gx0) - 0.5); 6828 gy0 -= sz0 * (step(0.0, gy0) - 0.5); 6829 6830 vec4 gx1 = ixy1 * (1.0 / 7.0); 6831 vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; 6832 gx1 = fract(gx1); 6833 vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); 6834 vec4 sz1 = step(gz1, vec4(0.0)); 6835 gx1 -= sz1 * (step(0.0, gx1) - 0.5); 6836 gy1 -= sz1 * (step(0.0, gy1) - 0.5); 6837 6838 vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); 6839 vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); 6840 vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); 6841 vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); 6842 vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); 6843 vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); 6844 vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); 6845 vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); 6846 6847 vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); 6848 g000 *= norm0.x; 6849 g010 *= norm0.y; 6850 g100 *= norm0.z; 6851 g110 *= norm0.w; 6852 vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); 6853 g001 *= norm1.x; 6854 g011 *= norm1.y; 6855 g101 *= norm1.z; 6856 g111 *= norm1.w; 6857 6858 float n000 = dot(g000, Pf0); 6859 float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); 6860 float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); 6861 float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); 6862 float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); 6863 float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); 6864 float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); 6865 float n111 = dot(g111, Pf1); 6866 6867 vec3 fade_xyz = fade(Pf0); 6868 vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); 6869 vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); 6870 float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); 6871 return 2.2 * n_xyz; 6872} 6873 6874 6875vec3 fbm_vec3(vec3 p, float frequency, float offset) 6876{ 6877 return vec3( 6878 cnoise((p+vec3(offset))*frequency), 6879 cnoise((p+vec3(offset+20.0))*frequency), 6880 cnoise((p+vec3(offset-30.0))*frequency) 6881 ); 6882} 6883 6884 6885float rand(vec2 co){ 6886 return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); 6887} 6888vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 6889 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 6890 } 6891vec3 applyForce(vec3 force, float mass) { 6892 vec3 acceleration = force / mass; 6893 6894 return acceleration; 6895} 6896 6897vec4 conjugate(vec4 q) { 6898 return vec4(q.w, -q.x, -q.y, -q.z); 6899} 6900 6901// Function to compute the normal of the ellipsoid at a given point 6902vec3 ellipsoidNormal(vec3 p, vec3 radii) { 6903 return normalize(p / (radii * radii)); 6904} 6905 6906float friction = .3; 6907 6908void main() { 6909 vec2 vUv = gl_FragCoord.xy / resolution.xy; 6910 vec3 position = texture2D( uCurrentPosition, vUv ).xyz; 6911 vec3 originalPosition = texture2D( uOriginalPosition, vUv ).xyz; 6912 float timeLeft = texture2D( uCurrentPosition, vUv ).w; 6913 vec3 directions = texture2D( uDirections, vUv ).xyz; 6914 vec3 velocity = texture2D( uCurrentVelocity, vUv ).xyz; 6915 float mass = rand(originalPosition.xy) * 0.5 + 0.5;
6916 float isSpawning = texture2D( uCurrentEmissionRate, vUv ).x; // 1. = spawning, 0. = not spawning 6917 float isActive = texture2D( uCurrentEmissionRate, vUv ).y; // 1. = active, 0. = not active 6918 float collisionFlag =texture2D( uCurrentVelocity, vUv ).w; // Indicate collision 6919 6920 // Randomness Mass 6921 mass = (1.0 - (uRandomMassFactor * mass)); 6922 6923 if (isActive == 1.0) { 6924 // ************************************************************** 6925 // FORCES NOISES 6926 // ************************************************************** 6927 #ifdef USE_CURL_NOISE 6928 if (uNoiseScale > 0.0 ) { 6929 velocity = curlNoise(position * uNoiseScale * .002, uNoiseSeed) * ( uNoiseStrength + 1.0) * .05 * uSpeed; 6930 } 6931 // Variation of the noise Over Time 6932 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) { 6933 velocity += curlNoise( position, uNoiseSeed) * uNoiseStrength * 0.05 * uSpeed; 6934 } 6935 #endif 6936 // ************************************************************** 6937 #ifdef USE_SIMPLEX_NOISE 6938 if (uNoiseScale > 0.0 ) { 6939 velocity = vec3(snoise(position * uNoiseScale * .001) * ( uNoiseStrength + 1.0) * .1); 6940 velocity *= uSpeed; 6941 } 6942 // Variation of the noise Over Time 6943 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0) { 6944 velocity += vec3(snoise(position * uNoiseStrength * .001) * .05 * uSpeed); 6945 } 6946 #endif 6947 // ************************************************************** 6948 #ifdef USE_FBM_NOISE 6949 if (uNoiseScale > 0.0 ) { 6950 velocity = fbm_vec3(position * uNoiseScale * .001, ( uNoiseStrength + 1.0), uNoiseSeed); 6951 velocity *= uSpeed; 6952 } 6953 // Variation of the noise Over Time 6954 if (uNoiseStrength > 0.0 && uNoiseScale == 0.0 ) { 6955 velocity += fbm_vec3(position * uNoiseStrength * .001, ( uNoiseStrength + 1.0), uNoiseSeed) * .1 * uSpeed; 6956 } 6957 #endif 6958 6959 // COLLIDER 6960 ${On} 6961 // ATTRACTION 6962 ${Oo} 6963 // VORTEX 6964 ${Ol} 6965 } 6966 // End isActive 6967 6968 // SPAWN BIRTH 6969 // ************************************************************** 6970 // if (isSpawning == 1.) 6971 #ifdef USE_NORMALS 6972 velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, directions) * uSpeed, isSpawning); 6973 #else 6974 velocity = mix(velocity, applyQuaternionToVector(uWorldQuaternion, uDirectionsAxis) * uSpeed, isSpawning); 6975 #endif 6976 6977 // if (collisionFlag == 0.0) 6978 velocity += applyForce(uGravity, mass * .5) * (1.0 - collisionFlag); 6979 6980 gl_FragColor = vec4(velocity, collisionFlag); 6981} 6982`,Oc=` 6983 6984 // Linear Fade In 6985 float linearFadeIn(float t) { 6986 return t; 6987 } 6988 6989 6990 // linear fade out 6991 float linearFadeOut(float t) { 6992 return 1.0 - t; 6993 } 6994 6995 float linearInOut(float t) { 6996 return t < 0.5 ? t : (1.0 - t); 6997 } 6998 6999 // lerp 7000 float lerp(float a, float b, float t) { 7001 return a + (b - a) * t; 7002 } 7003 7004 // Ease In Out Quart 7005 float exponentialInOut(float t) { 7006 return t < 0.4 ? lerp(0.0, 1.0, t / 0.4) : 7007 t > 0.6 ? lerp(1.0, 0.0, (t - 0.6) / 0.4) : 7008 1.0; 7009 } 7010 7011 // constant 7012 float constant(float t) { 7013 return 1.0; 7014 } 7015`,Od=` 7016 7017float rand(vec3 co){ 7018 return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); 7019} 7020 7021vec3 applyQuaternionToVector( vec4 q, vec3 v ){ 7022 return v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v ); 7023} 7024 7025vec3 applyForce(vec3 force, float mass) { 7026 vec3 acceleration = force / mass; 7027 7028 return acceleration; 7029} 7030`,Ou=` 7031vec3 rgb2xyz (in vec3 rgb) { 7032 float r = rgb.r; 7033 float g = rgb.g; 7034 float b = rgb.b; 7035 7036 r = r > 0.04045 ? pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); 7037 g = g > 0.04045 ? pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); 7038 b = b > 0.04045 ? pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); 7039 7040 float x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); 7041 float y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); 7042 float z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); 7043 7044 vec3 xyz = vec3( 7045 (r * 0.4124) + (g * 0.3576) + (b * 0.1805) * 100.0, 7046 (r * 0.2126) + (g * 0.7152) + (b * 0.0722) * 100.0, 7047 (r * 0.0193) + (g * 0.1192) + (b * 0.9505) * 100.0 7048 ); 7049 return(xyz); 7050} 7051 7052vec3 xyz2lab (in vec3 xyz) { 7053 float x = xyz.x / 95.047; 7054 float y = xyz.y / 100.0; 7055 float z = xyz.z / 108.883; 7056 7057 x = x > 0.008856 ? pow(x, 1.0 / 3.0) : (7.787 * x) + (16.0 / 116.0);
7058 y = y > 0.008856 ? pow(y, 1.0 / 3.0) : (7.787 * y) + (16.0 / 116.0); 7059 z = z > 0.008856 ? pow(z, 1.0 / 3.0) : (7.787 * z) + (16.0 / 116.0); 7060 7061 vec3 lab = vec3((116.0 * y) - 16.0, 500.0 * (x - y), 200.0 * (y - z)); 7062 return(lab); 7063} 7064 7065vec3 rgb2lab(in vec3 rgb) { 7066 vec3 xyz = rgb2xyz(rgb); 7067 vec3 lab = xyz2lab(xyz); 7068 return(lab); 7069} 7070 7071vec3 xyz2rgb (in vec3 xyz) { 7072 float x = xyz.x / 100.0; 7073 float y = xyz.y / 100.0; 7074 float z = xyz.z / 100.0; 7075 7076 7077 float r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); 7078 float g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); 7079 float b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); 7080 7081 r = r > 0.0031308 ? ((1.055 * pow(r, 1.0 / 2.4)) - 0.055) : r * 12.92; 7082 g = g > 0.0031308 ? ((1.055 * pow(g, 1.0 / 2.4)) - 0.055) : g * 12.92; 7083 b = b > 0.0031308 ? ((1.055 * pow(b, 1.0 / 2.4)) - 0.055) : b * 12.92; 7084 7085 r = min(max(0.0, r), 1.0); 7086 g = min(max(0.0, g), 1.0); 7087 b = min(max(0.0, b), 1.0); 7088 7089 return(vec3(r, g, b)); 7090} 7091 7092vec3 lab2xyz (in vec3 lab) { 7093 float l = lab.x; 7094 float a = lab.y; 7095 float b = lab.z; 7096 7097 float y = (l + 16.0) / 116.0; 7098 float x = a / 500.0 + y; 7099 float z = y - b / 200.0; 7100 7101 float y2 = pow(y, 3.0); 7102 float x2 = pow(x, 3.0); 7103 float z2 = pow(z, 3.0); 7104 7105 y = y2 > 0.008856 ? y2 : (y - 16.0 / 116.0) / 7.787; 7106 x = x2 > 0.008856 ? x2 : (x - 16.0 / 116.0) / 7.787; 7107 z = z2 > 0.008856 ? z2 : (z - 16.0 / 116.0) / 7.787; 7108 7109 x *= 95.047; 7110 y *= 100.0; 7111 z *= 108.883; 7112 7113 return(vec3(x, y, z)); 7114} 7115vec3 lab2rgb (in vec3 lab) { 7116 vec3 xyz = lab2xyz(lab); 7117 vec3 rgb = xyz2rgb(xyz); 7118 return(rgb); 7119} 7120 7121`,Op=` 7122 uniform sampler2D uPosition; 7123 uniform float uSize; 7124 uniform float uSizeEnd; 7125 uniform vec3 uWorldOffset; 7126 uniform vec4 uWorldQuaternion; 7127 // Billboard Behavior - Currently at Zero, but we can change that 7128 uniform float uRotation; 7129 uniform float uRotationEnd; 7130 uniform vec2 center; 7131 7132 // Randomness 7133 uniform float uRandScaleFactor; 7134 uniform float uRandRotationFactor; 7135 7136 attribute vec2 ref; 7137 7138 varying float v_LifeLeft; // normalized lifetime 1 to 0 7139 varying vec2 vUv; 7140 varying vec2 vRef; 7141 7142 ${Od} 7143 ${Oc} 7144`,Of=` 7145 uniform vec4 uColor; // start color 7146 uniform vec4 uColor2; // end color 7147 uniform sampler2D uTexture; // texture 7148 varying float v_LifeLeft; // normalized lifetime 1 to 0 7149 varying vec2 vUv; 7150 varying vec2 vRef; 7151 7152 float random(vec2 co) { 7153 return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); 7154 } 7155 `+Oc+` 7156 ${Ou} 7157 7158`,Om=class extends so{constructor(e,t){super(),this.needsJitter=!0,this.type="ParticleMaterial",this.easeOpacity="linearFadeIn",this.easeSize="linearFadeIn",this.useSizeEnd=!1,this.isColoringRandom=!1,this.init(e,t),this.context=t}reset(){}init(e,t){this.transparent=!0,this.depthTest=!0,this.depthWrite=!1,this.easeOpacity=e.ease,this.easeSize=e.easeSize,this.layers=[],_X.startContext(_X.globalContext),this.lightLayer=new M6(0,"",{...vt.defaultData("light","phong"),visible:!1},new A9,{},t.shared),_X.endContext(_X.globalContext),this.build()}updateState(e){void 0!==e.coloring&&(this.isColoringRandom="random"===e.coloring),void 0!==e.color&&(e.color instanceof Array?this.uniforms.uColor.value=e.color:this.uniforms.uColor.value=this.context.shared.color(e.color)),void 0!==e.color2&&(e.color2 instanceof Array?this.uniforms.uColor2.value=e.color2:this.uniforms.uColor2.value=this.context.shared.color(e.color2)),void 0!==e.size&&(this.uniforms.uSize.value=e.size[0],this.uniforms.uSizeEnd.value=e.size[1],e.size[0]!==e.size[1]?this.useSizeEnd=!0:this.useSizeEnd=!1),void 0!==e.ease&&(this.easeOpacity=e.ease,this.build()),void 0!==e.easeSize&&(this.easeSize=e.easeSize,this.build()),this.needsUpdate=!0}onBeforeCompile(e){this.build(),e.defines=this.defines,e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader}build(){let e=new AA;return e.needsJitter=this.needsJitter,e.addFragmentParsCode(Ay),e.buildShader("vertex",this.fragment),e.buildShader("fragment",this.fragment),e.addFragmentFinalCode(Ax),this.isColoringRandom&&e.define("USE_RANDOM_COLORING"),this.useSizeEnd&&e.define("USE_SIZE_END"),e.addVertexParsCode(Op),e.addFragmentParsCode(Of),e.addVertexFinalCode((({easeSize:e="linearFadeOut"})=>` 7159 vUv = uv; 7160 vRef = ref; 7161 // Normalized LifeTime 1 to 0 7162 float lifeLeft = texture2D(uPosition, ref).w; 7163 v_LifeLeft = lifeLeft; 7164 // Position From DataTexture Simulation 7165 vec3 pos = texture2D(uPosition, ref).rgb - uWorldOffset; 7166 // Apply World Quaternion 7167 pos = applyQuaternionToVector(uWorldQuaternion, pos); 7168 7169 #ifdef USE_SIZE_END 7170 // Scaled Over Time 7171 float t = 1. - lifeLeft; 7172 float currentSize = mix(uSize, uSizeEnd, t); // Linearly interpolate between uSize and uSizeEnd 7173 vec3 scaledPosition = position * vec3(currentSize); 7174 #else 7175 // Change Size Behavior over LifeTime 7176 float easeSize = ${e}(1. - lifeLeft); 7177 // Scaled Over Time 7178 vec3 scaledPosition = position * vec3(uSize * easeSize); 7179 #endif 7180 7181 // Billboard Behavior 7182 vec2 scale; 7183 scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); 7184 scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); 7185 // Randomness 7186 float randRef = rand(ref); 7187 scale *= (1.0 - (uRandScaleFactor * randRef)); 7188 // Rotation 7189 float randRotation = 2.0 * PI * ( uRandRotationFactor * randRef); 7190 float originalRotation = (1.0 - uRotation) * 2.0 * PI; 7191 float originalRotationEnd = (1.0 - uRotationEnd) * 2.0 * PI; 7192 // OverTime 7193 float finalRotation = mix(originalRotation + randRotation, originalRotationEnd + randRotation, lifeLeft); 7194 7195 vec2 alignedPosition = ( scaledPosition.xy - ( center - vec2( 0.5 ) ) ) * scale; 7196 vec2 rotatedPosition; 7197 rotatedPosition.x = cos( finalRotation ) * alignedPosition.x - sin( finalRotation ) * alignedPosition.y; 7198 rotatedPosition.y = sin( finalRotation ) * alignedPosition.x + cos( finalRotation ) * alignedPosition.y; 7199 7200 mat4 instanceMatrix = mat4( 7201 vec4(1.0, 0.0, 0.0, 0.0), 7202 vec4(0.0, 1.0, 0.0, 0.0), 7203 vec4(0.0, 0.0, 1.0, 0.0), 7204 vec4(pos.x, pos.y, pos.z, 1.0) 7205 ); 7206 7207 mvPosition = modelViewMatrix * instanceMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); 7208 mvPosition.xy += rotatedPosition; 7209 gl_Position = projectionMatrix * mvPosition; 7210`)({easeSize:this.easeSize})),e.addFragmentFinalCode((({easeOpacity:e="linearFadeOut"})=>` 7211 // if Particle is dead, hide it 7212 if (v_LifeLeft <= 0.005 ) { 7213 discard; 7214 } 7215 7216 #ifdef USE_RANDOM_COLORING 7217 float randVal = random(vRef); // Generate a random value based on the reference 7218 vec4 color = mix(uColor, uColor2, randVal); // Interpolate between the two colors 7219 #else 7220 vec4 color = mix(uColor, uColor2, 1. - v_LifeLeft); 7221 #endif 7222 7223 // Opacity over Life Time 7224 float finalAlpha = ${e}(1. - v_LifeLeft); 7225 vec4 textureColor = texture2D(uTexture, vUv).rgba; 7226 finalColor = textureColor.rgb * color.rgb; 7227 finalAlpha = color.a * textureColor.a * finalAlpha; 7228 7229 gl_FragColor = vec4(finalColor, finalAlpha); 7230 7231`)({easeOpacity:this.easeOpacity})),this.vertexShader=e.getCode("vertex"),this.fragmentShader=e.getCode("fragment"),this.defines=e.defines,this.uniforms={...e.uniforms,...this.uniforms},this.extensions=e.extensions,this}get nodeMaterial(){return this}get fragment(){return this.lightLayer.node}getDefines(){return this.defines}
7231nodeMaterialDispose(){this.layers.forEach(e=>e.dispose()),super.dispose()}},Og=class{constructor(e,t,i,r){this.type="SphereEmitterShape",this.targetMesh=void 0,this.size=e,this.type=i,this.textureSize=function(e){return Math.max(Math.ceil(Math.sqrt(e)),1)}(t),this.targetMesh=r?.geometry.type==="BufferGeometry"||r?.type==="Mesh"&&r&&r.geometry.hasAttribute("position")&&r.geometry.hasAttribute("normal")?r:this.getMesh(i,1);let{positions:a,dataTexture:o,dataTextureNormals:l}=this.createPositions(this.textureSize,this.targetMesh??this.getMesh(i,1));this.positionsTexture=o,this.positionsAttribute=a,this.directionsTexture=l}createPositions(e,t){let{positions:i,normals:r}=function(e,t){let i=new r7(e.geometry,e.material),r=[],a=[],o=new iD,l=new iD;null!==i.geometry.index&&(i.geometry=i.geometry.toNonIndexed());let h=new Or(i).build();for(let e=0;e<t;e++)h.sample(o,l),r.push(o.x,o.y,o.z),a.push(l.x,l.y,l.z);return{positions:new Float32Array(r),normals:new Float32Array(a)}}(t,e*e);return{dataTexture:Os(i,e),positions:i,dataTextureNormals:Os(r,e)}}getMesh(e,t){let i=null;switch(e){case"SphereEmitterShape":i=new oW(.5*t,32,32);break;case"TorusEmitterShape":i=new oH(.5*t,.3,15,40);break;case"ConeEmitterShape":i=new ob(t,t,15);break;case"BoxEmitterShape":i=new st(t,t,t);break;case"PlaneEmitterShape":(i=new sS(t,t)).rotateX(-Math.PI/2);break;default:i=new oW(t,32,32)}return new r7(i,new rB({color:0xff0000}))}applyToShader(e,t){this.size=new iD().fromArray(t.size.map(e=>"number"==typeof e?e:1)),e.uEmitterSize.value=this.size}dispose(){this.positionsTexture.dispose(),this.directionsTexture.dispose(),this.positionsAttribute=new Float32Array}};function Ov(e){let t={...e},i=g$.defaultData;t.forceFieldObjectId&&(t.colliderEntityId=t.forceFieldObjectId);let r={...i.shape,...t.shape},a={...i.renderMaterial,...t.renderMaterial};return{...i,...t,shape:r,renderMaterial:a}}var Oy=` 7232// uniform sampler2D uCurrentPosition; // Pass in the variable from GPGPU 7233// uniform sampler2D uCurrentVelocity; // Pass in the variable from GPGPU 7234// uniform sampler2D uCurrentEmissionRate; // Pass in the variable from GPGPU 7235 7236uniform sampler2D uIndex; // Texture with corresponding index 7237uniform float uLastIndexEmitted; // Last emitted index 7238uniform float uParticlesToEmit; // Number of particles to emit on that frame 7239uniform float uTime; 7240 7241void main() { 7242 vec2 vUv = gl_FragCoord.xy / resolution.xy; 7243 float particleIndex = texture(uIndex, vUv).x; 7244 float timeLeft = texture2D( uCurrentPosition, vUv ).w; 7245 float isActive = texture2D( uCurrentEmissionRate, vUv ).g; // 1. = active, 0. = not active 7246 float timeStart = texture2D( uCurrentEmissionRate, vUv ).b; 7247 7248 7249 // ********** Detect Colision to Create a flag and use it in position ********** 7250 // We are doing this here, so 7251 7252 // ********** Emit Particles ********** 7253 // X = isSpawning 0.0 or 1.0 7254 // Y = isActive 0.0 or 1.0 7255 // Check if the vertex index is between the first value and the last value 7256 // if (particleIndex >= uLastIndexEmitted && particleIndex < uLastIndexEmitted + uParticlesToEmit) { 7257 // // Emit a particle by writing 1 to the red channel of the color output 7258 // // r: 1. == emit the particle 7259 // // g: 1. == particle is now active 7260 // timeStart = uTime; 7261 // gl_FragColor = vec4(1.0, 1.0, timeStart, 1.0); 7262 // } else { 7263 // // The Particle is either already emitted or not in the range of the particles to emit 7264 // // Do not emit a particle by writing 0 to the red channel of the color output 7265 // gl_FragColor = vec4(0.0, isActive, timeStart, 1.0); 7266 // } 7267 // Determine if the particle is within the emission range 7268 float emitLowerBound = step(uLastIndexEmitted, particleIndex); 7269 float emitUpperBound = step(particleIndex, uLastIndexEmitted + uParticlesToEmit - 1.0); 7270 float emitParticle = emitLowerBound * emitUpperBound; // 1.0 if in range, 0.0 otherwise 7271 7272 // Set timeStart and color 7273 timeStart = mix(timeStart, uTime, emitParticle); 7274 gl_FragColor = vec4(emitParticle, mix(isActive, 1.0, emitParticle), timeStart, 1.0); 7275 7276 7277} 7278`,Ox=class extends rw{constructor(e,t){super(),this.type="ParticleEmitter",this.debugMode=!1,this.worldS
vendor: 5,671 bytes, line 7278
7278pace=!0,this.rootObject=null,this.gpuCompute=null,this.positionSimRT=null,this.velocitySimRT=null,this.emissionRateSimRT=null,this.emitterShape=void 0,this.isEmitting=!1,this.hasBeenReset=!1,this.emittedParticlesAmount=0,this.lastEmitTime=0,this.globalTime=0,this.targetFPS=60,this.previousRatio=1,this.lerpFactor=.4,this.particlesAmount=0,this.noiseStrength=0,this.noiseScale=0,this.isBillboardBased=!0,this.simFeaturesDefinition={USE_COLLIDER:!1,USE_ATTRACTOR:!1,USE_VORTEX:!1,USE_SPHERE_COLLIDER:!1,USE_BOX_COLLIDER:!1,USE_FORCE_LOCAL_SPACE:!1,USE_NORMALS:!1,USE_CURL_NOISE:!0,USE_SIMPLEX_NOISE:!1,USE_FBM_NOISE:!1},this.textureLoader=new lc,this.currentWorldPosition=new iD,this.systemQuaternion=new iP,this.worldGravity=new iD(0,0,0),this.directionAxis=new iD(0,0,0),this.colliderV3=new iD(0,0,0),this.colliderQuaternion=new iP(0,0,0,1),this.matrixAutoUpdate=!0,this.renderer=e,this.system=t,this.shared=t.context.shared;let i=t.data;this.material=new Om(i.renderMaterial,t.context),this.material.uniforms={uSize:{value:0},uSizeEnd:{value:0},uColor:{value:i.renderMaterial.color},uColor2:{value:i.renderMaterial.color2},uPosition:{value:new iD(0,0,0)},uEmissionData:{value:new iD(0,0,0)},uTexture:{value:this.defaultTexture},uWorldOffset:{value:new iD(0,0,0)},uWorldQuaternion:{value:new iA(0,0,0,1)},uRandScaleFactor:{value:i.randomScale??0},uRandRotationFactor:{value:i.randomRotation??0},uRotation:{value:i.renderMaterial.spriteRotation[0]??0},uRotationEnd:{value:i.renderMaterial.spriteRotation[1]??0}},this.setTexture(this.material.uniforms,i.renderMaterial.texture),this.init(i)}setTexture(e,t){let i=t.data;if("string"==typeof t){let i=new i_(this.shared.image(t).img);i.needsUpdate=!0,e.uTexture.value=i;return}if("string"!=typeof i){let t=new Image;t.onload=()=>{let i=new i_(t);i.needsUpdate=!0,e.uTexture.value=i};let r=new Blob([i],{type:"image/*"});t.src=URL.createObjectURL(r)}}updateGeometryAttributes(e,t){let i=function(e){let t=new Float32Array(e*e*2);for(let i=0;i<e;i++)for(let r=0;r<e;r++){let a=i*e+r;t[2*a+0]=i/(e-1),t[2*a+1]=r/(e-1)}return t}(t);this.emitterShape?.positionsAttribute&&e.geometry.setAttribute("ref",new nV(i,2))}applyWorldSpace(){if(!this.system.started||!this.worldSpace||!this.positionSimRT||!this.velocitySimRT)return;let e=this.system;e.getWorldQuaternion(this.systemQuaternion),this.systemQuaternion.invert(),e.getWorldPosition(this.currentWorldPosition),this.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.positionSimRT.material.uniforms.uWorldOffset.value=this.currentWorldPosition,this.systemQuaternion.invert(),this.positionSimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize()),this.velocitySimRT.material.uniforms.uWorldQuaternion.value.copy(this.systemQuaternion.normalize())}update(e,t){if(!this.gpuCompute||!this.positionSimRT||!this.velocitySimRT||!this.emissionRateSimRT||this.hasBeenReset)return;if(this.checkIfAllParticlesAreDead()&&!this.hasBeenReset)return void this.reset();this.applyWorldSpace(),this.globalTime=e,this.positionSimRT.material.uniforms.uTime.value=e,this.emissionRateSimRT.material.uniforms.uTime.value=e;let i=this.targetFPS/(1e3/t),r=this.previousRatio+(i-this.previousRatio)*this.lerpFactor;this.positionSimRT.material.uniforms.uFPSRatio.value=r,this.previousRatio=r;let a=this.isEmitting?this.GoEmitSomeParticles(e,this.system.data.birthRatePerSec):0;this.emissionRateSimRT.material.uniforms.uLastIndexEmitted.value=this.emittedParticlesAmount,this.emissionRateSimRT.material.uniforms.uParticlesToEmit.value=a,this.material.uniforms.uPosition.value=this.gpuCompute.getCurrentRenderTarget(this.positionSimRT)?.texture,this.system.colliderEntities.length>0&&this.renderColliders(),this.gpuCompute.compute()}renderColliders(){if(!this.velocitySimRT)return;let e=this.system.colliderEntities[0],t=this.simFeaturesDefinition.USE_COLLIDER||this.simFeaturesDefinition.USE_ATTRACTOR||this.simFeaturesDefinition.USE_VORTEX;if(e.destroyedInAction&&t&&this.init(Ov({...this.system.data,colliderEntityId:null})),!e||e.destroyedInAction)return;e.getWorldPosition(this.colliderV3),0===this.colliderV3.y&&(this.colliderV3.y=1e-4),this.velocitySimRT.material.uniforms.uColliderPos.value.copy(this.colliderV3);let i=e.data.size;this.colliderV3.fromArray(i),this.velocitySimRT.material.uniforms.uColliderSize.value.copy(this.simFeaturesDefinition.USE_SPHERE_COLLIDER?this.colliderV3.multiplyScalar(.5):this.colliderV3),e.getWorldQuaternion(this.colliderQuaternion),this.velocitySimRT.material.uniforms.uColliderQuaternion.value.copy(this.colliderQuaternion.normalize()),this.velocitySimRT.material.uniforms.uColliderQuaternionInvert.value.copy(this.colliderQuaternion.normalize().invert())}updateState(e){this.velocitySimRT&&this.positionSimRT&&(e.renderMaterial&&this.updateMaterialState(e.renderMaterial),this.updateParticleState(e))}updateVariableState(e,t){if(!this.velocitySimRT||!this.positionSimRT)return;"size"===t[2]&&this.material.updateState({size:[e,this.material.uniforms.uSizeEnd.value]}),"sizeEnd"===t[2]&&this.material.updateState({size:[this.material.uniforms.uSize.value,e]});let i=(e,t)=>{let i=[...this.system.data.shape.size];i[e]=t,this.updateParticleState({shape:{...this.system.data.shape,size:i}})};"shape_size_0"===t[2]&&i(0,e),"shape_size_1"===t[2]&&i(1,e),"shape_size_2"===t[2]&&i(2,e),"speed"===t[2]&&(this.velocitySimRT.material.uniforms.uSpeed.value=e/10),"gravity"===t[2]&&this.worldGravity.set(0,e/100,0),"noiseStrength"===t[2]&&(this.noiseStrength=e,this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),"n
7278oiseScale"===t[2]&&(this.noiseScale=e,this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),"direction_x"===t[2]&&(this.directionAxis=this.getDirectionAxis([Number(e),this.system.data.direction[1],this.system.data.direction[2]])),"direction_y"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],Number(e),this.system.data.direction[2]])),"direction_z"===t[2]&&(this.directionAxis=this.getDirectionAxis([this.system.data.direction[0],this.system.data.direction[1],Number(e)]))}updateMaterialState(e){this.material.updateState({...e,size:e.size?[Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","size"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","sizeEnd"]))]:[0,0]}),e.texture&&(this.setTexture(this.material.uniforms,e.texture),this.material.needsUpdate=!0)}updateParticleState(e){if(!(!this.positionSimRT||!this.velocitySimRT)){if(this.shouldReInitGPUCompute(e)&&this.init(Ov(this.system.data)),void 0!==e.life&&(this.positionSimRT.material.uniforms.uMaxLifeTime.value=e.life),void 0!==e.speed&&(this.velocitySimRT.material.uniforms.uSpeed.value=Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10),void 0!==e.collisionBounce&&(this.velocitySimRT.material.uniforms.uBounce.value=e.collisionBounce),void 0!==e.noiseStrength&&(this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.velocitySimRT.material.uniforms.uNoiseStrength.value=this.noiseStrength),void 0!==e.noiseScale&&(this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"])),this.velocitySimRT.material.uniforms.uNoiseScale.value=this.noiseScale),void 0!==e.noiseSeed&&(this.velocitySimRT.material.uniforms.uNoiseSeed.value=e.noiseSeed),void 0!==e.randomMass&&(this.velocitySimRT.material.uniforms.uRandomMassFactor.value=e.randomMass),e.renderMaterial?.size!==void 0){let t=this.shared.getVariable(e.renderMaterial.size[0],[this.uuid,"particles","size"]);this.velocitySimRT.material.uniforms.particleSize.value=Number(t)}if(e.renderMaterial?.spriteRotation!==void 0&&(this.material.uniforms.uRotation.value=e.renderMaterial.spriteRotation[0],this.material.uniforms.uRotationEnd.value=e.renderMaterial.spriteRotation[1]),void 0!==e.shape){let t=e.shape.size??this.system.data.shape.size,i=[Number(this.shared.getVariable(t[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(t[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(t[2],[this.uuid,"particles","shape_size_2"]))],r={...Ov(this.system.data).shape,size:i};this.emitterShape?.applyToShader(this.positionSimRT.material.uniforms,r)}if(void 0!==e.gravity&&(this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.velocitySimRT.material.uniforms.uGravity={value:this.worldGravity}),void 0!==e.direction){let t=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(t),this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis}void 0!==e.randomRotation&&(this.material.uniforms.uRandRotationFactor.value=e.randomRotation),void 0!==e.randomScale&&(this.material.uniforms.uRandScaleFactor.value=e.randomScale)}}updateForceFieldParameters(e){this.velocitySimRT&&(void 0!==e.forceIntensity&&(this.velocitySimRT.material.uniforms.uForceIntensity.value=e.forceIntensity),void 0!==e.forceDambing&&(this.velocitySimRT.material.uniforms.uForceDamping.value=e.forceDambing))}getDirectionAxis(e){let t=[Number(e[0])*t8.DEG2RAD,Number(e[1])*t8.DEG2RAD,Number(e[2])*t8.DEG2RAD],i=new rn(t[0],t[1],t[2],"XYZ");return this.directionAxis.set(0,1,0).applyEuler(i).normalize(),this.velocitySimRT&&(this.velocitySimRT.material.uniforms.uDirectionsAxis.value=this.directionAxis),this.directionAxis}shouldReInitGPUCompute(e){let{birthRatePerSec:t,rootObjectType:i,colliderEntityId:r,shape:a,emitTimeDuration:o,emitTimeCycle:l,life:h,directionMode:c,noiseType:d}=e;return void 0!==t||void 0!==i||r||null===r||void 0!==l||void 0!==a||void 0!==h||void 0!==o||void 0!==c||void 0!==d}init(e){this.dispose(),this.particlesAmount=this.getMaxParticlesAmount({birthRatePerSecond:e.b
7278irthRatePerSec,particleMaxLifeTime:e.life,loopDuration:"infinity"===e.emitTimeCycle?0:e.emitTimeDuration}),this.particlesAmount>1e5&&(this.particlesAmount=1e5),this.emitterShape=this.createShape(e.shape,this.particlesAmount);let t=setInterval(()=>{if(this.emitterShape)if(isNaN(this.emitterShape.positionsTexture.source.data.data[0]))return void this.init(e);else clearInterval(t)},100);if(!this.emitterShape)return;let i=new Oe(this.emitterShape.textureSize,this.emitterShape.textureSize,this.renderer),r=this.updateSimulationDefinition(e),a=i.addVariable("uCurrentPosition",r+Oa,this.emitterShape.positionsTexture),o=i.addVariable("uCurrentVelocity",r+Oh,this.emitterShape.directionsTexture),l=i.addVariable("uCurrentEmissionRate",Oy,function(e){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=0,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new nF(t,e,e,1023,1015);return i.needsUpdate=!0,i}(this.emitterShape.textureSize));i.setVariableDependencies(a,[a,o,l]),i.setVariableDependencies(o,[a,o,l]),i.setVariableDependencies(l,[a,o,l]);let h=function({size:e}){let t=new Float32Array(4*e*e);for(let i=0;i<e*e;i++)t[4*i]=i,t[4*i+1]=0,t[4*i+2]=0,t[4*i+3]=0;let i=new nF(t,e,e,1023,1015);return i.needsUpdate=!0,i}({size:this.emitterShape.textureSize}),c={uOriginalPosition:{value:this.emitterShape.positionsTexture},uWorldOffset:{value:new iD(0,0,0)},uWorldQuaternion:{value:new iA(0,0,0,1)},uTime:{value:0},uFPSRatio:{value:1},uMaxLifeTime:{value:e.life},uEmitterSize:{value:new iD(Number(this.shared.getVariable(e.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.shape.size[2],[this.uuid,"particles","shape_size_2"])))},particleSize:{value:0}};a.material.uniforms=c;let d=this.getDirectionFromVariable(e.direction);this.directionAxis=this.getDirectionAxis(d),this.worldGravity.set(0,Number(this.shared.getVariable(this.system.data.gravity,[this.uuid,"particles","gravity"]))/100,0),this.noiseStrength=Number(this.shared.getVariable(e.noiseStrength,[this.uuid,"particles","noiseStrength"])),this.noiseScale=Number(this.shared.getVariable(e.noiseScale,[this.uuid,"particles","noiseScale"]));let p=e.colliderEntityId&&this.system.getColliderData(e.colliderEntityId),f={uOriginalPosition:{value:this.emitterShape.positionsTexture},uDirections:{value:this.emitterShape.directionsTexture},uDirectionsAxis:{value:this.directionAxis},uWorldQuaternion:{value:new iA(0,0,0,1)},uColliderPos:{value:new iD(0,0,0)},uColliderSize:{value:new iD(0,0,0)},uForceIntensity:{value:p?p.forceIntensity:0},uForceDamping:{value:p?p.forceDambing:0},uColliderQuaternion:{value:new iA(0,0,0,1)},uColliderQuaternionInvert:{value:new iA(0,0,0,1)},particleSize:{value:0},uGravity:{value:this.worldGravity},uNoiseStrength:{value:this.noiseStrength},uNoiseScale:{value:this.noiseScale},uNoiseSeed:{value:e.noiseSeed},uRandomMassFactor:{value:e.randomMass},uBounce:{value:e.collisionBounce},uSpeed:{value:Number(this.shared.getVariable(e.speed,[this.uuid,"particles","speed"]))/10}};o.material.uniforms=f,l.material.uniforms={uIndex:{value:h},uTime:{value:0},uLastIndexEmitted:{value:0},uParticlesToEmit:{value:0}};let m=[Number(this.shared.getVariable(e.shape.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.shape.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.shape.size[2],[this.uuid,"particles","shape_size_2"]))],g={...Ov(this.system.data).shape,size:m};this.emitterShape.applyToShader(a.material.uniforms,g),i.init(),this.gpuCompute=i,this.positionSimRT=a,this.velocitySimRT=o,this.emissionRateSimRT=l,this.rootObject=this.createPrimaryEmitter(this.emitterShape.textureSize),this.add(this.rootObject),this.material.needsUpdate=!0}getDirectionFromVariable(e){return[Number(this.shared.getVariable(e[0],[this.uuid,"particles","direction_x"])),Number(this.shared.getVariable(e[1],[this.uuid,"particles","direction_y"])),Number(this.shared.getVariable(e[2],[this.uuid,"particles","direction_z"]))]}updateSimulationDefinition(e){if(this.simFeaturesDefinition.USE_COLLIDER=!1,this.simFeaturesDefinition.USE_ATTRACTOR=!1,this.simFeaturesDefinition.USE_VORTEX=!1,this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!1,this.simFeaturesDefinition.USE_BOX_COLLIDER=!1,this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!1,this.simFeaturesDefinition.USE_NORMALS=!1,this.simFeaturesDefinition.USE_CURL_NOISE=!1,this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!1,this.simFeaturesDefinition.USE_FBM_NOISE=!1,e.colliderEntityId&&this.system.colliderEntities.length>0){let t=this.system.getColliderData(e.colliderEntityId);switch(t?.forceType){case"attractor":this.simFeaturesDefinition.USE_ATTRACTOR=!0;break;case"collider":this.simFeaturesDefinition.USE_COLLIDER=!0;break;case"vortex":this.simFeaturesDefinition.USE_VORTEX=!0}let i=t?.colliderType;"sphere"===i&&(this.simFeaturesDefinition.USE_SPHERE_COLLIDER=!0),"box"===i&&(this.simFeaturesDefinition.USE_BOX_COLLIDER=!0),t?.forceRange==="helper"&&(this.simFeaturesDefinition.USE_FORCE_LOCAL_SPACE=!0)}"normals"===e.directionMode&&(this.simFeaturesDefinition.USE_NORMALS=!0),"curl"===e.noiseType&&(this.simFeaturesDefinition.USE_CURL_NOISE=!0),"simplex"===e.n
7278oiseType&&(this.simFeaturesDefinition.USE_SIMPLEX_NOISE=!0),"fbm"===e.noiseType&&(this.simFeaturesDefinition.USE_FBM_NOISE=!0);let t="";for(let[e,i]of Object.entries(this.simFeaturesDefinition))i&&(t+=`#define ${e} 7279`);return t}createShape(e,t){this.emitterShape&&this.emitterShape.dispose();let i=new iD(Number(this.shared.getVariable(e.size[0],[this.uuid,"particles","shape_size_0"])),Number(this.shared.getVariable(e.size[1],[this.uuid,"particles","shape_size_1"])),Number(this.shared.getVariable(e.size[2],[this.uuid,"particles","shape_size_2"])));if("MeshEmitterShape"!==e.type)return new Og(i,t,e.type);{let r=null;return this.system.context.scene.traverseEntity(t=>{t.uuid===e.fromMeshId&&(r=t)}),r?new Og(i,t,e.type,r):new Og(i,t,"SphereEmitterShape")}}createPrimaryEmitter(e){let t;return(t=new nX(new sS(1,1,1),this.material,e*e)).renderOrder=1,this.updateGeometryAttributes(t,e),this.material.needsUpdate=!0,t.onBeforeRender=()=>{this.applyWorldSpace()},t}getMaxParticlesAmount({birthRatePerSecond:e,particleMaxLifeTime:t,loopDuration:i=0}){return Math.ceil(e*(t+i))}dispose(){this.gpuCompute&&(this.rootObject?.parent?.remove(this.rootObject),this.gpuCompute.dispose(),this.material.nodeMaterialDispose(),this.emitterShape?.dispose())}GoEmitSomeParticles(e,t){let i=e-this.lastEmitTime,r=1/t;if(i>=r){let t=Math.max(1,Math.floor(i/r));return this.lastEmitTime=e,this.emittedParticlesAmount+t>this.particlesAmount&&(this.emittedParticlesAmount=0),this.emittedParticlesAmount+=t,t}return 0}checkIfAllParticlesAreDead(){return this.lastEmitTime+this.system.data.life+1<this.globalTime}reset(){this.hasBeenReset=!0,this.lastEmitTime=0,this.emittedParticlesAmount=0,this.gpuCompute&&this.init(Ov(this.system.data))}startEmitting(e){this.isEmitting=!0,this.hasBeenReset=!1,this.lastEmitTime=e}stopEmitting(){this.isEmitting=!1}},Ob=class extends _H{constructor(e,t,i){super(e,t),this.type="ParticleSystem",this.geometry=new rQ,this.actualTime=0,this.currentLoopTime=0,this.started=!1,this.stopped=!1,this.timeoutId=void 0,this.isFrozen=!1,this.isIdle=!0,this.emitter=null,this.colliderEntities=[],this.renderer=null,this.isPreWarm=!1,this._hasOnAfterRenderBeenCalled=!1,this.onAfterRender=e=>{this._hasOnAfterRenderBeenCalled||(this._hasOnAfterRenderBeenCalled=!0,this.init(e))},this.context=i,this.data={...t,...Ov(t)},this.geometry.setAttribute("position",new rV([],3)),this.material=new rB({colorWrite:!1}),this.frustumCulled=!1}init(e){this.renderer=e,this.emitter=new Ox(e,this),this.add(this.emitter),this.updateParticleState(this.data)}update(e){if(!this.isReady||!this.started||this.isFrozen||this.isIdle)return;this.actualTime+=e,this.stopped||(this.currentLoopTime+=e);let t="one_time"===this.data.emitTimeCycle;if(("loop"===this.data.emitTimeCycle||t)&&this.currentLoopTime>1e3*this.data.emitTimeDuration&&(this.stopped||(this.stop(),t||this.start(1e3*this.data.emitTimeDelay))),this.emitter&&this.started){let t=this.actualTime/1e3;this.emitter.update(t,e)}this.scale.set(1,1,1),this.updateMatrix()}isReady(){return!!this.emitter}hasCollider(e){return this.colliderEntities.some(t=>t.identity===e)}getColliderData(e){let t=this.colliderEntities.find(t=>t.identity===e);return t?t.data:null}updateByPatchedOp(e,t,i){super.updateByPatchedOp(e,t,i),fv(e.path,["renderMaterial"])&&this.updateParticleState({renderMaterial:{...this.data.renderMaterial,...f_.drop(e,1).props}}),fv(e.path,["shape"])&&this.updateParticleState({shape:{...this.data.shape,...f_.drop(e,1).props}})}updateState(e,t){super.updateState(e,t),this.updateParticleState(e)}updateParticleState(e){if(this.emitter){if(void 0!==e.colliderEntityId&&null!==e.colliderEntityId){let t=this.context.scene.find(e.colliderEntityId);this.colliderEntities=t?[t]:[]}null===e.colliderEntityId&&(this.colliderEntities=[]),this.emitter.updateState(e),e.emitTimeCycle&&this.started&&this.start()}}updateFromColliderEntity(e){this.emitter&&(this.emitter.updateForceFieldParameters(e),this.stop(),this.start())}start(e=0){if(this.currentLoopTime=0,e){this.timeoutId=window.setTimeout(()=>{this.start(0)},e);return}this.started=!0,this.stopped=!1,this.isFrozen=!1,this.emitter?.startEmitting(this.actualTime/1e3)}froze(){this.isFrozen=!0}unFroze(){this.isFrozen=!1}stop(){this.stopped=!0,this.currentLoopTime=0,this.emitter?.stopEmitting(),clearTimeout(this.timeoutId)}reset(){this.started=!1,this.stopped=!1,this.emitter?.reset()}wakeUp(){this.isIdle=!1}sleep(){this.isIdle=!0,this.reset()}},Ow=function(){try{let e=window.location.href;if(e.includes("reducesubdiv=")){let t=e.indexOf("reducesubdiv=")+13;return parseInt(e.slice(t,t+1))}}catch{}}();function OS(e,t,i){return"Mesh"===t.type?(void 0!==Ow&&t?.geometry&&"subdivisions"in t.geometry&&(t.geometry.subdivisions??0)>Ow&&Object.assign(t.geometry,{subdivisions:Ow}),"TextGeometry"===t.geometry.type?new Ed(e,t,i):"InputGeometry"===t.geometry.type?new D4(e,t,i):"SubdivGeometry"===t.geometry.type?new CZ(e,t,i):"PathGeometry"===t.geometry.type?new D3(e,t,i):"VectorGeometry"===t.geometry.type?new D2(e,t,i):"BooleanGeometry"===t.geometry.type?new Eq(e,t,i):"ShapeBlendGeometry"===t.geometry.type?new OP(e,t,i):"UIGeometry"===t.geometry.type?new D7(e,t,i):new CH(e,t,i)):"Empty"===t.type?new E2(e,t):"Particle"===t.type?new Ob(e,t,i):"ParticleCollider"===t.type?new E3(e,t,i):"Splat"===t.type?new E2(e,t):"Bone"===t.type?new D9(e,t):"Page"===t.type?new D0(e,t,i):"PointLight"===t.type?new D1(e,t,i):"SpotLight"===t.type?new P8(e,t,i):"DirectionalLight"===t.type?new P3(e,t,i):"Component"===t.type||"Instance"===t.type?new D5(e,t,i):gX.is(t.type)?new Ej(e,t):new E2(e,t)}bk.createEntity=OS,bk.changeEntityProptotype=function(e,t,i){let r=OS(e.identity,t,i),a=e.children,o=e.attachedPaths,l=e.parent,h=e.component,c=e.instances,d=e.overrideData,p=e.uuid,f=e.stateSelection;
7279for(let t of(e.dispose(),Object.keys(e)))delete e[t];for(let t of(Object.setPrototypeOf(e,Object.getPrototypeOf(r)),Object.keys(r)))e[t]=r[t];e.children=[...e.children,...a],e.attachedPaths=o,e.parent=l,e.component=h,e.instances=c,e.uuid=p,e.overrideData=d,e.updateState(e.data,i),f&&e.changeSelectedState(f,i),e.resetBBoxNeedsUpdate()},bk.Cloner=EA;var O_=new rQ;O_.setAttribute("position",new rN(new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),3));var OA=class extends oX{constructor(e){super({...e,depthTest:!1,depthWrite:!1,glslVersion:tq,vertexShader:` 7280 precision highp float; 7281 in vec3 position; 7282 void main() { 7283 gl_Position = vec4(position, 1); 7284 } 7285 `})}customProgramCacheKey(){return""}},OM=new sl,OC=class{constructor(){this.pyramidPassScene=new nI,this.pyramidPassMaterial=new OA({name:"PyramidPass"}),this.pyramidPassUniforms={inputTexture:{value:void 0},inputWidth:{value:0},inputHeight:{value:0},inputShiftX:{value:0},outputShiftX:{value:0}},this.pyramidTopLevelReadPixelBuffer=new Float32Array(4);let e=` 7286 precision highp float; 7287 precision highp sampler2D; 7288 layout(location = 0) out vec4 pc_FragColor; 7289 uniform sampler2D inputTexture; 7290 uniform float inputWidth; 7291 uniform float inputHeight; 7292 uniform float inputShiftX; 7293 uniform float outputShiftX; 7294 const vec2 half_unit_coord = vec2(0.5); 7295 const vec4 one = vec4(1.0); 7296 void main() { 7297 vec2 inputSize = vec2(inputWidth, inputHeight); 7298 vec2 input_pixel_uv = 1. / inputSize; 7299 vec2 coord = gl_FragCoord.xy - half_unit_coord; 7300 coord.x -= outputShiftX; 7301 coord = coord * 2. + half_unit_coord; 7302 coord.x += inputShiftX; 7303 7304 // sample bottom left corner 7305 vec2 input_uv = coord / inputSize; 7306 float bl = texture(inputTexture, input_uv).r; 7307 7308 // sample bottom right corner 7309 input_uv.x += input_pixel_uv.x; 7310 float br = texture(inputTexture, input_uv).r; 7311 7312 // sample top right corner 7313 input_uv.y += input_pixel_uv.y; 7314 float tr = texture(inputTexture, input_uv).r; 7315 7316 // sample top left corner 7317 input_uv.x -= input_pixel_uv.x; 7318 float tl = texture(inputTexture, input_uv).r; 7319 7320 pc_FragColor.a = bl; 7321 pc_FragColor.b = pc_FragColor.a + br; 7322 pc_FragColor.g = pc_FragColor.b + tr; 7323 pc_FragColor.r = pc_FragColor.g + tl; 7324 } 7325 `;this.pyramidPassMaterial.fragmentShader=e,this.pyramidPassMaterial.uniforms=this.pyramidPassUniforms,this.pyramidPassMaterial.depthTest=!1,this.pyramidPassMaterial.depthWrite=!1;let t=new r7(O_,this.pyramidPassMaterial);t.frustumCulled=!1,this.pyramidPassScene.add(t)}renderPyramid(e,t,i,r,a){new lY().min.setScalar(0);let o=t.length-1,l=new iA;i.getViewport(l),this.pyramidPassUniforms.inputShiftX.value=0,this.pyramidPassUniforms.outputShiftX.value=0;let h=o-1;for(let o=h;o>=0;o--){let l=o%2==h%2?a[0]:a[1],c=o===h?r:o%2==h%2?a[1]:a[0];this.pyramidPassUniforms.inputTexture.value=Array.isArray(c.texture)?c.texture[1]:c.texture,this.pyramidPassUniforms.inputWidth.value="width"in c?c.width:1,this.pyramidPassUniforms.inputHeight.value="height"in c?c.height:1,i.setRenderTarget(l);let d=t[o],p=i.getPixelRatio();i.setViewport(this.pyramidPassUniforms.outputShiftX.value/p,0,d/p,d/p),2===o&&e%2!=0&&i.setViewport(this.pyramidPassUniforms.outputShiftX.value/p,0,3/p,3/p),i.render(this.pyramidPassScene,OM);let f=this.pyramidPassUniforms.inputShiftX.value;this.pyramidPassUniforms.inputShiftX.value=this.pyramidPassUniforms.outputShiftX.value,this.pyramidPassUniforms.outputShiftX.value=f,o<h&&(this.pyramidPassUniforms.outputShiftX.value+=t[o+1])}i.setViewport(l);let c=+(t.length%2!=0);return i.readRenderTargetPixelsAsync(a[c],a[c].width-1,0,1,1,this.pyramidTopLevelReadPixelBuffer).then(()=>this.pyramidTopLevelReadPixelBuffer[0])}},OE={shapeInput:()=>` 7326 const float posRowCoord = 0.1; // vec4: px py pz opType 7327 const float quatRowCoord = 0.3; // vec4: qx qy qz qw 7328 const float param1RowCoord = 0.5;// vec4: type param1 param2 param3 7329 const float param2RowCoord = 0.7;// vec4: blendRange roundness scale param4 7330 const float colorRowCoord = 0.9; // vec4: r g b a 7331 uniform sampler2D shapesDataTexture; 7332 vec4 shapePos(float iin) { 7333 vec4 r = texture(shapesDataTexture, vec2(iin, posRowCoord)); 7334 return r; 7335 } 7336 vec4 shapeQuat(float iin) { 7337 vec4 r = texture(shapesDataTexture, vec2(iin, quatRowCoord)); 7338 return r; 7339 } 7340 vec4 shapeParams1(float iin) { 7341 vec4 r = texture(shapesDataTexture, vec2(iin, param1RowCoord)); 7342 return r; 7343 } 7344 vec4 shapeParams2(float iin) { 7345 vec4 r = texture(shapesDataTexture, vec2(iin, param2RowCoord)); 7346 return r; 7347 } 7348 vec4 shapeColor(float iin) {
7349 vec4 r = texture(shapesDataTexture, vec2(iin, colorRowCoord)); 7350 return r; 7351 } 7352 `,getxyzi:` 7353 // this code must complement lookup 7354 float xi = mod(gl_FragCoord.x - 0.5, VOXEL_RESOLUTION); 7355 float yi = mod(gl_FragCoord.y - 0.5, VOXEL_RESOLUTION); 7356 float zi = floor((gl_FragCoord.x - 0.5) * INV_VOXEL_RESOLUTION) + floor((gl_FragCoord.y - 0.5) * INV_VOXEL_RESOLUTION) * Z_LAYERS_PER_ROW; 7357 `,lookup:` 7358 uniform sampler2D potentialPassTexture; 7359 uniform sampler2D voxelPassTexture; // includes normal (in xyz) and key (in w) 7360 7361 // box or marching cube lookup value in value texture, integer box coord inputs 7362 // this code must complement codebits.getxyzi 7363 vec4 look(float xi, float yi, float zi, sampler2D rt) {// range 0 .. numv etc 7364 vec2 uv = vec2( 7365 mod(zi, Z_LAYERS_PER_ROW) + (xi + 0.5) / VOXEL_RESOLUTION, 7366 floor(zi / Z_LAYERS_PER_ROW) + (yi + 0.5) / VOXEL_RESOLUTION 7367 ); 7368 uv /= Z_LAYERS_PER_ROW; 7369 return texture(rt, uv); 7370 } 7371 `,getpart:` 7372 float getpart(inout float a, float b) { 7373 float t = floor(a/b); 7374 float r = a - t*b; 7375 a = t; 7376 return r; 7377 } 7378 `,triTable:new Float32Array([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,1,1,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,10,2,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,9,9,2,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,2,8,10,2,8,9,10,-1,-1,-1,-1,-1,-1,-1,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,0,0,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,11,3,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,1,11,9,1,11,8,9,-1,-1,-1,-1,-1,-1,-1,1,10,3,3,10,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,10,0,10,8,0,10,11,8,-1,-1,-1,-1,-1,-1,-1,0,9,3,9,11,3,9,10,11,-1,-1,-1,-1,-1,-1,-1,10,8,9,11,8,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,4,4,3,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,7,4,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,4,1,7,4,1,3,7,-1,-1,-1,-1,-1,-1,-1,10,2,1,7,4,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,4,3,4,0,3,10,2,1,-1,-1,-1,-1,-1,-1,-1,10,2,9,2,0,9,7,4,8,-1,-1,-1,-1,-1,-1,-1,9,10,2,7,9,2,3,7,2,4,9,7,-1,-1,-1,-1,7,4,8,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,4,11,4,2,11,4,0,2,-1,-1,-1,-1,-1,-1,-1,1,0,9,7,4,8,11,3,2,-1,-1,-1,-1,-1,-1,-1,11,7,4,11,4,9,2,11,9,1,2,9,-1,-1,-1,-1,1,10,3,10,11,3,4,8,7,-1,-1,-1,-1,-1,-1,-1,10,11,1,11,4,1,4,0,1,4,11,7,-1,-1,-1,-1,8,7,4,11,0,9,10,11,9,3,0,11,-1,-1,-1,-1,11,7,4,9,11,4,10,11,9,-1,-1,-1,-1,-1,-1,-1,4,5,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,9,3,8,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,0,0,5,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,5,8,5,3,8,5,1,3,-1,-1,-1,-1,-1,-1,-1,10,2,1,4,5,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,3,10,2,1,5,9,4,-1,-1,-1,-1,-1,-1,-1,10,2,5,2,4,5,2,0,4,-1,-1,-1,-1,-1,-1,-1,5,10,2,5,2,3,4,5,3,8,4,3,-1,-1,-1,-1,4,5,9,11,3,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,11,0,11,8,0,5,9,4,-1,-1,-1,-1,-1,-1,-1,4,5,0,5,1,0,11,3,2,-1,-1,-1,-1,-1,-1,-1,5,1,2,8,5,2,11,8,2,5,8,4,-1,-1,-1,-1,11,3,10,3,1,10,4,5,9,-1,-1,-1,-1,-1,-1,-1,5,9,4,1,8,0,1,10,8,10,11,8,-1,-1,-1,-1,0,4,5,11,0,5,10,11,5,3,0,11,-1,-1,-1,-1,8,4,5,10,8,5,11,8,10,-1,-1,-1,-1,-1,-1,-1,8,7,9,9,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,9,3,5,9,3,7,5,-1,-1,-1,-1,-1,-1,-1,8,7,0,7,1,0,7,5,1,-1,-1,-1,-1,-1,-1,-1,3,5,1,7,5,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,7,9,7,5,9,2,1,10,-1,-1,-1,-1,-1,-1,-1,2,1,10,0,5,9,0,3,5,3,7,5,-1,-1,-1,-1,2,0,8,5,2,8,7,5,8,2,5,10,-1,-1,-1,-1,5,10,2,3,5,2,7,5,3,-1,-1,-1,-1,-1,-1,-1,5,9,7,9,8,7,2,11,3,-1,-1,-1,-1,-1,-1,-1,7,5,9,2,7,9,0,2,9,11,7,2,-1,-1,-1,-1,11,3,2,8,1,0,8,7,1,7,5,1,-1,-1,-1,-1,1,2,11,7,1,11,5,1,7,-1,-1,-1,-1,-1,-1,-1,8,5,9,7,5,8,3,1,10,11,3,10,-1,-1,-1,-1,0,7,5,9,0,5,0,11,7,10,0,1,0,10,11,-1,0,10,11,3,0,11,0,5,10,7,0,8,0,7,5,-1,5,10,11,5,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,6,10,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,0,9,6,10,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,1,8,9,1,6,10,5,-1,-1,-1,-1,-1,-1,-1,5,6,1,1,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,6,1,6,2,1,8,0,3,-1,-1,-1,-1,-1,-1,-1,5,6,9,6,0,9,6,2,0,-1,-1,-1,-1,-1,-1,-1,8,9,5,2,8,5,6,2,5,8,2,3,-1,-1,-1,-1,11,3,2,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,11,0,2,11,5,6,10,-1,-1,-1,-1,-1,-1,-1,9,1,0,11,3,2,6,10,5,-1,-1,-1,-1,-1,-1,-1,6,10,5,2,9,1,2,11,9,11,8,9,-1,-1,-1,-1,11,3,6,3,5,6,3,1,5,-1,-1,-1,-1,-1,-1,-1,11,8,0,5,11,0,1,5,0,6,11,5,-1,-1,-1,-1,6,11,3,6,3,0,5,6,0,9,5,0,-1,-1,-1,-1,9,5,6,11,9,6,8,9,11,-1,-1,-1,-1,-1,-1,-1,6,10,5,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,4,3,7,4,10,5,6,-1,-1,-1,-1,-1,-1,-1,0,9,1,6,10,5,7,4,8,-1,-1,-1,-1,-1,-1,-1,5,6,10,7,9,1,3,7,1,4,9,7,-1,-1,-1,-1,2,1,6,1,5,6,8,7,4,-1,-1,-1,-1,-1,-1,-1,5,2,1,6,2,5,4,0,3,7,4,3,-1,-1,-1,-1,7,4,8,5,0,9,5,6,0,6,2,0,-1,-1,-1,-1,9,3,7,4,9,7,9,2,3,6,9,5,9,6,2,-1,2,11,3,4,8,7,5,6,10,-1,-1,-1,-1,-1,-1,-1,6,10,5,2,7,4,0,2,4,11,7,2,-1,-1,-1,-1,9,1,0,8,7,4,11,3,2,6,10,5,-1,-1,-1,-1,1,2,9,2,11,9,11,4,9,4,11,7,6,10,5,-1,7,4,8,5,11,3,1,5,3,6,11,5,-1,-1,-1,-1,11,1,5,6,11,5,11,0,1,4,11,7,11,4,0,-1,9,5,0,5,6,0,6,3,0,3,6,11,7,4,8,-1,9,5,6,11,9,6,9,7,4,9,11,7,-1,-1,-1,-1,9,4,10,10,4,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,10,4,10,9,4,3,8,0,-1,-1,-1,-1,-1,-1,-1,1,0,10,0,6,10,0,4,6,-1,-1,-1,-1,-1,-1,-1,1,3,8,6,1,8,4,6,8,10,1,6,-1,-1,-1,-1,9,4,1,4,2,1,4,6,2,-1,-1,-1,-1,-1,-1,-1,8,0,3,9,2,1,9,4,2,4,6,2,-1,-1,-1,-1,4,2,0,6,2,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,4,2,8,6,2,4,-1,-1,-1,-1,-1,-1,-1,9,4,10,4,6,10,3,2,11,-1,-1,-1,-1,-1,-1,-1,2,8,0,11,8,2,10,9,4,6,10,4,-1,-1,-1,-1,2,11,3,6,1,0,4,6,0,10,1,6,-1,-1,-1,-1,1,4,6,10,1,6,1,8,4,11,1,2,1,11,8,-1,4,6,9,6,3,9,3,1,9,3,6,11,-1,-1,-1,-1,1,11,8,0,1,8,1,6,11,4,1,9,1,4,6,-1,6,11,3,0,6,3,4,6,0,-1,-1,-1,-1,-1,-1,-1,8,4,6,8,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,10,7,10,8,7,10,9,8,-1,-1,-1,-1,-1,-1,-1,3,7,0,7,10,0,10,9,0,10,7,6,-1,-1,-1,-1,7,6,10,7,10,1,8,7,1,0,8,1,-1,-1,-1,-1,7,6,10,1,7,10,3,7,1,-1,-1,-1,-1,-1,-1,-1,6,2,1,8,6,1,9,8,1,7,6,8,-1,-1,-1,-1,9,6,2,1,9,2,9,7,6,3,9,0,9,3,7,-1,0,8,7,6,0,7,2,0,6,-1,-1,-1,-1,-1,-1,-1,2,3,7,2,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,3,2,8,6,10,9,8,10,7,6,8,-1,-1,-1,-1,7,0,2,11,7,2,7,9,0,10,7,6,7,10,9,-1,0,8,1,8,7,1,7,10,1,10,7,6,11,3,2,-1,1,2,11,7,1,11,1,6,10,1,7,
vendor: 7,748 bytes, line 7378
73786,-1,-1,-1,-1,6,9,8,7,6,8,6,1,9,3,6,11,6,3,1,-1,1,9,0,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,7,6,0,7,0,11,3,0,6,11,-1,-1,-1,-1,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,3,6,7,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,0,6,7,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,1,8,1,3,8,6,7,11,-1,-1,-1,-1,-1,-1,-1,2,1,10,7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,2,1,8,0,3,7,11,6,-1,-1,-1,-1,-1,-1,-1,0,9,2,9,10,2,7,11,6,-1,-1,-1,-1,-1,-1,-1,7,11,6,3,10,2,3,8,10,8,9,10,-1,-1,-1,-1,3,2,7,7,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,0,7,0,6,7,0,2,6,-1,-1,-1,-1,-1,-1,-1,6,7,2,7,3,2,9,1,0,-1,-1,-1,-1,-1,-1,-1,2,6,1,6,8,1,8,9,1,6,7,8,-1,-1,-1,-1,6,7,10,7,1,10,7,3,1,-1,-1,-1,-1,-1,-1,-1,6,7,10,10,7,1,7,8,1,8,0,1,-1,-1,-1,-1,7,3,0,10,7,0,9,10,0,7,10,6,-1,-1,-1,-1,10,6,7,8,10,7,9,10,8,-1,-1,-1,-1,-1,-1,-1,4,8,6,6,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,6,3,6,0,3,6,4,0,-1,-1,-1,-1,-1,-1,-1,11,6,8,6,4,8,1,0,9,-1,-1,-1,-1,-1,-1,-1,6,4,9,3,6,9,1,3,9,6,3,11,-1,-1,-1,-1,4,8,6,8,11,6,1,10,2,-1,-1,-1,-1,-1,-1,-1,10,2,1,11,0,3,11,6,0,6,4,0,-1,-1,-1,-1,8,11,4,11,6,4,9,2,0,9,10,2,-1,-1,-1,-1,3,9,10,2,3,10,3,4,9,6,3,11,3,6,4,-1,3,2,8,2,4,8,2,6,4,-1,-1,-1,-1,-1,-1,-1,2,4,0,2,6,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,4,3,2,6,4,2,8,3,4,-1,-1,-1,-1,4,9,1,2,4,1,6,4,2,-1,-1,-1,-1,-1,-1,-1,3,1,8,1,6,8,6,4,8,1,10,6,-1,-1,-1,-1,0,1,10,6,0,10,4,0,6,-1,-1,-1,-1,-1,-1,-1,3,6,4,8,3,4,3,10,6,9,3,0,3,9,10,-1,4,9,10,4,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,9,4,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,8,0,5,9,4,6,7,11,-1,-1,-1,-1,-1,-1,-1,1,0,5,0,4,5,11,6,7,-1,-1,-1,-1,-1,-1,-1,6,7,11,4,3,8,4,5,3,5,1,3,-1,-1,-1,-1,4,5,9,2,1,10,11,6,7,-1,-1,-1,-1,-1,-1,-1,7,11,6,10,2,1,3,8,0,5,9,4,-1,-1,-1,-1,11,6,7,10,4,5,10,2,4,2,0,4,-1,-1,-1,-1,8,4,3,4,5,3,5,2,3,2,5,10,6,7,11,-1,3,2,7,2,6,7,9,4,5,-1,-1,-1,-1,-1,-1,-1,4,5,9,6,8,0,2,6,0,7,8,6,-1,-1,-1,-1,2,6,3,6,7,3,0,5,1,0,4,5,-1,-1,-1,-1,8,2,6,7,8,6,8,1,2,5,8,4,8,5,1,-1,4,5,9,6,1,10,6,7,1,7,3,1,-1,-1,-1,-1,10,6,1,6,7,1,7,0,1,0,7,8,4,5,9,-1,10,0,4,5,10,4,10,3,0,7,10,6,10,7,3,-1,10,6,7,8,10,7,10,4,5,10,8,4,-1,-1,-1,-1,5,9,6,9,11,6,9,8,11,-1,-1,-1,-1,-1,-1,-1,11,6,3,3,6,0,6,5,0,5,9,0,-1,-1,-1,-1,8,11,0,11,5,0,5,1,0,11,6,5,-1,-1,-1,-1,3,11,6,5,3,6,1,3,5,-1,-1,-1,-1,-1,-1,-1,10,2,1,11,5,9,8,11,9,6,5,11,-1,-1,-1,-1,3,11,0,11,6,0,6,9,0,9,6,5,10,2,1,-1,5,8,11,6,5,11,5,0,8,2,5,10,5,2,0,-1,3,11,6,5,3,6,3,10,2,3,5,10,-1,-1,-1,-1,9,8,5,8,2,5,2,6,5,2,8,3,-1,-1,-1,-1,6,5,9,0,6,9,2,6,0,-1,-1,-1,-1,-1,-1,-1,8,5,1,0,8,1,8,6,5,2,8,3,8,2,6,-1,6,5,1,6,1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,3,1,10,6,1,6,8,3,9,6,5,6,9,8,-1,0,1,10,6,0,10,0,5,9,0,6,5,-1,-1,-1,-1,8,3,0,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,5,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,11,11,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,11,5,7,11,0,3,8,-1,-1,-1,-1,-1,-1,-1,7,11,5,11,10,5,0,9,1,-1,-1,-1,-1,-1,-1,-1,5,7,10,7,11,10,1,8,9,1,3,8,-1,-1,-1,-1,2,1,11,1,7,11,1,5,7,-1,-1,-1,-1,-1,-1,-1,3,8,0,7,2,1,5,7,1,11,2,7,-1,-1,-1,-1,5,7,9,7,2,9,2,0,9,7,11,2,-1,-1,-1,-1,2,5,7,11,2,7,2,9,5,8,2,3,2,8,9,-1,10,5,2,5,3,2,5,7,3,-1,-1,-1,-1,-1,-1,-1,0,2,8,2,5,8,5,7,8,5,2,10,-1,-1,-1,-1,1,0,9,3,10,5,7,3,5,2,10,3,-1,-1,-1,-1,2,8,9,1,2,9,2,7,8,5,2,10,2,5,7,-1,5,3,1,5,7,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,0,1,7,0,5,7,1,-1,-1,-1,-1,-1,-1,-1,3,0,9,5,3,9,7,3,5,-1,-1,-1,-1,-1,-1,-1,7,8,9,7,9,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,8,5,8,10,5,8,11,10,-1,-1,-1,-1,-1,-1,-1,4,0,5,0,11,5,11,10,5,0,3,11,-1,-1,-1,-1,9,1,0,10,4,8,11,10,8,5,4,10,-1,-1,-1,-1,4,11,10,5,4,10,4,3,11,1,4,9,4,1,3,-1,1,5,2,5,8,2,8,11,2,8,5,4,-1,-1,-1,-1,11,4,0,3,11,0,11,5,4,1,11,2,11,1,5,-1,5,2,0,9,5,0,5,11,2,8,5,4,5,8,11,-1,5,4,9,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,2,2,5,3,5,4,3,4,8,3,-1,-1,-1,-1,2,10,5,4,2,5,0,2,4,-1,-1,-1,-1,-1,-1,-1,2,10,3,10,5,3,5,8,3,8,5,4,9,1,0,-1,2,10,5,4,2,5,2,9,1,2,4,9,-1,-1,-1,-1,5,4,8,3,5,8,1,5,3,-1,-1,-1,-1,-1,-1,-1,5,4,0,5,0,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,4,8,3,5,8,5,0,9,5,3,0,-1,-1,-1,-1,5,4,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,11,4,11,9,4,11,10,9,-1,-1,-1,-1,-1,-1,-1,3,8,0,7,9,4,7,11,9,11,10,9,-1,-1,-1,-1,11,10,1,4,11,1,0,4,1,11,4,7,-1,-1,-1,-1,4,1,3,8,4,3,4,10,1,11,4,7,4,11,10,-1,7,11,4,4,11,9,11,2,9,2,1,9,-1,-1,-1,-1,4,7,9,7,11,9,11,1,9,1,11,2,3,8,0,-1,4,7,11,2,4,11,0,4,2,-1,-1,-1,-1,-1,-1,-1,4,7,11,2,4,11,4,3,8,4,2,3,-1,-1,-1,-1,10,9,2,9,7,2,7,3,2,9,4,7,-1,-1,-1,-1,7,10,9,4,7,9,7,2,10,0,7,8,7,0,2,-1,10,7,3,2,10,3,10,4,7,0,10,1,10,0,4,-1,2,10,1,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,4,7,1,4,3,1,7,-1,-1,-1,-1,-1,-1,-1,1,9,4,7,1,4,1,8,0,1,7,8,-1,-1,-1,-1,3,0,4,3,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,10,9,8,11,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,0,3,11,9,3,10,9,11,-1,-1,-1,-1,-1,-1,-1,10,1,0,8,10,0,11,10,8,-1,-1,-1,-1,-1,-1,-1,10,1,3,10,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,2,1,9,11,1,8,11,9,-1,-1,-1,-1,-1,-1,-1,9,0,3,11,9,3,9,2,1,9,11,2,-1,-1,-1,-1,11,2,0,11,0,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,2,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,10,8,2,9,8,10,-1,-1,-1,-1,-1,-1,-1,2,10,9,2,9,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,10,8,2,8,1,0,8,10,1,-1,-1,-1,-1,2,10,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,1,8,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]),numTrisTable:new Float32Array([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,2,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,2,3,4,4,3,3,4,4,3,4,5,5,2,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,4,2,3,3,4,3,4,2,3,3,4,4,5,4,5,3,2,3,4,4,3,4,5,3,2,4,5,5,4,5,2,4,1,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,3,2,3,3,4,3,4,4,5,3,2,4,3,4,3,5,2,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,4,3,4,4,3,4,5,5,4,4,3,5,2,5,4,2,1,2,3,3,4,3,4,4,5,3,4,4,5,2,3,3,2,3,4,4,5,4,5,5,2,4,3,5,4,3,2,4,1,3,4,4,5,4,5,3,4,4,5,5,2,3,4,2,1,2,3,3,2,3,4,2,1,3,2,4,1,2,1,1,0])},OT=class extends CH{constructor(e,t,i){super(e,t,i),this.data=t,this.needsRebuild=!0,this.customDepthMaterialNeedsUpdate=!1,this._npart=-1,this.spatialn=1,this.drawRangeNeedsForceUpdate=!0,this._resolutionLevel=-1,this.resolution=64,this.spatialDivisions=25,this.zLayersPerRow=8,this.basePyramidSize=512,this.pyramidTexture1Width=341,this.pyramidTexture1Height=256,this.pyramidTexture2Width=170,this.pyramidTexture2Height=128,this.numLevels=9,this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512],this.bboxSize=0,this.bboxOffset=0,this.shapesDataTexture={value:void 0},this.spatialscene=new nI,this.potentialPassScene=new nI,this.voxelPassScene=new nI,this._spatialPassRenderTargets=[],this._potentialPassRenderTargets=[],this._voxelPassRenderTargets=[],this._pyramidRenderTargets=[],this.geometry=new rQ,this.geometry.drawRange.count=0,this.spatialPassUniforms={span:{value:-1},shapesDataTexture:this.shapesDataTexture,npart:{value:this.npart},spatialn:{value:this.spatialn}},this.spatialMesh=new r7(O_,this.spatialPassMaterial()),this.spatialMesh.frustumCulled=!1,this.spatialscene.add(this.spatialMesh);let r=new nF(OE.triTable,16,256,1028,1015);r.needsUpdate=!0;let a=new nF(OE.numTrisTable,256,1,1028,1015);a.needsUpdate=!0,this.voxelPassUniforms={potentialPassTexture:{value:void 0},numTrisTable:{value:a}},this.voxelMesh=new r7(O_,this.voxelPassMaterial()),this.voxelMesh.frustumCulled=!1,this.voxelPassScene.add(this.voxelMesh),this.potentialPassUniforms={shapesDataTexture:this.shapesDataTexture,spatialPassTexture:{value:void 0},npart:{value:this.npart},spatialn:{value:this.spatialn}},this.potentialMesh=new r7(O_,this.potentialPassMaterial()),this.potentialMesh.frustumCulled=!1,this.potentialPassScene.add(this.potentialMesh),this.marchPassUniforms={triTable:{value:r},potentialPassTexture:{value:void 0},voxelPassTexture:{value:void 0},pyramidTexture1:{value:void 0},pyramidTexture1Size:{value:void 0},pyramidTexture2:{value:void 0}
7378,pyramidTexture2Size:{value:void 0}},this.frustumCulled=!1,this.onBeforeShadowPass=e=>{if(ON.call(this),0===this.npart){this.geometry.drawRange.count=0;return}let t=this.material.root;if(t.shadersPatchedForShapeBlend){if(this.customDepthMaterialNeedsUpdate){this.customDepthMaterialNeedsUpdate=!1,this.customDepthMaterial=new so({vertexShader:t.vertexShader,fragmentShader:` 7379 #include <packing> 7380 void main() 7381 { 7382 gl_FragColor = packDepthToRGBA(gl_FragCoord.z); 7383 } 7384 `,uniforms:t.uniforms,defines:this.material.defines}),this.isMeshDepthMaterial=!0,this.customDistanceMaterial=new so({vertexShader:t.vertexShader,fragmentShader:` 7385 #include <common> 7386 #include <packing> 7387 uniform vec3 referencePosition; 7388 uniform float nearDistance; 7389 uniform float farDistance; 7390 // World-space position 7391 varying vec3 vWPosition; 7392 void main() 7393 { 7394 float dist = length(vWPosition - referencePosition); 7395 dist = (dist - nearDistance) / (farDistance - nearDistance); 7396 dist = saturate(dist); 7397 // Required by Three.js for this to work 7398 gl_FragColor = packDepthToRGBA( dist ); 7399 }`,uniforms:{nearDistance:{value:0},farDistance:{value:0},referencePosition:{value:new iD},opacity:{value:0},...t.uniforms},defines:this.material.defines});let e=this.customDistanceMaterial;e.referencePosition=new iD,e.nearDistance=0,e.farDistance=0,e.opacity=1,e.isMeshDistanceMaterial=!0}}else this.patchVertexShaderForShapeBlend(t),t.shadersPatchedForShapeBlend=!0,this.customDepthMaterialNeedsUpdate=!0;if(this.spatialPassUniforms.npart.value=this.npart,this.spatialPassUniforms.spatialn.value=this.spatialn,this.potentialPassUniforms.npart.value=this.npart,this.potentialPassUniforms.spatialn.value=this.spatialn,this.needsRebuild){this.needsRebuild=!1,this.spatialMesh.material.defines.RES=this.resolutionLevel,this.spatialMesh.material.needsUpdate=!0,this.potentialMesh.material.defines.RES=this.resolutionLevel,this.potentialPassUniforms.spatialPassTexture.value=this.spatialPassRenderTarget.texture,this.potentialMesh.material.needsUpdate=!0,this.voxelMesh.material.defines.RES=this.resolutionLevel,this.voxelMesh.material.needsUpdate=!0,this.voxelPassUniforms.potentialPassTexture.value=this.potentialPassRenderTarget.texture,this.marchPassUniforms.potentialPassTexture.value=this.potentialPassRenderTarget.texture,this.marchPassUniforms.voxelPassTexture.value=this.voxelPassRenderTarget.texture[0],this.material.defines.RES=this.resolutionLevel,this.material.defines.LEVELS=this.pyramidLevelSizes.length,this.material.defines.LOOP=this.pyramidLevelSizes.length%2==0?this.pyramidLevelSizes.length-3:this.pyramidLevelSizes.length-2,this.material.defines.HALF=+(this.pyramidLevelSizes.length%2==0),this.material.needsUpdate=!0;let e=+(this.pyramidLevelSizes.length%2!=0),t=+(this.pyramidLevelSizes.length%2==0);this.marchPassUniforms.pyramidTexture2.value=this.pyramidRenderTarget[e].texture,this.marchPassUniforms.pyramidTexture2Size.value=new t9(this.pyramidRenderTarget[e].width,this.pyramidRenderTarget[e].height),this.marchPassUniforms.pyramidTexture1.value=this.pyramidRenderTarget[t].texture,this.marchPassUniforms.pyramidTexture1Size.value=new t9(this.pyramidRenderTarget[t].width,this.pyramidRenderTarget[t].height),Object.assign(this.material.uniforms,this.marchPassUniforms)}let i=e.shadowMap.enabled;e.shadowMap.enabled=!1;let r=e.getRenderTarget();e.setRenderTarget(this.spatialPassRenderTarget),e.render(this.spatialscene,OM),e.setRenderTarget(this.potentialPassRenderTarget),e.render(this.potentialPassScene,OM),e.setRenderTarget(this.voxelPassRenderTarget),e.render(this.voxelPassScene,OM),OT.streamCompaction.renderPyramid(this.resolutionLevel,this.pyramidLevelSizes,e,this.voxelPassRenderTarget,this.pyramidRenderTarget).then(e=>{this.material.wireframe&&(3*e>this.geometry.attributes.position.count||this.drawRangeNeedsForceUpdate)&&(this.geometry.dispose(),this.geometry=new rQ,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]},this.geometry.attributes.position=new rN(new Float32Array(3*e*2),3)),(3*e>this.geometry.drawRange.count||this.drawRangeNeedsForceUpdate)&&(this.geometry.drawRange.count=3*Math.floor(1.2*e)),this.drawRangeNeedsForceUpdate=!1}),e.shadowMap.enabled=i,e.setRenderTarget(r)}}set npart(e){e!==this._npart&&(this.drawRangeNeedsForceUpdate=!0,this._npart=e,this.spatialn=Math.ceil(e/96))}get npart(){return this._npart}set resolutionLevel(e){let t=Math.min(8,Math.max(5,e));if(t!==this._resolutionLevel){switch(this._resolutionLevel=t,this.resolution=Math.pow(2,t),this.resolutionLevel){case 5:this.pyramidLevelSizes=[1,2,4,6,12,24,48,96,192],this.bboxSize=496,this.bboxOffset=-8;break;case 6:this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512],this.bboxSize=504,this.bboxOffset=-4;break;case 7:this.pyramidLevelSizes=[1,2,4,6,12,24,48,96,192,384,768,1536],this.bboxSize=508,this.bboxOffset=-2;break;case 8:this.pyramidLevelSizes=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096],this.bboxSize=510,this.bboxOffset=-1}this.pyramidTexture1Width=0,this.pyramidTexture2Width=0,this.pyramidTexture1Height=this.pyramidLevelSizes[this.pyramidLevelSizes.length-2],this.pyramidTexture2Height=this.pyramidLevelSizes[this.pyramidLevelSizes.length-3];for(let e=this.pyramidLevelSizes.length-2;e>=0;e--)(this.pyramidLevelSizes.length-2)%2==e%2?this.pyramidTexture1Width+=this.pyramidLevelSizes[e]:this.pyramidTexture2Width+=this.pyramidLevelSizes[e];this.basePyramidSize=this.pyramidLevelSizes[this.pyramidLevelSizes.length-1],this.zLayersPerRow=this.basePyramidSize/this.resolution,this.numLevels=this.pyramidLevelSizes.length-1,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]},this.needsRebuild=!0,this.customDepthMaterialNeedsUpdate=!0}}get resolutionLevel(){return this._resolutionLevel}get spatialPassRenderTarget(){let e=this._spatialPassRenderTargets[this.resolutionLevel];return e||(e=new iM(this.spatialDivisions*this.spatialn,this.spatialDivisions**2,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003}),this._spatialPassRenderTargets[this.resolutionLevel]=e),e}get potentialPassRenderTarget(){let e=this._potentialPassRenderTargets[this.resolutionLevel];return e||(e=new iM(this.basePyramidSize,this.basePyramidSize,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003}),this._potentialPassRenderTargets[this.resolutionLevel]=e),e}get voxelPassRenderTarget(){let e=this._voxelPassRenderTargets[this.resolutionLevel];return e||((e=new iT(this.basePyramidSize,this.basePyramidSize,2,{stencilBuffer:!1,depthBuffer:!1,generateMipmaps:!1,minFilter:1003,magFilter:1003})).texture[0].format=1023,e.texture[0].type=1015,e.texture[1].format=1028,e.texture[1].type=1015,this._voxelPassRenderTargets[this.resolutionLevel]=e),e}get pyramidRenderTarget(){let e=this._pyramidRenderTargets[this.resolutionLevel];return e||(e=[new iM(this.pyramidTexture1Width,this.pyramidTexture1Height,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,magFilter:1003,minFilter:1003}),new iM(this.pyramidTexture2Width,this.pyramidTexture2Height,{format:1023,type:1015,stencilBuffer:!1,depthBuffer:!1,magFilter:1003,minFilter:1003})],this._pyramidRenderTargets[this.resolutionLevel]=e),e}updateState(e,t){let i=this.material;super.updateState(e,t),i!==this.material&&(this.needsRebuild=!0),e.geometry&&(this.resolutionLevel=e.geometry.resolutionLevel,this.geometry.userData.parameters={width:this.bboxSize,height:this.bboxSize,depth:this.bboxSize,centerOffset:[this.bboxOffset,this.bboxOffset,this.bboxOffset]}),e.wireframe&&!this.geometry.getAttribute("position")?this.geometry.setAttribute("position",new rN(new Float32Array(3*this.geometry.drawRange.count),3)):!e.wireframe&&this.geometry.getAttribute("position")&&this.geometry.deleteAttribute("position")}spatialPassMaterial(){return new OA({name:"Spatial Pass",fragmentShader:` 7400 precision highp float; 7401 out vec4 pc_FragColor; 7402 const float spatialDivisions = ${this.spatialDivisions}.; 7403 uniform float span; 7404 uniform float npart; 7405 uniform float spatialn; 7406 ${OE.shapeInput()} 7407 7408 vec3 low, high; // range of current div; subset of -1 .. 1 with span border 7409 7410 // lookup one element/channel's worth of spheres for current division 7411 // stating with low sphere number lowi 7412 // gives a key to which spheres from lowi..lowi+23 are active within given div (low..high) 7413 float spatialKey(float lowi) { 7414 float t = 0.; 7415 for (float ii = 23.; ii >= 0.; ii--) { 7416 float i = ii + lowi; 7417 float iin = (i + 0.5) / 96.; 7418 vec4 shape = shapePos(iin); 7419 vec3 d = shape.xyz; 7420 float op = shape.w; 7421 7422 t *= 2.; 7423 t += ( 7424 low.x < d.x && d.x < high.x && 7425 low.y < d.y && d.y < high.y && 7426 low.z < d.z && d.z < high.z && 7427 i < npart || op == -2. // always include if op is -2, which is the intersection operation 7428 ) ? 1. : 0.; 7429 } 7430 return t; 7431 } 7432 7433 ${OE.getpart} 7434 7435 void main() { // spatialial fragment shader 7436 // find active div 7437 vec3 div; // which div is current 7438 // out holds x=> x, lowi faster moving and y=> z, y faster moving 7439 float yz = float(gl_FragCoord.y - 0.5); // contains z, y faster moving 7440 div.y = getpart(yz, spatialDivisions); 7441 div.z = yz; // getpart(yz, spatialDivisions.z); // what's left, should be the same as getpart 7442 7443 float lx = float(gl_FragCoord.x - 0.5); // contains x, lowi faster moving 7444 float lowi = getpart(lx, spatialn) * 96.; 7445 div.x = lx; 7446 7447 low = div / spatialDivisions * 2. - 1. - span; 7448 high = (div+1.) / spatialDivisions * 2. - 1. + span; 7449 7450 // find active range of spheres 7451 pc_FragColor.x = spatialKey(lowi); 7452 pc_FragColor.y = spatialKey(lowi+24.); 7453 pc_FragColor.z = spatialKey(lowi+48.); 7454 pc_FragColor.w = spatialKey(lowi+72.); 7455 } 7456 `,uniforms:this.spatialPassUniforms})}potentialPassMaterial(){return new OA({name:"PotentialPass",fragmentShader:` 7457 precision highp float; 7458 out vec4 pc_FragColor; 7459 7460 ${OE.shapeInput()} 7461 uniform sampler2D spatialPassTexture; 7462 7463 const float res = float(RES); 7464 const float VOXEL_RESOLUTION = pow(2., res); 7465 const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.)); 7466 const float VOXEL_RESOLUTION_SUB1 = VOXEL_RESOLUTION - 1.; 7467 const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION; 7468 7469 uniform float npart; 7470 uniform float spatialn; 7471 const float spatialDivisions = ${this.spatialDivisions}.; 7472 const float spatialDivisions2 = spatialDivisions * spatialDivisions; 7473 const float spatialDivisionsSub1 = spatialDivisions - 1.; 7474 7475 ${OE.getpart} 7476 7477 vec3 packRGBAToVec3(vec4 color) { 7478 uint r = uint(color.r * 255.); 7479 uint g = uint(color.g * 255.); 7480 uint combined = (r << 8) | g; 7481 return vec3(float(combined) * 0.00001525902, color.b, color.a); // 1/65535 7482 } 7483 7484 void applyQuaternionToVector(in vec4 q, inout vec3 v) { 7485 v += 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); 7486 } 7487 7488 /** 7489 * SDF functions (reference: https://iquilezles.org/articles/distfunctions/) 7490 */ 7491 7492 // branchless version of "Smooth Union, Subtraction and Intersection - bound, bound, bound" in above reference 7493 float smoothOperation(float op, float sdf, float d, float k) { 7494 // union: op = 1 =>
7494 signSubtract = 1, signIntersection = 1 7495 // subtract: op = -1 => signSubtract = -1, signIntersection = 1 7496 // intersection: op = -2 => signSubtract = -1, signIntersection = -1 7497 7498 float signSubtract = clamp(op, -1., 1.); 7499 float signIntersection = 2. * (op - signSubtract) + 1.; 7500 float h = clamp( 7501 0.5 + signSubtract * 0.5 * (sdf - signSubtract * signIntersection * d) / k, 7502 0.0, 7503 1.0 7504 ); 7505 return mix(sdf, signSubtract * signIntersection * d, h) - 7506 signSubtract * k * h * (1.0 - h); 7507 } 7508 7509 float sdSphere( vec3 p, float s ) 7510 { 7511 return length(p)-s; 7512 } 7513 7514 float sdEllipsoid( vec3 p, vec3 r ) 7515 { 7516 float k0 = length(p/r); 7517 float k1 = length(p/(r*r)); 7518 return k0*(k0-1.0)/k1; 7519 } 7520 7521 float sdBox( vec3 p, vec3 b ) 7522 { 7523 vec3 q = abs(p) - b; 7524 return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0); 7525 } 7526 7527 float sdTorus( vec3 p, vec2 t ) 7528 { 7529 vec2 q = vec2(length(p.xy)-t.x,p.z); 7530 return length(q)-t.y; 7531 } 7532 7533 float sdCappedTorus( vec3 p, vec2 sc, float ra, float rb) 7534 { 7535 p.x = abs(p.x); 7536 float k = (sc.y*p.x>sc.x*p.y) ? dot(p.xy,sc) : length(p.xy); 7537 return sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb; 7538 } 7539 7540 float dot2( in vec2 v ) { return dot(v,v); } 7541 float sdCappedCone( vec3 p, float h, float r1, float r2 ) 7542 { 7543 vec2 q = vec2( length(p.xz), p.y ); 7544 vec2 k1 = vec2(r2,h); 7545 vec2 k2 = vec2(r2-r1,2.0*h); 7546 vec2 ca = vec2(q.x-min(q.x,(q.y<0.0)?r1:r2), abs(q.y)-h); 7547 vec2 cb = q - k1 + k2*clamp( dot(k1-q,k2)/dot2(k2), 0.0, 1.0 ); 7548 float s = (cb.x<0.0 && ca.y<0.0) ? -1.0 : 1.0; 7549 return s*sqrt( min(dot2(ca),dot2(cb)) ); 7550 } 7551 7552 float sdCappedCylinder( vec3 p, float h, float r ) 7553 { 7554 vec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h); 7555 return min(max(d.x,d.y),0.0) + length(max(d,0.0)); 7556 } 7557 7558 float maxBlend = 0.0; 7559 // compute potential from A (=24) spheres, using the bit flags in 'activeKey' 7560 // to avoid lookup/compute for inactive spheres 7561 // return field potential, side effect updates track, 7562 // compute and return +ve and -ve values separately 7563 void fillSpatialInner( 7564 float ii, 7565 float activeKey, 7566 vec3 corner, 7567 inout float sdf, 7568 inout float colorDivisor, 7569 inout vec4 trackColor 7570 ) { 7571 for (float i = 0.; i < 24.; i++) { 7572 if (activeKey < 1.) break; // activeKey exhausted, no more active spheres 7573 activeKey *= 0.5; 7574 if (fract(activeKey) < 0.5) continue; 7575 7576 float iin = (i + ii + 0.5) * 0.010416666666666666; 7577 vec4 shape = shapePos(iin); 7578 vec4 quat = shapeQuat(iin); 7579 vec4 params1 = shapeParams1(iin); 7580 vec4 params2 = shapeParams2(iin); 7581 7582 vec3 p = corner - shape.xyz; 7583 applyQuaternionToVector(quat, p); 7584 p /= params2.z; // scale 7585 float d; // d in -1..1 coordinates 7586 switch (int(params1.x)) { 7587 case 0: d = sdSphere(p, params1.y); break; 7588 case 1: d = sdEllipsoid(p, params1.yzw); break; 7589 case 2: d = sdBox(p, params1.yzw); break; 7590 case 3: d = sdCappedCylinder(p, params1.y, params1.z); break; 7591 case 4: d = sdCappedCone(p, params1.y, params1.z, params1.w); break; 7592 case 5: d = sdTorus(p, params1.yz); break; 7593 case 6: d = sdCappedTorus(p, params1.yz, params1.w, params2.w); break; 7594 } 7595 d -= params2.y; // rounded edge 7596 d *= params2.z; // scale 7597 7598 float k = params2.x; 7599 float op = shape.w; 7600 7601 sdf = smoothOperation(shape.w, sdf, d, k); 7602 7603 float isNegativeOne = step(-1.5, op) * step(op, -0.5); // 1 when op == -1, 0 otherwise 7604 float colorCull = smoothstep(maxBlend, 0., -d); 7605 float cullFactor = mix(1.0, colorCull, isNegativeOne); 7606 trackColor *= cullFactor; 7607 colorDivisor *= cullFactor; 7608 7609 maxBlend = max(maxBlend, k); 7610 7611 k += 2. * INV_VOXEL_RESOLUTION; // avoid division by zero, and other color artifacts with very small k 7612 float nearness = smoothstep(k, 0., d); 7613 7614 vec4 color = shapeColor(iin); 7615 nearness *= float(color.a >= 0.); 7616 7617 colorDivisor += nearness; 7618 trackColor += color * nearness; 7619 } 7620 } 7621 7622 vec3 div; 7623 // compute potential from all spheres; collect +ve and =ve values separately 7624 // work in blocks of A*4 (=96) spheres, using the bit flags in 4 float channel 'activeKey' values 7625 // TODO check if extra vec3 output useful, not really used at present 7626 float fillSpatial(vec3 corner, inout vec4 trackColor) { 7627 float sdf = 1e3; // hack: initialize to large value 7628 float colorDivisor = 0.; 7629 // spatialPassTexture holds x=> lowi, x faster moving and y=> z, y faster moving 7630 float divyz = (div.y + div.z * spatialDivisions + 0.5) / (spatialDivisions2); 7631 for (float ii = 0.; ii < spatialn; ii++) { 7632 float i = ii * 96.; 7633 7634 vec4 activeKey = texture(spatialPassTexture, vec2((div.x * spatialn + ii + 0.5)/(spatialn * spatialDivisions), divyz)); 7635 fillSpatialInner(i, activeKey.x, corner, sdf, colorDivisor, trackColor); 7636 fillSpatialInner(i+24., activeKey.y, corner, sdf, colorDivisor, trackColor); 7637 fillSpatialInner(i+48., activeKey.z, corner, sdf, colorDivisor, trackColor); 7638 fillSpatialInner(i+72., activeKey.w, corner, sdf, colorDivisor, trackColor); 7639 } 7640 7641 trackColor /= colorDivisor; 7642 return mix(sdf, 0.0, step(1e20 - 0.1, sdf)); 7643 } 7644 7645 void main() { 7646 ${OE.getxyzi} // get xi yi zi from 2d position 7647 7648 vec3 xyzi = vec3(xi,yi,zi); 7649 vec3 corner = xyzi / VOXEL_RESOLUTION_SUB1 * 2. - 1.; // -1..1 coords 7650 7651 div = floor(xyzi / VOXEL_RESOLUTION_SUB1 * spatialDivisionsSub1); 7652 7653 vec4 c = vec4(0.); 7654 float t = fillSpatial(corner, c); 7655 7656 pc_FragColor = vec4(t, packRGBAToVec3(c)); // RGB texture 7657 } 7658 `,uniforms:this.potentialPassUniforms})}voxelPassMaterial(){return new OA({name:"VoxelPass",fragmentShader:` 7659 precision highp float; 7660 layout(location = 0) out vec4 pc_FragColor; 7661 layout(location = 1) out vec4 numTris; 7662 7663 const float res = float(RES); 7664 const float VOXEL_RESOLUTION = pow(2., res); 7665 const float VOXEL_RESOLUTION_SUB1 = VOXEL_RESOLUTION - 1.; 7666 const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.)); 7667 const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION; 7668 uniform sampler2D numTrisTable; // 256 x 1 7669 7670 float keyi(float f000, float f100, float f010, float f110, float f001, float f101, float f011, float f111) { 7671 return (float(f000 < 0.) * 1.) + 7672 (float(f100 < 0.) * 2.) + 7673 (float(f010 < 0.) * 8.) + 7674 (float(f110 < 0.) * 4.) + 7675 (float(f001 < 0.) * 16.) + 7676 (float(f101 < 0.) * 32.) + 7677 (float(f011 < 0.) * 128.) + 7678 (float(f111 < 0.) * 64.); 7679 } 7680 7681 ${OE.lookup} 7682 7683 vec3 compNormi(float xi, float yi, float zi) { 7684 float dx = look(xi + 1., yi, zi, potentialPassTexture).r - look(xi - 1., yi, zi, potentialPassTexture).r; 7685 float dy = look(xi, yi + 1., zi, potentialPassTexture).r - look(xi, yi - 1., zi, potentialPassTexture).r; 7686 float dz = look(xi, yi, zi + 1., potentialPassTexture).r - look(xi, yi, zi - 1., potentialPassTexture).r; 7687 // if we allow (common) 0,0,0 case through then NaN can spread 7688 // eg r = vec4(compNorm i(???), 1.) will pollute r.w 7689 if (dx == 0.0 && dy == 0.0 && dz == 0.0) { 7690 return vec3(0.199, 0.299, 0.399); 7691 } 7692 return normalize(vec3(dx, dy, dz)); 7693 } 7694 7695 void main() { 7696 ${OE.getxyzi} // get xi yi zi from 2d 7697 7698 vec3 normal = compNormi(xi, yi, zi); // even if our key is -1 this may be needed by a neighbouring voxel 7699 7700 if (xi >= VOXEL_RESOLUTION_SUB1 || yi >= VOXEL_RESOLUTION_SUB1 || zi >= VOXEL_RESOLUTION_SUB1) { 7701 pc_FragColor = vec4(normal, 0.); 7702 numTris = vec4(0.); 7703 return; 7704 } 7705 7706 float 7707 f000 = look(xi, yi, zi, potentialPassTexture).r, 7708 f100 = look(xi+1., yi, zi, potentialPassTexture).r, 7709 f010 = look(xi, yi+1., zi, potentialPassTexture).r, 7710 f110 = look(xi+1., yi+1., zi, potentialPassTexture).r, 7711 f001 = look(xi, yi, zi+1., potentialPassTexture).r, 7712 f101 = look(xi+1., yi, zi+1., potentialPassTexture).r, 7713 f011 = look(xi, yi+1., zi+1., potentialPassTexture).r, 7714 f111 = look(xi+1., yi+1., zi+1., potentialPassTexture).r; 7715 float key = keyi(f000, f100, f010, f110, f001, f101, f011, f111); 7716 7717 pc_FragColor = vec4(normal, key); 7718 7719 numTris = texture(numTrisTable, vec2((key + 0.5) / 256., 0.5)); 7720 } 7721 `,uniforms:this.voxelPassUniforms})}
vendor: 8,305 bytes, lines 7721-7957
7721patchVertexShaderForShapeBlend(e){let t=` 7722 #ifdef SHAPEBLEND 7723 precision highp sampler2D; 7724 7725 uniform float isol; 7726 7727 uniform sampler2D triTable; // 256 x 16 7728 uniform sampler2D pyramidTexture1; 7729 uniform vec2 pyramidTexture1Size; 7730 uniform sampler2D pyramidTexture2; 7731 uniform vec2 pyramidTexture2Size; 7732 7733 const vec2 halfPixelOffset = vec2(0.5, 0.5); 7734 7735 const vec2 rShift = vec2(0., 1.); 7736 const vec2 gShift = vec2(1., 1.); 7737 const vec2 bShift = vec2(1., 0.); 7738 7739 const float res = float(RES); 7740 const float VOXEL_RESOLUTION = pow(2., res); 7741 const float Z_LAYERS_PER_ROW = ceil(pow(2., res / 2.)); 7742 const float INV_VOXEL_RESOLUTION = 1.0 / VOXEL_RESOLUTION; 7743 7744 const float scale_factor = 2.; 7745 7746 #if SHAPEBLEND == 5 7747 const float levelShiftX[7] = float[7](4., 6., 12., 24., 48., 96., 192.); 7748 const float scale = 8. * scale_factor; 7749 const vec3 originOffset = vec3(16.); 7750 #elif SHAPEBLEND == 7 7751 const float levelShiftX[10] = float[10](4., 6., 12., 24., 48., 96., 192., 384., 768., 1536.); 7752 const float scale = 2. * scale_factor; 7753 const vec3 originOffset = vec3(64.); 7754 #elif SHAPEBLEND == 8 7755 const float levelShiftX[11] = float[11](4., 8., 16., 32., 64., 128., 256., 512., 1024., 2048., 4096.); 7756 const float scale = scale_factor; 7757 const vec3 originOffset = vec3(128.); 7758 #else 7759 const float levelShiftX[8] = float[8](4., 8., 16., 32., 64., 128., 256., 512.); 7760 const float scale = 4. * scale_factor; 7761 const vec3 originOffset = vec3(32.); 7762 #endif 7763 7764 ${OE.lookup} 7765 7766 const vec3 offsets[24] = vec3[]( 7767 vec3(0., 0., 0.), vec3(1., 0., 0.), 7768 vec3(1., 0., 0.), vec3(1., 1., 0.), 7769 vec3(0., 1., 0.), vec3(1., 1., 0.), 7770 vec3(0., 0., 0.), vec3(0., 1., 0.), 7771 vec3(0., 0., 1.), vec3(1., 0., 1.), 7772 vec3(1., 0., 1.), vec3(1., 1., 1.), 7773 vec3(0., 1., 1.), vec3(1., 1., 1.), 7774 vec3(0., 0., 1.), vec3(0., 1., 1.), 7775 vec3(0., 0., 0.), vec3(0., 0., 1.), 7776 vec3(1., 0., 0.), vec3(1., 0., 1.), 7777 vec3(1., 1., 0.), vec3(1., 1., 1.), 7778 vec3(0., 1., 0.), vec3(0., 1., 1.) 7779 ); 7780 7781 vec2 computeShiftedPosition1(vec2 xy, float levelOriginX) { 7782 vec2 xyShifted = xy; 7783 xyShifted.x += levelOriginX; 7784 return (xyShifted + halfPixelOffset) / pyramidTexture1Size; 7785 } 7786 7787 vec2 computeShiftedPosition2(vec2 xy, float levelOriginX) { 7788 vec2 xyShifted = xy; 7789 xyShifted.x += levelOriginX; 7790 return (xyShifted + halfPixelOffset) / pyramidTexture2Size; 7791 } 7792 7793 vec4 unpackVec3ToRGBA(vec3 vec) { 7794 uint combined = uint(vec.x * 65535.0 + 0.5); // Add 0.5 for rounding 7795 float g = float(combined & uint(0xFF)) * 0.00392156862; // 1/255 7796 float r = float((combined >> 8) & uint(0xFF)) * 0.00392156862; 7797 7798 return vec4(r, g, vec.y, vec.z); 7799 } 7800 7801 out vec4 marchColor; 7802 // end of marchvertPre 7803 #endif 7804 `,i=` 7805 #ifdef SHAPEBLEND 7806 float triIndex = floor(float(gl_VertexID/3)); 7807 float vertexIndex = float(gl_VertexID); 7808 7809 // Initial pyramid lookup 7810 float levelOriginX1 = pyramidTexture1Size.x - 2.; 7811 float levelOriginX2 = pyramidTexture2Size.x - 1.; 7812 vec2 xy = vec2(0.); 7813 vec4 lookUp = texture(pyramidTexture2, computeShiftedPosition2(xy, levelOriginX2)); 7814 7815 // Early exit check 7816 if (triIndex >= lookUp.r) return; 7817 7818 // Optimize loop variables 7819 float start = 0.; 7820 vec4 triIndexVec = vec4(triIndex); 7821 7822 // Main position computation loop 7823 for (int i = 0; i < LOOP;) { 7824 // Compute boundaries 7825 vec4 ends = lookUp + vec4(start); 7826 vec4 starts = vec4(ends.gba, start); 7827 vec4 check = vec4(greaterThanEqual(triIndexVec, starts)) * 7828 vec4(lessThan(triIndexVec, ends)); 7829 7830 // Update position 7831 xy *= 2.; 7832 xy += check.r * rShift + check.g * gShift + check.b * bShift; 7833 7834 // Update loop variables 7835 start = dot(check, starts); 7836 levelOriginX2 -= levelShiftX[i]; 7837 7838 // Update lookup 7839 lookUp = texture(pyramidTexture1, computeShiftedPosition1(xy, levelOriginX1)); 7840 i++; 7841 7842 ends = lookUp + vec4(start); 7843 starts = vec4(ends.gba, start); 7844 check = vec4(greaterThanEqual(triIndexVec, starts)) * 7845 vec4(lessThan(triIndexVec, ends)); 7846 7847 // Update position 7848 xy *= 2.; 7849 xy += check.r * rShift + check.g * gShift + check.b * bShift; 7850 7851 // Update loop variables 7852 start = dot(check, starts); 7853 levelOriginX1 -= levelShiftX[i]; 7854 7855 // Update lookup 7856 lookUp = texture(pyramidTexture2, computeShiftedPosition2(xy, levelOriginX2)); 7857 7858 i++; 7859 } 7860 7861 #if HALF == 1 7862 vec4 ends = lookUp + vec4(start); 7863 vec4 starts = vec4(ends.gba, start); 7864 vec4 check = vec4(greaterThanEqual(triIndexVec, starts)) * vec4(lessThan(triIndexVec, ends)); 7865 7866 // Update position 7867 xy *= 2.; 7868 xy += check.r * rShift + check.g * gShift + check.b * bShift; 7869 7870 // Update loop variables 7871 start = dot(check, starts); 7872 #endif 7873 7874 // Compute final coordinates 7875 vec3 gridPos; 7876 gridPos.x = mod(xy.x, VOXEL_RESOLUTION); 7877 gridPos.y = mod(xy.y, VOXEL_RESOLUTION); 7878 gridPos.z = floor(xy.x * INV_VOXEL_RESOLUTION) + 7879 floor(xy.y * INV_VOXEL_RESOLUTION) * Z_LAYERS_PER_ROW; 7880 7881 // Vertex key computation 7882 vertexIndex -= start * 3.; 7883 float vk = vertexIndex * 0.0625 + 0.03125; // Optimized division by 16 and addition of 1/32 7884 7885 // Voxel lookup and edge computation 7886 vec4 voxel = look(gridPos.x, gridPos.y, gridPos.z, voxelPassTexture); 7887 float key = (voxel.w + 0.5) * 0.00390625; // Optimized division by 256 7888 7889 // Edge lookup and offset computation 7890 float edgeNum = texture(triTable, vec2(vk, key)).x; 7891 int edgeIndex = int(edgeNum) * 2; 7892 7893 // Compute edge positions 7894 vec3 p1 = gridPos + offsets[edgeIndex]; 7895 vec3 p2 = gridPos + offsets[edgeIndex + 1]; 7896 7897 // Compute potentials and normals 7898 vec4 potential1 = look(p1.x, p1.y, p1.z, potentialPassTexture); 7899 vec4 potential2 = look(p2.x, p2.y, p2.z, potentialPassTexture); 7900 7901 // Final position and normal computation 7902 float mu = potential1.r / (potential1.r - potential2.r); 7903 7904 marchColor = mix( 7905 unpackVec3ToRGBA(potential1.gba), 7906 unpackVec3ToRGBA(potential2.gba), 7907 mu 7908 ); 7909 7910 transformed = p1 + (p2 - p1) * mu; 7911 transformed -= originOffset; 7912 transformed *= scale; 7913 vec4 data1 = look(p1.x, p1.y, p1.z, voxelPassTexture); 7914 vec4 data2 = look(p2.x, p2.y, p2.z, voxelPassTexture); 7915 objectNormal = normalize(mix(data1.xyz, data2.xyz, mu)); 7916 transformedNormal = normalMatrix * objectNormal; 7917 #ifndef FLAT_SHADED 7918 vNormal = transformedNormal; 7919 #endif 7920 #endif 7921 `;e.vertexShader=t+e.vertexShader.replace("#include <project_vertex>",i+` 7922#include <project_vertex>`);let r=e.fragmentShader.match(/vec3 diffuseColor[^\n]*\n/);if(!r)return;let a=` 7923 #ifdef SHAPEBLEND_C 7924 #if SHAPEBLEND_C == 1 7925 ${r[0].replace(/nodeU0,/g,"marchColor.rgb,").replace(/nodeU\d+(?=,g_uid\d+_calpha\))/g,"marchColor.a")} 7926 #else 7927 ${r[0]} 7928 #endif 7929 #else 7930 ${r[0]} 7931 #endif 7932 `;e.fragmentShader=`in vec4 marchColor; 7933`+e.fragmentShader.replace(r[0],a),Object.assign(e.uniforms,this.marchPassUniforms)}initDebugPass(e){this.geometry=new sS(e.width,e.height),this.geometry.userData={parameters:{width:4,height:4}};let t={inputTexture:{value:Array.isArray(e.texture)?e.texture[1]:e.texture},pyramidTextureSize:{value:void 0}},i=e=>{e.vertexShader=` 7934 precision highp float; 7935 7936 varying vec2 vUv; 7937 7938 void main() { 7939 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); 7940 vUv = uv; 7941 } 7942 `,e.fragmentShader=` 7943 layout(location = 1) out vec4 gVelocity; 7944 7945 precision highp float; 7946 7947 uniform sampler2D inputTexture; 7948 varying vec2 vUv; 7949 7950 uniform vec2 pyramidTextureSize; 7951 7952 void main() { 7953 // Sample the input texture using UV coordinates 7954 gl_FragColor = texture(inputTexture, vUv); 7955 gVelocity = vec4(0.0); 7956 } 7957 `,t.pyramidTextureSize.value=new t9(this.pyramidRenderTarget[0].width,this.pyramidRenderTarget[0].height),Object.assign(e.uniforms,t)};this.material.shapeBlendhack=i,this.material.root.shapeBlendhack=i}},OP=OT;OP.streamCompaction=new OC;var OD=new i6,OO=new i6,OI=new iP,OR=new iD,OL=new iD,OB=new iP;function Oz(e,t=0){let i=this.children.length;for(;i--;){let r=this.children[i];bS.is(r)&&OF.call(r,e,t+1)}}function OF(e,t=0){if(!0!==e(this,t)){let i=this.children.length;for(;i--;){let r=this.children[i];bS.is(r)&&OF.call(r,e,t+1)}}}
7957function ON(){if(void 0===this.shapesDataTexture.value){let e=new nF(new Float32Array(1920),96,5,1023,1015);this.shapesDataTexture.value=e}let e=this.shapesDataTexture.value,t=e.image.data;e.needsUpdate=!0;let i=0,r=this.data.geometry.blendRange,a=OD.copy(this.matrixWorld).invert(),o=0;Oz.call(this,e=>{let l;if(!1===e.visible)return!0;if(e instanceof EA||e instanceof E3||e instanceof Ob)return;l=e instanceof bO?e.object:e;let h=e.data?.cloner;if(S7.is(e)&&h&&!h.hideBase&&"radial"!==h.type&&!0!==h.disabled||!(l instanceof CH))return;let c=l.geometry.userData.parameters,d=c.shapeBlendNode;if(void 0===d)return;if(OO.multiplyMatrices(a,e.matrixWorld).decompose(OL,OI,OR),"TorusGeometry"===c.type&&360!==c.arc){let e=c.arc*Math.PI/180;e/=4,OI.multiply(OB.set(0,0,Math.sin(e),Math.cos(e)))}let p=d.overrideGlobalBlend?d.blendRange:r;p=p/this.bboxSize*2,t[4*o]=(OL.x-this.bboxOffset)/this.bboxSize*2,t[4*o+1]=(OL.y-this.bboxOffset)/this.bboxSize*2,t[4*o+2]=(OL.z-this.bboxOffset)/this.bboxSize*2,t[4*o+3]=0===d.operation?1:2===d.operation?-1:-2,t[384+4*o]=-OI.x,t[384+4*o+1]=-OI.y,t[384+4*o+2]=-OI.z,t[384+4*o+3]=OI.w;let f=new Float32Array(4),m=0;if("SphereGeometry"===c.type)c.width===c.height&&c.width===c.depth?f[0]=0:f[0]=1,f[1]=c.width/this.bboxSize,f[2]=c.height/this.bboxSize,f[3]=c.depth/this.bboxSize,i=Math.max(i,f[1]*OR.x+p,f[2]*OR.x+p,f[3]*OR.x+p);else if("CubeGeometry"===c.type){m=c.cornerRadius;let e=c.width,t=c.height,r=c.depth;f[0]=2,f[1]=(e-2*m)/this.bboxSize,f[2]=(t-2*m)/this.bboxSize,f[3]=(r-2*m)/this.bboxSize,i=Math.max(i,Math.sqrt(e**2+t**2+r**2)/this.bboxSize*OR.x+p)}else if("CylinderGeometry"===c.type){m=c.cornerRadius;let e=c.height,t=c.radiusBottom,r=c.radiusTop;if(r>=t){let i=(Math.PI/2-Math.atan2(r-t,e))/2;r-=m/Math.tan(i),t-=m*Math.tan(i)}else if(t>r){let i=(Math.PI/2-Math.atan2(t-r,e))/2;r-=m*Math.tan(i),t-=m/Math.tan(i)}f[1]=(c.height-2*m)/this.bboxSize,t===r?(f[0]=3,f[2]=t/this.bboxSize*2):(f[0]=4,f[2]=t/this.bboxSize*2,f[3]=r/this.bboxSize*2),i=Math.max(i,4*f[1]*OR.x+p)}else if("TorusGeometry"===c.type){if(f[0]=5,f[1]=(c.width-c.depth)/this.bboxSize,f[2]=c.depth/this.bboxSize,360!==c.arc){f[0]=6,f[3]=f[1],t[1152+4*o+3]=f[2];let e=2*Math.atan2(f[2]/2,f[1]),i=c.arc*Math.PI/180/2-e;f[1]=Math.sin(i),f[2]=Math.cos(i)}i=Math.max(i,c.width*OR.x/this.bboxSize+p)}t.set(f,768+4*o),t[1152+4*o]=p,t[1152+4*o+1]=m/this.bboxSize*2,t[1152+4*o+2]=OR.x;let g=l.material,v=g.uniforms.nodeU0.node.value,y=g.uniforms.nodeU1.value;0===d.operation||d.useColor||(y=-1),t[1536+4*o]=v.r,t[1536+4*o+1]=v.g,t[1536+4*o+2]=v.b,t[1536+4*o+3]=y,y<1&&1===this.material.defines.SHAPEBLEND_C&&this.material.setTransparent
7957(!0),o++}),this.npart=o,this.spatialPassUniforms.span.value=1.4*i}function OU(e,t){let i=!1,r=512&e.layers.mask,a=t.getLayersOfType("transmission"),o=t.getLayersOfType("outline");return o.length>0&&(e.layers.set(8),a.length>0&&e.layers.enable(3),i=!0,CX(e),Cq(e)),0===a.length&&0===o.length&&e.layers.set(0),r&&e.layers.set(9),e instanceof CU&&e.needsAO&&e.layers.enable(5),i}function Ok(e,t){if(!t.layers)return!1;let i=512&e.layers.mask,r=!1,a=t.getLayersOfType("transmission").filter(e=>e.data.visible),o=t.getLayersOfType("outline").filter(e=>e.data.visible);return a.length>0&&(e.layers.set(3),o.length>0&&e.layers.enable(8),r=!0),0===a.length&&0===o.length&&e.layers.set(0),i&&e.layers.set(9),e.needsAO&&e.layers.enable(5),r}var OV=new lG,Oj=new i6,OG=new i5;function OW(e,t,i,r=!1){let a=e.cloner;if(a)for(let o of a.children){let a=Oj.copy(o.matrixWorld).invert(),l=OG.copy(t.ray).applyMatrix4(a),h=e.matrixWorld;l.applyMatrix4(h),OV.set(l.origin,l.direction),OV.near=t.near,OV.far=t.far;let c=OV.intersectObject(e,!1);c.length>0&&i.push({...c[0],object:r?o:e})}}var OH=class{constructor(){this._constraints=new Map}setConstraint(e,t){null===t?this._constraints.delete(e):this._constraints.set(e,t)}removeDependencies(e){this._constraints.delete(e)}applyConstraints(e){let t=new Set;this._constraints.forEach((i,r)=>{let a=[r,i],o=i;for(;this._constraints.has(o)&&(o=this._constraints.get(o),!a.includes(o));)t.has(o)||a.push(o);for(let i=a.length-2;i>=0;i--)if(!t.has(a[i])){let r=e.find(a[i]);r&&r.applyPathSnapping(e),t.add(a[i])}})}findDependency(e,t){let i=e;for(;this._constraints.has(i);)if((i=this._constraints.get(i))===t)return!0;return!1}},Oq=class{};function OX(e){let t,i,r,a,o,l,h,c,d,p,f,m,g,v,y;function x(e,t,l){let h=new Float32Array(p,o,3*i);r=0;let c=new Uint32Array(p,a,i);for(let i=0;i<l.length-1;i++){let a=t[i],o=e[i].elements,d=a.filter(e=>e.enabled&&"Include"===e.mode).map(e=>"Box"===e.type?w(e):_(e)),p=a.filter(e=>e.enabled&&"Exclude"===e.mode).map(e=>"Box"===e.type?w(e):_(e));for(let e=l[i];e<l[i+1];e++){let t=m[3*e],i=m[3*e+1],a=m[3*e+2];if((0===d.length||b(t,i,a,d))&&(0===p.length||!b(t,i,a,p))){let l=1/(o[3]*t+o[7]*i+o[11]*a+o[15]);h[3*r]=(o[0]*t+o[4]*i+o[8]*a+o[12])*l,h[3*r+1]=(o[1]*t+o[5]*i+o[9]*a+o[13])*l,h[3*r+2]=(o[2]*t+o[6]*i+o[10]*a+o[14])*l,c[r]=e,r++}}}}function b(e,t,i,r,a){return r["Intersect"===a?"every":"some"](r=>{var a,o,l,h,c,d,p,f,m,g,v,y,x;let b,w,S,_,A,M,C,E=(a=e,o=t,l=i,h=r.invRotationMatrix,b=a-(c=r.cropCenter)[0],w=o-c[1],S=l-c[2],_=1/(h[3]*b+h[7]*w+h[11]*S+h[15]),{x:(h[0]*b+h[4]*w+h[8]*S+h[12])*_+c[0],y:(h[1]*b+h[5]*w+h[9]*S+h[13])*_+c[1],z:(h[2]*b+h[6]*w+h[10]*S+h[14])*_+c[2]});return Array.isArray(r)?(d=E.x,p=E.y,f=E.z,d>=(m=r)[0]&&d<=m[3]&&p>=m[1]&&p<=m[4]&&f>=m[2]&&f<=m[5]):(g=E.x,v=E.y,y=E.z,A=(g-(x=r).cropCenter[0])*x.invRadiusX,M=(v-x.cropCenter[1])*x.invRadiusY,A*A+M*M+(C=(y-x.cropCenter[2])*x.invRadiusZ)*C<=1)})}function w(e){let t=e.cropSize[0]/2,i=e.cropSize[1]/2,r=e.cropSize[2]/2;return Object.assign([e.cropCenter[0]-t,e.cropCenter[1]-i,e.cropCenter[2]-r,e.cropCenter[0]+t,e.cropCenter[1]+i,e.cropCenter[2]+r],{invRotationMatrix:S(e.cropRotation),cropCenter:e.cropCenter})}function S(e){let t=[],i=e[0]*Math.PI/180,r=e[1]*Math.PI/180,a=e[2]*Math.PI/180,o=Math.cos(i),l=Math.sin(i),h=Math.cos(r),c=Math.sin(r),d=Math.cos(a),p=Math.sin(a),f=o*d,m=o*p,g=l*d,v=l*p;return t[0]=h*d,t[1]=-h*p,t[2]=c,t[4]=m+g*c,t[5]=f-v*c,t[6]=-l*h,t[8]=v-f*c,t[9]=g+m*c,t[10]=o*h,t[12]=0,t[13]=0,t[14]=0,t[3]=0,t[7]=0,t[11]=0,t[15]=1,t}function _(e){let t=2/e.cropSize[0],i=2/e.cropSize[1],r=2/e.cropSize[2],a=S(e.cropRotation);return{invRadiusX:t,invRadiusY:i,invRadiusZ:r,cropCenter:e.cropCenter,invRotationMatrix:a}}e.onmessage=S=>{if(S.data.getCroppedIndexes){let t=new Uint32Array(function(e,t){let i=[],r=t.filter(e=>e.enabled&&"Include"===e.mode).map(e=>"Box"===e.type?w(e):_(e)),a=t.filter(e=>e.enabled&&"Exclude"===e.mode).map(e=>"Box"===e.type?w(e):_(e)),o=e.length;for(let t=0;t<o;t+=3){let o=e[t],l=e[t+1],h=e[t+2];(0===r.length||b(o,l,h,r))&&(0===a.length||!b(o,l,h,a))||i.push(t/3)}return i}(new Float32Array(S.data.positions),S.data.crops)).buffer;e.postMessage({outOfBoundsIndexes:t},[t])}else if(S.data.positions)m=new Float32Array(S.data.positions),v=S.data.meshMatrixWorlds,y=S.data.cropsArray,g=S.data.meshIndexIntervals,x(v,y,g),e.postMessage({sortSetupComplete:!0});else if(S.data.sort||S.data.newMatrixWorlds||S.data.newCropsArray)(S.data.newMatrixWorlds||S.data.newCropsArray)&&(y=S.data.newCropsArray||y,x(v=S.data.newMatrixWorlds||v,y,g)),function(m){let g,v=new Float64Array(p,l,16);for(let e=0;e<16;e++)v[e]=m[e];
7957if(r>1){t.exports.sortIndexes(a,o,d,l,h,c,f.DepthMapRange,r);let e=new Uint32Array(r);g=e.buffer,e.set(new Uint32Array(p,c,r))}else if(1===r){let e=new Uint32Array(r);e[0]=new Uint32Array(p,a,i)[0],g=e.buffer}else g=new ArrayBuffer(0);e.postMessage({sortDone:!0,indexesBuffer:g},[g])}(S.data.sort.view,S.data.sort.cameraPosition);else if(S.data.init){f=S.data.init.Constants,i=S.data.init.splatCount;let r=f.BytesPerInt,m=3*f.BytesPerFloat,g=new Uint8Array(S.data.init.sorterWasmBytes),v=Math.floor((i*(r+m)+(i*f.BytesPerInt*2+f.DepthMapRange*f.BytesPerInt*2)+32*f.MemoryPageSize)/f.MemoryPageSize)+1,y={module:{},env:{memory:new WebAssembly.Memory({initial:2*v,maximum:3*v,shared:!0})}};WebAssembly.compile(g).then(e=>WebAssembly.instantiate(e,y)).then(g=>{t=g,a=0,c=(h=(d=(l=(o=i*r)+i*m)+16*f.BytesPerFloat*2)+i*f.BytesPerInt)+f.DepthMapRange*f.BytesPerInt,p=y.env.memory.buffer,e.postMessage({sortSetupPhase1Complete:!0})})}}}tz(Oq,"DepthMapRange",65536),tz(Oq,"MemoryPageSize",65536),tz(Oq,"BytesPerFloat",4),tz(Oq,"BytesPerInt",4);var OY=(tb=new Int32Array((tx=new Float32Array(1)).buffer),function(e){return tx[0]=e,tb[0]}),OQ=new t9;function OZ(e){let t=!1;return e.scene.objects.traverse((e,i)=>{if(!1===i.visible)return!0;"Splat"===i.type&&(t=!0)}),t}var OK,OJ,O$,O0,O1,O2=class extends r7{constructor(e,t,i,r,a=!1,o=1,l,h){super(i,r),this.splatCount=t,this.meshIndexIntervals=l,this.meshMatrixWorlds=h,this.splatBuffers=e,this.geometry=i,this.material=r,this.splatDataTextures=null,this.halfPrecisionCovariancesOnGPU=a,this.devicePixelRatio=o,this.resetLocalSplatDataAndTexturesFromSplatBuffer()}static buildMesh(e,t,i=!1,r=1,a,o){let l=O2.buildGeomtery(t),h=O2.buildMaterial(a);return new O2(e,t,l,h,i,r,a,o)}static buildMaterial(e){let t=` 7958 precision highp float; 7959 #include <common> 7960 7961 attribute uint splatIndex; 7962 7963 uniform highp sampler2D covariancesTexture; 7964 uniform highp usampler2D centersColorsTexture; 7965 uniform vec2 focal; 7966 uniform vec2 viewport; 7967 uniform vec2 basisViewport; 7968 uniform vec2 covariancesTextureSize; 7969 uniform vec2 centersColorsTextureSize; 7970 uniform highp sampler2D meshMatrixWorldsTexture; 7971 uniform uint meshIndexIntervals[257]; 7972 uniform float orthoZoom; 7973 7974 varying vec4 vColor; 7975 varying vec2 vUv; 7976 7977 varying vec2 vPosition; 7978 7979 const vec4 encodeNorm4 = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0); 7980 const uvec4 mask4 = uvec4(uint(0x000000FF), uint(0x0000FF00), uint(0x00FF0000), uint(0xFF000000)); 7981 const uvec4 shift4 = uvec4(0, 8, 16, 24); 7982 vec4 uintToRGBAVec (uint u) { 7983 uvec4 urgba = mask4 & u; 7984 urgba = urgba >> shift4; 7985 vec4 rgba = vec4(urgba) * encodeNorm4; 7986 return rgba; 7987 } 7988 7989 vec2 getDataUV(in int stride, in int offset, in vec2 dimensions) { 7990 vec2 samplerUV = vec2(0.0, 0.0); 7991 float d = float(splatIndex * uint(stride) + uint(offset)) / dimensions.x; 7992 samplerUV.y = float(floor(d)) / dimensions.y; 7993 samplerUV.x = fract(d); 7994 return samplerUV; 7995 } 7996 7997 void main () { 7998 uvec4 sampledCenterColor = texture(centersColorsTexture, getDataUV(1, 0, centersColorsTextureSize)); 7999 vec3 splatCenter = uintBitsToFloat(uvec3(sampledCenterColor.gba)); 8000 vColor = uintToRGBAVec(sampledCenterColor.r); 8001 8002 vPosition = position.xy * 2.0; 8003 8004 uint meshIndex; 8005 for (int i = 1; i < 257; i++) { 8006 if (splatIndex < meshIndexIntervals[i]) { 8007 meshIndex = uint(i - 1); 8008 break; 8009 } 8010 } 8011 8012 float strideMulmeshIndex = float(4u*meshIndex); 8013 float meshMatrixWorldsTextureLength = float(256*4); 8014 8015 mat4 modelMat = mat4( 8016 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+0.0)/meshMatrixWorldsTextureLength, 0)), 8017 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+1.0)/meshMatrixWorldsTextureLength, 0)), 8018 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+2.0)/meshMatrixWorldsTextureLength, 0)), 8019 texture(meshMatrixWorldsTexture, vec2((strideMulmeshIndex+3.0)/meshMatrixWorldsTextureLength, 0)) 8020 ); 8021 mat4 modelViewMat = viewMatrix * modelMat; 8022 vec4 viewCenter = modelViewMat * vec4(splatCenter, 1.0); 8023 vec4 clipCenter = projectionMatrix * viewCenter; 8024 8025 vec2 sampledCovarianceA = texture(covariancesTexture, getDataUV(3, 0, covariancesTextureSize)).rg; 8026 vec2 sampledCovarianceB = texture(covariancesTexture, getDataUV(3, 1, covariancesTextureSize)).rg; 8027 vec2 sampledCovarianceC = texture(covariancesTexture, getDataUV(3, 2, covariancesTextureSize)).rg; 8028 8029 vec3 cov3D_M11_M12_M13 = vec3(sampledCovarianceA.rg, sampledCovarianceB.r); 8030 vec3 cov3D_M22_M23_M33 = vec3(sampledCovarianceB.g, sampledCovarianceC.rg); 8031 8032 // Compute the 2D covariance matrix from the upper-right portion of the 3D covariance matrix 8033 mat3 Vrk = mat3( 8034 cov3D_M11_M12_M13.x, cov3D_M11_M12_M13.y, cov3D_M11_M12_M13.z, 8035 cov3D_M11_M12_M13.y, cov3D_M22_M23_M33.x, cov3D_M22_M23_M33.y, 8036 cov3D_M11_M12_M13.z, cov3D_M22_M23_M33.y, cov3D_M22_M23_M33.z 8037 ); 8038 float s = 1.0 / (viewCenter.z * viewCenter.z); 8039 8040 mat3 W = transpose(mat3(modelViewMat)); 8041 mat3 T = orthoZoom > 0.0 ? W : W * mat3( 8042 focal.x / viewCenter.z, 0., -(focal.x * viewCenter.x) * s, 8043 0., focal.y / viewCenter.z, -(focal.y * viewCenter.y) * s, 8044 0., 0., 0. 8045 ); 8046 mat3 cov2Dm = transpose(T) * Vrk * T; 8047 cov2Dm[0][0] += 0.3; 8048 cov2Dm[1][1] += 0.3; 8049 8050 // We are interested in the upper-left 2x2 portion of the projected 3D covariance matrix because 8051 // we only care about the X and Y values. We want the X-diagonal, cov2Dm[0][0], 8052 // the Y-diagonal, cov2Dm[1][1], and the correlation between the two cov2Dm[0][1]. We don't 8053 // need cov2Dm[1][0] because it is a symetric matrix. 8054 vec3 cov2Dv = vec3(cov2Dm[0][0], cov2Dm[0][1], cov2Dm[1][1]); 8055 8056 vec3 ndcCenter = clipCenter.xyz / clipCenter.w; 8057 8058 // We now need to solve for the eigen-values and eigen vectors of the 2D covariance matrix 8059 // so that we can determine the 2D basis for the splat. This is done using the method described 8060 // here: https://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html 8061 // 8062 // This is a different approach than in the original work at INRIA. In that work they compute the 8063 // max extents of the 2D covariance matrix in screen space to form an axis aligned boun
8063ding rectangle 8064 // which forms the geometry that is actually rasterized. They then use the inverse 2D covariance 8065 // matrix (called 'conic') to determine fragment opacity. 8066 float a = cov2Dv.x; 8067 float d = cov2Dv.z; 8068 float b = cov2Dv.y; 8069 float D = a * d - b * b; 8070 float trace = a + d; 8071 float traceOver2 = 0.5 * trace; 8072 float term2 = sqrt(trace * trace / 4.0 - D); 8073 float eigenValue1 = traceOver2 + term2; 8074 float eigenValue2 = max(traceOver2 - term2, 0.00); // prevent negative eigen value 8075 8076 const float maxSplatSize = 1024.0; 8077 vec2 eigenVector1 = normalize(vec2(b, eigenValue1 - a)); 8078 // since the eigen vectors are orthogonal, we derive the second one from the first 8079 vec2 eigenVector2 = vec2(eigenVector1.y, -eigenVector1.x); 8080 vec2 basisVector1 = eigenVector1 * min(sqrt(2.0 * eigenValue1), maxSplatSize); 8081 vec2 basisVector2 = eigenVector2 * min(sqrt(2.0 * eigenValue2), maxSplatSize); 8082 8083 vec2 ndcOffset = vec2(vPosition.x * basisVector1 + vPosition.y * basisVector2) * basisViewport; 8084 8085 if (orthoZoom > 0.0) { 8086 ndcOffset *= orthoZoom; 8087 } 8088 8089 gl_Position = vec4(ndcCenter.xy + ndcOffset, ndcCenter.z, 1.0); 8090 }`,i=` 8091 precision highp float; 8092 #include <common> 8093 8094 uniform vec3 debugColor; 8095 8096 varying vec4 vColor; 8097 varying vec2 vUv; 8098 8099 varying vec2 vPosition; 8100 layout(location = 1) out vec4 gVelocity; 8101 8102 void main () { 8103 // compute the negative squared distance from the center of the splat to the 8104 // current fragment in the splat's local space. 8105 float A = -dot(vPosition, vPosition); 8106 if (A < -4.0) discard; 8107 vec3 color = vColor.rgb; 8108 A = exp(A) * vColor.a; 8109 gl_FragColor = vec4(color.rgb, A); 8110 gVelocity = vec4(0.0); // so it is ignored by TAA 8111 }`;return new so({uniforms:{covariancesTexture:{type:"t",value:null},centersColorsTexture:{type:"t",value:null},meshIndexIntervals:{value:e},meshMatrixWorldsTexture:{type:"t",value:null},focal:{type:"v2",value:new t9},viewport:{type:"v2",value:new t9},basisViewport:{type:"v2",value:new t9},debugColor:{type:"v3",value:new iv},covariancesTextureSize:{type:"v2",value:new t9(1024,1024)},centersColorsTextureSize:{type:"v2",value:new t9(1024,1024)},orthoZoom:{type:"f",value:-1}},vertexShader:t,fragmentShader:i,transparent:!0,alphaTest:1,blending:1,depthTest:!0,depthWrite:!1,side:2})}static buildGeomtery(e){let t=new rQ;t.setIndex([0,1,2,0,2,3]);let i=new rN(new Float32Array(12),3);t.setAttribute("position",i),i.setXYZ(0,-1,-1,0),i.setXYZ(1,-1,1,0),i.setXYZ(2,1,1,0),i.setXYZ(3,1,-1,0),i.needsUpdate=!0;let r=new lC().copy(t),a=new nV(new Uint32Array(e),1,!1);return a.setUsage(35048),r.setAttribute("splatIndex",a),r.instanceCount=e,r}resetLocalSplatDataAndTexturesFromSplatBuffer(){this.updateLocalSplatDataFromSplatBuffer(),this.allocateAndStoreLocalSplatDataInTextures()}updateLocalSplatDataFromSplatBuffer(){this.splatBuffers.forEach(e=>e.buildPreComputedBuffers()),this.covariances=new Float32Array(6*this.splatCount),this.colors=new Uint8Array(4*this.splatCount),this.centers=new Float32Array(3*this.splatCount);let e=0,t=0,i=0;for(let r of this.splatBuffers){let a=r.nsplats;this.colors.subarray(e,e+4*a).set(r.colorsA),e+=4*a,this.centers.subarray(t,t+3*a).set(r.decoded.xyz.denormDequant().data),t+=3*a,this.covariances.subarray(i,i+6*a).set(new Float32Array(r.precomputedCovarianceBufferData)),i+=6*a}}allocateAndStoreLocalSplatDataInTextures(){let e,t,i=this.splatCount,r=new t9(4096,1024);for(;r.x*r.y*2<6*i;)r.y*=2;let a=new t9(4096,1024);for(;a.x*a.y*4<4*i;)a.y*=2;if(this.halfPrecisionCovariancesOnGPU){t=new Uint16Array(r.x*r.y*2);for(let e=0;e<this.covariances.length;e++)t[e]=hi.toHalfFloat(this.covariances[e]);e=new nF(t,r.x,r.y,1030,1016)}
8111else(t=new Float32Array(r.x*r.y*2)).set(this.covariances),e=new nF(t,r.x,r.y,1030,1015);e.needsUpdate=!0,this.material.uniforms.covariancesTexture.value=e,this.material.uniforms.covariancesTextureSize.value.copy(r);let o=new Uint32Array(a.x*a.y*4);for(let e=0;e<i;e++){var l,h;let t=4*e,i=3*e,r=4*e;o[r]=(l=this.colors[t],h=this.colors[t+1],l+(h<<8)+(this.colors[t+2]<<16)+(this.colors[t+3]<<24)),o[r+1]=OY(this.centers[i]),o[r+2]=OY(this.centers[i+1]),o[r+3]=OY(this.centers[i+2])}let c=new nF(o,a.x,a.y,1033,1014);c.internalFormat="RGBA32UI",c.needsUpdate=!0,this.material.uniforms.centersColorsTexture.value=c,this.material.uniforms.centersColorsTextureSize.value.copy(a);let d=new Float32Array(4096);for(let e=0;e<this.meshMatrixWorlds.length;e++)d.set(this.meshMatrixWorlds[e].elements,16*e);let p=new nF(d,1024,1,1023,1015);p.needsUpdate=!0,this.material.uniforms.meshMatrixWorldsTexture.value=p,this.material.uniformsNeedUpdate=!0,this.splatDataTextures={covariances:{data:t,texture:e,size:r},centerColors:{data:o,texture:c,size:a},meshMatrixWorlds:{data:d,texture:p}}}updateIndexes(e){let t=this.geometry;t.attributes.splatIndex.set(e),t.attributes.splatIndex.needsUpdate=!0,t.instanceCount=e.length}updateUniforms(e,t,i,r){this.splatCount>0&&(OQ.set(e.x*this.devicePixelRatio,e.y*this.devicePixelRatio),this.material.uniforms.viewport.value.copy(OQ),this.material.uniforms.basisViewport.value.set(2/OQ.x,2/OQ.y),this.material.uniforms.focal.value.set(t,i),this.material.uniforms.orthoZoom.value=r,this.material.uniformsNeedUpdate=!0)}getSplatDataTextures(){return this.splatDataTextures}getSplatCount(){return this.splatCount}getCenters(){return this.centers}getColors(){return this.colors}getCovariances(){return this.covariances}dispose(){this.geometry.dispose(),this.material.dispose(),this.splatDataTextures&&(this.splatDataTextures.covariances.texture.dispose(),this.splatDataTextures.centerColors.texture.dispose(),this.splatDataTextures.meshMatrixWorlds.texture.dispose()),this.removeFromParent()}},O3=new Promise(e=>{O1=e}),O4=!1;O3.then(e=>Iu=e);var O5=class{constructor(e={}){tz(this,"updateView",function(){let e=new i6,t=[],i=new iD(0,0,-1),r=new iD(0,0,-1),a=new iD,o=new iD;return function(l=!1,h){let c=this.updateMatrixWorldsInWorkerIfNeeded(),d=this.cropsChanged();if(!l){r.set(0,0,-1).applyQuaternion(h.quaternion);let e=!1,t=!1;if(.95>=r.dot(i)&&(e=!0),o.copy(h.position).sub(a).length()>=1&&(t=!0),!e&&!t&&!c&&!d&&!this.needsInitialRender)return}this.needsInitialRender=!1,a.copy(h.position),i.copy(r),e.copy(h.matrixWorld).invert(),e.premultiply(this.dummyPerspectiveMatrix),t[0]=h.position.x,t[1]=h.position.y,t[2]=h.position.z;let p={sort:{view:e.elements,cameraPosition:t,splatRenderCount:this.splatRenderCount,splatSortCount:this.splatRenderCount},...c?{newMatrixWorlds:this.meshMatrixWorlds}:{},...d?{newCropsArray:this.cropsArray}:{}};this.sortRunning?this.queuedMessage=p:(this.queuedMessage=null,this.sortRunning=!0,this.sortWorker.postMessage(p))}}()),this.scene=e.scene,this.currentPage=null,this.devicePixelRatio=window.devicePixelRatio,this.sortWorker=null,this.splatRenderCount=0,this.splatSortCount=0,this.splatMesh=null,this.sortRunning=!1,this.meshMatrixWorlds=null,this.meshMatrixWorldsOld=null,this.cropsArray=null,this.splatEntries=null,this.queuedMessage=null,this.needsInitialRender=!0,this.dummyPerspectiveMatrix=new i6().makePerspective(-1,1,-1,1,.1,1e3)}updateSplatMeshUniforms(e,t){let i=new t9;null!==this.splatMesh&&this.splatMesh.getSplatCount()>0&&(e.getSize(i),this.cameraFocalLengthX=t.projectionMatrix.elements[0]*this.devicePixelRatio*i.x*.45,this.cameraFocalLengthY=t.projectionMatrix.elements[5]*this.devicePixelRatio*i.y*.45,this.splatMesh.updateUniforms(i,this.cameraFocalLengthX,this.cameraFocalLengthY,t.isPerspectiveCamera?-1:t.zoom*this.devicePixelRatio))}loadSplat(e={}){this.activePage=this.scene.activePage,e.position&&(e.position=new iD().fromArray(e.position)),e.orientation&&(e.orientation=new iP().fromArray(e.orientation)),e.halfPrecisionCovariances=!!e.halfPrecisionCovariances;let t=[];if(this.splatEntries=t,this.activePage.traverseVisibleEntity(e=>{"Splat"===e.data.type&&t.push(e)}),this.splatMesh&&this.splatMesh.dispose(),0===t.length)return this.splatMesh=null,!1;this.meshMatrixWorlds=t.map(e=>e.matrixWorld),this.meshMatrixWorldsOld=t.map(e=>e.matrixWorld.clone()),this.cropsArray=t.map(e=>e.data.crops.map(e=>e.data));let i=t.map(e=>new Iu.GSplineBuffer(new Uint8Array(e.data.buffer).buffer)),r=0,a=[0];for(let e of i)r+=e.getSplatCount(),a.push(r);return this.setupSplatMesh(i,r,e.position,e.orientation,e.halfPrecisionCovariances,this.devicePixelRatio,a,this.meshMatrixWorlds),this.setupSortWorker(r),!0}updateMatrixWorldsInWorkerIfNeeded(){let e=this.splatDataTextures.meshMatrixWorlds.data;for(let t=0;t<this.meshMatrixWorlds.length;t++)e.set(this.meshMatrixWorlds[t].elements,16*t);return this.splatDataTextures.meshMatrixWorlds.texture.needsUpdate=!0,!this.meshMatrixWorlds.every((e,t)=>e.equals(this.meshMatrixWorldsOld[t]))&&(this.meshMatrixWorldsOld=this.meshMatrixWorlds.map(e=>e.clone()),!0)}cropsChanged(){let e=!1;
8111return this.splatEntries.forEach((t,i)=>{t.data.crops.forEach((t,r)=>{void 0===this.cropsArray[i][r]?(e=!0,this.cropsArray[i][r]=t.data):Object.entries(t.data).forEach(([t,a])=>{Array.isArray(a)&&a.some((e,a)=>e!==this.cropsArray[i][r][t][a])?(e=!0,this.cropsArray[i][r][t]=a):a!==this.cropsArray[i][r]?.[t]&&(e=!0,this.cropsArray[i][r][t]=a)})}),t.data.crops.length!==this.cropsArray[i]?.length&&(this.cropsArray[i].length=t.data.crops.length,e=!0)}),e}setupSplatMesh(e,t,i=new iD,r=new iP,a=!1,o=1,l,h){this.splatMesh=O2.buildMesh(e,t,a,o,l,h),this.splatMesh.position.copy(i),this.splatMesh.quaternion.copy(r),this.splatMesh.frustumCulled=!1,this.splatMesh.renderOrder=99999,this.splatRenderCount=t,this.splatMesh.onBeforeRender=(e,t,i)=>this.update(e,i)}setupSortWorker(e){this.sortWorker=function(e){let t=new Worker(URL.createObjectURL(new Blob(["(",OX.toString(),")(self)"],{type:"application/javascript"}))),i=atob("AGFzbQEAAAAADwhkeWxpbmsuMAEEAAAAAAETA2AAAGAIf39/f39/f38AYAABfwISAQNlbnYGbWVtb3J5AgMAgIAEAwQDAAECBzkDEV9fd2FzbV9jYWxsX2N0b3JzAAALc29ydEluZGV4ZXMAARNlbXNjcmlwdGVuX3Rsc19pbml0AAIK3gMDAwABC9IDAwF/BnwBfgJAIAdFDQAgAysDUCEMIAMrAzAhDSADKwMQIQ5BACEDRP///////+9/IQtEAAAAAAAAEAAhCgNAIAIgA0ECdGoCfyAOIAEgA0EMbGoiCCoCALuiIA0gCCoCBLuioCAMIAgqAgi7oqBEAAAAAAAAsECiIgmZRAAAAAAAAOBBYwRAIAmqDAELQYCAgIB4CzYCACAJIAsgCSALYxshCyAJIAogCSAKZBshCiADQQFqIgMgB0cNAAsgB0UNACAGuCAKIAuhoyEJQQAhAwNAAn8gCSACIANBAnRqIgEoAgC3IAuhoiIKmUQAAAAAAADgQWMEQCAKqgwBC0GAgICAeAshCCABIAg2AgAgBCAIQQJ0aiIBIAEoAgBBAWo2AgAgA0EBaiIDIAdHDQALCyAGQQJPBEAgBCgCACEIQQEhAwNAIAQgA0ECdGoiASABKAIAIAhqIgg2AgAgA0EBaiIDIAZHDQALCyAHQQFrIgGtIQ8DQCAEIAIgD6dBAnQiA2ooAgBBAnRqIgcgBygCAEEBayIHNgIAIAUgASAHa0ECdGogACADaigCADYCACAPUCEDIA9CAX0hDyADRQ0ACyAGBEAgBEEAIAZBAnT8CwALCwQAQQAL"),r=new Uint8Array(i.length);for(let e=0;e<i.length;e++)r[e]=i.charCodeAt(e);return t.postMessage({init:{sorterWasmBytes:r.buffer,splatCount:e,Constants:{BytesPerFloat:Oq.BytesPerFloat,BytesPerInt:Oq.BytesPerInt,DepthMapRange:Oq.DepthMapRange,MemoryPageSize:Oq.MemoryPageSize}}}),t}(e),this.sortWorker.onmessage=e=>{e.data.sortDone?(this.sortRunning=!1,this.splatMesh?.updateIndexes(new Uint32Array(e.data.indexesBuffer)),this.lastSortTime=e.data.sortTime,this.queuedMessage&&(this.sortWorker.postMessage(this.queuedMessage),this.queuedMessage=null)):e.data.sortCanceled?this.sortRunning=!1:e.data.sortSetupPhase1Complete?this.sortWorker.postMessage({positions:this.splatMesh.getCenters().buffer,meshMatrixWorlds:this.splatMesh.meshMatrixWorlds,meshIndexIntervals:this.splatMesh.meshIndexIntervals,cropsArray:this.cropsArray}):e.data.sortSetupComplete&&(this.splatDataTextures=this.splatMesh.getSplatDataTextures(),this.scene.activePage.add(this.splatMesh),this.needsInitialRender=!0)}}update(e,t){null!==this.splatMesh&&(this.updateSplatMeshUniforms(e,t),this.updateView(!1,t))}getSplatMesh(){return this.splatMesh}},O6=new rB;O6.wireframe=!0;var O8=new iD,O9=class extends nI{constructor(e,t){super(),this.data=e,this.sharedAssets=t,this.enableHelpers=!1,this.wireframeState=!1,this.needsTransmissionDirty=!0,this.needsNormalDirty=!0,this._needsTransmission=!1,this._needsNormal=!1,this.geometryCacheChanged=!1,this.splatViewer=null,this.shapeBlendIntances=[],this.entityByUuid={},this.entityIdentityToEntity={},this.toExpandCloner=new Set,this.toUpdateCloner=new Set,this.pendingCommands=[],this.pathConstraints=new OH,this.invisibleObjects=new E2("jflkdsafjasdifjaslk",{...xs.defaultData,visible:!1,name:"buildin invisible"}),this.needsRecomputeInstances=!1,this.init(e,t),this.matrixAutoUpdate=!1,this.errorPage=new D0("fdasfa",{...xp.defaultData,name:""},{shared:t,scene:this})}markGeometryCacheDirty(){this.geometryCacheChanged=!0}markNeedsUpdateRendererDirty(){this.needsTransmissionDirty=!0,this.needsNormalDirty=!0}needsTransmission(){let e;return this.needsTransmissionDirty&&(this._needsTransmission=(e=!1,this.traverseEntity(t=>{if(t instanceof CU)if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)Ok(t,t.material[i])&&(e=!0);else Ok(t,t.material)&&(e=!0)}),e),this.needsTransmissionDirty=!1),this._needsTransmission}needsNormal(){let e;return this.needsNormalDirty&&(this._needsNormal=(e=!1,this.traverseEntity(t=>{if(t instanceof CU)if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)OU(t,t.material[i])&&(e=!0);else OU(t,t.material)&&(e=!0)}),e),this.needsNormalDirty=!1),this._needsNormal}registerInstanceAndSetUuid(e){let t=e.identity.join("-"),i=this.entity
vendor: 12,290 bytes, line 8111
8111IdentityToEntity[t];i&&(e.uuid=i.uuid),this.entityIdentityToEntity[t]=e,this.entityByUuid[e.uuid]=e}markPenumbraSizeDirty(){for(let e of this.children)e instanceof D0&&(e.penumbraSizeArrayCache=null)}findInstance(e){return this.entityIdentityToEntity[e.join("-")]}get bgColor(){return this.activePage.bgColor}get postprocessing(){return this.activePage.data.postprocessing}getWithSortKey(e){let t=this.find(e);if(void 0===t)return;let i=[],r=t;for(;r!==this;){let e=r,t=(r=r.parent).children.indexOf(e);i.splice(0,0,t)}return{entity:t,sortKey:i}}getAllSorted(e){let t=[];for(let i of e){let e=this.getWithSortKey(i.id);void 0!==e&&t.push(e)}return t.sort((e,t)=>vw(e.sortKey,t.sortKey)),t.map(e=>e.entity)}nonExistOrDescendantOf(e,t){let i=this.find(e);if(void 0===i)return!0;for(;i;){if(i.uuid===t)return!0;i=i.parent}return!1}find(e){if(this.activePage&&this.activePage.personalCamera.parent&&("f23858d0-4a3b-4bd8-8173-66ed0af7f6fb-personalCamera"===e||e===gg))return this.activePage.personalCamera;if(""===e||void 0===e)return;let t=this.entityByUuid[e];return void 0===t?this.getObjectByProperty("uuid",e):t}find2D(e){for(let t of this.children)if(t instanceof D0&&t.uiScene){let i=t.uiScene.find(e);if(i)return i}}findScene2DfromObject2D(e){for(let t of this.children)if(t instanceof D0&&t.uiScene&&t.uiScene.find(e))return t.uiScene}find2DInUIObjects(e){let t;return this.traverseEntity(i=>{void 0===t&&i instanceof D7&&(t=i.uiCanvas.find(e))}),t}traverse2D(e){for(let t of this.children)t instanceof D0&&t.uiScene&&t.uiScene.traverse(e)}debugEnsureEntity(e){let t=this.find(e);t&&Array.isArray(t.identity)&&this.findInstance(t.identity)}addPendingExpandCloner(e){this.toExpandCloner.add(e)}addPendingUpdateCloner(e){this.toUpdateCloner.add(e)}markToExpandCloner(e){this.toExpandCloner.add(e),e.traverseEntityAncestors(e=>{this.toExpandCloner.add(e)})}doPendingExpandCloner(e){this.toExpandCloner.forEach(t=>{t.expandCloner(e)}),this.toExpandCloner.clear()}doPendingUpdateCloner(e){this.toUpdateCloner.forEach(t=>{t.cloner?.update(e)}),this.toUpdateCloner.clear()}doPendingUpdates(e){this.doPendingExpandCloner(e),this.doPendingUpdateCloner(e),this.applyPendingCommands()}addPendingCommand(e){this.pendingCommands.push(e)}applyPendingCommands(){this.pendingCommands.forEach(e=>e()),this.pendingCommands.length=0}updateByLibOp(e,t){1===e.path.length&&"components"===e.path[0]&&1===e.type&&this.createChildrenObjects([{...e.data.asset,id:e.id}],this.invisibleObjects,t)}updateTreeByOp(e,t){if(0===e.path.length&&7===e.type){let i=null===e.parent?this:this.find(e.parent);if(void 0===i)throw Error("unexpected");let r=this.createObject(e.id,e.data,e.children,i,e.localIndex,t);r.updateVisible(this),r.resetBBoxNeedsUpdate(),EY(r)&&EQ(r.parent)&&(r.invalidateUpstreamBooleanData(),r.parent.invalidateDownstreamBooleanData().recomputeBoolean()),this.markNeedsRecomputeInstancesForAncessors(i),this.markNeedsRecomputeInstancesForChildren(r),this.markToExpandCloner(r),this.markPenumbraSizeDirty(),r.updatePathSnapping()}else if(0===e.path.length&&8===e.type){let t=this.find(e.id);if(void 0===t)throw Error("unexpected");t.traverseEntity(e=>{e instanceof OP&&(this.shapeBlendIntances=this.shapeBlendIntances.filter(t=>t!==e))}),this.markToExpandCloner(t),t.resetBBoxNeedsUpdate(),this.unregisterObject(t);let i=t.parent;this.markNeedsRecomputeInstancesForAncessors(i),this.markNeedsRecomputeInstancesForChildren(t),this.markPenumbraSizeDirty(),t.parent.remove(t),EQ(t.parent)&&(t.parent.invalidateUpstreamBooleanData(),t.parent.invalidateDownstreamBooleanData().recomputeBoolean()),EY(t)&&(t.freeBooleanPointer(),i instanceof Eq&&i.invalidateDownstreamBooleanData().recomputeBoolean()),t instanceof D3&&t.detachShape(),this.disposeAndUnregisterEntityRecursivelyIfNotReregistered(t),this.pathConstraints.removeDependencies(t.uuid),t.updatePathSnapping()}else if(0===e.path.length&&9===e.type){let t=this.find(e.id);if(void 0===t)throw Error("unexpected");this.markNeedsRecomputeInstancesForChildren(t);let i=t.parent;this.markNeedsRecomputeInstancesForAncessors(i),t.cloner?.resetOnMove(),this.markToExpandCloner(t);let r=null===e.parent?this:this.find(e.parent);if(void 0===r)throw Error("unexpected");r.add(t),this.markNeedsRecomputeInstancesForAncessors(r),this.markToExpandCloner(t),t.invalidateClonerTransform(t),t.updateVisible(this),t.resetBBoxNeedsUpdate(),this.markPenumbraSizeDirty();let a=e.localIndex;r.children.splice(a,0,r.children.pop()),EY(t)&&(t.invalidateUpstreamBooleanData(),EQ(t.parent)?t.parent.invalidateDownstreamBooleanData().recomputeBoolean():i instanceof Eq&&i.invalidateDownstreamBooleanData().recomputeBoolean()),t.updatePathSnapping()}this.markNeedsUpdateRendererDirty(),this.markGeometryCacheDirty()}get playPage(){return this.find(this.data.publish.playPage)??this.errorPage}updatePage(e){for(let t of(this.activePage&&this.activePage.onDeactive(),this.activePage=this.errorPage,this.children))t instanceof D0&&(t.visible=t.uuid===e,t.visible&&(this.activePage=t,this.activePage.onActive(this)));this.activePage!==this.splatViewer?.activePage&&this.reloadSplats()}updateEntityByOp(e,t,i,r){if(0===t.type){if(("overrides"in t.props||"component"in t.props)&&this.markNeedsRecomputeInstances(),"visible"in t.props&&this.markPenumbraSizeDirty(),t.path.includes("overrides")&&"states"in t.props){let{rest:e}=t.props;t={...t,props:e},this.markNeedsRecomputeInstances()}"pathSnapping"===t.path[0]&&void 0!==t.props.pathId&&this.pathConstraints.setConstraint(e,t.props.pathId)}let a=this.find(e);if(a)try{var o;o=t,a.updateByOp(o,i,{scene:this,shared:r},!1),a instanceof CH&&a.updateGeometryGroupsIfNeeded()}catch{}}updateEntity2DByOp(e,t,i,r,a,o=[]){e.updateEntityByOp(t,i,r,a),this.traverseEntity(e=>{(e instanceof D7||e instanceof D0)&&(o.includes(e.frameId??"")||e.frameId===t)&&e.updateEntity2DByOp(t,i,r,a)})}get activeCamera(){return this.activePage.activeCamera}switchActiveCamera(e){this.activePage.switchActiveCamera(e)}isInvisibleObjects(e){return e===this.invisibleObjects||e.hasAnccestor(this.invisibleObjects)}init(e,t){let i=Object.entries(t.data.lib.components).map((e,t)=>({data:e[1].asset.data,children:e[1].asset.children,id:e[0],fi:t}));this.invisibleObjects.updateState(this.invisibleObjects.data,{scene:this,shared:t}),this.add(this.invisibleObjects),this.createChildrenObjects(i,this.invisibleObjects,t),this.createChildrenObjects(e.objects,this,t),this.updatePage(e.publish.playPage),this.activePage.switchToPlayCamera(),this.expandInstances(t,!0),this.traverseEntity(e=>{e instanceof Ej&&e.updateUp()}),this.doPendingExpandCloner({scene:this,shared:t}),this.applyPendingCommands()}markNeedsRecomputeInstances(){this.needsRecomputeInstances=!0}markNeedsRecomputeInstancesForChildren(e){e.traverseEntity(e=>{("Component"===e.data.type||"Instance"===e.data.type)&&this.markNeedsRecomputeInstances()})}markNeedsRecomputeInstancesForAncessors(e){S7.is(e)&&("Component"===e.data.type&&this.markNeedsRecomputeInstances(),e.traverseAncestors(e=>{S7.is(e)&&"Component"===e.data.type&&this.markNeedsRecomputeInstances()}))}relativeizeInner(e,t,i,r,a,o,l){if(e){let h=r.find(e);h&&h!==r&&a.forInstancesRec(r=>{r.data=fu(r.data,a=>{let h=a.events.data(l.id),c=r.goUp(o);if(c){let r=[...vb(c.identity),e].join("-"),a=this.entityIdentityToEntity[r];if(a){let e=a.uuid;fM.zoom(h,t)[i]=e}}}).data})}}rewriteActions(e,t,i,r,a,o){e.forEach(e=>{"Transition"===e.data.type||"Animation"===e.data.type?this.relativeizeInner(e.data.object,[...t,e.id],"object",i,r,a,o):"Conditional"===e.data.type&&(this.rewriteActions(e.data.ifActions,[...t,e.id,"ifActions"],i,r,a,o),this.rewriteActions(e.data.elseActions,[...t,e.id,"elseActions"],i,r,a,o))})}rewriteEventsBeforeGoToPlayMode(){this.traverseEntity(e=>{if(e instanceof D5&&"string"==typeof e.identity&&"Component"===e.data.type)return e.traverseEntity((t,i)=>{t.data.events.forEach(r=>{if("GameControl"===r.data.type){let a=!1;if(t.forInstancesRec(e=>{e.data=fu(e.data,t=>{e.isInstanceRoot||(t.events.delete(r.id),a=!0)}).data}),!1===a)for(let a of xI.list)this.rewriteActions(r.data.gameActions[a],["gameActions",a],e,t,i,r)}else"Conditional"===r.data.type?("Distance"===r.data.condition.type?(this.relativeizeInner(r.data.condition.fromObject,["condition"],"fromObject",e,t,i,r),this.relativeizeInner(r.data.condition.toObject,["condition"],"toObject",e,t,i,r)):"State"===r.data.condition.type?this.relativeizeInner(r.data.condition.object,["condition"],"object",e,t,i,r):"Comparison"===r.data.condition.type&&("Property"===r.data.condition.lOperand.type&&this.relativeizeInner(r.data.condition.lOperand.value[0],["condition","lOperand","value"],0,e,t,i,r),"Property"===r.data.condition.rOperand.type&&this.relativeizeInner(r.data.condition.rOperand.value[0],["condition","rOperand","value"],0,e,t,i,r)),this.rewriteActions(r.data.inActions,["inActions"],e,t,i,r),this.rewriteActions(r.data.outActions,["outActions"],e,t,i,r)):"actions"in r.data&&this.rewriteActions(r.data.actions,["actions"],e,t,i,r)})}),!0})}expandInstances(e,t,i){let r=new Set;for(let a of(this.traverseEntity(a=>{if(a instanceof D5&&a.isInstanceRoot)return a.expandInstanceChildren({scene:this,shared:e,pendingDeletes:r}),t||a.resetBBoxNeedsUpdate(),i&&a.traverseEntity(e=>{i.addClip(e)}),!0}),r))this.disposeAndUnregisterEntityRecursivelyIfNotReregistered(a),D6(a)}recomputeInstances(e,t){this.needsRecomputeInstances&&(this.needsRecomputeInstances=!1,this.traverseEntity(e=>{e instanceof D5&&e.isInstanceRoot&&(e.component=void 0)}),this.expandInstances(e,!1,t))}disposeAndUnregisterEntityRecursivelyIfNotReregistered(e){e.traverseEntity(e=>{let t="string"==typeof e.identity?e.identity:e.identity.join("-");this.entityIdentityToEntity[t]===e&&(delete this.entityByUuid[e.uuid],delete this.entityIdentityToEntity[t]),e.dispose()})}clearScene(){for(let e of this.children)S7.is(e)&&e.disposeRecursively();this.children.length=0}resetAfterClear(e,t){this.init(e,t)}raycast(e){return this.raycast1(e,!1)}raycast1(e,t){let i=[],r=a=>{for(let o of a.children){let a=o.cloner;if(S7.is(o)&&!o.raycastLock&&(o.visible||a?.object.data.visible))if(!0===t&&o.isInstanceRoot){let t=[];if(e.intersectObject(o,!0,t),t.length){let e=t[0];e.object=o,e.point.applyMatrix4(e.object.matrixWorld);let r=o.matrixWorld.clone().invert();e.point.applyMatrix4(r),i.push(e)}}else(EY(o)||EZ(o)&&this.enableHelpers&&o.objectHelper.visible)&&(e.intersectObject(o,!1,i),OW(o,e,i)),r(o)}};return r(this.activePage),i}raycastWithClones(e){let t=[],i=r=>{for(let a of r.children){let r=a.cloner;S7.is(a)&&(a.visible||r?.object.data.visible)&&((EY(a)||EZ(a)&&this.enableHelpers&&a.objectHelper.visible)&&(e.intersectObject(a,!1,t),OW(a,e,t,!0)),i(a))}};return i(this),t}forEachEntity(e){for(let t of this.children)S7.is(t)&&e(t)}traverseConcreteEntity(e){for(let t of this.children)S7.is(t)&&t.isConcreteEntity&&t.traverseEntity(e)}traverseEntity(e){for(let t of this.children)S7.is(t)&&t.traverseEntity(e)}updateFont(e,t){this.traverseEntity(i=>{if(i instanceof CH&&"Mesh"===i.data.type&&("TextGeometry"===i.data.geometry.type||"InputGeometry"===i.data.geometry.type)&&i.data.geometry.font===e){let r=i.geometry,a=i.data.geometry;r.updateFont(e,t).then(()=>{r.update(a,t);let e=i.invalidateDownstreamBooleanData();EQ(e)&&e.recomputeBoolean()})}})}traverseObject(e){for(let t of this.children)bS.is(t)&&t.traverseObject(e)}traverseVisibleEntity(e){for(let t of this.children)S7.is(t)&&t.visible&&t.traverseVisibleEntity(e)}dispose(){this.clearScene()}createChildrenObjects(e,t,i){let r=0;for(let a of e)this.createObject(a.id,a.data,a.children,t,r,i),r+=1}registerObjectCreatedInLegacy(e){this.entityByUuid[e.uuid]=e}unregisterObject(e){for(let t of(delete this.entityByUuid[e.uuid],e.children))this.unregisterObject(t)}createObject(e,t,i,r,a,o){let l={scene:this,shared:o},h=OS(e,t,l);return h instanceof OP&&this.shapeBlendIntances.push(h),h&&(this.entityByUuid[e]=h,r.add(h),r.children.splice(a,0,r.children.pop()),i.length>0&&(h.isInstanceRoot||this.createChildrenObjects(i,h,o)),h.updateState(t,l),h instanceof CH&&h.updateGeometryGroupsIfNeeded(),h.updateVisible(this),h.cloner&&this.toExpandCloner.add(h),t.pathSnapping?.pathId&&this.pathConstraints.setConstraint(e,t.pathSnapping.pathId)),"Empty"===t.type&&t.animations&&h.traverseEntity(e=>{let t=e.dataPatched;
8111if(e instanceof CH&&t.bones&&t.boneInverses){let i=new nk(t.bones.map(e=>this.find(e)),t.boneInverses.map(e=>new i6().fromArray(e)));e.bind(i,e.bindMatrix)}else e.matrixAutoUpdate=!0}),h}getCenter(e){let t=[];for(let i=0,r=e.length;i<r;++i){let{id:r,recursive:a}=e[i],o=this.find(r),l=a?o.recursiveBBox:o.singleBBox;t.push(...l.vertices)}let i=new iR;return i.setFromPoints(t),i.getCenter(O8),O8}copyMatrixWorld(e,t){if(null===e)return void t.identity();let i=this.find(e);i?t.copy(i.matrixWorld):t.identity()}copyParentMatrixWorld(e,t){if(null===e)return void t.identity();let i=this.find(e)?.parent;i?t.copy(i.matrixWorld):t.identity()}traverseMaterial(e){this.traverseEntity(t=>{if(t instanceof _H)if(Array.isArray(t.material))for(let i=0;i<t.material.length;i++)t.material[i]instanceof Ct&&e(t.material[i]);else t.material instanceof Ct&&e(t.material)})}updateViewPlaneSize(e,t,i=!1){this.traverseConcreteEntity(r=>{r instanceof Ej&&r.setViewplaneSize(e,t,i)})}initializeSplatViewer(){this.splatViewer=new O5({scene:this}),this.reloadSplats()}reloadSplats(){this.splatViewer?.loadSplat()}},O7=(e,t)=>{let i=t.x-e.x,r=t.y-e.y;return Math.sqrt(i*i+r*r)},Ie=e=>Math.PI/180*e,It=new Map,Ii=(e,t,i)=>{let r=t.split(/[ ,]+/g),a;for(let t=0;t<r.length;t+=1)a=r[t],e.addEventListener?e.addEventListener(a,i,!1):e.attachEvent&&e.attachEvent(a,i)},Ir=(e,t,i)=>{let r=t.split(/[ ,]+/g),a;for(let t=0;t<r.length;t+=1)a=r[t],e.removeEventListener?e.removeEventListener(a,i):e.detachEvent&&e.detachEvent(a,i)},Is=e=>(e.preventDefault(),e.type.match(/^touch/)?e.changedTouches:e),Ia=()=>({x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}),In=(e,t)=>{t.top||t.right||t.bottom||t.left?(e.style.top=t.top,e.style.right=t.right,e.style.bottom=t.bottom,e.style.left=t.left):(e.style.left=t.x+"px",e.style.top=t.y+"px")},Io=(e,t,i)=>{let r=Il(e);for(let e in r)if(r.hasOwnProperty(e))if("string"==typeof t)r[e]=t+" "+i;else{let a="";for(let e=0,r=t.length;e<r;e+=1)a+=t[e]+" "+i+", ";r[e]=a.slice(0,-2)}return r},Il=e=>{let t={};return t[e]="",["webkit","Moz","o"].forEach(function(i){t[i+e.charAt(0).toUpperCase()+e.slice(1)]=""}),t},Ih=(e,t)=>{for(let i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e},Ic=(e,t)=>{if(e.length)for(let i=0,r=e.length;i<r;i+=1)t(e[i]);else t(e)};Ip="ontouchstart"in window,If=!!window.PointerEvent,Im=!!window.MSPointerEvent;var Id,Iu,Ip,If,Im,Ig,Iv={start:"mousedown",move:"mousemove",end:"mouseup"},Iy={};function Ix(){}function Ib(e,t){return this.identifier=t.identifier,this.position=t.position,this.frontPosition=t.frontPosition,this.collection=e,this.defaults={size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,mode:"dynamic",zone:document.body,lockX:!1,lockY:!1,shape:"circle"},this.config(t),"dynamic"===this.options.mode&&(this.options.restOpacity=0),this.id=Ib.id,Ib.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}function Iw(e,t){this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=e,this.id=Iw.id,Iw.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:"dynamic",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,lockX:!1,lockY:!1,shape:"circle",dynamicPage:!1,follow:!1},this.config(t),("static"===this.options.mode||"semi"===this.options.mode)&&(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1);let i=getComputedStyle(this.options.zone.parentElement);return i&&"flex"===i.display&&(this.parentIsFlex=!0),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}function IS(e){var t=this;t.ids={},t.index=0,t.collections=[],t.scroll=Ia(),t._windowBound=!1,t.config(e),t.prepareCollections();var i=function(){var e;
8111t.collections.forEach(function(i){i.forEach(function(i){e=i.el.getBoundingClientRect(),i.position={x:t.scroll.x+e.left,y:t.scroll.y+e.top}})})};return t._onResize=function(){It.has(i)&&clearTimeout(It.get(i)),It.set(i,setTimeout(function(){It.delete(i),i()},100))},t._onScroll=function(){t.scroll=Ia()},t.collections}If?Ig={start:"pointerdown",move:"pointermove",end:"pointerup, pointercancel"}:Im?Ig={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:Ip?(Ig={start:"touchstart",move:"touchmove",end:"touchend, touchcancel"},Iy=Iv):Ig=Iv,Ix.prototype.on=function(e,t){var i,r=e.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var a=0;a<r.length;a+=1)i=r[a],this._handlers_[i]=this._handlers_[i]||[],this._handlers_[i].push(t);return this},Ix.prototype.off=function(e,t){return this._handlers_=this._handlers_||{},void 0===e?this._handlers_={}:void 0===t?this._handlers_[e]=null:this._handlers_[e]&&this._handlers_[e].indexOf(t)>=0&&this._handlers_[e].splice(this._handlers_[e].indexOf(t),1),this},Ix.prototype.trigger=function(e,t){var i,r=this,a=e.split(/[ ,]+/g);r._handlers_=r._handlers_||{};for(var o=0;o<a.length;o+=1)i=a[o],r._handlers_[i]&&r._handlers_[i].length&&r._handlers_[i].forEach(function(e){e.call(r,{type:i,target:r},t)})},Ix.prototype.config=function(e){this.options=this.defaults||{},e&&(this.options=((e,t)=>{let i={};for(let r in e)e.hasOwnProperty(r)&&t.hasOwnProperty(r)?i[r]=t[r]:e.hasOwnProperty(r)&&(i[r]=e[r]);return i})(this.options,e))},Ix.prototype.bindEvt=function(e,t){var i=this;return i._domHandlers_=i._domHandlers_||{}
8111,i._domHandlers_[t]=function(){"function"==typeof i["on"+t]&&i["on"+t].apply(i,arguments)},Ii(e,Ig[t],i._domHandlers_[t]),Iy[t]&&Ii(e,Iy[t],i._domHandlers_[t]),i},Ix.prototype.unbindEvt=function(e,t){return this._domHandlers_=this._domHandlers_||{},Ir(e,Ig[t],this._domHandlers_[t]),Iy[t]&&Ir(e,Iy[t],this._domHandlers_[t]),delete this._domHandlers_[t],this},Ib.prototype=new Ix,Ib.constructor=Ib,Ib.id=0,Ib.prototype.buildEl=function(e){return this.ui={},this.options.dataOnly||(this.ui.el=document.createElement("div"),this.ui.back=document.createElement("div"),this.ui.front=document.createElement("div"),this.ui.el.className="nipple collection_"+this.collection.id,this.ui.back.className="back",this.ui.front.className="front",this.ui.el.setAttribute("id","nipple_"+this.collection.id+"_"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front)),this},Ib.prototype.stylize=function(){if(this.options.dataOnly)return this;var e=this.options.fadeTime+"ms",t=((e,t)=>{let i=Il(e);for(let e in i)i.hasOwnProperty(e)&&(i[e]=t);return i})("borderRadius","50%"),i=Io("transition","opacity",e),r={};return r.el={position:"absolute",opacity:this.options.restOpacity,display:"block",zIndex:999},r.back={position:"absolute",display:"block",width:this.options.size+"px",height:this.options.size+"px",marginLeft:-this.options.size/2+"px",marginTop:-this.options.size/2+"px",background:"rgba(255, 255, 255, .4)",border:"solid 2px rgba(0, 0, 0, .1)"},r.front={width:this.options.size/2+"px",height:this.options.size/2+"px",position:"absolute",display:"block",marginLeft:-this.options.size/4+"px",marginTop:-this.options.size/4+"px",background:"rgba(255, 255, 255, .8)",border:"solid 2px rgba(0, 0, 0, .1)"},Ih(r.el,i),"circle"===this.options.shape&&Ih(r.back,t),Ih(r.front,t),this.applyStyles(r),this},Ib.prototype.applyStyles=function(e){for(var t in this.ui)if(this.ui.hasOwnProperty(t))for(var i in e[t])this.ui[t].style[i]=e[t][i];return this},Ib.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)||this.options.zone.appendChild(this.ui.el),this},Ib.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)||this.options.zone.removeChild(this.ui.el),this},Ib.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger("destroyed",this.instance),this.removeFromDom(),this.off(),this.ui=null,this.instance=null,this.collection=null,this.options=null},Ib.prototype.show=function(e){var t=this;return t.options.dataOnly||(clearTimeout(t.removeTimeout),clearTimeout(t.showTimeout),clearTimeout(t.restTimeout),t.addToDom(),t.restCallback(),setTimeout(function(){t.ui.el.style.opacity=1},0),t.showTimeout=setTimeout(function(){t.trigger("shown",t.instance),"function"==typeof e&&e.call(this)},t.options.fadeTime)),t},Ib.prototype.hide=function(e){var t=this;if(t.options.dataOnly)return t;if(t.ui.el.style.opacity=t.options.restOpacity,clearTimeout(t.removeTimeout),clearTimeout(t.showTimeout),clearTimeout(t.restTimeout),t.removeTimeout=setTimeout(function(){var i="dynamic"===t.options.mode?"none":"block";t.ui.el.style.display=i,"function"==typeof e&&e.call(t),t.trigger("hidden",t.instance)},t.options.fadeTime),t.options.restJoystick){let i=t.options.restJoystick,r={};r.x=!0===i||!1!==i.x?0:t.instance.frontPosition.x,r.y=!0===i||!1!==i.y?0:t.instance.frontPosition.y,t.setPosition(e,r)}return t},Ib.prototype.setPosition=function(e,t){var i=this;i.frontPosition={x:t.x,y:t.y};var r=i.options.fadeTime+"ms",a={};a.front=Io("transition",["top","left"],r);var o={front:{}};o.front={left:i.frontPosition.x+"px",top:i.frontPosition.y+"px"},i.applyStyles(a),i.applyStyles(o),i.restTimeout=setTimeout(function(){"function"==typeof e&&e.call(i),i.restCallback()},i.options.fadeTime)},Ib.prototype.restCallback=function(){var e={};e.front=Io("transition","none",""),this.applyStyles(e),this.trigger("rested",this.instance)},Ib.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},Ib.prototype.computeDirection=function(e){var t,i,r,a=e.angle.radian,o=Math.PI/4,l=Math.PI/2;if(a>o&&a<3*o&&!e.lockX?t="up":a>-o&&a<=o&&!e.lockY?t="left":a>-(3*o)&&a<=-o&&!e.lockX?t="down":e.lockY||(t="right"),e.lockY||(i=a>
8111-l&&a<l?"left":"right"),e.lockX||(r=a>0?"up":"down"),e.force>this.options.threshold){var h,c={};for(h in this.direction)this.direction.hasOwnProperty(h)&&(c[h]=this.direction[h]);var d={};for(h in this.direction={x:i,y:r,angle:t},e.direction=this.direction,c)c[h]===this.direction[h]&&(d[h]=!0);if(d.x&&d.y&&d.angle)return e;d.x&&d.y||this.trigger("plain",e),d.x||this.trigger("plain:"+i,e),d.y||this.trigger("plain:"+r,e),d.angle||this.trigger("dir dir:"+t,e)}else this.resetDirection();return e},Iw.prototype=new Ix,Iw.constructor=Iw,Iw.id=0,Iw.prototype.prepareNipples=function(){var e=this.nipples;e.on=this.on.bind(this),e.off=this.off.bind(this),e.options=this.options,e.destroy=this.destroy.bind(this),e.ids=this.ids,e.id=this.id,e.processOnMove=this.processOnMove.bind(this),e.processOnEnd=this.processOnEnd.bind(this),e.get=function(t){if(void 0===t)return e[0];for(var i=0,r=e.length;i<r;i+=1)if(e[i].identifier===t)return e[i];return!1}},Iw.prototype.bindings=function(){this.bindEvt(this.options.zone,"start"),this.options.zone.style.touchAction="none",this.options.zone.style.msTouchAction="none"},Iw.prototype.begin=function(){var e=this.options;if("static"===e.mode){var t=this.createNipple(e.position,this.manager.getIdentifier());t.add(),this.idles.push(t)}},Iw.prototype.createNipple=function(e,t){var i=this.manager.scroll,r={},a=this.options,o={x:this.parentIsFlex?i.x:i.x+this.box.left,y:this.parentIsFlex?i.y:i.y+this.box.top};if(e.x&&e.y)r={x:e.x-o.x,y:e.y-o.y};else if(e.top||e.right||e.bottom||e.left){var l=document.createElement("DIV");l.style.display="hidden",l.style.top=e.top,l.style.right=e.right,l.style.bottom=e.bottom,l.style.left=e.left,l.style.position="absolute",a.zone.appendChild(l);var h=l.getBoundingClientRect();a.zone.removeChild(l),r=e,e={x:h.left+i.x,y:h.top+i.y}}var c=new Ib(this,{color:a.color,size:a.size,threshold:a.threshold,fadeTime:a.fadeTime,dataOnly:a.dataOnly,restJoystick:a.restJoystick,restOpacity:a.restOpacity,mode:a.mode,identifier:t,position:e,zone:a.zone,frontPosition:{x:0,y:0},shape:a.shape});return a.dataOnly||(In(c.ui.el,r),In(c.ui.front,c.frontPosition)),this.nipples.push(c),this.trigger("added "+c.identifier+":added",c),this.manager.trigger("added "+c.identifier+":added",c),this.bindNipple(c),c},Iw.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},Iw.prototype.bindNipple=function(e){var t,i=this,r=function(e,r){t=e.type+" "+r.id+":"+e.type,i.trigger(t,r)};e.on("destroyed",i.onDestroyed.bind(i)),e.on("shown hidden rested dir plain",r),e.on("dir:up dir:right dir:down dir:left",r),e.on("plain:up plain:right plain:down plain:left",r)},Iw.prototype.pressureFn=function(e,t,i){var r=this,a=0;clearInterval(r.pressureIntervals[i]),r.pressureIntervals[i]=setInterval((function(){var i=e.force||e.pressure||e.webkitForce||0;i!==a&&(t.trigger("pressure",i),r.trigger("pressure "+t.identifier+":pressure",i),a=i)}).bind(r),100)},Iw.prototype.onstart=function(e){var t=this,i=t.options,r=e;return e=Is(e),t.updateBox(),Ic(e,function(a){t.actives.length<i.maxNumberOfNipples?t.processOnStart(a):r.type.match(/^touch/)&&(Object.keys(t.manager.ids).forEach(function(i){if(0>Object.values(r.touches).findIndex(function(e){return e.identifier===i})){var a=[e[0]];a.identifier=i,t.processOnEnd(a)}}),t.actives.length<i.maxNumberOfNipples&&t.processOnStart(a))}),t.manager.bindDocument(),!1},Iw.prototype.processOnStart=function(e){var t,i=this,r=i.options,a=i.manager.getIdentifier(e),o=e.force||e.pressure||e.webkitForce||0,l={x:e.pageX,y:e.pageY},h=i.getOrCreate(a,l);h.identifier!==a&&i.manager.removeIdentifier(h.identifier),h.identifier=a;var c=function(t){t.trigger("start",t),i.trigger("start "+t.id+":start",t),t.show(),o>0&&i.pressureFn(e,t,t.identifier),i.processOnMove(e)};if((t=i.idles.indexOf(h))>=0&&i.idles.splice(t,1),i.actives.push(h),i.ids.push(h.identifier),"semi"!==r.mode)c(h);else if(O7(l,h.position)<=r.catchDistance)c(h);else{h.destroy(),i.processOnStart(e);return}return h},Iw.prototype.getOrCreate=function(e,t){var i,r=this.options;return/(semi|static)/.test(r.mode)?(i=this.idles[0])?(this.idles.splice(0,1),i):"semi"===r.mode&&this.createNipple(t,e):i=this.createNipple(t,e)},Iw.prototype.processOnMove=function(e){let t,i,r,a;var o,l,h,c=this.options,d=this.manager.getIdentifier(e),p=this.nipples.get(d),f=this.manager.scroll;if(!(isNaN(e.buttons)?0!==e.pressure:0!==e.buttons))return void this.processOnEnd(e);if(!p)return void this.manager.removeIdentifier(d);if(c.dynamicPage){var m=p.el.getBoundingClientRect();p.position={x:f.x+m.left,y:f.y+m.top}}p.identifier=d;var g=p.options.size/2,v={x:e.pageX,y:e.pageY};c.lockX&&(v.y=p.position.y),c.lockY&&(v.x=p.position.x);var y,x,b,w,S=O7(v,p.position),_=(y=v,t=(x=p.position).x-y.x,180/Math.PI*Math.atan2(x.y-y.y,t)),A=Ie(_),M=S/g,C={distance:S,position:v};if("circle"===p.options.shape?(b=Math.min(S,g),o=p.position,l=b,i={x:0,y:0},h=Ie(h=_),i.x=o.x-l*Math.cos(h),i.y=o.y-l*Math.sin(h),w=i):(r=v,a=p.position,b=O7(w={x:Math.min(Math.max(r.x,a.x-g),a.x+g),y:Math.min(Math.max(r.y,a.y-g),a.y+g)},p.position)),c.follow){if(S>g){let e=v.x-w.x,t=v.y-w.y;p.position.x+=e,p.position.y+=t,p.el.style.top=p.position.y-(this.box.top+f.y)+"px",p.el.style.left=p.position.x-(this.box.left+f.x)+"px",S=O7(v,p.position)}}else v=w,S=b;var E=v.x-p.position.x,T=v.y-p.position.y;p.frontPosition={x:E,y:T},c.dataOnly||In(p.ui.front,p.frontPosition);var P={identifier:p.identifier,position:v,force:M,pressure:e.force||e.pressure||e.webkitForce||0,distance:S,angle:{radian:A,degree:_},vector:{x:E/g,y:-T/g},raw:C,instance:p,lockX:c.lockX,lockY:c.lockY};(P=p.computeDirection(P)).angle={radian:Ie(180-_),degree:180-_},p.trigger("move",P),this.trigger("move "+p.id+":move",P)},Iw.prototype.processOnEnd=function(e){var t=this,i=t.options,r=t.manager.getIdentifier(e),a=t.nipples.get(r),o=t.manager.removeIdentifier(a.identifier);!a||(i.dataOnly||a.hide(function(){"dynamic"===i.mode&&(a.trigger("removed",a),t.trigger("removed "+a.id+":removed",a),t.manager.trigger("removed "+a.id+":removed",a),a.destroy())}),clearInterval(t.pressureIntervals[a.identifier]),a.resetDirection(),a.trigger("end",a),t.trigger("end "+a.id+":end",a),t.ids.indexOf(a.identifier)>=0&&t.ids.splice(t.ids.indexOf(a.identifier),1),t.actives.indexOf(a)>=0&&t.actives.splice(t.actives.indexOf(a),1),/(semi|static)/.test(i.mode)?t.idles.push(a):t.nipples.indexOf(a)>=0&&t.nipples.splice(t.nipples.indexOf(a),1),t.manager.unbindDocument(),/(semi|static)/.test(i.mode)&&(t.manager.ids[o.id]=o.identifier))},Iw.prototype.onDestroyed=function(e,t){this.nipples.indexOf(t)>=0&&this.nipples.splice(this.nipples.indexOf(t),1),this.actives.indexOf(t)>=0&&this.actives.splice(this.actives.indexOf(t),1),this.idles.indexOf(t)>=0&&this.idles.splice(this.idles.indexOf(t),1),this.ids.indexOf(t.identifier)>=0&&this.ids.splice(this.ids.indexOf(t.identifier),1),this.manager.removeIdentifier(t.identifier),this.manager.unbindDocument()},Iw.prototype.destroy=function(){for(var e in this.unbindEvt(this.options.zone,"start"),this.nipples.forEac
8111h(function(e){e.destroy()}),this.pressureIntervals)this.pressureIntervals.hasOwnProperty(e)&&clearInterval(this.pressureIntervals[e]);this.trigger("destroyed",this.nipples),this.manager.unbindDocument(),this.off(),this.pressureIntervals={},this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.manager=null},IS.prototype=new Ix,IS.constructor=IS,IS.prototype.prepareCollections=function(){var e=this;e.collections.create=e.create.bind(e),e.collections.on=e.on.bind(e),e.collections.off=e.off.bind(e),e.collections.destroy=e.destroy.bind(e),e.collections.get=function(t){var i;return e.collections.every(function(e){return!(i=e.get(t))}),i}},IS.prototype.create=function(e){return this.createCollection(e)},IS.prototype.bindWindowEvents=function(){this._windowBound||(this._windowBound=!0,Ii(window,"resize",this._onResize),Ii(window,"scroll",this._onScroll))},IS.prototype.unbindWindowEvents=function(){this._windowBound&&(this._windowBound=!1,Ir(window,"resize",this._onResize),Ir(window,"scroll",this._onScroll))},IS.prototype.createCollection=function(e){var t=new Iw(this,e);return this.bindCollection(t),this.collections.push(t),this.bindWindowEvents(),t},IS.prototype.bindCollection=function(e){var t,i=this,r=function(e,r){t=e.type+" "+r.id+":"+e.type,i.trigger(t,r)};e.on("destroyed",i.onDestroyed.bind(i)),e.on("shown hidden rested dir plain",r),e.on("dir:up dir:right dir:down dir:left",r),e.on("plain:up plain:right plain:down plain:left",r)},IS.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,"move").bindEvt(document,"end"),this.binded=!0)},IS.prototype.unbindDocument=function(e){Object.keys(this.ids).length&&!0!==e||(this.unbindEvt(document,"move").unbindEvt(document,"end"),this.binded=!1)},IS.prototype.getIdentifier=function(e){var t;return e?void 0===(t=void 0===e.identifier?e.pointerId:e.identifier)&&(t=this.latest||0):t=this.index,void 0===this.ids[t]&&(this.ids[t]=this.index,this.index+=1),this.latest=t,this.ids[t]},IS.prototype.removeIdentifier=function(e){var t={};for(var i in this.ids)if(this.ids[i]===e){t.id=i,t.identifier=this.ids[i],delete this.ids[i];break}return t},IS.prototype.onmove=function(e){return this.onAny("move",e),!1},IS.prototype.onend=function(e){return this.onAny("end",e),!1},IS.prototype.oncancel=function(e){return this.onAny("end",e),!1},IS.prototype.onAny=function(e,t){var i,r=this,a="processOn"+e.charAt(0).toUpperCase()+e.slice(1);t=Is(t);var o=function(e,t,i){i.ids.indexOf(t)>=0&&(i[a](e),e._found_=!0)};return Ic(t,function(e){i=r.getIdentifier(e),Ic(r.collections,o.bind(null,e,i)),e._found_||r.removeIdentifier(i)}),!1},IS.prototype.destroy=function(){this.unbindDocument(!0),this.unbindWindowEvents(),this.ids={},this.index=0,this.collections.forEach(function(e){e.destroy()}),this.collections=[],this.off()},IS.prototype.onDestroyed=function(e,t){if(0>this.collections.indexOf(t))return!1;this.collections.splice(this.collections.indexOf(t),1),0===this.collections.length&&this.unbindWindowEvents()};var I_=null;function IA(){return I_||(I_=new IS),I_}var IM={create:function(e){return IA().create(e)},destroy:function(){I_&&(I_.destroy(),I_=null)},get factory(){return IA()}},IC=new Map,IE=new Map,IT=class{constructor(e,t,i,r){this.data=t;let{audio:a,volume:o,delay:l,loop:h}=t;if(!a)throw Error("Missing property");try{let e="string"==typeof a?r.getAudio(a).src:a.data;this.audioPlayer=new Cp({src:e,volume:o,delay:l,loop:h})}catch{}IE.has(i.uuid)?IE.get(i.uuid).push(this):IE.set(i.uuid,[this]),IC.set(e,this)}playByToggle(){"stop"===this.data.toggle?this.audioPlayer?.status==="playing"?this.audioPlayer.stop():(this.audioPlayer?.stop(),this.audioPlayer?.play()):"pause"===this.data.toggle?this.audioPlayer?.status==="playing"?this.audioPlayer?.pause():this.audioPlayer?.play():(this.audioPlayer?.stop(),this.audioPlayer?.play())}dispose(){this.audioPlayer?.stop()}},IP=class{constructor(e){this.data=e}dispatch(){this.data.playAudio?this.pauseAudio(this.data.playAudio):this.data.object?this.pauseAllAudiosFromObject(this.data.object):this.pauseAllAudios()}pauseAudio(e){let t=IC.get(e);t&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.audioPlayer?.[this.data.interaction](),this.disposeDelay()},this.data.delay)):t.audioPlayer?.[this.data.interaction]())}pauseAllAudiosFromObject(e){let t=IE.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>
8111{t.forEach(e=>e.audioPlayer?.[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e.audioPlayer?.[this.data.interaction]()))}pauseAllAudios(){let e=[...IE.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>{e.forEach(e=>{e.audioPlayer?.[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e.audioPlayer?.[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},ID=class{constructor(e,t,i,r,a){if(this.data=t,this.shared=r,this.condition=a,"play"===t.interaction)this.interaction=new IT(e,t,i,r);else if("pause"===t.interaction||"stop"===t.interaction)this.interaction=new IP(t);else throw Error("Missing property")}dispatchBasic(){if(!1===Lg(this.shared,this.condition))return!1;this.interaction instanceof IT?this.interaction.playByToggle():this.interaction.dispatch()}dispatchConditional(){if(!1===Lg(this.shared,this.condition))return!1;this.interaction instanceof IT?this.interaction.audioPlayer?.play():this.interaction.dispatch()}dispatchGameControl(e){if(!1===Lg(this.shared,this.condition))return!1;this.interaction instanceof IT&&("start"===e?this.interaction.audioPlayer?.play():this.interaction.audioPlayer?.stop())}dispose(){this.interaction.dispose()}},IO=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.delay=0,this.emission=e.emission,void 0!==e.delay&&(this.delay=e.delay),this.particleSystem=this.page.scene.find(this.data.emitterObjectId)}toggleEmitting(){this.particleSystem.started&&!this.particleSystem.stopped?this.stop(this.delay):this.start(this.delay)}toggleFroze(){this.particleSystem.started&&!this.particleSystem.isFrozen?this.freeze(this.delay):this.unFreeze(this.delay)}start(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.start(0),this.clearDelay()},e);return}this.particleSystem.start()}stop(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.stop(0),this.clearDelay()},e);return}this.particleSystem.stop()}freeze(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.freeze(0),this.clearDelay()},e);return}this.particleSystem.froze()}unFreeze(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.unFreeze(0),this.clearDelay()},e);return}this.particleSystem.unFroze()}reset(e=0){if(e){this.delayTimerId=window.setTimeout(()=>{this.reset(0),this.clearDelay()},e);return}this.particleSystem.reset()}reverseFromCurrent(){switch(this.emission){case"emitToggle":this.toggleEmitting();break;case"pauseToggle":this.toggleFroze()}}dispatchBasic(){if(!1===Lg(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"emitToggle":this.toggleEmitting();break;case"pause":this.freeze(this.delay);break;case"pauseToggle":this.toggleFroze();break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchConditional(){if(!1===Lg(this.shared,this.condition)||!this.particleSystem)return!1;switch(this.emission){case"start":this.start(this.delay);break;case"stop":this.stop(this.delay);break;case"reset":this.reset(this.delay)}}dispatchGameControl(e){if(!1===Lg(this.shared,this.condition)||!this.particleSystem)return!1;"start"===e?this.start(this.delay):this.stop(this.delay)}dispose(){this.particleSystem&&(this.particleSystem.reset(),this.clearDelay())}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}},II=(e,t)=>t.some(t=>t instanceof RegExp?t.test(e):t===e),IR=class{constructor({url:e,context:t},i,r,a){if(this.controlsManager=i,this.shared=r,this.condition=a,!e)throw Error("Missing property");this.url=e.startsWith("mailto:")?e:function(e,t){if(t={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...t},e=e.trim(),/^data:/i.test(e))return((e,{stripHash:t})=>{let i=/^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(e);if(!i)throw Error(`Invalid URL: ${e}`);let{type:r,data:a,hash:o}=i.groups,l=r.split(";");o=t?"":o;let h=!1;"base64"===l[l.length-1]&&(l.pop(),h=!0);let c=(l.shift()||"").toLowerCase(),d=[...l.map(e=>{let[t,i=""]=e.split("=").map(e=>e.trim());return"charset"===t&&"us-ascii"===(i=i.toLowerCase())?"":`${t}${i?`=${i}`:""}`}
8111).filter(Boolean)];return h&&d.push("base64"),(d.length>0||c&&"text/plain"!==c)&&d.unshift(c),`data:${d.join(";")},${h?a.trim():a}${o?`#${o}`:""}`})(e,t);if(/^view-source:/i.test(e))throw Error("`view-source:` is not supported as it is a non-standard protocol");let i=e.startsWith("//");!i&&/^\.*\//.test(e)||(e=e.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,t.defaultProtocol));let r=new URL(e);if(t.forceHttp&&t.forceHttps)throw Error("The `forceHttp` and `forceHttps` options cannot be used together");if(t.forceHttp&&"https:"===r.protocol&&(r.protocol="http:"),t.forceHttps&&"http:"===r.protocol&&(r.protocol="https:"),t.stripAuthentication&&(r.username="",r.password=""),t.stripHash?r.hash="":t.stripTextFragment&&(r.hash=r.hash.replace(/#?:~:text.*?$/i,"")),r.pathname){let e=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,t=0,i="";for(;;){let a=e.exec(r.pathname);if(!a)break;let o=a[0],l=a.index;i+=r.pathname.slice(t,l).replace(/\/{2,}/g,"/"),i+=o,t=l+o.length}let a=r.pathname.slice(t,r.pathname.length);r.pathname=i+=a.replace(/\/{2,}/g,"/")}if(r.pathname)try{r.pathname=decodeURI(r.pathname)}catch{}if(!0===t.removeDirectoryIndex&&(t.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(t.removeDirectoryIndex)&&t.removeDirectoryIndex.length>0){let e=r.pathname.split("/");II(e[e.length-1],t.removeDirectoryIndex)&&(r.pathname=(e=e.slice(0,-1)).slice(1).join("/")+"/")}if(r.hostname&&(r.hostname=r.hostname.replace(/\.$/,""),t.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(r.hostname)&&(r.hostname=r.hostname.replace(/^www\./,""))),Array.isArray(t.removeQueryParameters))for(let e of[...r.searchParams.keys()])II(e,t.removeQueryParameters)&&r.searchParams.delete(e);if(!0===t.removeQueryParameters&&(r.search=""),t.sortQueryParameters){r.searchParams.sort();try{r.search=decodeURIComponent(r.search)}catch{}}t.removeTrailingSlash&&(r.pathname=r.pathname.replace(/\/$/,""));let a=e;return e=r.toString(),t.removeSingleSlash||"/"!==r.pathname||a.endsWith("/")||""!==r.hash||(e=e.replace(/\/$/,"")),(t.removeTrailingSlash||"/"===r.pathname)&&""===r.hash&&t.removeSingleSlash&&(e=e.replace(/\/$/,"")),i&&!t.normalizeProtocol&&(e=e.replace(/^http:\/\//,"//")),t.stripProtocol&&(e=e.replace(/^(?:https?:)?\/\//,"")),e}(e,{removeTrailingSlash:!1,removeSingleSlash:!1,stripWWW:!1}),this.context=t??"tab"}dispatch(){if(!1===Lg(this.shared,this.condition))return!1;pf?window.location.assign(this.url):("tab"===this.context||pu&&"none"===this.context?window.open(this.url,"_blank"):"window"===this.context?window.open(this.url,"_blank",`width=${window.innerWidth}, height=${window.innerHeight}`):window.open(this.url,"_parent"),this.controlsManager.orbitControls?.onPointerUp(pb[0]),pb.splice(0,pb.length))}},IL=class{constructor(e,t,i,r,a){this.data=e,this.page=t,this.controlsManager=i,this.shared=r,this.condition=a,this.timeoutIdQueue=[],this.dispatchInner=()=>{this.objects.forEach(this.destroyCallback)},this.destroyCallback=e=>{this.timeoutIdQueue.shift();let t=this.page.scene.find(e);if(void 0===t)return;let i=this.controlsManager.sharedGameControlGlobals.rapierWorld,r=!i||t.dataPatched.physics?.fusedBody;if(t.cloner){for(let e of t.cloner.children)r?(e.playModeVisible=!1,e.rigidBody&&t.dataPatched.physics?.rigidBody==="positioned"&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),i.removeRigidBody(e.rigidBody),e.rigidBody=void 0),e.bvhGeometry&&(e.bvhGeometry=void 0)):void 0===this.clone||this.clone===e?(e.playModeVisible=!1,e.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),i.removeRigidBody(e.rigidBody),e.rigidBody=void 0)):void 0===e.playModeVisible&&(e.playModeVisible=!0);(r||void 0===this.clone||!1===this.clone)&&(t.visible=!1,t.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(t.rigidBody.collider(0).handle),i.removeRigidBody(t.rigidBody),t.rigidBody=void 0),t.bvhGeometry&&(t.bvhGeometry=void 0))}else t.rigidBody&&(this.controlsManager.sharedGameControlGlobals.colliderToEntity.delete(t.rigidBody.collider(0).handle),i.removeRigidBody(t.rigidBody),t.rigidBody=void 0),t.bvhGeometry&&(t.bvhGeometry=void 0),t.visible=!1;void 0===i?this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim=this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.bvhGeometry):this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim=this.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.rigidBody),t.destroyedInAction=!0,this.controlsManager.requestRender()},this.objects=[...e.objects]}dispatch(e){if(!1===Lg(this.shared,this.condition))return!1;this.clone=e,this.data.delay?this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay)):this.dispatchInner()}
8111dispatchFromStart(){if(!1===Lg(this.shared,this.condition))return!1;this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay))}dispose(){this.timeoutIdQueue.forEach(e=>window.clearTimeout(e))}},IB=class{constructor(e,t,i,r,a){this.data=e,this.page=t,this.shared=i,this.eventManager=r,this.condition=a,this.shared=i}dispatch(){if(!1===Lg(this.shared,this.condition))return!1;clearTimeout(this.timeoutId),delete this.timeoutId,this.timeoutId=window.setTimeout(()=>{this.shared.reset(this.shared.data,!0),RJ(this.page,this.shared,!0),this.eventManager.reset(),this.eventManager.controlsManager.gameControl?.reset(!0),this.page.switchToPlayCamera(),this.eventManager.controlsManager.requestRender(),delete this.timeoutId},(this.data.delay??0)*1e3)}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},Iz={update:null,begin:null,loopBegin:null,changeBegin:null,change:null,changeComplete:null,timelineChangeComplete:null,loopComplete:null,complete:null,loop:1,direction:"normal",autoplay:!0,timelineOffset:0,rewind:!0},IF={duration:1e3,delay:0,endDelay:0,startOnceDelay:0,pingPongDelayCorrection:0,pingPongEndDelayCorrection:0,easing:"easeOutElastic(1, .5)",round:0},IN=["translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","perspective","matrix","matrix3d"],IU={CSS:{},springs:{}};function Ik(e,t,i){return Math.min(Math.max(e,t),i)}function IV(e,t){return e.indexOf(t)>-1}function Ij(e,t){return e.apply(null,t)}var IG={arr:function(e){return Array.isArray(e)},obj:function(e){return IV(Object.prototype.toString.call(e),"Object")},pth:function(e){return IG.obj(e)&&e.hasOwnProperty("totalLength")},svg:function(e){return e instanceof SVGElement},inp:function(e){return e instanceof HTMLInputElement},dom:function(e){return!("isNode"in e)&&(e.nodeType||IG.svg(e))},str:function(e){return"string"==typeof e},fnc:function(e){return"function"==typeof e},und:function(e){return typeof e>"u"},hex:function(e){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e)},rgb:function(e){return/^rgb/.test(e)},hsl:function(e){return/^hsl/.test(e)},col:function(e){return IG.hex(e)||IG.rgb(e)||IG.hsl(e)},key:function(e){return!Iz.hasOwnProperty(e)&&!IF.hasOwnProperty(e)&&"targets"!==e&&"keyframes"!==e}};function IW(e){var t=/\(([^)]+)\)/.exec(e);return t?t[1].split(",").map(function(e){return parseFloat(e)}):[]}function IH(e,t){var i=IW(e),r=Ik(IG.und(i[0])?1:i[0],.1,100),a=Ik(IG.und(i[1])?100:i[1],.1,100),o=Ik(IG.und(i[2])?10:i[2],.1,100),l=Ik(IG.und(i[3])?0:i[3],.1,100),h=Math.sqrt(a/r),c=o/(2*Math.sqrt(a*r)),d=c<1?h*Math.sqrt(1-c*c):0,p=c<1?(c*h+-l)/d:-l+h;function f(e){var i=t?t*e/1e3:e;return i=c<1?Math.exp(-i*c*h)*(+Math.cos(d*i)+p*Math.sin(d*i)):(1+p*i)*Math.exp(-i*h),0===e||1===e?e:1-i}return t?f:function(){var t=IU.springs[e];if(t)return t;for(var i=1/6,r=0,a=0;;)if(1===f(r+=i)){if(++a>=16)break}else a=0;var o=r*i*1e3;return IU.springs[e]=o,o}}function Iq(e){return void 0===e&&(e=10),function(t){return Math.ceil(Ik(t,1e-6,1)*e)*(1/e)}}var IX=function(){function e(e,t,i){return(((1-3*i+3*t)*e+(3*i-6*t))*e+3*t)*e}function t(e,t,i){return 3*(1-3*i+3*t)*e*e+2*(3*i-6*t)*e+3*t}return function(i,r,a,o){if(0<=i&&i<=1&&0<=a&&a<=1){var l=new Float32Array(11);if(i!==r||a!==o)for(var h=0;h<11;++h)l[h]=e(.1*h,i,a);return function(h){return i===r&&a===o||0===h||1===h?h:e(function(r){for(var o=0,h=1;10!==h&&l[h]<=r;++h)o+=.1;var c=o+(r-l[--h])/(l[h+1]-l[h])*.1,d=t(c,i,a);return d>=.001?function(i,r,a,o){for(var l=0;l<4;++l){var h=t(r,a,o);if(0===h)break;var c=e(r,a,o)-i;r-=c/h}return r}(r,c,i,a):0===d?c:function(t,i,r,a,o){var l,h,c=0;do(l=e(h=i+(r-i)/2,a,o)-t)>0?r=h:i=h;while(Math.abs(l)>1e-7&&++c<10)return h}(r,o,o+.1,i,a)}(h),r,o)}}}}(),IY=(Rf={linear:function(){return function(e){return e}}},Rm={Sine:function(){return function(e){return 1-Math.cos(e*Math.PI/2)}},Circ:function(){return function(e){return 1-Math.sqrt(1-e*e)}},Back:function(){return function(e){return e*e*(3*e-2)}},Bounce:function(){return function(e){for(var t,i=4;e<((t=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}},Elastic:function(e,t){void 0===e&&(e=1),void 0===t&&(t=.5);var i=Ik(e,1,10),r=Ik(t,.1,2);return function(e){return 0===e||1===e?e:-i*Math.pow(2,10*(e-1))*Math.sin(2*Math.PI*(e-1-r/(2*Math.PI)*Math.asin(1/i))/r)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(e,t){Rm[e]=function(){return function(e){return Math.pow(e,t+2)}}}),Object.keys(Rm).forEach(function(e){var t=Rm[e];Rf["easeIn"+e]=t,Rf["easeOut"+e]=function(e,i){return function(r){return 1-t(e,i)(1-r)}},Rf["easeInOut"+e]=function(e,i){return function(r){return r<.5?t(e,i
8111)(2*r)/2:1-t(e,i)(-2*r+2)/2}}}),Rf);function IQ(e,t){if(IG.fnc(e))return e;var i=e.split("(")[0],r=IY[i],a=IW(e);switch(i){case"spring":return IH(e,t);case"cubicBezier":return Ij(IX,a);case"steps":return Ij(Iq,a);default:return Ij(r,a)}}function IZ(e){try{return document.querySelectorAll(e)}catch{return}}function IK(e,t){for(var i=e.length,r=arguments.length>=2?arguments[1]:void 0,a=[],o=0;o<i;o++)if(o in e){var l=e[o];t.call(r,l,o,e)&&a.push(l)}return a}function IJ(e){return e.reduce(function(e,t){return e.concat(IG.arr(t)?IJ(t):t)},[])}function I$(e){return IG.arr(e)?e:(IG.str(e)&&(e=IZ(e)||e),e instanceof NodeList||e instanceof HTMLCollection?[].slice.call(e):[e])}function I0(e,t){return e.some(function(e){return e===t})}function I1(e){var t={};for(var i in e)t[i]=e[i];return t}function I2(e,t){var i=I1(e);for(var r in e)i[r]=t.hasOwnProperty(r)?t[r]:e[r];return i}function I3(e,t){var i=I1(e);for(var r in t)i[r]=IG.und(e[r])?t[r]:e[r];return i}function I4(e){var t=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(e);if(t)return t[1]}function I5(e,t){return IG.fnc(e)?e(t.target,t.id,t.total):e}function I6(e,t){return e.getAttribute(t)}function I8(e,t,i){if(I0([i,"deg","rad","turn"],I4(t)))return t;var r=IU.CSS[t+i];if(!IG.und(r))return r;var a=document.createElement(e.tagName),o=e.parentNode&&e.parentNode!==document?e.parentNode:document.body;o.appendChild(a),a.style.position="absolute",a.style.width=100+i;var l=100/a.offsetWidth;o.removeChild(a);var h=l*parseFloat(t);return IU.CSS[t+i]=h,h}function I9(e,t,i){if(t in e.style){var r=t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),a=e.style[t]||getComputedStyle(e).getPropertyValue(r)||"0";return i?I8(e,a,i):a}}function I7(e,t){return IG.dom(e)&&!IG.inp(e)&&(I6(e,t)||IG.svg(e)&&e[t])?"attribute":IG.dom(e)&&I0(IN,t)?"transform":IG.dom(e)&&"transform"!==t&&I9(e,t)?"css":null!=e[t]?"object":void 0}function Re(e){if(IG.dom(e)){for(var t,i=e.style.transform||"",r=/(\w+)\(([^)]*)\)/g,a=new Map;t=r.exec(i);)a.set(t[1],t[2]);return a}}function Rt(e,t,i,r){switch(I7(e,t)){case"transform":var a,o;return a=IV(t,"scale")?1:0+(IV(t,"translate")||"perspective"===t?"px":IV(t,"rotate")||IV(t,"skew")?"deg":void 0),o=Re(e).get(t)||a,r&&(r.transforms.list.set(t,o),r.transforms.last=t),i?I8(e,o,i):o;case"css":return I9(e,t,i);case"attribute":return I6(e,t);default:return e[t]||0}}function Ri(e,t){var i=/^(\*=|\+=|-=)/.exec(e);if(!i)return e;var r=I4(e)||0,a=parseFloat(t),o=parseFloat(e.replace(i[0],""));switch(i[0][0]){case"+":return a+o+r;case"-":return a-o+r;case"*":return a*o+r}}function Rr(e,t){if(IG.col(e)){var i,r,a;return IG.rgb(e)?(i=/rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(e))?"rgba("+i[1]+",1)":e:IG.hex(e)?(r=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,i,r){return t+t+i+i+r+r}),"rgba("+parseInt((a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r))[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)+",1)"):IG.hsl(e)?function(e){var t,i,r,a=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(e)||/hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(e),o=parseInt(a[1],10)/360,l=parseInt(a[2],10)/100,h=parseInt(a[3],10)/100,c=a[4]||1;function d(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(t-e)*6*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}if(0==l)t=i=r=h;else{var p=h<.5?h*(1+l):h+l-h*l,f=2*h-p;t=d(f,p,o+1/3),i=d(f,p,o),r=d(f,p,o-1/3)}return"rgba("+255*t+","+255*i+","+255*r+","+c+")"}(e):void 0}if(/\s/g.test(e))return e;var o=I4(e),l=o?e.substr(0,e.length-o.length):e;return t?l+t:l}function Rs(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function Ra(e){for(var t,i=e.points,r=0,a=0;a<i.numberOfItems;a++){var o=i.getItem(a);a>0&&(r+=Rs(t,o)),t=o}return r}function Rn(e){var t;if(e.getTotalLength)return e.getTotalLength();switch(e.tagName.toLowerCase()){case"circle":return 2*Math.PI*I6(e,"r");case"rect":return 2*I6(e,"width")+2*I6(e,"height");case"line":return Rs({x:I6(e,"x1"),y:I6(e,"y1")},{x:I6(e,"x2"),y:I6(e,"y2")});case"polyline":return Ra(e);case"polygon":return t=e.points,Ra(e)+Rs(t.getItem(t.numberOfItems-1),t.getItem(0))}}function Ro(e,t){var i=t||{},r=i.el||function(e){for(var t=e.parentNode;IG.svg(t)&&IG.svg(t.parentNode);)t=t.parentNode;return t}(e),a=r.getBoundingClientRect(),o=I6(r,"viewBox"),l=a.width,h=a.height,c=i.viewBox||(o?o.split(" "):[0,0,l,h]);return{el:r,viewBox:c,x:c[0]/1,y:c[1]/1,w:l/c[2],h:h/c[3]}}function Rl(e,t){var i=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,r=Rr(IG.pth(e)?e.totalLength:e,t)+"";return{original:r,numbers:r.match(i)?r.match(i).map(Number):[0],strings:IG.str(e)||t?r.split(i):[]}}function Rh(e){return IK(e?IJ(IG.arr(e)?e.map(I$):I$(e)):[],function(e,t,i){return i.indexOf(e)===t})}function Rc(e){var t=Rh(e);return t.map(function(e,i){return{target:e,id:i,total:t.length,transforms:{list:Re(e)}}})}var Rd={css:function(e,t,i){return e.style[t]=i},attribute:function(e,t,i){return e.setAttribute(t,i)},object:function(e,t,i){return e[t]=i},transform:function(e,t,i,r,a){if(r.list.set(t,i),t===r.last||a){var o="";r.list.forEach(function(e,t){o+=t+"("+e+") "}),e.style.transform=o}}};function Ru(e,t){Rc(e).forEach(function(e){for(var i in t){var r=I5(t[i],e),a=e.target,o=I4(r),l=Rt(a,i,o,e),h=Ri(Rr(r,o||I4(l)),l);Rd[I7(a,i)](a,i,h,e.transforms,!0)}})}function Rp(e,t){var i=e.length,r=function(e){return e.timelineOffset?e.timelineOffset:0},a={};return a.duration=i?Math.max.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0,a=e.pingPongEndDelayCorrection??0;return r(e)+t+i+a+e.duration*(e.loop??1)})):t.duration,a.delay=i?Math.min.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0;return r(e)+t+i+e.delay})):t.delay,a.endDelay=i?a.duration-Math.max.apply(Math,e.map(function(e){let t=e.startOnceDelay??0,i=e.pingPongDelayCorrection??0,a=e.pingPongEndDelayCorrection??0;return r(e)+t+i+e.duration*(e.loop??1)-e.endDelay-a})):t.endDelay,a}var Rf,Rm,Rg,Rv=0,Ry=[],Rx=[],Rb=function(){let e=0,t=!0;function i(e){let r=Ry.length;if(r){let a=0;for(;a<r;){let t=Ry[a];t.paused?(Ry.splice(a,1),r--):(t.tick(e),a++)}t&&(Rg=requestAnimationFrame(i))}else Rg&&(cancelAnimationFrame(Rg),Rg=null)}return{get isUsingInternalRaf(){return t},set isUsingInternalRaf(s){t=s},play:function(){e=performance.now(),Rg=requestAnimationFrame(i)},update:function(t){i(e+=t)}}}();function Rw(e){Rb.isUsingInternalRaf&&(document.hidden?(Ry.forEach(function(t){return t.pause(e.timeStamp)}
8111),Rx=Ry.slice(0),RS.running=Ry=[]):(Rx.forEach(function(t){return t.play(e.timeStamp)}),Rx=[]))}function RS(e){void 0===e&&(e={});var t,i,r,a,o,l,h,c,d,p,f,m=0,g=0,v=0,y=0,x=null;function b(e){var t=window.Promise&&new Promise(function(e){return x=e});return e.finished=t,t}var w=(r=I2(Iz,t=e),o=function(e,t){var i=[],r=t.keyframes;for(var a in r&&(t=I3(function(e){for(var t=IK(IJ(e.map(function(e){return Object.keys(e)})),function(e){return IG.key(e)}).reduce(function(e,t){return 0>e.indexOf(t)&&e.push(t),e},[]),i={},r=0;r<t.length;r++)!function(r){var a=t[r];i[a]=e.map(function(e){var t={};for(var i in e)IG.key(i)?i==a&&(t.value=e[i]):t[i]=e[i];return t})}(r);return i}(r),t)),t)IG.key(a)&&i.push({name:a,tweens:function(e,t){var i=I1(t);if(/^spring/.test(i.easing)&&(i.duration=IH(i.easing)),IG.arr(e)){var r=e.length;2!==r||IG.obj(e[0])?IG.fnc(t.duration)||(i.duration=t.duration/r):e={value:e}}var a=IG.arr(e)?e:[e];return a.map(function(e,i){var r=IG.obj(e)&&!IG.pth(e)?e:{value:e};return IG.und(r.delay)&&(r.delay=i?0:t.delay),IG.und(r.endDelay)&&(r.endDelay=i===a.length-1?t.endDelay:0),r}).map(function(e){return I3(e,i)})}(t[a],e)});return i}(a=I2(IF,t),t),c=Rp((i=l=Rc(t.targets),h=IK(IJ(i.map(function(e){return o.map(function(t){var i=e,r=t,a=I7(i.target,r.name);if(a){var o,l=r.tweens.map(function(e){var t=function(e,t){var i={};for(var r in e){var a=I5(e[r],t);IG.arr(a)&&1===(a=a.map(function(e){return I5(e,t)})).length&&(a=a[0]),i[r]=a}return i.duration=parseFloat(i.duration),i.delay=parseFloat(i.delay),i}(e,i),a=t.value,l=IG.arr(a)?a[1]:a,h=I4(l),c=Rt(i.target,r.name,h,i),d=o?o.to.original:c,p=IG.arr(a)?a[0]:d,f=I4(p)||I4(c),m=h||f;return IG.und(l)&&(l=d),t.from=Rl(p,m),t.to=Rl(Ri(l,p),m),t.start=o?o.end:0,t.end=t.start+t.delay+t.duration+t.endDelay,t.easing=IQ(t.easing,t.duration),t.isPath=IG.pth(a),t.isColor=IG.col(t.from.original),t.isColor&&(t.round=1),o=t,t}),h=l[l.length-1];return{type:a,property:r.name,animatable:i,tweens:l,duration:h.end,delay:l[0].delay,endDelay:h.endDelay}}})})),function(e){return!IG.und(e)})),a),d=Rv,Rv++,I3(r,{id:d,children:[],animatables:l,animations:h,duration:c.duration,delay:c.delay,endDelay:c.endDelay,startOnceDelay:a.startOnceDelay,pingPongDelayCorrection:a.pingPongDelayCorrection,pingPongEndDelayCorrection:a.pingPongEndDelayCorrection}));function S(){var e=w.direction;"alternate"!==e&&(w.direction="normal"!==e?"normal":"reverse"),w.reversed=!w.reversed,f.forEach(function(e){(1===e.loop||e.loop%2==0)&&(e.reversed=w.reversed)})}function _(e,t,i=!1){t&&(w.reversed?t.seek(t.duration*t.loop-(e-t.timelineOffset-t.pingPongDelayCorrection),i):t.seek(e-t.timelineOffset-t.startOnceDelay-t.pingPongDelayCorrection,i))}function A(e){var t=0,i=w.animations,r=i.length;for("alternate"!==w.direction&&w.parent?.direction==="alternate"?w.parent?.rewind===!1&&!0===w.reversePlayback&&!1===w.rewind&&(e=w.parent?.reversed&&"alternate"===w.direction?w.duration-w.delay+w.endDelay-e:w.duration+w.delay-w.endDelay-e):E(!1,w.parent?.rewind,w.rewind,w.parent?.reversePlayback,w.reversePlayback)&&(e=w.parent?.reversed&&"alternate"===w.direction?w.duration-w.delay+w.endDelay-e:w.duration+w.delay-w.endDelay-e);t<r;){let r;var a=i[t],o=a.animatable,l=a.tweens,h=l.length-1,c=l[h];h&&(c=IK(l,function(t){return e<t.end})[0]||c),r=w.parent?.reversed&&"alternate"===w.direction?Ik(e-c.start-c.endDelay,0,c.duration)/c.duration:Ik(e-c.start-c.delay,0,c.duration)/c.duration;for(var d=isNaN(r)?1:c.easing(r),p=c.to.strings,f=c.round,m=[],g=c.to.numbers.length,v=void 0,y=0;y<g;y++){let e,t;var x=void 0;"alternate"!==w.direction?w.parent?.rewind===!1&&!0===w.reversePlayback&&!1===w.rewind?(e=c.to.numbers[y],t=c.from.numbers[y]||0):(t=c.to.numbers[y],e=c.from.numbers[y]||0):E(!0,w.parent?.rewind,w.rewind,w.parent?.reversePlayback,w.reversePlayback)?(e=c.to.numbers[y],t=c.from.numbers[y]||0):(t=c.to.numbers[y],e=c.from.numbers[y]||0),x=c.isPath?function(e,t){function i(i){void 0===i&&(i=0);var r=t+i>=1?t+i:0;return e.el.getPointAtLength(r)}var r=Ro(e.el,e.svg),a=i(),o=i(-1),l=i(1);switch(e.property){case"x":return(a.x-r.x)*r.w;case"y":return(a.y-r.y)*r.h;case"angle":return 180*Math.atan2(l.y-o.y,l.x-o.x)/Math.PI}}(c.value,d*t):e+d*(t-e),f&&(c.isColor&&y>2||(x=Math.round(x*f)/f)),m.push(x)}var b=p.length;if(b){v=p[0];for(var S=0;S<b;S++){p[S];var _=p[S+1],A=m[S];isNaN(A)||(_?v+=A+_:v+=A+" ")}}else v=m[0];Rd[a.type](o.target,a.property,v,o.transforms),a.currentValue=v,t++}}function M(e){w[e]&&!w.passThrough&&w[e](w)}b(w);let C={0:!1,1:!0,2:!1,3:!0,4:!1,5:!1,6:!1,7:!1,8:!1,9:!0,10:!0,11:!1,12:!1,13:!1,14:!0,15:!0,16:!1,17:!0,18:!0,19:!1,20:!1,21:!1,22:!0,23:!0,24:!1,25:!0,26:!1,27:!0,28:!1,29:!1,30:!1,31:!1};function E(e,t,i,r,a){return C[e<<4|t<<3|i<<2|r<<1|a]}function T(e,t=!1){var i=w.duration;let r=w.delay,a=i-w.endDelay;w.parent?.reversed&&"alternate"===w.direction&&(r=w.endDelay,a=i-w.delay);var o=w.reversed?w.duration-e:e;if(w.progress=Ik(o/i*100,0,100),t||(w.reversePlayback=o<w.currentTime),y&&function(e,t=!1){if(w.reversed)for(var i=y;i--;)_(e,f[i],t);else for(var r=0;r<y;r++)_(e,f[r],t)}(o,t),!w.began&&o>=r&&(w.began=!0),!w.loopBegan&&w.currentTime>0&&(w.loopBegan=!0,M("loopBegin")),(w.reversed||o>=0)&&o<=r&&0!==w.currentTime&&(A(0),M("change")),(o>=a&&w.currentTime!==i+w.pingPongDelayCorrection||!i)&&(A(i),M("change")),o>r&&o<a?(w.changeBegan||(w.changeBegan=!0,w.changeCompleted=!1,M("changeBegin")),A(o),M("change")):w.changeBegan?(w.changeCompleted=!0,w.changeBegan=!1,M("change"),y&&M("timelineChangeComplete")):w.began&&o>a&&M("changeComplete"),w.currentTime=Ik(o,0,i+w.pingPongDelayCorrection),w.began&&M("update"),e>=i)if(w.remaining&&!0!==w.remaining&&w.remaining--,w.remaining){for(let e of(y?m+=w.duration/RS.speed:m+=w.duration,f))e.setStartTime(0),e.remaining=e.loop;M("loopComplete"),w.loopBegan=!1,"alternate"===w.direction?S():y&&(w.direction="normal",w.reversed=!1,f.forEach(function(e){return e.reversed=!1}))}else w.paused=!0,w.completed||(w.completed=!0,M("loopComplete"),M("complete"),!w.passThrough&&"Promise"in window&&(x(),b(w)))}return w.reset=function(){var e=w.direction;w.passThrough=!1,w.currentTime=0,w.progress=0,w.paused=!0,w.began=!1,w.loopBegan=!1,w.changeBegan=!1,w.completed=!1,w.changeCompleted=!1,w.reversed="reverse"===e,w.remaining=w.loop,y=(f=w.children).length;for(var t=y;t--;)w.children[t].reset();A(w.reversed?w.duration:0)},w.setStartTime=function(e){m=e},w.set=function(e,t){return Ru(e,t),w},w.tick=function(e){v=e,m||(m=v),T((v+(g-m))*RS.speed)},w.seek=function(e,t=!1){T(e-m,t)},w.pause=function(e){w.paused=!0,y&&(p=e??performance.now())},w.play=function(e){w.paused&&(w.completed&&w.reset(),w.paused=!1,Ry.push(w),y&&void 0!==p&&(m+=(e??performance.now())-p),!Rg&&Rb.isUsingInternalRaf&&Rb.play())},w.reverse=function(e=0){S(),w.completed=!w.reversed,m=void 0,g=e},w.restart=function(){w.reset(),m=void 0,g=0,w.play()},w.destroy=function(){w.paused=!0;var e=Ry.indexOf(w);e>-1&&Ry.splice(e,1),(e=Rx.indexOf(w))>
8111-1&&Rx.splice(e,1),w.children&&w.children.forEach(function(e){e.destroy&&e.destroy()}),w.animations=[],w.animatables=[],w.children=[],w.update=null,w.begin=null,w.complete=null,w.loopBegin=null,w.loopComplete=null,w.change=null,w.changeBegin=null,w.changeComplete=null,w.timelineChangeComplete=null,w.parent=null,x=null,f=[],y=0},w.reset(),w.autoplay&&w.play(),w}function R_(e,t){for(var i=t.length;i--;)I0(e,t[i].animatable.target)&&t.splice(i,1)}RS.version="3.2.0",RS.speed=1,RS.running=Ry,RS.remove=function(e){for(var t=Rh(e),i=Ry.length;i--;){var r=Ry[i],a=r.animations,o=r.children;R_(t,a);for(var l=o.length;l--;){var h=o[l],c=h.animations;R_(t,c),c.length||h.children.length||o.splice(l,1)}a.length||o.length||r.pause()}},RS.get=Rt,RS.set=Ru,RS.convertPx=I8,RS.path=function(e,t){var i=IG.str(e)?IZ(e)[0]:e,r=t||100;return function(e){return{property:e,el:i,svg:Ro(i),totalLength:Rn(i)*(r/100)}}},RS.setDashoffset=function(e){var t=Rn(e);return e.setAttribute("stroke-dasharray",t),t},RS.stagger=function(e,t){void 0===t&&(t={});var i=t.direction||"normal",r=t.easing?IQ(t.easing):null,a=t.grid,o=t.axis,l=t.from||0,h="first"===l,c="center"===l,d="last"===l,p=IG.arr(e),f=parseFloat(p?e[0]:e),m=p?parseFloat(e[1]):0,g=I4(p?e[1]:e)||0,v=t.start||0+(p?f:0),y=[],x=0;return function(e,t,b){if(h&&(l=0),c&&(l=(b-1)/2),d&&(l=b-1),!y.length){for(var w=0;w<b;w++){if(a){var S=c?(a[0]-1)/2:l%a[0],_=c?(a[1]-1)/2:Math.floor(l/a[0]),A=w%a[0],M=Math.floor(w/a[0]),C=S-A,E=_-M,T=Math.sqrt(C*C+E*E);"x"===o&&(T=-C),"y"===o&&(T=-E),y.push(T)}else y.push(Math.abs(l-w));x=Math.max.apply(Math,y)}r&&(y=y.map(function(e){return r(e/x)*x})),"reverse"===i&&(y=y.map(function(e){return o?e<0?-1*e:-e:Math.abs(x-e)}))}return v+(p?(m-f)/x:f)*(Math.round(100*y[t])/100)+g}},RS.timeline=function(e){void 0===e&&(e={});var t=RS(e);return t.duration=0,t.add=function(i,r){var a=Ry.indexOf(t),o=t.children;function l(e){e.passThrough=!0}a>-1&&Ry.splice(a,1);for(var h=0;h<o.length;h++)l(o[h]);var c=I3(i,I2(IF,e));c.targets=c.targets||e.targets;var d=t.duration;c.autoplay=!1,c.timelineOffset=IG.und(r)?d:Ri(r,d),l(t);var p=RS(c);l(p),o.push(p),p.parent=t;var f=Rp(o,e);return t.delay=f.delay,t.endDelay=f.endDelay,t.duration=f.duration,!0===p.loop&&(t.duration=1/0),t.seek(0),t.reset(),t.autoplay&&t.play(),t},t},RS.easing=IQ,RS.penner=IY,RS.random=function(e,t){return Math.floor(Math.random()*(t-e+1))+e},RS.removeAll=function(){Ry.forEach(function(e){e.destroy&&e.destroy()}),Rx=[],RS.running=Ry=[],Rg&&(cancelAnimationFrame(Rg),Rg=null)},RS.clearCache=function(){IU.CSS={},IU.springs={}},RS.init=function(){"u">typeof document&&(document.removeEventListener("visibilitychange",Rw),document.addEventListener("visibilitychange",Rw))},RS.dispose=function(e){RS.removeAll(),RS.clearCache(),document.removeEventListener("visibilitychange",Rw)};var RA=RS,{degToRad:RM,radToDeg:RC}=t8,RE=new iD,RT=new iD,RP=new iP;function RD(e,t,i,r,a,o){let l=void 0!==i[e]?i[e]:void 0,h=r[e];if(null==h)return;let c=null!=l?"string"==typeof l?Number(a.getVariable(l)??0):l:t[e],d="string"==typeof h?Number(a.getVariable(h)??0):h;if(c!==d)return{update:i=>{let r=t8.lerp(c,d,i);o?t[e]=Math.trunc(r):t[e]=r},start:()=>{t[e]=c},end:()=>{t[e]=d}}}function RO(e,t,i,r,a,o){let l=i[e]?i[e]:void 0,h=r[e];if(!h)return;let c=t[e],d=[...l??c].map(e=>"string"==typeof e?Number(a.getVariable(e)??0):e),p=[...h].map(e=>"string"==typeof e?Number(a.getVariable(e)??0):e);if(!(d.length!==p.length||pt(d,p)))return{update:i=>{d.forEach((r,a)=>{let l=t8.lerp(r,p[a],i);t[e][a]=o?Math.trunc(l):l})},start:()=>{Object.assign(t[e],d)},end:()=>{Object.assign(t[e],p)}}}function RI(e,t,i){return t.forEach((t,r)=>{e.setComponent(r,"string"==typeof t?Number(i.getVariable(t)??0):t)}),e}function RR(e,t,i,r,a){let o=i[e]?i[e]:void 0,l=r[e];if(!l)return;let h=t[e],c=o?RI(new iD,o,a):h.clone(),d=RI(new iD,l,a);if(!c.equals(d))return{update:e=>{h.lerpVectors(c,d,e)},start:()=>{h.copy(c)},end:()=>{h.copy(d)}}}function RL(e,t,i){return t.forEach((t,r)=>{e.setComponent(r,"string"==typeof t?Number(i.getVariable(t)??0):t)}),e}function RB(e,t,i,r,a){let o=i[e]?i[e]:void 0,l=r[e];if(!l)return;let h=t[e],c=!(h instanceof t9),d=h instanceof t9?h:new t9().fromArray(h),p=o?RL(new t9,o,a):d.clone(),f=RL(new t9,l,a);if(!p.equals(f))return{update:i=>{d.lerpVectors(p,f,i),c&&(t[e]=d.toArray())},start:()=>{d.copy(p),c&&(t[e]=d.toArray())},end:()=>{d.copy(f),c&&(t[e]=d.toArray())}}}function Rz(e,t,i,r,a){let o=i[e]?i[e]:void 0,l=r[e];if(!l)return;let h=t[e],c=new _0(h.r,h.g,h.b,h.a),d=o?"string"==typeof o?a.getColor(o).clone():new _0(o.r,o.g,o.b,o.a):c.clone(),p="string"==typeof l?a.getColor(l).clone():new _0(l.r,l.g,l.b,l.a);if(!d.equals(p))return{update:i=>{c.lerpColors(d,p,i),c.a=t8.lerp(d.a,p.a,i),t[e]={r:c.r,g:c.g,b:c.b,a:c.a}},start:()=>{c.copy(d)},end:()=>{c.copy(p)}}}function RF(e,t,i,r,a){return"number"==typeof t[e]?RD(e,t,i??{},r,a):Array.isArray(t[e])?RO(e,t,i??{},r,a):void 0}function RN(e,t,i,r,a){let o=i[e],l=r[e];if("number"==typeof t[e])Math.abs(o-l)>1e-4&&(t[e]=t8.lerp(o,l,a));else if(Array.isArray(t[e]))for(let i=0,r=o.length;i<r;i++)t[e][i]=t8.lerp(o[i],l[i],a)}new rn;var RU=["voronoiStyle"];function Rk(e,t,i,r){var a,o;let l=[],h=Ce(i,r)||!!t.layers&&Ce(t,r);for(let c of(l.push((a=e,o=h,{update:()=>
8111{a.setTransparent(o)}})),e.layers)){let e=t.layers?.data(c.uuid),a=i.layers.data(c.uuid);if(a&&("light"===c.type||(c.visible??!0)&&(a.visible??!0)))for(let t of c.getNames().filter(e=>!vc.some(t=>e.includes(t))))try{let i=c.getValue(t),o;if("colors"===t)o=function(e,t,i,r="colors"){if(!e.hasValue(r)||!(r in i))return;let a=[],o=e.getValue(r),l=t?t[r]:o.map(e=>e.toArray()),h=i[r];for(let e=0;e<o.length;++e){let t=[...l[e]],i=[...h[e]];gM.isEqual(t,i)||a.push({update:r=>{o[e].fromArray(gM.lerp(t,i,r))},start:()=>{o[e].fromArray(t)},end:()=>{o[e].fromArray(i)}})}return a.length?a:void 0}(c,e,a,t);else if(Array.isArray(i))"steps"===t&&(o=RH(c,e,a,t));else if("number"==typeof i)o=RV(c,e,a,t,r,RU.includes(t));else{if("boolean"==typeof i)continue;i instanceof t9?o=Rj(c,e,a,t):i instanceof iD?o=RG(c,e,a,t,r):i instanceof _0?o=function(e,t,i,r,a){if(!e.hasValue(r)||!(r in i))return;let o=t?t[r]:void 0,l=i[r],h=e.getValue(r),c=o?"string"==typeof o?a.color(o).clone():new iv().setRGB(o.r,o.g,o.b):h.clone(),d="string"==typeof l?a.getColor(l).clone():new _0(l.r,l.g,l.b,l.a);if(c.equals(d))return;let p=h.clone();return{update:t=>{e.getValue(r)!==p&&e.setValue(r,p),p.lerpColors(c,d,t)},start:()=>{p.copy(c)},end:()=>{p.copy(d)}}}(c,e,a,t,r):i instanceof iv?o=RW(c,e,a,t,r):"isTexture"in i&&(o=Rq(c,e,a,t))}o&&(Array.isArray(o)?l.push(...o):l.push(o))}catch{}}return l}function RV(e,t,i,r,a,o=!1){if(!e.hasValue(r)||!(r in i))return;let l=t?t[r]:e.getValue(r),h=i[r],c="string"==typeof l?Number(a.getVariable(l)??0):l,d="string"==typeof h?Number(a.getVariable(h)??0):h;return{update:t=>{e.setValue(r,o?t<.5?c:d:t8.lerp(c,d,t))},start:()=>{e.setValue(r,c)},end:()=>{e.setValue(r,d)}}}function Rj(e,t,i,r){if(!e.hasValue(r)||!(r in i))return;let a=e.getValue(r),o=t?new t9().fromArray(t[r]):a.clone(),l=new t9().fromArray(i[r]);if(!o.equals(l))return{update:e=>{a.lerpVectors(o,l,e)},start:()=>{a.copy(o)},end:()=>{a.copy(l)}}}function RG(e,t,i,r,a){if(!e.hasValue(r)||!(r in i))return;let o=e.getValue(r),l=t?t[r]:void 0,h=i[r],c=l?RI(new iD,l,a):o.clone(),d=RI(new iD,h,a);if(!c.equals(d))return{update:e=>{o.lerpVectors(c,d,e)},start:()=>{o.copy(c)},end:()=>{o.copy(d)}}}function RW(e,t,i,r,a){if(!e.hasValue(r)||!(r in i))return;let o=t?t[r]:void 0,l=i[r],h=e.getValue(r),c=o?"string"==typeof o?a.getColor(o).clone():new iv().setRGB(o.r,o.g,o.b):h.clone(),d="string"==typeof l?a.getColor(l).clone():new iv().setRGB(l.r,l.g,l.b);if(c.equals(d))return;let p=h.clone();return{update:t=>{e.getValue(r)!==p&&e.setValue(r,p),p.lerpColors(c,d,t)},start:()=>{p.copy(c)},end:()=>{p.copy(d)}}}function RH(e,t,i,r="steps"){if(!e.hasValue(r)||!(r in i))return;let a=[],o=e.getValue(r),l=t?t[r]:o,h=i[r];return pt(l,h)||a.push({update:t=>{let i=[...o];for(let e=0;e<o.length;++e){let r=l[e],a=h[e];i[e]=t8.lerp(r,a,t)}e.setValue(r,i)},start:()=>{e.setValue(r,l)},end:()=>{e.setValue(r,h)}}),a.length?a:void 0}function Rq(e,t,i,r="texture"){if(!e.hasValue(r)||!(r in i))return;let a=e.getNode("rotation"),o=t?.[r]?.rotation??0,l=i[r]?.rotation??0;if(a&&o!==l)return{update:e=>{a.value=t8.lerp(o,l,e)*t8.DEG2RAD},start:()=>{a.value=o*t8.DEG2RAD},end:()=>{a.value=l*t8.DEG2RAD}};let h=e.getNode("mat");if(!h)return;let c=t?t[r]:h,d=i[r],p=[...c.repeat],f=[...c.offset],m=[...d.repeat],g=[...d.offset],v=c.rotation??0,y=d.rotation??0;if(!gm.isEqual(p,m)||!gm.isEqual(f,g)||v!==y)return{update:e=>{h.repeat=gm.lerp(p,m,e),h.offset=gm.lerp(f,g,e),h.rotation=t8.lerp(v,y,e),h.updateMatrix()},start:()=>{h.repeat=[...p],h.offset=[...f],h.rotation=v,h.updateMatrix()},end:()=>{h.repeat=[...m],h.offset=[...g],h.rotation=y,h.updateMatrix()}}}function RX(e,t,i,r,a,o,l){if("color"===e)RW(t,i,r,e,l)?.update(a);else if(Array.isArray(o))"steps"===e&&RH(t,i,r,e)?.forEach(e=>e.update(a));else if("number"==typeof o)RV(t,i,r,e,l)?.update(a);else{if("boolean"==typeof o)return;o instanceof t9?Rj(t,i,r,e)?.update(a):o instanceof iD?RG(t,i,r,e,l)?.update(a):"isTexture"in o&&Rq(t,i,r,e)?.update(a)}}var RY=new iD,RQ=new rn;function RZ(e,t,i,r,a){let o=[];return e.data.visible&&o.push(...function(e,t,i,r,a){let o=[],l,h,c,d,p,f,m,g;if(e instanceof Do?((l=RB("position",e,t,i,a))&&o.push(l),(c=RD("rotation",e,t,i,a))&&o.push(c),(d=RB("shear",e,t,i,a))&&o.push(d)):((f=RD("slide",g={slide:t.pathSnapping?.slide??e.updatedPathSnapping?.slide??e.dataPatched.pathSnapping?.slide??0,offset:t.pathSnapping?.offset??e.updatedPathSnapping?.offset??e.dataPatched.pathSnapping?.offset??0},t.pathSnapping??e.updatedPathSnapping??e.dataPatched.pathSnapping,i.pathSnapping??e.dataPatched.pathSnapping,a))&&o.push(f),(m=RD("offset",g,t.pathSnapping??e.updatedPathSnapping??e.dataPatched.pathSnapping,i.pathSnapping??e.dataPatched.pathSnapping,a))&&o.push(m),f||m||((l=RR("position",e,t,i,a))&&o.push(l),(h=RR("scale",e,t,i,a))&&o.push(h),(c=function(e,t,i,r,a){let o=t?.rotation?t.rotation.map(e=>("string"==typeof e?Number(a.getVariable(e)??0):e)*t8.DEG2RAD):void 0,l=i.rotation?.map(e=>("string"==typeof e?Number(a.getVariable(e)??0):e)*t8.DEG2RAD);if(!l)return;let h=o?new iD().fromArray(o):new iD().setFromEuler(e.rotation),c=new iD().fromArray(l);if(h.equals(c))return;let d=RY.subVectors(c,h);if(!(r&&d.toArray().every(e=>Math.abs(e)<2*Math.PI)))return{update:t=>{RY.lerpVectors(h,c,t),e.rotation.setFromVector3(RY)},start:()=>{e.rotation.setFromVector3(h)},end:()=>{e.rotation.setFromVector3(c)}};{let t=new iP().setFromEuler(RQ.setFromVector3(h)),i=new iP().setFromEuler(RQ.setFromVector3(c));return{update:r=>{!function(e,t,i,r){if(0===r)return i.copy(e);if(1===r)return i.copy(t);let a=e.w*t.w+e.x*t.x+e.y*t.y+e.z*t.z;if(a>=1)return i.copy(e);let o=1-a*a;if(o<=Number.EPSILON){let a=1-r;
8111return i.w=a*e.w+r*t.w,i.x=a*e.x+r*t.x,i.y=a*e.y+r*t.y,i.z=a*e.z+r*t.z,i.normalize()}let l=Math.sqrt(o),h=Math.atan2(l,a),c=Math.sin((1-r)*h)/l,d=Math.sin(r*h)/l;i.w=e.w*c+t.w*d,i.x=e.x*c+t.x*d,i.y=e.y*c+t.y*d,i.z=e.z*c+t.z*d}(t,i,e.quaternion,r)},start:()=>{e.rotation.setFromVector3(h)},end:()=>{e.rotation.setFromVector3(c)}}}}(e,t,i,r,a))&&o.push(c),(p=function(e,t,i,r){let a=i[e]?i[e]:void 0,o=r[e];if(!o)return;let l=t[e],h=a?new i6().fromArray(a):l.clone(),c=new iD,d=new iP,p=new iD;h.decompose(c,d,p);let f=new i6().fromArray(o),m=new iD,g=new iP,v=new iD;if(f.decompose(m,g,v),!h.equals(f))return{update:e=>{RP.slerpQuaternions(d,g,e),RE.lerpVectors(c,m,e),RT.lerpVectors(p,v,e),l.compose(RE,RP,RT)},start:()=>{l.compose(c,d,p)},end:()=>{l.compose(m,g,v)}}}("hiddenMatrix",e,t,i))&&o.push(p))),l||h||c||p||f||m){let i=e instanceof Do?()=>{e.updateWorldMatrix(!0,!1,!0),e.resetBBoxNeedsUpdate()}:()=>{e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD()),e.parent?.matrixWorldFusedFalse&&(e.matrixWorld.multiplyMatrices(e.parent.matrixWorldFusedFalse,e.matrix),e.matrixWorldNeedsUpdate=!1),EY(e)&&EQ(e.parent)&&e.invali
8111dateDownstreamBooleanData(!0),e.updatePathSnapping(Object.assign({},t.pathSnapping,g))};o.push({update:i,start:i,end:i})}return o}(e,t,i,a,r.shared)),e instanceof Do?o.push(...function(e,t,i,r){let a=[],o,l,h,c,d,p,f,m,g,v,y,x,b,w,S;if("width"in e&&(o=RD("width",e,t,i,r))&&a.push(o),"height"in e&&(l=RD("height",e,t,i,r))&&a.push(l),e instanceof DP||e instanceof Dz){let o={...t.fill},l={...i.fill};void 0!==o.enabled&&o.enabled!==l.enabled&&(a.push({update:()=>{e instanceof DP&&(e.fill.enabled=!0)}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}}),l.enabled||Object.assign(l,{enabled:!0,color:{...l.color,a:0}})),(h=Rz("color",e.fill,o,l,r))&&a.push(h)}if(e instanceof DP){let o={...t.stroke},l={...i.stroke};(o.enabled||l.enabled)&&(a.push({update:()=>{e instanceof DP&&(e.stroke.enabled=!0)}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}}),l.enabled||Object.assign(l,{enabled:!0,color:{...l.color,a:0}})),(c=Rz("color",e.stroke,o,l,r))&&a.push(c),(d=RD("thickness",e.stroke,o,l,r))&&a.push(d)}if(e instanceof DP){let o={...t.dropShadow},l={...i.dropShadow};(o.enabled||l.enabled)&&(a.push({update:()=>{e instanceof DP&&(e.dropShadow.enabled=!0)}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}}),l.enabled||Object.assign(l,{enabled:!0,color:{...l.color,a:0}})),(p=Rz("color",e.dropShadow,o,l,r))&&a.push(p),(f=RD("blurRadius",e.dropShadow,o,l,r))&&a.push(f),(g=RD("spread",e.dropShadow,o,l,r))&&a.push(g),(m=RB("offset",e.dropShadow,o,l,r))&&a.push(m)}if(e instanceof DP){let o={...t.innerShadow},l={...i.innerShadow};(o.enabled||l.enabled)&&(a.push({update:()=>{e instanceof DP&&(e.innerShadow.enabled=!0)}}),o.enabled||Object.assign(o,{enabled:!0,color:{...o.color,a:0}}),l.enabled||Object.assign(l,{enabled:!0,color:{...l.color,a:0}})),(v=Rz("color",e.innerShadow,o,l,r))&&a.push(v),(y=RD("blurRadius",e.innerShadow,o,l,r))&&a.push(y),(b=RD("spread",e.innerShadow,o,l,r))&&a.push(b),(x=RB("offset",e.innerShadow,o,l,r))&&a.push(x)}if(e instanceof DP||e instanceof Dz){let o={...t.backgroundBlur},l={...i.backgroundBlur};(o.enabled||l.enabled)&&(a.push({update:()=>{e instanceof DP&&(e.backgroundBlur.enabled=!0)}}),o.enabled||Object.assign(o,{enabled:!0,radius:0}),l.enabled||Object.assign(l,{enabled:!0,radius:0})),(w=RD("radius",e.backgroundBlur,o,l,r))&&a.push(w)}if(e instanceof DP){let o={...t.layerBlur},l={...i.layerBlur};(o.enabled||l.enabled)&&(a.push({update:()=>{e instanceof DP&&(e.layerBlur.enabled=!0)}}),o.enabled||Object.assign(o,{enabled:!0,radius:0}),l.enabled||Object.assign(l,{enabled:!0,radius:0})),(S=RD("radius",e.layerBlur,o,l,r))&&a.push(S)}if(e instanceof Dz||e instanceof DO){let o=RO("cornerRadius",e,t,i,r);o&&a.push(o)}return a}(e,t,i,r.shared)):(e.data.visible&&o.push(...function(e,t,i,r){let a=[];if(!("cloner"in i)||!e.cloner)return a;let o=e.cloner,l="cloner"in t?t.cloner:{},h=i.cloner;gL.forEach(e=>{let t;(t="count"===e?RD("count",o.parameters,l,h,r.shared,!0):RF(e,o.parameters,l??{},h,r.shared))&&a.push(t)});let c=function(e,t,i,r){if("radial"!==e.parameters.type)return;let a=t.radial,o=i.radial;if(!o)return;let l=e.parameters.radial,h=[];return gB.forEach(e=>{let t=RF(e,l,a??{},o,r);t&&h.push(t)}),h}(o,l,h,r.shared);c?.length&&a.push(...c);let d=function(e,t,i,r){if("linear"!==e.parameters.type)return;let a=t.linear,o=i.linear;if(!o)return;let l=[],h=e.parameters.linear;return gz.forEach(e=>{let t=RF(e,h,a??{},o,r);t&&l.push(t)}),l}(o,l,h,r.shared);d?.length&&a.push(...d);let p=function(e,t,i,r){if("grid"!==e.parameters.type)return;let a=t.grid,o=i.grid;if(!o)return;let l=[],h=e.parameters.grid;return gF.forEach(e=>{let t;(t="count"===e?RO(e,h,a??{},o,r,!0):RF(e,h,a??{},o,r))&&l.push(t)}),l}(o,l,h,r.shared);p?.length&&a.push(...p);let f=function(e,t,i,r){if("toObject"!==e.parameters.type)return;let a=t.toObject,o=i.toObject;if(!o)return;let l=[],h=e.parameters.toObject;return gN.forEach(e=>{let t;(t="count"===e?RD(e,h,a??{},o,r,!0):RF(e,h,a??{},o,r))&&l.push(t)}),l}(o,l,h,r.shared);f?.length&&a.push(...f);let m=function(e,t,i,r){if(!e.parameters.randomness)return;let a=t.randomnessObject,o=i.randomnessObject;if(!o)return;let l=[],h=e.parameters.randomnessObject;
vendor: 4,099 bytes, line 8111
8111return gU.forEach(e=>{let t=RF(e,h,a??{},o,r);t&&l.push(t)}),l}(o,l,h,r.shared);return m?.length&&a.push(...m),a.length&&a.push({update:()=>{o.update(r)}}),a}(e,t,i,r)),e instanceof _H?(e instanceof CH&&e.data.visible&&o.push(...function(e,t,i,r){let a=[];if(!("geometry"in i))return a;let o=e.geometry.userData.parameters,l="geometry"in t?t.geometry:{},h=i.geometry;if(e instanceof CZ){let t=function(e,t,i,r){if(void 0===i.scaleBaked)return;let a=(t.scaleBaked??e.data.geometry.scaleBaked).map(e=>"string"==typeof e?Number(r.shared.getVariable(e)??0):e),o=i.scaleBaked.map(e=>"string"==typeof e?Number(r.shared.getVariable(e)??0):e);if(gA.isEqual(a,o))return;let l=[];return l.push({update:t=>{e.updateGeometryInteractions({scaleBaked:[t8.lerp(a[0],o[0],t),t8.lerp(a[1],o[1],t),t8.lerp(a[2],o[2],t)]},r.shared),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions(r)},start:()=>{e.updateGeometryInteractions({scaleBaked:a},r.shared),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions(r)},end:()=>{e.updateGeometryInteractions({scaleBaked:o},r.shared),e.invalidateDownstreamBooleanData(),e.refreshAttachedClonersInteractions(r)}}),l}(e,l,h,r);t&&a.push(...t)}else{let t={};if(Object.assign(t,pl(o,vv),pl(l,vv)),vv.forEach(e=>{let i=RF(e,t,l,h,r.shared);i&&a.push(i)}),e instanceof D3){Object.assign(t,{extrusion:{...o.extrusion}});let e=function(e,t,i,r){if(!i.extrusion)return;let a=e.extrusion,o=t.extrusion??{},l=i.extrusion,h=[];return vg.forEach(e=>{let t=RF(e,a,o,l,r);t&&h.push(t)}),h}(t,l,h,r.shared);e&&a.push(...e)}a.length&&a.push({update:i=>{e.updateGeometryInteractions(t,r.shared),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions(r)},start:i=>{e.updateGeometryInteractions(t,r.shared),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions(r)},end:i=>{e.updateGeometryInteractions(t,r.shared),e.updateGeometryGroupsIfNeeded(),e.refreshAttachedClonersInteractions(r)}})}return a}(e,t,i,r)),e.data.visible&&o.push(...function(e,t,i,r){let a=[];if(Array.isArray(e.material)){if(!("materials"in i&&i.materials))return a;let o="materials"in t&&t.materials?t.materials:[],l=i.materials;e.material.forEach((e,t)=>{if(!l[t])return;let i=o[t]??{},h=l[t];"string"==typeof i||"string"==typeof h||a.push(...Rk(e,i,h,r))})}else{if(!("material"in i&&i.material))return a;let o="material"in t&&t.material?t.material:{},l=i.material;if("string"==typeof o||"string"==typeof l)return a;a.push(...Rk(e.material,o,l,r))}return a}(e,t,i,r.shared))):Dr.is(e)?e.data.visible&&o.push(...function(e,t,i,r){let a=[];if(void 0!==i.intensity){let o=RD("intensity",e,t,i,r);o&&a.push(o)}if(void 0!==i.color){let o=function(e,t,i,r,a){let o=i[e]?i[e]:void 0,l=r[e];if(!l)return;let h=t[e],c=o?"string"==typeof o?a.getColor(o).clone():new iv().setRGB(o.r,o.g,o.b):h.clone(),d="string"==typeof l?a.getColor(l).clone():new iv().setRGB(l.r,l.g,l.b);if(c.equals(d))return;let p=h.clone();return{update:i=>{p.lerpColors(c,d,i),t[e]?.copy?.(p)},start:()=>{p.copy(c)},end:()=>{p.copy(d)}}}("color",e,t,i,r);o&&a.push(o)}return a}(e,t,i,r.shared)):e instanceof Ej&&o.push(...function(e,t,i,r){let a=[],o="OrthographicCamera"===e.cameraType?t.orthographic?.zoom:t.perspective?.zoom,l="OrthographicCamera"===e.cameraType?i.orthographic?.zoom:i.perspective?.zoom;if(void 0!==l){let t=o??e.zoom;t!==l&&a.push({update:i=>{e.zoom=t8.lerp(t,l,i),e.updateProjectionMatrix()},start:()=>{e.zoom=t,e.updateProjectionMatrix()},end:()=>{e.zoom=l,e.updateProjectionMatrix()}})}if(void 0!==i.targetOffset){let o=RD("targetOffset",e,t,i,r);o&&a.push(o)}return a}(e,t,i,r.shared))),o.length?{update:e=>{o.forEach(t=>t.update(e))},start:e=>{o.forEach(t=>t.start?.(e))},end:e=>{o.forEach(t=>t.end?.(e))}}:void 0}var RK=new iD;function RJ(e,t,i=!1){let r=[],a=i=>{let r=i.data;for(let e of(delete i.states,i.currentState=null,i.reversibleToState=null,i.currentTransitionEvent=null,r.states)){let t={...e.data};i.states||(i.states={}),i.states[e.id]=xV.patch(r,t)}R0(e.scene,i,null,t,void 0!==r.events.find(e=>"Follow"===e.data.type||"LookAt"===e.data.type)),R$(e)};
8111e.scene.traverse2D(a),e.traverseChildren(o=>{if(i&&(o.rigidBody?.setTranslation(o.position0,!0),o.rigidBody?.setRotation(o.rotation0,!0),o.rigidBody?.setLinvel(RK,!0),o.rigidBody?.setAngvel(RK,!0)),!S7.is(o))return;let l=o.uuid,h=o.data;if(delete o.states,o.uuid===gg)return;let c=!1;for(let t of(r.some(t=>e.scene.find(l)?.isDescendantOf(t))?c=!0:h.physics?.fusedBody===!0&&"dynamic"===h.physics.rigidBody&&r.push(l),o.data=h,o.currentState=null,o.reversibleToState=null,o.currentTransitionEvent=null,h.states)){let i={...t.data};!0===e.data.globalPhysics.usePhysics&&h.physics&&("dynamic"===h.physics.rigidBody||c)&&(void 0!==t.data.position&&delete i.position,void 0!==t.data.rotation&&delete i.rotation,void 0!==t.data.hiddenMatrix&&delete i.hiddenMatrix),o.states||(o.states={}),o.states[t.id]=xm.patch(h,i)}R0(e.scene,o,null,t,void 0!==h.events.find(e=>"Follow"===e.data.type||"LookAt"===e.data.type)),o instanceof D7&&o.frame&&(o.frame.traverse(e=>a(e)),o.uiCanvas?.applySize())}),R$(e),e.frame&&(e.frame.traverse(e=>a(e)),e.uiCanvas?.applySize())}function R$(e){e.traverseEntity(t=>{for(let i of t.data.events){let t=[];switch(i.data.type){case"Follow":case"MouseHover":case"Scroll":case"MouseDown":case"MouseUp":case"MousePress":case"KeyUp":case"KeyDown":case"KeyPress":case"Collision":t.push(...i.data.actions);break;case"GameControl":for(let e of Object.values(i.data.gameActions))t.push(...e);break;case"DragDrop":t.push(...i.data.dragDropActions.drag,...i.data.dragDropActions.drop);break;case"Conditional":t.push(...i.data.inActions,...i.data.outActions)}for(let i of t)if("Create"===i.data.type&&"Yes"===i.data.hideBase){let t=e.scene.find(i.data.object);t&&(t.visible=!1)}}})}function R0(e,t,i,r,a=!1){if(t instanceof CH&&!(t instanceof OP)&&t.removeInteractionGeometry(r),t instanceof Do?t.changeSelectedState(i,{shared:r},a):t.changeSelectedState(i,{scene:e,shared:r},a),t instanceof CH&&t.updateGeometryGroupsIfNeeded(),t instanceof Ej&&t.updateCameraState(t.dataPatched,{scene:e,shared:r}),!(t instanceof Do)){if(t.cloner)for(let e of t.cloner.children)e.playModeVisible=void 0;t.updateVisible()}}function R1(e,t,i,r){if(t){let a={},o=[...t.keyframes??[]].sort((e,t)=>e.data.time-t.data.time);if("data"in e){let t=o[0];t&&i?.(t.data.value,e),a={index:[],t:[]};for(let e=0;e<o.length-1;e++){let t=o[e],i=o[e+1]??t,r={duration:(i?.data?.time-t.data.time)*1e3,delay:0===e?1e3*o[0].data.time:0};a.t.push({...r,value:+(e%2==0),easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(i.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters)}),a.index.push({...r,value:e,easing:"linear"})}if(o.length>1){let t={t:0,index:0};return{targets:t,...a,update:()=>{let a=Math.ceil(t.index),l=a%2==0?t.t:1-t.t,h=o?.[Math.min(a,o.length-1)].data.value,c=o?.[Math.min(a,o.length-1)+1]?.data.value,d={},p={};if(Object.keys(h).length>0&&Object.keys(c).length>0){for(let t in e.data)if(t in h&&t in c){let e=R2(h[t],c[t],l,r);void 0!==e&&(d[t]=e,p[t]={start:h,end:c,t:l})}}i?.({...d},e,p)}}}}}}function R2(e,t,i,r){if("string"==typeof e&&r&&(e=r.color(e)),"string"==typeof t&&r&&(e=r.color(t)),"number"==typeof e)return t8.lerp(e,t,i);if(gP.is(e))return gP.lerp(e,t,i);if(gT.is(e))return gT.lerp(e,t,i);if(Array.isArray(e))return(e.length>t.length?t:e).map((r,a)=>{if(Array.isArray(r)){let r=e[a].length>t[a].length?t[a].length:e[a].length;return(4===r?gM:3===r?gA:gm).lerp(e[a],t[a],i)}return t8.lerp(e[a],t[a],i)});if("object"==typeof e&&null!==e){let a={};for(let o in e){let l=R2(e[o],t[o],i,r);void 0!==l&&(a[o]=l)}return a}}function R3(e){let t;if(5===e.easing){let{control1:i,control2:r}=e;t=`cubicBezier( 8112 ${i[0]}, ${i[1]}, ${r[0]}, ${r[1]} 8113 )`}else if(6===e.easing){let{mass:i,stiffness:r,damping:a,velocity:o}=e;t=`spring( ${i}, ${r}, ${a}, ${o} )`}else{let i;switch(e.easing){case 0:default:i=gq.linear;break;case 1:i=gq.ease;break;case 2:i=gq.easeIn;break;case 3:i=gq.easeOut;break;case 4:i=gq.easeInOut}let[r,a,o,l]=i;t=`cubicBezier( ${r}, ${a}, ${o}, ${l} )`}return{duration:Math.max(e.duration,1e-4),easing:t}}function R4(e){let t={delay:0,loop:-1===e.repeat||e.repeat+1};if(0===e.repeat)t.direction="normal",t.rewind=!1;else switch(e.direction){case"pingpong":t.direction="alternate",t.rewind=!1;break;case"pingpong-rewind":t.direction="alternate",t.rewind=!0;break;default:t.direction="normal",t.rewind=!1}switch(t.delay=0,t.endDelay=0,t.startOnceDelay=0,t.pingPongDelayCorrection=0,t.pingPongEndDelayCorrection=0,e.delayDirection){case"start-once":t.startOnceDelay=e.delay;break;case"start":t.delay=e.delay;break;case"end":t.endDelay=e.delay;break;case"start-end":case void 0:t.delay=e.delay,t.endDelay=e.delay}return"alternate"===t.direction&&(t.delay/=2,t.endDelay/=2,"start"===e.delayDirection?(t.pingPongDelayCorrection=t.delay,"number"==typeof t.loop&&t.loop%2==0&&(t.pingPongEndDelayCorrection=t.delay)):"end"===e.delayDirection?"number"==typeof t.loop&&t.loop%2!=0&&(t.pingPongEndDelayCorrection=t.endDelay):"start-end"===e.delayDirection&&(t.pingPongDelayCorrection=t.delay,t.pingPongEndDelayCorrection=t.endDelay)),t}var R5={type:"beginState"},R6={type:"completeState",isfromEntity:!1},R8=class{constructor(e,t,i,r,a,o,l){if(this.object=e,this.data=r,this.sharedAssets=a,this.allowSlerp=o,this.page=l,this.targets={t:0},this.firstLoop=!0,this._changeBegan=!1,this._changeCompleted=!0,this.onChange=()=>{if(0===this.data.duration){let e=this.targets.t>=.5?this.to.id:this.from.id;this.object instanceof Do?this.object.changeSelectedState(e,{shared:this.sharedAssets}):this.object.changeSelectedState(e,{scene:this.page.scene,shared:this.sharedAssets}),this.object.requestRender(),this._changeBegan||(this._changeBegan=!0,this._changeCompleted=!1,this.onChangeBegin()),this._changeCompleted||(this._changeCompleted=!0,this._changeBegan=!1,this.onChangeComplete());return}this.callback&&(this.callback.update(this.targets.t),this.object.requestRender()),0===this.targets.t||1===this.targets.t?this._changeCompleted||(this._changeCompleted=!0,this._changeBegan=!1,this.onChangeComplete()):(this._changeCompleted&&(this._changeCompleted=!1),this._changeBegan||(this._changeBegan=!0,this.onChangeBegin()))},this.onChangeBegin=()=>{this.object.reversibleToState=this.to.id;let e=this.targets.t>.5?this.from.id:this.to.id;this.object.prevState!==this.object.currentState&&(this.object.prevState=this.object.currentState),this.object.currentState=e,this.object.dispatchEvent({type:"beginState",state:e}),this.object instanceof Do||this.object.traverseEntity(e=>{e!==this.object&&e instanceof Ej&&e.dispatchEvent(R5)})},this.onChangeComplete=()=>{this.firstLoop&&(this.onFirstLoop(),this.firstLoop=!1),this.object.reversibleToState=this.to.id;let e=this.targets.t<.5?this.from.id:this.to.id;this.object.prevState!==this.object.currentState&&(this.object.prevState=this.object.currentState),this.object.currentState=e,this.object.dispatchEvent({type:"completeState",state:e}),this.object instanceof Do||this.object.traverseEntity(e=>{e!==this.object&&e instanceof Ej&&e.dispatchEvent(R6)})},this.onFirstLoop=()=>{this.useCurrentState&&(this.callback=RZ(this.object,this.from.data,this.to.data,{scene:this.page.scene,shared:this.sharedAssets},this.allowSlerp))},void 0===t){let e=R7(this.object,this.object.currentState===i?this.object.prevState:this.object.currentState);if(!e)throw Error("Missing property");this.from=e}else{let e=R7(this.object,t);if(!e)throw Error("Missing property");this.from=e}if(void 0===i)throw Error("Missing property");{let e=R7(this.object,i);if(!e)throw Error("Missing property");this.to=e}this.useCurrentState=void 0===t||void 0===i,this.params={targets:this.targets,t:1,autoplay:!1,...R4(r),...R3(r),change:this.onChange},this.callback=RZ(this.object,void 0===t?{}:this.from.data,void 0===i?{}:this.to.data,{scene:this.page.scene,shared:this.sharedAssets},this.allowSlerp)}get changeBegan(){return this._changeBegan}get changeCompleted(){return this._changeCompleted}},R9=class extends tX{constructor(e,t,i,r,a){if(super(),this.eventType=e,this.data=t,this.page=i,this.shared=r,this.condition=a,this.toggleIsForward=!1,this.timelineNeedsRebuild=!1,this.hasPlayedOnce=!1,this.pauseOnNextLoopEnd=!1,this.onTimelineChangeComplete=()=>{if(this.pauseOnNextLoopEnd){this.pauseOnNextLoopEnd=!1,this.timeline?.pause();return}"normal"!==this.data.tweens[0].data.direction&&(this.toggleIsForward=!this.toggleIsForward),!1!==this.timelineNeedsRebuild&&(this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward,needsRebuild:!1,isRebuild:!0}),this.timeline.play())},!t.object)throw Error("Missing property");let o=this.page.scene.find(t.object)??this.page.uiCanvas?.find(t.object)??this.page.scene.find2DInUIObjects(t.object);if(!o||!o.states||(this.object=o,t.tweens.length<2))throw Error("Missing property");this.tweens=Array(this.data.tweens.length-1),this.startOnceDelay="start-once"===t.tweens[0].data.delayDirection?t.tweens[0].data.delay:0,this.init()}get playing(){return this.timeline?.paused===!1}
8113get changeBegan(){return this.tweens.some(e=>e.changeBegan)??!1}init(){this.initialCurrentState=R7(this.object,this.object.currentState).id,this.toggleIsForward=!1}get currentState(){return"Toggle"===this.data.runMode&&mk(this.eventType)?this.initialCurrentState:this.object.currentState}buildTimeline({isForward:e=!0,needsRebuild:t=!1,isRebuild:i=!1}={}){try{let r=R4(this.data.tweens[0].data);i&&"number"==typeof r.loop&&r.loop--,this.timeline?.pause(),this.timeline=RA.timeline({autoplay:!1,...r,...!0===r.loop||r.loop>1?{timelineChangeComplete:this.onTimelineChangeComplete}:{}});let a=this.tweens.findIndex(e=>e?.changeBegan);if(!0===t&&(this.timelineNeedsRebuild=!0),e){let e=-1===a?0:a;for(let t=e;t<this.data.tweens.length-1;t++){let i=this.data.tweens[t],o=this.data.tweens[t+1],l;t===e&&(!0===this.object.wasMovedByUser||this.object.previousAction?.changeBegan===!0)?(l=void 0,this.object instanceof Ej&&(this.object.wasMovedByUser=!1)):l=void 0===i.data.state?this.currentState:i.data.state;let h=new R8(this.object,l,void 0===o.data.state?this.currentState:o.data.state,o.data,this.shared,this.data.allowSlerp??!1,this.page);-1!==a&&t===e&&Object.assign(h.params,{startOnceDelay:0}),this.tweens[t]=h,this.timeline.add(h.params,this.timeline.duration+(t===e?r.delay:0))}this.timeline.duration+=r.endDelay}else{let e=-1===a?this.data.tweens.length-1:a+1;for(let t=e;t>0;t--){let i=this.data.tweens[t],o=this.data.tweens[t-1],l;t===e&&(!0===this.object.wasMovedByUser||this.object.previousAction?.changeBegan===!0)?(l=void 0,this.object instanceof Ej&&(this.object.wasMovedByUser=!1)):l=void 0===i.data.state?this.currentState:i.data.state;let h=new R8(this.object,l,void 0===o.data.state?this.currentState:o.data.state,i.data,this.shared,this.data.allowSlerp??!1,this.page);-1!==a&&t===e&&Object.assign(h.params,{startOnceDelay:0}),this.tweens[t-1]=h,this.timeline.add(h.params,this.timeline.duration+(t===e?r.endDelay:0))}this.timeline.duration+=r.delay}}catch{}this.object.previousAction?.playing===!0&&this.object.previousAction.pause(),this.object.previousAction=this}play(){if(!1===Lg(this.shared,this.condition)||mk(this.eventType)&&"Once"===this.data.runMode&&this.hasPlayedOnce||(this.hasPlayedOnce=!0,this.playing))return!1;this.startTimeout?.pause();let e=R4(this.data.tweens[0].data).pingPongDelayCorrection;this.startTimeout=RA({targets:{},duration:this.startOnceDelay+e,easing:"linear",complete:()=>{this.startTimeout=void 0;try{this.buildTimeline(),this.timeline.play()}catch{}}})}pause(){this.timeline?.pause(),this.startTimeout?.pause(),this.tweens=Array(this.data.tweens.length-1),delete this.startTimeout}stop(){this.pause();let e=void 0===this.data.tweens[0].data.state?this.initialCurrentState:this.data.tweens[0].data.state;this.object instanceof Do?this.object.changeSelectedState(e,{shared:this.shared}):this.object.changeSelectedState(e,{scene:this.page.scene,shared:this.shared}),this.object.currentState=e}seek(e){if(!1===Lg(this.shared,this.condition))return!1;void 0===this.timeline&&this.buildTimeline(),this.timeline?.seek(e*this.timeline.duration,!0)}toggle(e){if(!1===Lg(this.shared,this.condition))return!1;this.startTimeout?.pause(),this.toggleIsForward=e??!this.toggleIsForward,this.playing?(this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward,needsRebuild:!0}),this.pauseOnNextLoopEnd=!0,this.timeline.play()):this.startTimeout=RA({targets:{},duration:this.startOnceDelay,easing:"linear",complete:()=>{this.startTimeout=void 0,this.timeline?.pause(),this.buildTimeline({isForward:this.toggleIsForward}),this.timeline.play()}})}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pause()}};function R7(e,t){let i,r;if("string"==typeof t?(i=t,r=e.states?.[i]):null===t&&(i=null,r=e.data),void 0!==i&&void 0!==r)return{id:i,data:r}}var Le={type:"beginState"},Lt={type:"completeState",isfromEntity:!1},Li={type:"requestRender"},Lr=class extends tX{constructor(e,t,i,r){super(),this.data=e,this.page=t,this.shared=i,this.condition=r,this.toggleIsForward=!1,this.posStart=new iD,this.posEnd=new iD,this.qStart=new iP,this.qEnd=new iP,this.zoomStart=1,this.zoomEnd=1}init(){}get playing(){return this.animation&&this.animation.began&&!this.animation.completed}buildAnimation(e=!1){if(!this.data.animate)return;let t=this.page.scene.find(this.data.targetCamera);if(!t||!t.visible)throw ReferenceError("Target camera not founded or not visible");let i={t:0};this.posStart.copy(this.page.activeCamera.position),this.qStart.copy(this.page.activeCamera.quaternion),this.zoomStart=this.page.activeCamera.zoom,this.animation=RA({targets:i,t:1,...R3(this.data),update:()=>{0===i.t&&("Toggle"!==this.data.runMode||this.toggleIsForward?(this.posEnd.copy(t.position),this.qEnd.copy(t.quaternion),this.zoomEnd=t.zoom,this.fromCamera=this.page.activeCamera,this.switchCamera(t.uuid)):this.fromCamera&&(this.posEnd.copy(this.fromCamera.position),this.qEnd.copy(this.fromCamera.quaternion),this.zoomEnd=this.fromCamera.zoom,this.switchCamera(this.fromCamera.uuid)),this.page.activeCamera.dispatchEvent(Le));let e=this.page.activeCamera;e.position.lerpVectors(this.posStart,this.posEnd,i.t),e.quaternion.slerp
8113Quaternions(this.qStart,this.qEnd,i.t),e.zoom=this.zoomStart+(this.zoomEnd-this.zoomStart)*i.t,e.wasMovedBySwitchCameraAction=!0,e.updateMatrix(),e.updateMatrixWorld(),e.updateProjectionMatrix(),e.dispatchEvent(Li),1===i.t&&e.dispatchEvent(Lt)}})}switchCamera(e){let t=this.page.activeCamera,i=this.page.scene.find(e);if(!i||!i.visible)throw ReferenceError("Target camera not founded or not visible");this.page.switchActiveCamera(i),t.dispatchEvent({type:"cameraChange",camera:i})}play(){if(!1===Lg(this.shared,this.condition))return!1;if(!this.playing&&this.page.activeCamera.uuid!==this.data.targetCamera)try{clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{delete this.timeoutId,this.data.animate?(this.buildAnimation(),this.animation?.play()):this.switchCamera(this.data.targetCamera)},1e3*this.data.delay)}catch{}}pause(){this.animation?.pause(),clearTimeout(this.timeoutId),delete this.timeoutId}toggle(e){if(!1===Lg(this.shared,this.condition))return!1;if(window.clearTimeout(this.timeoutId),delete this.timeoutId,e!==this.toggleIsForward)try{this.playing?(this.animation?.pause(),this.toggleIsForward=e??!this.toggleIsForward,this.buildAnimation(!0),this.animation?.play()):this.timeoutId=window.setTimeout(()=>{this.toggleIsForward=e??!this.toggleIsForward,this.data.animate?(this.animation?.pause(),this.buildAnimation(),this.animation?.play()):(this.toggleIsForward?(this.fromCamera=this.page.activeCamera,this.switchCamera(this.data.targetCamera)):this.fromCamera&&this.switchCamera(this.fromCamera.uuid),this.page.activeCamera.dispatchEvent(Lt),this.page.activeCamera.dispatchEvent(Li))},1e3*this.data.delay)}catch{}}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pause(),this.toggleIsForward=!1}},Ls=new Map,La=new Map,Ln=class extends tX{constructor(e,t,i,r,a,o,l){super(),this.id=e,this.data=t,this.scene=i,this.sharedAssets=r,this.object=a,this.eventType=o,this.actionCondition=l,this.toggleIsForward=!1,this._finished=!1,this.hasPlayedOnce=!1,this._shouldForwardLoop=!1,this._shouldPauseOnNextLoopComplete=!1,this.hiddenMatrixOverrides=[],this._onLoopComplete=()=>{this._shouldPauseOnNextLoopComplete&&(this.timeline.pause(),this._shouldPauseOnNextLoopComplete=!1)};try{let e=R4(this.data);"number"==typeof e.loop&&e.loop--,this.timeline=RA.timeline({...e,autoplay:!1}),this._shouldForwardLoop=!0===e.loop||"number"==typeof e.loop&&e.loop>1;let t=this.sharedAssets.data.timelineAnimations[this.data.timeline].mapping;Object.entries(t).forEach(([e,t])=>{var a,o,l,h;let c,d=this.scene.find(e);if(!d)return;let p=d.data.timelineAnimations[t];if(!p)return;let f=d.data.states.data(t);f?.hiddenMatrix&&16===f.hiddenMatrix.length&&!gE.isEqual(f.hiddenMatrix,d.data.hiddenMatrix)&&this.hiddenMatrixOverrides.push({objId:e,original:d.hiddenMatrix.clone(),state:f.hiddenMatrix});let m=(o={...p},a={scene:i,shared:r},l={position(e){Object.assign(d.position,e),(void 0!==e.x||void 0!==e.y||void 0!==e.z)&&(d.updateMatrix(),d.resetBBoxNeedsUpdate(),d instanceof CH&&d.invalidateDownstreamBooleanData(),d.dispatchEvent({type:"requestRender"}))},rotation(e){let t=Object.keys(e)[0];d.rotation[t]=e[t]*t8.DEG2RAD,(void 0!==e.x||void 0!==e.y||void 0!==e.z)&&(d.updateMatrix(),d.resetBBoxNeedsUpdate(),d instanceof CH&&d.invalidateDownstreamBooleanData(),d.dispatchEvent({type:"requestRender"}))},scale(e){Object.assign(d.scale,e),(void 0!==e.x||void 0!==e.y||void 0!==e.z)&&(d.updateMatrix(),d.resetBBoxNeedsUpdate(),d instanceof CH&&d.invalidateDownstreamBooleanData(),d.dispatchEvent({type:"requestRender"}))},shapeSize(e){d instanceof CH&&(d.userData.value={...d.userData.value,...e},(void 0!==e.x||void 0!==e.y||void 0!==e.z)&&(d.updateGeometryInteractions({width:d.userData.value.x,height:d.userData.value.y,depth:d.userData.value.z},a.shared),d.resetBBoxNeedsUpdate(),d.invalidateDownstreamBooleanData(),d.dispatchEvent({type:"requestRender"})))},material(e,t,i){i&&(Object.entries(i).forEach(([e,{start:i,end:r,t:o}])=>{let l=t.getValue(e);d instanceof _H&&!Array.isArray(d.material)&&"alpha"===e&&"number"==typeof l&&l>
81130&&d.material.setTransparent(!0),void 0!==l&&RX(e,t,i,r,o,l,a.shared)}),d.dispatchEvent({type:"requestRender"}))},opacity(e){if(d instanceof _H&&!Array.isArray(d.material)){let t=d.material.getLayersOfType("light")[0];d.material.setTransparent(!0),RX("alphaOverride",t,{alphaOverride:e},{alphaOverride:e+1},0,e,a.shared),d.dispatchEvent({type:"requestRender"})}},light(e,t){(d instanceof P3||d instanceof D1||d instanceof P8)&&(d[e]=t,d.dispatchEvent({type:"requestRender"}))},cloner(e){e.cloner?.update(a),e instanceof CH&&e.invalidateDownstreamBooleanData(),e.dispatchEvent({type:"requestRender"})},pathExtrusion(e,t){e.geometry.userData.parameters.extrusion={...e.geometry.userData.parameters.extrusion,...t},e.updateGeometryInteractions({extrusion:{...e.geometry.userData.parameters.extrusion}},a.shared),e.resetBBoxNeedsUpdate(),e.invalidateDownstreamBooleanData(),e.dispatchEvent({type:"requestRender"})},pathSnapping(e){d.userData.pathSnapping={...d.userData.pathSnapping,...e},d.updatePathSnapping(d.userData.pathSnapping),d.dispatchEvent({type:"requestRender"})}},h=this.sharedAssets,c=[],o.properties.forEach(e=>{let t=e.data.path?.[0];if(t&&["position","rotation","scale"].includes(t)){let i=function(e,t=()=>{}){let i=[];for(let r of yy){let a=[...e.keyframes??[]].filter(e=>void 0!==e.data.value[r]).sort((e,t)=>e.data.time-t.data.time),o=a[0];o&&t?.(o.data.value);let l={index:[],t:[]};for(let e=0;e<a.length-1;e++){let t=a[e],i=a[e+1]??t,r={duration:(i?.data?.time-t.data.time)*1e3,delay:0===e?1e3*a[0].data.time:0};l.t.push({...r,value:+(e%2==0),easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(i.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters)}),l.index.push({...r,value:e,easing:"linear"})}if(a.length>1){let e={t:0,index:0};i.push({targets:e,...l,update:()=>{let i=Math.ceil(e.index),o=i%2==0?e.t:1-e.t,l=a?.[i].data.value,h=a?.[i+1]?.data.value;void 0!==l&&void 0!==h&&t?.({[r]:l[r]+(h[r]-l[r])*o})}})}}return i}(e.data,l?.[t]);i&&c.push(...i)}if(t&&"shape size"===t&&"geometry"in d){let t=function(e,t){let i=[];for(let r of yy){let a={},o=[...e.keyframes??[]].filter(e=>void 0!==e.data.value[r]).sort((e,t)=>e.data.time-t.data.time),l=o[0];l&&t?.(l.data.value),a={index:[],t:[]};for(let e=0;e<o.length-1;e++){let t=o[e],i=o[e+1]??t,r={duration:(i?.data?.time-t.data.time)*1e3,delay:0===e?1e3*o[0].data.time:0};a.t.push({...r,value:+(e%2==0),easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(i.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters)}),a.index.push({...r,value:e,easing:"linear"})}if(o.length>1){let e={t:0,index:0};i.push({targets:e,...a,update:()=>{let i=Math.ceil(e.index),a=i%2==0?e.t:1-e.t,l=o?.[i].data.value,h=o?.[i+1]?.data.value;void 0!==l&&void 0!==h&&t?.({[r]:l[r]+(h[r]-l[r])*a})}})}}return i}(e.data,l?.shapeSize);t&&c.push(...t)}if(t&&"path extrusion"===t&&d instanceof D3){let t=function(e,t,i){let r={},a=[...t.keyframes??[]].sort((e,t)=>e.data.time-t.data.time),o=a[0];o&&i?.(e,o.data.value),r={index:[],t:[]};for(let e=0;e<a.length-1;e++){let t=a[e],i=a[e+1]??t,o={duration:(i?.data?.time-t.data.time)*1e3,delay:0===e?1e3*a[0].data.time:0};r.t.push({...o,value:+(e%2==0),easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(i.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters)}),r.index.push({...o,value:e,easing:"linear"})}if(a.length>1){let t={t:0,index:0};return{targets:t,...r,update:()=>{let r=Math.ceil(t.index),o=r%2==0?t.t:1-t.t,l=a?.[Math.min(r,a.length-1)].data.value,h=a?.[Math.min(r,a.length-1)+1]?.data.value;i?.(e,function(e,t,i,r){let a=e.geometry.userData.parameters.extrusion;if(a)return vg.forEach(e=>{RN(e,a,t,i,r)}),a}(e,l,h,o))}}}}(d,e.data,l?.pathExtrusion);t&&c.push(t)}if(t&&"path snapping"===t&&d.data.pathSnapping){let t=function(e,t,i){let r={},a=[...t.keyframes??[]].sort((e,t)=>e.data.time-t.data.time),o=a[0];o&&i?.(o.data.value),r={index:[],t:[]};for(let e=0;e<a.length-1;e++){let t=a[e],i=a[e+1]??t,o={duration:(i?.data?.time-t.data.time)*1e3,delay:0===e?1e3*a[0].data.time:0};r.t.push({...o,value:+(e%2==0),easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(i.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters)}),r.index.push({...o,value:e,easing:"linear"})}if(a.length>1){let t={t:0,index:0};return{targets:t,...r,update:()=>{let r=Math.ceil(t.index),o=r%2==0?t.t:1-t.t,l=a?.[Math.min(r,a.length-1)].data.value,h=a?.[Math.min(r,a.length-1)+1]?.data.value;i?.(function(e,t,i,r){let a=e.updatedPathSnapping;
8113if(a)return vq.forEach(e=>{RN(e,a,t,i,r)}),a}(e,l,h,o))}}}}(d,e.data,l?.pathSnapping);t&&c.push(t)}if(t&&"material"===t&&"Mesh"===d.type&&"material"in d&&d.material instanceof Ct){let t=e.data.id;if(t){let i=d.material.getLayerByUuid(t);if(i){let t=R1(i,e.data,l?.material,h);t&&c.push(t)}else{let t=d.material.getLayersOfType(e.data.type);if(t)for(let i of t){let t=R1(i,e.data,l?.material,h);t&&c.push(t)}}}}if(t&&"opacity"===t&&"Mesh"===d.type&&"material"in d){let t=function(e,t){if(e){let i={},r=[...e.keyframes??[]].sort((e,t)=>e.data.time-t.data.time),a=r[0];a&&t?.(a.data.value),i={index:[],t:[]};for(let e=0;e<r.length-1;e++){let t=r[e],a=r[e+1]??t,o={duration:(a?.data?.time-t.data.time)*1e3,delay:0===e?1e3*r[0].data.time:0};i.t.push({...o,value:+(e%2==0),easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(a.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters)}),i.index.push({...o,value:e,easing:"linear"})}if(r.length>1){let e={t:0,index:0};return{targets:e,...i,update:()=>{let i=Math.ceil(e.index),a=i%2==0?e.t:1-e.t,o=r?.[Math.min(i,r.length-1)].data.value,l=r?.[Math.min(i,r.length-1)+1]?.data.value;t?.(t8.lerp(o,l,a))}}}}}(e.data,l?.opacity);t&&c.push(t)}if(t&&"cloner"===t){let t=function(e,t,i){let r={},a=[...t.keyframes??[]].sort((e,t)=>e.data.time-t.data.time),o=a[0];o&&i?.(e,o.data.value,o.data.value),r={index:[],t:[]};for(let e=0;e<a.length-1;e++){let t=a[e],i=a[e+1]??t,o={duration:(i?.data?.time-t.data.time)*1e3,delay:0===e?1e3*a[0].data.time:0};r.t.push({...o,value:+(e%2==0),easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(i.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters)}),r.index.push({...o,value:e,easing:"linear"})}if(a.length>1){let t={t:0,index:0};return{targets:t,...r,update:()=>{let r=Math.ceil(t.index),o=r%2==0?t.t:1-t.t,l=a?.[Math.min(r,a.length-1)].data.value,h=a?.[Math.min(r,a.length-1)+1]?.data.value;i?.(e,l.randomnessObject?void 0:function(e,t,i,r){let a=r.cloner?.parameters;if(a){for(let r of(RN("count",a,e,t,i),a.count=Math.trunc(a.count),gB))RN(r,a.radial,e.radial,t.radial,i);for(let r of gz)RN(r,a.linear,e.linear,t.linear,i);for(let r of gF)RN(r,a.grid,e.grid,t.grid,i);for(let r of gN)RN(r,a.toObject,e.toObject,t.toObject,i);return a}}(l,h,o,e),l.randomnessObject?function(e,t,i,r){let a=r.cloner?.parameters;if(a){for(let r of gU)RN(r,a.randomnessObject,e.randomnessObject,t.randomnessObject,i);return a}}(l,h,o,e):void 0)}}}}(d,e.data,l?.cloner);t&&c.push(t)}if(t&&"camera"===t&&d instanceof Ej){let t=function(e,t,i,r){if(t){let a={[r]:[]},o=[...t.keyframes??[]].sort((e,t)=>e.data.time-t.data.time),l=o[0];l&&(e[r]=l.data.value,i?.(r,l.data.value));for(let e=0;e<o.length-1;e++){let t=o[e];if(!Number.isFinite(t.data.value))continue;let i=o[e+1]??t;a[r].push({value:i.data.value,easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(i.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters),duration:(i?.data?.time-t.data.time)*1e3,delay:0===e?1e3*o[0].data.time:0})}if(o.length>1)return{targets:e,...a,update:()=>{i?.(r,e[r])}}}}(d,e.data,l?.camera,"zoom");t&&c.push(t)}if(t&&"light"===t&&(d instanceof P3||d instanceof D1||d instanceof P8)){let t=function(e,t,i,r,a){if(t){let o={},l=[...t.keyframes??[]].sort((e,t)=>e.data.time-t.data.time),h=l[0];if(h){let t=h.data.value;e[r]=t,i?.(r,t)}o={index:[],t:[]};for(let e=0;e<l.length-1;e++){let t=l[e],i=l[e+1]??t,r={duration:(i?.data?.time-t.data.time)*1e3,delay:0===e?1e3*l[0].data.time:0};o.t.push({...r,value:+(e%2==0),easing:yg(t.data.easing.type,{control1:ym(t.data.easing.cubicControls?.control1,[0,0]),control2:ym(i.data.easing.cubicControls?.control2,[1,1])},t.data.easing.springParameters)}),o.index.push({...r,value:e,easing:"linear"})}if(l.length>1){let e={t:0,index:0};return{targets:e,...o,update:()=>{let t=Math.ceil(e.index),o=t%2==0?e.t:1-e.t,h=l?.[Math.min(t,l.length-1)].data.value,c=l?.[Math.min(t,l.length-1)+1]?.data.value;i?.(r,R2(h,c,o,a))}}}}}(d,e.data,l?.light,e.data.path[1],h);t&&c.push(t)}}),c),g=("start"===this.data.delayDirection?this.data.delay:0)+("start-end"===this.data.delayDirection?this.data.delay:0)+("start-once"===this.data.delayDirection?this.data.delay:0);
8113m.forEach(e=>{this.timeline.add(e,g)}),this.timeline.duration=1e3*p.to+g}),this.timeline.delay=0,this.timeline.duration+=("start"===this.data.delayDirection?this.data.delay:0)+("end"===this.data.delayDirection?this.data.delay:0)+("start-end"===this.data.delayDirection?2*this.data.delay:0)+("start-once"===this.data.delayDirection?2*this.data.delay:0),this.timeline.finished.then(()=>{Object.keys(t).forEach(e=>{let t=this.scene.find(e);t instanceof Ej&&t.dispatchEvent(R6)}),this._finished=!0}),this.timeline.loopComplete=this._onLoopComplete}catch{throw Error("Missing property")}a&&(La.has(a.uuid)?La.get(a.uuid).push(this):La.set(a.uuid,[this])),Ls.set(e,this)}get playing(){return!1===this.timeline.paused}get finished(){return this._finished}get paused(){return this.timeline.paused}applyStateHiddenMatrices(){for(let{objId:e,state:t}of this.hiddenMatrixOverrides){let i=this.scene.find(e);i&&i.hiddenMatrix.fromArray(t)}}restoreOriginalHiddenMatrices(){for(let{objId:e,original:t}of this.hiddenMatrixOverrides){let i=this.scene.find(e);i&&i.hiddenMatrix.copy(t)}}supportsRunMode(){return void 0!==this.eventType&&(mk(this.eventType)||"VariableChange"===this.eventType)}play(){let e=this.supportsRunMode()&&"Once"===this.data.runMode&&this.hasPlayedOnce&&this.paused&&this.timeline.currentTime>0&&!this._finished;if(this.supportsRunMode()&&"Once"===this.data.runMode&&this.hasPlayedOnce&&!e||void 0===this.eventType&&this._finished)return!1;this.hasPlayedOnce=!0,this.applyStateHiddenMatrices(),Object.keys(this.sharedAssets.data.timelineAnimations[this.data.timeline].mapping).forEach(e=>{let t=this.scene.find(e);t instanceof Ej&&t.dispatchEvent(R5)}),this.paused&&this.timeline.progress>0&&this.timeline.progress<100?this.timeline.play():this.timeline.restart()}pauseTimeline(){this.paused||this.timeline.pause()}pause(){this.pauseTimeline()}stop(){this.pauseTimeline(),this.seek(0),this.timeline.reset(),this.restoreOriginalHiddenMatrices(),this._finished=!1}seek(e){this.timeline.seek(e*this.timeline.duration,!0)}toggle(e){let t=this.paused&&this.timeline.currentTime>0&&this.timeline.currentTime<this.timeline.duration;if(void 0!==e?this.toggleIsForward=e:t||(this.toggleIsForward=!this.toggleIsForward),this.playing){if(!this.toggleIsForward&&this.timeline.reversed&&this._shouldForwardLoop&&this.timeline.remaining%2==1){this._shouldPauseOnNextLoopComplete=!0;return}this.timeline.reverse(this.timeline.duration-this.timeline.currentTime),this._shouldForwardLoop&&this.timeline.loop&&this.timeline.reversed&&(this._shouldPauseOnNextLoopComplete=!0)}else this.applyStateHiddenMatrices(),(!this.toggleIsForward!==this.timeline.reversed||!this.toggleIsForward&&this.timeline.reversed&&"alternate"===this.timeline.direction)&&this.timeline.reverse(),"number"==typeof this.timeline.loop&&"number"==typeof this.timeline.remaining&&this.timeline.remaining<this.timeline.loop&&this.toggleIsForward&&(this.timeline.remaining=this.timeline.loop),this.timeline.play()}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){this.pauseTimeline(),this.restoreOriginalHiddenMatrices()}},Lo=class{constructor(e){this.data=e}dispatch(){this.data.playTimeline?this.pauseTimeline(this.data.playTimeline):this.data.object?this.pauseAllTimelinesFromObject(this.data.object):this.pauseAllTimelines()}pauseTimeline(e){let t=this.getTimelineActions(e);t.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>{e[this.data.interaction]()}),this.disposeDelay()},this.data.delay)):t.forEach(e=>{e[this.data.interaction]()}))}getTimelineActions(e){let t=Ls.get(e);return t?[t]:[...Ls.values()].filter(t=>t.data.timeline===e)}pauseAllTimelinesFromObject(e){let t=La.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>e[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e[this.data.interaction]()))}pauseAllTimelines(){let e=[...La.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>
8113{e.forEach(e=>{e[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},Ll=class{constructor(e,t,i,r,a,o,l){this.data=t;let h="interaction"in t?t.interaction:"play";if("play"===h||void 0===h)this.interaction=new Ln(e,t,i,r,a,o,l);else if("pause"===h||"stop"===h)this.interaction=new Lo(t);else throw Error("Missing property")}get playing(){return this.interaction instanceof Ln&&this.interaction.playing}get finished(){return!(this.interaction instanceof Ln)||this.interaction.finished}get paused(){return!(this.interaction instanceof Ln)||this.interaction.paused}play(){if(this.interaction instanceof Ln)return this.interaction.play();this.interaction.dispatch()}stop(){this.interaction instanceof Ln&&this.interaction.stop()}seek(e){this.interaction instanceof Ln&&this.interaction.seek(e)}toggle(e){this.interaction instanceof Ln?this.interaction.toggle(e):this.interaction.dispatch()}playFromCurrent(){this.interaction instanceof Ln?this.interaction.playFromCurrent():this.interaction.dispatch()}dispatchConditional(){this.interaction instanceof Ln?!1!==Lg(this.interaction.sharedAssets,this.interaction.actionCondition)&&("runMode"in this.data&&"Toggle"===this.data.runMode?this.interaction.toggle():this.interaction.play()):this.interaction.dispatch()}reverseFromCurrent(){this.interaction instanceof Ln&&this.interaction.reverseFromCurrent()}dispose(){this.interaction.dispose()}};function Lh(e){let t=e?.tracks.filter(e=>"vector"===e.ValueTypeName||"quaternion"===e.ValueTypeName).map(e=>e.times.length);if(t?.length){let e=t&&t.length?pi(t,cr,pe):void 0;return e&&e>2?e:2}return 2}var Lc=class extends tX{constructor(e,t,i,r,a){super(),this.data=e,this.page=t,this.animationControls=i,this.shared=r,this.condition=a,this.startOnceDelay=0,this.toggleIsForward=!1;let o=e.object,l=t.scene.find(e.object);l&&Array.isArray(l.identity)&&(o=l.identity[0]),this.data={...e,object:o};let h=this.animationControls.clipIdToAction[e.clipId+"/"+o];if(this.duration=h?.getClip()?.duration??1,this.data.crop2){let e=Lh(h?.getClip());this.leftFrameTime=this.data.crop2[0]/(e-1)*this.duration,this.rightFrameTime=this.data.crop2[1]/(e-1)*this.duration}else{let e=h?.getClip()?.tracks[0]?.times.length;e&&e>1?(this.leftFrameTime=this.data.crop[0]/e*this.duration,this.rightFrameTime=this.data.crop[1]/e*this.duration):(this.leftFrameTime=0,this.rightFrameTime=this.duration)}this.startOnceDelay=e.delay}get playing(){return this.threeAnimAction?.isRunning()??!1}play(e=!1){if(!1===Lg(this.shared,this.condition))return!1;window.clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{if(this.threeAnimAction=this.animationControls.play(this.data),!this.threeAnimAction)return;this.threeAnimAction.reset(),this.threeAnimAction.time=this.leftFrameTime,this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime;let t=this.data.object;Object.entries(this.animationControls.clipIdToAction).forEach(([i,r])=>{let a=i.split("/")[1];this.threeAnimAction!==r&&a===t&&(e?r.fadeOut(.2):r.stop())}),e&&this.threeAnimAction?.fadeIn(.2)},this.startOnceDelay)}pause(){this.threeAnimAction&&(this.threeAnimAction.paused=!0),window.clearTimeout(this.timeoutId),delete this.timeoutId}stop(){this.threeAnimAction?.fadeOut(.2)}seek(e){this.threeAnimAction=this.animationControls.play(this.data),this.threeAnimAction&&(this.threeAnimAction.paused=!0,this.threeAnimAction.time=t8.clamp(this.threeAnimAction.time+1/60*e,this.leftFrameTime,this.rightFrameTime-16e-5),this.animationControls.needsUpdate=!0,this.animationControls.requestRender())}toggle(e,t=!1){if(!1===Lg(this.shared,this.condition))return!1;this.toggleIsForward=e??!this.toggleIsForward,this.threeAnimAction&&(this.threeAnimAction._loopCount=0),this.playing?this.threeAnimAction&&(this.threeAnimAction.timeScale=this.toggleIsForward?1:-1,this.toggleIsForward?(this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime):(this.threeAnimAction._clip.start=this.rightFrameTime,this.threeAnimAction._clip.duration=this.leftFrameTime)):this.timeoutId=window.setTimeout(()=>{if(this.threeAnimAction=this.animationControls.play(this.data),this.threeAnimAction){this.toggleIsForward?(this.threeAnimAction.time=this.leftFrameTime,this.threeAnimAction._clip.start=this.leftFrameTime,this.threeAnimAction._clip.duration=this.rightFrameTime):(this.threeAnimAction.time=this.rightFrameTime,this.threeAnimAction._clip.start=this.rightFrameTime,this.threeAnimAction._clip.duration=this.leftFrameTime),this.threeAnimAction.paused=!1,this.threeAnimAction.timeScale=this.toggleIsForward?1:-1;let e=this.data.clipId.split("/")[1];
vendor: 4,213 bytes, line 8113
8113Object.entries(this.animationControls.clipIdToAction).forEach(([i,r])=>{let a=i.split("/")[1];this.threeAnimAction!==r&&a===e&&r.isRunning()&&(t?r.fadeOut(.2):r.stop())}),t&&this.threeAnimAction?.fadeIn(.2)}},this.startOnceDelay)}playFromCurrent(){this.toggle(!0)}reverseFromCurrent(){this.toggle(!1)}dispose(){let e=this.animationControls.clipIdToAction[this.data.clipId+"/"+this.data.object]?.getClip();e&&(e.duration=this.duration),this.pause()}},Ld=class{constructor(e,t,i,r,a){this.data=e,this.page=t,this.eventManager=i,this.shared=r,this.condition=a,this.timeOutId=-1,this.scene=t.scene}dispatch(){if(!1===Lg(this.shared,this.condition))return!1;this.data.target!==this.page.uuid&&(window.clearTimeout(this.timeOutId),this.timeOutId=window.setTimeout(()=>{this.play()},1e3*this.data.delay))}dispose(){window.clearTimeout(this.timeOutId)}play(){if(this.scene.children.every(e=>e.uuid!==this.data.target||e.data.uiScene))return;"fade"===this.data.transition&&this.data.duration>0&&this.eventManager.eventContext.renderer.renderFromSceneForSceneTransitionPass(this.scene,this.scene.activeCamera,1e3*this.data.duration),this.eventManager.deactivate(),this.eventManager.controlsManager.deactivate();let e=this.scene.activeCamera;this.scene.updatePage(this.data.target),this.scene.traverseVisibleEntity(e=>{"ParticleSystem"===e.type&&(e.sleep(),e.wakeUp(),e.data.autoPlay?e.start():e.stop())}),this.scene.activePage.switchToPlayCamera(),this.scene.activeCamera.copyViewPlaneSize(e),RJ(this.scene.activePage,this.shared),this.eventManager.activate(),this.eventManager.controlsManager.activate(this.eventManager)}},Lu=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.evaluatedCondition=!1}checkConditions(){this.evaluatedCondition=Lg(this.shared,this.condition)}dispatch(){if(!1===this.evaluatedCondition)return!1;let e=this.shared.getVariable(this.data.variableId),t=S1(this.data.expression,this.shared,xC.typeOfVariable(e));void 0!==t&&this.shared.updateVariable(this.data.variableId,"string"==typeof t?{textValue:t}:t)}dispose(){}},Lp=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r,this.timeoutId=null}dispatchInner(){if(!1===Lg(this.shared,this.condition))return!1;let e=this.shared.getDynamicVariablePlayState(this.data.variableId);if("PlayPause"===this.data.mode)void 0===this.shared.getDynamicVariableToggleIsForward(this.data.variableId)&&this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!0),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing"===e?"Paused":"Playing");else if("Play"===this.data.mode&&"Playing"!==e)void 0===this.shared.getDynamicVariableToggleIsForward(this.data.variableId)&&this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!0),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing");else if("Stop"===this.data.mode&&"Stopped"!==e)this.shared.setDynamicVariablePlayState(this.data.variableId,"Stopped");else if("Pause"===this.data.mode&&"Paused"!==e)this.shared.setDynamicVariablePlayState(this.data.variableId,"Paused");else if("Restart"===this.data.mode)this.shared.setDynamicVariablePlayState(this.data.variableId,"Restarted");else if("Toggle"===this.data.mode){let t=this.shared.getDynamicVariableToggleIsForward(this.data.variableId);"Playing"===e?this.shared.setDynamicVariableToggleIsForward(this.data.variableId,void 0!==t&&!t):(this.shared.setDynamicVariableToggleIsForward(this.data.variableId,!t),this.shared.setDynamicVariablePlayState(this.data.variableId,"Playing"))}}dispatch(){let e=this.data.delay,t=this.shared.getDynamicVariablePlayState(this.data.variableId);"PlayPause"===this.data.mode&&"Playing"===t&&(e=this.data.pauseDelay),0!==e?(this.timeoutId&&window.clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{this.timeoutId=null,this.dispatchInner()},e)):this.dispatchInner()}dispose(){this.timeoutId&&window.clearTimeout(this.timeoutId)}},Lf=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r}dispatch(){if(!1===Lg(this.shared,this.condition))return!1;("single"===this.data.target?this.data.variableId?[this.data.variableId]:[]:Object.keys(this.shared.getVariables())).forEac
8113h(e=>{this.shared.getVariable(e);let t=this.shared.data.variables.data(e)?.value;void 0!==t&&this.shared.updateVariable(e,t),this.shared.enableLocalStorageForPersistentVariables&&localStorage.removeItem(Cz(e))})}dispose(){}},Lm=class{constructor(e,t,i,r){this.data=e,this.page=t,this.shared=i,this.condition=r}dispatch(){if(!1===Lg(this.shared,this.condition))return!1;if(this.data.userAPIId){let e=this.shared.getUserAPI(this.data.userAPIId);e&&"callUserAPI"in e&&e.callUserAPI(this.shared)}}dispose(){}};function Lg(e,t){if(void 0===t)return!0;if(0===t.expression.length)return!1;let i=S1(t.expression,e,"boolean");return t.negate?!i:!!i}function Lv(e,t,i,r,a,o){let l={Audio:[],Video:[],Particles:[],Link:[],Destroy:[],Create:[],Reset:[],Transition:[],TimelineAnimation:[],SwitchCamera:[],Animation:[],SceneTransition:[],SetVariable:[],DynamicVariablePlay:[],ClearLocalStorage:[],UserAPI:[]},h=t=>({id:c,data:d})=>{try{"Audio"===d.type?mH[e.type].includes("Audio")&&l.Audio.push(new ID(c,d,o,r,t)):"Video"!==d.type||o instanceof Do?"Particles"===d.type?mH[e.type].includes("Particles")&&l.Particles.push(new IO(d,i,r,t)):"Link"===d.type?mH[e.type].includes("Link")&&l.Link.push(new IR(d,a.controlsManager,r,t)):"Create"===d.type?mH[e.type].includes("Create")&&l.Create.push(new LP(d,i,a.controlsManager,r,t)):"Destroy"===d.type?mH[e.type].includes("Destroy")&&l.Destroy.push(new IL(d,i,a.controlsManager,r,t)):"Reset"===d.type?mH[e.type].includes("Reset")&&l.Reset.push(new IB(d,i,r,a,t)):"Transition"===d.type?mH[e.type].includes("Transition")&&l.Transition.push(new R9(e.type,d,i,r,t)):"SwitchCamera"===d.type?mH[e.type].includes("SwitchCamera")&&l.SwitchCamera.push(new Lr(d,i,r,t)):"SceneTransition"===d.type?mH[e.type].includes("SceneTransition")&&l.SceneTransition.push(new Ld(d,i,a,r,t)):"Animation"===d.type?mH[e.type].includes("Animation")&&l.Animation.push(new Lc(d,i,a.animationControls,r,t)):"SetVariable"===d.type?mH[e.type].includes("SetVariable")&&l.SetVariable.push(new Lu(d,i,r,t)):"DynamicVariablePlay"===d.type?mH[e.type].includes("DynamicVariablePlay")&&l.DynamicVariablePlay.push(new Lp(d,i,r,t)):"Conditional"===d.type?mH[e.type].includes("Conditional")&&(d.ifActions.forEach(h({expression:d.condition,negate:!1})),d.elseActions.forEach(h({expression:d.condition,negate:!0}))):"ClearLocalStorage"===d.type?mH[e.type].includes("ClearLocalStorage")&&l.ClearLocalStorage.push(new Lf(d,i,r,t)):"UserAPI"===d.type?mH[e.type].includes("UserAPI")&&l.UserAPI.push(new Lm(d,i,r,t)):"TimelineAnimation"===d.type&&mH[e.type].includes("TimelineAnimation")&&l.TimelineAnimation.push(new Ll(c,d,i.scene,r,o,e.type,t)):mH[e.type].includes("Video")&&l.Video.push(new L_(c,d,o,r,t))}catch{}};return t.forEach(h()),l}function Ly(e){Object.values(e).forEach(e=>{e.forEach(e=>{(e instanceof ID||e instanceof L_||e instanceof R9||e instanceof Ll||e instanceof IO||e instanceof Lc||e instanceof R9||e instanceof LP||e instanceof IL||e instanceof Lr||e instanceof Ld||e instanceof IB||e instanceof Lu||e instanceof Lp)&&e.dispose()})})}var Lx=new Map,Lb=new Map,Lw=class{constructor(e,t,i){this.data=t,this.delay=0,this.status="stopped";let{layerId:r,loop:a,volume:o,delay:l}=t;if(this.object=i,void 0===r)throw Error("Missing property");let h=function(e,t){let i;if("material"in e&&(i=Array.isArray(e.material)?e.material[0].layers.find(e=>e.uuid===t):e.material.layers.find(e=>e.uuid===t)),i)return i.color.texture.image.img instanceof HTMLVideoElement?i.color.texture.image.img:void 0}(i,r);h&&(this.videoElement=h,this.videoElement.loop=a===1/0,pf&&(this.videoElement.autoplay=!0),void 0!==o&&(this.videoElement.volume=o)),void 0!==l&&(this.delay=l),Lb.has(i.uuid)?Lb.get(i.uuid).push(this):Lb.set(i.uuid,[this]),Lx.set(e,this),this.pause()}mute(){this.videoElement&&(this.videoElement.muted=!0)}unMute(){this.videoElement&&(this.videoElement.muted=!1)}play(e){if(!this.videoElement)return;let t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);e?(this.mute(),this.delay+=150):t?(this.mute(),window.setTimeout(()=>{this.unMute()},100)):this.unMute(),this.delayTimerId=window.setTimeout(()=>{if(!this.videoElement)return;let e=this.videoElement.play();void 0!==e&&e.then(e=>{}).catch(e=>{this.play()}),this.clearDelay()},this.delay),this.status="playing"}clearDelay(){this.delayTimerId&&(clearTimeout(this.delayTimerId),delete this.delayTimerId)}pause(){this.videoElement&&(this.videoElement.pause(),this.status="paused")}stop(){this.videoElement&&(this.videoElement.pause(),this.videoElement.currentTime=0,this.status="stopped",this.clearDelay())}seek(e){return new Promise(t=>{if(!this.videoElement)return t();let i=this.videoElement.duration;i>0&&(this.videoElement.currentTime=e%i),this.videoElement.addEventListener("seeked",()=>t(),{once:!0})})}
vendor: 6,044 bytes, line 8113
8113playByToggle(){"stop"===this.data.toggle?"playing"===this.status?this.stop():(this.stop(),this.play()):"pause"===this.data.toggle?"playing"===this.status?this.pause():this.play():(this.stop(),this.play())}dispose(){this.videoElement&&(this.stop(),this.videoElement.muted=!0)}},LS=class{constructor(e){this.data=e}dispatch(){this.data.playVideo?this.pauseVideo(this.data.playVideo):this.data.object?this.pauseAllVideosFromObject(this.data.object):this.pauseAllVideos()}pauseVideo(e){let t=Lx.get(e);t&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t[this.data.interaction](),this.disposeDelay()},this.data.delay)):t[this.data.interaction]())}pauseAllVideosFromObject(e){let t=Lb.get(e);t?.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{t.forEach(e=>e[this.data.interaction]()),this.disposeDelay()},this.data.delay)):t.forEach(e=>e[this.data.interaction]()))}pauseAllVideos(){let e=[...Lb.values()];e.length&&(this.data.delay>0?(this.disposeDelay(),this.timeoutId=window.setTimeout(()=>{e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}),this.disposeDelay()},this.data.delay)):e.forEach(e=>{e.forEach(e=>{e[this.data.interaction]()})}))}disposeDelay(){clearTimeout(this.timeoutId),delete this.timeoutId}dispose(){clearTimeout(this.timeoutId),delete this.timeoutId}},L_=class{constructor(e,t,i,r,a){if(this.data=t,this.shared=r,this.condition=a,"play"===t.interaction)this.interaction=new Lw(e,t,i);else if("pause"===t.interaction||"stop"===t.interaction)this.interaction=new LS(t);else throw Error("Missing property")}dispatchBasic(){if(!1===Lg(this.shared,this.condition))return!1;this.interaction instanceof Lw?this.interaction.playByToggle():this.interaction.dispatch()}dispatchConditional(){if(!1===Lg(this.shared,this.condition))return!1;this.interaction instanceof Lw?this.interaction.play():this.interaction.dispatch()}dispose(){this.interaction.dispose()}},LA=(()=>{let e,t,i,r,a=!1;function o(i){!e&&!LM()&&(t?.sharedGameControlGlobals.createdObjects.length??0)>0&&(e=requestAnimationFrame(l)),i&&(t=i,r=i.requestRender,!a&&"u">typeof document&&(document.addEventListener("visibilitychange",h),a=!0))}function l(a){if(!t||!r){e=void 0,i=void 0;return}let o=i?a-i:0,h=t.sharedGameControlGlobals.createdObjects,c=t.sharedGameControlGlobals.nCreatedPerAction,d=h.length,p=0;for(;p<d;){let e=h[p];void 0===e.userData.createdTime&&(e.userData.createdTime=a),void 0===e.userData.lifetime&&void 0===e.userData.quantity||e.userData.lifetime&&a-e.userData.createdTime<e.userData.lifetime||e.userData.quantity&&c[e.userData.actionId]<=e.userData.quantity?(e.userData.velocity&&(e.position.addScaledVector(e.userData.velocity,o/1e3),e.updateMatrix(),r()),p++):(c[e.userData.actionId]>e.userData.quantity&&c[e.userData.actionId]--,h.splice(p,1),e.removeFromParent(),t.sharedGameControlGlobals.rapierWorld&&e.rigidBody?(t.sharedGameControlGlobals.colliderToEntity.delete(e.rigidBody.collider(0).handle),t.sharedGameControlGlobals.rapierWorld.removeRigidBody(e.rigidBody)):(e.bvhGeometry=void 0,t.sharedGameControlGlobals.entitiesWithTransformAnim=t.sharedGameControlGlobals.entitiesWithTransformAnim.filter(e=>void 0!==e.bvhGeometry)),d--,r())}e=p>0?requestAnimationFrame(l):void 0,i=p>0?a:void 0}function h(){LM()?e&&(cancelAnimationFrame(e),e=void 0,i=void 0):o()}return{play:o,dispose:function(){e&&(cancelAnimationFrame(e),e=void 0),a&&"u">typeof document&&(document.removeEventListener("visibilitychange",h),a=!1),t=void 0,r=void 0,i=void 0}}})();function LM(){return!!document&&document.hidden}var LC=new iP,LE=new iD,LT=new iD,LP=class{constructor(e,t,i,r,a){this.data=e,this.page=t,this.controlsManager=i,this.shared=r,this.condition=a,this.intervalId=null,this.timeoutIdQueue=[],this.uniqueId=t8.generateUUID(),this.dispatch=()=>{if(!1===Lg(this.shared,this.condition))return!1;this.data.delay?this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay)):this.dispatchInner()},this.dispatchFromStart=()=>{if(!1===Lg(this.shared,this.condition))return!1;this.timeoutIdQueue.push(window.setTimeout(this.dispatchInner,1e3*this.data.delay))},this.dispatchThrottled=ph(this.dispatch,1e3/this.data.creationSpeed),this.dispatchStart=()=>{null===this.intervalId&&(this.intervalId=window.setInterval(this.dispatch,1e3/this.data.creationSpeed))},this.dispatchStop=()=>{null!==this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null)},this.dispatchInner=()=>{this.timeoutIdQueue.shift();let e=new bO(this.object);if(e.playModeVisible=!0,e.expand(),"world"!==this.data.coordinateSystem){let t=this.data.coordinateSystem,i=this.page.scene.find(t);i&&(i.updateMatrixWorldSVD(),e.hiddenMatrix.copy(i.matrixWorldRigid))}e.scale.copy(this.object.scale),e.position.fromArray(this.data.position.map(e=>"number"==typeof e?e:0)),e.rotation.fromArray(this.data.rotation.map(e=>"number"==typeof e?e:0)),e.updateMatrix(),this.page.add(e);let t=this.controlsManager.sharedGameControlGlobals;t.createdObjects.push(e),void 0===t.nCreatedPerAction[this.uniqueId]?t.nCreatedPerAction[this.uniqueId]=1:t.nCreatedPerAction[this.uniqueId]++,e.updateWorldMatrix(!0,!0),e.traverseObject(this.traverseObjectCB),LA.play(),this.controlsManager.requestRender()},this.traverseObjectCB=e=>{let t;if(e.hasNonUniformScale&&e.updateMatrixWorldSVD(),this.controlsManager.sharedGameControlGlobals.rapierWorld){if(e instanceof EA)if(!e.objectForSample)return!0===e.object.dataPatched.physics.fusedBody&&"dynamic"===e.object.dataPatched.physics.rigidBody||void 0;else{if(e.objectForSample.dataPatched.physics.fusedBody)return;t=e.object}else if(e instanceof bO)t=e.object;else if(t=e,t.dataPatched.cloner?.hideBase)return!0}else{if(e instanceof EA)return;t=e instanceof bO?e.object:e}"Time"===this.data.destroy?e.userData.lifetime=1e3*this.data.lifetime:"Quantity"===this.data.destroy&&(e.userData.quantity=this.data.destroyAfterQuantity,e.userData.actionId=this.uniqueId);let i=new iD().fromArray(this.data.velocity.map(e=>"number"==typeof e?e:0)),r=t.dataPatched;
8113if(!("visibility"===r.physics.enabled?!r.visible:!r.physics.enabled)&&(this.controlsManager.sharedGameControlGlobals.rapierWorld?(this.controlsManager.addRigidBody(e,t,{fromCreate:!0,dynamic:this.data.dynamic}),"Collision"===this.data.destroy&&(e.rigidBody?.collider(0).setActiveEvents(1),e.userData.hasCollisionDestroy=!0),e.matrixWorld.decompose(LE,LC,LT),i.applyQuaternion(LC),this.data.velocity.some(e=>0!==e)&&this.data.dynamic&&e.rigidBody?.setLinvel(i.divideScalar(this.controlsManager.pixelsPerMeter),!0)):("geometry"in e.object&&this.controlsManager.addBoundsTree(e),this.data.velocity.some(e=>0!==e)&&this.data.dynamic&&(e.userData.velocity=i)),t.dataPatched.physics?.fusedBody===!0))return!0};let o=this.page.scene.find(this.data.object);if(!o||(this.object=o,"world"!==this.data.coordinateSystem&&!this.page.scene.find(this.data.coordinateSystem)))throw Error("Missing Property");LA.play(i)}dispose(){null!==this.intervalId&&(window.clearInterval(this.intervalId),this.intervalId=null),this.timeoutIdQueue.forEach(e=>window.clearTimeout(e)),this.timeoutIdQueue=[],this.dispatchThrottled.cancel(),this.page.remove(...this.controlsManager.sharedGameControlGlobals.createdObjects),this.controlsManager.sharedGameControlGlobals.createdObjects=[],LA.dispose()}},LD=new iD,LO=new iD,LI=new iD,LR=new iD,LL=new iD,LB=new iD,Lz=new i6,LF=new i6,LN=new i6,LU=new iP,Lk=new iP,LV=new rn(0,0,0,"YXZ"),Lj=new iD(1,0,0),LG=new iD(0,1,0),LW=new iD(0,0,1),LH=new iD(1,1,1),Lq=new lK,LX=new iR,LY={type:"requestRender"},LQ={type:"updateMatrix"},LZ=Math.PI/6,LK=class extends tX{constructor(e,t,i,r,a,o,l,h,c){super(),this.object=e,this.domElement=t,this.data=i,this.gloabalPhysics=r,this.controlsManager=a,this.cameraFollow=o,this.camera=l,this.page=h,this.sharedAssets=c,this.enableDamping=!0,this.hiddenMatrix0=new i6,this.target0=new iD,this.zoom0=1,this.rotForce=1,this.moveForce=1,this.pixelsPerMeter=200,this.euler0=new rn(0,0,0,"YXZ"),this.position0Cam=new iD,this.quat0Cam=new iP,this.scale0Cam=new iD,this.hiddenMatrix0Cam=new i6,this.threshEndTranslate=.01,this.threshEndRotate=1e-8,this.threshEndRotVel=.005,this.collider={type:"capsule",radius:40,segment:new lK(new iD(0,-40,0),new iD(0,40,0)),matrix:new i6,position:new iD,rotation:new iP},this.euler=new rn(0,0,0,"YXZ"),this.eulerDelta=new iD,this.lastPosition=new iD,this.lastCameraQuaternion=new iP,this.lastCameraPosition=new iD,this.PI_2=Math.PI/2,this.prevMouse=new t9,this.velocityTarget=new iD,this.velocity=new iD,this.directionXZ=new iD,this.rotVelocityStick=new iD,this.rotVelocityTarget=new iD,this.rotVelocity=new iD,this.rotDirection=new iD,this.nonColliderRotOffset=new i6,this.nonColliderPosOffset=new i6,this.firstPointerId=-1,this.rot=new iD,this.path=[],this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0,run:0},this.vrEulerYOffset=0,this.onObject=!1,this.actionState={},this.keyAssignments=[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","ArrowUp"],["rotPosY","ArrowLeft"],["rotNegX","ArrowDown"],["rotNegY","ArrowRight"],["jump"," "]],this.collisionEnabled=!0,this.offsetMatrix=new i6,this.objectToTarget=new iD,this.objectToTarget0=new iD,this.objectToCamXZ=new iD,this.objectToCamXZ0=new iD,this.targetToCamera=new iD,this.targetToCamera0=new iD,this.cameraPolarAxis0=new iD,this.targetPos=new iD,this.targetQuat=new iP,this.lerpFactorPos=new iD().setScalar(.3),this.lerpFactorPosStart=.3,this.lerpFactorPosEnd=.3,this.lerpFactorRotStart=.3,this.lerpFactorRotEnd=.3,this.lerpFactorPosCamera=.3,this.lerpFactorRotCamera=.3,this.objXZQuat=new iP,this.objXZQuatInv=new iP,this.objXZRotMat=new i6,this.isFirstPerson=!1,this.didHit=!1,this.groundVelocity=new iD,this.pushedVelocity=new iD,this.groundYRotation=0,this.objectRealQuat=new iP,this.colliderWorldQuat=new iP,this.groundNormal=new iD,this.groundTilt=new iP,this.groundTiltInv=new iP,this.lastHitObj=null,this.isFirstFrame=!0,this.rotationAccumWhenOrientWithCamera=0,this.navMeshPathDest=null,this.position=new iD,this.quaternion=new iP,this.scale=new iD,this.initialAction=!0,this.onPointerDown=e=>{(e.target===this.domElement||e.target instanceof HTMLElement&&"SPLINE-VIEWER"===e.target.tagName&&e.target.shadowRoot?.contains(this.domElement))&&-1===this.firstPointerId&&(this.firstPointerId=e.pointerId,this.domElement.ownerDocument.addEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this.onPointerUp),"keys"===this.rotBy||pg||pv||this.domElement.requestPointerLock(),this.prevMouse.set(e.clientX,e.clientY))},this.onPointerUp=e=>{this.firstPointerId=-1,this.domElement.ownerDocument.removeEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this.onPointerUp),"mouse"===e.pointerType&&this.domElement.ownerDocument.exitPointerLock()},this.onPointerMove=e=>{if(e.pointerId!==this.firstPointerId)return;let t=e.clientX-this.prevMouse.x,i=e.clientY-this.prevMouse.y;this.prevMouse.set(e.clientX,e.clientY),"mouse"===e.pointerType&&"keys"!==this.rotBy&&(pv&&py<15.5&&!pg?(this.eulerDelta.y=-t*this.mouseOrbitSensitivity,this.eulerDelta.x=-i*this.mouseOrbitSensitivity):(this.eulerDelta.y=-e.movementX*this.mouseOrbitSensitivity,this.eulerDelta.x=-e.movementY*this.mouseOrbitSensitivity)),"mouse"!==e.pointerType&&"drag"===this.rotByTouch&&(this.eulerDelta.y=-t*this.mouseOrbitSensitivity*5,this.eulerDelta.x=-i*this.mouseOrbitSensitivity*5),this.controlsManager.requestRender()},this.onPointerlockChange=e=>{this.domElement.ownerDocument.pointerLockElement===this.domElement?LK.isLocked=!0:LK.isLocked=!1},this.onPointerlockError=()=>{},this.handleVisibilityChange=()=>{if(document?.hidden)for(let e in this.movementState)this.movementState[e]=0},this.onKeyDown=e=>{for(let t of(e.target instanceof HTMLInputElement||"ArrowLeft"!==e.code&&"ArrowUp"!==e.code&&"ArrowRight"!==e.code&&"ArrowDown"!==e.code&&"Space"!==e.code||e.preventDefault(),this.keyAssignments))if(e.key.toUpperCase()===t[1]||e.key===t[1]){this.movementState[t[0]]=1;break}this.controlsManager.requestRender()},this.onKeyUp=e=>{for(let t of this.keyAssignments)if(e.key.toUpperCase()===t[1]||e.key===t[1]||e.code.slice(3,e.code.length).toUpperCase()===t[1]){this.movementState[t[0]]=0;break}},this.copyVRGamePadValues=(e,t)=>{for(let i=2;i<4;i++){let r=e.axes[i];0===t?2===i?this.movementState.movePosX=r:this.movementState.movePosZ=r:(e.buttons[3].pressed?this.movementState.jump=1:this.movementState.jump=0,2===i?(.3>Math.abs(this.movementState.rotPosY)&&Math.abs(r)>=.3&&(this.vrEulerYOffset+=r<0?1:-1),this.movementState.rotPosY=r):"fly"===this.moveMode&&(this.movementState.moveNegY=r))}},this.sharedGameControlGlobals=a.sharedGameControlGlobals,e===l&&(this.isFirstPerson=!0),this.hiddenMatrix0.copy(this.object.hiddenMatrix),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.euler0.setFromQuaternion(this.quaternion,"YXZ");let d=this.euler0.clone(),p=d.y;if(this.objectRealQuat.copy(this.quaternion),d.y=0,this.quaternion.setFromEuler(d),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZ
8113RotMat.makeRotationFromQuaternion(this.quaternion),d.set(0,p,0),this.quaternion.setFromEuler(d),this.rot.setFromEuler(d),this.object.matrixAutoUpdate=!1,(this.isFirstPerson||!0===this.cameraFollow)&&(this.target0.copy(this.camera.getTarget()),this.zoom0=this.camera.zoom),!0===this.cameraFollow){let e,t;this.position0Cam.copy(this.camera.position),this.quat0Cam.copy(this.camera.quaternion),this.scale0Cam.copy(this.camera.scale),this.hiddenMatrix0Cam.copy(this.camera.hiddenMatrix),this.camera.parent?(this.camera.hiddenMatrix.copy(this.camera?.parent.matrixWorld),this.camera.matrix.copy(this.camera.matrixWorld)):this.camera.hiddenMatrix.identity(),this.camera.matrix.copy(this.camera.matrixWorld),this.camera.matrix.decompose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.matrixAutoUpdate=!1,this.offsetMatrix.copy(this.object.matrix).invert().multiply(this.camera.matrix);let i=new iD(0,0,-1).applyQuaternion(this.camera.quaternion),r=new iD().subVectors(this.position,this.camera.position);this.objectToCamXZ.copy(r),this.objectToCamXZ.y=0,this.objectToCamXZ0.copy(this.objectToCamXZ),1e-6>Math.abs(i.y)?(r.y=0,i.y=0,t=r.projectOnVector(i)):t=r.y/i.y>0?i.multiplyScalar(r.y/i.y):i.multiplyScalar(r.length()),this.targetToCamera0.copy(t).negate(),e=this.camera.position.clone().add(t),this.objectToTarget0.subVectors(e,this.position);let a=new rn().setFromQuaternion(this.camera.quaternion,"YXZ");this.cameraPolarOffset=-a.x,a.x=0,a.z=0,a.y-=Math.PI/2,this.cameraPolarAxis0.set(0,0,-1).applyEuler(a)}if(this.object instanceof Ej&&(this.object.matrixAutoUpdate=!1),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.rotByTouch=i.rotByTouch??"joystick",this.rotBy=i.rotBy??"keys",this.rotationMode=i.rotationMode??"normal",this.moveMode=i.moveMode??"walk",this.collisionEnabled=i.collisionEnabled,this.speedTranslate=(i.speedTranslate??250)*1,this.speedOrbit=(i.speedRotate??100)*.025,this.mouseOrbitSensitivity=(i.speedRotate??100)*16e-6,this.keyAssignments=i.keyAssignments.map(e=>{let t=[e[0],e[1]];return"▲"===t[1]?t[1]="ArrowUp":"◀"===t[1]?t[1]="ArrowLeft":"▼"===t[1]?t[1]="ArrowDown":"▶"===t[1]?t[1]="ArrowRight":"⇧"===t[1]?t[1]="Shift":"↵"===t[1]?t[1]="Enter":"Space"===t[1]?t[1]=" ":"⌘"===t[1]?t[1]="Meta":"Ctrl"===t[1]?t[1]="Control":"Esc"===t[1]&&(t[1]="Escape"),t}),"mouse"===i.rotBy){let e;-1!==(e=this.keyAssignments.findIndex(e=>"rotNegX"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotPosX"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotPosY"===e[0]))&&(this.keyAssignments[e][1]=""),-1!==(e=this.keyAssignments.findIndex(e=>"rotNegY"===e[0]))&&(this.keyAssignments[e][1]="")}this.lerpFactorPosStart=1-.02**(1/((i.delayPos[0]??.3)*60)),this.lerpFactorPosEnd=1-.02**(1/((i.delayPos[1]??.3)*60)),this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.lerpFactorRotStart=1-.02**(1/((i.delayRot[0]??.3)*60)),this.lerpFactorRotEnd=1-.02**(1/((i.delayRot[1]??.3)*60)),this.lerpFactorPosCamera=1-.02**(1/((i.delayPosCamera??.3)*60)),this.lerpFactorRotCamera=1-.02**(1/((i.delayRotCamera??.3)*60)),this.gravity=(this.gloabalPhysics.gravity??vU.defaultData.gravity)*12,this.usePhysics=this.gloabalPhysics.usePhysics??vU.defaultData.usePhysics,this.jumpPower=20*i.jumpPower,this.resetYPosition=this.position.y+Math.abs(i.resetYPosition)*(this.gravity>0?1:-1),this.alignToGround=i.alignToGround??!1,this.orientMode=i.autoOrientMove?i.orientMode:"none",this.orientWith=i.orientWith??xR.defaultDataThirdPerson.orientWith,this.slopeThresh=65*Math.PI/180,"capsule"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=i.collider.height/2-i.collider.radius,this.collider.segment.end.y=-this.collider.segment.start.y,this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height):"sphere"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=0,this.collider.segment.end.y=0,this.offset=2*i.collider.radius*.02/this.pixelsPerMeter,this.stepThresh=2*i.collider.radiu
vendor: 4,677 bytes, line 8113
8113s*.3/this.pixelsPerMeter,this.colliderHeight=2*i.collider.radius):(this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height),this.collider.type=i.collider.type;let f=new iD().fromArray(i.collider.position.map(e=>"number"==typeof e?e:0)),m=new iP().setFromEuler(new rn().fromArray([...i.collider.rotation.map(e=>"number"==typeof e?e:0),"XYZ"]));this.collider.position.copy(f).multiply(this.scale),this.collider.rotation.copy(m),this.collider.matrix.compose(f,m,LH),void 0!==i.cameraXAxis&&(this.cameraXAxis=i.cameraXAxis,this.cameraYAxis=i.cameraYAxis,this.minPolarAngle=i.cameraRotXLimits[0],this.maxPolarAngle=i.cameraRotXLimits[1],this.minAzimuthAngleRel=i.cameraRotYLimits[0],this.maxAzimuthAngleRel=i.cameraRotYLimits[1]),this.forwardDir=i.forwardDirection??"-z",this.isFirstPerson&&(this.forwardDir="-z"),this.runMultiplier=i.runMultiplier??2;let g=2*i.navmesh.destinationHelperRadius;if(g>0){let e=new pY;e.push({fi:0,data:{...vt.defaultData("light","phong"),alpha:0},id:"layer1"}),e.push({fi:0,data:{...vt.defaultData("color"),color:i.navmesh.destinationHelperColor,alpha:i.navmesh.destinationHelperColor.a},id:"layer2"});let t=new Cr({layers:e},{scene:this.page.scene,shared:this.sharedAssets});this.navMeshPathDest=new r7(b0.create({parameters:{width:g,height:g/10,hollow:.7}}),t),this.navMeshPathDest.material.userData.opacity0=i.navmesh.destinationHelperColor.a}this.activate()}reset(e=!1){if(this.object.hiddenMatrix.copy(this.hiddenMatrix0),e){this.object.updateMatrix(),this.object.updateMatrixWorld(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity();let e=new rn().setFromQuaternion(this.quaternion,"YXZ"),t=e.y;this.objectRealQuat.copy(this.quaternion),e.y=0,this.quaternion.setFromEuler(e),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.quaternion),e.set(0,t,0),this.quaternion.setFromEuler(e),this.rot.setFromEuler(e),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.velocityTarget.set(0,0,0),this.velocity.set(0,0,0)}else this.object instanceof Ej?this.object.matrixAutoUpdate=!0:this.object.updateMatrix();!0===this.cameraFollow&&(this.camera.quaternion.copy(this.quat0Cam),this.camera.position.copy(this.position0Cam),this.camera.scale.copy(this.scale0Cam),this.camera.hiddenMatrix.copy(this.hiddenMatrix0Cam),this.camera.matrixAutoUpdate=!0),this.controlsManager.requestRender()}activate(){this.instantiateActions(),this.domElement.ownerDocument.addEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.addEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.addEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.addEventListener("visibilitychange",this.handleVisibilityChange)}deactivate(){this.disposeActions(),this.domElement.ownerDocument.removeEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.removeEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.removeEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.removeEventListener("visibilitychange",this.handleVisibilityChange)}dispose(){this.deactivate(),this.navMeshPathDest?.parent&&this.page.remove(this.navMeshPathDest)}instantiateActions(){let e=this.data,t=this.sharedAssets;void 0!==e.gameActions&&(this.actions={},xI.list.forEach(i=>{this.actions[i]=Lv({...e,disabled:!1,type:"GameControl"},e.gameActions[i],this.page,t,this.controlsManager.eventManager,this.object)})),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"),this.initialAction&&(this.initialAction=!1)}disposeActions(){this.initialAction=!1,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),Ly(this.actions.idle),Ly(this.actions.move),Ly(this.actions.run),Ly(this.actions.jump)}dispatchStartEvent(e){void 0!==this.actions[e]&&(this.actionState[e]||(this.actionState[e]=!0,this.actions[e].Transition.forEach(e
vendor: 16,013 bytes, line 8113
8113=>{e.play()}),this.actions[e].Animation.forEach(e=>{e.play(!1===this.initialAction)}),this.actions[e].TimelineAnimation.forEach(e=>{e.play()}),this.actions[e].Create.forEach(e=>{e.dispatchStart()}),this.actions[e].Audio.forEach(e=>{e.dispatchGameControl("start")}),this.actions[e].Particles.forEach(e=>{e.dispatchGameControl("start")})))}dispatchStopEvent(e){void 0!==this.actions[e]&&this.actionState[e]&&(this.actionState[e]=!1,this.actions[e].Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.page.scene,shared:this.sharedAssets})}),this.actions[e].TimelineAnimation.forEach(e=>{e.stop()}),this.actions[e].Create.forEach(e=>{e.dispatchStop()}),this.actions[e].Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.actions[e].Particles.forEach(e=>{e.dispatchGameControl("stop")}))}get colliderWorldPosition(){return LR.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.position)}update(e,t,i){if(this.gravity<0?this.position.y<this.resetYPosition:this.position.y>this.resetYPosition)return this.reset(!0),!0;this.sharedGameControlGlobals.gamePads.forEach(this.copyVRGamePadValues);let r=(this.isFirstFrame?16.6:e)/1e3;this.isFirstFrame&&(this.isFirstFrame=!1);let a=60*r,o=!1;if(this.usePhysics&&this.collisionEnabled&&this.object.rigidBody?.collider(0).shape){let e=LL.set(0,(0===this.velocity.y?this.pixelsPerMeter*Math.max(Math.abs(this.gravity)/120,1)*(this.gravity>0?1:-1):this.velocity.y)*r,0).divideScalar(this.pixelsPerMeter),t=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter),this.colliderWorldQuat,e,this.object.rigidBody?.collider(0).shape,1,!1,16,void 0,void 0,this.object.rigidBody);if(t){this.onObject=!0,this.groundNormal.set(t.normal2.x,t.normal2.y,t.normal2.z).applyQuaternion(this.colliderWorldQuat).negate(),this.alignToGround&&this.groundTiltAdjustment(this.groundNormal),Math.acos(this.groundNormal.y)<this.slopeThresh&&(o=!0),t.collider.parent()?.bodyType()===0&&Math.acos(this.groundNormal.y)*(180/Math.PI)>45&&(this.onObject=!1);let e=t.collider.parent();for(let t of(this.groundYRotation=0,this.groundVelocity.set(0,0,0),this.sharedGameControlGlobals.entitiesWithTransformAnim))if(t.rigidBody===e&&t.userData.isFollowingObj!==this.object.uuid){(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(LR,Lk,LL),this.groundVelocity.subVectors(LR,t.prevT),this.object.getWorldPosition(LL).add(this.collider.position).sub(LR),this.groundYRotation=LV.setFromQuaternion(Lk).y-t.prevR.y,LB.copy(LL).applyAxisAngle(LG,this.groundYRotation),this.groundVelocity.add(LB.sub(LL)).divideScalar(r);break}}else this.onObject=!1}if("walk"===this.moveMode&&this.collisionEnabled&&(1===this.movementState.jump&&this.onObject&&(this.velocityTarget.y=this.jumpPower,this.movementState.jump=0,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("jump"),this.onObject=!1),this.onObject?this.velocityTarget.y/=2:this.velocityTarget.y+=this.gravity*a),"fly"===this.moveMode&&(this.velocityTarget.y=(this.movementState.movePosY-this.movementState.moveNegY)*this.speedTranslate),this.directionXZ.z=this.movementState.movePosZ-this.movementState.moveNegZ,this.directionXZ.x=this.movementState.movePosX-this.movementState.moveNegX,"+z"===this.forwardDir&&this.directionXZ.multiplyScalar(-1),this.directionXZ.manhattanLength()>0&&(this.path=[]),this.navMeshPathDest){let e=this.navMeshPathDest.material;if("walk"===this.moveMode&&this.path.length>1){this.navMeshPathDest.position.copy(this.path[this.path.length-1]),this.navMeshPathDest.parent||this.page.add(this.navMeshPathDest);let t=LR.subVectors(this.path[1],this.position),i=LL.subVectors(this.path[1],this.path[0]);0>t.dot(i)?this.path.shift():(this.directionXZ.x=i.x,this.directionXZ.z=i.z),e.opacity=e.userData.opacity0}else e.opacity-=.05*e.userData.opacity0,this.navMeshPathDest.material.opacity<=0&&this.navMeshPathDest.parent&&this.page.remove(this.navMeshPathDest)}this.directionXZ.normalize(),this.movementState.run?this.moveForce=this.runMultiplier:this.moveForce=1,this.velocityTarget.z=this.directionXZ.z*this.speedTranslate*this.moveForce,this.velocityTarget.x=this.directionXZ.x*this.speedTranslate*this.moveForce,("walk"===this.moveMode?this.velocityTarget.x+this.velocityTarget.z===0:0===this.velocityTarget.manhattanLength())?this.lerpFactorPos.setScalar(this.lerpFactorPosEnd):this.lerpFactorPos.setScalar(this.lerpFactorPosStart),"walk"===this.moveMode&&(this.lerpFactorPos.y=1),!1===this.didHit&&0===this.pushedVelocity.manhattanLength()||!1===this.usePhysics?(this.velocity.x+=(this.velocityTarget.x-this.velocity.x)*(1-(1-this.lerpFactorPos.x)**a),this.velocity.y+=(this.velocityTarget.y-this.velocity.y)*(1-(1-this.lerpFactorPos.y)**a),this.velocity.z+=(this.velocityTarget.z-this.velocity.z)*(1-(1-this.lerpFactorPos.z)**a)):this.velocity.copy(this.velocityTarget),("walk"===this.moveMode?this.velocity.x**2+this.velocity.z**2<this.speedTranslate:this.velocity.lengthSq()<this.speedTranslate)?(this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"))):(this.dispatchStopEvent("idle"),(this.onObject||"fly"===this.moveMode)&&(this.dispatchStopEvent("jump"),this.movementState.run?(this.dispatchStopEvent("move"),this.dispatchStartEvent("run")):(this.dispatchStopEvent("run"),this.dispatchStartEvent("move"))));let l=LI.copy(this.velocity);if("none"!==this.orientMode&&!1===this.isFirstPerson){let e=LL.copy(l);e.y=0,l.set(0,l.y,e.length()*("+z"===this.forwardDir?1:-1))}if(this.directionXZ.manhattanLength()>0&&"none"!==this.orientMode&&!1===this.isFirstPerson)if("camera"===this.orientWith&&this.path.length<=1){this.camera.getWorldDirection(LR);let e=LB.copy(LG).multiplyScalar(LR.dot(LG));LR.sub(e);let t=LL.copy(this.directionXZ);t.x*=-1,this.rot.y=LR.angleTo(t)*(LR.cross(t).y>0?-1:1)+this.rotationAccumWhenOrientWithCamera}else this.rot.y=(this.path.length>1?0:this.euler.y)+Math.atan2(-this.directionXZ.z,this.directionXZ.x)+Math.PI/2*("+z"===this.forwardDir?1:-1);if(LV.setFromVector3(this.rot),"walk"===this.moveMode&&(LV.x=0),l.applyEuler(LV),o&&(Lk.setFromUnitVectors(LG,this.groundNormal),l.applyQuaternion(Lk)),i){let e=LV.set(0,this.vrEulerYOffset*LZ,0);i.applyEuler(e),l.x+=i.x,l.z+=i.z,this.nonColliderPosOffset.elements[13]+=i.y*r}if(!0===this.usePhysics&&this.object.rigidBody){for(let e of(this.pushedVelocity.set(0,0,0),this.sharedGameControlGlobals.entitiesWithTransformAnim)){let t=LB.setFromMatrixPosition(e.matrixWorld).sub(e.prevT).divideScalar(r).divideScalar(this.pixelsPerMeter),i=e.rigidBody.collider(0).castCollider(t,this.object.rigidBody.collider(0),LR.copy(l).divideScalar(this.pixelsPerMeter),r,!1);t.multiplyScalar(this.pixelsPerMeter);let a=S7.is(e)?e:e.object;if(null!==i&&this.lastHitObj!==a){let t;e instanceof bO&&(t=e);let i=this.sharedGameControlGlobals.entityToCollisionEvents[a.uuid];if(i)for(let e of i)"character"===e.data.target&&(e.dispatch(t),a.dispatchEvent(z$));this.lastHitObj=a}if(null!==i){this.pushedVelocity.copy(t),LL.copy(i.normal1).applyQuaternion(e.quaternion);break}}if(0!==this.pushedVelocity.manhattanLength()){let e=LL.dot(l);e<0&&l.addScaledVector(LL,-e),l.add(this.pushedVelocity)}else l.add(this.groundVelocity)}if(this.rotDirection.y=Number(this.movementState.rotPosY)-Number(this.movementState.rotNegY),this.rotDirection.x=Number(this.movementState.rotPosX)-Number(this.movementState.rotNegX),this.rotDirection.normalize(),"normal"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)||"steer"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)&&(this.movementState.movePosZ||this.movementState.moveNegZ||"walk"===this.moveMode)?this.rotVelocityStick.x=-this.rotDirection.x*this.speedOrbit*this.rotForce:this.rotVelocityStick.x=0,"normal"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)||"steer"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)&&(this.movementState.movePosZ||this.movementState.moveNegZ)?this.rotVelocityStick.y=-this.rotDirection.y*this.speedOrbit*this.rotForce:this.rotVelocityStick.y=0,this.rotVelocityTarget.subVectors(this.eulerDelta.divideScalar(r),this.rotVelocityStick),0===this.rotVelocityTarget.manhattanLength()?this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotEnd)**a):this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotStart)**a),this.euler.x+=this.rotVelocity.x*r,this.euler.y+=this.rotVelocity.y*r+this.groundYRotation,0===this.rotVelocityTarget.y&&0===this.directionXZ.manhattanLength()?this.rotationAccumWhenOrientWithCamera=0:(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.rotationAccumWhenOrientWithCamera+=this.rotVelocity.y*r),!1===this.isFirstPerson&&"none"!==this.orientMode&&this.directionXZ.manhattanLength()>0){if("radial"===this.orientMode){this.objectToCamXZ.copy(this.objectToCamXZ0).applyAxisAngle(LG,this.euler.y-this.euler0.y);let e=LL.copy(this.objectToCamXZ).normalize(),t=LB.copy(l).multiplyScalar(r);t.y=0;let i=t.sub(LR.copy(e).multiplyScalar(t.dot(e))).cross(e).y;this.euler.y-=Math.atan2(i,this.objectToCamXZ.length())}}else this.rot.y+=this.rotVelocity.y*r+this.groundYRotation,0!==this.rotVelocityTarget.y&&(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.euler.y=this.rot.y);if(!0===this.cameraFollow&&("walk"===this.moveMode?"Limit"===this.cameraXAxis?this.euler.x=t8.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):this.euler.x=t8.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset,this.PI_2+this.cameraPolarOffset):"Limit"===this.cameraXAxis&&(this.euler.x=t8.clamp(this.euler.x,-this.PI_2,this.PI_2))),"fly"===this.moveMode?this.rot.x=this.euler.x:this.isFirstPerson&&(t?LV.copy(t):LV.copy(this.euler),LV.y=0,this.nonColliderRotOffset.makeRotationFromEuler(LV)),t&&("walk"===this.moveMode?(this.rot.y=t.y,this.rot.x=0,this.rot.z=0):this.rot.setFromEuler(t),this.rot.y+=this.vrEulerYOffset*LZ),LU.setFromAxisAngle(Lj,this.rot.x),Lk.setFromAxisAngle(LG,this.rot.y),Lk.multiply(LU),LU.setFromAxisAngle(LW,this.rot.z),Lk.multiply(LU),this.quaternion.copy(Lk),this.objectRealQuat.multiplyQuaternions(this.quaternion,this.objXZQuat),this.colliderWorldQuat.copy(this.objectRealQuat).multiply(this.collider.rotation),this.collisionEnabled)if(this.usePhysics&&this.object.rigidBody?.collider(0).shape){let e=LL.copy(l).multiplyScalar(r/this.pixelsPerMeter),t=null;this.didHit=!1;let i=new iD;for(let r=0;r<5;r++){let a=e.length(),o=LB.copy(e).normalize();if(null!==(t=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(i),this.colliderWorldQuat,o,this.object.rigidBody.collider(0).shape,a,!1,24,void 0,void 0,this.object.rigidBody))){this.didHit=!0;let l=this.sharedGameControlGlobals.colliderToEntity.get(t.collider.handle);if(l!==this.lastHitObj&&0===r){this.lastHitObj=l;let e=this.sharedGameControlGlobals.entityToCollisionEvents[l?.uuid];if(e){for(let i of e)if("character"===i.data.target){let e=(this.sharedGameControlGlobals.rapierWorld?.getCollider(t.collider.handle))._parent,r;if(l.cloner){for(let t of l.cloner.children)if(t.rigidBody===e){r=t;break}}i.dispatch(r),l.dispatchEvent(z$)}}}let h=LD.set(t.normal2.x,t.normal2.y,t.normal2.z).applyQuaternion(this.colliderWorldQuat),c=LO.copy(o).multiplyScalar(t.toi).dot(h),d=t.toi;if(0===d&&(this.position.y+=this.offset*this.pixelsPerMeter),c>this.offset&&(d=t.toi*(c-this.offset)/c,i.addScaledVector(o,d)),e.copy(o).multiplyScalar(a-d),Math.acos(-h.y)>this.slopeThresh){let r=this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(i),a=LB.copy(t.witness2).applyQuaternion(this.colliderWorldQuat);a.y=0;let o=r.add(a);o.y+=this.stepThresh;let l=this.sharedGameControlGlobals.rapierWorld.castShape(o,this.colliderWorldQuat,e,this.object.rigidBody?.collider(0).shape,1,!1,24,void 0,void 0,this.object.rigidBody);null!==l&&0===l.toi&&(h.y=0,h.normalize())}e.addScaledVector(h,-e.dot(h))}else{0===r&&0!==this.directionXZ.manhattanLength()&&(this.lastHitObj=null),i.add(e);break}}this.position.addScaledVector(i,this.pixelsPerMeter),this.object.rigidBody?.setTranslation(LR.copy(this.position).divideScalar(this.pixelsPerMeter),!0),this.object.rigidBody?.setRotation(LU.copy(this.quaternion).premultiply(this.groundTilt).multiply(this.objXZQuat),!0)}else{let e=this.onObject?1:5,t=l.multiplyScalar(r/e);for(let i=0;i<e;i++)this.position.add(t),this.collisionAdjustment(r/e)}else this.position.addScaledVector(l,r);if("walk"===this.moveMode&&this.onObject&&(this.velocityTarget.y=0,this.velocity.y=0),this.quaternion.premultiply(this.groundTilt).multiply(this.objXZQuat),this.object.matrix.compose(this.position,this.quaternion,this.scale),this.object.matrixWorldNeedsUpdate=!0,this.object.matrix.multiply(this.nonColliderPosOffset).multiply(this.nonColliderRotOffset),this.quaternion.premultiply(this.groundTiltInv).multiply(this.objXZQuatInv),!0===this.cameraFollow){this.updateFollowArms();let e=this.objectToTarget.add(this.position),t=this.targetToCamera.add(e);Lz.lookAt(t,e,LG).setPosition(t),Lz.decompose(this.targetPos,this.targetQuat,LR),this.camera.quaternion.slerp(this.targetQuat,1-(1-this.lerpFactorRotCamera)**a),this.camera.position.lerp(this.targetPos,1-(1-this.lerpFactorPosCamera)**a),this.camera.updateMatrix(),this.camera.updateMatrixWorld(),"Limit"===this.cameraYAxis&&"cartesian"===this.orientMode&&(this.euler.y=t8.clamp(this.euler.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel)),this.euler.x=t8.clamp(this.euler.x,-this.PI_2+(this.cameraPolarOffset<0?this.cameraPolarOffset:0),this.PI_2+(this.cameraPolarOffset>0?this.cameraPolarOffset:0))}return this.eulerDelta.set(0,0,0),this.object.dispatchEvent(LQ),!(this.path.length<2&&this.lastPosition.distanceToSquared(this.position)<this.threshEndTranslate&&Math.abs(this.rotVelocity.x)<this.threshEndRotVel&&Math.abs(this.rotVelocity.y)<this.threshEndRotVel&&(void 0===this.camera||this.isFirstPerson||this.lastCameraPosition.distanceToSquared(this.camera.position)<this.threshEndTranslate&&8*(1-this.lastCameraQuaternion.dot(this.camera.quaternion))<this.threshEndRotate)&&("fly"===this.moveMode||!0===this.onObject||!1===this.collisionEnabled)&&(null===this.navMeshPathDest||this.navMeshPathDest.material.opacity<-.04*this.navMeshPathDest?.material?.userData.opacity0))&&(this.camera&&(this.lastCameraPosition.copy(this.camera.position),this.lastCameraQuaternion.copy(this.camera.quaternion)),this.lastPosition.copy(this.position),this.object.dispatchEvent(LY),!0)}updateFollowArms(){let e;this.objectToTarget.copy(this.objectToTarget0),this.targetToCamera.copy(this.targetToCamera0);let t=LU.setFromAxisAngle(LG,"Limit"===this.cameraYAxis&&"radial"!==this.orientMode?t8.clamp(this.euler.y-this.euler0.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel):this.euler.y-this.euler0.y);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&this.objectToTarget.applyQuaternion(t),e="Limit"===this.cameraXAxis?t8.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):t8.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset+1e-6,this.PI_2+this.cameraPolarOffset-1e-6);let i=LR.copy(this.cameraPolarAxis0);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&i.applyQuaternion(t);let r=Lk.setFromAxisAngle(i,e);"Locked"!==this.cameraYAxis&&this.targetToCamera.applyQuaternion(t),"Locked"!==this.cameraXAxis&&this.targetToCamera.applyQuaternion(r)}groundTiltAdjustment(e){180*LG.angleTo(e)/Math.PI<15||180*LG.angleTo(e)/Math.PI>85?LU.identity():LU.setFromUnitVectors(LG,e),this.groundTilt.slerp(LU,.06),this.groundTiltInv.copy(this.groundTilt).invert()}collisionAdjustment(e){let t=LO.set(0,0,0);this.object.matrix.compose(this.position,this.quaternion,this.scale);
8113let i=Lz.multiplyMatrices(this.object.matrix,this.objXZRotMat).multiply(this.collider.matrix).decompose(LR,LU,LL).compose(LR,LU,LH);this.sharedGameControlGlobals.entitiesWithTransformAnim.forEach(e=>{if(e===this.object||e.isDescendantOf(this.object)||!e.bvhGeometry||!e.bvhGeometry.boundsTree)return;LX.makeEmpty(),e.updateMatrixWorldSVD();let r=e.matrixWorldRigid,a=LF.copy(r).invert(),o=LN.copy(LF).multiply(i);Lq.copy(this.collider.segment),Lq.start.applyMatrix4(o),Lq.end.applyMatrix4(o);let l=LD.copy(this.position).applyMatrix4(a);LX.expandByPoint(Lq.start),LX.expandByPoint(Lq.end),LX.min.addScalar(-this.collider.radius),LX.max.addScalar(this.collider.radius),e.bvhGeometry.boundsTree.shapecast({traverseBoundsOrder:e=>e.distanceToPoint(Lq.end),intersectsBounds:e=>e.intersectsBox(LX),intersectsTriangle:e=>{let i=e.closestPointToSegment(Lq,LR,LL);if(i<this.collider.radius){let e=this.collider.radius-i,a=LL.sub(LR).normalize(),o=LB.copy(l);o.addScaledVector(a,e);let h=o.applyMatrix4(r).sub(this.position);t.add(h),Lq.start.addScaledVector(a,e),Lq.end.addScaledVector(a,e)}}})}),LX.makeEmpty(),Lq.copy(this.collider.segment),Lq.start.applyMatrix4(i),Lq.end.applyMatrix4(i),LX.expandByPoint(Lq.start),LX.expandByPoint(Lq.end),LX.min.addScalar(-this.collider.radius),LX.max.addScalar(this.collider.radius),this.sharedGameControlGlobals.staticMeshBVH?.shapecast({traverseBoundsOrder:e=>e.distanceToPoint(Lq.end),intersectsBounds:e=>e.intersectsBox(LX),intersectsTriangle:e=>{let i=e.closestPointToSegment(Lq,LR,LL);if(i<this.collider.radius){let e=this.collider.radius-i,r=LL.sub(LR).normalize();this.alignToGround&&this.groundTiltAdjustment(r),t.addScaledVector(r,e),Lq.start.addScaledVector(r,e),Lq.end.addScaledVector(r,e)}}}),this.onObject=Math.abs(t.y)>Math.abs(e*this.velocity.y*.25),this.onObject&&this.dispatchStopEvent("jump");let r=Math.max(0,t.length()-1e-5);t.normalize().multiplyScalar(r),this.position.add(t)}pause(){this.firstPointerId=-1,this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0,run:0},this.deactivate()}resume(){this.activate()}};LK.isLocked=!1;var LJ=tB(tN());function L$(e){let t=e.elements,i=t[0]**2+t[1]**2+t[2]**2,r=t[4]**2+t[5]**2+t[6]**2,a=t[8]**2+t[9]**2+t[10]**2,o=t[0]**2+t[4]**2+t[8]**2,l=t[1]**2+t[5]**2+t[9]**2,h=t[2]**2+t[6]**2+t[10]**2;return i<1e-8||r<1e-8||a<1e-8||o<1e-8||l<1e-8||h<1e-8}function L0(e,t){let i=new rQ;if(t&&L$(t)||!e.getAttribute("position"))return i.setAttribute("position",new rV([],3)),i.setIndex([]),i;let{positions:r,triIndices:a}=_b(e.getAttribute("position"),e.getIndex());return i.setAttribute("position",new rV(r,3)),i.setIndex(a),t&&i.applyMatrix4(t),i}var L1=new i6,L2=new i6,L3=[[0,0,0],[0,0,0],[0,0,0]];function L4(e){let t=e.elements;L3[0][0]=t[0],L3[0][1]=t[4],L3[0][2]=t[8],L3[1][0]=t[1],L3[1][1]=t[5],L3[1][2]=t[9],L3[2][0]=t[2],L3[2][1]=t[6],L3[2][2]=t[10];let{u:i,v:r}=(0,LJ.SVD)(L3),a=L1.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),o=L2.set(r[0][0],r[0][1],r[0][2],0,r[1][0],r[1][1],r[1][2],0,r[2][0],r[2][1],r[2][2],0,0,0,0,1);return a.multiply(o.transpose())}var L5=class extends lG{constructor(){super(),this.layers.enable(3),this.layers.enable(8),this.layers.enable(9)}setFromCamera(e,t){t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,-1).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld),this.camera=t):t.isPerspectiveCamera&&(this.ray.origin.set(e.x,e.y,-1).unproject(t),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize(),this.camera=t)}intersectVisibleObjects(e,t=!0,i=[]){return e.forEach(e=>{e.visible&&this.intersectObject(e,t,i)}),i}createRaycastLineHelper(){let e=new nY({color:65280,linewidth:10}),t=new iD(this.ray.origin.x,this.ray.origin.y,this.ray.origin.z),i=new iD(this.ray.direction.x,this.ray.direction.y,this.ray.direction.z),r=this.camera.far-this.camera.near,a=new iD().addVectors(t,i.multiplyScalar(r)),o=new rQ;return o.setFromPoints([t,a]),new n0(o,e)}},L6=e=>e instanceof E2||e instanceof D5;function L8(e,t){return e.distance-t.distance}function L9(e,t,i,r=!1){if(!r&&!i.some(t=>void 0!==Bt(e,t)))return[];let a=[];
8113return t.children.forEach(t=>(function e(t,i,r){if(!(!bH(i)||!i.visible))for(let a of(EY(i)&&i.raycast(t,r),i.children))e(t,a,r)})(e,t,a)),a.sort(L8),a}function L7(e){let t=[];if(e.length){let i=e[0].object;bH(i)&&t.push(i);let r=i.parent;for(;r;)L6(r)&&t.push(r),r=r.parent}return t}function Be(e,t,i,r){let a=e.frame;if(a){let e=t[0]*a.width,o=(1-t[1])*a.height;for(let t of i){let i=t===a.uuid?a:a.find(t);if(i?.intersects(e,o))return r(i),!0}}return!1}function Bt(e,t){if(EY(t)){if(t.visible){let i=[];return t.raycast(e,i),i.length?i[0]:void 0}}else if(L6(t))return function e(t,i){if(!(!bH(i)||!i.visible)){if(EY(i)){let e=[];if(i.raycast(t,e),e.length)return e[0]}for(let r of i.children){let i=e(t,r);if(i)return i}}}(e,t)}var Bi=class{constructor(e,t,i,r,a,o,l,h){this.renderer=e,this.publish=t,this.scene=i,this.getCamera=r,this.sharedAssets=a,this.requestRender=o,this.isExport=l,this.frame=h,this.raycaster=new L5,this._useWindowEvents=!1,this.pointerWorld={x:0,y:0},this.pointerScreen={x:0,y:0},this._useWindowEvents="window"===t.mouseEventTarget,this.domElement=e.domElement,this.eventElement=this._useWindowEvents?window:e.domElement,this._domRect=this.domElement.getBoundingClientRect()}get stopRaycast(){return this.publish.stopRaycast}get page(){return this.scene.activePage}set useWindowEvents(e){this._useWindowEvents=e,this.eventElement=e?window:this.renderer.domElement}get useWindowEvents(){return this._useWindowEvents}set domRect(e){this._domRect=e}get domRect(){return this._domRect}updateRaycaster(e){var t,i;let{pageX:r,pageY:a}=e.touches?.length>0?e.touches[0]:e;this.pointerWorld={x:(r-((t=this._domRect).left+window.scrollX))/t.width*2-1,y:-(2*((a-(t.top+window.scrollY))/t.height))+1},this.pointerScreen={x:(r-((i=this._domRect).left+window.scrollX))/i.width,y:1-(a-(i.top+window.scrollY))/i.height},this.raycaster.setFromCamera(this.pointerWorld,this.getCamera())}dispose(){this.scene=void 0,this.sharedAssets=void 0,this.publish=void 0,this.getCamera=void 0,this.requestRender=void 0,this.frame=void 0,this.isExport=void 0}},Br=class{constructor(e){this.eventContext=e,this.domEventsNeeded=new Set,this.hasVideoAction=!1}connect(){}disconnect(){}dispose(){this.disconnect(),this.eventContext=void 0}},Bs=[["start","Start"],["keyDown","KeyDown"],["keyUp","KeyUp"],["mouseDown","MouseDown"],["mouseUp","MouseUp"],["mouseHover","MouseHover"],["collision","Collision"],["lookAt","LookAt"],["follow","Follow"],["scroll","Scroll"]],Ba=e=>Bs.find(([t,i])=>i===e)?.[0],Bn=e=>Bs.find(([t])=>t===e)?.[1],Bo=(e,t)=>{let i=Ba(e);if(i){let e=new CustomEvent(i,{bubbles:!0});return Object.defineProperty(e,"target",{writable:!1,value:t}),e}},Bl=class extends Br{constructor(){super(...arguments),this.objectsPerEvents=new Map,this.splineEvents={},this.onBeginEvent=e=>{if(!e.eventName||!e.target||"Scroll"===e.eventName)return;let t=this.splineEvents[Ba(e.eventName)]?.[e.target.uuid];if(!t)return;"Scroll"===e.eventName&&void 0!==e.deltaY&&Object.assign(t,{deltaY:e.deltaY});let{domElement:i}=this.eventContext;i.dispatchEvent(t)}}connect(){let{page:e}=this.eventContext;e.traverseEntity(e=>{if(e.data?.events.length){for(let[t,i]of Bs)if(e.data.events.some(e=>e.data.type===i&&!e.data.disabled)){this.objectsPerEvents.has(t)?this.objectsPerEvents.get(t)?.push(e):this.objectsPerEvents.set(t,[e]);let r=Bo(i,{id:e.uuid,name:e.name}),a=this.splineEvents[t];a?a[e.uuid]=r:this.splineEvents[t]={[e.uuid]:r}}}}),this.objectsPerEvents.forEach(e=>{e.forEach(e=>{e.addEventListener("beginEvent",this.onBeginEvent)})})}disconnect(){this.objectsPerEvents.forEach(e=>{e.forEach(e=>{e.removeEventListener("beginEvent",this.onBeginEvent)})})}},Bh=class{constructor(e,t,i,r,a,o){if(this.id=e,this.data=t,this.object=i,this.entered=!1,("KeyDown"===t.type||"KeyUp"===t.type||"KeyPress"===t.type)&&!t.key)throw Error("Missing property");this.actions=Lv(t,t.actions,r,a,o,i)}disconnect(){Ly(this.actions)}dispatchHeld(e){this.actions.Create.forEach(t=>{e&&t.dispatchThrottled.cancel(),t.dispatchThrottled()})}dispatch(e=!1){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init(
vendor: 728 bytes, line 8113
8113))}),"MousePress"===this.data.type||"KeyPress"===this.data.type?this.entered||(this.entered=!0,this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStart())):(this.actions.Transition.some(e=>e.playing&&"Toggle"!==e.data.runMode)||this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.SwitchCamera.some(e=>e.playing&&"Toggle"!==e.data.runMode)||this.actions.SwitchCamera.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Animation.forEach(e=>{
vendor: 2,466 bytes, line 8113
8113"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.TimelineAnimation.forEach(e=>{"runMode"in e.data&&"Toggle"===e.data.runMode?e.toggle():e.play()})),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),!1===e&&this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchRelease(){this.entered&&(this.entered=!1,this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStop()))}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},
vendor: 10,088 bytes, line 8113
8113Bc=class extends Br{constructor(e,t,i){super(e),this.eventManager=t,this.useForRaycastProperty=i,this.objectsPerTypes={MouseDown:[],MouseUp:[],MousePress:[],KeyDown:[],KeyUp:[],KeyPress:[]},this.canvasMouseEvents=[],this.eventsPerObjects={MouseDown:{},MouseUp:{},MousePress:{},KeyDown:{},KeyUp:{},KeyPress:{}},this.heldKeys={},this.heldKeysPress={},this._prevObjects=[],this.sceneInterects=null,this.onCanvasRaycast=e=>{if(!0===this.useForRaycastProperty&&null===this.sceneInterects){this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=L9(t,i,[],!0);this.sceneInterects=r,r.length&&(this.eventContext.sharedAssets.raycastProperty={x:r[0].point.x,y:r[0].point.y,z:r[0].point.z,objX:r[0].object.matrixWorld.elements[12],objY:r[0].object.matrixWorld.elements[13],objZ:r[0].object.matrixWorld.elements[14]})}},this.onCanvasMouseDown=e=>{(e.target===this.eventContext.domElement||"SPLINE-VIEWER"===e.target.tagName)&&this.canvasMouseEvents.forEach(t=>{("MouseDown"===t.data.type||"MousePress"===t.data.type)&&(this.onCanvasRaycast(e),t.dispatch())})},this.onCanvasMouseUp=e=>{(e.target===this.eventContext.domElement||"SPLINE-VIEWER"===e.target.tagName)&&this.canvasMouseEvents.forEach(t=>{"MouseUp"===t.data.type?(this.onCanvasRaycast(e),t.dispatch()):"MousePress"===t.data.type&&t.dispatchRelease()})},this.onMouseDown=e=>{pb.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseEvent("MouseDown"))},this.onMouseUp=e=>{pb.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseEvent("MouseUp"))},this.onMousePressDown=e=>{pb.length>1||(this.eventContext.updateRaycaster(e),this.handleMousePressEvent())},this.onMousePressRelease=e=>{pb.length>1||(this.eventContext.updateRaycaster(e),this.handleMousePressEvent(!0))},this.onKeyDown=e=>{this.heldKeys[e.key]||(this.handleKeyEvent(e,"KeyDown"),this.handleKeyEventHeld(e,"KeyDown",!0)),this.heldKeys[e.key]=!0},this.onKeyUp=e=>{this.handleKeyEvent(e,"KeyUp"),this.handleKeyEventHeld(e,"KeyUp",!0)},this.onKeyPressDown=e=>{this.heldKeysPress[e.key]?this.handleKeyEventHeld(e,"KeyPress"):(this.handleKeyEvent(e,"KeyPress"),this.handleKeyEventHeld(e,"KeyPress",!0)),this.heldKeysPress[e.key]=!0},this.onKeyPressUp=e=>{this.handleKeyEvent(e,"KeyPress",!0)},this.releaseHeldKey=e=>{delete this.heldKeys[e.key]},this.releaseHeldKeyPress=e=>{delete this.heldKeysPress[e.key]},this._onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Bn(e);r&&("MouseDown"===r||"MouseUp"===r||"MousePress"===r?(t.dispatchEvent({type:"beginEvent",eventName:r}),this.eventsPerObjects[r]?.[t.uuid]?.forEach(e=>{e.dispatchUserEvent(i)}),this.canvasMouseEvents.forEach(e=>{e.dispatchUserEvent(i)})):("KeyDown"===r||"KeyUp"===r||"KeyPress"===r)&&(t.dispatchEvent({type:"beginEvent",eventName:r}),this.eventsPerObjects[r]?.[t.uuid]?.forEach(e=>{e.dispatchUserEvent()})))}}connect(){let{page:e,sharedAssets:t,domElement:i}=this.eventContext,r=(i,r)=>{if(i.data?.events.length)for(let a of["MouseDown","MouseUp","MousePress","KeyDown","KeyUp","KeyPress"]){let o=this.eventsPerObjects[a];if(i.data.events.filter(({data:e})=>e.type===a&&!0!==e.disabled).forEach(({id:r,data:a})=>{try{let l=new Bh(r,a,i,e,t,this.eventManager);l.actions.Video.length&&(this.hasVideoAction=!0),("MouseDown"===a.type||"MouseUp"===a.type||"MousePress"===a.type)&&("Canvas"===a.mode||"Window"===a.mode)?this.canvasMouseEvents.push(l):(o[i.uuid]?o[i.uuid].some(e=>e.id===l.id)||o[i.uuid].push(l):o[i.uuid]=[l],i instanceof OP&&i.traverseChildren(e=>{if(!e.visible)return!0;e instanceof CH&&"shapeBlendNode"in e.data.geometry&&e.data.geometry.shapeBlendNode?.operation!==2&&(o[e.uuid]?o[e.uuid].push(l):o[e.uuid]=[l])}))}catch{}}),o[i.uuid]?.length&&(this.objectsPerTypes[a].push(i instanceof Do&&("MouseDown"===a||"MouseUp"===a||"MousePress"===a)?r:i),i instanceof OP)){let e=this.objectsPerTypes[a];i.traverseChildren(t=>{if(!t.visible)return!0;t instanceof CH&&-1===e.indexOf(t)&&e.push(t)})}}};e.traverseEntity(e=>{(e instanceof D7||e instanceof D0)&&e.frame?.traverse(t=>{r(t,e)}),r(e)}),this.heldKeys={},this.heldKeysPress={},this.domEventsNeeded.clear(),i.addEventListener("pointerdown",this.onCanvasMouseDown),i.addEventListener("pointerup",this.onCanvasMouseUp),(this.objectsPerTypes.MouseDown?.length||this.useForRaycastProperty)&&(this.domEventsNeeded.add("pointerdown"),i.addEventListener("pointerdown",this.onMouseDown)),this.objectsPerTypes.MouseUp?.length&&(this.domEventsNeeded.add("pointerup"),i.addEventListener("pointerup",this.onMouseUp)),this.objectsPerTypes.MousePress?.length&&(this.domEventsNeeded.add("pointerdown"),i.addEventListener("pointerdown",this.onMousePressDown),this.domEventsNeeded.add("pointerup"),i.addEventListener("pointerup",this.onMousePressRelease)),this.objectsPerTypes.KeyDown?.length&&(this.domEventsNeeded.add("keydown"),document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.releaseHeldKey)),this.objectsPerTypes.KeyUp?.length&&(this.domEventsNeeded.add("keyup"),document.addEventListener("keyup",this.onKeyUp)),this.objectsPerTypes.KeyPress?.length&&(this.domEventsNeeded.add("keydown"),document.addEventListener("keydown",this.onKeyPressDown),document.addEventListener("keyup",this.releaseHeldKeyPress),this.domEventsNeeded.add("keyup"),document.addEventListener("keyup",this.onKeyPressUp)),Object.entries(this.objectsPerTypes).forEach(([e,t])=>{t.forEach(e=>{e.addEventListener("userEvent",this._onUserEvent)})}),this.canvasMouseEvents.forEach(e=>{e.object.addEventListener("userEvent",this._onUserEvent)})}disconnect(){let{domElement:e}=this.eventContext;this.domEventsNeeded.clear(),this.heldKeys={},this.heldKeysPress={},e.removeEventListener("pointerdown",this.onCanvasMouseDown),e.removeEventListener("pointerup",this.onCanvasMouseUp),e.removeEventListener("pointerdown",this.onMouseDown),e.removeEventListener("pointerdown",this.onMousePressDown),e.removeEventListener("pointerup",this.onMouseUp),e.removeEventListener("pointerup",this.onMousePressRelease),document.removeEventListener("keydown",this.onKeyDown),document.removeEventListener("keyup",this.onKeyUp),document.removeEventListener("keydown",this.onKeyPressDown),document.removeEventListener("keyup",this.onKeyPressUp),document.removeEventListener("keyup",this.releaseHeldKey),Object.values(this.eventsPerObjects).forEach(e=>{Object.values(e).forEach(e=>{e.forEach(e=>{e.disconnect()})})}),this.canvasMouseEvents.forEach(e=>{e.disconnect()}),Object.entries(this.objectsPerTypes).forEach(([e,t])=>{t.forEach(e=>{e.removeEventListener("userEvent",this._onUserEvent)})}),this.canvasMouseEvents.forEach(e=>{e.object.removeEventListener("userEvent",this._onUserEvent)})}handleMouseEvent(e){let{stopRaycast:t,raycaster:i,page:r,pointerScreen:a}=this.eventContext,o=this.objectsPerTypes[e],l=o.filter(e=>!(e instanceof Do));if(!(!o.length&&!this.useForRaycastProperty)&&!(r.uiCanvas&&Be(r,[a.x,a.y],Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}))){if(t||this.useForRaycastProperty){let a;if(null===this.sceneInterects?a=L9(i,r,l,this.useForRaycastProperty):(a=this.sceneInterects,this.sceneInterects=null),this.useForRaycastProperty&&a.length&&(this.eventContext.sharedAssets.raycastProperty={x:a[0].point.x,y:a[0].point.y,z:a[0].point.z,objX:a[0].object.matrixWorld.elements[12],objY:a[0].object.matrixWorld.elements[13],objZ:a[0].object.matrixWorld.elements[14]}),t){let t=[a[0]?.uv?.x??0,a[0]?.uv?.y??0];L7(a).forEach(i=>{i instanceof D7&&Be(i,t,Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}),this.eventsPerObjects[e][i.uuid]&&this.handleObjectMouseEventDispatch(i,e)})}}t||l.forEach(t=>{let r=Bt(i,t);r&&(this.handleObjectMouseEventDispatch(t,e),t instanceof D7&&Be(t,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects[e]),t=>{this.handleObjectMouseEventDispatch(t,e)}))})}}handleMousePressEvent(e=!1){let t="MousePress",i=this.objectsPerTypes[t],r=i.filter(e=>!(e instanceof Do)),a=[];if(i.length){if(!e){let{stopRaycast:e,raycaster:i,page:o,pointerScreen:l}=this.eventContext,h=!1;if(o.uiCanvas&&(h=Be(o,[l.x,l.y],Object.keys(this.eventsPerObjects[t]),e=>{a.push(e)})),e&&!h){let e=L9(i,o,r);a=L7(e),e.forEach(e=>{e.object instanceof D7&&Be(e.object,[e?.uv?.x??0,e?.uv?.y??0],Object.keys(this.eventsPerObjects[t]),e=>{a.push(e)})})}else r.forEach(e=>{let r=Bt(i,e);r&&(a.push(e),e instanceof D7&&Be(e,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects[t]),e=>{a.push(e)}))})}this._prevObjects.length&&this._prevObjects.forEach(e=>{a.includes(e)||this.handleObjectMouseEventDispatchRelease(e,t)}),a.length&&a.forEach(e=>{this.handleObjectMouseEventDispatch(e,t)}),this._prevObjects=a}}handleObjectMouseEventDispatch(e,t){e.dispatchEvent({type:"beginEvent",eventName:t}),this.eventsPerObjects[t]?.[e.uuid]?.forEach(e=>{e.dispatch()})}handleObjectMouseEventDispatchRelease(e,t){e.dispatchEvent({type:"beginEvent",eventName:t}),this.eventsPerObjects[t]?.[e.uuid]?.forEach(e=>{e.dispatchRelease()})}handleKeyEvent(e,t,i=!1){this.objectsPerTypes[t].forEach(r=>{let a=this.eventsPerObjects[t][r.uuid];a.some(({data:t})=>"key"in t&&t.key===e.key)&&r.dispatchEvent({type:"beginEvent",eventName:t}),a.forEach(t=>{"key"in t.data&&t.data.key===e.key&&(i?t.dispatchRelease():t.dispatch(!0))})})}handleKeyEventHeld(e,t,i=!1){this.objectsPerTypes[t].forEach(r=>{this.eventsPerObjects[t][r.uuid].forEach(t=>{"key"in t.data&&t.data.key===e.key&&t.dispatchHeld(i)})})}},Bd=new iD,Bu=new iD,Bp=class{constructor(e,t,i,r,a){this.actionsIn=Lv(e,e.inActions,i,r,a,t),this.actionsOut=Lv(e,e.outActions,i,r,a,t)}disconnect(){Ly(this.actionsIn),Ly(this.actionsOut)}},Bf=class extends Bp{constructor(e,t,i,r,a,o){super(t,i,r,a,o),this.id=e,this.data=t,this.object=i,this.stage="out",this.objects=[],this.onUpdateMatrixWorld=()=>{for(let e of this.objects)if(!e.visible)return;let e=Bd.setFromMatrixPosition(this.objects[0].matrixWorld),t=Bu.setFromMatrixPosition(this.objects[1].matrixWorld),i=e.distanceTo(t)<=this.distance?"in":"out";if(this.stage!==i){this.stage=i;let e="in"===i?this.actionsIn:this.actionsOut;
8113e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Link.forEach(e=>e.dispatch()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.TimelineAnimation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}};let{distance:l,fromObject:h,toObject:c}=t.condition;for(let e of(this.distance=l,[h,c])){if(!e)throw Error("Missing property");let t=r.find(e);if(!t)throw Error("Missing property");this.objects.push(t)}}connect(){window.setTimeout(()=>{this.objects.forEach(e=>{e.addEventListener("updateMatrixWorld",this.onUpdateMatrixWorld)}),this.onUpdateMatrixWorld()},0)}disconnect(){super.disconnect(),this.stage="out",this.objects.forEach(e=>{e.removeEventListener("updateMatrixWorld",this.onUpdateMatrixWorld)})}},Bm=class extends Bp{constructor(e,t,i,r,a,o){super(t,i,r,a,o),this.id=e,this.data=t,this.object=i,this.onBegin=({target:e,state:t})=>
8113{this.toState!==t&&(this.actionsOut.Audio.forEach(e=>e.dispatchConditional()),this.actionsOut.Particles.forEach(e=>e.dispatchConditional()),this.actionsOut.Video.forEach(e=>e.dispatchConditional()),this.actionsOut.Link.forEach(e=>e.dispatch()),this.actionsOut.Create.forEach(e=>e.dispatch()),this.actionsOut.Destroy.forEach(e=>e.dispatch()),this.actionsOut.Reset.forEach(e=>e.dispatch()),this.actionsIn.Transition.forEach(e=>e.pause()),this.object.currentTransitionEvent=this,this.actionsOut.Transition.forEach(e=>e.play()),this.actionsOut.Animation.forEach(e=>e.play()),this.actionsOut.TimelineAnimation.forEach(e=>e.play()),this.actionsIn.SwitchCamera.forEach(e=>e.pause()),this.actionsOut.SwitchCamera.forEach(e=>e.play()),this.actionsOut.SceneTransition.forEach(e=>e.dispatch()),this.actionsOut.SetVariable.forEach(e=>e.checkConditions()),this.actionsOut.SetVariable.forEach(e=>e.dispatch()),this.actionsOut.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actionsOut.ClearLocalStorage.forEach(e=>e.dispatch()),this.actionsOut.UserAPI.forEach(e=>e.dispatch()))},this.onComplete=({target:e,state:t})=>
8113{this.toState===t&&(this.actionsIn.Audio.forEach(e=>e.dispatchConditional()),this.actionsIn.Particles.forEach(e=>e.dispatchConditional()),this.actionsIn.Video.forEach(e=>e.dispatchConditional()),this.actionsIn.Link.forEach(e=>e.dispatch()),this.actionsIn.Create.forEach(e=>e.dispatch()),this.actionsIn.Destroy.forEach(e=>e.dispatch()),this.actionsIn.Reset.forEach(e=>e.dispatch()),this.actionsOut.Transition.forEach(e=>e.pause()),this.actionsOut.Transition.forEach(e=>e.pause()),this.object.currentTransitionEvent=this,this.actionsIn.Transition.forEach(e=>e.play()),this.actionsIn.Animation.forEach(e=>e.play()),this.actionsIn.TimelineAnimation.forEach(e=>e.play()),this.actionsOut.SwitchCamera.forEach(e=>e.pause()),this.actionsIn.SwitchCamera.forEach(e=>e.play()),this.actionsIn.SceneTransition.forEach(e=>e.dispatch()),this.actionsIn.SetVariable.forEach(e=>e.checkConditions()),this.actionsIn.SetVariable.forEach(e=>e.dispatch()),this.actionsIn.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actionsOut.ClearLocalStorage.forEach(e=>e.dispatch()),this.actionsOut.UserAPI.forEach(e=>e.dispatch()))};let{condition:l}=t;if(!l.object)throw Error("Missing property");let h=r.find(l.object)??r.scene.find2D(l.object);if(!h||(this.toObject=h,l.state&&!this.toObject.states?.[l.state]))throw Error("Missing property");this.toState=l.state}connect(){ds(this.actionsOut).forEach(e=>{this.actionsOut[e]?.length&&this.toObject.addEventListener("beginState",this.onBegin)}),ds(this.actionsIn).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.addEventListener("completeState",this.onComplete)})}disconnect(){super.disconnect(),ds(this.actionsOut).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.removeEventListener("beginState",this.onBegin)}),ds(this.actionsIn).forEach(e=>{this.actionsIn[e]?.length&&this.toObject.removeEventListener("completeState",this.onComplete)})}},Bg=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.eventsPerConditions={Comparison:[],Distance:[],State:[]},this.hasVideoAction=!1}connect(){super.connect();let{page:e,sharedAssets:t}=this.eventContext;e.traverseEntity(i=>{if(i.data?.events.length){for(let{id:r,data:a}of i.data.events)if(!a.disabled&&"Conditional"===a.type)try{let o;"Comparison"===a.condition.type||("Distance"===a.condition.type?o=new Bf(r,a,i,e,t,this.eventManager):"State"===a.condition.type&&(o=new Bm(r,a,i,e,t,this.eventManager))),o&&(this.eventsPerConditions[a.condition.type].push(o),(o.actionsIn.Video.length||o.actionsOut.Video.length)&&(this.hasVideoAction=!0))}catch{}}}),Object.values(this.eventsPerConditions).forEach(e=>e.forEach(e=>e.connect()))}disconnect(){super.disconnect(),Object.values(this.eventsPerConditions).forEach(e=>e.forEach(e=>e.disconnect()))}},Bv=new iD,By=new iD,Bx=new iD,Bb=new sg,Bw=new iD,BS=new iD,B_=new iD,BA=new iP,BM=new rn,BC=new i6,BE=new t7,BT=new iD,BP=new iD;function BD(e,t){!t||(t[0]<t[1]&&(e.x=Math.min(Math.max(e.x,t[0]),t[1])),t[2]<t[3]&&(e.y=Math.min(Math.max(e.y,t[2]),t[3])),t[4]<t[5]&&(e.z=Math.min(Math.max(e.z,t[4]),t[5])))}var BO=(tw=new i6,(e,t,i)=>{let r=e.obj;tw.copy(r.hiddenMatrix),null!==r.parent&&tw.premultiply(r.parent.matrixWorld),tw.invert(),r.position.copy(t),"global"===e.reference&&BD(r.position,e.limits),r.position.applyMatrix4(tw),"parent"===e.reference?BD(r.position,e.limits):"local"===e.reference&&(BA.copy(e.quat0).invert(),r.position.sub(e.position0),r.position.applyQuaternion(BA),BD(r.position,e.limits),BA.invert(),r.position.applyQuaternion(BA),r.position.add(e.position0)),tw.multiply(i??r.matrixWorld).decompose(Bw,r.quaternion,BS),r.updateMatrix(),r.hasNonUniformScale&&(r.updateMatrixWorld(),r.updateMatrixWorldSVD()),r instanceof _H&&EQ(r.parent)&&r.invalidateDownstreamBooleanData(!0)}),BI=class{constructor(e,t,i,r,a,o,l){this.object=e,this.id=t,this.data=i,this.dropDestIds=[],this.activeIdx=null,this.wasDragEventTriggered=!1,this.resetDampingFactor=0===this.data.resetSpeed?1:8/this.data.resetSpeed+1,this.snapDampingFactor=0===this.data.snapSpeed?1:8/this.data.snapSpeed+1,this.actionsDrag=Lv(i,i.dragDropActions.drag,r,a,o,this.object),this.actionsDrop=Lv(i,i.dragDropActions.drop,r,a,o,this.object);let h=[];
8113this.data.objects.forEach(e=>{let t=r.find(e);!t||!1!==t.data.visible&&(h.push(t),l[t.uuid]&&l[t.uuid].forEach(e=>{let t=r.find(e);t&&!1!==t.data.visible&&h.push(t)}))}),this.data.dropDestinations.forEach(e=>{let t=r.find(e);!t||!1!==t.data.visible&&(this.dropDestIds.push(t.uuid),l[t.uuid]&&l[t.uuid].forEach(e=>{let t=r.find(e);t&&!1!==t.data.visible&&this.dropDestIds.push(t.uuid)}))}),this.dragItems=h.map(e=>("locked"===this.data.planeMode&&(e.userData.lockedPlane=!0),e.userData.worldPosition0=new iD().setFromMatrixPosition(e.matrixWorld),{obj:e,fromPosition:new iD().setFromMatrixPosition(e.matrixWorld),pointStart:new iD,pointEnd:new iD,paused:!0,currentDampingFactor:this.data.dampingFactor,reset:!1,position0:new iD().copy(e.position),quat0:new iP().copy(e.quaternion),snapped:!1,orientationMatrix:new i6,limits:this.data.limits,reference:this.data.referenceFrame}))}get activeDragItem(){return null!==this.activeIdx?this.dragItems[this.activeIdx]:null}dispose(){Ly(this.actionsDrag),Ly(this.actionsDrop),this.dragItems.forEach(e=>{e.fromPosition.copy(e.obj.userData.worldPosition0),e.pointStart.copy(e.fromPosition),e.pointEnd.copy(e.pointStart),e.obj.recursiveBBoxNeedsUpdate=!0,e.obj.userData.lockedPlane=void 0,e.obj.position.copy(e.position0),e.obj.quaternion.copy(e.quat0),e.obj.updateMatrix()})}},BR=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.lastDropDestination=null,this.dragTimeout=null,this.onPointerDown=e=>{if(pb.length>1)return;this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=i.raycastWithClones(t);if(this.lastDropDestination=null,0===r.length){this.activeEvent=null;return}for(let e of this.events){let t=0;for(let{obj:i,pointEnd:a,pointStart:o}of e.dragItems){if(i===r[0].object||i===r[0].object.object||S7.is(i)&&i.isAncestorOf(r[0].object.uuid)){if(e.activeIdx=t,e.activeDragItem.reset=!1,e.activeDragItem.currentDampingFactor=e.data.dampingFactor,e.activeDragItem.snapped=!1,"hand"===e.data.cursor&&this.setCursor("grabbing"),this.eventManager.controlsManager.usePhysics){e.activeDragItem.obj.rigidBody&&e.activeDragItem.obj.rigidBody.setBodyType(2,!0);let t=e.activeDragItem.obj;i.hasNonUniformScale&&i.updateMatrixWorldSVD(),(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(Bw,BA,BS),BM.setFromQuaternion(BA),void 0===t.prevR?(t.prevR=BM.clone(),t.prevT=Bw.clone()):(t.prevR.copy(BM),t.prevT.copy(Bw)),this.eventManager.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.push(e.activeDragItem.obj)}this.calcPlaneIntersectPos(i,o,e.data.plane,e.data.referenceFrame),a.copy(o),(this.eventManager.controlsManager.usePhysics&&i.data.physics?.rigidBody==="dynamic"||!1===e.data.drop||!1===e.data.resetOnSnapFail)&&e.activeDragItem.fromPosition.setFromMatrixPosition(e.activeDragItem.obj.matrixWorld),this.activeEvent=e,this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1);return}t++}}this.activeEvent=null},this.onPointerMove=e=>{if(pb.length>1)return;this.eventContext.updateRaycaster(e);let{raycaster:t,page:i}=this.eventContext,r=i.raycastWithClones(t);if(0===pb.length){let e=!1;for(let t of this.events){for(let{obj:i}of t.dragItems)if(i===r[0]?.object||i===r[0]?.object?.object||S7.is(i)&&i.isAncestorOf(r[0]?.object.uuid)){switch(e=!0,t.data.cursor){case"hand":this.setCursor("grab");break;case"move":this.setCursor("move")}break}if(e)break}e||this.setCursor("default");return}if(this.activeEvent&&this.activeEvent.activeDragItem){let e,t=this.activeEvent.activeDragItem;if(t.snapped=!1,this.activeEvent.data.drop&&(e=r.filter(e=>t.obj!==e.object&&!t.obj.isAncestorOf(e.object.uuid)&&!(e.object instanceof E2)&&("all"===this.activeEvent.data.dropOn||this.activeEvent.dropDestIds.some(t=>t===e.object.uuid||i.scene.find(t).isAncestorOf(e.object.uuid))))[0]),e){let i=B_.copy(e.face.normal).applyMatrix3(BE.getNormalMatrix(e.object.matrixWorld));if("center"===this.activeEvent.data.snapTo)t.fromPosition.setFromMatrixPosition(e.object.matrixWorld);else if("surface"===this.activeEvent.data.snapTo){if(t.fromPosition.copy(e.point),"bbox"===this.activeEvent.data.snapSurfaceMode){Bw.copy(i).applyMatrix3(BE.setFromMatrix4(t.obj.matrixWorld).transpose());let e=t.obj;Bw.x>.2?BS.x=-e.recursiveBBox.min.x:Bw.x<-.2&&(BS.x=-e.recursiveBBox.max.x),Bw.y>.2?BS.y=-e.recursiveBBox.min.y:Bw.y<-.2&&(BS.y=-e.recursiveBBox.max.y),Bw.z>.2?BS.z=-e.recursiveBBox.min.z:Bw.z<-.2&&(BS.z=-e.recursiveBBox.max.z),BS.applyMatrix3(BE.invert())}else BS.copy(i).multiplyScalar(this.activeEvent.data.snapSurfaceOffset);t.fromPosition.add(BS)}
vendor: 1,255 bytes, line 8113
8113this.activeEvent.data.autoOrient&&(Bw.set(0,1,0).cross(i),1e-4>Bw.length()&&Bw.set(-1,0,0).cross(i),BS.crossVectors(B_,Bw),t.orientationMatrix.makeBasis(Bw,BS,i)),t.pointStart.copy(t.fromPosition),t.pointEnd.copy(t.pointStart),t.currentDampingFactor=this.activeEvent.snapDampingFactor,t.snapped=!0,this.lastDropDestination!==e.object&&(this.lastDropDestination=e.object,this.activeEvent.actionsDrop.Transition.forEach(e=>{e.play()}),this.activeEvent.actionsDrop.Animation.forEach(e=>{e.play()}),this.activeEvent.actionsDrop.Audio.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrop.Particles.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrop.Create.forEach(e=>{e.dispatchThrottled()}))}else t.orientationMatrix.makeRotationFromQuaternion(t.quat0),this.lastDropDestination=null,t.currentDampingFactor=this.activeEvent.data.dampingFactor,this.calcPlaneIntersectPos(t.obj,t.pointEnd,this.activeEvent.data.plane,this.activeEvent.data.referenceFrame),this.activeEvent.actionsDrop.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrop.Animation.forEach(e=>{e.stop()}
vendor: 7,078 bytes, line 8113
8113),this.activeEvent.actionsDrop.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrop.Particles.forEach(e=>{e.dispatchGameControl("stop")});this.activeEvent.actionsDrag.Create.forEach(e=>{e.dispatchThrottled()}),this.activeEvent.actionsDrag.SetVariable.forEach(e=>e.checkConditions()),this.activeEvent.actionsDrag.SetVariable.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.DynamicVariablePlay.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.ClearLocalStorage.forEach(e=>e.dispatch()),this.activeEvent.actionsDrag.UserAPI.forEach(e=>e.dispatch()),!1===this.activeEvent.wasDragEventTriggered&&(this.activeEvent.wasDragEventTriggered=!0,this.activeEvent.actionsDrag.Transition.forEach(e=>{e.play()}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.play()}),this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("start")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("start")})),this.dragTimeout&&window.clearTimeout(this.dragTimeout),this.dragTimeout=window.setTimeout(()=>{this.activeEvent&&(this.activeEvent.wasDragEventTriggered=!1,this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.stop()}))},500),this.updateDragItem(t),t.obj.dispatchEvent({type:"requestRender"})}},this.onPointerUp=e=>{if(this.activeEvent&&this.activeEvent.activeDragItem){"hand"===this.activeEvent.data.cursor&&this.setCursor("grab");let e=this.activeEvent.activeDragItem.obj.data.physics?.rigidBody==="dynamic";!1===this.activeEvent.activeDragItem.snapped&&this.activeEvent.data.drop&&this.activeEvent.data.resetOnSnapFail&&(!1===this.eventManager.controlsManager.usePhysics||!e)&&(this.activeEvent.activeDragItem.reset=this.activeEvent.data.resetOnSnapFail,this.activeEvent.activeDragItem.paused=!1,this.activeEvent.activeDragItem.currentDampingFactor=this.activeEvent.resetDampingFactor),this.eventManager.controlsManager.usePhysics&&e&&(this.eventManager.controlsManager.sharedGameControlGlobals.entitiesWithTransformAnim.pop(),this.activeEvent.activeDragItem.obj.rigidBody.setBodyType(0,!0),this.activeEvent.activeDragItem.paused=!0),!0===this.activeEvent.wasDragEventTriggered&&(this.activeEvent.wasDragEventTriggered=!1,this.activeEvent.actionsDrag.Transition.forEach(e=>{e.stop(),null!==e.object.currentState&&e.object.changeSelectedState(null,{scene:this.eventContext.page.scene,shared:this.eventContext.sharedAssets})}),this.activeEvent.actionsDrag.Animation.forEach(e=>{e.stop()}),this.activeEvent.actionsDrag.Audio.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrag.Particles.forEach(e=>{e.dispatchGameControl("stop")}),this.activeEvent.actionsDrop.SetVariable.forEach(e=>e.checkConditions()),this.activeEvent.actionsDrop.SetVariable.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.DynamicVariablePlay.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.ClearLocalStorage.forEach(e=>e.dispatch()),this.activeEvent.actionsDrop.UserAPI.forEach(e=>e.dispatch())),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0)}}}connect(){let e={};if(this.eventContext.page.traverseEntity(t=>{t.component&&(e[t.component.uuid]?e[t.component.uuid].push(t.uuid):e[t.component.uuid]=[t.uuid])}),this.eventContext.page.traverseEntity(t=>{t.data?.events.filter(e=>"DragDrop"===e.data.type&&!e.data.disabled).forEach(i=>{this.events.push(new BI(t,i.id,i.data,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager,e))})}),!this.events.length)return;this.domEventsNeeded.clear(),this.domEventsNeeded.add("pointerdown");let t=this.eventContext.domElement;t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp),this.domEventsNeeded.add("pointermove")}disconnect(){if(!this.events.length)return;this.domEventsNeeded.clear();let e=this.eventContext.domElement;e.removeEventListener("pointerdown",this.onPointerDown),e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerup",this.onPointerUp),this.events.forEach(e=>e.dispose())}setCursor(e){this.eventContext.domElement.style.cursor=e}onAnimationFrameDamping(){for(let e of this.events)for(let t of e.dragItems)t.paused||this.updateDragItem(t,!0)}calcPlaneIntersectPos(e,t,i,r){let{getCamera:a,raycaster:o}=this.eventContext;a().getWorldDirection(By),By.negate();let l=BA.identity();switch("parent"===r?BC.multiplyMatrices(e.parent.matrixWorld,e.hiddenMatrix).decompose(Bw,l,BS):"local"===r&&e.matrixWorld.decompose(Bw,l,BS),i){case"x":Bw.set(1,0,0).applyQuaternion(l),BT.copy(By).cross(Bw),BP.copy(Bw).cross(BT);break;case"y":Bw.set(0,1,0).applyQuaternion(l),BT.copy(By).cross(Bw),BP.copy(Bw).cross(BT);break;case"z":Bw.set(0,0,1).applyQuaternion(l),BT.copy(By).cross(Bw),BP.copy(Bw).cross(BT);break;case"xy":BP.set(0,0,1).applyQuaternion(l);break;case"yz":BP.set(1,0,0).applyQuaternion(l);break;case"xz":BP.set(0,1,0).applyQuaternion(l);break;case"adaptive":By.angleTo(BS.set(0,1,0))>Math.PI/6?(Bw.crossVectors(BS.set(0,1,0),By),BP.crossVectors(Bw,BS)):BP.set(0,1,0);break;default:BP.copy(By)}Bx.setFromMatrixPosition(e.matrixWorld);let h=e.userData.lockedPlane?e.userData.worldPosition0:Bx;if(Bb.setFromNormalAndCoplanarPoint(BP,h),o.ray.intersectPlane(Bb,t)&&("x"===i||"y"===i||"z"===i)){let e=BS.subVectors(t,h).dot(Bw);t.copy(h).addScaledVector(Bw,e)}}updateDragItem(e,t=!1){Bx.setFromMatrixPosition(e.obj.matrixWorld),"current"===e.reset?Bv.subVectors(e.fromPosition,Bx).divideScalar(e.currentDampingFactor):"original"===e.reset?(Bv.subVectors(e.obj.userData.worldPosition0,Bx).divideScalar(e.currentDampingFactor),e.fromPosition.copy(e.obj.userData.worldPosition0),e.pointStart.copy(e.fromPosition),e.pointEnd.copy(e.pointStart)):Bv.subVectors(e.pointEnd,e.pointStart).add(e.fromPosition).sub(Bx).divideScalar(e.currentDampingFactor),e.paused=!(e.currentDampingFactor>1)||.01>Bv.length(),(this.activeEvent&&1===this.activeEvent.data.dampingFactor||t)&&BO(e,Bv.add(Bx),this.activeEvent?.data.drop&&this.activeEvent?.data.autoOrient?e.orientationMatrix:null),e.obj.dispatchEvent({type:"beginEvent",eventName:"DragDrop"}),this.eventManager.requestRender()}},BL=new iD,BB=new iD,Bz=new iD,BF=new iD,BN=new sg,BU={type:"requestRender"},Bk=(tS=new iD,t_=new iD,(e,t,i)=>i>0?(tS.subVectors(e,t),tS.length()<=i?e:t_.copy(t).add(tS.normalize().multiplyScalar(i))):t),BV=(tA=new i6,(e,t)=>{e.position.copy(t),null!==e.parent&&(tA.copy(e.parent.matrixWorld).invert(),e.position.applyMatrix4(tA)),tA.copy(e.hiddenMatrix).invert(),e.position.applyMatrix4(tA),e.updateMatrix(),e.hasNonUniformScale&&(e.updateMatrixWorld(),e.updateMatrixWorldSVD()),e instanceof _H&&EQ(e.parent)&&e.invali
8113dateDownstreamBooleanData(!0)}),Bj=class{constructor(e,t,i,r,a,o){this.data=e,this.id=t,this.object=i,this.paused=!1,this.currentDampingFactor=1,this.snapComplete=!1,this.isReset=!1,this.worldPosition0=new iD,this.timeoutId=null,this.delayFinished=!0,this.wasOutside=!1,this.data={...gi.defaultData,...e,...void 0===e.resetOnPointerLeave&&{resetOnPointerLeave:!1}},void 0===e.target||"cursor"===e.target||(this.target=r.find(e.target)),this.data.dampingFactor&&(this.currentDampingFactor=this.data.dampingFactor),this.resetDampingFactor=80/this.data.resetSpeed+1,this.object.getWorldPosition(this.worldPosition0),this.actions=Lv(e,e.actions,r,a,o,i)}},BG=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.pairOfEventListeners=[],this.onMouseMove=e=>{if(!(pb.length>1))for(let t of(this.eventContext.updateRaycaster(e),this.events))void 0===t.target&&this.updateSingleEvent(t)},this.onMouseEnter=e=>{for(let e of this.events)void 0===e.target&&(e.isReset=!1,e.currentDampingFactor=e.data.dampingFactor)},this.onMouseLeave=e=>{for(let e of this.events)void 0===e.target&&(e.data.resetOnPointerLeave&&(e.isReset=!0,e.currentDampingFactor=e.resetDampingFactor),this.updateSingleEvent(e))},this.onTargetChange=e=>()=>{this.updateSingleEvent(e)}}connect(){let{page:e}=this.eventContext;if(e.traverseEntity(t=>{let i=t.data?.events.find(e=>"Follow"===e.data.type&&!e.data.disabled);i&&(!e.data.globalPhysics.usePhysics||t.dataPatched.physics?.rigidBody!=="dynamic")&&this.events.push(new Bj(i.data,i.id,t,e,this.eventContext.sharedAssets,this.eventManager))}),!this.events.length)return;let{domElement:t,eventElement:i}=this.eventContext;for(let e of(this.domEventsNeeded.clear(),pg&&(this.domEventsNeeded.add("pointerdown"),t.addEventListener("pointerdown",this.onMouseMove)),this.domEventsNeeded.add("pointermove"),i.addEventListener("pointermove",this.onMouseMove),this.eventContext.useWindowEvents||(t.addEventListener("pointerenter",this.onMouseEnter),t.addEventListener("pointerleave",this.onMouseLeave)),this.events))if(void 0!==e.target){let t=e.target,i=this.onTargetChange(e);this.pairOfEventListeners.push([t,i]),t.addEventListener("requestRender",i)}}disconnect(){if(!this.events.length)return;let{domElement:e,eventElement:t}=this.eventContext;for(let[i,r]of(this.domEventsNeeded.clear(),pg&&e.removeEventListener("pointerdown",this.onMouseMove),t.removeEventListener("pointermove",this.onMouseMove),e.removeEventListener("pointerenter",this.onMouseEnter),e.removeEventListener("pointerleave",this.onMouseLeave),this.pairOfEventListeners))i.removeEventListener("requestRender",r);for(let e of this.events)e.paused=!0,e.isReset=!1,Ly(e.actions)}onAnimationFrameDamping(){for(let e of this.events)e.paused||this.updateSingleEvent(e,!0)}updateSingleEvent(e,t=!1){this.events.forEach(e=>{e.actions.Create.forEach(e=>{e.dispatchThrottled()})});let{plane:i,limitDistance:r,limitDistanceEnabled:a}=e.data;if(e.object.getWorldPosition(Bz),e.isReset)BF.copy(e.worldPosition0);else if(e.target)e.target.getWorldPosition(BF);else{let{getCamera:e,raycaster:t}=this.eventContext;if("custom"===i?(e().getWorldDirection(BB),BB.negate(),BL.copy(BB)):"xy"===i?BL.set(0,0,1):"xz"===i?BL.set(0,1,0):"yz"===i&&BL.set(1,0,0),BN.setFromNormalAndCoplanarPoint(BL,Bz),!t.ray.intersectPlane(BN,BF))return}if(!e.isReset){if(BF.distanceTo(e.worldPosition0)>r&&a&&e.target)if(e.snapComplete=!1,e.data.snapDelay&&(e.delayFinished=!1,null!==e.timeoutId&&(window.clearTimeout(e.timeoutId),e.timeoutId=null)),e.wasOutside=!0,!e.data.resetAfterDistanceLimit)return;else BF.copy(e.worldPosition0),e.currentDampingFactor=e.resetDampingFactor;else if(e.wasOutside&&(e.data.snapDelay&&(e.timeoutId=window.setTimeout(()=>{e.delayFinished=!0,e.paused=!1,this.updateSingleEvent(e)},1e3*e.data.snapDelay)),e.currentDampingFactor=e.data.dampingFactor,e.wasOutside=!1),!1===e.delayFinished)return}!1===e.data.enabledTranslation[0]&&(BF.x=Bz.x),!1===e.data.enabledTranslation[1]&&(BF.y=Bz.y),!1===e.data.enabledTranslation[2]&&(BF.z=Bz.z);let o=Bk(Bz,BF,e.wasOutside?0:e.data.maxDelta);if(e.currentDampingFactor>1){let i=BL.subVectors(o,Bz).divideScalar(e.currentDampingFactor);Bz.add(i),t&&BV(e.object,Bz),e.paused=.01>i.length()}else BV(e.object,o),e.paused=!0;e.object?.dispatchEvent({type:"beginEvent",eventName:"Follow"}),e.object.dispatchEvent(BU)}},BW=new iD,BH=new iD,Bq=new i6,BX=new iP,BY=new iP,BQ=new iD,BZ=new iD,BK=new iD,BJ=new iD,B$=new sg,B0={type:"requestRender"},B1={type:"changeRotation"},B2=(tM=new i6,function(e,t){null!==e.parent?tM.multiplyMatrices(e.parent.matrixWorld,e.hiddenMatrix):tM.copy(e.hiddenMatrix),t.premultiply(L4(tM).invert()),e.rotation.setFromRotationMatrix(t),e.updateMatrix(),e instanceof _H&&EQ(e.parent)&&e.invali
8113dateDownstreamBooleanData(!0)}),B3=class{constructor(e,t,i,r){this.id=t,this.object=i,this.paused=!1,this.currentDampingFactor=1,this.isReset=!1,this.worldQuaternion0=new iP,this.timeoutId=null,this.delayFinished=!0,this.wasOutside=!1,this.data={...gr.defaultData,...e,...void 0===e.resetOnPointerLeave&&{resetOnPointerLeave:!1}},void 0===e.target||"cursor"===e.target||(this.target=r.find(e.target)),this.data.dampingFactor&&(this.currentDampingFactor=this.data.dampingFactor),this.object.getWorldQuaternion(this.worldQuaternion0),isNaN(this.worldQuaternion0.x)&&(this.worldQuaternion0.x=0),isNaN(this.worldQuaternion0.y)&&(this.worldQuaternion0.y=0),isNaN(this.worldQuaternion0.z)&&(this.worldQuaternion0.z=0),isNaN(this.worldQuaternion0.w)&&(this.worldQuaternion0.w=1),this.resetDampingFactor=80/this.data.resetSpeed+1}},B4=class extends Br{constructor(){super(...arguments),this.events=[],this.pairOfEventListeners=[],this.pairOfUserEventListeners=[],this.onMouseMove=e=>{if(!(pb.length>1))for(let t of(this._lastMouseEvent=e,this.eventContext.updateRaycaster(e),this.events))void 0===t.target&&this.updateSingleEvent(t)},this.onMouseEnter=e=>{for(let e of this.events)void 0===e.target&&(e.isReset=!1,e.currentDampingFactor=e.data.dampingFactor)},this.onMouseLeave=e=>{for(let e of this.events)void 0===e.target&&(e.data.resetOnPointerLeave&&(e.isReset=!0,e.currentDampingFactor=e.resetDampingFactor),this.updateSingleEvent(e))},this.onScroll=e=>{if(this._lastMouseEvent){let e=new PointerEvent("pointermove",{clientX:this._lastMouseEvent.clientX,clientY:this._lastMouseEvent.clientY,bubbles:!0,cancelable:!0,view:window});this.eventContext.eventElement.dispatchEvent(e)}},this.onTargetChange=e=>()=>{this.updateSingleEvent(e)},this.createUserEventListener=e=>({eventName:t,target:i})=>{if(!t||!i)return;let r=Bn(t);r&&"LookAt"===r&&this.updateSingleEvent(e)}}connect(){let{page:e}=this.eventContext;if(e.traverseEntity(t=>{let i=t.data?.events.find(e=>"LookAt"===e.data.type&&!e.data.disabled);i&&(!e.data.globalPhysics.usePhysics||t.dataPatched.physics?.rigidBody!=="dynamic")&&this.events.push(new B3(i.data,i.id,t,e))}),!this.events.length)return;let{domElement:t,eventElement:i}=this.eventContext;for(let e of(this.domEventsNeeded.clear(),pg&&(this.domEventsNeeded.add("pointerdown"),t.addEventListener("pointerdown",this.onMouseMove)),this.domEventsNeeded.add("pointermove"),i.addEventListener("pointermove",this.onMouseMove),this.eventContext.useWindowEvents?i.addEventListener("scroll",this.onScroll):(t.addEventListener("pointerenter",this.onMouseEnter),t.addEventListener("pointerleave",this.onMouseLeave)),this.events)){if(void 0!==e.target){let t=this.onTargetChange(e),i=e.target;this.pairOfEventListeners.push([i,t]),i.addEventListener("requestRender",t)}let t=this.createUserEventListener(e),i=e.object;this.pairOfUserEventListeners.push([i,t]),i.addEventListener("userEvent",t)}}disconnect(){if(!this.events.length)return;let{domElement:e,eventElement:t}=this.eventContext;for(let[i,r]of(this.domEventsNeeded.clear(),pg&&e.removeEventListener("pointerdown",this.onMouseMove),t.removeEventListener("pointermove",this.onMouseMove),e.removeEventListener("pointerenter",this.onMouseEnter),e.removeEventListener("pointerleave",this.onMouseLeave),t.removeEventListener("scroll",this.onScroll),this.pairOfEventListeners))i.removeEventListener("requestRender",r);for(let[e,t]of this.pairOfUserEventListeners)e.removeEventListener("userEvent",t);for(let e of this.events)e.paused=!0,e.isReset=!1}onAnimationFrameDamping(){for(let e of this.events)e.paused||this.updateSingleEvent(e)}updateSingleEvent(e){let{tilt:t,axis:i,distance:r,plane:a,limitDistance:o,enabledRotation:l,limitDistanceEnabled:h}=e.data,{getCamera:c,raycaster:d}=this.eventContext,{object:p,target:f}=e;if(p.getWorldPosition(BQ),!e.isReset)if(e.target)e.target.getWorldPosition(BZ);else{if("custom"===a?(c().getWorldDirection(BH),BH.negate(),B$.setFromNormalAndCoplanarPoint(BH,BQ)):("xy"===a?BW.set(0,0,1):"xz"===a?BW.set(0,1,0):"yz"===a&&BW.set(1,0,0),B$.setFromNormalAndCoplanarPoint(BW,BQ)),!d.ray.intersectPlane(B$,BZ))return;r>0&&("custom"===a||void 0===a)&&BZ.addScaledVector(BH,r)}if(e.isReset||(f?"target"===t?BK.copy(f.up).applyMatrix4(Bq.extractRotation(f.matrixWorld)).normalize():l.some(e=>!1===e)?("x"===i?(BJ.set(0,0,1),!1===l[2]&&BJ.set(0,1,0)):"y"===i?(BJ.set(1,0,0),!1===l[0]&&BJ.set(0,0,1)):(BJ.set(0,1,0),!1===l[1]&&BJ.set(1,0,0)),BK.copy(BJ).applyQuaternion(e.worldQuaternion0).normalize()):BK.set(0,1,0):"custom"===a?BK.set(0,1,0):BK.copy(BW)),e.isReset)BY.copy(e.worldQuaternion0);else if(BQ.distanceTo(BZ)>o&&h&&f)if(e.data.snapDelay&&(e.delayFinished=!1,null!==e.timeoutId&&(window.clearTimeout(e.timeoutId),e.timeoutId=null)),e.wasOutside=!0,!e.data.resetAfterDistanceLimit)return;else BY.copy(e.worldQuaternion0),e.currentDampingFactor=e.resetDampingFactor;else{var m,g,v,y,x,b;let r;if(e.wasOutside&&(e.data.snapDelay&&(e.timeoutId=window.setTimeout(()=>{e.delayFinished=!0,e.paused=!1,this.updateSingleEvent(e)},1e3*e.data.snapDelay)),e.currentDampingFactor=e.data.dampingFactor,e.wasOutside=!1),!1===e.delayFinished)return;
vendor: 15,602 bytes, line 8113
8113m=Bq,g=BZ,v=BQ,y=BK,x=i,b=BJ,r=m.elements,B8.subVectors(g,v),0===B8.lengthSq()&&(B8.z=1),B8.normalize(),B6.crossVectors(y,B8),0===B6.lengthSq()&&(1===Math.abs(y.z)?B8.x+=1e-4:B8.z+=1e-4,B8.normalize(),B6.crossVectors(y,B8)),B6.normalize(),B5.crossVectors(B8,B6),"x"===x?1===b.z?[B6,B5,B8]=[B8,B6,B5]:(B6.negate(),[B6,B8]=[B8,B6]):"y"===x?1===b.x?[B6,B5,B8]=[B5,B8,B6]:(B6.negate(),[B5,B8]=[B8,B5]):1===b.x&&(B6.negate(),[B6,B5]=[B5,B6]),r[0]=B6.x,r[4]=B5.x,r[8]=B8.x,r[1]=B6.y,r[5]=B5.y,r[9]=B8.y,r[2]=B6.z,r[6]=B5.z,r[10]=B8.z,BY.setFromRotationMatrix(Bq),BX.setFromUnitVectors(BJ.applyQuaternion(BY),BK),l.some(e=>!1===e)&&"target"!==t&&BY.premultiply(BX).normalize()}e.currentDampingFactor>1?(p.updateWorldMatrix(!0,!1),BX.setFromRotationMatrix(L4(p.matrixWorld)),BX.slerp(BY,1/e.currentDampingFactor),B2(p,Bq.makeRotationFromQuaternion(BX)),e.paused=8*(1-BX.dot(BY))<1e-6):(B2(p,Bq.makeRotationFromQuaternion(BY)),e.paused=!0),e.object?.dispatchEvent({type:"beginEvent",eventName:"LookAt"}),p.dispatchEvent(B0),p.dispatchEvent(B1)}},B5=new iD,B6=new iD,B8=new iD,B9=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.entered=!1,this.actions=Lv(t,t.actions,r,a,o,i)}disconnect(){Ly(this.actions)}dispatchEnter(){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.entered||(this.entered=!0,this.actions.TimelineAnimation.forEach(e=>e.playFromCurrent()),this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.play()),this.actions.Create.forEach(e=>e.dispatchStart()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent()),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}dispatchLeave(){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.entered&&(this.entered=!1,this.actions.TimelineAnimation.forEach(e=>e.reverseFromCurrent()),this.actions.Create.forEach(e=>e.dispatchStop()),this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent()))}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Particles.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.playFromCurrent()),this.actions.Create.forEach(e=>e.dispatch()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},B7=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.eventsPerObjects={},this.objects=[],this.objects2D=[],this._prevObjects=[],this.onMouseDown=e=>{pb.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseHoverEvent())},this.onMouseUp=e=>{pb.length>1||this.handleMouseHoverEvent(!0)},this.onMouseMove=e=>{pb.length>1||(this.eventContext.updateRaycaster(e),this.handleMouseHoverEvent())},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Bn(e);r&&"MouseHover"===r&&(t.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[t.uuid]?.forEach(e=>e.dispatchUserEvent(i)))}}connect(){let{page:e,sharedAssets:t}=this.eventContext,i=(i,r)=>{if(!(!i.visible||!i.data?.events.length)){for(let{id:r,data:a}of i.data.events)if(!a.disabled&&"MouseHover"===a.type)try{let o=new B9(r,a,i,e,t,this.eventManager);this.eventsPerObjects[i.uuid]?this.eventsPerObjects[i.uuid].push(o):this.eventsPerObjects[i.uuid]=[o]}catch{}this.eventsPerObjects[i.uuid]?.length&&this.objects.push(i instanceof Do?r:i)}};if(e.traverseEntity(e=>{(e instanceof D7||e instanceof D0)&&e.frame?.traverse(t=>{i(t,e)}),i(e)}),!this.objects.length)return;let{domElement:r}=this.eventContext;this.domEventsNeeded.clear(),pg&&(this.domEventsNeeded.add("pointerdown"),r.addEventListener("pointerdown",this.onMouseDown),this.domEventsNeeded.add("pointerup"),r.addEventListener("pointerup",this.onMouseUp)),this.domEventsNeeded.add("pointermove"),r.addEventListener("pointermove",this.onMouseMove),this.objects.forEach(e=>{e.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if(!this.objects.length)return;let{domElement:e}=this.eventContext;this.domEventsNeeded.clear(),pg&&(e.removeEventListener("pointerdown",this.onMouseDown),e.removeEventListener("pointerup",this.onMouseUp)),e.removeEventListener("pointermove",this.onMouseMove),Object.values(this.eventsPerObjects).forEach(e=>{e.forEach(e=>{e.disconnect()})}),this.objects.forEach(e=>{e.removeEventListener("userEvent",this.onUserEvent)})}handleMouseHoverEvent(e=!1){let t=[];if(!e){let{stopRaycast:e,raycaster:i,page:r,pointerScreen:a}=this.eventContext,o=!1;if(r.uiCanvas&&(o=Be(r,[a.x,a.y],Object.keys(this.eventsPerObjects),e=>{t.push(e)})),e&&!o){let e=L9(i,r,this.objects);t=L7(e),e.forEach(e=>{e.object instanceof D7&&Be(e.object,[e?.uv?.x??0,e?.uv?.y??0],Object.keys(this.eventsPerObjects),e=>{t.push(e)})})}else this.objects.forEach(e=>{let r=Bt(i,e);r&&(t.push(e),e instanceof D7&&Be(e,[r?.uv?.x??0,r?.uv?.y??0],Object.keys(this.eventsPerObjects),e=>{t.push(e)}))})}this._prevObjects.length&&this._prevObjects.forEach(e=>{t.includes(e)||(e.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[e.uuid]?.forEach(e=>e.dispatchLeave()))}),t.length&&t.forEach(e=>{e.dispatchEvent({type:"beginEvent",eventName:"MouseHover"}),this.eventsPerObjects[e.uuid]?.forEach(e=>e.dispatchEnter())}),this._prevObjects=t}},ze=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.scrollCounter=0,this.actions=Lv(t,t.actions,r,a,o,i)}connect(){this.scrollCounter=0}disconnect(){Ly(this.actions)}dispatch(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())});let t=e>0?1:-1;this.scrollCounter+=t,this.scrollCounter=Math.min(Math.max(this.scrollCounter,0),this.data.steps);let i=this.scrollCounter/this.data.steps;this.actions.Transition.forEach(e=>e.seek(i)),this.actions.Animation.forEach(e=>e.seek(t)),this.actions.TimelineAnimation.forEach(e=>e.seek(i)),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>{e.playFromCurrent()}),this.actions.Animation.forEach(e=>{e.playFromCurrent()}),this.actions.TimelineAnimation.forEach(e=>{e.playFromCurrent()})),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},zt=class{constructor(e,t,i,r,a,o,l){this.id=e,this.data=t,this.object=i,this.domElement=o,this.eventManager=l,this.scrollStart=0,this.scrollEnd=0,this.actions=Lv(t,t.actions,r,a,l,i)}getStickyParentElement(){let e=this.domElement;for(;e;){if("sticky"===window.getComputedStyle(e).position)return e;e=e.parentElement}return null}computeScrollBounds(){let e=this.getStickyParentElement(),t=e?.parentElement,i=this.domElement.getBoundingClientRect(),r={top:i.top,bottom:i.bottom,left:i.left,right:i.right,width:i.width,height:i.height};if(t){let a=t.getBoundingClientRect(),o=window.getComputedStyle(e),l=parseFloat(o.marginTop)+parseFloat(o.marginBottom),h=parseFloat(o.top),c=parseFloat(o.bottom),d=a.height-l;if(isNaN(h)){if(!isNaN(c)){let e=document.body.clientHeight??window.innerHeight,t=window.innerWidth-(document.documentElement.clientWidth??window.innerWidth);i.bottom===e-c?(r.top+=a.top-i.height+c+t,r.bottom+=a.top-i.height+c+t):i.bottom<e-c&&(r.top-=d-i.height,r.bottom-=d-i.height)}}else i.top===h?(r.top+=a.top-h,r.bottom+=a.top-h):i.top<0&&(r.top-=d-i.height,r.bottom-=d-i.height)}let a=document.body,o=document.documentElement,l=window.pageYOffset||o.scrollTop||a.scrollTop,h=o.clientTop||a.clientTop||0,c=Math.round(r.top+l-h);if("enter"===this.data.startFrom){let e=window.innerHeight,t=r.height,i=this.data.enterAnchor;this.scrollStart=c-("top"===i?e:"bottom"===i?e-t:e-.5*t)}else this.scrollStart=0;this.scrollStart+=this.data.startOffset??0,this.scrollEnd=this.scrollStart+(this.data.endAfter??400),this.box=r,this.computeScroll({x:window.scrollX,y:window.scrollY})}connect(){this.computeScrollBounds()}disconnect(){Ly(this.actions)}handleResize(){this.computeScrollBounds()}get isInvalidBox(){return void 0===this.box||0===this.box.width&&0===this.box.height&&0===this.box.top&&0===this.box.bottom}computeScroll({x:e,y:t}){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())});let i=this.scrollEnd-this.scrollStart,r=Math.min(1,Math.max(0,(t-this.scrollStart)/i));this.actions.Transition.forEach(e=>e.seek(r)),this.actions.Animation.forEach(e=>e.seek(r)),this.actions.TimelineAnimation.forEach(e=>e.seek(r)),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatch(e){this.isInvalidBox&&this.computeScrollBounds(),this.computeScroll(e)}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>{e.playFromCurrent()}),this.actions.Animation.forEach(e=>{e.playFromCurrent()}),this.actions.TimelineAnimation.forEach(e=>{e.playFromCurrent()})),this.actions.Create.forEach(e=>e.dispatchThrottled()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},zi=class extends Br{constructor(e,t){super(e),this.managers=t,this.wheelEventsPerObject=new Map,this.scrollEventsPerObject=new Map,this.isInview=!0,this.handleResize=()=>{[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.handleResize())})},this.onScroll=e=>{if(!this.isInview)return;let t={y:window.scrollY,x:window.scrollX};[...this.scrollEventsPerObject.entries()].forEach(([e,i])=>{e.dispatchEvent({type:"beginEvent",eventName:"Scroll",scroll:t}),i.forEach(e=>e.dispatch(t))})},this.onWheel=e=>{!this.isInview||e.ctrlKey||[...this.wheelEventsPerObject.entries()].forEach(([t,i])=>{t.dispatchEvent({type:"beginEvent",eventName:"Scroll",deltaY:e.deltaY}),i.forEach(t=>t.dispatch(e.deltaY))})},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Bn(e);r&&"Scroll"===r&&(t.dispatchEvent({type:"beginEvent",eventName:"Scroll"}),this.wheelEventsPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}))}}connect(){let{page:e,sharedAssets:t,domElement:i,isExport:r}=this.eventContext,a=a=>{if(a.data?.events.length){for(let{id:o,data:l}of a.data.events)if(!l.disabled&&"Scroll"===l.type)if("load"!==l.trigger&&r){let r=new zt(o,l,a,e,t,i,this.managers);this.scrollEventsPerObject.has(a)?this.scrollEventsPerObject.get(a)?.push(r):this.scrollEventsPerObject.set(a,[r])}else{let i=new ze(o,l,a,e,t,this.managers);this.wheelEventsPerObject.has(a)?this.wheelEventsPerObject.get(a)?.push(i):this.wheelEventsPerObject.set(a,[i])}}};e.traverseEntity(e=>{(e instanceof D7||e instanceof D0)&&e.frame?.traverse(e=>{a(e)}),a(e)}),this.intersectionObserver=new IntersectionObserver(e=>{let t=e[0];t&&(this.isInview=t.isIntersecting)},{root:null}),this.intersectionObserver.observe(this.eventContext.domElement),[...this.wheelEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.connect()),e.addEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.connect()),e.addEventListener("userEvent",this.onUserEvent)}),[...this.wheelEventsPerObject.values()].some(e=>e.length)&&(this.domEventsNeeded.add("wheel"),window.addEventListener("wheel",this.onWheel)),[...this.scrollEventsPerObject.values()].some(e=>e.length)&&(this.domEventsNeeded.add("scroll"),window.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.handleResize))}disconnect(){window.removeEventListener("wheel",this.onWheel),window.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.handleResize),this.intersectionObserver.unobserve(this.eventContext.domElement),this.domEventsNeeded.clear(),[...this.wheelEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>e.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)})}},zr=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.actions=Lv(t,t.actions,r,a,o,i)}disconnect(){Ly(this.actions)}dispatch(){this.actions.Transition.forEach(e=>{e.play()}),this.actions.Animation.forEach(e=>{e.play()}),this.actions.TimelineAnimation.forEach(e=>{e.play()}),this.actions.SwitchCamera.forEach(e=>{e.play()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatchFromStart()}),this.actions.Destroy.forEach(e=>{e.dispatchFromStart()})}
8113dispatchAfter(e){this.actions.Audio.forEach(t=>{(t.interaction.data.triggerAfter??"any")===e&&(t.interaction instanceof IT?t.interaction.audioPlayer?.play():t.interaction instanceof IP&&t.interaction.dispatch())}),this.actions.Video.forEach(t=>{let i=t.interaction.data.triggerAfter??"autoplay";i===e&&(t.interaction instanceof Lw?t.interaction.play("autoplay"===i):t.interaction instanceof LS&&t.interaction.dispatch())}),this.actions.Particles.forEach(t=>{(t.data.triggerAfter??"any")===e&&t.dispatchBasic()})}async seekVideos(e){let t=[];this.actions.Video.forEach(i=>{(i.interaction.data.triggerAfter??"autoplay")==="autoplay"&&i.interaction instanceof Lw&&t.push(i.interaction.seek(e))}),await Promise.all(t)}pauseVideos(){this.actions.Video.forEach(e=>{e.interaction instanceof Lw&&e.interaction.pause()})}dispatchUserEvent(e){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),e?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.TimelineAnimation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}
8113),this.actions.Audio.forEach(e=>{e.interaction instanceof IT?e.interaction.audioPlayer?.play():e.interaction instanceof IP&&e.interaction.dispatch()}),this.actions.Video.forEach(e=>{e.interaction instanceof Lw?e.interaction.play():e.interaction instanceof LS&&e.interaction.dispatch()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()})}},zs=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.eventsPerObject=new Map,this.eventsAfterPerObject=new Map,this.onMouseDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("mouseDown")})})},this.onKeyDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("keyDown")})})},this.onAny=()=>{let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("any")})})},this.onSceneTransitionAudioVideoPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>
vendor: 9,943 bytes, line 8113
8113{e.actions.Audio.forEach(e=>{e.interaction instanceof IT&&e.interaction.audioPlayer?.play()}),e.actions.Video.forEach(e=>{let t=e.interaction.data.triggerAfter??"autoplay";e.interaction instanceof Lw&&e.interaction.play("autoplay"===t)}),e.actions.Particles.forEach(e=>{e.dispatchBasic()})})})},this.onPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>{e.dispatchAfter("autoplay")})})},this.seekVideos=async e=>{let t=[];[...this.eventsAfterPerObject.entries()].forEach(([i,r])=>{i.data.visible&&r.forEach(i=>{t.push(i.seekVideos(e))})}),await Promise.all(t)},this.pauseVideos=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{t.forEach(e=>{e.pauseVideos()})})},this.onUserEvent=({eventName:e,target:t,reverse:i})=>{if(!e||!t)return;let r=Bn(e);r&&"Start"===r&&(t instanceof Do||t.dispatchEvent({type:"beginEvent",eventName:"Start"}),this.eventsPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}),this.eventsAfterPerObject.get(t)?.forEach(e=>{e.dispatchUserEvent(i)}))}}connect(){let{sharedAssets:e,page:t}=this.eventContext,i=i=>{if(i.data?.events.length)for(let{id:r,data:a}of i.data.events){if(a.disabled||"Start"!==a.type)continue;let o=new zr(r,a,i,t,e,this.eventManager);(o.actions.Transition.length||o.actions.TimelineAnimation.length||o.actions.Animation.length||o.actions.SwitchCamera.length||o.actions.Create.length||o.actions.Destroy.length||o.actions.SceneTransition.length||o.actions.Reset.length||o.actions.SetVariable.length||o.actions.DynamicVariablePlay.length||o.actions.ClearLocalStorage.length||o.actions.UserAPI.length)&&(this.eventsPerObject.has(i)?this.eventsPerObject.get(i)?.push(o):this.eventsPerObject.set(i,[o])),o.actions.Audio.length&&(this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(o):this.eventsAfterPerObject.set(i,[o])),o.actions.Video.length&&(this.hasVideoAction=!0,this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(o):this.eventsAfterPerObject.set(i,[o])),o.actions.Particles.length&&(this.eventsAfterPerObject.has(i)?this.eventsAfterPerObject.get(i)?.push(o):this.eventsAfterPerObject.set(i,[o]))}};if(t.traverseEntity(e=>{(e instanceof D7||e instanceof D0)&&e.frame?.traverse(e=>{i(e)}),i(e)}),[...this.eventsAfterPerObject.values()].some(e=>e.length)){if(0===this.eventManager.activateCount){let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.addEventListener("pointerdown",this.onMouseDown,{once:!0}),i.addEventListener("mousedown",this.onMouseDown,{once:!0}),document.addEventListener("keydown",this.onKeyDown,{once:!0}),i.addEventListener("pointerdown",this.onAny),i.addEventListener("mousedown",this.onAny),document.addEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.addEventListener("userEvent",this.onUserEvent)})}else this.onSceneTransitionAudioVideoPlay();this.onPlay()}[...this.eventsPerObject.entries()].forEach(([e,t])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),t.forEach(e=>e.dispatch()),e.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if([...this.eventsAfterPerObject.values()].some(e=>e.length)){let{domElement:e,isExport:t}=this.eventContext,i=t?document:e;i.removeEventListener("pointerdown",this.onMouseDown),i.removeEventListener("mousedown",this.onMouseDown),document.removeEventListener("keydown",this.onKeyDown),i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([e,t])=>{e.removeEventListener("userEvent",this.onUserEvent),t.forEach(e=>e.disconnect())})}[...this.eventsPerObject.entries()].forEach(([e,t])=>{e.removeEventListener("userEvent",this.onUserEvent),t.forEach(e=>e.disconnect())}),this.eventsPerObject.clear(),this.eventsAfterPerObject.clear()}},za=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.initialDisabled=!1,this.actions=Lv(t,t.actions,r,a,o,i),this.target=t.target}disconnect(){Ly(this.actions)}dispatch(e){this.initialDisabled||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Collision"}),this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Animation.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.TimelineAnimation.forEach(e=>{"runMode"in e.data&&"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(t=>{t.dispatch(e??!1)}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}},zn=class extends Br{constructor(e,t,i,r,a){super(e),this.sharedVariables=t,this.eventManager=i,this.needsMouse=r,this.needsRaycast=a,this.dynamicVars=[],this.variablesToWatch=[],this.prevMouseProperty=null,this.prevRaycastProperty=null,this.pauseTime=0,this.isOutOfFocus=!1,this.events=[],this.onFrame=e=>{let t=this.eventContext.sharedAssets;if(this.rafId=window.requestAnimationFrame(this.onFrame),this.isOutOfFocus)return;let i=new Date,r=[],a=[];for(let e=0;e<this.propertiesToWatch.length;e++){let{objectId:t,property:i,prevValue:r}=this.propertiesToWatch[e],o=this.eventContext.scene.find(t),l=gc.propertyPaths[i];if("width"===l[0]||"height"===l[0]||"depth"===l[0])o=o.geometry.userData.parameters[l[0]];else for(let e=0;e<l.length;e++)o=o[l[e]];null===r?this.propertiesToWatch[e].prevValue=o instanceof iD?o.clone():o:(o instanceof iD?o.equals(r):r===o)||(a.push({objId:t,property:i}),o instanceof iD?this.propertiesToWatch[e].prevValue.copy(o):this.propertiesToWatch[e].prevValue=o)}for(let e=0;e<this.variablesToWatch.length;e++){let{id:i,prevValue:a}=this.variablesToWatch[e],o=t.getVariable(i);o!==a&&(r.push(i),this.variablesToWatch[e].prevValue=o)}for(let a=0;a<this.dynamicVars.length;a++){let{id:o,expectedTime:l,last:h,data:c,timerSeconds:d,startValue:p}=this.dynamicVars[a],f=1e3;if(("timer"===c.dynamicVariableType||"stopwatch"===c.dynamicVariableType)&&"number3decimal"===c.format?f=1:"counter"===c.dynamicVariableType?f=c.updateInterval:"random"===c.dynamicVariableType&&(f=c.isStatic?1/0:c.updateInterval),-1===l){this.dynamicVars[a].last=e,this.dynamicVars[a].expectedTime=e+f;continue}if(!(("Stopped"===t.getDynamicVariablePlayState(o)||"Restarted"===t.getDynamicVariablePlayState(o))&&(this.dynamicVars[a].last=e,this.dynamicVars[a].expectedTime=e+f,"counter"===c.dynamicVariableType&&t.getVariable(o)!==p&&(t.updateVariable(o,p),this.eventManager.requestRender()),("timer"===c.dynamicVariableType||"stopwatch"===c.dynamicVariableType)&&this.dynamicVars[a].timerSeconds!==p&&(this.dynamicVars[a].timerSeconds=p,t.updateVariable(o,xO.getFormattedTimerTime(p,c)),this.eventManager.requestRender()),"Restarted"===t.getDynamicVariablePlayState(o)&&t.setDynamicVariablePlayState(o,"Playing"),"Stopped"===t.getDynamicVariablePlayState(o)))){if("Paused"===t.getDynamicVariablePlayState(o)){void 0===this.dynamicVars[a].deltaToExpectedTime&&(this.dynamicVars[a].deltaToExpectedTime=Math.max(this.dynamicVars[a].expectedTime-e,0)),this.dynamicVars[a].last=e-(f-this.dynamicVars[a].deltaToExpectedTime),this.dynamicVars[a].expectedTime=e+this.dynamicVars[a].deltaToExpectedTime;continue}if(this.dynamicVars[a].deltaToExpectedTime=void 0,e>=l)if(this.dynamicVars[a].last=e,this.dynamicVars[a].expectedTime+=f,"random"===c.dynamicVariableType){let e=c.min+Math.random()*(c.max-c.min),i=c.decimals;e=Math.round(e*Math.pow(10,i))/Math.pow(10,i),t.updateVariable(o,e),r.push(o),this.eventManager.requestRender()}else if("counter"===c.dynamicVariableType){let e=t.getVariable(o),i=t.getDynamicVariableToggleIsForward(o)??!0,a=t.getVariable(o)+c.increment*(i?1:-1);c.hasEnd&&((a=c.increment>0?t8.clamp(a,p,c.endValue):t8.clamp(a,c.endValue,p))===p&&t.setDynamicVariableToggleIsForward(o,void 0),c.repeat?a===c.endValue&&(a=p):(a===p||a===c.endValue)&&t.setDynamicVariablePlayState(o,"Paused")),a!==e&&(r.push(o),t.updateVariable(o,a),this.eventManager.requestRender())}else if("time"===c.dynamicVariableType){let e=t.getVariable(o),a=MH(i,c);if("object"==typeof e&&"textValue"in e&&"object"==typeof a&&"textValue"in a){if(Array.isArray(e.textValue)&&Array.isArray(a.textValue)){if(e.textValue.every((e,t)=>e===a.textValue[t]))continue}else if(e.textValue===a.textValue)continue}else if(e===a)continue;t.updateVariable(o,a),r.push(o),this.eventManager.requestRender()}else{let i=xC.isTextValue(c.endValue)?zl(c.endValue.textValue):c.endValue,l=t.getDynamicVariableToggleIsForward(o)??!0,f=d+(e-h)/1e3*("timer"===c.dynamicVariableType?-1:1)*(l?1:-1);f=Math.max(f,0),c.hasEnd&&((f="stopwatch"===c.dynamicVariableType?t8.clamp(f,p,i):t8.clamp(f,i,p))===p&&t.setDynamicVariableToggleIsForward(o,void 0),c.repeat?Math.abs(f-i)<("number3decimal"===c.format?1e-4:.1)&&(f=p):(Math.abs(f-p)<("number3decimal"===c.format?1e-4:.1)||Math.abs(f-i)<("number3decimal"===c.format?1e-4:.1))&&t.setDynamicVariablePlayState(o,"Paused")),f!==d&&(r.push(o),this.dynamicVars[a].timerSeconds=f,t.updateVariable(o,xO.getFormattedTimerTime(f,c)),this.eventManager.requestRender())}}}let o=!1;t.mouseProperty!==this.prevMouseProperty&&(this.prevMouseProperty=t.mouseProperty,o=!0);let l=!1;t.raycastProperty!==this.prevRaycastProperty&&(this.prevRaycastProperty=t.raycastProperty,l=!0),this.events.forEac
vendor: 1,054 bytes, line 8113
8113h(e=>{(r.includes(e.data.variableId)||a.find(t=>t.objId===e.data.objectId&&t.property===e.data.property)||"mouseProperty"===e.data.variableId&&o||"raycastProperty"===e.data.variableId&&l)&&(e.dispatch(),this.eventManager.requestRender())})},this.onBlur=()=>{this.pause()},this.onFocus=()=>{this.resume()}}pause(){this.isOutOfFocus||(this.isOutOfFocus=!0,this.pauseTime=Date.now())}resume(){if(!this.isOutOfFocus)return;this.isOutOfFocus=!1;let e=Date.now()-this.pauseTime;for(let t=0;t<this.dynamicVars.length;t++)this.dynamicVars[t].last+=e,this.dynamicVars[t].expectedTime+=e}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"VariableChange"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new zo(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.propertiesToWatch=this.events.filter(e=>"objectProperty"===e.data.variableId&&null!==e.data.objectId).map(e=>({objectId:e.data.objectId,property:e.data.property,prevValue:null}));let e=this.eventContext.sharedAssets;
8113this.sharedVariables.forEach(({id:t,data:i})=>{let r;if(!("dynamicVariableType"in i)){this.events.find(e=>e.data.variableId===t)&&this.variablesToWatch.push({id:t,prevValue:e.getVariable(t)});return}if("timer"===i.dynamicVariableType||"stopwatch"===i.dynamicVariableType){let e;if(xC.isTextValue(i.value)&&Array.isArray(i.value.textValue)){let t=i.value.textValue;e=3===t.length?t[2]+60*t[1]+3600*t[0]:t[1]+60*t[0]}else e=i.value;r=e,this.dynamicVars.push({id:t,last:-1,expectedTime:-1,data:i,timerSeconds:e,startValue:r})}else"time"===i.dynamicVariableType&&e.updateVariable(t,MH(new Date,i)),"counter"===i.dynamicVariableType&&(r=xC.isTextValue(i.value)?zl(i.value.textValue):i.value),this.dynamicVars.push({id:t,last:-1,expectedTime:-1,data:i,startValue:r})}),this.rafId=window.requestAnimationFrame(this.onFrame),window.addEventListener("blur",this.onBlur),window.addEventListener("focus",this.onFocus)}disconnect(){window.removeEventListener("blur",this.onBlur),window.removeEventListener("focus",this.onFocus),this.rafId&&(window.cancelAnimationFrame(this.rafId),this.rafId=void 0),this.events.forEach(e=>e.dispose())}},zo=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.actions=Lv(t,t.actions,r,a,o,i)}dispatch(){let e=this.actions;
vendor: 14,170 bytes, lines 8113-8174
8113e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.TimelineAnimation.forEach(e=>e.dispatchConditional()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}dispose(){Ly(this.actions)}};function zl(e){return 3===e.length?e[2]+60*e[1]+3600*e[0]:e[1]+60*e[0]}var zh,zc,zd,zu=` 8114(async function() { 8115 const [wasmImport, wasmBinary] = await Promise.all([ 8116 import('https://unpkg.com/@splinetool/[email protected]/build/' + 'navmesh.js'), 8117 fetch('https://unpkg.com/@splinetool/[email protected]/build/' + 'navmesh.wasm').then((res) => res.arrayBuffer()), 8118 ]); 8119 const wasmModule = wasmImport.default; 8120 self.module = await wasmModule({ wasmBinary }); 8121 postMessage('ready'); 8122})(); 8123`,zp=` 8124(async function() { 8125 const [wasmImport, wasmBinary] = await Promise.all([ 8126 import(self.location.origin + '/_libraries/navmesh.js'), 8127 fetch(self.location.origin + '/_libraries/navmesh.wasm').then((res) => res.arrayBuffer()), 8128 ]); 8129 const wasmModule = wasmImport.default; 8130 self.module = await wasmModule({ wasmBinary }); 8131 postMessage('ready'); 8132})(); 8133`,zf=` 8134 8135onmessage = function(messageEvent) { 8136 const meshData = messageEvent.data; 8137 const positions = meshData[0]; 8138 const offset = meshData[1]; 8139 const indices = meshData[2]; 8140 const indicesLength = meshData[3]; 8141 const parameters = meshData[4]; 8142 8143 const module = self.module; 8144 const rc = new module.rcConfig(); 8145 rc.cs = parameters.cs; 8146 rc.ch = parameters.ch; 8147 rc.borderSize = parameters.borderSize ? parameters.borderSize : 0; 8148 rc.tileSize = parameters.tileSize ? parameters.tileSize : 0; 8149 rc.walkableSlopeAngle = parameters.walkableSlopeAngle; 8150 rc.walkableHeight = parameters.walkableHeight; 8151 rc.walkableClimb = parameters.walkableClimb; 8152 rc.walkableRadius = parameters.walkableRadius; 8153 rc.maxEdgeLen = parameters.maxEdgeLen; 8154 rc.maxSimplificationError = parameters.maxSimplificationError; 8155 rc.minRegionArea = parameters.minRegionArea; 8156 rc.mergeRegionArea = parameters.mergeRegionArea; 8157 rc.maxVertsPerPoly = parameters.maxVertsPerPoly; 8158 rc.detailSampleDist = parameters.detailSampleDist; 8159 rc.detailSampleMaxError = parameters.detailSampleMaxError; 8160 8161 if (!self.navMesh) { 8162 self.navMesh = new module.NavMesh(); 8163 } 8164 self.navMesh.build(positions, offset, indices, indicesLength, rc); 8165 8166 const navmeshData = navMesh.getNavmeshData(); 8167 const arrView = new Uint8Array(module.HEAPU8.buffer, navmeshData.dataPointer, navmeshData.size); 8168 const ret = new Uint8Array(navmeshData.size); 8169 ret.set(arrView); 8170 navMesh.freeNavmeshData(navmeshData); 8171 8172 postMessage(ret); 8173} 8174`,zm={cs:6,ch:2,walkableSlopeAngle:90,walkableHeight:20,walkableClimb:5,walkableRadius:0,maxEdgeLen:12,maxSimplificationError:1.3,minRegionArea:8,mergeRegionArea:20,maxVertsPerPoly:6,detailSampleDist:6,detailSampleMaxError:1};pU.then(e=>{zh=e,zc=new e.Vec3,zd=new e.Vec3});var zg=new iD,zv=class{constructor(e=!1,t=!1){this.usePhysics=e,this.isExport=t,this.onPointerDown=e=>{if(1!==pb.length)return;let{raycaster:t,page:i}=this.eventContext;this.eventContext.updateRaycaster(e);let r=i.raycastWithClones(t);if(0!==r.length){if(this.gameControl){let e=zg.copy(this.gameControl.colliderWorldPosition);e.y-=this.gameControl.colliderHeight/2,this.gameControl.path=this.computePath(e,r[0].point)}this.eventContext.requestRender()}},this.traverseWithPhysics=(e,t)=>i=>{let r;if(i instanceof EA)if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;else{if(i.objectForSample.dataPatched.physics.fusedBody)return;r=i.object}else if(i instanceof bO)r=i.object;else if(r=i,r.dataPatched.cloner?.disabled===!1&&r.dataPatched.cloner?.hideBase&&r.dataPatched.physics?.fusedBody!==!0)return!0;if(t&&!r.userData.navmesh)return;let a=r.dataPatched;if(!a.visible&&a.physics?.enabled!==!0)return!0;i.updateMatrixWorldSVD();let o=z1(a),l=r.userData.hasDestroy,h=r.userData.hasDrag,c=!1,d=!1;for(let e of a.events)!0!==e.data.disabled&&("GameControl"===e.data.type?c=!0:"Follow"===e.data.type&&(d=!0));if(c||o||d||l||h)return!0;if(this.usePhysics&&a.physics?.rigidBody==="dynamic"){if(this.usePhysics&&a.physics?.fusedBody)return!0}else if("geometry"in i&&i.geometry&&e.push(L0(i.geometry,i.matrixWorld)),this.usePhysics&&a.physics?.fusedBody)return i.traverseObject((t,i)=>{let r;if(0===i)return;if(t instanceof EA)if(!t.objectForSample)return!0===t.object.dataPatched.physics.fusedBody&&"dynamic"===t.object.dataPatched.physics.rigidBody||void 0;else{if(t.objectForSample.dataPatched.physics.fusedBody)return;r=t.object}else if(t instanceof bO)r=t.object;else if(r=t,t.dataPatched.cloner?.hideBase)return!0;let a=r.dataPatched;if(!a.visible&&a.physics?.enabled!==!0)return!0;"geometry"in t&&t.geometry&&e.push(L0(t.geometry,t.matrixWorld))}),!0},this.traverseNoPhysics=(e,t)=>i=>{let r;if(i instanceof EA)return;let a=(r=i instanceof bO?i.object:i).dataPatched;if("visibility"===a.physics.enabled?!a.visible:!a.physics.enabled)return!0;if(t&&!r.userData.navmesh)return;let o=i.geometry,l=!0===r.userData.hasDestroy,h=!0===r.userData.hasDrag;if(z1(a)||l||h||r.dataPatched.events.some(e=>!0!==e.data.disabled&&"GameControl"===e.data.type))return!0;o&&e.push(L0(o,i.matrixWorld))},this.navmeshWasm=zh,this.navMesh=new this.navmeshWasm.NavMesh,this._workerURL=URL.createObjectURL(new Blob([(t?zu:zp)+zf])),this._worker=new Worker(this._workerURL)}init(e,t,i){this.gameControl=t,this.eventContext=i,this.setDefaultQueryExtent(new iD().setScalar(e.ch*e.walkableRadius*1.2)),this._worker.onmessage=()=>{this.createNavMesh(i.page,e,e=>{this.buildFromNavmeshData(e.data)})},this.eventContext.renderer.domElement.addEventListener("pointerdown",this.onPointerDown)}createNavMesh(e,t,i){t.objects.forEach(t=>{let i=e.scene.find(t);i.traverseEntity(e=>{e.userData.navmesh=!0}),i.cloner?.traverseObject(e=>{e.userData.navmesh=!0})});let r=[],a=(this.usePhysics?this.traverseWithPhysics:this.traverseNoPhysics)(r,"custom"===t.zones);if(e.traverseChildren(a),t.objects.forEach(t=>{let i=e.scene.find(t);i.traverseEntity(e=>{e.userData.navmesh=void 0}),i.cloner?.traverseObject(e=>{e.userData.navmesh=void 0})}),0===r.length)return!1;let o=yp(r),{positions:l,triIndices:h}=_b(o.getAttribute("position"),o.getIndex());return this._worker.postMessage([l,l.length/3,h,h.length,{...zm,...t}]),this._worker.onmessage=i,!0}createDebugNavGeometry(){let e,t,i=this.navMesh.getDebugNavMesh(),r=i.getTriangleCount(),a=new Uint32Array(3*r),o=new Float32Array(3*r*3);for(e=0;e<3*r;e++)a[e]=e;for(e=0;e<r;e++)for(t=0;t<3;t++){let r=i.getTriangle(e).getPoint(t);o[9*e+3*t+0]=r.x,o[9*e+3*t+1]=r.y,o[9*e+3*t+2]=r.z}let l=new rQ;return l.setIndex(new rN(a,1)),l.setAttribute("position",new rN(o,3)),l}getClosestPoint(e){return zc.x=e.x,zc.y=e.y,zc.z=e.z,this.navMesh.getClosestPoint(zc)}getClosestPointToRef(e,t){zc.x=e.x,zc.y=e.y,zc.z=e.z;let i=this.navMesh.getClosestPoint(zc);t.set(i.x,i.y,i.z)}getRandomPointAround(e,t){return zc.x=e.x,zc.y=e.y,zc.z=e.z,this.navMesh.getRandomPointAround(zc,t)}getRandomPointAroundToRef(e,t,i){zc.x=e.x,zc.y=e.y,zc.z=e.z;let r=this.navMesh.getRandomPointAround(zc,t);i.set(r.x,r.y,r.z)}moveAlong(e,t){return zc.x=e.x,zc.y=e.y,zc.z=e.z,zd.x=t.x,zd.y=t.y,zd.z=t.z,this.navMesh.moveAlong(zc,zd)}moveAlongToRef(e,t,i){return zc.x=e.x,zc.y=e.y,zc.z=e.z,zd.x=t.x,zd.y=t.y,zd.z=t.z,this.navMesh.moveAlong(zc,zd)}computePath(e,t){let i=this.getClosestPoint(t);if(zd.x=i.x,zd.y=i.y,zd.z=i.z,Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2)+Math.pow(t.z-i.z,2))>this.getDefaultQueryExtent().y)return[];this.getClosestPoint(e);let r=this.navMesh.computePath(zc,zd),a=r.getPointCount(),o=[];for(let e=0;e<a;e++){let t=r.getPoint(e);o.push(new iD(t.x,t.y,t.z))}return o}createCrowd(e,t){return new zy(this,e,t)}setDefaultQueryExtent(e){zc.x=e.x,zc.y=e.y,zc.z=e.z,this.navMesh.setDefaultQueryExtent(zc)}getDefaultQueryExtent(){return this.navMesh.getDefaultQueryExtent()}buildFromNavmeshData(e){let t=e.length*e.BYTES_PER_ELEMENT,i=this.navmeshWasm._malloc(t),r=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,i,t);r.set(e);let a=new this.navmeshWasm.NavmeshData;a.dataPointer=r.byteOffset,a.size=e.length,this.navMesh.buildFromNavmeshData(a),this.navmeshWasm._free(r.byteOffset)}getNavmeshData(){let e=this.navMesh.getNavmeshData(),t=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,e.dataPointer,e.size),i=new Uint8Array(e.size);return i.set(t),this.navMesh.freeNavmeshData(e),i}getDefaultQueryExtentToRef(e){let t=this.navMesh.getDefaultQueryExtent();e.set(t.x,t.y,t.z)}dispose(){this.navMesh.destroy(),this._worker.terminate(),URL.revokeObjectURL(this._workerURL),this.eventContext?.renderer.domElement.removeEventListener("pointerdown",this.onPointerDown)}addCylinderObstacle(e,t,i){return zc.x=e.x,zc.y=e.y,zc.z=e.z,this.navMesh.addCylinderObstacle(zc,t,i)}addBoxObstacle(e,t,i){return zc.x=e.x,zc.y=e.y,zc.z=e.z,zd.x=t.x,zd.y=t.y,zd.z=t.z,this.navMesh.addBoxObstacle(zc,zd,i)}removeObstacle(e){this.navMesh.removeObstacle(e)}isSupported(){return void 0!==this.navmeshWasm}},zy=class{constructor(e,t,i){this.navmeshWasmWrapper=e,this.transforms=[],this.agents=[],this.reachRadii=[],this._agentDestinationArmed=[],this._agentDestination=[],this.crowd=new this.navmeshWasmWrapper.navmeshWasm.Crowd(t,i,this.navmeshWasmWrapper.navMesh.getNavMesh())}onReachTarget(e,t){}addAgent(e,t,i){let r=new this.navmeshWasmWrapper.navmeshWasm.dtCrowdAgentParams;r.radius=t.radius,r.height=t.height,r.maxAcceleration=t.maxAcceleration,r.maxSpeed=t.maxSpeed,r.collisionQueryRange=t.collisionQueryRange,r.pathOptimizationRange=t.pathOptimizationRange,r.separationWeight=t.separationWeight,r.updateFlags=7,r.obstacleAvoidanceType=0,r.queryFilterType=0,r.userData=0;let a=this.crowd.addAgent(new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z),r);return this.transforms.push(i),this.agents.push(a),this.reachRadii.push(t.reachRadius?t.reachRadius:t.radius),this._agentDestinationArmed.push(!1),this._agentDestination.push(new iD(0,0,0)),a}getAgentPosition(e){return this.crowd.getAgentPosition(e)}getAgentPositionToRef(e,t){let i=this.crowd.getAgentPosition(e);t.set(i.x,i.y,i.z)}getAgentVelocity(e){return this.crowd.getAgentVelocity(e)}getAgentVelocityToRef(e,t){let i=this.crowd.getAgentVelocity(e);t.set(i.x,i.y,i.z)}getAgentNextTargetPath(e){return this.crowd.getAgentNextTargetPath(e)}getAgentNextTargetPathToRef(e,t){let i=this.crowd.getAgentNextTargetPath(e);t.set(i.x,i.y,i.z)}getAgentState(e){return this.crowd.getAgentState(e)}overOffmeshConnection(e){return this.crowd.overOffmeshConnection(e)}agentGoto(e,t){this.crowd.agentGoto(e,new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z));let i=this.agents.indexOf(e);i>-1&&(this._agentDestinationArmed[i]=!0,this._agentDestination[i].set(t.x,t.y,t.z))}agentTeleport(e,t){this.crowd.agentTeleport(e,new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z))}updateAgentParameters(e,t){let i=this.crowd.getAgentParameters(e);void 0!==t.radius&&(i.radius=t.radius),void 0!==t.height&&(i.height=t.height),void 0!==t.maxAcceleration&&(i.maxAcceleration=t.maxAcceleration),void 0!==t.maxSpeed&&(i.maxSpeed=t.maxSpeed),void 0!==t.collisionQueryRange&&(i.collisionQueryRange=t.collisionQueryRange),void 0!==t.pathOptimizationRange&&(i.pathOptimizationRange=t.pathOptimizationRange),void 0!==t.separationWeight&&(i.separationWeight=t.separationWeight),this.crowd.setAgentParameters(e,i)}removeAgent(e){this.crowd.removeAgent(e);let t=this.agents.indexOf(e);t>-1&&(this.agents.splice(t,1),this.transforms.splice(t,1),this.reachRadii.splice(t,1),this._agentDestinationArmed.splice(t,1),this._agentDestination.splice(t,1))}getAgents(){return this.agents}update(e){if(this.navmeshWasmWrapper.navMesh.update(),!(e<=.001)){if(1/60<=.001)this.crowd.update(e);else{let t=Math.floor(e/(1/60));t>10&&(t=10),t<1&&(t=1);let i=e/t;for(let e=0;e<t;e++)this.crowd.update(i)}for(let e=0;e<this.agents.length;e++){let t=this.agents[e],i=this.getAgentPosition(t);if(this.transforms[e].copy(i),this._agentDestinationArmed[e]){let r=i.x-this._agentDestination[e].x,a=i.z-this._agentDestination[e].z,o=this.reachRadii[e],l=this._agentDestination[e].y-this.reachRadii[e],h=this._agentDestination[e].y+this.reachRadii[e],c=r*r+a*a;i.y>l&&i.y<h&&c<o*o&&(this.onReachTarget(t,this._agentDestination[e]),this._agentDestinationArmed[e]=!1)}}}}setDefaultQueryExtent(e){let t=new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z);this.crowd.setDefaultQueryExtent(t)}getDefaultQueryExtent(){return this.crowd.getDefaultQueryExtent()}getDefaultQueryExtentToRef(e){let t=this.crowd.getDefaultQueryExtent();e.set(t.x,t.y,t.z)}getCorners(e){let t,i=this.crowd.getCorners(e),r=i.getPointCount(),a=[];for(t=0;t<r;t++){let e=i.getPoint(t);a.push(new iD(e.x,e.y,e.z))}return a}dispose(){this.crowd.destroy()}},zx={type:"change"},zb={type:"start"},zw={type:"end",nonOrbit:!0},zS={type:"end",nonOrbit:!1},z_={type:"end",isZoom:!0,nonOrbit:!0},zA={type:"end",changed:!1},zM={type:"cameraAnimatingInTimeline"},zC=new iP,zE=new t9,zT=2*Math.PI,zP=new iD,zD=new t9,zO=new iD,zI=new iP,zR=new i6,zL={type:"requestRender"},zB=class extends tX{constructor(e,t,i={isPlayMode:!1,isExport:!1},r){super(),this.object=e,this.domElement=t,this.options=i,this.timelineState=r,this.enabled=!0,this.useKeyEvents=!0,this.enableDamping=!1,this.enableZoom=!0,this.enableRotate=!0,this.enablePan=!0,this.autoRotate=!1,this.rotationLimitsMode=0,this.panLimitsMode=0,this.rotationSoftLimit=2,this.panSoftLimit=2,this.hoverRotatePanMode=0,this.zoomLimitsEnabled=!1,this.mouseButtons=[0,5],this.mouseButtonsPlay=[3,4,5],this.touches=[null,3,1],this.offset=new iD,this.eye=new iD,this.lastPosition=new iD,this.lastQuaternion=new iP,this.current=ne
vendor: 4,339 bytes, line 8174
8174w t9,this.overShoot=new t9,this.overRatio=new t9,this.spherical=new lq,this.sphericalDelta=new lq,this.panOffset=new iD,this.panLeftV=new iD,this.panUpV=new iD,this.panV=new iD,this.rotateStart=new t9,this.rotateEnd=new t9,this.rotateDelta=new t9,this.panStart=new t9,this.panEnd=new t9,this.panDelta=new t9,this.dollyStart=new t9,this.dollyEnd=new t9,this.dollyDelta=new t9,this.rotationRangeFactor=new t9,this.panRangeFactor=new t9,this.state=-1,this.zoomChanged=!1,this.isPointerDown=!1,this.isThetaFlipped=!1,this.prevScale=0,this.scale=1,this.gesture=!1,this.timer=-1,this.timerHover=-1,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPhi=0,this.maxPhi=Math.PI,this.minTheta=-1/0,this.maxTheta=1/0,this.minH=0,this.maxH=Math.PI,this.minV=-1/0,this.maxV=1/0,this.autoRotateClockwise=!0,this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.resetHoverEffectOnPointerLeave=!1,this.hasChange=!1,this.useWindowEvents=!1,this.isTouchZoom=!0,this.autoRotateSpeed=2,this.dampingFactor=.125,this.zoomSpeed=2,this.rotateSpeed=1,this.rotateFactor=1,this.panSpeed=1,this.hoverRotatePanStrength=.1,this.hoverRotateDamping=this.dampingFactor,this.isCurrentlyDamping=!1,this.thetaIsFree=!1,this.phiIsFree=!1,this.needsUpdate=!0,this.onCameraChange=e=>{this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange),this.object=e.camera,this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)},this.update=()=>{this.object.updateWorldMatrix(!0,!1),this.object.matrixWorld.decompose(zO,zI,zP),this.offset.copy(zO).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.autoRotate&&-1===this.state&&this.rotateLeft((!0===this.autoRotateClockwise?1:-1)*this.getAutoRotationAngle()),0!==this.rotationLimitsMode&&this.applyLimits(this.sphericalDelta,this.rotationLimitsMode,this.rotationSoftLimit,this.maxTheta,this.minTheta,this.maxPhi,this.minPhi,this.rotationRangeFactor),2!==this.rotationLimitsMode&&(this.spherical.phi+=this.sphericalDelta.phi),(1!==this.rotationLimitsMode||!0===this.autoRotate)&&(this.spherical.theta+=this.sphericalDelta.theta),this.spherical.radius*=this.scale,this.zoomLimitsEnabled&&this.object.isPerspectiveCamera&&(this.spherical.radius=Math.max(this.minDistance,Math.min(this.maxDistance,this.spherical.radius))),0!==this.panLimitsMode&&(this.target.applyQuaternion(zC.copy(zI).invert()),this.panOffset.applyQuaternion(zC),this.applyLimits(this.panOffset,this.panLimitsMode,this.panSoftLimit,this.maxH,this.minH,this.maxV,this.minV,this.panRangeFactor),this.target.applyQuaternion(zI),this.panOffset.applyQuaternion(zI)),2===this.panLimitsMode&&(this.panOffset.y=0),1===this.panLimitsMode&&(this.panOffset.x=0),-1!==this.state||this.gesture?(this.target.add(this.panOffset),this.panOffset.set(0,0,0)):(this.panOffset.multiplyScalar(1-this.dampingFactor),this.target.add(this.panOffset)),this.offset.setFromSpherical(this.spherical),zO.copy(this.target).add(this.offset),this.object.position.copy(this.target).add(this.offset),this.object.parent&&(zR.copy(this.object.parent.matrixWorld).invert(),this.object.position.applyMatrix4(zR));let e=this.spherical.phi%zT;if(this.eye.copy(this.offset).normalize(),this.object.up.copy(rw.DEFAULT_UP).applyAxisAngle(this.eye,this.object.angleOffsetFromUp),e>0&&e>Math.PI||e<0&&e>-Math.PI?(this.object.up.negate(),this.object.lookAt(this.target),this.object.isUpVectorFlipped=!0):(this.object.lookAt(this.target),this.object.isUpVectorFlipped=!1),-1===this.state||!0===this.enableDamping){let e=1===this.hoverRotatePanMode?this.hoverRotateDamping:this.dampingFactor;this.sphericalDelta.theta*=1-e,this.sphericalDelta.phi*=1-e}else this.sphericalDelta.set(0,0,0);if(this.scale=1,this.lastPosition.distanceToSquared(this.object.position)>.01||8*(1-this.lastQuaternion.dot(this.object.quaternion))>1e-8){this.dispatchEvent(zx),this.object.dispatchEvent(zL),this.lastPosition.copy(this.object.position),this.lastQuaternion.copy(this.object.quaternion),this.isCurrentlyDamping=!0;return}
vendor: 23,269 bytes, line 8174
8174this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.object.wasMovedBySwitchCameraAction=!1,this.sphericalDelta.set(0,0,0),this.panOffset.set(0,0,0),this.isCurrentlyDamping=!1},this.onPointerDown=e=>{!1!==this.enabled&&("touch"===e.pointerType||"pen"===e.pointerType&&pg?this.onPointerDownTouch(e):this.onPointerDownMouse(e),-1!==this.state&&(this.isPointerDown=!0,this.dispatchEvent(zb),this.domElement.addEventListener("pointermove",this.onPointerMove),this.domElement.addEventListener("pointerup",this.onPointerUp),e.stopPropagation(),"touch"===e.pointerType||"pen"===e.pointerType&&pg||this.domElement.setPointerCapture(e.pointerId)))},this.onPointerLeave=e=>{this.resetHoverEffectOnPointerLeave&&!this.useWindowEvents?(1===this.hoverRotatePanMode?(this.sphericalDelta.theta=-this.spherical.theta,this.sphericalDelta.phi=-this.spherical.phi,zP.subVectors(this.position0,this.target0),this.spherical.setFromVector3(zP),this.sphericalDelta.theta+=this.spherical.theta,this.sphericalDelta.phi+=this.spherical.phi,this.sphericalDelta.theta/=8,this.sphericalDelta.phi/=8):2===this.hoverRotatePanMode&&this.panOffset.subVectors(this.target0,this.target).divideScalar(8),this.update()):this.pointerLeaveEvent=e},this.onPointerEnter=e=>{this.resetHoverEffectOnPointerLeave||void 0===this.pointerLeaveEvent?zD.set(e.clientX-this.domElement.clientWidth/2,e.clientY-this.domElement.clientHeight/2):zD.set(e.clientX-this.pointerLeaveEvent.clientX,e.clientY-this.pointerLeaveEvent.clientY),1===this.hoverRotatePanMode?(this.rotateDelta.copy(zD).multiplyScalar(this.rotateSpeed*this.hoverRotatePanStrength).rotateAround(zE,-this.object.angleOffsetFromUp),this.rotateLeft(2*Math.PI*this.rotateDelta.x/this.domElement.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/this.domElement.clientHeight),this.rotateStart.set(e.clientX,e.clientY)):2===this.hoverRotatePanMode&&(this.panDelta.copy(zD).multiplyScalar(this.panSpeed*this.hoverRotatePanStrength),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.set(e.clientX,e.clientY)),this.update()},this.onPointerMove=e=>{this.timelineState?.isPlayingCameraAnimation?this.dispatchEvent(zM):!1!==this.enabled&&(this.checkRaycastLock()||("touch"===e.pointerType||"pen"===e.pointerType&&pg?this.onPointerMoveTouch(e):this.onPointerMoveMouse(e),e.stopPropagation()))},this.onPointerUp=e=>{this.isPointerDown=!1,0===pb.length&&(this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)),pb.length>1&&e.preventDefault(),this.hasChange?this.dispatchEvent(0===this.state?zS:zw):this.dispatchEvent(zA),this.state=-1,e&&(e.stopPropagation(),"touch"===e.pointerType||"pen"===e.pointerType&&pg||this.domElement.releasePointerCapture(e.pointerId))},this.onPointerDownMouse=e=>{switch(this.useKeyEvents?this.mouseButtons[e.button]:this.mouseButtonsPlay[e.button]){case 0:if(!0!==e.altKey||e.shiftKey||px(e)){if(" "===this.key){if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}}else{if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}break;case 4:if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2;break;case 3:if(px(e)||e.shiftKey){if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}else{if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}break;case 5:if(px(e)||e.shiftKey){if(!1===this.enableRotate)return;this.handleMouseDownRotate(e),this.state=0}else{if(!1===this.enablePan)return;this.handleMouseDownPan(e),this.state=2}break;default:this.state=-1}},this.onPointerMoveMouse=e=>{switch(this.state){case 0:if(!1===this.enableRotate)return;this.handleMouseMoveRotate(e);break;case 1:if(!1===this.enableZoom)return;this.handleMouseMoveDolly(e);break;case 2:if(!1===this.enablePan)return;this.handleMouseMovePan(e)}this.object.wasMovedByUser=!0},this.onPointerDownTouch=e=>{switch(pb.length>1&&e.preventDefault(),this.touches[pb.length-1]){case 0:if(!1===this.enableRotate){this.state=-1;return}this.handleTouchStartRotate(),this.state=3;break;case 1:if(!1===this.enablePan){this.state=-1;return}this.handleTouchStartPan(),this.state=4;break;case 2:if(!1===this.enableZoom&&!1===this.enablePan)return;this.handleTouchStartDollyPan(),this.state=5;break;case 3:if(!1===this.enableZoom&&!1===this.enableRotate)return;this.handleTouchStartDollyRotate(),this.state=6;break;default:this.state=-1}},this.onPointerMoveTouch=e=>{switch(pb.length>1&&e.preventDefault(),this.state){case 3:if(!1===this.enableRotate)return;this.handleTouchMoveRotate(e),this.update();break;case 4:if(!1===this.enablePan)return;this.handleTouchMovePan(e),this.update();break;case 5:if(!1===this.enableZoom&&!1===this.enablePan)return;this.handleTouchMoveDollyPan(e),this.update();break;case 6:if(!1===this.enableZoom&&!1===this.enableRotate)return;this.handleTouchMoveDollyRotate(e),this.update();break;default:this.state=-1}this.object.wasMovedByUser=!0},this.dispatchEndDebounced=u9(()=>{this.zoomChanged?this.dispatchEvent(z_):this.dispatchEvent(zw),this.zoomChanged=!1},33),this.onMouseWheel=e=>{if(!1!==this.enabled&&(!1!==this.enableZoom||!1!==this.enablePan)&&!this.checkRaycastLock()){if(this.options.isExport||this.domElement.clientHeight!==document.body.clientHeight||this.domElement.clientWidth!==document.body.clientWidth||e.preventDefault(),this.dispatchEvent(zb),this.timelineState?.isPlayingCameraAnimation)return void this.dispatchEvent(zM);this.handleMouseWheel(e),this.dispatchEndDebounced(),this.object.wasMovedByUser=!0}},this.onGesture=e=>{if(e.preventDefault(),!1!==this.enabled&&!this.checkRaycastLock()&&!pf){if(this.timelineState?.isPlayingCameraAnimation)return void this.dispatchEvent(zM);if("gesturechange"===e.type){if(!1===this.enableZoom||!1===this.isTouchZoom)return;this.dispatchEvent(zb),e.scale>this.prevScale?this.dollyIn(this.getZoomScale()):e.scale<this.prevScale&&this.dollyOut(this.getZoomScale()),this.prevScale=e.scale,this.update(),this.object.wasMovedByUser=!0}else this.dispatchEvent(zw)}},this.onContextMenu=e=>{e.preventDefault()},this.onTouchEnd=e=>{e.preventDefault()},this.onKeyDown=e=>{!1!==this.enabled&&(this.key=e.key," "===e.key&&this.dispatchEvent(zb))},this.onKeyUp=e=>{!1!==this.enabled&&(this.key=void 0,-1!==this.state&&"Alt"===e.key&&this.onPointerUp(pb[0])," "===e.key&&this.dispatchEvent(zw))},this.onPointerHover=e=>{"mouse"!==e.pointerType||!1===this.enabled||-1!==this.state||2===this.hoverRotatePanMode&&this.isPanOverShoot||1===this.hoverRotatePanMode&&this.isRotateOverShoot||(this.isPointerDown=!0,2===this.hoverRotatePanMode?this.handleMouseMovePan(e,this.hoverRotatePanStrength):1===this.hoverRotatePanMode&&this.handleMouseMoveRotate(e,this.hoverRotatePanStrength))},this.onBeginState=()=>{this.enabled=!1,this.needsUpdate=!1},this.onCompleteState=e=>{e.isfromEntity&&this.options.isPlayMode||(this.enabled=!0,this.needsUpdate=!0,this.object.updateUp(),this.object.getTarget(this.target))},this.target=this.object.getTarget(),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.quat0=this.object.quaternion.clone(),this.isUpVectorFlipped0=this.object.isUpVectorFlipped,this.offset.copy(this.object.position).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.initialSphericalRadius=this.spherical.radius,this.addEventListenersToCamera()}dispatchEvent(e){"start"===e.type?this.hasChange=!1:this.hasChange=!0,super.dispatchEvent(e)}addEventListenersToCamera(){this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)}removeEventListenersFromCamera(){this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange)}updateUseWindowEvents(e){if(window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("pointermove",this.onPointerHover),this.useWindowEvents=e,0!==this.hoverRotatePanMode&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover)),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),0!==this.hoverRotatePanMode&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}}fromJSON(e,t){this.rotateFactor=e.rotationSpeed??1,this.setEnableDampingSpeed(e.enableDamping),this.enablePan=e.enablePan,this.enableZoom=e.enableZoom,this.enableRotate=e.enableRotate,this.rotationLimitsMode=e.rotationLimitsMode,this.thetaIsFree=e.rotationHorizontalOffset.min===e.rotationHorizontalOffset.max&&e.rotationHorizontalOffset.min===Math.PI,this.phiIsFree=e.rotationVerticalOffset.min===e.rotationVerticalOffset.max&&e.rotationVerticalOffset.min===Math.PI,this.panLimitsMode=e.panLimitsMode,this.panSoftLimit=e.panSoftLimit,this.rotationSoftLimit=e.rotationSoftLimit,this.hoverRotatePanMode=e.hoverRotatePanMode,this.hoverRotateDamping=e.hoverRotateDamping??this.dampingFactor,this.useWindowEvents="window"===t,0!==this.hoverRotatePanMode&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover));let i=e.hoverRotatePanStrength/100;this.hoverRotatePanStrength=i**2,this.zoomLimitsEnabled=e.zoomLimitsEnabled,this.minZoom=e.zoomLimits.min,this.maxZoom=Math.max(e.zoomLimits.min,e.zoomLimits.max),this.minDistance=1e3/this.maxZoom,this.maxDistance=Math.max(this.minDistance,1e3/e.zoomLimits.min),this.autoRotate=e.autoRotate,this.autoRotateSpeed=e.autoRotateSpeed,this.autoRotateClockwise=e.autoRotateClockwise;let r=this.object.getTarget().applyQuaternion(zC.copy(this.object.quaternion).invert());this.minV=-e.panVerticalOffset.min+r.y,this.maxV=e.panVerticalOffset.max+r.y,this.minH=-e.panHorizontalOffset.min+r.x,this.maxH=e.panHorizontalOffset.max+r.x,this.panRangeFactor.set(this.maxH-this.minH,this.maxV-this.minV).divideScalar(2),this.rotationRangeFactor.setScalar(Math.PI).divideScalar(4),this.minPhi=zz(this.spherical.phi-e.rotationVerticalOffset.min),this.maxPhi=zz(this.spherical.phi+e.rotationVerticalOffset.max),this.minTheta=zz(zz(this.spherical.theta)-e.rotationHorizontalOffset.min),this.maxTheta=zz(zz(this.spherical.theta)+e.rotationHorizontalOffset.max),this.isThetaFlipped=this.minTheta>this.maxTheta,1===e.orbitTouches&&(this.touches[0]=0),1===e.panTouches&&(this.touches[0]=1),2===e.orbitTouches&&(this.touches[1]=3),2===e.panTouches&&(this.touches[1]=2),3===e.orbitTouches&&(this.touches[2]=0),3===e.panTouches&&(this.touches[2]=1),this.isTouchZoom=e.isTouchZoom,this.resetHoverEffectOnPointerLeave=e.resetHoverEffectOnPointerLeave??!1}connect(){if(this.domElement.addEventListener("contextmenu",this.onContextMenu),this.domElement.addEventListener("pointerdown",this.onPointerDown),this.domElement.addEventListener("wheel",this.onMouseWheel),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keyup",this.onKeyUp,!1),this.domElement.addEventListener("gesturestart",this.onGesture),this.domElement.addEventListener("gesturechange",this.onGesture),this.domElement.addEventListener("gestureend",this.onGesture),this.domElement.addEventListener("touchend",this.onTouchEnd),0!==this.hoverRotatePanMode&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}this.pointerLeaveEvent=void 0}dispose(){this.removeEventListenersFromCamera(),this.domElement.removeEventListener("contextmenu",this.onContextMenu),this.domElement.removeEventListener("pointerdown",this.onPointerDown),this.domElement.removeEventListener("wheel",this.onMouseWheel),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keyup",this.onKeyUp,!1),this.domElement.removeEventListener("pointermove",this.onPointerHover),window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("gesturestart",this.onGesture),this.domElement.removeEventListener("gesturechange",this.onGesture),this.domElement.removeEventListener("gestureend",this.onGesture),this.domElement.removeEventListener("touchend",this.onTouchEnd),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)}applyLimits(e,t,i,r,a,o,l,h){let c,d,p;this.overShoot.set(0,0),e instanceof iD?(c=e.x,d=e.y,this.current.set(this.target.x,this.target.y),p=!0):(c=e.theta,d=e.phi,this.current.set(zz(this.spherical.theta),zz(this.spherical.phi)),p=!1),0===i&&(this.current.x+=c,this.current.y+=d),(3===t||2===t)&&(!p&&this.isThetaFlipped?this.current.x>r&&this.current.x<0?this.overShoot.x=r-this.current.x:this.current.x<a&&this.current.x>0&&(this.overShoot.x=a-this.current.x):this.current.x>r?this.overShoot.x=r-this.current.x:this.current.x<a&&(this.overShoot.x=a-this.current.x)),(3===t||1===t)&&(this.current.y>o?this.overShoot.y=o-this.current.y:this.current.y<l&&(this.overShoot.y=l-this.current.y)),p||(this.overShoot.x=zz(this.overShoot.x),this.overShoot.y=zz(this.overShoot.y)),0!==i?(this.overRatio.copy(this.overShoot).divide(h),this.overRatio.x=Math.min(Math.abs(this.overRatio.x),1),this.overRatio.y=Math.min(Math.abs(this.overRatio.y),1),1===i&&(this.overRatio.x=zF(Math.abs(this.overRatio.x)),this.overRatio.y=zF(Math.abs(this.overRatio.y))),this.isPointerDown||1===i?2===i&&(this.overRatio.x>.9&&!this.thetaIsFree||this.overRatio.y>.9&&!this.phiIsFree)?this.isPointerDown=!1:(c*this.overShoot.x<0&&!this.thetaIsFree&&(c*=1-this.overRatio.x),d*this.overShoot.y<0&&!this.phiIsFree&&(d*=1-this.overRatio.y)):2===i&&(!p&&(this.overRatio.x>.002&&!this.thetaIsFree||this.overRatio.y>.002&&!this.phiIsFree)||p&&(Math.abs(this.overShoot.x)>2||Math.abs(this.overShoot.y)>2)?(this.thetaIsFree||(c=.05*this.overShoot.x),this.phiIsFree||(d=.05*this.overShoot.y),p?this.isPanOverShoot=!0:this.isRotateOverShoot=!0):p?this.isPanOverShoot=!1:this.isRotateOverShoot=!1)):(c+=this.overShoot.x,d+=this.overShoot.y),e instanceof iD?(e.x=c,e.y=d):(this.thetaIsFree||(e.theta=c),this.phiIsFree||(e.phi=d))}setEnableDampingSpeed(e){this.enableDamping=e,this.rotateSpeed=(!0===e?.2:1)*this.rotateFactor}stopDamping(){this.sphericalDelta.theta=0,this.sphericalDelta.phi=0}getAutoRotationAngle(){return 2*Math.PI/60/60*this.autoRotateSpeed}getZoomScale(){return Math.pow(.95,this.zoomSpeed)}rotateLeft(e){this.sphericalDelta.theta-=e}rotateUp(e){this.sphericalDelta.phi-=e}panLeft(e,t){this.panLeftV.setFromMatrixColumn(t,0),this.panLeftV.multiplyScalar(-e),this.panOffset.add(this.panLeftV)}panUp(e,t){this.panUpV.setFromMatrixColumn(t,1),this.panUpV.multiplyScalar(e),this.panOffset.add(this.panUpV)}pan(e,t){let i=this.domElement;if(i&&this.object.isPerspectiveCamera){let r=this.object.position;this.panV.copy(r).sub(this.target);let a=this.panV.length();a*=Math.tan(this.object.fov/2*Math.PI/180),this.panLeft(2*e*a/i.clientHeight,this.object.matrixWorld),this.panUp(2*t*a/i.clientHeight,this.object.matrixWorld)}else i&&this.object.isOrthographicCamera&&(this.panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrixWorld),this.panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrixWorld));this.dispatchEvent(zx)}dollyOut(e){this.object.isPerspectiveCamera?this.scale/=e:this.object.isOrthographicCamera&&(this.object.zoom*=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(zx)}dollyIn(e){this.object.isPerspectiveCamera?this.scale*=e:this.object.isOrthographicCamera&&(this.object.zoom/=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(zx)}setZoom(e){if(this.dispatchEvent(zb),this.object.isPerspectiveCamera){let t=this.initialSphericalRadius/e/this.spherical.radius;this.scale=t}else this.object.isOrthographicCamera&&(this.object.zoom=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0);this.dispatchEvent(zw)}handleMouseDownRotate(e){this.rotateStart.set(e.clientX,e.clientY)}handleMouseDownDolly(e){this.dollyStart.set(e.clientX,e.clientY)}handleMouseDownPan(e){this.panStart.set(e.clientX,e.clientY)}handleMouseMoveRotate(e,t=1){void 0!==e.movementX?this.rotateDelta.set(e.movementX,e.movementY):(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd)),this.rotateDelta.multiplyScalar(this.rotateSpeed*t).rotateAround(zE,-this.object.angleOffsetFromUp);let i=this.domElement,r=this.useWindowEvents?window.innerHeight:i.clientHeight,a=2*Math.PI*this.rotateDelta.x/r,o=2*Math.PI*this.rotateDelta.y/r;this.rotateLeft(a),this.rotateUp(o),this.update()}handleMouseMoveDolly(e){this.dollyEnd.set(e.clientX,e.clientY),this.dollyDelta.subVectors(this.dollyEnd,this.dollyStart),this.dollyDelta.y>0?this.dollyOut(this.getZoomScale()):this.dollyDelta.y<0&&this.dollyIn(this.getZoomScale()),this.dollyStart.copy(this.dollyEnd),this.update()}handleMouseMovePan(e,t=1){void 0!==e.movementX?this.panDelta.set(e.movementX,e.movementY):(this.panEnd.set(e.clientX,e.clientY),this.panDelta.subVectors(this.panEnd,this.panStart),this.panStart.copy(this.panEnd)),this.panDelta.multiplyScalar(this.panSpeed*t),this.pan(this.panDelta.x,this.panDelta.y),this.update()}handleMouseWheel(e){if(!1===pm&&!1===px(e)&&!0==(0===e.wheelDeltaY||0===e.deltaY?!(pp&&e.shiftKey&&Math.abs(e.wheelDeltaX)>=120)&&(e.wheelDeltaX?e.wheelDeltaX===-3*e.deltaX||e.wheelDeltaX===-3*window.devicePixelRatio*e.deltaX:0===e.deltaMode):e.wheelDeltaY?e.wheelDeltaY===-3*e.deltaY||e.wheelDeltaY===-3*window.devicePixelRatio*e.deltaY:0===e.deltaMode))!1!==this.enablePan&&(this.gesture?(this.panDelta.set(-e.deltaX,-e.deltaY).multiplyScalar(this.panSpeed),this.panDelta.x=Math.min(Math.abs(this.panDelta.x),100)*(this.panDelta.x<0?-1:1),this.panDelta.y=Math.min(Math.abs(this.panDelta.y),100)*(this.panDelta.y<0?-1:1),e.altKey?this.pan(0,this.panDelta.y):e.shiftKey?this.pan(this.panDelta.x,0):this.pan(this.panDelta.x,this.panDelta.y),this.update()):(this.gesture=!0,this.isPointerDown=!0),window.clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.gesture=!1,this.isPointerDown=!1,this.dispatchEvent(zw)},30));else{if(!1===this.enableZoom||this.gesture)return;0===e.deltaY?e.deltaX<0?this.dollyIn(this.getZoomScale()):e.deltaX>0&&this.dollyOut(this.getZoomScale()):e.deltaY<0?this.dollyIn(this.getZoomScale()):e.deltaY>0&&this.dollyOut(this.getZoomScale()),this.update(),this.gesture=!1,this.isPointerDown=!1}}handleTouchStartRotate(){if(2===pb.length){let e=.5*(pb[0].pageX+pb[1].pageX),t=.5*(pb[0].pageY+pb[1].pageY);this.rotateStart.set(e,t)}else this.rotateStart.set(pb[0].pageX,pb[0].pageY)}handleTouchStartPan(){if(2===pb.length){let e=.5*(pb[0].pageX+pb[1].pageX),t=.5*(pb[0].pageY+pb[1].pageY);this.panStart.set(e,t)}else this.panStart.set(pb[0].pageX,pb[0].pageY)}handleTouchStartDolly(){let e=pb[0].pageX-pb[1].pageX,t=pb[0].pageY-pb[1].pageY,i=Math.sqrt(e*e+t*t);this.dollyStart.set(0,i)}handleTouchStartDollyPan(){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchStartDolly(),this.enablePan&&this.handleTouchStartPan()}handleTouchStartDollyRotate(){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchStartDolly(),this.enableRotate&&this.handleTouchStartRotate()}handleTouchMoveRotate(e){if(2===pb.length){let t=pE(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.rotateEnd.set(i,r)}else{if(e.pointerId!==pb[0].pointerId)return;this.rotateEnd.set(e.pageX,e.pageY)}this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;t&&(this.rotateLeft(2*Math.PI*this.rotateDelta.x/t.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/t.clientHeight)),this.rotateStart.copy(this.rotateEnd)}handleTouchMovePan(e){if(2===pb.length){let t=pE(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.panEnd.set(i,r)}else{if(e.pointerId!==pb[0].pointerId)return;this.panEnd.set(e.pageX,e.pageY)}this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(this.panSpeed),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.copy(this.panEnd)}handleTouchMoveDolly(e){let t=pE(e),i=e.pageX-t.x,r=e.pageY-t.y,a=Math.sqrt(i*i+r*r);this.dollyEnd.set(0,a),this.dollyDelta.set(0,Math.pow(this.dollyEnd.y/this.dollyStart.y,this.zoomSpeed)),this.dollyOut(this.dollyDelta.y),this.dollyStart.copy(this.dollyEnd)}handleTouchMoveDollyPan(e){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchMoveDolly(e),this.enablePan&&this.handleTouchMovePan(e)}handleTouchMoveDollyRotate(e){this.enableZoom&&!0===this.isTouchZoom&&this.handleTouchMoveDolly(e),this.enableRotate&&this.handleTouchMoveRotate(e)}checkRaycastLock(){if(!this.object.data.raycastLock||this.options.isPlayMode)return!1;{let e=this.options?.showCameraLock;return e&&e(),!0}}};function zz(e){let t=2*Math.PI;for(;e<=-Math.PI;)e+=t;for(;e>Math.PI;)e-=t;return e}function zF(e){return 1-Math.pow(1-e,4)}var zN=class{constructor(e,t,i,r,a,o){for(let l of(this.id=e,this.data=t,this.object=i,this.page=r,this.currentIntersectedObjects=[],this.actions=Lv(t,t.actions,r,a,o,i),this.target=t.target,this.triggeringObjects=[],t.triggeringObjects)){let e=r.scene.find(l);e&&this.triggeringObjects.push(e)}}isValidTriggeringObject(e){return"all"===this.target||this.triggeringObjects.some(t=>t===e||t.isAncestorOf(e.uuid)||e.isAncestorOf(t.uuid))}disconnect(){Ly(this.actions)}dispatch(){this.object.destroyedInAction||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Trigger"}),this.actions.Transition.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.SwitchCamera.forEach(e=>{"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.TimelineAnimation.forEach(e=>{"runMode"in e.data&&"Toggle"===e.data.runMode?e.toggle():e.play()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch(!1)}
8174),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.SceneTransition.forEach(e=>{e.dispatch()}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}};pk.then(e=>tC=e);var zU=new iD,zk=new iP,zV=new iD,zj=new rn(0,0,0,"YXZ"),zG=new rn(0,0,0,"XYZ"),zW=new iD,zH=new iD,zq=new iD(1,1,1),zX=new iP,zY=new i6,zQ=new i6,zZ={type:"updateMatrix"},zK=new iP,zJ=new iK,z$={type:"beginEvent",eventName:"Collision"},z0={type:"beginEvent",eventName:"Trigger"},z1=e=>e.states.some(e=>void 0!==e.data.position||void 0!==e.data.rotation||void 0!==e.data.hiddenMatrix||void 0!==e.data.cloner||void 0!==e.data.pathSnapping),z2=class{constructor(e){this.eventContext=e,this.isEnabled=!1,this.gameControl=null,this.joysticks=[],this.joystickToGameControls=[],this.sharedGameControlGlobals={entitiesWithTransformAnim:[],entityToCollisionEvents:{},colliderToEntity:new Map,triggers:[],gamePads:[],createdObjects:[],nCreatedPerAction:{}},this.sensorToTriggerEvent={},this.eventManager=void 0,this.needsCollisionDetection=!1,this.initializationCounter=-1,this.rigidBodyToMesh=new Map,this.nActiveRigidBodies=0,this.collisionEvents=[],this.isExport=!1,this.skipRender=!0,this.processRigidBody=e=>{if(e.bodyType()!==tC.RigidBodyType.Dynamic)return;e.isSleeping()||this.nActiveRigidBodies++;let[t,i,r]=this.rigidBodyToMesh.get(e.handle);if(zU.copy(e.translation()).multiplyScalar(this.pixelsPerMeter),zk.copy(e.rotation()),t.matrixWorld.compose(zU,zk,i),t.hasNonUniformScale&&t.matrixWorld.multiply(t.shearScale),t.dispatchEvent(zZ),r){let e=t.cloner;if(e&&void 0===e.objectForSample)for(let i of(e.matrixWorld.copy(t.matrixWorld),e.children))i.updateMatrixWorld(!0);for(let e of t.children)e.updateMatrixWorld(!0)}},this.accumulator=0,this.handleCollisionEvents=(e,t,i)=>{let r,a;if(!1!==i){if(this.sensorToTriggerEvent[e]?(r=this.sensorToTriggerEvent[e],a=this.sharedGameControlGlobals.colliderToEntity.get(t)):this.sensorToTriggerEvent[t]&&(r=this.sensorToTriggerEvent[t],a=this.sharedGameControlGlobals.colliderToEntity.get(e)),r&&a&&r.isValidTriggeringObject(a))return void r.dispatch();for(let i=this.sharedGameControlGlobals.createdObjects.length-1;i>=0;i--){let r=this.sharedGameControlGlobals.createdObjects[i];if(r.userData.hasCollisionDestroy&&(r.rigidBody?.collider(0).handle===e||r.rigidBody?.collider(0).handle===t)){this.sharedGameControlGlobals.createdObjects.splice(i,1),r.removeFromParent(),requestAnimationFrame(()=>this.sharedGameControlGlobals.rapierWorld?.removeRigidBody(r.rigidBody));break}}if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(e)){let e=this.sharedGameControlGlobals.colliderToEntity.get(t),i=this.sharedGameControlGlobals.entityToCollisionEvents[e.uuid];if(void 0===i)return;for(let r of i)"character"===r.data.target&&this.dispatchCollisionEvent(r,e,t)}else if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(t)){let t=this.sharedGameControlGlobals.colliderToEntity.get(e),i=this.sharedGameControlGlobals.entityToCollisionEvents[t.uuid];if(void 0===i)return;for(let r of i)"character"===r.data.target&&this.dispatchCollisionEvent(r,t,e)}else{let i=this.sharedGameControlGlobals.colliderToEntity.get(e),r=this.sharedGameControlGlobals.entityToCollisionEvents[i.uuid];if(void 0!==r)for(let t of r)"scene"===t.data.target&&this.dispatchCollisionEvent(t,i,e);let a=this.sharedGameControlGlobals.colliderToEntity.get(t),o=this.sharedGameControlGlobals.entityToCollisionEvents[a?.uuid];if(void 0!==o)for(let e of o)"scene"===e.data.target&&this.dispatchCollisionEvent(e,a,t)}}},this.isExport=e.isExport,this.sharedAssets=e.sharedAssets,this.renderer=e.renderer,this.requestRender=e.requestRender,this.domElement=this.renderer.domElement,this.pixelsPerMeter=200,this.gravity=this.page.data.globalPhysics.gravity}get page(){return this.eventContext.page}
8174attachVRControllers(e){e.forEach(e=>{e.addEventListener("connected",e=>{"gamepad"in e.data&&"axes"in e.data.gamepad&&this.sharedGameControlGlobals.gamePads.push(e.data.gamepad)})})}markIsDestroyTarget(){this.page.traverseVisibleEntity(e=>{for(let t of e.dataPatched.events){if(!0===t.data.disabled)continue;let e=t.data.actions?.find(e=>"Destroy"===e.data.type)?.data;if(e)for(let t of e.objects){let e=this.page.scene.find(t);e&&(e.userData.hasDestroy=!0)}}})}markIsDragObject(){this.page.traverseVisibleEntity(e=>{for(let t of e.dataPatched.events)if(!0!==t.data.disabled&&"DragDrop"===t.data.type)for(let e of t.data.objects){let t=this.page.scene.find(e);t&&(t.userData.hasDrag=!0)}})}initBVH(){let e=[];if(this.page.traverseChildren(t=>{let i,r=t instanceof E3,a=t instanceof Ob;if(t instanceof EA||r||a)return;let o=(i=t instanceof bO?t.object:t).dataPatched;if(o.physics?.enabled==="visibility"?!o.visible:!o.physics?.enabled)return!0;let l=t.geometry,h=!0===i.userData.hasDestroy,c=!0===i.userData.hasDrag;if(z1(o)||h||c||i.dataPatched.events.some(e=>!0!==e.data.disabled&&("GameControl"===e.data.type||"Follow"===e.data.type)))return t.updateMatrixWorldSVD(),this.addBoundsTree(t),!0;l&&l.getAttribute("position").count>0&&e.push(L0(l,t.matrixWorld))}),e.length>0){let t=yp(e,!1);this.sharedGameControlGlobals.staticMeshBVH=new bu(t)}}addRigidBody(e,t,i){if(L$(e.matrixWorld))return;let r=[],a="geometry"in e?e.geometry:void 0,o=t.dataPatched;if(a?.getAttribute("position")!==void 0&&r.push(L0(a,e.shearScale)),o.physics.fusedBody){let t=this.gatherChildrenGeom(e,r);e.traverseObject(t),e.children.forEach(e=>e.updateMatrixWorld(!0));let i=e.cloner;i&&void 0===i.objectForSample&&"dynamic"===o.physics.rigidBody&&(i.traverseObject(t),i.children.forEach(e=>e.updateMatrixWorld(!0)))}if(r.length>0){let l,h=!i.fromCreate&&"dynamic"===o.physics.rigidBody||i.fromCreate&&i.dynamic;h?(l=tC.RigidBodyDesc.dynamic()).setLinearDamping(o.physics.damping).setAngularDamping(o.physics.damping).setAdditionalMass(1e-9).setGravityScale(o.physics.gravityScale).enabledRotations(...o.physics.enabledRotation).enabledTranslations(...o.physics.enabledTranslation):(i.hasTransformAnim||i.hasFollow||i.hasDrag)&&!i.fromCreate?(l=tC.RigidBodyDesc.kinematicPositionBased(),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(e)):l=tC.RigidBodyDesc.fixed();let c=yp(r);(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(zU,zk,zV),e.position0=zU.clone().divideScalar(this.pixelsPerMeter),e.rotation0=zk.clone(),zU.divideScalar(this.pixelsPerMeter),l.setTranslation(zU.x,zU.y,zU.z).setRotation(zk),a?c?.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter):c?.scale(zV.x/this.pixelsPerMeter,zV.y/this.pixelsPerMeter,zV.z/this.pixelsPerMeter);let d=this.sharedGameControlGlobals.rapierWorld.createRigidBody(l);h&&this.rigidBodyToMesh.set(d.handle,[e,zV.clone(),o.physics.fusedBody]);let p=void 0!==o.geometry&&"SubdivGeometry"!==o.geometry.type&&"NonParametricGeometry"!==o.geometry.type&&"BooleanGeometry"!==o.geometry.type&&"VectorGeometry"!==o.geometry.type&&"StarGeometry"!==o.geometry.type&&"RectangleGeometry"!==o.geometry.type&&"EllipseGeometry"!==o.geometry.type&&"TriangleGeometry"!==o.geometry.type&&"TorusGeometry"!==o.geometry.type&&"HelixGeometry"!==o.geometry.type;try{this.addCollider(d,o.physics,c,t,p)}catch{try{this.addCollider(d,o.physics,c,t,!1)}catch{}}e.rigidBody=d}}addBoundsTree(e){let t=[];if(e.geometry?.getAttribute("position")!==void 0&&e.geometry?.getAttribute("position").count>0&&t.push(L0(e.geometry,e.shearScale)),e.traverseObject(this.gatherChildrenGeom(e,t)),e.children.forEach(e=>e.updateMatrixWorld(!0)),t.length>0){let i=yp(t,!1);e.bvhGeometry=i,i.getAttribute("position").count>0&&(e.bvhGeometry.boundsTree=new bu(i),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(e))}}addCollider(e,t,i,r,a=!0){let o;if(i?.getAttribute("position").count===0||i?.getIndex()?.count===0)return;i&&(o="trimesh"===t.colliderType?tC.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array):tC.ColliderDesc.convexMesh(i.getAttribute("position").array,a?i.getIndex().array:void 0)),o.setFrictionCombineRule(tC.CoefficientCombineRule.Average).setRestitutionCombineRule(tC.CoefficientCombineRule.Average).setDensity(t.density).setFriction(t.friction).setRestitution(t.restitution);let l=this.sharedGameControlGlobals.rapierWorld.createCollider(o,e);this.sharedGameControlGlobals.colliderToEntity.set(l.handle,r),this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]?.some(e=>"scene"===e.target)&&l.setActiveEvents(tC.ActiveEvents.COLLISION_EVENTS)}gatherChildrenGeom(e,t){return(i,r)=>{let a;if(0===r)return;if(i instanceof EA)if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;else{if(i.objectForSample.dataPatched.physics.fusedBody)return;a=i.object}else if(i instanceof bO)a=i.object;else if(a=i,a.dataPatched.cloner?.hideBase)return!0;let o=a.dataPatched;
8174if("visibility"===o.physics.enabled?!o.visible:!o.physics.enabled)return!0;1===r?e.hasNonUniformScale?i.matrixWorld.multiplyMatrices(e.shearScale,i.hiddenMatrix):i.matrixWorld.copy(i.hiddenMatrix):i.matrixWorld.multiplyMatrices(i.parent.matrixWorld,i.hiddenMatrix),i.matrixWorld.multiply(i.matrix);let l=i.geometry;l?.getAttribute("position")!==void 0&&t.push(L0(l,i.matrixWorld))}}activate(e){if(this.isEnabled)return;this.isEnabled=!0,this.eventManager=e,this.usePhysics=this.page.data.globalPhysics.usePhysics;let t=this.page.playCamera,i=!1,r=5,a=8,o=9,l="drag",h=this.page.data.publish.gameControlObject,c=null!==h?this.page.find(h):null,d=null;if(c)for(let e of c.data.events){if(e.data.disabled||"GameControl"!==e.data.type)continue;let t=c;for(;this.usePhysics&&(t=t.parent)?.parent!==null;)t.data.physics?.fusedBody;e.data.collisionEnabled&&(this.needsCollisionDetection=!0),null===d&&(d=e.data)}if(this.page.traverseEntity(e=>{for(let t of e.dataPatched.events)if(!1===t.data.disabled&&"Trigger"===t.data.type)return this.needsCollisionDetection=!0,!0}),c&&d&&(!0===c.data.visible||!0===c.data.physics.enabled)){i=i||d.camera===t.uuid||c.uuid===t.uuid;let e=new LK(c,this.renderer.domElement,d,this.eventContext.page.data.globalPhysics,this,c.uuid!==t.uuid&&d.camera===t.uuid,t,this.page,this.sharedAssets);this.gameControl=e,r=d.joystickPosLoc,a=d.joystickRotLoc,o=d.jumpTouchButtonLoc,l=d.rotByTouch,pg&&d.touchControl&&(this.joystickToGameControls[r]="pos","walk"===d.moveMode&&(this.joystickToGameControls[o]="jmp"),"joystick"===l&&(this.joystickToGameControls[a]="rot"))}if(this.gameControl&&this.gameControl.data.navmesh.enabled){let e=this.gameControl.data;if(!this.navigationMeshWrapper){let t;this.navigationMeshWrapper=new zv(this.usePhysics,this.isExport),t=Math.floor((t="sphere"===e.collider.type?2*e.collider.radius:e.collider.height)/e.navmesh.ch-1),this.navigationMeshWrapper.init({...e.navmesh,walkableHeight:t},this.gameControl,this.eventContext)}}if(!1===i){let{enableRotate:e,enablePan:i,enableZoom:r,autoRotate:a,hoverRotatePanMode:o}=this.eventManager.publish.orbitControls;(e||i||r||a||0!==o)&&(this.orbitControls=new zB(t,this.renderer.domElement,{isExport:this.isExport,isPlayMode:!0}),this.orbitControls.addEventListener("change",this.requestRender),this.orbitControls.addEventListener("end",this.requestRender),this.orbitControls.addEventListener("start",this.requestRender),this.orbitControls.fromJSON(this.eventManager.publish.orbitControls,this.eventManager.publish.mouseEventTarget),this.orbitControls.useKeyEvents=!1,this.orbitControls.addEventListenersToCamera(),this.orbitControls.connect(),this.orbitControls.update())}let p=this.renderer.domElement.width/this.renderer.getPixelRatio(),f=this.renderer.domElement.height/this.renderer.getPixelRatio();this.joystickToGameControls.forEach((e,t)=>{let i=document.body.appendChild(document.createElement("div")),[r,a,o]=this.eventManager.eventContext.publish.joystickSizeAndXYOffset[t],l=(p-5*r)/4+r,h={},c="jmp"===e,d=c?0:r;for(let e in t<10?(t<5?h.top=d/2:h.bottom=d/2,h.left=d/2+t%5*l):(10===t?h.left=d/2:h.right=d/2,h.top=f/2),h.top?h.top-=a[1]:h.bottom+=a[1],h.left?h.left+=a[0]:h.right-=a[0],h)h[e]+="px";if(c){let e=i.appendChild(document.createElement("div"));Object.assign(e.style,h,{position:"absolute",width:r+"px",height:r+"px",backgroundColor:`rgba(255,255,255,${.4*("show"===o)})`,zIndex:"9999",borderRadius:r+"px",border:"show"===o?"solid 2px rgba(0, 0, 0, .1)":"none",display:"flex",alignItems:"center",justifyContent:"center",touchAction:"none"});let a=r/16*6.4;"show"===o&&(e.innerHTML=` 8175 <svg width="${a}" height="${.4*r}" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 8176 <path d="M2 10L8 4L14 10" stroke="black" stroke-opacity="40%" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 8177 </svg> 8178 `),e.addEventListener("pointerdown",()=>{this.gameControl.movementState.jump=1,this.requestRender()}),e.addEventListener("touchend",e=>e.preventDefault()),this.joysticks[t]=[void 0,i];return}let m={zone:i,mode:"static",position:h,size:r};"hide"===o&&(m.restOpacity=0);let g=IM.create(m);g.on("move",(t,i)=>{let r=this.gameControl;"pos"===e?i.force<.2?r.moveForce=0:(r.movementState.movePosZ=Math.sin(-i.angle.radian),r.movementState.movePosX=Math.cos(-i.angle.radian),i.force>1.2?r.movementState.run=1:r.movementState.run=0,i.force<.3?r.moveForce=(i.force-.2)/.1:r.moveForce=1):"rot"===e&&(i.force<.2?r.rotForce=0:(r.movementState.rotPosX=i.vector.y,r.movementState.rotPosY=-i.vector.x,i.force<.3?r.rotForce=(i.force-.2)/.1:r.rotForce=1)),this.requestRender()}),g.on("end",(t,i)=>{let r=this.gameControl;"pos"===e?(r.movementState.movePosZ=0,r.movementState.movePosX=0,r.moveForce=1):"rot"===e&&(r.movementState.rotPosX=0,r.movementState.rotPosY=0,r.rotForce=1)}),this.joysticks[t]=[g,i]}),this.markIsDestroyTarget(),this.markIsDragObject(),this.rebuildBVH(),this.initializationCounter++,window.setTimeout(()=>
8178{this.collisionEvents.forEach(e=>e.initialDisabled=!1)},80)}initPhysics(){this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=new tC.World(new tC.Vector3(0,this.gravity,0)),this.events=new tC.EventQueue(!0);let e=[],t=[];if(this.page.traverseChildren(i=>{let r;if(i instanceof EA)if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;else{if(i.objectForSample.dataPatched.physics.fusedBody)return;r=i.object}else if(i instanceof bO)r=i.object;else{if(i instanceof Ob||i instanceof E3)return;if(r=i,r.dataPatched.cloner?.disabled===!1&&r.dataPatched.cloner?.hideBase&&r.dataPatched.physics?.fusedBody!==!0)return!0}let a=r.dataPatched,o;for(let e of a.events)!0!==e.data.disabled&&"GameControl"===e.data.type&&(o=e.data);if(!a.physics||("visibility"===a.physics.enabled?!a.visible:!a.physics.enabled))return!0;i.updateMatrixWorldSVD();let l=z1(a),h=!1,c=r.userData.hasDestroy,d=r.userData.hasDrag,p=!1;for(let e of a.events)if(!0!==e.data.disabled){if("Collision"===e.data.type){h=!0;let t=new za(e.id,e.data,r,this.page,this.sharedAssets,this.eventManager);t.initialDisabled=!0,this.collisionEvents.push(t),this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]&&this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid].every(t=>t.id!==e.id)?this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid].push(t):this.sharedGameControlGlobals.entityToCollisionEvents[r.uuid]=[t]}else if("Follow"===e.data.type){p=!0;let t=e.data.target;i.traverseVisible(e=>{e.userData.isFollowingObj=t})}}"dynamic"===a.physics.rigidBody&&!1===a.physics.fusedBody&&(i.matrixWorldFusedFalse=i.matrixWorld.clone());let f=i.geometry;if(void 0!==o){let e,t=tC.RigidBodyDesc.kinematicPositionBased();(i.hasNonUniformScale?i.matrixWorldRigid:i.matrixWorld).decompose(zU,zk,zV),i.position0=zU.clone().divideScalar(this.pixelsPerMeter),i.rotation0=zk.clone(),zU.divideScalar(this.pixelsPerMeter),t.setTranslation(zU.x,zU.y,zU.z).setRotation(zk);let l=this.sharedGameControlGlobals.rapierWorld.createRigidBody(t);i.rigidBody=l,(e="sphere"===o.collider.type?tC.ColliderDesc.ball(o.collider.radius/this.pixelsPerMeter):"capsule"===o.collider.type?tC.ColliderDesc.capsule((o.collider.height/2-o.collider.radius)/this.pixelsPerMeter,o.collider.radius/this.pixelsPerMeter):tC.ColliderDesc.cuboid(o.collider.width/this.pixelsPerMeter/2,o.collider.height/this.pixelsPerMeter/2,o.collider.depth/this.pixelsPerMeter/2)).setFrictionCombineRule(tC.CoefficientCombineRule.Average).setRestitutionCombineRule(tC.CoefficientCombineRule.Average).setDensity(a.physics.density).setFriction(a.physics.friction).setRestitution(a.physics.restitution);let h=this.sharedGameControlGlobals.rapierWorld.createCollider(e,l);this.sharedGameControlGlobals.colliderToEntity.set(h.handle,r),zU.fromArray(o.collider.position.map(e=>"number"==typeof e?e:0)).multiply(zV.setFromMatrixScale(r.matrixWorld)).divideScalar(this.pixelsPerMeter),h.setTranslationWrtParent(zU);let c=new iP().setFromEuler(new rn().setFromVector3(new iD().fromArray(o.collider.rotation.map(e=>"number"==typeof e?e:0))));h.setRotationWrtParent(c),h.setActiveEvents(tC.ActiveEvents.COLLISION_EVENTS),this.generateSensorColliderDescs(r,!0)}else"dynamic"===a.physics.rigidBody||l||p||c||d||h?(this.addRigidBody(i,r,{hasFollow:p,hasTransformAnim:l,hasDrag:d}),this.generateSensorColliderDescs(r,a.physics.fusedBody)):(f&&e.push(L0(f,i.matrixWorld)),a.physics.fusedBody&&i.traverseObject((t,i)=>{let r;if(0===i)return;if(t instanceof EA)if(!t.objectForSample)return!0===t.object.dataPatched.physics.fusedBody&&"dynamic"===t.object.dataPatched.physics.rigidBody||void 0;else{if(t.objectForSample.dataPatched.physics.fusedBody)return;r=t.object}else{if(t instanceof Ob||t instanceof E3)return;if(t instanceof bO)r=t.object;else if(r=t,r.dataPatched.cloner?.hideBase)return!0}let a=r.dataPatched;if("visibility"===a.physics.enabled?!a.visible:!a.physics.enabled)return!0;let o=t.geometry;o?.getAttribute("position")!==void 0&&e.push(L0(o,t.matrixWorld))}),this.generateSensorColliderDescs(r,a.physics.fusedBody,t));if(a.physics?.fusedBody===!0||o)return!0}),0===e.length)return;let i=yp(e);i.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter);let r=tC.RigidBodyDesc.fixed(),a=this.sharedGameControlGlobals.rapierWorld.createRigidBody(r),o=tC.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array).setFrictionCombineRule(tC.CoefficientCombineRule.Multiply).setRestitutionCombineRule(tC.CoefficientCombineRule.Multiply).setFriction(1).setRestitution(1);for(let[e,i]of(this.sharedGameControlGlobals.rapierWorld.createCollider(o,a),t)){let t=this.sharedGameControlGlobals.rapierWorld.createCollider(e,a);this.sensorToTriggerEvent[t.handle]=i}}updatePositions(){return this.nActiveRigidBodies=0,this.sharedGameControlGlobals.rapierWorld.forEachRigidBody(this.processRigidBody),this.nActiveRigidBodies>0}rebuildBVH(){this.usePhysics?this.initPhysics():(this.page.traverseEntity(e=>{for(let t of e.dataPatched.events)if("Trigger"===t.data.type&&!0!==t.data.disabled){let i=new zN(t.id,t.data,e,this.page,this.sharedAssets,this.eventManager),r=new i6().compose(zW.fromArray(t.data.position.map(e=>"number"==typeof e?e:0)),zX.setFromEuler(zG.fromArray(t.data.rotation.map(e=>"number"==typeof e?e:0))),zq);if("box"===t.data.triggerZone){let a=new iR;a.min.fromArray(t.data.size.map(e=>"number"==typeof e?e:0)).multiplyScalar(-.5),a.max.fromArray(t.data.size.map(e=>"number"==typeof e?e:0)).multiplyScalar(.5),this.sharedGameControlGlobals.triggers.push([a,r,e,i])}else this.sharedGameControlGlobals.triggers.push([t.data.radius,r,e,i])}}),this.needsCollisionDetection&&this.initBVH())}
8178disconnectEvents(){this.collisionEvents.forEach(e=>e.disconnect()),this.sharedGameControlGlobals.triggers.forEach(e=>e[3].disconnect()),this.sharedGameControlGlobals.triggers.length=0}deactivate(){if(this.isEnabled){for(let e of(this.isEnabled=!1,this.page.traverse(e=>{e.matrixWorldFusedFalse&&(e.matrixWorldFusedFalse=void 0),e.rigidBody&&(e.rigidBody=void 0),e.position0&&(e.position0=void 0),e.rotation0&&(e.rotation0=void 0)}),this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=void 0,this.sharedGameControlGlobals.staticMeshBVH=void 0,this.accumulator=0,this.sharedGameControlGlobals.entitiesWithTransformAnim=[],this.disconnectEvents(),this.gameControl?.reset(),this.gameControl?.dispose(),this.gameControl=null,this.initializationCounter=-1,this.joysticks.forEach(([e,t])=>{e?.destroy(),t.remove()}),this.joystickToGameControls=[],this.joysticks=[],this.orbitControls&&(this.orbitControls.dispose(),this.orbitControls=void 0),this.navigationMeshWrapper?.dispose(),this.navigationMeshWrapper=void 0,Object.values(this.sharedGameControlGlobals.entityToCollisionEvents)))e.forEach(e=>e.disconnect());this.sharedGameControlGlobals.entityToCollisionEvents={},this.page.updateMatrixWorld(!0)}}update(e,t,i){if(!this.isEnabled)return!0;let r=!0;if(void 0!==this.orbitControls&&this.orbitControls.needsUpdate&&(this.orbitControls.update(),r=!this.orbitControls.isCurrentlyDamping),this.initializationCounter>=0&&this.initializationCounter<2?(this.initializationCounter++,r=!1):2===this.initializationCounter&&this.gameControl&&(r=!this.gameControl.update(e,t,i)&&r),!1===this.usePhysics&&this.checkTrigger(),this.usePhysics)if(0===e)r=this.stepPhysics()&&r;else{let t=e/1e3;t<.016666666666666666&&t>.009166666666666667&&(t=.016666666666666666),this.accumulator+=t;let i=performance.now(),a=0;for(;this.accumulator>=.016666666666666666&&a<6&&(r=this.stepPhysics()&&r,this.accumulator-=.016666666666666666,a++,!(performance.now()-i>16.666666666666668)););this.accumulator=this.accumulator%.016666666666666666}this.skipRender=r}stepPhysics(){for(let e of this.sharedGameControlGlobals.entitiesWithTransformAnim)(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(zU,zk,zV),zj.setFromQuaternion(zk),void 0===e.prevR?(e.prevR=zj.clone(),e.prevT=zU.clone()):(e.prevR.copy(zj),e.prevT.copy(zU)),e.rigidBody&&(e.rigidBody.setNextKinematicTranslation(zU.divideScalar(this.pixelsPerMeter)),e.rigidBody.setNextKinematicRotation(zk));return this.sharedGameControlGlobals.rapierWorld.step(this.events),this.events?.drainCollisionEvents(this.handleCollisionEvents),!this.updatePositions()}dispatchCollisionEvent(e,t,i){let r=(this.sharedGameControlGlobals.rapierWorld?.getCollider(i))._parent,a;if(t.cloner){for(let e of t.cloner.children)if(e.rigidBody===r){a=e;break}}e.dispatch(a),t.dispatchEvent(z$)}updateUseWindowEvents(e){this.orbitControls?.updateUseWindowEvents(e)}generateSensorColliderDescs(e,t,i){let r=zQ.copy(e.matrixWorld).invert();e.traverseEntity((a,o)=>{if(!1===t&&1===o)return!0;for(let t of a.dataPatched.events)if("Trigger"===t.data.type&&!0!==t.data.disabled){let o=new zN(t.id,t.data,a,this.page,this.sharedAssets,this.eventManager),l;if((l="box"===t.data.triggerZone?tC.ColliderDesc.cuboid(...t.data.size.map(e=>("number"==typeof e?e:1)/(2*this.pixelsPerMeter))):tC.ColliderDesc.ball(t.data.radius/this.pixelsPerMeter)).setDensity(0).setSensor(!0).setActiveEvents(tC.ActiveEvents.COLLISION_EVENTS),zW.fromArray(t.data.position.map(e=>"number"==typeof e?e:0)),zX.setFromEuler(zG.fromArray(t.data.rotation.map(e=>"number"==typeof e?e:0))),zY.compose(zW,zX,zq).premultiply(a.matrixWorld),i?(zY.decompose(zW,zX,zH),l.setActiveCollisionTypes(tC.ActiveCollisionTypes.KINEMATIC_FIXED|tC.ActiveCollisionTypes.DYNAMIC_FIXED)):(zY.premultiply(r).decompose(zW,zX,zH),e.rigidBody.bodyType()===tC.RigidBodyType.Dynamic||(e.rigidBody.bodyType()===tC.RigidBodyType.Fixed?l.setActiveCollisionTypes(tC.ActiveCollisionTypes.KINEMATIC_FIXED|tC.ActiveCollisionTypes.DYNAMIC_FIXED):l.setActiveCollisionTypes(tC.ActiveCollisionTypes.KINEMATIC_KINEMATIC|tC.ActiveCollisionTypes.DYNAMIC_KINEMATIC))),zW.divideScalar(this.pixelsPerMeter),l.setTranslation(zW.x,zW.y,zW.z),l.setRotation(zX),i)i.push([l,o]);else{let t=this.sharedGameControlGlobals.rapierWorld.createCollider(l,e.rigidBody);this.sensorToTriggerEvent[t.handle]=o}}})}checkTrigger(){let e;for(let t=0;t<this.sharedGameControlGlobals.triggers.length;t++){let[i,r,a,o]=this.sharedGameControlGlobals.triggers[t];for(let t=0;t<this.sharedGameControlGlobals.entitiesWithTransformAnim.length;t++){let l=this.sharedGameControlGlobals.entitiesWithTransformAnim[t];if(a===l||!1===o.isValidTriggeringObject(S7.is(l)?l:l.object))continue;let h=zQ.copy(a.matrixWorld).decompose(zW,zK,zH).compose(zW,zK,zq).multiply(r),c=zY.copy(l.matrixWorld).invert().multiply(h);i instanceof iR?e=l.bvhGeometry.boundsTree.intersectsBox(i,c):(zJ.radius=i,zJ.center.setFromMatrixPosition(c),e=l.bvhGeometry.boundsTree.intersectsSphere(zJ)),e?-1===o.currentIntersectedObjects.indexOf(l)&&(o.currentIntersectedObjects.push(l),o.dispatch(),a.dispatchEvent(z0)):o.currentIntersectedObjects=o.currentIntersectedObjects.filter(e=>e!==l)}}}};function z3(e){let t=this._clip.duration,i=this._clip.start??0,r=this.loop,a=this.time+e,o=this._loopCount,l=2202===r;if(0===e)return -1===o?a:l&&(1&o)==1?t-(a-i):a;if(2200===r){-1===o&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(a>=t)a=t;else if(a<0)a=0;else{this.time=a;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=a,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===o&&(e>=0?(o=0,this._setEndings(!0,0===this.repetitions,l)):this._setEndings(0===this.repetitions,!0,l)),a>=t||a<i){let r=Math.floor((a-i)/(t-i));a-=(t-i)*r,o+=Math.abs(r);let h=this.repetitions-o;if(h<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,l||(a=e>0?t:i,1===this.repetitions&&(a=t)),this.time=a,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===h){let t=e<0;this._setEndings(t,!t,l)}else this._setEndings(!1,!1,l);this._loopCount=o,this.time=a,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:r})}}else this.time=a;if(l&&(1&o)==1)return t-(a-i)}return a}var z4=!1,z5=class{constructor(e,t,i,r){this.scene=e,this.requestRender=t,this.updateDisplayProgress=i,this.animationInspectorState=r,this.clipIdToAction={},this.activeClip=null,this.needsUpdate=!1,this.addClip=e=>{"Empty"===e.data.type&&Array.isArray(e.data.animations)&&e.data.animations.forEach((t,i)=>{let r=t[0]+"/";if(Array.isArray(e.identity)?r+=e.identity[0]:r+=e.uuid,this.clipIdToAction[r])return;let a=lt.parse(JSON.parse(t[2]));e.animations[i]=a;let o=this.mixer.clipAction(a,e);
vendor: 4,640 bytes, lines 8178-8179
8178!1===z4&&(Object.getPrototypeOf(o)._updateTime=z3,z4=!0),o.clampWhenFinished=!0,this.clipIdToAction[r]=o})},this.mixer=new lV(e),this.scene.traverseEntity(this.addClip)}deleteClip(e,t){let i=this.scene.find(t);if(!i)return;let r=i.animations.find(t=>t.uuid===e);if(!r)return;let a=this.clipIdToAction[e];a&&(a.stop(),this.mixer.uncacheClip(r),delete this.clipIdToAction[e],i.animations=i.animations.filter(t=>t.uuid!==e))}get isPlaying(){return Object.values(this.clipIdToAction).some(e=>e.isRunning())}playFromInspector(e){this.mixer.stopAllAction();let t=this.clipIdToAction[e];t&&(t.play(),this.activeClip=t.getClip(),this.requestRender())}onExitPlayMode(){Object.values(this.clipIdToAction).forEach(e=>{e.repetitions=1/0,e.loop=2201}),this.mixer.stopAllAction(),this.requestRender()}play(e){let t=e.clipId+"/"+e.object,i=this.clipIdToAction[t];if(i)return e&&(e.repeat>=0&&(i.repetitions=e.repeat+1),"pingpong"===e.direction&&0!==e.repeat&&(i.loop=2202)),i.play(),i.paused=!1,this.requestRender(),i}resumeFromInspector(e){let t=this.clipIdToAction[e];t&&(t.play(),t.paused=!1,this.requestRender())}pauseFromInspector(e){let t=this.clipIdToAction[e];t&&(t.paused=!0)}stop(){this.mixer.stopAllAction(),this.requestRender()}update(e){if(this.needsUpdate)this.needsUpdate=!1;else if(!1===this.isPlaying||this.animationInspectorState?.isScrubbing)return;this.mixer.update(e/1e3),this.activeClip&&this.updateDisplayProgress(Math.round(this.mixer.time/this.activeClip.duration*(this.maxFrames-1)%(this.maxFrames-1))),this.requestRender()}get maxFrames(){return Lh(this.activeClip??void 0)}setProgressFromInspector(e,t){if(!this.clipIdToAction[t])return;this.activeClip!==this.clipIdToAction[t].getClip()&&this.playFromInspector(t);let i=this.clipIdToAction[t].paused;this.clipIdToAction[t].paused=!1,this.mixer.setTime(Math.min(e/(this.maxFrames-1),.9999)*this.activeClip.duration),this.requestRender(),i&&(this.clipIdToAction[t].paused=!0)}},z6=new WeakMap,z8=class extends la{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,r){let a=new ll(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,e=>{this.decodeDracoFile(e,t).catch(r)},i,r)}decodeDracoFile(e,t,i,r){let a={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!i};return this.decodeGeometry(e,a).then(t)}decodeGeometry(e,t){let i=JSON.stringify(t);if(z6.has(e)){let t=z6.get(e);if(t.key===i)return t.promise;if(0===e.byteLength)throw Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r,a=this.workerNextTaskID++,o=e.byteLength,l=this._getWorker(a,o).then(i=>(r=i,new Promise((i,o)=>{r._callbacks[a]={resolve:i,reject:o},r.postMessage({type:"decode",id:a,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return l.catch(()=>!0).then(()=>{r&&a&&this._releaseTask(r,a)}),z6.set(e,{key:i,promise:l}),l}_createGeometry(e){let t=new rQ;e.index&&t.setIndex(new rN(e.index.array,1));for(let i=0;i<e.attributes.length;i++){let r=e.attributes[i],a=r.name,o=r.array,l=r.itemSize;t.setAttribute(a,new rN(o,l))}return t}_loadLibrary(e,t){let i=new ll(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise((t,r)=>{i.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{let i=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let r=z9.toString(),a=["/* draco decoder */",i,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join(` 8179`);this.workerSourceURL=URL.createObjectURL(new Blob([a]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>
8179{if(this.workerPool.length<this.workerLimit){let e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){let i=t.data;switch(i.type){case"decode":e._callbacks[i.id].resolve(i);break;case"error":e._callbacks[i.id].reject(i)}},this.workerPool.push(e)}else this.workerPool.sort(function(e,t){return e._taskLoad>t._taskLoad?-1:1});let i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}};function z9(){let e,t;onmessage=function(i){let r=i.data;switch(r.type){case"init":e=r.decoderConfig,t=new Promise(function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)});break;case"decode":let a=r.buffer,o=r.taskConfig;t.then(e=>{let t=e.draco,i=new t.Decoder,l=new t.DecoderBuffer;l.Init(new Int8Array(a),a.byteLength);try{let e=function(e,t,i,r){var a,o,l;let h,c,d,p,f=r.attributeIDs,m=r.attributeTypes,g,v,y=t.GetEncodedGeometryType(i);if(y===e.TRIANGULAR_MESH)g=new e.Mesh,v=t.DecodeBufferToMesh(i,g);else if(y===e.POINT_CLOUD)g=new e.PointCloud,v=t.DecodeBufferToPointCloud(i,g);else throw Error("THREE.DRACOLoader: Unexpected geometry type.");if(!v.ok()||0===g.ptr)throw Error("THREE.DRACOLoader: Decoding failed: "+v.error_msg());let x={index:null,attributes:[]};for(let i in f){let a=self[m[i]],o,l;if(r.useUniqueIDs)l=f[i],o=t.GetAttributeByUniqueId(g,l);else{if(-1===(l=t.GetAttributeId(g,e[f[i]])))continue;o=t.GetAttribute(g,l)}x.attributes.push(function(e,t,i,r,a,o){let l=o.num_components(),h=i.num_points()*l,c=h*a.BYTES_PER_ELEMENT,d=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,a),p=e._malloc(c);t.GetAttributeDataArrayForAllPoints(i,o,d,c,p);let f=new a(e.HEAPF32.buffer,p,h).slice();return e._free(p),{name:r,array:f,itemSize:l}}(e,t,g,i,a,o))}return y===e.TRIANGULAR_MESH&&(a=e,o=t,l=g,h=3*l.num_faces(),c=4*h,d=a._malloc(c),o.GetTrianglesUInt32Array(l,c,d),p=new Uint32Array(a.HEAPF32.buffer,d,h).slice(),a._free(d),x.index={array:p,itemSize:1}),e.destroy(g),x}(t,i,l,o),a=e.attributes.map(e=>e.array.buffer);e.index&&a.push(e.index.array.buffer),self.postMessage({type:"decode",id:r.id,geometry:e},a)}catch(e){self.postMessage({type:"error",id:r.id,error:e.message})}finally{t.destroy(l),t.destroy(i)}})}}}function z7(e){return tE||(tE=new z8).setDecoderPath(void 0!==e?`${e}/`:"https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload(),tE.decoderPending}async function Fe(e){if(tE){let t={attributeIDs:tE.defaultAttributeIDs,attributeTypes:tE.defaultAttributeTypes,useUniqueIDs:!1},i;try{i=await tE.decodeGeometry(new Int8Array(e).buffer,t)}catch{}if(i)return{index:i.index?{array:i.index.array}:void 0,attributes:Object.entries(i.attributes).map(([e,t])=>({name:e,itemSize:t.itemSize,array:t.array}))}}return null}async function Ft(e,t){let[i,r]=fd(mj.deserialize(new Uint8Array(e)));return yu(i),t&&t(i),r.result().data}async function Fi(e){for(let t of e){let e=await Fe(t.geometry.data.draco);if(e){let i=t.geometry.data;e.index&&(i.index={array:e.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let r={};e.attributes.forEach(({name:e,array:t,itemSize:i})=>{r[e]={array:t,itemSize:i,type:"Float32Array",normalized:!1}}),i.attributes=r,i.draco=void 0}}}var Fr=class{constructor(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0],this._delay=500,this._distance=2,this._onMouseDown=e=>{let t=[e.clientX,e.clientY],i=new Date().getTime();if(this._clickCount>0){let e=t[0]-this._lastPosition[0],i=t[1]-this._lastPosition[1];Math.sqrt(e*e+i*i)>this._distance&&(this._clickCount=0)}this._lastPosition=t,this._clickCount=i-this._lastTime>this._delay?1:this._clickCount+1,this._lastTime=i},this._onMouseUp=e=>{}}start(e,t=500,i=2){this._target&&this.stop(),this.reset(),this._delay=t,this._distance=i,this._target=e,this._target.addEventListener("pointerdown",this._onMouseDown,!1),this._target.addEventListener("pointerup",this._onMouseUp,!1)}stop(){this._target&&(this._target.removeEventListener("pointerdown",this._onMouseDown,!1),this._target.removeEventListener("pointerup",this._onMouseUp,!1),this._target=void 0)}get clickCount(){return this._clickCount}reset(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0]}},Fs=class{constructor(e,t,i,r,a,o,l,h){this.eventId=e,this.id=t,this.data=i,this.dataEvent=r,this.object=a,this.stage=!1,this.actions=Lv(r,i.actions,o,l,h,a)}disconnect(){Ly(this.actions)}
vendor: 3,205 bytes, line 8179
8179dispatchIn(){this.actions.Audio.forEach(e=>e.dispatchBasic()),this.actions.Particles.forEach(e=>e.dispatchBasic()),this.actions.Video.forEach(e=>e.dispatchBasic()),this.actions.Create.forEach(e=>e.dispatch()),this.actions.Destroy.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.Link.forEach(e=>e.dispatch()),this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.actions.Transition.forEach(e=>e.toggle()),this.actions.Animation.forEach(e=>e.play()),this.actions.SwitchCamera.forEach(e=>e.play()),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}dispatchOut(){this.actions.Transition.forEach(e=>{e.toggle()})}},Fa=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.breakpoints=[],this.resize=(e,t)=>{this.breakpoints.forEach(i=>{let r=gh.deviceToSize(i.data.size),a="horizontal"===i.dataEvent.orientation?e:t,o;switch(i.data.operator){case"<":o=a<r[0];break;case">":o=a>r[0];break;case"<>":o=a>r[0]&&a<r[1]}i.stage!==o&&(i.stage=o,i.stage?i.dispatchIn():i.dispatchOut())})},this.onResizeObserver=new ResizeObserver(e=>{for(let t of e){let{width:e,height:i}=t.contentRect;this.resize(e,i)}})}connect(){let{page:e,sharedAssets:t,domElement:i}=this.eventContext;this.onResizeObserver.observe(i);let r=i=>{if(!(!i.visible||!i.data?.events.length))for(let{data:r,id:a}of i.data.events)r.disabled||"Resize"===r.type&&r.breakpoints.forEach(({data:o,id:l})=>{try{let h=new Fs(a,l,o,r,i,e,t,this.eventManager);this.breakpoints.push(h)}catch{}})};e.traverseEntity(e=>{(e instanceof D7||e instanceof D0)&&e.frame?.traverse(e=>{r(e)}),r(e)})}disconnect(){this.onResizeObserver.disconnect(),this.breakpoints.forEach(e=>{e.disconnect()}),this.breakpoints=[]}},Fn=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.userAPIs={},this.events=[],this.onSuccess=({userAPIId:e})=>{this.events.forEach(t=>{t.data.userAPIId===e&&t.dispatchSuccess()})},this.onError=({userAPIId:e})=>{this.events.forEach(t=>{t.data.userAPIId===e&&t.dispatchError()})},this.userAPIs=e.sharedAssets.getUserAPIs()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"API"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new Fo(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userAPIs).forEach(([e,t])=>{t.on("success",this.onSuccess),t.on("error",this.onError),t.autostart&&t.callUserAPI(this.eventContext.sharedAssets)})}disconnect(){Object.entries(this.userAPIs).forEach(([e,t])=>{t.off("success",this.onSuccess),t.off("error",this.onError)})}},Fo=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.successActions=Lv(t,t.successActions,r,a,o,i),this.errorActions=Lv(t,t.errorActions,r,a,o,i)}dispatchSuccess(){this.dispatchActions(this.successActions)}dispatchError(){this.dispatchActions(this.errorActions)}
vendor: 1,586 bytes, line 8179
8179dispatchActions(e){e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},Fl=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.userWebhooks={},this.events=[],this.onMessage=({userWebhookId:e})=>{this.events.forEach(t=>{t.data.userWebhookId===e&&t.dispatch()})},this.userWebhooks=e.sharedAssets.getUserWebhooks()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"WEBHOOK"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new Fh(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userWebhooks).forEach(([e,t])=>{t.connect(),t.on("message",this.onMessage)})}disconnect(){Object.entries(this.userWebhooks).forEach(([e,t])=>{t.off("message",this.onMessage),t.disconnect()})}},Fh=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.actions=Lv(t,t.actions,r,a,o,i)}dispatch(){let e=this.actions;
8179e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},Fc=new iD(0,0,1),Fd=new iD,Fu=new iD,Fp=new t7,Ff=class{constructor(e,t,i,r,a){this.containerScene=e,this.raycaster=t,this.sharedAssets=i,this.requestRender=r,this.onExit=a,this.htmlInput=null,this.virtualInput=null,this.helper=new P0,this.doubleClickHandler=new Fr,this.isDragging=!1,this.plane=new sg,this.caretInterval=0,this.planeIntersection=new iD,this.projected=new t9,this._lastIndex=0,this._isFirstDragMove=!1,this.selectionOnDragStart=0,this.onTextMaterialChanged=()=>{let e=this.virtualInput?.data;if(void 0!==this.virtualInput&&e){let t=e.material,i=function(e,t){let i=gT.fromHex(3223857),r=.8;for(let l of e.layers){if("light"===l.data.type||"displace"===l.data.type||"fresnel"===l.data.type||"matcap"===l.data.type||"texture"===l.data.type||"toon"===l.data.type||"outline"===l.data.type||"transmission"===l.data.type||"noise"===l.data.type)continue;let e="string"==typeof l.data.alpha?Number(t.getVariable(l.data.alpha)):l.data.alpha;if("color"===l.data.type&&e>.3){var a,o;a=l.data.color,o=t,i="string"==typeof a?o.data.colors[a]:a,r=e;break}if(("depth"===l.data.type||"gradient"===l.data.type)&&e>.3){let e=l.data.colors[0];i={r:e[0],g:e[1],b:e[2]},r="string"==typeof l.data.alpha?1:l.data.alpha;break}}return{...i,a:r}}("string"==typeof t?this.sharedAssets.data.materials[t]:t,this.sharedAssets);this.helper.setCaretColor(i)}},this.stopAnimateTextCursor=()=>{clearInterval(this.caretInterval),this.helper&&(this.helper.caretMesh.visible=!1)},this.startAnimateTextCursor=()=>{this.stopAnimateTextCursor(),this.helper&&(this.helper.caretMesh.visible=!0,this.caretInterval=setInterval(()=>{this.helper&&(this.helper.caretMesh.visible=!this.helper.caretMesh.visible),this.requestRender()},600))},this.handleCaretUpdate=e=>{if(!this.htmlInput||!this.virtualInput)return;let t=this.helper,i=e?.key==="ArrowLeft"||e?.key==="ArrowRight",r=e?.key==="ArrowUp"||e?.key==="ArrowDown";this.htmlInput.selectionStart===this.htmlInput.selectionEnd?(t.setCaretPosition(this.htmlInput.selectionStart,{horizontalKeyMove:i,verticalKeyMove:r}),this.startAnimateTextCursor()):t.setSelection(this.htmlInput.selectionStart,this.htmlInput.selectionEnd),this.requestRender()},this.containerScene.add(this.helper)}createInput(){let e;return this.htmlInput=((e=document.createElement("textarea")).style.position="fixed",e.style.top="200px",e.style.left="400px",e.style.zIndex="-1",e.style.border="1px solid rgba(255,0,0,0.5)",e.style.width="10px",e.style.height="500px",e.style.color="white",e.style.opacity="0.5",e.style.background="transparent",e.style.display="none",e.style.margin="0px",e.style.padding="0px",e.style.boxSizing="content-box",e.style.pointerEvents="none",e),this.htmlInput}connect(){}disconnect(){this.stopAnimateTextCursor(),this.helper.hide(),this.htmlInput?.remove(),this.doubleClickHandler.stop()}handleMouseDown(){if(!this.htmlInput||!this.virtualInput)return!0;this.getPointOnPlane();let e=this.doubleClickHandler.clickCount,{index:t,lineIndex:i,characterIndex:r}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,e>1?"inside":"previous")??{index:0,lineIndex:0,characterIndex:0};this.virtualInput?.wrappedText?.length&&this.virtualInput.wrappedText[i][Math.max(0,r-1)]===` 8180`&&(t--,r--),this._lastIndex=t,this._isFirstDragMove=!0;let a=this.checkClickedObject();if(1===e){if(null===a)return this.onExit(this.virtualInput),!0;this.selectionOnDragStart=t,this.isDragging=!0,this.setInputSelection(t)}else a===this.virtualInput&&(2===e?this.selectClosestWord(i,r):e>2&&(this.setInputSelection(0,this.htmlInput.value.length),this.doubleClickHandler.reset()))}handleMouseUp(){this.applyRangeToTextInput(),this.isDragging=!1,this._isFirstDragMove=!1}handleMouseMove(){this.virtualInput&&(this._isFirstDragMove&&this.doubleClickHandler.clickCount>1&&(this.selectionOnDragStart=this._lastIndex,this.isDragging=!0,this.setInputSelection(this._lastIndex)),this._isFirstDragMove=!1,this.getPointOnPlane(),this.applyRangeToTextInput())}focus(e){if(this.virtualInput=e,this.updateTextInputStyles(),this.htmlInput)if(e){let e=this.data?.geometry.text;this.htmlInput.value="string"==typeof e?"":e?.textValue.toString()??""}else this.htmlInput.value=""}blur(){}get data(){let{virtualInput:e}=this;if(e)return e.dataPatched}
vendor: 5,153 bytes, lines 8180-8181
8180applyRangeToTextInput(){if(!this.isDragging||!this.virtualInput||!this.htmlInput)return;let e=this.selectionOnDragStart,{index:t,lineIndex:i,characterIndex:r}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,this.doubleClickHandler.clickCount>2?"inside":"previous")??{index:0};void 0!==i&&void 0!==r&&this.virtualInput?.wrappedText[i][r-1]===` 8181`&&t--,this.htmlInput.setSelectionRange(Math.min(e,t),Math.max(e,t))}checkClickedObject(){if(this.virtualInput){let e=this.raycaster.intersectObject(this.virtualInput,!1);if(e.length>0){let t=e[0];if(t.object instanceof D4)return t.object}}return null}selectClosestWord(e,t){if(!this.virtualInput)return;let i=this.virtualInput.wrappedText,r=i[e],a=t+1,o=t;" "!==r[t]&&(a=this.findNextCharOccurence(r,t,"forward"," "),(o=this.findNextCharOccurence(r,t,"backward"," "))>0&&o++,a>=r.length-1&&e===i.length-1&&a++);let l=this.helper,h=l.getGlobalIndexFromLineAndCharIndexes(i,e,o),c=l.getGlobalIndexFromLineAndCharIndexes(i,e,a);this.setInputSelection(h,c)}findNextCharOccurence(e,t,i,r=" "){let a=Math.max(0,e.length-1),o="forward"===i?a:0,l="forward"===i?1:-1,h=Math.max(Math.min(t,a),0);for(;h!==o;)if(h+=l,e.charAt(h)===r)return h;return o}getPointOnPlane(){let e=this.virtualInput?.data;if(!(!this.virtualInput||!e)&&this.raycaster.ray.intersectsPlane(this.plane)){null===this.planeIntersection&&(this.planeIntersection=new iD);let t=this.raycaster.ray.intersectPlane(this.plane,this.planeIntersection);if(t){this.planeIntersection.copy(this.virtualInput.worldToLocal(t));let i="number"==typeof e.geometry.width?e.geometry.width:1,r="number"==typeof e.geometry.height?e.geometry.height:1;this.projected.set(t.x+.5*i,t.y-.5*r)}}}updatePlane(){let e=this.virtualInput?.data;this.virtualInput&&e&&(Fp.getNormalMatrix(this.virtualInput.matrixWorld),Fd.copy(Fc).applyMatrix3(Fp).normalize(),this.virtualInput.localToWorld(Fu.set(0,0,e.geometry.depth)),this.plane.setFromNormalAndCoplanarPoint(Fd,Fu))}setInputSelection(e,t=e){this.htmlInput?.setSelectionRange(e,t),pf&&this.htmlInput?.focus(),setTimeout(()=>{this.htmlInput?.focus()})}updateTextInputStyles(){var e;let t=this.virtualInput?.data;this.virtualInput&&t&&this.htmlInput&&(this.htmlInput.style.fontSize=t.geometry.fontSize+"px",this.htmlInput.style.letterSpacing=t.geometry.letterSpacing*t.geometry.fontSize+"px",this.htmlInput.style.lineHeight=t.geometry.fontSize*t.geometry.lineHeight+"px",this.htmlInput.style.width=t.geometry.width+"px",this.htmlInput.style.height=t.geometry.height+"px",this.htmlInput.style.textAlign=4===(e=t.geometry.horizontalAlign)?"justify":2===e?"right":3===e?"center":"left")}},Fm=(e,t)=>{if("string"==typeof e){let i=t.data(e);if(i)return Fm(i.value,t)}return xC.getDisplayedValue(e)};function Fg(e,t){let i=e.text,r="";if("string"==typeof i){let e=t.variables.data(r);e&&(r=Fm(e.value,t.variables))}else r=i.textValue.toString();return r}var Fv=class extends Br{constructor(e,t){super(e),this.eventManager=t,this._textInputs=[],this.sceneHelpers=new nI,this.helper=new P0,this._onMouseDownFocusIn=e=>{if(pb.length>1)return;this.eventContext.updateRaycaster(e);let t=null;if(this.eventContext.raycaster){for(let e of this._textInputs)if(this.eventContext.raycaster.intersectObject(e,!0).length>0){t=e;break}}this.focusOnTextInput(t),this._onCaretUpdate(),this._onMouseUp(),this.textInputManager.doubleClickHandler.start(this.eventContext.domElement),this.textInputManager.doubleClickHandler._onMouseDown(e),this._onMouseDown(e)},this.onExit=()=>{let{virtualInput:e}=this.textInputManager;if(null===e)return;let t=this.textInputManager.htmlInput;this.helper.hide(),t?.setSelectionRange(t.value.length,t.value.length),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0);let{domElement:i}=this.eventContext;i.removeEventListener("pointerdown",this._onMouseDown,!1),i.removeEventListener("pointerup",this._onMouseUp,!1),i.removeEventListener("pointermove",this._onMouseMove,!1),window.removeEventListener("keydown",this._onKeyPress),this.textInputManager.doubleClickHandler.reset(),i.addEventListener("pointerdown",this._onMouseDownFocusIn),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers()},this._onMouseDown=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseDown(),this.textInputManager.virtualInput&&this.eventContext.raycaster.intersectObject(this.textInputManager.virtualInput,!0).length>0&&this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1)},this._onMouseUp=()=>{this.textInputManager.handleMouseUp(),this.eventManager.controlsManager.orbitControls&&!this.eventManager.controlsManager.orbitControls.enabled&&(this.eventManager.controlsManager.orbitControls.enabled=!0)},this._onMouseMove=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseMove()},this._onTextEdit=e=>{let{htmlInput:t,virtualInput:i,helper:r}=this.textInputManager;if(!t||!i)return;let a=t.value;i.textGeometry.setText(a,this.eventContext.sharedAssets).then(()=>{this.eventContext.requestRender()});let o=i.data;
vendor: 3,826 bytes, line 8181
8181r.update();let l=o.geometry.text;"string"==typeof l&&this.eventContext.sharedAssets.updateVariable(l,{textValue:a}),this.textInputManager.updateTextInputStyles(),this._onCaretUpdate()},this._onCaretUpdate=e=>{this.textInputManager.handleCaretUpdate(e)},this._onKeyPress=e=>{"Escape"===e.key&&this.onExit()},this.textInputManager=new Ff(this.sceneHelpers,e.raycaster,e.sharedAssets,e.requestRender,this.onExit)}connect(){let e=[];if(this.eventContext.scene.traverseEntity(t=>{t instanceof D4&&e.push(t)}),this._textInputs=e,0===e.length)return;let{domElement:t}=this.eventContext;t.addEventListener("pointerdown",this._onMouseDownFocusIn),this.textInputManager.connect();let i=this.textInputManager.createInput();document.body.appendChild(i),i.style.display="none",i.addEventListener("keyup",this._onCaretUpdate),i.addEventListener("keydown",this._onCaretUpdate),i.addEventListener("beforeinput",this._onCaretUpdate),i.addEventListener("paste",this._onCaretUpdate),i.addEventListener("cut",this._onCaretUpdate),i.addEventListener("select",this._onCaretUpdate),i.addEventListener("selectstart",this._onCaretUpdate)}disconnect(){let e=this.textInputManager.htmlInput,{domElement:t,sharedAssets:i}=this.eventContext;t.removeEventListener("pointerdown",this._onMouseDownFocusIn),e?.removeEventListener("keyup",this._onCaretUpdate),e?.removeEventListener("keydown",this._onCaretUpdate),e?.removeEventListener("beforeinput",this._onCaretUpdate),e?.removeEventListener("paste",this._onCaretUpdate),e?.removeEventListener("cut",this._onCaretUpdate),e?.removeEventListener("select",this._onCaretUpdate),e?.removeEventListener("selectstart",this._onCaretUpdate),this._textInputs.forEach(e=>{let t=Fg(e.data.geometry,this.eventContext.sharedAssets.data);e.textGeometry.setText(t,i)}),t.removeEventListener("pointerdown",this._onMouseDown,!1),t.removeEventListener("pointerup",this._onMouseUp,!1),t.removeEventListener("pointermove",this._onMouseMove,!1),window.removeEventListener("keydown",this._onKeyPress),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers(),this.textInputManager.disconnect()}focusOnTextInput(e){this.textInputManager.focus(e),this.textInputManager.onTextMaterialChanged();let t=this.textInputManager.htmlInput;if(!t||null===e)return;this.textInputManager.updateTextInputStyles(),this.eventContext.renderer.sceneHelpersOnTop=this.sceneHelpers,this.eventContext.renderer.pipeline.enableHelpers(),this.textInputManager.isDragging=!1,t.value=Fg(e.textGeometry.userData.parameters,this.eventContext.sharedAssets.data),t.setSelectionRange(0,0),this.textInputManager.helper.show(e),t.style.display="block",t.addEventListener("input",this._onTextEdit),this.textInputManager.updatePlane();let{domElement:i}=this.eventContext;i.removeEventListener("pointerdown",this._onMouseDownFocusIn),i.addEventListener("pointerdown",this._onMouseDown,!1),i.addEventListener("pointerup",this._onMouseUp,!1),i.addEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress)}},Fy=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.onVoice=({value:e,frequencies:t})=>{this.events.forEach(e=>{e.dispatch()})}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"AIAssistantListener"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new Fx(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("voice",this.onVoice))}disconnect(){this.openAIRealtime?.off("voice",this.onVoice)}},Fx=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.actions=Lv(t,t.actions,r,a,o,i)}dispatch(){this.dispatchActions(this.actions)}
vendor: 1,591 bytes, line 8181
8181dispatchActions(e){e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}},Fb=class extends Br{constructor(e,t){super(e),this.eventManager=t,this.events=[],this.onTriggerEvent=({description:e,direction:t})=>{let i=this.events.find(t=>t.data.description===e);i&&("backward"===t?i.dispatchReverse():i.dispatch())}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(e=>"AIAssistantTrigger"===e.data.type&&!e.data.disabled).forEach(t=>{this.events.push(new Fw(t.id,t.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("trigger_event",this.onTriggerEvent))}disconnect(){this.openAIRealtime?.off("trigger_event",this.onTriggerEvent)}},Fw=class{constructor(e,t,i,r,a,o){this.id=e,this.data=t,this.object=i,this.actions=Lv(t,t.actions,r,a,o,i)}dispatch(){let e=this.actions;
8181e.Audio.forEach(e=>e.dispatchConditional()),e.Particles.forEach(e=>e.dispatchConditional()),e.Video.forEach(e=>e.dispatchConditional()),e.Create.forEach(e=>e.dispatch()),e.Destroy.forEach(e=>e.dispatch()),e.Reset.forEach(e=>e.dispatch()),e.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),e.Transition.forEach(e=>e.play()),e.Animation.forEach(e=>e.play()),e.SwitchCamera.forEach(e=>e.play()),e.SceneTransition.forEach(e=>e.dispatch()),e.SetVariable.forEach(e=>e.checkConditions()),e.SetVariable.forEach(e=>e.dispatch()),e.DynamicVariablePlay.forEach(e=>e.dispatch()),e.ClearLocalStorage.forEach(e=>e.dispatch()),e.UserAPI.forEach(e=>e.dispatch())}dispatchReverse(){let e=this.actions;e.Transition.forEach(e=>e.reverseFromCurrent()),e.Particles.forEach(e=>e.reverseFromCurrent()),e.Animation.forEach(e=>e.reverseFromCurrent()),e.SwitchCamera.forEach(e=>e.reverseFromCurrent()),e.Create.forEach(e=>e.dispatchStop())}},FS=class{constructor(e,t,i,r,a){this.publish=e,this.controlsManager=t,this.animationControls=i,this.eventContext=r,this.sharedVariables=a,this.isEnabled=!1,this.activateCount=0,this.needsMouse=!1,this.needsRaycast=!1,this.onTouchMovePreventScroll=e=>{let t=window.parent!==window,i=document.documentElement.scrollHeight>document.documentElement.clientHeight||document.documentElement.scrollWidth>document.documentElement.clientWidth;(e.touches.length>1||this.preventTouchScroll||!1===t&&!1===i)&&e.preventDefault()},this.onMouseWheelPreventScroll=e=>{this.preventScroll&&e.preventDefault()},this.onMouseMove=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:e.buttons>0}},this.onMouseDown=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:!0}},this.onMouseUp=e=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(e),pressed:!1}},this.getMousePosition=e=>{let{domRect:t}=this.eventContext,{pageX:i,pageY:r}=e.touches?.length>0?e.touches[0]:e;return{x:i-(t.left+window.scrollX),y:r-(t.top+window.scrollY)}},this.stopRaycast=e.stopRaycast,this.preventScroll=e.preventScroll,this.preventTouchScroll=e.preventTouchScroll,this.hideCursor=e.hideCursor,this.requestRender=r.requestRender}activate(e=!1){if(this.isEnabled)return;this.isEnabled=!0,this.initializeActionsDependentStates(),this.needsMouse&&(this.eventContext.domElement.addEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.addEventListener("pointerdown",this.onMouseDown)),this.handlers={Spline:new Bl(this.eventContext),VariableChange:new zn(this.eventContext,this.sharedVariables,this,this.needsMouse,this.needsRaycast),API:new Fn(this.eventContext,this),WEBHOOK:new Fl(this.eventContext,this),AIAssistantListener:new Fy(this.eventContext,this),AIAssistantTrigger:new Fb(this.eventContext,this),Conditional:new Bg(this.eventContext,this),Start:new zs(this.eventContext,this),Basic:new Bc(this.eventContext,this,this.needsRaycast),MouseHover:new B7(this.eventContext,this),Scroll:ne
8181w zi(this.eventContext,this),Follow:new BG(this.eventContext,this),DragDrop:new BR(this.eventContext,this),LookAt:new B4(this.eventContext),Resize:new Fa(this.eventContext,this),Textfields:new Fv(this.eventContext,this)};let{page:t,domElement:i}=this.eventContext;this.hideCursor&&(i.style.cursor="none"),t.traverseEntity(e=>{e.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(e=>e.connect()),i.addEventListener("wheel",this.onMouseWheelPreventScroll),i.addEventListener("touchmove",this.onTouchMovePreventScroll),this.activateCount++,e||this.eventContext.sharedAssets.openAIRealtime?.connect()}deactivate(e=!1){if(!this.isEnabled)return;this.isEnabled=!1,this.eventContext.domElement.removeEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.removeEventListener("pointerdown",this.onMouseDown),this.eventContext.domElement.removeEventListener("pointerup",this.onMouseUp),this.eventContext.sharedAssets.mouseProperty=null,this.eventContext.sharedAssets.raycastProperty=null;let{page:t,domElement:i}=this.eventContext;i.style.cursor="",Object.values(this.handlers).forEach(e=>e.disconnect()),this.controlsManager.gameControl?.disposeActions(),this.controlsManager.disconnectEvents(),t.traverseEntity(e=>{e.removeEventListener("requestRender",this.requestRender),e.destroyedInAction=!1}),i.removeEventListener("touchmove",this.onTouchMovePreventScroll),i.removeEventListener("wheel",this.onMouseWheelPreventScroll),this.animationControls.onExitPlayMode(),e||this.eventContext.sharedAssets.openAIRealtime?.disconnect()}dispose(){this.deactivate(),Object.values(this.handlers).forEach(e=>e.dispose())}get isPaused(){return this.isEnabled}pause(){this.deactivate()}resume(){this.activate()}reset(){this.deactivate(!0),this.activate(!0),this.controlsManager.deactivate(),this.controlsManager.activate(this),this.controlsManager.page.updateMatrixWorld(!0),this.controlsManager.rebuildBVH()}updateUseWindowEvents(e){let t=this.isEnabled;t&&this.deactivate(),this.eventContext.useWindowEvents=e,t&&this.activate()}initializeActionsDependentStates(){let e=this.eventContext.sharedAssets;e.resetDynamicVariablePlayState();let t=i=>{if("Conditional"===i.data.type&&(i.data.ifActions.forEach(t),i.data.elseActions.forEach(t)),"Conditional"===i.data.type||"SetVariable"===i.data.type)for(let e of"Conditional"===i.data.type?i.data.condition:i.data.expression)"id"in e&&Array.isArray(e.id)&&("mouse"===e.id[0]&&(this.needsMouse=!0),"raycast"===e.id[0]&&(this.needsRaycast=!0));"DynamicVariablePlay"===i.data.type&&""!==i.data.variableId&&("Play"===i.data.mode||"PlayPause"===i.data.mode||"Toggle"===i.data.mode)&&e.setDynamicVariablePlayState(i.data.variableId,"Stopped")};this.eventContext.page.traverseEntity(e=>{if(e.data?.events.length)for(let i of e.data.events)if("VariableChange"===i.data.type&&("mouseProperty"===i.data.variableId&&(this.needsMouse=!0),"raycastProperty"===i.data.variableId&&(this.needsRaycast=!0)),"Conditional"===i.data.type)for(let e of["inActions","outActions"])i.data[e].forEach(t);else if("DragDrop"===i.data.type)for(let e of["drag","drop"])i.data.dragDropActions[e].forEach(t);else if("GameControl"===i.data.type)for(let e of["idle","move","jump","run"])i.data.gameActions[e].forEach(t);else if("Resize"===i.data.type)for(let e of i.data.breakpoints)e.data.actions.forEach(t);else"LookAt"===i.data.type||"API"===i.data.type||i.data.actions.forEach(t)})}},F_=class{constructor(e,t,i,r,a){this._aspect=1,this.enableResponsive=!1,this._renderer=e,this._camera=t,this._frameSize=new t9().copy(i),this._editorSize=new t9().copy(r),this._aspect=t.aspect,this._fov=a??t.fov}set frameSize(e){this._frameSize.copy(e)}updateRenderer(){this._renderer&&this._renderer.setSize(this._frameSize.x,this._frameSize.y)}updateViewport(){if(!this._renderer||!this._camera||"PerspectiveCamera"!==this._camera.cameraType)return;let e=this._frameSize.x,t=this._frameSize.y,i=this._editorSize.y;this._aspect=e/t,t<=i&&(this._camera.zoom*=i/t),this._renderer.setViewport(0,0,e,t)}updateCamera(e=!0){if(this._camera)if("PerspectiveCamera"===this._camera.cameraType){let t=this._frameSize.y,i=this._editorSize.y,r=this._fov;if(e&&t>i){let e=((t-1080)/1080*14+1)/100;r*=t/i*(1-e)}this._camera.aspect=this._aspect,this._camera.fov=r,this._camera.updateProjectionMatrix()}else this._camera.setViewplaneSize(this._frameSize.x,this._frameSize.y,this.enableResponsive)}setCamera(e){this._camera=e,this._aspect=e.aspect,this._fov=e.fov}revert(){let e=window.innerWidth,t=window.innerHeight;this._renderer&&(this._renderer.setViewport(0,0,e,t),this._renderer.setSize(e,t)),this._camera&&(this._camera.aspect=e/t,this._camera.fov=this._fov,this._camera.setViewplaneSize(e,t,this.enableResponsive),this._camera.updateProjectionMatrix())}},FA=class{get sharedAssets(){return this.shared}constructor(e,t={},i=!0){this.shared=new CN(e.shared,t,!0,i),this.scene=new O9(e.scene,this.sharedAssets),this.shared.setEntityOpContext({scene:this.scene,shared:this.shared})}reset(e,t){this.scene.clearScene(),this.sharedAssets.reset(e.shared),this.scene.resetAfterClear(e.scene,this.sharedAssets)}resetPersonalCameraFromDocumentData(){for(let e of this.scene.children)e instanceof D0&&!e.uiScene&&e.personalCamera.updateState(e.data.camera,{scene:this.scene,shared:this.shared})}dispose(){this.scene.dispose(),this.shared.dispose()}gc(){this.shared.geometryCache.startGc(),this.shared.geometryCache2.startGc(),this.scene.traverseEntity(e=>{e instanceof CH&&e.markGeometryAsReachable(this.shared)}),this.shared.geometryCache.endGc(),this.shared.geometryCache2.endGc()}},FM=class{constructor({x:e=10,y:t=10}){this._startTime=0;let i=document.getElementById("spe-perfs");i?this.element=i:(this.element=document.createElement("div"),document.body.appendChild(this.element),this.element.style.position="absolute",this.element.style.zIndex="10000",this.element.style.fontFamily="monospace",this.element.style.background="black",this.element.style.color="white",this.element.style.padding="10px",this.element.style.opacity="0.5",this.element.style.fontSize="11px",this.element.setAttribute("id","spe-perfs")),this.element.style.left=`${e}px`,this.element.style.top=`${t}px`}dispose(){this.element.parentElement?.removeChild(this.element)}start(){this._startTime=performance.now()}end(){let e=performance.now()-this._startTime;this.element.innerHTML=e.toFixed(3)+" ms"}};function FC(e){return e instanceof CZ?"SubdivObject":"NonParametricGeometry"===e.geometry.type?"NonParametric":"Mesh"}var FE=tB(tG(),1);function FT(e){return"texture"===e.type||"video"===e.type||"matcap"===e.type?{...e.data,updateTexture:t=>e.color.texture.image.updateSrc(t)}:{...e.data}}var FP=new _0(0,0,0,1),FD={color:["color"],fresnel:["color"],normal:[],gradient:["colors"],depth:["colors"],texture:[],video:[],noise:["colorA","colorB","colorC","colorD"],toon:["colors","shadowColor"],outline:["outlineColor","contourColor"],transmission:["attenuationColor"],matcap:[],pattern:["colorA","colorB"],light:[],displace:[],rainbow:[],particle:[]},FO=new t9;function FI(e){let t=new _0(0,0,0,1);try{t.setStyle(e)}catch{}finally{return t}}var FR=class{constructor(e,{renderOnDemand:t,renderMode:i="auto",wasmPath:r}={}){this._viewportMode=1,this._viewportWidth=window.innerWidth,this._viewportHe
8181ight=window.innerHeight,this._proxyObjectCache=new Map,this._variablesCache=new Map,this._isPaused=!1,this._renderRequested=!1,this._skipRender=!1,this.time=performance.now(),this.dt=0,this.currentTAAFrame=0,this.disposed=!1,this._requestRenderAutoMode=()=>{this._skipRender=!1},this.requestRender=()=>{this._renderRequested=!0},this.render=e=>{if(this.time=e,this._lastTime&&(this.dt=this.time-this._lastTime),this._lastTime=this.time,this._perfs?.start(),!this._renderer||!this._isPaused&&("manual"===this.renderMode&&!this._renderRequested||"auto"===this.renderMode&&this._skipRender))return void this._perfs?.end();if(this._renderRequested=!1,this._skipRender=!0,this._controls&&(this._skipRender=this._controls.update(this.dt)??!1),this._eventManager&&(this._eventManager.handlers?.Start.hasVideoAction||this._eventManager.handlers?.Basic.hasVideoAction||this._eventManager.handlers?.Conditional.hasVideoAction)&&(this._skipRender=!1),this._animationControls?.update(this.dt),this._skipRender?(this.currentTAAFrame++,this.currentTAAFrame<32?this._skipRender=!1:this.currentTAAFrame=0):this.currentTAAFrame=0,this._scene?.traverseVisibleEntity(e=>{"ParticleSystem"===e.type&&(e.update(this.dt),this._skipRender=!1)}),this._scene&&this._scene.activeCamera!==this._camera&&(this._camera=this._scene.activeCamera),this._eventManager?.isEnabled&&((this._eventManager.handlers?.Follow).onAnimationFrameDamping(),(this._eventManager.handlers?.LookAt).onAnimationFrameDamping(),(this._eventManager.handlers?.DragDrop).onAnimationFrameDamping()),this._scene&&this._camera){if(this._scene.pathConstraints.applyConstraints(this._scene),this._renderer.sceneTransitionTimeRemaining>0){this._renderer.sceneTransitionTimeRemaining-=this.dt;let e=1-this._renderer.sceneTransitionTimeRemaining/this._renderer.sceneTransitionDuration;this._renderer.pipeline.sceneTransitionPass.uniforms.mixRatio.value=e,this._skipRender=!1}else this._renderer.pipeline.sceneTransitionFromTexture=null;this._renderer.renderSplineScene(this._scene,this._camera)}this.canvas.dispatchEvent(this._renderedEvent),this._perfs?.end()},this._resize=e=>{if(this._renderer){if(1===this._viewportMode&&this._frameView&&(this._frameView.frameSize=FO.set(this._viewportWidth,this._viewportHeight)),e){let e=this._viewportWidth,t=this._viewportHeight;this._renderer.setSize(e-1,t-1,!1),this._renderer.setSize(e,t,!1)}else this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1);if(this._camera=this._scene?.activeCamera,this._scene?.updateViewPlaneSize(this._frameView?.frameSize?.x??this._viewportWidth,this._frameView?.frameSize?.y??this._viewportHeight,this._frameView?.enableResponsive??!1),this._camera){let e=Object.values(this._data?.frames??{})[0].preset??"fullscreen";this._frameView?.setCamera(this._camera),this._frameView?.updateCamera("fullscreen"!==e),"PerspectiveCamera"===this._camera.cameraType&&(this._camera.aspect=this._viewportWidth/this._viewportHeight),this._camera.updateProjectionMatrix()}this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect()),this._requestRenderAutoMode()}},this._debouncedResize=u9(this._resize,10),this._onScroll=e=>{this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect())},this.canvas=e,this.renderMode=t?"auto":i,void 0!==r&&(this._wasmPath=pd(r,"/")),this._renderedEvent=new CustomEvent("rendered",{bubbles:!0}),Object.defineProperty(this._renderedEvent,"target",{writable:!1,value:this}),window.location.search.includes("perfs")&&(this._perfs=new FM({x:10,y:10})),function(e){e.addEventListener("pointerdown",pA,!0),e.addEventListener("pointerdown",pC,!0),e.addEventListener("pointermove",pC,!0),e.addEventListener("pointerup",pM,!0),e.addEventListener("pointercancel",pM,!0),e.addEventListener("pointerleave",pM,!0),window.addEventListener("keydown",pT,!0),window.addEventListener("keyup",pP,!0)}(e)}async load(e,t,i){e.endsWith(".spline")||e.endsWith(".splinecode"),this.disposed=!1;let r=await (await fetch(e,i)).arrayBuffer();await this.start(r,{variables:t})}async start(e,{interactive:t=!0,variables:r}={}){var a,o;let l,h,c,d,p;if(this.disposed)return;RA.init();let f=await Ft(e);this._data=f;let m=(l=[],f.scene.objects.traverse((e,t)=>
8181{"Mesh"===t.type&&"NonParametricGeometry"===t.geometry.type&&void 0!==t.geometry.data.draco&&l.push(t)}),l);f.version&&(0,FE.default)(f.version,"1.12.98"),void 0!==this._wasmPath&&this.setUIWasmUrl(`${this._wasmPath}/ui.wasm`),await Promise.all([m.length&&z7(this._wasmPath),EH(f)&&(a=this._wasmPath,A3||(A3=async function(){let e=i.e(64919).then(i.bind(i,64919)),[t,r]=await Promise.all([e,fetch(`${a??"https://unpkg.com/@splinetool/[email protected]/build"}/boolean.wasm`).then(e=>e.arrayBuffer())]),o=t.default,l=await o({wasmBinary:r});A2(l)}())),(h=!1,f.scene.objects.traverse((e,t)=>{"Mesh"===t.type&&"SubdivGeometry"===t.geometry.type&&(h=!0)}),h&&function(e){if(!_n)return _d||(_d=t());async function t(){let t=i.e(17858).then(i.bind(i,17858)),[r,a]=await Promise.all([t,fetch(`${e??"https://unpkg.com/@splinetool/[email protected]/build"}/process.wasm`).then(e=>e.arrayBuffer())]),o=r.default,l=await o({wasmBinary:a});_i(l),_n=!0}}(this._wasmPath)),xw.physicsEnabled(f.scene.objects)&&(pZ||(pZ=async function(){let e=await i.e(75806).then(i.bind(i,75806));await e.init(),pN(e)}())),Ea(f)&&function(){if(Cm=!0,!Cv)return En||(En=e());async function e(){let e=await i.e(46595).then(i.bind(i,46595));Cu(e),Cv=!0}}(),OZ(f)&&function(){if(!O4)return Id||(Id=e());async function e(){let e=await i.e(97486).then(i.bind(i,97486));O1(e),O4=!0}}(),(c=!1,d=[],f.scene.objects.traverse((e,t)=>{if("Page"===t.type&&void 0!==t.uiScene&&t.uiScene.objects.traverse((e,t)=>{if(void 0===t.events||!1===Array.isArray(t.events))return!0;Ch(t.events,d),c=c||d.some(e=>"Audio"===e.data.type)}),void 0===t.events||!1===Array.isArray(t.events))return!0;Ch(t.events,d),c=c||d.some(e=>"Audio"===e.data.type)}),c&&function(){if(!Cl)return Cc||(Cc=e());async function e(){await i.e(21750).then(i.bind(i,21750)),Cs(void 0!==window?window:i.g),Cl=!0}}()),Dm(f)&&function(){if(!Df)return Dw||(Dw=e());async function e(){let e=await i.e(49609).then(i.bind(i,49609));Da(e.default??e),Df=!0}}(),(p=!1,f.scene.objects.forEach(e=>{"Page"===e.data.type&&!p&&e.data.publish.gameControlObject&&xw.traverseModuleInstances(f,e.id,(e,t,i)=>{for(let e of i)"GameControl"===e.data.type&&e.data.navmesh.enabled&&(p=!0)})}),p&&(o=this._wasmPath,pF||(pF=async function(){let e=i.e(10119).then(i.bind(i,10119)),[t,r]=await Promise.all([e,fetch(`${o??"https://unpkg.com/@splinetool/[email protected]/build"}/navmesh.wasm`).then(e=>e.arrayBuffer())]),a=t.default,l=await a({wasmBinary:r});pz(l)}())))].filter(Boolean)),m.length&&await Fi(m),this._eventManager?.deactivate(),this._controls?.deactivate(),this._scene?.dispose();let g=new FA(f);g.resetPersonalCameraFromDocumentData(),this._scene=g.scene,this._sharedAssetsManager=g.sharedAssets,this._camera=this._scene.activeCamera,window.location.search.includes("merge-geometries")&&(performance.now(),!function(e,t){let i,r,a=(i={},t.traverseEntity(t=>{if(!t.visible||!(t instanceof _H)||"Mesh"!==t.type||Array.isArray(t.material)||t.states&&Object.keys(t.states).length)return;let r=t.parent;for(;r;){if(r instanceof _H&&t.states&&Object.keys(t.states).length)return;r=r.parent}let a=t.material.uuid,o=e.shared.materials[a];if(o){if(!vE.isMergable(o))return}else{let i=e.scene.objects.get(t.uuid)?.data;if(i&&"material"in i&&"string"!=typeof i.material){if(!vE.isMergable(i.material))return;a=vE.getHash(i.material)}}i[a]||(i[a]={});let l=i[a][FC(t)];if(l){if(l.push(t),t.cloner)for(let e of t.cloner.children)l.push(e)}else if(i[a][FC(t)]=[t],t.cloner)for(let e of t.cloner.children)i[a][FC(t)].push(e)}),i),o=(r=0,Object.values(a).forEach(e=>{Object.values(e).forEach(e=>{let t=e.length;t>r&&(r=t)})}),r),l=Array(o),h=0,c=Array(o),d=0,p=Array(o),f=0,m=Array(o),g=0;for(let[e,i]of Object.entries(a))for(let e of Object.values(i)){if(d=0,f=0,e.forEach(e=>{e instanceof _H&&(c[d++]=e.geometry.clone(),p[f++]=e)}),f<2)continue;for(let e=0;e<f;e++)p[e].updateWorldMatrix(!0,!1),c[e].applyMatrix4(p[e].matrixWorld),0>p[e].matrixWorld.determinant()&&function(e){let t;if(e.index)for(let i=0;i<e.index.array.length;i+=3)t=e.index.array[i],e.index.array[i]=e.index.array[i+2],e.index.array[i+2]=t}(c[e]);let i=yp(c.slice(0,d),!1);if(i){let e;(e=new r7(i,p[0].material)).castShadow=p[0].castShadow,e.receiveShadow=p[0].receiveShadow,t.add(e);let r=e=>{for(let t of(g=0,e))t.children&&r(t.children),t instanceof _H&&(Array.isArray(t.material)||a[t.material.uuid]&&a[t.material.uuid][FC(t)]&&a[t.material.uuid][FC(t)].length>1||(m[g++]=t));for(let e=0;e<g;e++)t.attach(m[e])};for(let e=0;e<f;e++){let t=p[e];r(t.children),l[h++]=t}}}for(let e=0;e<h;e++)l[e].removeFromParent()}(f,g.scene),performance.now()),EH(f)&&this._scene.traverse(e=>{EQ(e)&&e.recomputeBoolean()}),this._sharedAssetsManager.setRequestRender(()=>{this._requestRenderAutoMode(),this._scene?.traverse(e=>
vendor: 4,222 bytes, line 8181
8181{e instanceof EA&&e.pendingMediaLoad&&e.update({scene:this._scene,shared:this._sharedAssetsManager})})}),this._scene?.traverse(e=>{"ParticleSystem"===e.type&&(e.wakeUp(),e.data.autoPlay?e.start():e.stop())});let v=Object.keys(f.shared.fonts).map(e=>this._sharedAssetsManager.getFont(e).loadingPromise);if(Promise.all(v).then(()=>{this.disposed||(g.scene.markNeedsUpdateRendererDirty(),this._requestRenderAutoMode())}),Ea(f)&&function(e){if(xw.physicsEnabled(e.scene.objects))return!0;let t=!1;return e.scene.objects.traverse((e,i)=>{if(i.events){if(Array.isArray(i.events)){for(let e of i.events)if(!0!==e.data.disabled&&"GameControl"===e.data.type&&e.data.collisionEnabled){t=!0;break}}else for(let e of Object.values(i.events))if(!0!==e.disabled&&"GameControl"===e.type&&e.collisionEnabled){t=!0;break}}}),t}(f)&&await Promise.all(v),Dm(f)){let e=[];this._scene.traverseEntity(t=>{(t instanceof D7||t instanceof D0)&&t.uiCanvas&&e.push(t.uiCanvas)}),await Promise.all(e.map(e=>e.promise))}if(this._scene.rewriteEventsBeforeGoToPlayMode(),RJ(this._scene.activePage,this._sharedAssetsManager),!this._renderer){this._renderer=new PQ({canvas:this.canvas,antialias:!1,alpha:!0,stencil:!1,depth:!1,powerPreference:"high-performance"}),this._renderer.hdTransmission=!0===f.scene.publish.hdTransmission;let e=this._getPixelRatio(/Mobi|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)?f.scene.publish.settings.web.pixelRatioMobile:f.scene.publish.settings.web.pixelRatioDesktop);if(this._renderer.setPixelRatio(e),this._renderer.pipeline.enableUIOverlay(),this._renderer.pipeline.addEventListener("smaaloaded",this._requestRenderAutoMode),f.shared.images.SplineWatermark){let e=this._sharedAssetsManager.getImage("SplineWatermark");await e.loadPromise;let t=e.getTexture(1001);this._renderer.pipeline.setWatermark(t)}}OZ(f)&&this._scene.initializeSplatViewer(),void 0!==f.scene.blueNoiseTextureData&&this._renderer.pipeline.updateBlueNoiseTexture(f.scene.blueNoiseTextureData);let y=Object.values(f.frames)[0];if(this._frameView?this._frameView.setCamera(this._camera):("fullscreen"===y.preset?(this._viewportMode=1,this.canvas.style.display="block",this.canvas.parentElement&&(this._viewportWidth=this.canvas.parentElement.clientWidth||300,this.canvas.style.width="100%"),this.canvas.parentElement&&(this._viewportHeight=this.canvas.parentElement.clientHeight||150,this.canvas.style.height="100%")):(this._viewportMode=2,this._viewportWidth=y.size[0],this._viewportHeight=y.size[1],this.canvas.style.width=`${this._viewportWidth}px`,this.canvas.style.height=`${this._viewportHeight}px`),this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1),this._frameView=new F_(this._renderer,this._camera,new t9(this._viewportWidth,this._viewportHeight),new t9(window.innerWidth,window.innerHeight)),this._frameView.enableResponsive=(y.allowResponsive??!1)&&"fullscreen"===y.preset),t){let e=new Bi(this._renderer,this.data.scene.publish,this._scene,()=>this._scene.activeCamera,this._sharedAssetsManager,this._requestRenderAutoMode,!0,y);this._scene.updateMatrixWorld(!0),this._controls=new z2(e),this._animationControls=new z5(this._scene,this._requestRenderAutoMode),this._eventManager=new FS(f.scene.publish,this._controls,this._animationControls,e,f.shared.variables),this._eventManager.activate(),this._controls.activate(this._eventManager)}this._resize(),this._scene.activePage.data.postprocessing.depthOfField.enabled&&Promise.all(this._sharedAssetsManager.getImageLoadPromises()).then(()=>{this.disposed||this._resize(!0)}),void 0!==r&&this.setVariables(r),0===this.dt&&(this.render(performance.now()),setTimeout(()=>{this._renderer?.setAnimationLoop(this.render)},0)),this._resizeObserverTimeout=setTimeout(()=>{!this._resizeObserver&&this.canvas.parentElement&&(this._resizeObserver=new ResizeObserver(()=>{this._viewportWidth=this.canvas.clientWidth,this._viewportHeight=this.canvas.clientHeight,this._debouncedResize()}),this._resizeObserver.observe(this.canvas.parentElement))},300),document.addEventListener("scroll",this._onScroll)}setVariables(e){if(void 0!==this._data)for(let[t,i]of Object.entries(e))this.setVariable(t,i)}setVariable(e,t){let i=this._getVariableByName(e);
vendor: 4,682 bytes, line 8181
8181if(!i||"dynamicVariableType"in i.data)void 0===i||i.data;else{let e=t;"number"==typeof i.data.value?e="number"==typeof t?t:"boolean"==typeof t?+(!0===t):parseFloat(t):"boolean"==typeof i.data.value?e="number"==typeof t?!!t:"boolean"==typeof t?t:"false"!==t.toLocaleLowerCase()&&!!t:"string"!=typeof i.data.value&&void 0!==i.data.value.textValue&&(e=t.toString());let r="string"==typeof e?{textValue:e}:e;this._sharedAssetsManager?.updateVariable(i.id,r),this.requestRender(),this._requestRenderAutoMode()}}getVariables(){let e={};return this._data&&this._data.shared.variables.forEach(t=>{void 0===e[t.data.name]&&(e[t.data.name]=this._getVariableValue(this._sharedAssetsManager.getVariable(t.id)))}),e}getVariable(e){let t=this._getVariableByName(e);if(t){let e=this._sharedAssetsManager.getVariable(t.id);return this._getVariableValue(e)}}_getVariableValue(e){return"string"!=typeof e&&xC.isTextValue(e)?xC.getDisplayedValue(e):e}_getVariableByName(e){if(this._data){if(this._variablesCache.has(e))return this._variablesCache.get(e);let t=this._data.shared.variables.find(t=>t.data.name===e);return t&&this._variablesCache.set(e,t),t}}_getPixelRatio(e){switch(e){case 0:return window.devicePixelRatio;case 1:return 1;case 2:return 2}}findObjectById(e){let t=this._scene?.getObjectByProperty("uuid",e);return this._createProxyObject(t)}findObjectByName(e){let t=this._scene?.getObjectByName(e);return this._createProxyObject(t)}getAllObjects(){let e=[];return this._scene?.traverseEntity(t=>{if(t.uuid!==gg&&!this._scene.isInvisibleObjects(t)&&!(t instanceof D0)){let i=this._createProxyObject(t);i&&e.push(i)}}),e}getSplineEvents(){return(this._eventManager?.handlers?.Spline).splineEvents}emitEvent(e,t){(this.findObjectById(t)||this.findObjectByName(t))?.emitEvent(e)}emitEventReverse(e,t){(this.findObjectById(t)||this.findObjectByName(t))?.emitEventReverse(e)}addEventListener(e,t){this.canvas.addEventListener(e,t)}removeEventListener(e,t){this.canvas.removeEventListener(e,t)}setZoom(e){this._controls?.orbitControls instanceof zB&&this._controls?.orbitControls.setZoom(e)}get eventManager(){return this._eventManager}get controls(){return this._controls}setSize(e,t){this._viewportWidth=e,this._viewportHeight=t,this._viewportMode=2,this._resize()}setBackgroundColor(e){let t=FI(e);this._scene?.activePage.setBackgroundColor(t),this._requestRenderAutoMode()}dispose(){var e;this.disposed=!0,this._eventManager?.dispose(),this._scene?.dispose(),this._scene=void 0,this._camera=void 0,A6&&A6.disposeAll(),this._sharedAssetsManager?.setRequestRender(()=>{}),this._sharedAssetsManager?.dispose(),this._sharedAssetsManager=void 0,this._proxyObjectCache.forEach(e=>{hz.unsubscribe(e)}),this._proxyObjectCache.clear(),this._variablesCache.clear(),this._renderer?.pipeline.removeEventListener("smaaloaded",this._requestRenderAutoMode),this._renderer?.setAnimationLoop(null),this._renderer?.dispose(),this._renderer=void 0,this._debouncedResize.cancel(),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0),void 0!==this._resizeObserverTimeout&&(clearTimeout(this._resizeObserverTimeout),this._resizeObserverTimeout=void 0),this.canvas.style.width="",this.canvas.style.height="",this.canvas.removeAttribute("width"),this.canvas.removeAttribute("height"),this._frameView=void 0,this._controls?.deactivate(),this._controls=void 0,this._animationControls=void 0,this._eventManager?.eventContext.dispose(),this._eventManager=void 0,this._splatViewer=void 0,this._data=void 0,this._perfs=void 0,this.dt=0,this._lastTime=void 0,(e=this.canvas).removeEventListener("pointerdown",pA,!0),e.removeEventListener("pointerdown",pC,!0),e.removeEventListener("pointermove",pC,!0),e.removeEventListener("pointerup",pM,!0),e.removeEventListener("pointercancel",pM,!0),e.removeEventListener("pointerleave",pM,!0),window.removeEventListener("keydown",pT,!0),window.removeEventListener("keyup",pP,!0),document.removeEventListener("scroll",this._onScroll),RA.dispose()}get isStopped(){return this._isPaused}stop(){this._isPaused||(this._renderer?.setAnimationLoop(null),this._isPaused=!0,this._eventManager?.pause(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!1))}play(){this._isPaused&&(this._isPaused=!1,this._eventManager?.resume(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!0),this._renderer?.setAnimationLoop(this.render))}setGlobalEvents(e){this._eventManager?.updateUseWindowEvents(e)}get data(){return this._data}_createProxyObject(e){let t,i,r,a;if(!this._scene)return;let o=this._scene;if(null==e)return;if(this._proxyObjectCache.has(e.uuid))return this._proxyObjectCache.get(e.uuid);e.traverseAncestors(e=>
8181{e instanceof D0&&(t=e.name)});let l=this._sharedAssetsManager,h={shared:l,scene:this._scene},c=t=>{if(null===t||"Base State"===t)return null;if(t&&e.data.states){let i=e.data.states.find(e=>e.data.name===t);return i?i.id:void 0}},d="material"in e?e.material:void 0,p={name:e.name,uuid:e.uuid,visible:e.visible,intensity:e.intensity,position:e.position,rotation:e.rotation,scale:e.scale,type:e.data.type,page:t,material:d?(r=(i=Array.isArray(d)?d[0]:d).layers.map(FT),a=i.layers.find(e=>"light"===e.type),{layers:r,alpha:a.node.alphaOverride?.value??1}):void 0,parentUuid:e.parent instanceof D0||e instanceof O9?void 0:e.parent?.uuid,emitEvent(t){e.dispatchEvent({type:"userEvent",eventName:t})},emitEventReverse(t){e.dispatchEvent({type:"userEvent",eventName:t,reverse:!0})},hide(){e.visible&&(e.visible=!1,h.shared.requestRender())},show(){e.visible||(e.visible=!0,h.shared.requestRender())},get state(){let t=e.stateSelection;if(null!==t)return e.data.states.find(({id:e})=>e===t)?.data.name},set state(u){let t;if(void 0!==u){let i="string"==typeof u?e.data.states.find(({id:e})=>e===u):e.data.states[u];if(i)t=i.id;else{let e="string"==typeof u?c(u):void 0;e&&(t=e)}}e.changeSelectedState(t??null,h),e.currentState=t??null,e.dispatchEvent({type:"completeState",state:t??null}),h.shared.requestRender()},transition(t){let i=this,r,a=RA.timeline({autoplay:t.autoPlay??!0}),h={transition({from:t,to:h,duration:d,delay:p,...f}){let m=c(t);void 0===m&&(m=r);let g=c(h);r=g;let v=new R8(e,m,g,{state:g,repeat:0,delay:p??0,delayDirection:"start-once",direction:"normal",duration:d??1e3,...f,...6===f.easing?gO.defaultData:5===f.easing?gH.defaultData:{}},l,!1,o.activePage);return a.add({...v.params,begin:()=>{(t&&m||"Base State"===t&&!m)&&(i.state=m??void 0)},complete:()=>{i.state=g??void 0}},a.duration),this},play(){return a.play(),this},pause(){return a.pause(),this},reset(){return a.reset(),this},seek(e){return a.seek(e),this}};return h.transition(t),h},set color(u){let t=FI(u);if(Dr.is(e)){e.color=t;return}if("Mesh"!==e.type||!("material"in e)||!(e instanceof CU))return;let i={r:t.r,g:t.g,b:t.b,a:t.a},r=Array.isArray(e.material)?e.material[0]:e.material,a=r.data.layers.find(e=>"color"===e.data.type)?.id;if(a)r.updateByOp({type:0,path:["layers",a],props:{color:{...i}}},r.data,h);else{let e=r.data,t=e.layers.find(e=>"light"===e.data.type);if(!t)return;let a=0===e.layers.indexOf(t)?t:null,o=e.layers.at(a?e.layers.indexOf(a)+1:0),l={type:4,fi:a?a.fi+(o?(o.fi-a.fi)/2:1):o?o.fi/2:1,id:t8.generateUUID(),data:{...vt.defaultData("color"),color:i},localIndex:0},c=e.layers.insertAfterHelper(a?.id??null,1),d=e.layers.runOp({...l,fi:c[0]}).data;Object.assign(r.data,{layers:d}),r.updateByOp({...l,path:["layers"]},r.data,h)}}},f=hz(p,(t,i)=>{let r=e[t],a=t.split(".");"material"===a[0]&&d&&function(e,t,i){let r=Array.isArray(i)?i[0]:i;if("layers"===e[0]){let i=parseInt(e[1]),a=r.layers[i],o=e[2];a&&o&&function(e,t,i){let r=e[0];try{var a,o,l;if(a=r,o=i.type,l=e.slice(1),!FD[o]?.includes(a))if("texture"===r||"video"===r){let r=i.color;!function(e,t,i){let r=e[0];if("repeat"===r||"offset"===r){let a=e[1];if(void 0===a)t instanceof Array&&2===t.length&&Object.assign(i.mat,{[r]:t});else{let e=i.mat[r],o=0===parseInt(a)?[parseFloat(t),e[1]]:[e[0],parseFloat(t)];Object.assign(i.mat,{[r]:o})}i.mat.updateMatrix()}else"rotation"===r?(i.mat.rotation=parseFloat(t),i.mat.updateMatrix()):"wrapping"===r||"minFilter"===r||"magFilter"===r?"wrapping"===r?i.texture.wrap=t:i.texture[r]=t:"image"===r&&"data"===e[1]&&i.texture.image.updateSrc(t)}(e.slice(1),t,r)}else{let a=e[1],o=i.getValue(r);o?.isVector3&&void 0!==a||o?.isVector2&&void 0!==a?o.setComponent(parseInt(a),t):i.setValue(r,t)}else if("colors"===r){if(e.length<2)throw Error("You cannot mutate the colors array, only its items");let a=parseInt(e[1]),o=i.getValue(r)?.[a];if(o)FP.setStyle(t),o.set(FP.r,FP.g,FP.b,FP.a);else throw Error("Color index out of range")}else i.getValue(r)?.setStyle(t)}catch{}}(e.slice(2),t,a)}else"alpha"===e[0]&&r.layers.forEach(e=>{"light"===e.type&&void 0!==e.node.alphaOverride&&(e.node.alphaOverride.value=t,t<1&&(r.transparent=!0))})}(a.slice(1),i,d),"object"!=typeof r&&Object.getOwnPropertyDescriptor(e,t)?.writable&&(e[t]=i),this._requestRenderAutoMode(),e.updateMatrix()});return this._proxyObjectCache.set(e.uuid,f),f}setUIWasmUrl(e){A8.skiaWasmUrl=e}pauseGameControls(){this._eventManager?.controlsManager.gameControl?.pause()}resumeGameControls(){this._eventManager?.controlsManager.gameControl?.resume()}async swapGeometry(e,t){let i;if("string"==typeof t)if(t.endsWith(".splinegeometry"))i=new Uint8Array(await (await fetch(t)).arrayBuffer());else throw Error("Only .splinegeometry format is supported");else i=t;let r=mj.deserialize(i),a="data"in r&&void 0!==r.data.draco;a&&await z7(this._wasmPath);let o=this._scene?.getObjectByProperty("uuid",e)??this._scene?.getObjectByName(e);
8181if(!o||"Mesh"!==o.data.type||!(o instanceof CU))return;let l={...o.data,geometry:r};for(let e of(a&&await Fi([l]),o.updateByOp({type:0,path:[],props:{geometry:l.geometry}},l,{shared:this._sharedAssetsManager,scene:this._scene},!1),o.data.states)){let t={...e.data};o.states||(o.states={}),o.states[e.id]=xm.patch(l,t)}return i}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.